diff --git a/.cargo/config.toml b/.cargo/config.toml index 52f85c40e..03277eeff 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -18,7 +18,6 @@ rustflags = [ "-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup", - "-C", "target-cpu=native", "-C", "panic=abort" ] @@ -26,7 +25,6 @@ rustflags = [ rustflags = [ "-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup", - "-C", "target-cpu=native", "-C", "panic=abort" ] @@ -42,34 +40,27 @@ rustflags = [ rustflags = [ "-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup", - "-C", "target-cpu=native", "-C", "panic=abort" ] [target.armv7-linux-androideabi] rustflags = [ - "-C", "target-cpu=native", "-C", "panic=abort", "-C", "target-feature=-outline-atomics" ] [target.aarch64-linux-android] rustflags = [ - "-C", "target-cpu=native", "-C", "panic=abort", "-C", "target-feature=-outline-atomics" ] [target.i686-linux-android] rustflags = [ - "-C", "target-cpu=native", "-C", "panic=abort", - "-C", "target-feature=-outline-atomics" ] [target.x86_64-linux-android] rustflags = [ - "-C", "target-cpu=native", "-C", "panic=abort", - "-C", "target-feature=-outline-atomics" ] \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 167de668c..0654a2504 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,10 +24,12 @@ strip = true [workspace.dependencies.wgt] package = "wgpu-types" -git = "https://github.com/gfx-rs/wgpu" -rev = "690a3fb3fb4c6652b6a1e0b9df9b40de5d6ba091" +git = "https://github.com/triniwiz/wgpu" +rev = "48f663f70d5b6e99a5b8a708876ce9642d78fbde" [workspace.dependencies] +env_logger = "0.11.5" +log = "0.4.22" parking_lot = "0.12.3" raw-window-handle = "0.6.2" canvas-2d = { path = "./crates/canvas-2d" } @@ -35,7 +37,9 @@ canvas-core = { path = "./crates/canvas-core" } canvas-webgl = { path = "./crates/canvas-webgl" } gl-bindings = { path = "./crates/gl-bindings" } canvas-c = { path = "./crates/canvas-c" } -skia-safe = { version = "0.73.0", features = ["textlayout"] } +skia-safe = { version = "0.78.2", features = ["textlayout"] } itertools = "0.13.0" -wgpu-core = { git = "https://github.com/gfx-rs/wgpu", rev = "690a3fb3fb4c6652b6a1e0b9df9b40de5d6ba091", features = ["wgsl", "vulkan", "metal", "raw-window-handle"] } -wgpu-types = { git = "https://github.com/gfx-rs/wgpu", rev = "690a3fb3fb4c6652b6a1e0b9df9b40de5d6ba091" } +wgpu-core = { git = "https://github.com/triniwiz/wgpu", rev = "48f663f70d5b6e99a5b8a708876ce9642d78fbde", features = ["wgsl", "vulkan", "metal", "raw-window-handle"] } +wgpu-types = { git = "https://github.com/triniwiz/wgpu", rev = "48f663f70d5b6e99a5b8a708876ce9642d78fbde" } +ureq = "2.10.1" +jni = "0.21.1" \ No newline at end of file diff --git a/Makefile b/Makefile index 6340b4be6..2b3321d88 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ $(XCFRAMEWORK): $(ARCHS_IOS) .PHONY: $(ARCHS_ANDROID) $(ARCHS_ANDROID): %: - ./tools/scripts/build-android.sh $@ && ./tools/scripts/copy-android.sh $@ + ./tools/scripts/build-android.sh $@ .PHONY: GENERATE_ANDROID GENERATE_ANDROID: $(ARCHS_ANDROID) diff --git a/apps/demo/package.json b/apps/demo/package.json index a6c2f8447..abb7ef88f 100644 --- a/apps/demo/package.json +++ b/apps/demo/package.json @@ -32,7 +32,8 @@ }, "devDependencies": { "@nativescript/android": "~8.8.0", - "@nativescript/ios": "~8.8.1", + "@nativescript/devtools": "~0.0.1", + "@nativescript/ios": "~8.8.0", "@nativescript/visionos": "~8.8.0" } } diff --git a/apps/demo/src/app.ts b/apps/demo/src/app.ts index 09b98c145..fa9403eaf 100644 --- a/apps/demo/src/app.ts +++ b/apps/demo/src/app.ts @@ -3,6 +3,45 @@ Helpers.initialize(); require('@nativescript/canvas-polyfill'); */ import '@nativescript/canvas-polyfill'; +import { Canvas } from '@nativescript/canvas'; +// import { DomainDispatcher, initDevtools, ProtocolWrapper } from '@nativescript/devtools'; +// initDevtools(); + +// @DomainDispatcher('Inspector') +// class Inspector extends ProtocolWrapper {} + +// @DomainDispatcher('Runtime') +// class Runtime extends ProtocolWrapper { +// evaluate() { +// console.log('evaluate', arguments); +// } + +// runScript() { +// console.log('runScript', arguments); +// } +// } +/* + +@DomainDispatcher('Page') +class CustomPage extends ProtocolWrapper { + addScriptToEvaluateOnNewDocument(params) { + if (params.worldName === 'DevTools Performance Metrics') { + this.emit('Runtime.executionContextCreated', { + context: { + id: 2, + name: params.worldName, + origin: '', + uniqueId: performance.now(), + }, + }); + return; + } + + this.emit('Page.addScriptToEvaluateOnNewDocument', {}); + } +} +*/ + // require('@nativescript/canvas-polyfill'); // import { Svg } from '@nativescript/canvas-svg'; // import { ImageAsset } from '@nativescript/canvas'; @@ -10,6 +49,8 @@ declare const jp, GDPerformanceMonitor, android, java, UIColor; let monitor; import { Application, path as filePath, knownFolders, Utils, path as nsPath, ImageSource, Trace, Screen } from '@nativescript/core'; +Canvas.useSurface = false; +Canvas.forceGL = false; Application.on('discardedError', (args) => { console.log('discardedError', args.error, args); }); @@ -27,7 +68,7 @@ Application.on('uncaughtError', (args) => { Application.on('launch', (args) => { //require('@nativescript/canvas-polyfill'); - /*if (global.isAndroid) { + if (global.isAndroid) { jp.wasabeef.takt.Takt.stock(Utils.android.getApplicationContext()).seat(jp.wasabeef.takt.Seat.TOP_CENTER).color(-65536); } else { monitor = GDPerformanceMonitor.new(); @@ -39,7 +80,6 @@ Application.on('launch', (args) => { monitor.appVersionHidden = true; monitor.deviceVersionHidden = true; } - */ }); // fetch('https://github.com/mrdoob/three.js/blob/dev/examples/models/gltf/DamagedHelmet/glTF/Default_metalRoughness.jpg?raw=true') diff --git a/apps/demo/webpack.config.js b/apps/demo/webpack.config.js index da657d6b8..19152bdf9 100644 --- a/apps/demo/webpack.config.js +++ b/apps/demo/webpack.config.js @@ -10,6 +10,8 @@ module.exports = (env) => { config.resolve.alias.set('@demo/shared', resolve(__dirname, '..', '..', 'tools', 'demo')); // config.resolve.alias.set('three', 'three/webgpu'); // config.resolve.alias.set('three/tsl', 'three/tsl'); + + config.resolve.alias.set('three', resolve(__dirname, '..', '..', 'node_modules', 'three', 'build', 'three.webgpu.js')); }); webpack.Utils.addCopyRule('**/*.svg'); diff --git a/crates/canvas-2d/Cargo.toml b/crates/canvas-2d/Cargo.toml index 01de978a5..492510833 100644 --- a/crates/canvas-2d/Cargo.toml +++ b/crates/canvas-2d/Cargo.toml @@ -4,9 +4,9 @@ version = "0.1.0" edition = "2021" [features] -metal = ["skia-safe/metal"] +metal = ["skia-safe/metal", "canvas-core/metal"] gl = ["skia-safe/gl"] -vulkan = ["skia-safe/vulkan", "ash"] +vulkan = ["skia-safe/vulkan", "canvas-core/vulkan"] default = ["gl"] [dependencies] @@ -17,8 +17,13 @@ base64 = "0.22.1" encoding_rs = "0.8.34" gl-bindings = { workspace = true } csscolorparser = { git = "https://github.com/triniwiz/csscolorparser-rs.git", rev = "c8c7e86", features = ["named-colors"] } -log = "0.4.22" +log.workspace = true skia-safe = { workspace = true, features = ["textlayout"] } bytes = "1.6.1" env_logger = "0.11.2" -ash = { version = "0.38.0", optional = true, features = ["libloading"] } \ No newline at end of file +ash = { version = "0.38.0", optional = true, features = ["libloading"] } +raw-window-handle.workspace = true +bitflags = "2.6.0" + +[target.'cfg(any(target_os = "ios", target_os="macos"))'.dependencies] +foreign-types-shared = "0.3.1" \ No newline at end of file diff --git a/crates/canvas-2d/src/android.rs b/crates/canvas-2d/src/android.rs deleted file mode 100644 index ce90e935b..000000000 --- a/crates/canvas-2d/src/android.rs +++ /dev/null @@ -1,150 +0,0 @@ -use std::os::raw::c_void; -#[cfg(feature = "vulkan")] -use ash::vk; -#[cfg(feature = "vulkan")] -use ash::vk::Handle; -use skia_safe::gpu; -use crate::context::{Context, State, SurfaceData, SurfaceEngine}; -use crate::context::text_styles::text_direction::TextDirection; - -#[cfg(feature = "vulkan")] -impl Context { - #[cfg(target_os = "android")] - pub fn new_vulkan( - width: f32, - height: f32, - window: *mut c_void, - density: f32, - samples: u32, - alpha: bool, - font_color: i32, - ppi: f32, - direction: u8, - ) -> Self { - let ash_graphics = - unsafe { crate::context::surface_vulkan::AshGraphics::new("ns-canvas") }.unwrap(); - - let mut context = { - let get_proc = |of| unsafe { - match ash_graphics.get_proc(of) { - Some(f) => f as _, - None => { - println!("resolve of {} failed", of.name().to_str().unwrap()); - std::ptr::null() - } - } - }; - - let backend_context = unsafe { - gpu::vk::BackendContext::new( - ash_graphics.instance.handle().as_raw() as _, - ash_graphics.physical_device.as_raw() as _, - ash_graphics.device.handle().as_raw() as _, - ( - ash_graphics.queue_and_index.0.as_raw() as _, - ash_graphics.queue_and_index.1, - ), - &get_proc, - ) - }; - - gpu::direct_contexts::make_vulkan(&backend_context, None) - } - .unwrap(); - - let surface_fn = - ash::khr::android_surface::Instance::new(&ash_graphics.entry, &ash_graphics.instance); - - let mut info = vk::AndroidSurfaceCreateInfoKHR::default(); - let _ = info.window(window); - - let vk_surface = unsafe { surface_fn.create_android_surface(&info, None).ok() }; - - let alpha_type = if alpha { - skia_safe::AlphaType::Unpremul - } else { - skia_safe::AlphaType::Premul - }; - - let info = skia_safe::ImageInfo::new( - skia_safe::ISize::new(width as i32, height as i32), - skia_safe::ColorType::N32, - alpha_type, - Some(skia_safe::ColorSpace::new_srgb()), - ); - - let surface = gpu::surfaces::render_target( - &mut context, - gpu::Budgeted::Yes, - &info, - Some(samples as usize), - Some(gpu::SurfaceOrigin::TopLeft), - None, - false, - None, - ) - .unwrap(); - - let mut state = State::default(); - state.direction = TextDirection::from(direction as u32); - - let bounds = skia_safe::Rect::from_wh(width, height); - Context { - direct_context: Some(context), - surface_data: SurfaceData { - bounds, - scale: density, - ppi, - engine: SurfaceEngine::Vulkan, - }, - surface, - vk_surface, - ash_graphics: None, - path: Default::default(), - state, - state_stack: vec![], - font_color: skia_safe::Color::new(font_color as u32), - surface_state: false, - } - } - - #[cfg(target_os = "android")] - pub fn resize_vulkan( - context: &mut Context, - width: f32, - height: f32, - samples: u32, - alpha: bool, - ) { - if let Some(direct_context) = context.direct_context.as_mut() { - let alpha_type = if alpha { - skia_safe::AlphaType::Unpremul - } else { - skia_safe::AlphaType::Premul - }; - - let info = skia_safe::ImageInfo::new( - skia_safe::ISize::new(width as i32, height as i32), - skia_safe::ColorType::N32, - alpha_type, - Some(skia_safe::ColorSpace::new_srgb()), - ); - - let surface = gpu::surfaces::render_target( - direct_context, - gpu::Budgeted::Yes, - &info, - Some(samples as usize), - Some(gpu::SurfaceOrigin::TopLeft), - None, - false, - None, - ) - .unwrap(); - - let bounds = skia_safe::Rect::from_wh(width, height); - context.surface_data.bounds = bounds; - context.surface = surface; - } - } -} diff --git a/crates/canvas-2d/src/context/drawing_images/mod.rs b/crates/canvas-2d/src/context/drawing_images/mod.rs index ec4f1857c..cc8b67711 100644 --- a/crates/canvas-2d/src/context/drawing_images/mod.rs +++ b/crates/canvas-2d/src/context/drawing_images/mod.rs @@ -147,6 +147,12 @@ impl Context { } pub fn draw_image_dx_dy(&mut self, image: &Image, x: f32, y: f32) { + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } + self.state .paint .image_smoothing_quality_set(self.state.image_filter_quality()); @@ -168,6 +174,12 @@ impl Context { } fn draw_image(&mut self, image: &Image, src_rect: impl Into, dst_rect: impl Into) { + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } + let src_rect = src_rect.into(); let dst_rect = dst_rect.into(); @@ -197,6 +209,13 @@ impl Context { } fn draw_image_with_rect(&mut self, image: &Image, dst_rect: impl Into) { + + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } + let dimensions = image.dimensions(); let src_rect = Rect::from_xywh(0., 0., dimensions.width as f32, dimensions.height as f32); diff --git a/crates/canvas-2d/src/context/drawing_paths/mod.rs b/crates/canvas-2d/src/context/drawing_paths/mod.rs index 8d69f610e..070712d95 100644 --- a/crates/canvas-2d/src/context/drawing_paths/mod.rs +++ b/crates/canvas-2d/src/context/drawing_paths/mod.rs @@ -10,6 +10,13 @@ pub mod fill_rule; impl Context { fn fill_or_stroke(&mut self, is_fill: bool, path: Option<&mut Path>, fill_rule: Option) { + + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } + let paint = if is_fill { self.state.paint.fill_paint().clone() } else { @@ -107,7 +114,7 @@ impl Context { fn det(matrix: &Matrix) -> f32 { let transform = matrix.to_affine().unwrap(); - return transform[0] * transform[3] - transform[1] * transform[2]; + transform[0] * transform[3] - transform[1] * transform[2] } fn is_invertible(matrix: &Matrix) -> bool { diff --git a/crates/canvas-2d/src/context/drawing_rectangles.rs b/crates/canvas-2d/src/context/drawing_rectangles.rs index e69a15a79..5596ce10f 100644 --- a/crates/canvas-2d/src/context/drawing_rectangles.rs +++ b/crates/canvas-2d/src/context/drawing_rectangles.rs @@ -23,6 +23,12 @@ impl Context { } pub fn fill_rect(&mut self, rect: &Rect) { + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } + let paint = self.state.paint.fill_paint().clone(); let shadow_paint = self.state.paint.fill_shadow_paint( @@ -44,6 +50,12 @@ impl Context { } pub fn stroke_rect(&mut self, rect: &Rect) { + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } + let paint = self.state.paint.stroke_paint().clone(); let shadow_paint = self.state.paint.stroke_shadow_paint( self.state.shadow_offset, diff --git a/crates/canvas-2d/src/context/drawing_text/mod.rs b/crates/canvas-2d/src/context/drawing_text/mod.rs index 4b6397199..aff32e9f1 100644 --- a/crates/canvas-2d/src/context/drawing_text/mod.rs +++ b/crates/canvas-2d/src/context/drawing_text/mod.rs @@ -21,6 +21,11 @@ const HANGING_AS_PERCENT_OF_ASCENT: f32 = 80.; impl Context { pub fn fill_text(&mut self, text: &str, x: c_float, y: c_float, width: Option) { + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } let width = width.unwrap_or(MAX_TEXT_WIDTH); let shadow_paint = self.state.paint.fill_shadow_paint( (0., 0.).into(), @@ -57,6 +62,11 @@ impl Context { } pub fn stroke_text(&mut self, text: &str, x: c_float, y: c_float, width: Option) { + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } let width = width.unwrap_or(MAX_TEXT_WIDTH); let shadow_paint = self.state.paint.stroke_shadow_paint( (0., 0.).into(), diff --git a/crates/canvas-2d/src/context/fill_and_stroke_styles/gradient.rs b/crates/canvas-2d/src/context/fill_and_stroke_styles/gradient.rs index 6ab3768ed..fe50a7358 100644 --- a/crates/canvas-2d/src/context/fill_and_stroke_styles/gradient.rs +++ b/crates/canvas-2d/src/context/fill_and_stroke_styles/gradient.rs @@ -213,14 +213,18 @@ impl Gradient { ) -> Option { let color_array = GradientShaderColors::Colors(colors); - let mut rotated = matrix - .map(|v| v.clone()) - .unwrap_or(skia_safe::Matrix::new_identity()); - rotated - .pre_translate((center.x, center.y)) + let mut rotated = skia_safe::Matrix::new_identity(); + rotated.pre_translate((center.x, center.y)) .pre_rotate(angle, None) .pre_translate((-center.x, -center.y)); + if let Some(matrix) = matrix { + rotated = skia_safe::Matrix::concat(&rotated, matrix); + } + + // rotated + + Shader::sweep_gradient( center, color_array, diff --git a/crates/canvas-2d/src/context/fill_and_stroke_styles/paint.rs b/crates/canvas-2d/src/context/fill_and_stroke_styles/paint.rs index 431b5e896..714958270 100644 --- a/crates/canvas-2d/src/context/fill_and_stroke_styles/paint.rs +++ b/crates/canvas-2d/src/context/fill_and_stroke_styles/paint.rs @@ -190,7 +190,7 @@ impl Paint { ) -> Option { let sigma = blur / 2.0; let filter = - skia_safe::image_filters::drop_shadow_only(offset, (sigma, sigma), color, None, None); + skia_safe::image_filters::drop_shadow_only(offset, (sigma, sigma), color, None, None, None); paint.set_image_filter(filter); return Some(paint); } diff --git a/crates/canvas-2d/src/context/filters.rs b/crates/canvas-2d/src/context/filters.rs index 35c4cbbc6..937c449ea 100644 --- a/crates/canvas-2d/src/context/filters.rs +++ b/crates/canvas-2d/src/context/filters.rs @@ -122,7 +122,7 @@ impl ImageFilter { let color_matrix = color_filters::matrix_row_major(&[ amt, 0.0, 0.0, 0.0, 0.0, 0.0, amt, 0.0, 0.0, 0.0, 0.0, 0.0, amt, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, - ]); + ],None); let input: Option = input.map(|i| i.clone().into()).flatten(); image_filters::color_filter(color_matrix, input, None) @@ -131,7 +131,7 @@ impl ImageFilter { pub fn color_matrix(value: &[f32], input: Option<&ImageFilter>) -> Self { if value.len() == 20 { - let color_matrix = color_filters::matrix_row_major(value.try_into().unwrap()); + let color_matrix = color_filters::matrix_row_major(value.try_into().unwrap(),None); let input: Option = input.map(|i| i.clone().into()).flatten(); return image_filters::color_filter(color_matrix, input, None) @@ -181,6 +181,7 @@ impl ImageFilter { Point::new(dx, dy), (sigma, sigma), color, + None, input, None, ) @@ -294,7 +295,7 @@ impl Context { let color_matrix = color_filters::matrix_row_major(&[ amt, 0.0, 0.0, 0.0, 0.0, 0.0, amt, 0.0, 0.0, 0.0, 0.0, 0.0, amt, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, - ]); + ],None); image_filters::color_filter(color_matrix, chain, None) } else { chain @@ -350,7 +351,7 @@ impl Context { 0.0, 1.0, 0.0, - ]); + ],None); image_filters::color_filter(color_matrix, chain, None) } else { chain @@ -393,7 +394,7 @@ impl Context { let color_matrix = color_filters::matrix_row_major(&[ 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, amt, 0.0, - ]); + ],None); image_filters::color_filter(color_matrix, chain, None) } else { chain @@ -428,7 +429,7 @@ impl Context { 0.0, 1.0, 0.0, - ]); + ],None); image_filters::color_filter(color_matrix, chain, None) } else { chain @@ -463,7 +464,7 @@ impl Context { 0.0, 1.0, 0.0, - ]); + ],None); image_filters::color_filter(color_matrix, chain, None) } else { chain @@ -499,7 +500,7 @@ impl Context { 0.0, 1.0, 0.0, - ]); + ],None); image_filters::color_filter(color_matrix, chain, None) } else { chain @@ -559,6 +560,7 @@ impl Context { offset, (sigma, sigma), color, + None, chain, None, ); diff --git a/crates/canvas-2d/src/context/gradients_and_patterns.rs b/crates/canvas-2d/src/context/gradients_and_patterns.rs index ab25267eb..ff7e38a5c 100644 --- a/crates/canvas-2d/src/context/gradients_and_patterns.rs +++ b/crates/canvas-2d/src/context/gradients_and_patterns.rs @@ -36,7 +36,7 @@ impl Context { } pub fn create_conic_gradient(&self, start_angle: f32, x: f32, y: f32) -> Gradient { - let angle = crate::utils::geometry::to_degrees(start_angle) - 90.0; + let angle = crate::utils::geometry::to_degrees(start_angle); Gradient::Conic { center: Point::new(x, y), angle, @@ -54,6 +54,7 @@ impl Context { y: f32, matrix: Matrix, ) -> Gradient { + let angle = crate::utils::geometry::to_degrees(start_angle); Gradient::Conic { center: Point::new(x, y), angle: start_angle, diff --git a/crates/canvas-2d/src/context/mod.rs b/crates/canvas-2d/src/context/mod.rs index 563e3b694..8289649cc 100644 --- a/crates/canvas-2d/src/context/mod.rs +++ b/crates/canvas-2d/src/context/mod.rs @@ -3,9 +3,9 @@ use std::ffi::c_uint; use base64::Engine; use regex::bytes::Replacer; -use skia_safe::{AlphaType, Color, ColorType, EncodedImageFormat, Image, ImageInfo, IPoint, ISize, Point, Surface}; -use skia_safe::BlendMode; use skia_safe::image::CachingHint; +use skia_safe::BlendMode; +use skia_safe::{AlphaType, Color, ColorType, EncodedImageFormat, IPoint, ISize, Image, ImageInfo, Point, Surface}; use compositing::composite_operation_type::CompositeOperationType; use fill_and_stroke_styles::paint::Paint; @@ -20,6 +20,9 @@ use text_styles::{ use crate::context::drawing_text::typography::Font; +use bitflags::bitflags; +use bytes::Buf; + pub mod drawing_images; pub mod drawing_text; pub mod fill_and_stroke_styles; @@ -47,9 +50,13 @@ pub mod text_decoder; pub mod text_encoder; pub mod transformations; -#[cfg(feature = "vulkan")] +// #[cfg(feature = "vulkan")] pub mod surface_vulkan; +#[cfg(feature = "metal")] +pub mod surface_metal; + + #[derive(Clone)] pub struct State { pub(crate) direction: TextDirection, @@ -136,11 +143,19 @@ pub enum SurfaceEngine { Metal, } -#[derive(Copy, Clone, Debug, Eq, PartialEq)] -pub enum SurfaceState { - None, - Pending, - Invalidating, + +bitflags! { + #[derive(Debug, Clone, Copy, PartialEq, Eq)] + pub struct SurfaceState: u8 { + const None = 0x00; + const Pending = 0x01; + const Invalidating = 0x02; + } +} +impl Default for SurfaceState { + fn default() -> Self { + Self::None + } } #[derive(Debug, Copy, Clone)] @@ -149,6 +164,8 @@ pub struct SurfaceData { pub(crate) scale: f32, pub(crate) ppi: f32, pub(crate) engine: SurfaceEngine, + pub(crate) state: SurfaceState, + pub(crate) is_opaque: bool, } impl SurfaceData { @@ -167,6 +184,10 @@ impl SurfaceData { pub fn scale(&self) -> f32 { self.scale } + + pub fn is_opaque(&self) -> bool { + self.is_opaque + } } pub struct Context { @@ -174,9 +195,15 @@ pub struct Context { pub(crate) surface: Surface, pub(crate) surface_state: SurfaceState, #[cfg(feature = "vulkan")] - pub(crate) ash_graphics: Option, + pub vulkan_context: Option, #[cfg(feature = "vulkan")] - pub(crate) vk_surface: Option, + pub vulkan_texture: Option, + #[cfg(feature = "metal")] + pub metal_context: Option, + #[cfg(feature = "metal")] + pub metal_texture_info: Option, + #[cfg(feature = "gl")] + pub gl_context: Option, #[cfg(any(feature = "gl", feature = "vulkan", feature = "metal"))] pub(crate) direct_context: Option, pub(crate) path: Path, @@ -190,10 +217,22 @@ impl Context { pub fn get_pixels(&mut self, buffer: &mut [u8], origin: impl Into, size: impl Into) { let origin = origin.into(); let size = size.into(); - let info = ImageInfo::new(size, ColorType::RGBA8888, AlphaType::Unpremul, None); + let mut info = ImageInfo::new(size, ColorType::RGBA8888, AlphaType::Unpremul, None); if let Some(img) = self.get_image() { - img.read_pixels(&info, buffer, info.min_row_bytes(), origin, CachingHint::Allow); + let row_bytes = (info.width() * 4) as usize; + img.read_pixels(&info, buffer, row_bytes, origin, CachingHint::Allow); + } + } + + + pub fn submit(&mut self) { + #[cfg(any(feature = "gl", feature = "vulkan", feature = "metal"))] + match self.direct_context.as_mut() { + Some(ctx) => { + ctx.submit(None); + } + _ => {} } } @@ -211,14 +250,28 @@ impl Context { } } - pub fn get_surface_engine(&self) -> SurfaceEngine { + pub fn flush_submit_and_sync_cpu(&mut self) { + #[cfg(any(feature = "gl", feature = "vulkan", feature = "metal"))] + match self.direct_context.as_mut() { + Some(ctx) => { + ctx.flush_submit_and_sync_cpu(); + } + _ => {} + } + } + + pub fn surface_engine(&self) -> SurfaceEngine { self.surface_data.engine } - pub fn get_surface_data(&self) -> &SurfaceData { + pub fn surface_data(&self) -> &SurfaceData { &self.surface_data } + pub fn surface_state(&self) -> SurfaceState { + self.surface_state + } + pub fn with_matrix(&mut self, f: F) where F: FnOnce(&mut skia_safe::Matrix) -> &skia_safe::Matrix, @@ -252,7 +305,7 @@ impl Context { F: FnOnce(&skia_safe::Canvas), { f(self.surface.canvas()); - self.surface_state = SurfaceState::Pending; + self.surface_state = self.surface_state | SurfaceState::Pending; } @@ -267,23 +320,40 @@ impl Context { F: FnOnce(&skia_safe::Canvas), { f(self.surface.canvas()); - self.surface_state = SurfaceState::Pending; + self.surface_state = self.surface_state | SurfaceState::Pending; } pub fn flush(&mut self) { - if self.surface_state == SurfaceState::Pending { - self.surface_state = SurfaceState::Invalidating; + let state = self.surface_state & SurfaceState::Pending; + if state == SurfaceState::Pending { + self.surface_state = self.surface_state | SurfaceState::Invalidating; self.flush_surface(); - self.surface_state = SurfaceState::None; + self.surface_state = self.surface_state | SurfaceState::None; + } + } + + pub fn flush_and_sync_cpu(&mut self) { + let state = self.surface_state & SurfaceState::Pending; + + if state == SurfaceState::Pending { + self.surface_state = self.surface_state | SurfaceState::Invalidating; + self.flush_submit_and_sync_cpu(); + self.surface_state = self.surface_state | SurfaceState::None; } } pub fn get_image(&mut self) -> Option { + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } + self.flush(); let snapshot = self.surface.image_snapshot(); - if self.surface_data.engine == SurfaceEngine::GL { + if self.surface_data.engine == SurfaceEngine::GL || self.surface_data.engine == SurfaceEngine::Vulkan || self.surface_data.engine == SurfaceEngine::Metal { snapshot.make_raster_image( self.direct_context.as_mut(), Some(CachingHint::Allow), @@ -292,6 +362,25 @@ impl Context { Some(snapshot) } } + + pub fn get_image_no_flush(&mut self) -> Option { + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } + + let snapshot = self.surface.image_snapshot(); + if self.surface_data.engine == SurfaceEngine::GL || self.surface_data.engine == SurfaceEngine::Vulkan || self.surface_data.engine == SurfaceEngine::Metal { + snapshot.make_raster_image( + self.direct_context.as_mut(), + Some(CachingHint::Allow), + ) + } else { + Some(snapshot) + } + } + pub fn as_data(&mut self) -> Vec { let bounds = self.surface_data.bounds; if bounds.is_empty() { @@ -315,6 +404,11 @@ impl Context { IPoint::new(0, 0), CachingHint::Allow, ); + + if image.image_info().color_type() == ColorType::BGRA8888 { + canvas_core::image_asset::ImageAsset::bgra_to_rgba_in_place(pixels.as_mut_slice()); + } + pixels }; @@ -335,7 +429,7 @@ impl Context { let image = self.surface.image_snapshot(); let mut quality = quality; - if quality > 100 || quality < 0 { + if quality > 100 { quality = 92; } let data_txt = "data:"; @@ -358,7 +452,7 @@ impl Context { }, quality, ); - return match data { + match data { Some(data) => { let encoded_data = base64::engine::general_purpose::STANDARD.encode(data.as_bytes()); @@ -372,7 +466,7 @@ impl Context { encoded } _ => "data:,".to_string(), - }; + } } pub fn render_to_canvas(&mut self, paint: &skia_safe::Paint, f: F) @@ -403,7 +497,7 @@ impl Context { blend_paint.set_blend_mode(blend); canvas.draw_picture(&pict, Some(&skia_safe::Matrix::new_identity()), Some(&blend_paint)); canvas.restore(); - self.surface_state = SurfaceState::Pending; + self.surface_state = self.surface_state | SurfaceState::Pending; } } _ => { @@ -428,7 +522,7 @@ impl Context { layer_paint.set_blend_mode(BlendMode::SrcOver); let mut layer_recorder = skia_safe::PictureRecorder::new(); layer_recorder.begin_recording(self.surface_data.bounds, None); - let current_matrix = self.surface.canvas().local_to_device(); + let current_matrix = skia_safe::M44::from(&self.state.matrix); if let Some(layer) = layer_recorder.recording_canvas() { layer.set_matrix(¤t_matrix); f(layer, &layer_paint, &self.state.font_style); @@ -442,12 +536,12 @@ impl Context { blend_paint.set_blend_mode(blend); canvas.draw_picture(&pict, Some(&skia_safe::Matrix::new_identity()), Some(&blend_paint)); canvas.restore(); - self.surface_state = SurfaceState::Pending; + self.surface_state = self.surface_state | SurfaceState::Pending; } } _ => { f(self.surface.canvas(), paint, &self.state.font_style); - self.surface_state = SurfaceState::Pending; + self.surface_state = self.surface_state | SurfaceState::Pending; } }; } diff --git a/crates/canvas-2d/src/context/non_standard.rs b/crates/canvas-2d/src/context/non_standard.rs index 0f8675362..2add412b8 100644 --- a/crates/canvas-2d/src/context/non_standard.rs +++ b/crates/canvas-2d/src/context/non_standard.rs @@ -154,6 +154,13 @@ impl Context { .collect(); let paint = skia_safe::Paint::default(); + + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } + self.render_to_canvas(&paint, |canvas, _paint| { canvas.draw_atlas( &image, @@ -169,6 +176,11 @@ impl Context { } pub fn fill_oval(&mut self, x: f32, y: f32, width: f32, height: f32) { + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } let paint = self.state.paint.fill_paint().clone(); self.render_to_canvas(&paint, |canvas, paint| { canvas.draw_oval( @@ -179,6 +191,11 @@ impl Context { } pub fn stroke_oval(&mut self, x: f32, y: f32, width: f32, height: f32) { + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } let paint = self.state.paint.stroke_paint().clone(); self.render_to_canvas(&paint, |canvas, paint| { canvas.draw_oval( @@ -189,6 +206,12 @@ impl Context { } pub fn draw_paint(&mut self, color: &str) { + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } + if let Some(color) = color::parse_color(color) { let mut paint = Paint::default(); paint.set_anti_alias(true).set_color(color); @@ -199,6 +222,12 @@ impl Context { } pub fn draw_point(&mut self, x: c_float, y: c_float) { + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } + let paint = self.state.paint.stroke_paint().clone(); self.render_to_canvas(&paint, |canvas, paint| { canvas.draw_point(skia_safe::Point::new(x, y), paint); @@ -206,6 +235,11 @@ impl Context { } pub fn draw_points(&mut self, mode: PointMode, points: &[c_float]) { + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } let paint = self.state.paint.stroke_paint().clone(); self.render_to_canvas(&paint, |canvas, paint| { let count = points.len(); diff --git a/crates/canvas-2d/src/context/paths/path.rs b/crates/canvas-2d/src/context/paths/path.rs index 300984faa..3c1850dce 100644 --- a/crates/canvas-2d/src/context/paths/path.rs +++ b/crates/canvas-2d/src/context/paths/path.rs @@ -78,11 +78,6 @@ impl Path { Self(path.clone()) } - fn scoot(&mut self, x: f32, y: f32) { - if self.0.is_empty() { - self.0.move_to(Point::new(x, y)); - } - } pub fn set_fill_type(&mut self, fill_type: FillRule) { self.0.set_fill_type(fill_type.to_fill_type()); diff --git a/crates/canvas-2d/src/context/pixel_manipulation/mod.rs b/crates/canvas-2d/src/context/pixel_manipulation/mod.rs index 252b4d17c..82c6dcec7 100644 --- a/crates/canvas-2d/src/context/pixel_manipulation/mod.rs +++ b/crates/canvas-2d/src/context/pixel_manipulation/mod.rs @@ -20,6 +20,12 @@ impl Context { sw: c_float, sh: c_float, ) -> ImageData { + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } + let info = ImageInfo::new( ISize::new(sw as i32, sh as i32), ColorType::RGBA8888, @@ -52,6 +58,13 @@ impl Context { sw: c_float, sh: c_float, ) { + + #[cfg(feature = "gl")]{ + if let Some(ref context) = self.gl_context { + context.make_current(); + } + } + let mut dx = dx; let mut dy = dy; let mut sx = sx; diff --git a/crates/canvas-2d/src/context/surface.rs b/crates/canvas-2d/src/context/surface.rs index 78d741f3c..c3563d620 100644 --- a/crates/canvas-2d/src/context/surface.rs +++ b/crates/canvas-2d/src/context/surface.rs @@ -1,10 +1,10 @@ #![allow(dead_code)] -use skia_safe::{AlphaType, Color, ColorType, ImageInfo, ISize, Rect, surfaces}; +use skia_safe::{surfaces, AlphaType, Color, ColorType, ISize, ImageInfo, Rect}; -use crate::context::{Context, State, SurfaceData, SurfaceEngine, SurfaceState}; use crate::context::paths::path::Path; use crate::context::text_styles::text_direction::TextDirection; +use crate::context::{Context, State, SurfaceData, SurfaceEngine, SurfaceState}; const GR_GL_RGB565: u32 = 0x8D62; const GR_GL_RGBA8: u32 = 0x8058; @@ -46,15 +46,23 @@ impl Context { Context { direct_context: None, + #[cfg(feature = "gl")] + gl_context: None, + #[cfg(feature = "metal")] + metal_context: None, + #[cfg(feature = "metal")] + metal_texture_info: None, #[cfg(feature = "vulkan")] - ash_graphics: None, + vulkan_context: None, #[cfg(feature = "vulkan")] - vk_surface: None, + vulkan_texture: None, surface_data: SurfaceData { bounds, ppi, scale: density, engine: SurfaceEngine::CPU, + state: Default::default(), + is_opaque: !alpha, }, surface, path: Path::default(), @@ -97,7 +105,6 @@ impl Context { height = 1. } - ImageInfo::new(ISize::new(width as i32, height as i32), color_type, alpha_type, None) } else { ImageInfo::new( @@ -110,6 +117,8 @@ impl Context { if let Some(surface) = surfaces::raster(&info, None, None) { context.surface = surface; + context.surface_data.is_opaque = !alpha; + context.surface_data.state = Default::default(); context.surface_data.bounds = bounds; context.surface_data.scale = density; context.surface_data.ppi = ppi; diff --git a/crates/canvas-2d/src/context/surface_gl.rs b/crates/canvas-2d/src/context/surface_gl.rs index 81c8b49b8..3f943be85 100644 --- a/crates/canvas-2d/src/context/surface_gl.rs +++ b/crates/canvas-2d/src/context/surface_gl.rs @@ -1,9 +1,11 @@ -use skia_safe::{AlphaType, Color, ColorType, gpu, ImageInfo, ISize, PixelGeometry, surfaces}; -use skia_safe::gpu::gl::Interface; - -use crate::context::{Context, State, SurfaceData, SurfaceEngine, SurfaceState}; use crate::context::paths::path::Path; use crate::context::text_styles::text_direction::TextDirection; +use crate::context::{Context, State, SurfaceData, SurfaceEngine, SurfaceState}; +use canvas_core::context_attributes::PowerPreference; +use skia_safe::gpu::gl::Interface; +use skia_safe::{gpu, surfaces, AlphaType, Color, ColorType, ISize, ImageInfo, PixelGeometry}; +use std::ffi::c_void; +use std::ptr::NonNull; const GR_GL_RGB565: u32 = 0x8D62; const GR_GL_RGBA8: u32 = 0x8058; @@ -11,99 +13,126 @@ const GR_GL_RGBA8: u32 = 0x8058; #[cfg(feature = "gl")] impl Context { pub fn new_gl( + view: *mut c_void, width: f32, height: f32, density: f32, - buffer_id: i32, - samples: i32, alpha: bool, font_color: i32, ppi: f32, direction: TextDirection, ) -> Self { + let mut attr = canvas_core::context_attributes::ContextAttributes::new( + alpha, + false, + false, + false, + PowerPreference::Default, + true, + false, + false, + false, + false, + true, + ); + let bounds = skia_safe::Rect::from_wh(width, height); - let mut direct_context = None; let mut engine = SurfaceEngine::GL; - let surface = if bounds.is_empty() { - let color_type = if alpha { - ColorType::RGBA8888 - } else { - ColorType::RGB565 - }; - let alpha_type = if alpha { - AlphaType::Unpremul - } else { - AlphaType::Premul - }; + let mut zero_size = false; + let mut width = width; + if width <= 0. { + zero_size = true; + width = 1. + } + let mut height = height; - let mut width = width; - if width <= 0. { - width = 1. - } - let mut height = height; + if height <= 0. { + zero_size = true; + height = 1. + } - if height <= 0. { - height = 1. + let gl_context = if zero_size { + canvas_core::gpu::gl::GLContext::create_offscreen_context(&mut attr, width as i32, height as i32) + } else if let Some(view) = NonNull::new(view) { + #[cfg(target_os = "android")]{ + let handle = raw_window_handle::AndroidNdkWindowHandle::new(view); + let handle = raw_window_handle::RawWindowHandle::AndroidNdk(handle); + canvas_core::gpu::gl::GLContext::create_window_context(&mut attr, width as i32, height as i32, handle) + } + #[cfg(not(target_os = "android"))]{ + canvas_core::gpu::gl::GLContext::create_window_context(&mut attr, view) } + } else { + canvas_core::gpu::gl::GLContext::create_offscreen_context(&mut attr, width as i32, height as i32) + }.unwrap(); - engine = SurfaceEngine::CPU; + gl_context.make_current(); - let info = ImageInfo::new(ISize::new(width as i32, height as i32), color_type, alpha_type, None); + let mut buffer_id = [0i32]; + + unsafe { gl_bindings::GetIntegerv(gl_bindings::FRAMEBUFFER_BINDING, buffer_id.as_mut_ptr()) } + + let interface = Interface::new_native(); + + let mut ctx = gpu::direct_contexts::make_gl(interface.unwrap(), None).unwrap(); - surfaces::raster(&info, None, None).unwrap() + let mut frame_buffer = gpu::gl::FramebufferInfo::from_fboid(buffer_id[0] as u32); + + if alpha { + frame_buffer.format = GR_GL_RGBA8; } else { - let interface = Interface::new_native(); - let mut ctx = gpu::direct_contexts::make_gl(interface.unwrap(), None).unwrap(); + frame_buffer.format = GR_GL_RGB565; + } - let mut frame_buffer = gpu::gl::FramebufferInfo::from_fboid(buffer_id as u32); - if alpha { - frame_buffer.format = GR_GL_RGBA8; - } else { - frame_buffer.format = GR_GL_RGB565; - } + let target = gpu::backend_render_targets::make_gl( + (width as i32, height as i32), + Some(0), + 0, + frame_buffer, + ); + let surface_props = skia_safe::SurfaceProps::new( + skia_safe::SurfacePropsFlags::default(), + PixelGeometry::Unknown, + ); + let mut color_type = ColorType::RGBA8888; + if !alpha { + color_type = ColorType::RGB565; + } - let target = gpu::backend_render_targets::make_gl( - (width as i32, height as i32), - Some(samples as usize), - 0, - frame_buffer, - ); - let surface_props = skia_safe::SurfaceProps::new( - skia_safe::SurfacePropsFlags::default(), - PixelGeometry::Unknown, - ); - let mut color_type = ColorType::RGBA8888; - if !alpha { - color_type = ColorType::RGB565; - } - let surface = gpu::surfaces::wrap_backend_render_target( - &mut ctx, - &target, - gpu::SurfaceOrigin::BottomLeft, - color_type, - None, - Some(&surface_props), - ) - .unwrap(); + let surface = gpu::surfaces::wrap_backend_render_target( + &mut ctx, + &target, + gpu::SurfaceOrigin::BottomLeft, + color_type, + None, + Some(&surface_props), + ) + .unwrap(); + + let direct_context = Some(ctx); - direct_context = Some(ctx); - surface - }; let mut state = State::default(); state.direction = direction; Context { direct_context, + #[cfg(feature = "metal")] + metal_context: None, + #[cfg(feature = "metal")] + metal_texture_info: None, + gl_context: Some(gl_context), #[cfg(feature = "vulkan")] - ash_graphics: None, + vulkan_context: None, #[cfg(feature = "vulkan")] - vk_surface: None, + vulkan_texture: None, surface_data: SurfaceData { bounds, scale: density, ppi, engine, + state: Default::default(), + is_opaque: !alpha }, surface, path: Path::default(), @@ -162,7 +191,7 @@ impl Context { return; } let mut ctx = ctx.unwrap(); - // ctx.reset(None); + // ctx.reset(None); let mut frame_buffer = gpu::gl::FramebufferInfo::from_fboid(buffer_id as u32); @@ -209,6 +238,7 @@ impl Context { context.surface_data.bounds = bounds; context.surface_data.scale = density; context.surface_data.ppi = ppi; + context.surface_data.is_opaque = !alpha; context.path = Path::default(); context.reset_state(); context.surface = surface; diff --git a/crates/canvas-2d/src/context/surface_metal.rs b/crates/canvas-2d/src/context/surface_metal.rs new file mode 100644 index 000000000..9f263d896 --- /dev/null +++ b/crates/canvas-2d/src/context/surface_metal.rs @@ -0,0 +1,199 @@ +use crate::context::paths::path::Path; +use crate::context::text_styles::text_direction::TextDirection; +use crate::context::{Context, State, SurfaceData, SurfaceEngine}; +use canvas_core::gpu::metal::MetalContext; +use foreign_types_shared::ForeignTypeRef; +use skia_safe::gpu::mtl::TextureInfo; +use skia_safe::{gpu, Color, ColorType}; +use std::os::raw::c_void; + +#[cfg(feature = "metal")] +impl Context { + pub fn new_metal( + view: *mut c_void, + density: f32, + samples: usize, + alpha: bool, + font_color: i32, + ppi: f32, + direction: TextDirection, + ) -> Self { + let mtl_context = MetalContext::new(view); + let backend = unsafe { + gpu::mtl::BackendContext::new( + mtl_context.device() as gpu::mtl::Handle, + mtl_context.queue() as gpu::mtl::Handle, + ) + }; + + let (width, height) = mtl_context.drawable_size(); + + let mut context = gpu::direct_contexts::make_metal(&backend, None).unwrap(); + + let drawable = mtl_context.drawable().unwrap(); + let info = unsafe { TextureInfo::new(drawable.texture().as_ptr() as gpu::mtl::Handle) }; + let bt = unsafe { gpu::backend_textures::make_mtl((width as i32, height as i32), gpu::Mipmapped::No, &info, "") }; + let surface = gpu::surfaces::wrap_backend_texture(&mut context, &bt, gpu::SurfaceOrigin::TopLeft, Some(samples), ColorType::BGRA8888, + None, + None).unwrap(); + + let mut state = State::default(); + state.direction = TextDirection::from(direction as u32); + + let bounds = skia_safe::Rect::from_wh(width as f32, height as f32); + Context { + surface_data: SurfaceData { + bounds, + scale: density, + ppi, + engine: SurfaceEngine::Metal, + state: Default::default(), + is_opaque: !alpha, + }, + surface, + surface_state: Default::default(), + #[cfg(feature = "vulkan")] + vulkan_context: None, + #[cfg(feature = "vulkan")] + vulkan_texture: None, + metal_context: Some(mtl_context), + metal_texture_info: Some(info), + #[cfg(feature = "gl")] + gl_context: None, + direct_context: Some(context), + path: Path::default(), + state, + state_stack: vec![], + font_color: Color::new(font_color as u32), + } + } + + pub fn new_metal_device_queue( + view: *mut c_void, + device: *mut c_void, + queue: *mut c_void, + density: f32, + samples: usize, + alpha: bool, + font_color: i32, + ppi: f32, + direction: TextDirection, + ) -> Self { + let mut mtl_context = unsafe { MetalContext::new_device_queue(view, device, queue) }; + let backend = unsafe { + gpu::mtl::BackendContext::new( + device as gpu::mtl::Handle, + queue as gpu::mtl::Handle, + ) + }; + let (width, height) = mtl_context.drawable_size(); + + let mut context = gpu::direct_contexts::make_metal(&backend, None).unwrap(); + let drawable = mtl_context.current_drawable().unwrap(); + let info = unsafe { TextureInfo::new(drawable.texture().as_ptr() as gpu::mtl::Handle) }; + let bt = unsafe { gpu::backend_textures::make_mtl((width as i32, height as i32), gpu::Mipmapped::No, &info, "") }; + let surface = gpu::surfaces::wrap_backend_texture(&mut context, &bt, gpu::SurfaceOrigin::TopLeft, Some(samples), ColorType::BGRA8888, + None, + None).unwrap(); + + + let mut state = State::default(); + state.direction = TextDirection::from(direction as u32); + + let bounds = skia_safe::Rect::from_wh(surface.width() as f32, surface.height() as f32); + Context { + surface_data: SurfaceData { + bounds, + scale: density, + ppi, + engine: SurfaceEngine::Metal, + state: Default::default(), + is_opaque: !alpha, + }, + surface, + surface_state: Default::default(), + #[cfg(feature = "vulkan")] + vulkan_context: None, + #[cfg(feature = "vulkan")] + vulkan_texture: None, + metal_context: Some(mtl_context), + metal_texture_info: Some(info), + #[cfg(feature = "gl")] + gl_context: None, + direct_context: Some(context), + path: Path::default(), + state, + state_stack: vec![], + font_color: Color::new(font_color as u32), + } + } + + pub fn resize_metal(context: &mut Context, width: f32, height: f32) { + let _ = MetalContext::new_release_pool(); + let bounds = skia_safe::Rect::from_wh(width, height); + context.surface_data.bounds = bounds; + let mut samples = 1; + let mut info: Option = None; + if let Some(context) = context.metal_context.as_mut() { + samples = context.sample_count(); + if let Some(drawable) = context.next_drawable() { + info = unsafe { Some(TextureInfo::new(drawable.texture().as_ptr() as gpu::mtl::Handle)) }; + } + } + + + let mut surface = None; + if let (Some(context), Some(info)) = (context.direct_context.as_mut(), info.as_ref()) { + let bt = unsafe { gpu::backend_textures::make_mtl((width as i32, height as i32), gpu::Mipmapped::No, info, "") }; + + surface = gpu::surfaces::wrap_backend_texture(context, &bt, gpu::SurfaceOrigin::TopLeft, Some(samples), ColorType::BGRA8888, + None, + None); + + // surface = unsafe { + // gpu::surfaces::wrap_mtk_view( + // context, + // view as gpu::mtl::Handle, + // gpu::SurfaceOrigin::TopLeft, + // Some(sample_count), + // ColorType::BGRA8888, + // None, + // None, + // ) + // }; + } + + if let Some(surface) = surface { + context.surface_data.state = Default::default(); + context.surface = surface; + context.metal_texture_info = info; + } + } + + pub fn present(context: &mut Context) { + let _ = MetalContext::new_release_pool(); + let mut info: Option = None; + let mut width = 0; + let mut height = 0; + if let Some(context) = context.metal_context.as_mut() { + context.present_drawable(); + } + + if let Some(context) = context.metal_context.as_mut() { + if let Some(drawable) = context.next_drawable() { + let texture = drawable.texture(); + width = texture.width(); + height = texture.height(); + info = unsafe { Some(TextureInfo::new(texture.as_ptr() as gpu::mtl::Handle)) }; + } + } + + + if let Some(info) = info.as_ref() { + let bt = unsafe { gpu::backend_textures::make_mtl((width as i32, height as i32), gpu::Mipmapped::No, info, "") }; + context.surface.replace_backend_texture(&bt, gpu::SurfaceOrigin::TopLeft); + } + + context.metal_texture_info = info; + } +} diff --git a/crates/canvas-2d/src/context/surface_vulkan.rs b/crates/canvas-2d/src/context/surface_vulkan.rs index bef0f8763..7fa991b64 100644 --- a/crates/canvas-2d/src/context/surface_vulkan.rs +++ b/crates/canvas-2d/src/context/surface_vulkan.rs @@ -1,152 +1,215 @@ -use std::ffi::CString; - -use ash::vk::Handle; -use ash::{vk, Entry, Instance}; -use skia_safe::gpu; - -pub struct AshGraphics { - pub entry: Entry, - pub instance: Instance, - pub physical_device: vk::PhysicalDevice, - pub device: ash::Device, - pub queue_and_index: (vk::Queue, usize), -} - -impl Drop for AshGraphics { - fn drop(&mut self) { - unsafe { - self.device.device_wait_idle().unwrap(); - self.device.destroy_device(None); - self.instance.destroy_instance(None); +use crate::context::text_styles::text_direction::TextDirection; +use crate::context::{Context, State, SurfaceData, SurfaceEngine}; +use skia_safe::wrapper::PointerWrapper; +use skia_safe::{gpu, ColorType}; +use std::ffi::CStr; +use std::os::raw::c_void; + +#[cfg(feature = "vulkan")] +impl Context { + pub fn new_vulkan( + width: f32, + height: f32, + view: *mut c_void, + density: f32, + alpha: bool, + font_color: i32, + ppi: f32, + direction: u8, + ) -> Self { + let mut vulkan_context = canvas_core::gpu::vulkan::VulkanContext::new("ns-app").unwrap(); + vulkan_context.set_alpha(alpha); + let mut context = { + let get_proc = |of| unsafe { + let ret = match of { + gpu::vk::GetProcOf::Instance(instance, name) => { + if let Some(ret) = vulkan_context.get_instance_proc_addr(instance as _, name) { + (Some(ret), None) + } else { + let name = unsafe { CStr::from_ptr(name) }; + let name = name.to_string_lossy(); + (None, Some(name.to_string())) + } + } + gpu::vk::GetProcOf::Device(device, name) => { + if let Some(ret) = vulkan_context.get_device_proc_addr(device as _, name) { + (Some(ret), None) + } else { + let name = unsafe { CStr::from_ptr(name) }; + let name = name.to_string_lossy(); + (None, Some(name.to_string())) + } + } + }; + match ret { + (Some(f), None) => f as _, + (None, Some(name)) => { + #[cfg(target_os = "android")] + log::info!("resolve of {} failed", name); + + #[cfg(not(target_os = "android"))] + println!("resolve of {} failed", name); + std::ptr::null() + } + (_, _) => { + std::ptr::null() + } + } + }; + + let backend_context = unsafe { + gpu::vk::BackendContext::new( + vulkan_context.instance_handle() as _, + vulkan_context.physical_device() as _, + vulkan_context.device_handle() as _, + ( + vulkan_context.queue() as _, + vulkan_context.index(), + ), + &get_proc, + ) + }; + + gpu::direct_contexts::make_vulkan(&backend_context, None) } - } -} - -impl AshGraphics { - pub fn vulkan_version() -> Option<(usize, usize, usize)> { - let entry = unsafe { Entry::load() }.unwrap(); - - let detected_version = unsafe { entry.try_enumerate_instance_version().unwrap_or(None) }; - - detected_version.map(|ver| { - ( - vk::api_version_major(ver).try_into().unwrap(), - vk::api_version_minor(ver).try_into().unwrap(), - vk::api_version_patch(ver).try_into().unwrap(), + .unwrap(); + + vulkan_context.set_view(view, width as u32, height as u32); + + let image = vulkan_context.current_image_raw(); + + let alloc = gpu::vk::Alloc::default(); + let image_info = unsafe { + gpu::vk::ImageInfo::new( + image.unwrap() as gpu::vk::Image, + alloc, + gpu::vk::ImageTiling::OPTIMAL, + gpu::vk::ImageLayout::UNDEFINED, + gpu::vk::Format::R8G8B8A8_UNORM, + 1, + None, + None, + None, + None, ) - }) + }; + + let bt = unsafe { gpu::backend_textures::make_vk((width as i32, height as i32), &image_info, "") }; + + + let mut surface = gpu::surfaces::wrap_backend_texture(&mut context, &bt, gpu::SurfaceOrigin::TopLeft, None, ColorType::N32, + None, + None).unwrap(); + + let mut state = State::default(); + state.direction = TextDirection::from(direction as u32); + + let bounds = skia_safe::Rect::from_wh(width, height); + Context { + direct_context: Some(context), + surface_data: SurfaceData { + bounds, + scale: density, + ppi, + engine: SurfaceEngine::Vulkan, + state: Default::default(), + is_opaque: !alpha, + }, + vulkan_context: Some(vulkan_context), + vulkan_texture: Some(bt), + #[cfg(feature = "gl")] + gl_context: None, + #[cfg(feature = "metal")] + metal_context: None, + #[cfg(feature = "metal")] + metal_texture_info: None, + surface, + path: Default::default(), + state, + state_stack: vec![], + font_color: skia_safe::Color::new(font_color as u32), + surface_state: crate::context::SurfaceState::None, + } } - pub unsafe fn new(app_name: &str) -> Result { - let entry = Entry::load().or(Err("Failed to load Vulkan entry"))?; - let minimum_version = vk::make_api_version(0, 1, 0, 0); - - let instance: Instance = { - let api_version = Self::vulkan_version() - .map(|(major, minor, patch)| { - vk::make_api_version( - 0, - major.try_into().unwrap(), - minor.try_into().unwrap(), - patch.try_into().unwrap(), + pub fn replace_backend_texture(&mut self) { + let size = self.surface_data.bounds; + let mut texture = None; + if let Some(context) = self.vulkan_context.as_mut() { + let image = context.current_image_raw(); + if let Some(image) = image { + let alloc = gpu::vk::Alloc::default(); + let image_info = unsafe { + gpu::vk::ImageInfo::new( + image as gpu::vk::Image, + alloc, + gpu::vk::ImageTiling::OPTIMAL, + gpu::vk::ImageLayout::UNDEFINED, + gpu::vk::Format::R8G8B8A8_UNORM, + 1, + None, + None, + None, + None, ) - }) - .unwrap_or(minimum_version); - - let app_name = CString::new(app_name).unwrap(); - let layer_names: [&CString; 0] = []; // [CString::new("VK_LAYER_LUNARG_standard_validation").unwrap()]; - let extension_names_raw = []; // extension_names(); - - let app_info = vk::ApplicationInfo::default() - .application_name(&app_name) - .application_version(0) - .engine_name(&app_name) - .engine_version(0) - .api_version(api_version); - - let layers_names_raw: Vec<*const std::os::raw::c_char> = layer_names - .iter() - .map(|raw_name| raw_name.as_ptr()) - .collect(); - - let create_info = vk::InstanceCreateInfo::default() - .application_info(&app_info) - .enabled_layer_names(&layers_names_raw) - .enabled_extension_names(&extension_names_raw); - - entry.create_instance(&create_info, None) - } - .or(Err("Failed to create a Vulkan instance."))?; - - let (physical_device, queue_family_index) = { - let physical_devices = instance - .enumerate_physical_devices() - .expect("Failed to enumerate Vulkan physical devices."); - - physical_devices - .iter() - .map(|physical_device| { - instance - .get_physical_device_queue_family_properties(*physical_device) - .iter() - .enumerate() - .find_map(|(index, info)| { - let supports_graphic = - info.queue_flags.contains(vk::QueueFlags::GRAPHICS); - if supports_graphic { - Some((*physical_device, index)) - } else { - None - } - }) - }) - .find_map(|v| v) - } - .ok_or("Failed to find a Vulkan physical device.")?; - - let device: ash::Device = { - let features = vk::PhysicalDeviceFeatures::default(); - - let priorities = [1.0]; + }; - let queue_info = [vk::DeviceQueueCreateInfo::default() - .queue_family_index(queue_family_index as _) - .queue_priorities(&priorities)]; + texture = Some(unsafe { gpu::backend_textures::make_vk((size.width() as i32, size.height() as i32), &image_info, "") }); + } + } - let device_extension_names_raw = []; + if let Some(texture) = texture { + self.surface.replace_backend_texture(&texture, gpu::SurfaceOrigin::TopLeft); + self.vulkan_texture = Some(texture); + } + } - let device_create_info = vk::DeviceCreateInfo::default() - .queue_create_infos(&queue_info) - .enabled_extension_names(&device_extension_names_raw) - .enabled_features(&features); - instance.create_device(physical_device, &device_create_info, None) + pub fn resize_vulkan( + context: &mut Context, + width: f32, + height: f32, + alpha: bool, + ) { + let mut image = None; + let mut queue = None; + if let Some(vulkan_context) = context.vulkan_context.as_mut() { + vulkan_context.resize(width as u32, height as u32); + image = vulkan_context.current_image_raw(); + queue = Some(vulkan_context.index() as u32); } - .or(Err("Failed to create Device."))?; - - let queue_index: usize = 0; - let queue: vk::Queue = device.get_device_queue(queue_family_index as _, queue_index as _); - - Ok(AshGraphics { - queue_and_index: (queue, queue_index), - device, - physical_device, - instance, - entry, - }) - } - pub unsafe fn get_proc(&self, of: gpu::vk::GetProcOf) -> Option { - match of { - gpu::vk::GetProcOf::Instance(instance, name) => { - let ash_instance = vk::Instance::from_raw(instance as _); - self.entry.get_instance_proc_addr(ash_instance, name) - } - gpu::vk::GetProcOf::Device(device, name) => { - let ash_device = vk::Device::from_raw(device as _); - self.instance.get_device_proc_addr(ash_device, name) - } + if let Some(direct_context) = context.direct_context.as_mut() { + let alloc = gpu::vk::Alloc::default(); + let image_info = unsafe { + gpu::vk::ImageInfo::new( + image.unwrap() as gpu::vk::Image, + alloc, + gpu::vk::ImageTiling::OPTIMAL, + gpu::vk::ImageLayout::UNDEFINED, + gpu::vk::Format::R8G8B8A8_UNORM, + 1, + None, + None, + None, + None, + ) + }; + + let bt = unsafe { gpu::backend_textures::make_vk((width as i32, height as i32), &image_info, "") }; + + + let surface = gpu::surfaces::wrap_backend_texture(direct_context, &bt, gpu::SurfaceOrigin::TopLeft, None, ColorType::N32, + None, + None).unwrap(); + + let bounds = skia_safe::Rect::from_wh(width, height); + context.surface_data.state = Default::default(); + context.surface_data.is_opaque = !alpha; + context.surface_data.bounds = bounds; + context.surface = surface; + context.vulkan_texture = Some(bt); } } } diff --git a/crates/canvas-2d/src/image_bitmap.rs b/crates/canvas-2d/src/image_bitmap.rs index b2fcd7dc2..352840a34 100644 --- a/crates/canvas-2d/src/image_bitmap.rs +++ b/crates/canvas-2d/src/image_bitmap.rs @@ -1,9 +1,7 @@ #![allow(dead_code)] - -use core::convert::{From, Into}; use std::sync::Arc; -use skia_safe::{EncodedImageFormat, surfaces}; +use skia_safe::{surfaces, EncodedImageFormat}; use canvas_core::image_asset::ImageAsset; @@ -71,10 +69,10 @@ impl From for ImageBitmapColorSpaceConversion { impl ImageBitmapColorSpaceConversion { pub fn to_color_space(&self) -> Option { - return match self { + match self { ImageBitmapColorSpaceConversion::Default => Some(skia_safe::ColorSpace::new_srgb()), ImageBitmapColorSpaceConversion::None => None, - }; + } } } @@ -107,12 +105,12 @@ impl From for ImageBitmapResizeQuality { impl ImageBitmapResizeQuality { pub fn to_quality(&self) -> skia_safe::SamplingOptions { - return match self { + match self { ImageBitmapResizeQuality::Low => FilterQuality::Low.into(), ImageBitmapResizeQuality::Medium => FilterQuality::Medium.into(), ImageBitmapResizeQuality::High => FilterQuality::High.into(), ImageBitmapResizeQuality::Pixelated => FilterQuality::None.into(), - }; + } } } @@ -237,7 +235,7 @@ pub(crate) fn create_image_bitmap_internal( let image_info = skia_safe::ImageInfo::new( (source_rect.width() as i32, source_rect.height() as i32), - skia_safe::ColorType::N32, + skia_safe::ColorType::RGBA8888, ImageBitmapPremultiplyAlpha::from(premultiply_alpha).into(), ImageBitmapColorSpaceConversion::from(color_space_conversion).to_color_space(), ); @@ -282,13 +280,11 @@ pub(crate) fn create_image_bitmap_internal( }; } } else { - let encoded = image.encode(None, EncodedImageFormat::PNG, 75); if let Some(encoded) = encoded { output.load_from_bytes(encoded.as_bytes()); } - } } } @@ -411,7 +407,7 @@ pub fn create_from_image_asset_src_rect_raw( unsafe { let asset: *const ImageAsset = image_asset as _; let asset = &*asset; - return Arc::into_raw(Arc::new(create_from_image_asset_src_rect( + Arc::into_raw(Arc::new(create_from_image_asset_src_rect( asset, rect, flip_y, @@ -420,7 +416,7 @@ pub fn create_from_image_asset_src_rect_raw( resize_quality, resize_width, resize_height, - ))) as i64; + ))) as i64 } } diff --git a/crates/canvas-2d/src/ios.rs b/crates/canvas-2d/src/ios.rs deleted file mode 100644 index a06d04c0b..000000000 --- a/crates/canvas-2d/src/ios.rs +++ /dev/null @@ -1,69 +0,0 @@ -use std::os::raw::c_void; - -use skia_safe::{Color, ColorType, gpu, PixelGeometry, SurfaceProps, SurfacePropsFlags}; - -use crate::context::{Context, State, SurfaceData, SurfaceEngine}; -use crate::context::paths::path::Path; -use crate::context::text_styles::text_direction::TextDirection; - -#[cfg(feature = "metal")] -impl Context { - pub fn new_metal( - width: f32, - height: f32, - device: *mut c_void, - queue: *mut c_void, - view: *mut c_void, - density: f32, - samples: i32, - alpha: bool, - font_color: i32, - ppi: f32, - direction: u8, - ) -> Self { - let backend = unsafe { - gpu::mtl::BackendContext::new( - device as gpu::mtl::Handle, - queue as gpu::mtl::Handle, - ) - }; - let mut context = gpu::direct_contexts::make_metal(&backend, None).unwrap(); - let surface_props = SurfaceProps::new(SurfacePropsFlags::default(), PixelGeometry::Unknown); - let surface_holder = unsafe { - gpu::surfaces::wrap_mtk_view( - &mut context, - view as gpu::mtl::Handle, - gpu::SurfaceOrigin::TopLeft, - samples.try_into().ok(), - ColorType::BGRA8888, - None, - Some(&surface_props), - ) - }; - - let mut state = State::default(); - state.direction = TextDirection::from(direction as u32); - - let bounds = skia_safe::Rect::from_wh(width, height); - Context { - surface_data: SurfaceData { - bounds, - scale: density, - ppi, - engine: SurfaceEngine::Metal, - }, - surface: surface_holder.unwrap(), - surface_state: false, - direct_context: Some(context), - path: Path::default(), - state, - state_stack: vec![], - font_color: Color::new(font_color as u32), - } - } - - pub fn resize_metal(context: &mut Context, width: f32, height: f32) { - let bounds = skia_safe::Rect::from_wh(width, height); - context.surface_data.bounds = bounds; - } -} diff --git a/crates/canvas-2d/src/lib.rs b/crates/canvas-2d/src/lib.rs index 3b814583a..8598e97f8 100644 --- a/crates/canvas-2d/src/lib.rs +++ b/crates/canvas-2d/src/lib.rs @@ -1,5 +1,3 @@ -extern crate core; - use std::ffi::c_uint; use base64::Engine; @@ -10,11 +8,8 @@ use skia_safe::{ use context::Context; -#[cfg(target_os = "android")] -pub mod android; pub mod context; pub mod image_bitmap; -pub mod ios; pub mod prelude; pub mod utils; @@ -49,7 +44,7 @@ pub fn bytes_to_data_url( let image_info = ImageInfo::new((width, height), ColorType::N32, AlphaType::Unpremul, None); if let Some(image) = images::raster_from_data(&image_info, data, (width * 4) as usize) { let mut quality = quality; - if quality > 100 || quality < 0 { + if quality > 100 { quality = 92; } let data_txt = "data:"; @@ -88,27 +83,90 @@ pub fn bytes_to_data_url( }; } - return "data:,".to_string(); + "data:,".to_string() } -pub(crate) fn flush_custom_surface(context: &mut Context, width: i32, height: i32, dst: &mut [u8]) { - context.flush(); - let info = ImageInfo::new( - ISize::new(width, height), - ColorType::RGBA8888, - AlphaType::Premul, +// use native format +pub fn bytes_to_data_n32_url( + width: i32, + height: i32, + bytes: &[u8], + row_bytes: usize, + format: &str, + quality: c_uint, +) -> String { + let data = unsafe { skia_safe::Data::new_bytes(bytes) }; + let mut encoded_prefix = String::new(); + encoded_prefix.push_str("data:"); + encoded_prefix.push_str(format); + encoded_prefix.push_str(";base64,"); + + #[cfg(any(target_os = "ios", target_os = "macos"))] + let fmt = ColorType::BGRA8888; + + #[cfg(any(target_os = "android"))] + let fmt = ColorType::RGBA8888; + + let image_info = ImageInfo::new((width, height), fmt, AlphaType::Unpremul, None); + if let Some(image) = images::raster_from_data(&image_info, data, row_bytes) { + let mut quality = quality; + if quality > 100 { + quality = 92; + } + let data_txt = "data:"; + let base_64_txt = ";base64,"; + let mut encoded_prefix = + String::with_capacity(data_txt.len() + format.len() + base_64_txt.len()); + encoded_prefix.push_str("data:"); + encoded_prefix.push_str(format); + encoded_prefix.push_str(";base64,"); + let data = image.encode( None, + match format { + IMAGE_JPG | IMAGE_JPEG => EncodedImageFormat::JPEG, + IMAGE_WEBP => EncodedImageFormat::WEBP, + IMAGE_GIF => EncodedImageFormat::GIF, + IMAGE_HEIF | IMAGE_HEIC | IMAGE_HEIF_SEQUENCE | IMAGE_HEIC_SEQUENCE => { + EncodedImageFormat::HEIF + } + _ => EncodedImageFormat::PNG, + }, + quality, ); + return match data { + Some(data) => { + let encoded_data = + base64::engine::general_purpose::STANDARD.encode(data.as_bytes()); + if encoded_data.is_empty() { + return "data:,".to_string(); + } + format!("{}{}", encoded_prefix, encoded_data) + } + _ => "data:,".to_string(), + }; + } - if let Some(mut dst_surface) = surfaces::wrap_pixels(&info, dst, None, None) { - let dst_canvas = dst_surface.canvas(); + "data:,".to_string() +} - if let Some(image) = context.get_image() { - dst_canvas.draw_image(image, Point::new(0., 0.), None); +pub(crate) fn flush_custom_surface(context: &mut Context, width: i32, height: i32, dst: &mut [u8]) { + context.flush(); + let info = ImageInfo::new( + ISize::new(width, height), + ColorType::RGBA8888, + AlphaType::Premul, + None, + ); - if let Some(mut context) = dst_surface.direct_context() { - context.flush_and_submit(); - } + if let Some(mut dst_surface) = surfaces::wrap_pixels(&info, dst, None, None) { + let dst_canvas = dst_surface.canvas(); + + if let Some(image) = context.get_image() { + dst_canvas.draw_image(image, Point::new(0., 0.), None); + + if let Some(mut context) = dst_surface.direct_context() { + context.flush_and_submit(); } } + } } diff --git a/crates/canvas-2d/src/utils/gl.rs b/crates/canvas-2d/src/utils/gl.rs index 08150c48c..abbf52dfe 100644 --- a/crates/canvas-2d/src/utils/gl.rs +++ b/crates/canvas-2d/src/utils/gl.rs @@ -1,5 +1,3 @@ -use ::core::{convert::TryInto, mem}; - const GL_UNSIGNED_BYTE: u32 = 0x1401; const GL_FLOAT: u32 = 0x1406; const GL_HALF_FLOAT: u32 = 0x140B; @@ -48,13 +46,13 @@ fn flip_pixels(pixels: &'_ mut [u8], rows: usize) { type SwapBlock = [u8; SWAP_SIZE]; let i_top: &mut SwapBlock = i_top.try_into().unwrap(); let i_bot: &mut SwapBlock = i_bot.try_into().unwrap(); - mem::swap(i_top, i_bot); + std::mem::swap(i_top, i_bot); } for (b_top, b_bot) in Iterator::zip( i_tops.into_remainder().iter_mut(), i_bots.into_remainder().iter_mut(), ) { - mem::swap(b_top, b_bot); + std::mem::swap(b_top, b_bot); } } } diff --git a/crates/canvas-android/Cargo.toml b/crates/canvas-android/Cargo.toml index a8064870e..30cbb54e3 100644 --- a/crates/canvas-android/Cargo.toml +++ b/crates/canvas-android/Cargo.toml @@ -8,17 +8,17 @@ name = "canvasnative" crate-type = ["cdylib"] [dependencies] -canvas-core = { workspace = true, features = ["2d"] } -canvas-2d = { workspace = true, features = ["gl"] } +canvas-core = { workspace = true, features = ["2d", "gl", "vulkan"] } +canvas-2d = { workspace = true, features = ["gl", "vulkan"] } canvas-webgl.workspace = true -canvas-c = { workspace = true, features = ["2d", "webgl", "gl"] } +canvas-c = { workspace = true, features = ["2d", "webgl", "gl", "vulkan"] } gl-bindings.workspace = true raw-window-handle.workspace = true parking_lot.workspace = true -jni = "0.21.1" +jni = { workspace = true } ndk = { version = "0.7.0", features = ["bitmap"] } -libloading = "0.8.3" -log = "0.4.20" +libloading = "0.8.5" +log.workspace = true android_logger = "0.14.1" -skia-safe = { workspace = true, features = ["gl", "textlayout"] } +skia-safe = { workspace = true, features = ["gl", "vulkan", "textlayout"] } itertools.workspace = true \ No newline at end of file diff --git a/crates/canvas-android/src/jni_compat/org_nativescript_canvas_NSCCanvas.rs b/crates/canvas-android/src/jni_compat/org_nativescript_canvas_NSCCanvas.rs index c5140f6a5..97ed32249 100644 --- a/crates/canvas-android/src/jni_compat/org_nativescript_canvas_NSCCanvas.rs +++ b/crates/canvas-android/src/jni_compat/org_nativescript_canvas_NSCCanvas.rs @@ -1,30 +1,57 @@ -use std::ffi::c_void; -use std::ptr; - +use canvas_2d::context::fill_and_stroke_styles::paint::PaintStyle; +use canvas_2d::context::paths::path::Path; +use canvas_c::webgpu::gpu::CanvasWebGPUInstance; +use canvas_c::WebGLState; +use canvas_core::context_attributes::PowerPreference; +use canvas_core::gpu::gl::GLContext; +use jni::objects::{JClass, JIntArray, JObject}; +use jni::sys::{jboolean, jfloat, jint, jlong, jobject, JNI_FALSE, JNI_TRUE}; use jni::JNIEnv; -use jni::objects::{JClass, JObject}; -use jni::sys::{jboolean, jfloat, jint, jlong, JNI_FALSE, JNI_TRUE, jobject}; use ndk::native_window::NativeWindow; -use parking_lot::RwLock; use raw_window_handle::RawWindowHandle; -use skia_safe::{AlphaType, ColorType, ImageInfo, ISize, Rect}; - -use canvas_2d::context::paths::path::Path; -use canvas_c::webgpu::gpu::CanvasWebGPUInstance; -use canvas_c::webgpu::gpu_canvas_context::CanvasGPUCanvasContext; -use canvas_core::context_attributes::{ContextAttributes, PowerPreference}; -use canvas_core::gl::GLContext; +use skia_safe::{AlphaType, ColorType, ISize, ImageInfo, Rect}; +use std::ffi::c_void; +use std::ptr; +use std::ptr::NonNull; fn to_raw_window_handler(window: &NativeWindow) -> RawWindowHandle { - let handle = raw_window_handle::AndroidNdkWindowHandle::new(ptr::NonNull::new(window.ptr().as_ptr() as *mut c_void).unwrap()); - return RawWindowHandle::AndroidNdk(handle); + let handle = raw_window_handle::AndroidNdkWindowHandle::new( + ptr::NonNull::new(window.ptr().as_ptr() as *mut c_void).unwrap(), + ); + RawWindowHandle::AndroidNdk(handle) } -#[allow(dead_code)] -pub(crate) struct AndroidGLContext { - pub(crate) contextAttributes: ContextAttributes, - pub(crate) gl_context: GLContext, - android_window: Option, +#[no_mangle] +pub extern "system" fn nativeGetVulkanVersion(mut env: JNIEnv, _: JClass, array: JIntArray) { + #[cfg(feature = "vulkan")] + { + unsafe { + if let Some(version) = VulkanContext::version() { + if let Ok(elements) = + env.get_array_elements_critical(&array, jni::objects::ReleaseMode::CopyBack) + { + let size = elements.len(); + if size >= 3 { + let buf = std::slice::from_raw_parts_mut( + elements.as_ptr() as *mut jint, + size * std::mem::size_of::(), + ); + buf[0] = version.0 as jint; + buf[1] = version.1 as jint; + buf[2] = version.2 as jint; + } + drop(elements); + return; + } + + let _ = env.set_int_array_region( + &array, + 0, + &[version.0 as jint, version.1 as jint, version.2 as jint], + ); + } + } + } } #[no_mangle] @@ -67,7 +94,9 @@ pub extern "system" fn nativeResizeWebGPU( let interface = env.get_native_interface(); if let Some(window) = NativeWindow::from_surface(interface, surface) { let ptr = window.ptr().as_ptr(); - let context: *mut CanvasGPUCanvasContext = context as _; + let context: *mut canvas_c::webgpu::gpu_canvas_context::CanvasGPUCanvasContext = + context as _; + #[cfg(any(target_os = "android"))] canvas_c::webgpu::gpu_canvas_context::canvas_native_webgpu_context_resize( context, ptr as *mut c_void, @@ -78,7 +107,7 @@ pub extern "system" fn nativeResizeWebGPU( } } -/* +// #[cfg(feature = "vulkan")] #[no_mangle] pub extern "system" fn nativeCreate2dContextVulkan( env: JNIEnv, @@ -88,7 +117,6 @@ pub extern "system" fn nativeCreate2dContextVulkan( surface: jobject, alpha: jboolean, density: jfloat, - samples: jint, font_color: jint, ppi: jfloat, direction: jint, @@ -102,7 +130,6 @@ pub extern "system" fn nativeCreate2dContextVulkan( height as f32, window.ptr().as_ptr() as *mut c_void, density, - samples as u32, alpha == JNI_TRUE, font_color, ppi, @@ -116,10 +143,8 @@ pub extern "system" fn nativeCreate2dContextVulkan( 0 } -*/ - #[no_mangle] -pub extern "system" fn nativeInitGL( +pub extern "system" fn nativeInitWebGL( env: JNIEnv, _: JClass, surface: jobject, @@ -134,7 +159,6 @@ pub extern "system" fn nativeInitGL( desynchronized: jboolean, xr_compatible: jboolean, version: jint, - is_canvas: jboolean, ) -> jlong { unsafe { let interface = env.get_native_interface(); @@ -142,33 +166,31 @@ pub extern "system" fn nativeInitGL( if version == 2 && !GLContext::has_gl2support() { return 0; } - if let Ok(power_preference) = PowerPreference::try_from(power_preference) { - let mut attrs = ContextAttributes::new( + let context = canvas_c::canvas_native_webgl_create( + window.ptr().as_ptr() as _, + window.width(), + window.height(), + version as i32, alpha == JNI_TRUE, antialias == JNI_TRUE, depth == JNI_TRUE, fail_if_major_performance_caveat == JNI_TRUE, - power_preference, + power_preference.into(), premultiplied_alpha == JNI_TRUE, preserve_drawing_buffer == JNI_TRUE, stencil == JNI_TRUE, desynchronized == JNI_TRUE, xr_compatible == JNI_TRUE, - is_canvas == JNI_TRUE, ); - let window_handle = to_raw_window_handler(&window); - if let Some(gl_context) = GLContext::create_window_context(&mut attrs, window.width(), window.height(), window_handle) - { - let context = AndroidGLContext { - android_window: Some(window), - gl_context, - contextAttributes: attrs, - }; - drop(env); - return Box::into_raw(Box::new(context)) as jlong; + drop(env); + + if context.is_null() { + return 0; } + + return context as jlong; } } } @@ -176,7 +198,7 @@ pub extern "system" fn nativeInitGL( } #[no_mangle] -pub extern "system" fn nativeInitGLNoSurface( +pub extern "system" fn nativeInitWebGLNoSurface( _: JNIEnv, _: JClass, width: jint, @@ -192,123 +214,120 @@ pub extern "system" fn nativeInitGLNoSurface( desynchronized: jboolean, xr_compatible: jboolean, version: jint, - is_canvas: jboolean, ) -> jlong { if version == 2 && !GLContext::has_gl2support() { return 0; } if let Ok(power_preference) = PowerPreference::try_from(power_preference) { - let mut attrs = ContextAttributes::new( + let context = canvas_c::canvas_native_webgl_create_no_window( + width, + height, + version as i32, alpha == JNI_TRUE, antialias == JNI_TRUE, depth == JNI_TRUE, fail_if_major_performance_caveat == JNI_TRUE, - power_preference, + power_preference.into(), premultiplied_alpha == JNI_TRUE, preserve_drawing_buffer == JNI_TRUE, stencil == JNI_TRUE, desynchronized == JNI_TRUE, xr_compatible == JNI_TRUE, - is_canvas == JNI_TRUE, + false, ); - if let Some(gl_context) = GLContext::create_pbuffer(&mut attrs, width, height) { - return Box::into_raw(Box::new(AndroidGLContext { - android_window: None, - gl_context, - contextAttributes: attrs, - })) as jlong; + if context.is_null() { + return 0; } + return context as jlong; } 0 } -fn native_create_2d_context( - context: jlong, +#[no_mangle] +pub extern "system" fn nativeCreate2DContext( + env: JNIEnv, + _: JClass, width: jint, height: jint, + surface: jobject, alpha: jboolean, density: jfloat, - samples: jint, font_color: jint, ppi: jfloat, direction: jint, ) -> jlong { - if context == 0 { - return 0; - } - - let context = context as *mut AndroidGLContext; - let context = unsafe { &mut *context }; - - context.gl_context.make_current(); - let mut frame_buffers = [0]; unsafe { - gl_bindings::GetIntegerv(gl_bindings::FRAMEBUFFER_BINDING, frame_buffers.as_mut_ptr()) - }; - + if surface.is_null() { + let ctx_2d = canvas_c::CanvasRenderingContext2D::new_gl( + canvas_2d::context::Context::new_gl( + ptr::null_mut(), + width as f32, + height as f32, + density, + alpha == JNI_TRUE, + font_color, + ppi, + canvas_2d::context::text_styles::text_direction::TextDirection::from( + direction as u32, + ), + ), + alpha == JNI_TRUE, + ); - let ctx_2d = canvas_c::CanvasRenderingContext2D::new_gl( - canvas_2d::context::Context::new_gl( - width as f32, - height as f32, - density, - frame_buffers[0], - samples, - alpha == JNI_TRUE, - font_color, - ppi, - canvas_2d::context::text_styles::text_direction::TextDirection::from(direction as u32), - ), - context.gl_context.clone(), - alpha == JNI_TRUE, - ); + drop(env); + return Box::into_raw(Box::new(ctx_2d)) as jlong; + } + return if let Some(window) = NativeWindow::from_surface(env.get_native_interface(), surface) { + let width = window.width(); + let height = window.height(); - //ctx_2d.get_context_mut().flush(); - //context.gl_context.swap_buffers(); + let ctx_2d = canvas_c::CanvasRenderingContext2D::new_gl( + canvas_2d::context::Context::new_gl( + window.ptr().as_ptr() as _, + width as f32, + height as f32, + density, + alpha == JNI_TRUE, + font_color, + ppi, + canvas_2d::context::text_styles::text_direction::TextDirection::from( + direction as u32, + ), + ), + alpha == JNI_TRUE, + ); - Box::into_raw(Box::new(ctx_2d)) as jlong -} + drop(env); + Box::into_raw(Box::new(ctx_2d)) as jlong + } else { + let ctx_2d = canvas_c::CanvasRenderingContext2D::new_gl( + canvas_2d::context::Context::new_gl( + ptr::null_mut(), + width as f32, + height as f32, + density, + alpha == JNI_TRUE, + font_color, + ppi, + canvas_2d::context::text_styles::text_direction::TextDirection::from( + direction as u32, + ), + ), + alpha == JNI_TRUE, + ); -#[no_mangle] -pub extern "system" fn nativeCreate2DContext( - context: jlong, - width: jint, - height: jint, - alpha: jboolean, - density: jfloat, - samples: jint, - font_color: jint, - ppi: jfloat, - direction: jint, -) -> jlong { - native_create_2d_context( - context, width, height, alpha, density, samples, font_color, ppi, direction, - ) -} + drop(env); + Box::into_raw(Box::new(ctx_2d)) as jlong + } + } -#[no_mangle] -pub extern "system" fn nativeCreate2DContextNormal( - _env: JNIEnv, - _: JClass, - context: jlong, - width: jint, - height: jint, - alpha: jboolean, - density: jfloat, - samples: jint, - font_color: jint, - ppi: jfloat, - direction: jint, -) -> jlong { - native_create_2d_context( - context, width, height, alpha, density, samples, font_color, ppi, direction, - ) + 0 } #[no_mangle] -pub extern "system" fn nativeUpdateGLSurface( +pub extern "system" fn nativeUpdateWebGLSurface( env: JNIEnv, _: JClass, surface: jobject, @@ -317,19 +336,16 @@ pub extern "system" fn nativeUpdateGLSurface( if context == 0 { return; } - let context = context as *mut AndroidGLContext; + let context = context as *mut WebGLState; let context = unsafe { &mut *context }; unsafe { if let Some(window) = NativeWindow::from_surface(env.get_native_interface(), surface) { - let handle = to_raw_window_handler(&window); - context.gl_context.set_window_surface( - &mut context.contextAttributes, + context.get_inner_mut().set_window_surface( window.width(), window.height(), - handle, + NonNull::new(window.ptr().as_ptr() as _).unwrap(), ); - context.gl_context.make_current(); - context.android_window = Some(window); + context.get_inner().make_current(); drop(env); } } @@ -340,6 +356,8 @@ pub extern "system" fn nativeUpdate2DSurface( env: JNIEnv, _: JClass, surface: jobject, + width: jint, + height: jint, context: jlong, ) { if context == 0 { @@ -350,8 +368,36 @@ pub extern "system" fn nativeUpdate2DSurface( unsafe { if let Some(window) = NativeWindow::from_surface(env.get_native_interface(), surface) { - let width = window.width() as f32; - let height = window.height() as f32; + { + let context = context.get_context_mut(); + let alpha = !context.surface_data().is_opaque(); + if let Some(context) = context.gl_context.as_mut() { + let mut attr = canvas_core::context_attributes::ContextAttributes::new( + alpha, + false, + false, + false, + PowerPreference::Default, + true, + false, + false, + false, + false, + true, + ); + + let handle = raw_window_handle::AndroidNdkWindowHandle::new( + NonNull::new(window.ptr().as_ptr() as _).unwrap(), + ); + let handle = RawWindowHandle::AndroidNdk(handle); + context.set_window_surface(&mut attr, width, height, handle); + context.make_current(); + } + } + + let width = width as f32; + let height = height as f32; + context.resize(width, height) } drop(env); @@ -390,11 +436,10 @@ fn native_update_gl_no_surface(width: jint, height: jint, context: jlong) { if context == 0 { return; } - let context = context as *mut AndroidGLContext; + let context = context as *mut WebGLState; let context = unsafe { &mut *context }; - context - .gl_context - .resize_pbuffer(&mut context.contextAttributes, width, height); + context.get_inner().make_current(); + context.get_inner_mut().resize_pbuffer(width, height); } #[no_mangle] @@ -403,7 +448,7 @@ pub extern "system" fn nativeUpdateGLNoSurface(width: jint, height: jint, contex } #[no_mangle] -pub extern "system" fn nativeUpdateGLNoSurfaceNormal( +pub extern "system" fn nativeUpdateWebGLNoSurfaceNormal( _env: JNIEnv, _: JClass, width: jint, @@ -414,62 +459,38 @@ pub extern "system" fn nativeUpdateGLNoSurfaceNormal( } #[no_mangle] -pub extern "system" fn nativeReleaseGL(context: jlong) { +pub extern "system" fn nativeReleaseWebGL(context: jlong) { if context == 0 { return; } - let context = context as *mut AndroidGLContext; + let context = context as *mut WebGLState; let _ = unsafe { Box::from_raw(context) }; } #[no_mangle] -pub extern "system" fn nativeReleaseGLNormal(_env: JNIEnv, _: JClass, context: jlong) { +pub extern "system" fn nativeReleaseWebGLNormal(_env: JNIEnv, _: JClass, context: jlong) { if context == 0 { return; } - let context = context as *mut AndroidGLContext; + let context = context as *mut WebGLState; let _ = unsafe { Box::from_raw(context) }; } #[no_mangle] -pub extern "system" fn nativeGetGLPointer(gl_context: jlong) -> jlong { +pub extern "system" fn nativeMakeWebGLCurrent(gl_context: jlong) -> jboolean { if gl_context == 0 { return 0; } - let gl_context = gl_context as *mut AndroidGLContext; + let gl_context = gl_context as *mut WebGLState; let gl_context = unsafe { &*gl_context }; - gl_context.gl_context.as_raw_inner() as jlong -} - -#[no_mangle] -pub extern "system" fn nativeGetGLPointerNormal( - _env: JNIEnv, - _: JClass, - gl_context: jlong, -) -> jlong { - if gl_context == 0 { - return 0; - } - let gl_context = gl_context as *mut AndroidGLContext; - let gl_context = unsafe { &*gl_context }; - gl_context.gl_context.as_raw_inner() as jlong -} - -#[no_mangle] -pub extern "system" fn nativeMakeGLCurrent(gl_context: jlong) -> jboolean { - if gl_context == 0 { - return 0; - } - let gl_context = gl_context as *mut AndroidGLContext; - let gl_context = unsafe { &*gl_context }; - if gl_context.gl_context.make_current() { + if gl_context.get_inner().make_current() { return JNI_TRUE; } JNI_FALSE } #[no_mangle] -pub extern "system" fn nativeMakeGLCurrentNormal( +pub extern "system" fn nativeMakeWebGLCurrentNormal( _env: JNIEnv, _: JClass, gl_context: jlong, @@ -477,86 +498,14 @@ pub extern "system" fn nativeMakeGLCurrentNormal( if gl_context == 0 { return 0; } - let gl_context = gl_context as *mut AndroidGLContext; + let gl_context = gl_context as *mut WebGLState; let gl_context = unsafe { &*gl_context }; - if gl_context.gl_context.make_current() { + if gl_context.get_inner().make_current() { return JNI_TRUE; } JNI_FALSE } -#[no_mangle] -pub extern "system" fn nativeGLPointerRefCount(gl_context: jlong) -> jlong { - if gl_context == 0 { - return 0; - } - let gl_context = gl_context as *const RwLock; - if gl_context.is_null() { - return 0; - } - - let ctx = GLContext::from_raw_inner(gl_context); - let count = ctx.get_strong_count(); - let _ = ctx.as_raw_inner(); - - count as i64 -} - -#[no_mangle] -pub extern "system" fn nativeGLPointerRefCountNormal( - _env: JNIEnv, - _: JClass, - gl_context: jlong, -) -> jlong { - if gl_context == 0 { - return 0; - } - let gl_context = gl_context as *const RwLock; - if gl_context.is_null() { - return 0; - } - - let ctx = GLContext::from_raw_inner(gl_context); - let count = ctx.get_strong_count(); - let _ = ctx.as_raw_inner(); - - count as i64 -} - -#[no_mangle] -pub extern "system" fn nativeReleaseGLPointer(gl_context: jlong) { - if gl_context == 0 { - return; - } - let gl_context = gl_context as *const RwLock; - if gl_context.is_null() { - return; - } - - let ctx = GLContext::from_raw_inner(gl_context); - - if ctx.get_strong_count() <= 1 { - ctx.increment_strong_count(); - } -} - -#[no_mangle] -pub extern "system" fn nativeReleaseGLPointerNormal(_env: JNIEnv, _: JClass, gl_context: jlong) { - if gl_context == 0 { - return; - } - let gl_context = gl_context as *const RwLock; - if gl_context.is_null() { - return; - } - - let ctx = GLContext::from_raw_inner(gl_context); - - if ctx.get_strong_count() <= 1 { - ctx.increment_strong_count(); - } -} - #[no_mangle] pub extern "system" fn nativeContext2DTest(context: jlong) { if context == 0 { @@ -659,6 +608,33 @@ pub extern "system" fn nativeContext2DPathTestNormal(_env: JNIEnv, _: JClass, co context.render(); } + +#[no_mangle] +pub extern "system" fn nativeContext2DConicTest(_env: JNIEnv, _: JClass, context: jlong) { + if context == 0 { + return; + } + + let context = context as *mut canvas_c::CanvasRenderingContext2D; + let context = unsafe { &mut *context }; + + context.make_current(); + { + let ctx = context.get_context_mut(); + + let (width, height) = ctx.dimensions(); + let mut gradient = ctx.create_conic_gradient(90., width / 2., height / 2.); + gradient.add_color_stop_str(0., "red"); + gradient.add_color_stop_str(0.25, "orange"); + gradient.add_color_stop_str(0.5, "yellow"); + gradient.add_color_stop_str(0.75, "green"); + gradient.add_color_stop_str(1., "blue"); + ctx.set_fill_style(PaintStyle::Gradient(gradient)); + ctx.fill_rect_xywh(20., 20., width, height); + } + context.render(); +} + #[no_mangle] pub extern "system" fn nativeContext2DRender(context: jlong) { if context == 0 { @@ -672,7 +648,7 @@ pub extern "system" fn nativeContext2DRender(context: jlong) { } #[no_mangle] -pub extern "system" fn nativeWriteCurrentGLContextToBitmap( +pub extern "system" fn nativeWriteCurrentWebGLContextToBitmap( env: JNIEnv, _: JClass, context: jlong, @@ -682,7 +658,7 @@ pub extern "system" fn nativeWriteCurrentGLContextToBitmap( return; } - let context = context as *mut AndroidGLContext; + let context = context as *mut WebGLState; let context = unsafe { &mut *context }; unsafe { @@ -691,7 +667,7 @@ pub extern "system" fn nativeWriteCurrentGLContextToBitmap( bitmap, Box::new(move |cb| { if let Some((image_data, info)) = cb { - context.gl_context.make_current(); + context.get_inner().make_current(); let mut buf = vec![0u8; (info.width() * info.height() * 4) as usize]; gl_bindings::Flush(); gl_bindings::ReadPixels( @@ -788,9 +764,7 @@ pub extern "system" fn nativeWebGLC2DRender( return; } - let state = canvas_c::canvas_native_webgl_create( - gl_context, 2, true, true, true, false, 0, true, false, false, false, false, - ); + let state = gl_context as *mut WebGLState; let context = context as *mut canvas_c::CanvasRenderingContext2D; let context = unsafe { &mut *context }; diff --git a/crates/canvas-android/src/jni_compat/org_nativescript_canvas_NSCImageAsset.rs b/crates/canvas-android/src/jni_compat/org_nativescript_canvas_NSCImageAsset.rs index c279421a3..d42a5d330 100644 --- a/crates/canvas-android/src/jni_compat/org_nativescript_canvas_NSCImageAsset.rs +++ b/crates/canvas-android/src/jni_compat/org_nativescript_canvas_NSCImageAsset.rs @@ -1,5 +1,5 @@ use jni::objects::{JByteArray, JByteBuffer, JClass, JIntArray, JObject, JString, ReleaseMode}; -use jni::sys::{jboolean, jlong, jobject, JNI_FALSE, JNI_TRUE}; +use jni::sys::{jboolean, jint, jlong, jobject, JNI_FALSE, JNI_TRUE}; use jni::JNIEnv; use ndk::bitmap::BitmapFormat; @@ -111,7 +111,7 @@ pub extern "system" fn nativeLoadFromUrl( JNI_FALSE } Err(error) => { - let asset = unsafe { &*asset }; + let asset = unsafe { &*asset }; let error = error.to_string(); asset.set_error(error.as_str()); JNI_FALSE @@ -124,6 +124,8 @@ pub unsafe extern "system" fn nativeLoadFromBytes( mut env: JNIEnv, _: JClass, asset: jlong, + width: jint, + height: jint, byteArray: JByteArray, ) -> jboolean { if asset == 0 { @@ -137,7 +139,7 @@ pub unsafe extern "system" fn nativeLoadFromBytes( let size = bytes.len(); let slice = std::slice::from_raw_parts_mut(bytes.as_ptr() as *mut u8, size); let asset = unsafe { &*asset }; - if asset.load_from_bytes(slice) { + if asset.load_from_raw_bytes(width as u32, height as u32, 4, slice.to_vec()) { return JNI_TRUE; } JNI_FALSE @@ -148,6 +150,62 @@ pub unsafe extern "system" fn nativeLoadFromBytes( #[no_mangle] pub extern "system" fn nativeLoadFromBuffer( + env: JNIEnv, + _: JClass, + asset: jlong, + width: jint, + height: jint, + buffer: JByteBuffer, +) -> jboolean { + if asset == 0 { + return JNI_FALSE; + } + + let asset = asset as *const ImageAsset; + + if let (Ok(buf), Ok(size)) = ( + env.get_direct_buffer_address(&buffer), + env.get_direct_buffer_capacity(&buffer), + ) { + let slice = unsafe { std::slice::from_raw_parts(buf, size) }; + let asset = unsafe { &*asset }; + if asset.load_from_raw_bytes(width as u32, height as u32, 4, slice.to_vec()) { + return JNI_TRUE; + } + } + JNI_FALSE +} + + +#[no_mangle] +pub unsafe extern "system" fn nativeLoadFromEncodedBytes( + mut env: JNIEnv, + _: JClass, + asset: jlong, + byteArray: JByteArray, +) -> jboolean { + if asset == 0 { + return JNI_FALSE; + } + + let asset = asset as *const ImageAsset; + + match env.get_array_elements_critical(&byteArray, ReleaseMode::NoCopyBack) { + Ok(bytes) => { + let size = bytes.len(); + let slice = std::slice::from_raw_parts_mut(bytes.as_ptr() as *mut u8, size); + let asset = unsafe { &*asset }; + if asset.load_from_bytes(slice) { + return JNI_TRUE; + } + JNI_FALSE + } + Err(_) => JNI_FALSE, + } +} + +#[no_mangle] +pub extern "system" fn nativeLoadFromEncodedBuffer( env: JNIEnv, _: JClass, asset: jlong, diff --git a/crates/canvas-android/src/jni_compat/org_nativescript_canvas_NSCWebGLRenderingContext.rs b/crates/canvas-android/src/jni_compat/org_nativescript_canvas_NSCWebGLRenderingContext.rs index 9b61a7da1..857c87e26 100644 --- a/crates/canvas-android/src/jni_compat/org_nativescript_canvas_NSCWebGLRenderingContext.rs +++ b/crates/canvas-android/src/jni_compat/org_nativescript_canvas_NSCWebGLRenderingContext.rs @@ -1,11 +1,10 @@ use std::os::raw::c_void; +use canvas_c::WebGLState; use jni::objects::{JClass, JObject}; use jni::sys::{jboolean, jint, jlong, JNI_TRUE}; use jni::JNIEnv; -use crate::jni_compat::org_nativescript_canvas_NSCCanvas::AndroidGLContext; - #[no_mangle] pub extern "system" fn nativeTexImage2D( env: JNIEnv, @@ -23,13 +22,13 @@ pub extern "system" fn nativeTexImage2D( return; } - let context = context as *mut AndroidGLContext; + let context = context as *mut WebGLState; let context = unsafe { &mut *context }; let bytes = crate::utils::image::get_bytes_from_bitmap(&env, bitmap); if let Some((bytes, info)) = bytes { - context.gl_context.make_current(); + context.get_inner().make_current(); let width = info.width(); let height = info.height(); unsafe { @@ -88,14 +87,14 @@ pub extern "system" fn nativeTexSubImage2D( return; } - let context = context as *mut AndroidGLContext; + let context = context as *mut WebGLState; let context = unsafe { &mut *context }; let bytes = crate::utils::image::get_bytes_from_bitmap(&env, bitmap); if let Some((bytes, info)) = bytes { unsafe { - context.gl_context.make_current(); + context.get_inner().make_current(); let width = info.width(); let height = info.height(); if flip_y == JNI_TRUE { diff --git a/crates/canvas-android/src/lib.rs b/crates/canvas-android/src/lib.rs index 3d8db0896..d4d0a4309 100644 --- a/crates/canvas-android/src/lib.rs +++ b/crates/canvas-android/src/lib.rs @@ -1,7 +1,6 @@ #![allow(non_snake_case)] extern crate android_logger; -extern crate core; extern crate log; use std::os::raw::c_void; @@ -13,12 +12,15 @@ use ::jni::JavaVM; use android_logger::Config; use itertools::izip; use jni::NativeMethod; -use jni::sys::jlong; +use jni::sys::{jfloat, jlong}; use log::LevelFilter; -use crate::jni_compat::org_nativescript_canvas_NSCCanvas::{nativeContext2DPathTest, nativeContext2DPathTestNormal, nativeContext2DRender, nativeContext2DTest, nativeContext2DTestNormal, nativeCreate2DContext, nativeCreate2DContextNormal, nativeCustomWithBitmapFlush, nativeGetGLPointer, nativeGetGLPointerNormal, nativeGLPointerRefCount, nativeGLPointerRefCountNormal, nativeInitGL, nativeInitGLNoSurface, nativeInitWebGPU, nativeMakeGLCurrent, nativeMakeGLCurrentNormal, nativeReleaseGL, nativeReleaseGLNormal, nativeReleaseGLPointer, nativeReleaseGLPointerNormal, nativeResizeWebGPU, nativeUpdate2DSurface, nativeUpdate2DSurfaceNoSurface, nativeUpdate2DSurfaceNoSurfaceNormal, nativeUpdateGLNoSurface, nativeUpdateGLNoSurfaceNormal, nativeUpdateGLSurface, nativeWebGLC2DRender, nativeWriteCurrentGLContextToBitmap}; +// #[cfg(feature = "vulkan")] +use crate::jni_compat::org_nativescript_canvas_NSCCanvas::{nativeCreate2dContextVulkan, nativeGetVulkanVersion}; + +use crate::jni_compat::org_nativescript_canvas_NSCCanvas::{nativeContext2DPathTest, nativeContext2DPathTestNormal, nativeContext2DRender, nativeContext2DTest, nativeContext2DTestNormal, nativeCreate2DContext, nativeCustomWithBitmapFlush, nativeInitWebGL, nativeInitWebGLNoSurface, nativeInitWebGPU, nativeMakeWebGLCurrent, nativeMakeWebGLCurrentNormal, nativeReleaseWebGL, nativeReleaseWebGLNormal, nativeResizeWebGPU, nativeUpdate2DSurface, nativeUpdate2DSurfaceNoSurface, nativeUpdate2DSurfaceNoSurfaceNormal, nativeUpdateGLNoSurface, nativeUpdateWebGLNoSurfaceNormal, nativeUpdateWebGLSurface, nativeWebGLC2DRender, nativeWriteCurrentWebGLContextToBitmap, nativeContext2DConicTest}; use crate::jni_compat::org_nativescript_canvas_NSCCanvasRenderingContext2D::{nativeCreatePattern, nativeDrawAtlasWithBitmap, nativeDrawImageDxDyDwDhWithAsset, nativeDrawImageDxDyDwDhWithBitmap, nativeDrawImageDxDyWithAsset, nativeDrawImageDxDyWithBitmap, nativeDrawImageWithAsset, nativeDrawImageWithBitmap, nativeScale}; -use crate::jni_compat::org_nativescript_canvas_NSCImageAsset::{nativeCreateImageAsset, nativeDestroyImageAsset, nativeGetDimensions, nativeGetError, nativeLoadFromBitmap, nativeLoadFromBuffer, nativeLoadFromBytes, nativeLoadFromPath, nativeLoadFromUrl}; +use crate::jni_compat::org_nativescript_canvas_NSCImageAsset::{nativeCreateImageAsset, nativeDestroyImageAsset, nativeGetDimensions, nativeGetError, nativeLoadFromBitmap, nativeLoadFromBuffer, nativeLoadFromBytes, nativeLoadFromEncodedBuffer, nativeLoadFromEncodedBytes, nativeLoadFromPath, nativeLoadFromUrl}; use crate::jni_compat::org_nativescript_canvas_NSCImageBitmap::{nativeLoadBitmapFromBuffer, nativeLoadBitmapFromBufferOptions, nativeLoadBitmapFromBufferRectOptions, nativeLoadBitmapFromBytes, nativeLoadBitmapFromBytesOptions, nativeLoadBitmapFromBytesRectOptions}; use crate::jni_compat::org_nativescript_canvas_NSCWebGLRenderingContext::{ nativeTexImage2D, nativeTexSubImage2D, @@ -65,20 +67,18 @@ pub extern "system" fn JNI_OnLoad(vm: JavaVM, _reserved: *const c_void) -> jint let canvas_class = env.find_class(NSC_CANVAS_CLASS).unwrap(); - let canvas_method_names = [ - "nativeInitGL", - "nativeInitGLNoSurface", + + let mut canvas_method_names = vec![ + "nativeInitWebGL", + "nativeInitWebGLNoSurface", "nativeCreate2DContext", - "nativeUpdateGLSurface", + "nativeUpdateWebGLSurface", "nativeUpdate2DSurface", "nativeUpdate2DSurfaceNoSurface", - "nativeUpdateGLNoSurface", - "nativeReleaseGL", - "nativeMakeGLCurrent", - "nativeGLPointerRefCount", - "nativeGetGLPointer", - "nativeReleaseGLPointer", - "nativeWriteCurrentGLContextToBitmap", + "nativeUpdateWebGLNoSurface", + "nativeReleaseWebGL", + "nativeMakeWebGLCurrent", + "nativeWriteCurrentWebGLContextToBitmap", "nativeInitContextWithCustomSurface", "nativeResizeCustomSurface", "nativeCustomWithBitmapFlush", @@ -88,22 +88,25 @@ pub extern "system" fn JNI_OnLoad(vm: JavaVM, _reserved: *const c_void) -> jint "nativeWebGLC2DRender", "nativeInitWebGPU", "nativeResizeWebGPU", + "nativeContext2DConicTest" ]; + // #[cfg(feature = "vulkan")] { + canvas_method_names.push("nativeCreate2dContextVulkan"); + canvas_method_names.push("nativeGetVulkanVersion"); + // } + let canvas_signatures = if ret >= ANDROID_O { - [ - "(Landroid/view/Surface;ZZZZIZZZZZIZ)J", - "(IIZZZZIZZZZZIZ)J", - "(JIIZFIIFI)J", - "(Landroid/view/Surface;J)V", + let mut ret = vec![ + "(Landroid/view/Surface;ZZZZIZZZZZI)J", + "(IIZZZZIZZZZZI)J", + "(IILandroid/view/Surface;ZFIFI)J", "(Landroid/view/Surface;J)V", + "(Landroid/view/Surface;IIJ)V", "(IIJ)V", "(IIJ)V", "(J)V", "(J)Z", - "(J)J", - "(J)J", - "(J)V", "(JLandroid/graphics/Bitmap;)V", "(FFFZIFI)J", "(JFFFZI)V", @@ -113,22 +116,27 @@ pub extern "system" fn JNI_OnLoad(vm: JavaVM, _reserved: *const c_void) -> jint "(J)V", "(JJII)V", "(JLandroid/view/Surface;II)J", - "(JLandroid/view/Surface;II)V" - ] + "(JLandroid/view/Surface;II)V", + "(J)V" + ]; + + // #[cfg(feature = "vulkan")]{ + ret.push("(IILandroid/view/Surface;ZFIFI)J"); + ret.push("([I)V"); + // } + + ret } else { - [ - "!(Landroid/view/Surface;ZZZZIZZZZZIZ)J", - "!(IIZZZZIZZZZZIZ)J", - "!(JIIZFIIFI)J", - "!(Landroid/view/Surface;J)V", + let mut ret = vec![ + "!(Landroid/view/Surface;ZZZZIZZZZZI)J", + "!(IIZZZZIZZZZZI)J", + "!(IILandroid/view/Surface;ZFIFI)J", "!(Landroid/view/Surface;J)V", + "!(Landroid/view/Surface;IIJ)V", "!(IIJ)V", "!(IIJ)V", "!(J)V", "!(J)Z", - "!(J)J", - "!(J)J", - "!(J)V", "!(JLandroid/graphics/Bitmap;)V", "!(FFFZIFI)J", "!(JFFFZI)V", @@ -138,25 +146,31 @@ pub extern "system" fn JNI_OnLoad(vm: JavaVM, _reserved: *const c_void) -> jint "!(J)V", "!(JJII)V", "!(JLandroid/view/Surface;II)J", - "!(JLandroid/view/Surface;II)V" - ] + "!(JLandroid/view/Surface;II)V", + "!(J)V" + ]; + + // #[cfg(feature = "vulkan")]{ + ret.push("!(IILandroid/view/Surface;ZFIFI)J"); + ret.push("!([I)V"); + // } + ret }; - let canvas_methods = if ret >= ANDROID_O { - [ - nativeInitGL as *mut c_void, - nativeInitGLNoSurface as *mut c_void, + + + let mut canvas_methods = if ret >= ANDROID_O { + vec![ + nativeInitWebGL as *mut c_void, + nativeInitWebGLNoSurface as *mut c_void, nativeCreate2DContext as *mut c_void, - nativeUpdateGLSurface as *mut c_void, + nativeUpdateWebGLSurface as *mut c_void, nativeUpdate2DSurface as *mut c_void, nativeUpdate2DSurfaceNoSurface as *mut c_void, nativeUpdateGLNoSurface as *mut c_void, - nativeReleaseGL as *mut c_void, - nativeMakeGLCurrent as *mut c_void, - nativeGLPointerRefCount as *mut c_void, - nativeGetGLPointer as *mut c_void, - nativeReleaseGLPointer as *mut c_void, - nativeWriteCurrentGLContextToBitmap as *mut c_void, + nativeReleaseWebGL as *mut c_void, + nativeMakeWebGLCurrent as *mut c_void, + nativeWriteCurrentWebGLContextToBitmap as *mut c_void, nativeInitContextWithCustomSurface as *mut c_void, nativeResizeCustomSurface as *mut c_void, nativeCustomWithBitmapFlush as *mut c_void, @@ -166,22 +180,20 @@ pub extern "system" fn JNI_OnLoad(vm: JavaVM, _reserved: *const c_void) -> jint nativeWebGLC2DRender as *mut c_void, nativeInitWebGPU as *mut c_void, nativeResizeWebGPU as *mut c_void, + nativeContext2DConicTest as *mut c_void, ] } else { - [ - nativeInitGL as *mut c_void, - nativeInitGLNoSurface as *mut c_void, - nativeCreate2DContextNormal as *mut c_void, - nativeUpdateGLSurface as *mut c_void, + vec![ + nativeInitWebGL as *mut c_void, + nativeInitWebGLNoSurface as *mut c_void, + nativeCreate2DContext as *mut c_void, + nativeUpdateWebGLSurface as *mut c_void, nativeUpdate2DSurface as *mut c_void, nativeUpdate2DSurfaceNoSurfaceNormal as *mut c_void, - nativeUpdateGLNoSurfaceNormal as *mut c_void, - nativeReleaseGLNormal as *mut c_void, - nativeMakeGLCurrentNormal as *mut c_void, - nativeGLPointerRefCountNormal as *mut c_void, - nativeGetGLPointerNormal as *mut c_void, - nativeReleaseGLPointerNormal as *mut c_void, - nativeWriteCurrentGLContextToBitmap as *mut c_void, + nativeUpdateWebGLNoSurfaceNormal as *mut c_void, + nativeReleaseWebGLNormal as *mut c_void, + nativeMakeWebGLCurrentNormal as *mut c_void, + nativeWriteCurrentWebGLContextToBitmap as *mut c_void, nativeInitContextWithCustomSurfaceNormal as *mut c_void, nativeResizeCustomSurfaceNormal as *mut c_void, nativeCustomWithBitmapFlush as *mut c_void, @@ -191,9 +203,15 @@ pub extern "system" fn JNI_OnLoad(vm: JavaVM, _reserved: *const c_void) -> jint nativeWebGLC2DRender as *mut c_void, nativeInitWebGPU as *mut c_void, nativeResizeWebGPU as *mut c_void, + nativeContext2DConicTest as *mut c_void, ] }; + // #[cfg(feature = "vulkan")] { + canvas_methods.push(nativeCreate2dContextVulkan as *mut c_void); + canvas_methods.push(nativeGetVulkanVersion as *mut c_void); + // } + let canvas_native_methods: Vec = izip!(canvas_method_names, canvas_signatures, canvas_methods) .map(|(name, signature, method)| NativeMethod { @@ -309,6 +327,8 @@ pub extern "system" fn JNI_OnLoad(vm: JavaVM, _reserved: *const c_void) -> jint "nativeLoadFromUrl", "nativeLoadFromBytes", "nativeLoadFromBuffer", + "nativeLoadFromEncodedBytes", + "nativeLoadFromEncodedBuffer", ]; let image_asset_signatures = if ret >= ANDROID_O { @@ -320,6 +340,8 @@ pub extern "system" fn JNI_OnLoad(vm: JavaVM, _reserved: *const c_void) -> jint "(JLjava/lang/String;)Z", "(J)Ljava/lang/String;", "(JLjava/lang/String;)Z", + "(JII[B)Z", + "(JIILjava/nio/ByteBuffer;)Z", "(J[B)Z", "(JLjava/nio/ByteBuffer;)Z", ] @@ -332,6 +354,8 @@ pub extern "system" fn JNI_OnLoad(vm: JavaVM, _reserved: *const c_void) -> jint "!(JLjava/lang/String;)Z", "!(J)Ljava/lang/String;", "!(JLjava/lang/String;)Z", + "!(JII[B)Z", + "!(JIILjava/nio/ByteBuffer;)Z", "!(J[B)Z", "!(JLjava/nio/ByteBuffer;)Z", ] @@ -347,6 +371,8 @@ pub extern "system" fn JNI_OnLoad(vm: JavaVM, _reserved: *const c_void) -> jint nativeLoadFromUrl as *mut c_void, nativeLoadFromBytes as *mut c_void, nativeLoadFromBuffer as *mut c_void, + nativeLoadFromEncodedBytes as *mut c_void, + nativeLoadFromEncodedBuffer as *mut c_void, ]; let image_asset_native_methods: Vec = izip!( diff --git a/crates/canvas-android/src/utils/gl/mod.rs b/crates/canvas-android/src/utils/gl/mod.rs index 3abe2127e..888a06e79 100644 --- a/crates/canvas-android/src/utils/gl/mod.rs +++ b/crates/canvas-android/src/utils/gl/mod.rs @@ -1,3 +1,4 @@ +use canvas_c::WebGLState; use jni::sys::{jboolean, jlong, JNI_FALSE, JNI_TRUE}; use jni::JNIEnv; @@ -20,15 +21,15 @@ pub unsafe extern "system" fn Java_org_nativescript_canvas_Utils_nativeMakeState } let state = - state as *mut crate::jni_compat::org_nativescript_canvas_NSCCanvas::AndroidGLContext; + state as *mut WebGLState; if state.is_null() { return JNI_FALSE; } let state = &mut *state; - if state.gl_context.make_current() { + if state.get_inner().make_current() { return JNI_TRUE; } - return JNI_FALSE; + JNI_FALSE } diff --git a/crates/canvas-c/Cargo.toml b/crates/canvas-c/Cargo.toml index 2af038525..c850a0aa1 100644 --- a/crates/canvas-c/Cargo.toml +++ b/crates/canvas-c/Cargo.toml @@ -4,33 +4,38 @@ version = "0.1.0" edition = "2021" [features] +default = ["dep:image"] 2d = ["dep:canvas-2d"] webgl = ["dep:canvas-webgl"] gl = ["canvas-2d/gl"] -vulkan = [] +vulkan = ["canvas-2d/vulkan"] metal = ["canvas-2d/metal"] [dependencies] +base64 = "0.22.1" gl-bindings.workspace = true canvas-core = { workspace = true, features = ["2d"] } -canvas-2d = { workspace = true, optional = true, features = ["gl"] } +canvas-2d = { workspace = true, optional = true } canvas-webgl = { workspace = true, optional = true } parking_lot.workspace = true -ureq = { version = "2.9.6", features = ["gzip"] } +ureq.workspace = true bytes = "1.5.0" -log = { version = "0.4.20" } +log.workspace = true wgt = { workspace = true, package = "wgpu-types" } futures = "0.3" raw-window-handle.workspace = true wgpu-core = { workspace = true, features = ["wgsl", "vulkan", "metal", "raw-window-handle"] } - +infer = "0.16.0" +image = {version = "0.25.5", optional = true} [target.'cfg(target_os="ios")'.dependencies] display-link = { version = "0.2.0" } wgpu-core = { workspace = true, features = ["wgsl", "metal", "raw-window-handle"] } +objc2-foundation = { version = "0.2.2", features = ["NSGeometry", "NSData", "NSAutoreleasePool"] } -#[target.'cfg(target_os="macos")'.dependencies] +[target.'cfg(target_os="macos")'.dependencies] #display-link = { git = "https://github.com/servo/display-link", branch = "no-transmute" } #wgpu-core = { version = "22.0.0", features = ["wgsl", "metal", "raw-window-handle"] } +#objc2-foundation = { version = "0.2.2", features = ["NSGeometry", "NSData", "NSAutoreleasePool"] } [target.'cfg(target_os="android")'.dependencies] ndk = { version = "0.7.0", features = ["bitmap"] } diff --git a/crates/canvas-c/src/c2d/context.rs b/crates/canvas-c/src/c2d/context.rs index afbfc6c74..7b6c8b310 100644 --- a/crates/canvas-c/src/c2d/context.rs +++ b/crates/canvas-c/src/c2d/context.rs @@ -3,7 +3,6 @@ use std::ffi::{CStr, CString}; use std::os::raw::{c_char, c_void}; use canvas_2d::context::compositing::composite_operation_type::CompositeOperationType; -use canvas_2d::context::Context; use canvas_2d::context::fill_and_stroke_styles::paint::paint_style_set_color_with_string; use canvas_2d::context::fill_and_stroke_styles::pattern::Repetition; use canvas_2d::context::image_smoothing::ImageSmoothingQuality; @@ -11,11 +10,11 @@ use canvas_2d::context::line_styles::line_cap::LineCap; use canvas_2d::context::line_styles::line_join::LineJoin; use canvas_2d::context::text_styles::text_align::TextAlign; use canvas_2d::context::text_styles::text_direction::TextDirection; +use canvas_2d::context::Context; use canvas_2d::utils::color::{parse_color, to_parsed_color}; use canvas_2d::utils::image::{ from_bitmap_slice, from_image_slice, from_image_slice_encoded, }; -use canvas_core::context_attributes::PowerPreference; use canvas_webgl::utils::gl::bytes_per_pixel; use crate::buffers::{F32Buffer, U8Buffer}; @@ -27,7 +26,7 @@ use crate::c2d::path::Path; use crate::c2d::text_base_line::TextBaseLine; use crate::c2d::text_metrics::TextMetrics; use crate::image_asset::ImageAsset; -use crate::webgl::{GLContext, WebGLState}; +use crate::webgl::WebGLState; #[derive(Copy, Clone, Debug, Eq, PartialEq)] pub enum Engine { @@ -37,10 +36,10 @@ pub enum Engine { Metal, } + #[allow(dead_code)] pub struct CanvasRenderingContext2D { pub(crate) context: Context, - gl_context: canvas_core::gl::GLContext, alpha: bool, engine: Engine, } @@ -72,10 +71,10 @@ pub fn resize_gl(context: &mut CanvasRenderingContext2D, width: f32, height: f32 let alpha = context.alpha; context.make_current(); let context = &mut context.context; - let density = context.get_surface_data().scale(); - let ppi = context.get_surface_data().ppi(); + let density = context.surface_data().scale(); + let ppi = context.surface_data().ppi(); - if width.floor() == context.get_surface_data().width().floor() && height.floor() == context.get_surface_data().height().floor() { + if width.floor() == context.surface_data().width().floor() && height.floor() == context.surface_data().height().floor() { return; } @@ -95,7 +94,7 @@ pub fn resize_gl(context: &mut CanvasRenderingContext2D, width: f32, height: f32 pub fn resize_vulkan(context: &mut CanvasRenderingContext2D, width: f32, height: f32) { let alpha = context.alpha; let context = &mut context.context; - Context::resize_vulkan(context, width, height, 0, alpha) + Context::resize_vulkan(context, width, height, alpha) } #[cfg(feature = "metal")] @@ -104,7 +103,6 @@ pub fn resize_metal(context: &mut CanvasRenderingContext2D, width: f32, height: Context::resize_metal(context, width, height); } - pub fn resize(context: &mut CanvasRenderingContext2D, width: f32, height: f32) { #[cfg(feature = "gl")] { @@ -137,8 +135,8 @@ pub fn resize(context: &mut CanvasRenderingContext2D, width: f32, height: f32) { let alpha = context.alpha; let context = &mut context.context; - let density = context.get_surface_data().scale(); - let ppi = context.get_surface_data().ppi(); + let density = context.surface_data().scale(); + let ppi = context.surface_data().ppi(); Context::resize(context, width, height, density, alpha, ppi); } @@ -146,17 +144,15 @@ impl CanvasRenderingContext2D { pub fn new(context: Context, alpha: bool) -> Self { Self { context, - gl_context: canvas_core::gl::GLContext::default(), alpha, engine: Engine::CPU, } } #[cfg(feature = "gl")] - pub fn new_gl(context: Context, gl_context: canvas_core::gl::GLContext, alpha: bool) -> Self { + pub fn new_gl(context: Context, alpha: bool) -> Self { Self { context, - gl_context, alpha, engine: Engine::GL, } @@ -167,7 +163,6 @@ impl CanvasRenderingContext2D { pub fn new_vulkan(context: Context, alpha: bool) -> Self { Self { context, - gl_context: canvas_core::gl::GLContext::default(), alpha, engine: Engine::Vulkan, } @@ -178,50 +173,91 @@ impl CanvasRenderingContext2D { pub fn new_metal(context: Context, alpha: bool) -> Self { Self { context, - gl_context: canvas_core::gl::GLContext::default(), alpha, engine: Engine::Metal, } } + pub fn render(&mut self) { - if self.engine == Engine::GL { - self.gl_context.make_current(); + #[cfg(feature = "gl")] + if let Some(context) = self.context.gl_context.as_ref() { + context.make_current(); } - { - self.context.flush_and_render_to_surface(); - } + let mut flush = true; - #[cfg(target_os = "ios")] - { - if self.engine == Engine::GL { - self.gl_context.swap_buffers(); + // metal will execute the flush_and_render_to_surface in the draw call + #[cfg(feature = "metal")]{ + if self.engine == Engine::Metal { + flush = false; } } - #[cfg(not(target_os = "ios"))] + #[cfg(feature = "vulkan")] + if self.engine == Engine::Vulkan { + flush = false; + } + { - if self.engine == Engine::GL { - self.gl_context.swap_buffers(); + if flush { + self.context.flush_and_render_to_surface(); } } + + + #[cfg(feature = "metal")] + if let Some(context) = self.context.metal_context.as_mut() { + context.present(); + } + + #[cfg(feature = "gl")] + if let Some(context) = self.context.gl_context.as_ref() { + context.swap_buffers(); + } + + #[cfg(feature = "vulkan")] + if self.engine == Engine::Vulkan { + self.context.flush() + } + + #[cfg(feature = "vulkan")] + if let Some(vulkan) = self.context.vulkan_context.as_mut() { + vulkan.present(); + } + + #[cfg(feature = "vulkan")] + if self.engine == Engine::Vulkan { + self.context.replace_backend_texture() + } } pub fn resize(&mut self, width: f32, height: f32) { resize(self, width, height); } + #[cfg(feature = "gl")] pub fn make_current(&self) -> bool { - self.gl_context.make_current() + if let Some(ref context) = self.context.gl_context { + return context.make_current(); + } + false } + + #[cfg(feature = "gl")] pub fn swap_buffers(&self) -> bool { - self.gl_context.swap_buffers() + if let Some(ref context) = self.context.gl_context { + return context.swap_buffers(); + } + false } + pub fn remove_if_current(&self) { - self.gl_context.remove_if_current(); + if let Some(ref context) = self.context.gl_context { + context.remove_if_current(); + } } } @@ -312,7 +348,6 @@ pub extern "C" fn canvas_native_context_create( ppi, TextDirection::from(direction), ), - gl_context: canvas_core::gl::GLContext::default(), alpha, engine: Engine::CPU, })) @@ -320,39 +355,26 @@ pub extern "C" fn canvas_native_context_create( #[no_mangle] pub extern "C" fn canvas_native_context_create_gl( + view: *mut c_void, width: f32, height: f32, density: f32, - gl_context: i64, - samples: i32, alpha: bool, font_color: i32, ppi: f32, direction: u32, ) -> *mut CanvasRenderingContext2D { - let gl_context = gl_context as *const GLContext; - let gl_context = unsafe { &*gl_context }; - - gl_context.0.make_current(); - let gl_context = gl_context.0.clone(); - let mut frame_buffers = [0]; - unsafe { - gl_bindings::GetIntegerv(gl_bindings::FRAMEBUFFER_BINDING, frame_buffers.as_mut_ptr()) - }; - Box::into_raw(Box::new(CanvasRenderingContext2D { context: Context::new_gl( + view, width, height, density, - frame_buffers[0], - samples, alpha, font_color, ppi, TextDirection::from(direction), ), - gl_context, alpha, engine: Engine::GL, })) @@ -380,66 +402,19 @@ pub extern "C" fn canvas_native_context_create_gl_no_window( direction: u32, alpha: bool, ) -> *mut CanvasRenderingContext2D { - // canvas_native_webgl_create_no_window_internal( - // width as i32, - // height as i32, - // WebGLVersion::V1, - // alpha, - // false, - // false, - // false, - // WebGLPowerPreference::Default, - // true, - // false, - // false, - // false, - // false, - // true, - // ); - - let mut attr = canvas_core::context_attributes::ContextAttributes::new( - alpha, - false, - false, - false, - PowerPreference::Default, - true, - false, - false, - false, - false, - true, - ); - - let gl_context = canvas_core::gl::GLContext::create_offscreen_context( - &mut attr, - width as i32, - height as i32, - ) - .unwrap(); - - gl_context.make_current(); - - let mut buffer_id = [0i32]; - - unsafe { gl_bindings::GetIntegerv(gl_bindings::FRAMEBUFFER_BINDING, buffer_id.as_mut_ptr()) } - let context = Context::new_gl( + std::ptr::null_mut(), width, height, density, - buffer_id[0], - 0, alpha, font_color, ppi, TextDirection::from(direction), ); - gl_context.remove_if_current(); Box::into_raw(Box::new(CanvasRenderingContext2D { context, - gl_context, alpha, engine: Engine::GL, })) @@ -1402,7 +1377,9 @@ pub extern "C" fn canvas_native_context_clear_rect( height: f32, ) { let context = unsafe { &mut *context }; - context.make_current(); + #[cfg(feature = "gl")]{ + context.make_current(); + } context.context.clear_rect(x, y, width, height); } @@ -1528,8 +1505,8 @@ pub extern "C" fn canvas_native_context_create_pattern_asset( let has_alpha = asset.has_alpha(); let mut ret = std::ptr::null_mut(); // todo use bitmap directly ?? - asset.with_bytes_dimension(|bytes, (width, height)|{ - ret = if has_alpha { + asset.with_bytes_dimension(|bytes, (width, height)| { + ret = if has_alpha { from_image_slice(bytes, width as i32, height as i32).map( |image| { Box::into_raw(Box::new(PaintStyle(canvas_2d::context::fill_and_stroke_styles::paint::PaintStyle::Pattern( @@ -1581,7 +1558,9 @@ pub extern "C" fn canvas_native_context_create_pattern_canvas2d( let source = unsafe { &mut *source }; let context = unsafe { &*context }; let repetition: Repetition = repetition.into(); - source.make_current(); + #[cfg(feature = "gl")]{ + source.make_current(); + } match source.context.get_image() { None => std::ptr::null_mut(), Some(image) => { @@ -1620,7 +1599,6 @@ pub extern "C" fn canvas_native_context_draw_paint( let color = unsafe { CStr::from_ptr(color) }; let color = color.to_string_lossy(); let context = unsafe { &mut *context }; - context.make_current(); context.context.draw_paint(color.as_ref()); } @@ -1632,7 +1610,6 @@ pub extern "C" fn canvas_native_context_draw_point( ) { assert!(!context.is_null()); let context = unsafe { &mut *context }; - context.make_current(); context.context.draw_point(x, y); } @@ -1646,7 +1623,6 @@ pub extern "C" fn canvas_native_context_draw_points( assert!(!context.is_null()); let points = unsafe { std::slice::from_raw_parts(points, size) }; let context = unsafe { &mut *context }; - context.make_current(); context .context .draw_points(mode.try_into().unwrap(), points); @@ -1666,7 +1642,6 @@ pub extern "C" fn canvas_native_context_draw_image_dx_dy( let data = unsafe { std::slice::from_raw_parts(data, size) }; if let Some(image) = from_image_slice(data, width as i32, height as i32) { - context.make_current(); context.context.draw_image_dx_dy(&image, dx, dy); } } @@ -1687,7 +1662,6 @@ pub extern "C" fn canvas_native_context_draw_image_dx_dy_dw_dh( let data = unsafe { std::slice::from_raw_parts(data, size) }; if let Some(image) = from_image_slice(data, width as i32, height as i32) { - context.make_current(); context .context .draw_image_dx_dy_dw_dh(&image, dx, dy, d_width, d_height); @@ -1713,7 +1687,6 @@ pub extern "C" fn canvas_native_context_draw_image( let data = unsafe { std::slice::from_raw_parts(data, size) }; if let Some(image) = from_image_slice(data, width as i32, height as i32) { let context = unsafe { &mut *context }; - context.make_current(); context.context.draw_image_src_xywh_dst_xywh( &image, sx, sy, s_width, s_height, dx, dy, d_width, d_height, ); @@ -1731,7 +1704,6 @@ pub extern "C" fn canvas_native_context_draw_image_encoded_dx_dy( let data = unsafe { std::slice::from_raw_parts(data, size) }; if let Some(image) = from_image_slice_encoded(data) { let context = unsafe { &mut *context }; - context.make_current(); let width = image.width() as f32; let height = image.height() as f32; context @@ -1753,7 +1725,6 @@ pub extern "C" fn canvas_native_context_draw_image_encoded_dx_dy_dw_dh( let data = unsafe { std::slice::from_raw_parts(data, size) }; if let Some(image) = from_image_slice_encoded(data) { let context = unsafe { &mut *context }; - context.make_current(); let width = image.width() as f32; let height = image.height() as f32; context.context.draw_image_src_xywh_dst_xywh( @@ -1779,7 +1750,6 @@ pub extern "C" fn canvas_native_context_draw_image_encoded( let data = unsafe { std::slice::from_raw_parts(data, size) }; if let Some(image) = from_image_slice_encoded(data) { let context = unsafe { &mut *context }; - context.make_current(); context.context.draw_image_src_xywh_dst_xywh( &image, sx, sy, s_width, s_height, dx, dy, d_width, d_height, ); @@ -1797,8 +1767,6 @@ pub extern "C" fn canvas_native_context_draw_image_dx_dy_asset( assert!(!asset.is_null()); let context = unsafe { &mut *context }; let asset = unsafe { &*asset }; - - context.make_current(); context.context.draw_image_asset_dx_dy(&asset.0, dx, dy); } @@ -1815,8 +1783,6 @@ pub extern "C" fn canvas_native_context_draw_image_dx_dy_dw_dh_asset( assert!(!asset.is_null()); let context = unsafe { &mut *context }; let asset = unsafe { &*asset }; - - context.make_current(); context.context.draw_image_asset_dx_dy_dw_dh(&asset.0, dx, dy, d_width, d_height); } @@ -1838,7 +1804,6 @@ pub extern "C" fn canvas_native_context_draw_image_asset( let context = unsafe { &mut *context }; let asset = unsafe { &*asset }; - context.make_current(); context.context.draw_image_asset_src_xywh_dst_xywh( &asset.0, sx, sy, s_width, s_height, dx, dy, d_width, d_height, ); @@ -1855,9 +1820,7 @@ pub extern "C" fn canvas_native_context_draw_image_dx_dy_context( assert!(!source.is_null()); let context = unsafe { &mut *context }; let source = unsafe { &mut *source }; - source.make_current(); if let Some(image) = source.context.get_image() { - context.make_current(); context.context.draw_image_dx_dy(&image, dx, dy); } } @@ -1875,10 +1838,8 @@ pub extern "C" fn canvas_native_context_draw_image_dx_dy_dw_dh_context( assert!(!source.is_null()); let context = unsafe { &mut *context }; let source = unsafe { &mut *source }; - source.make_current(); if let Some(image) = source.context.get_image() { - context.make_current(); context.context.draw_image_dx_dy_dw_dh(&image, dx, dy, d_width, d_height); } } @@ -1900,10 +1861,7 @@ pub extern "C" fn canvas_native_context_draw_image_context( assert!(!source.is_null()); let context = unsafe { &mut *context }; let source = unsafe { &mut *source }; - source.make_current(); - if let Some(image) = source.context.get_image() { - context.make_current(); context.context.draw_image_src_xywh_dst_xywh( &image, sx, sy, s_width, s_height, dx, dy, d_width, d_height, ); @@ -2061,7 +2019,7 @@ pub extern "C" fn canvas_native_context_draw_atlas( let data = unsafe { std::slice::from_raw_parts(data, size) }; if let Some(image) = from_image_slice(data, width as i32, height as i32) { let context = unsafe { &mut *context }; - context.make_current(); + let xform = unsafe { std::slice::from_raw_parts(xform, xform_size) }; let tex = unsafe { std::slice::from_raw_parts(tex, tex_size) }; @@ -2104,7 +2062,6 @@ pub extern "C" fn canvas_native_context_draw_atlas_encoded( let data = unsafe { std::slice::from_raw_parts(data, size) }; if let Some(image) = from_image_slice_encoded(data) { let context = unsafe { &mut *context }; - context.make_current(); let xform = unsafe { std::slice::from_raw_parts(xform, xform_size) }; let tex = unsafe { std::slice::from_raw_parts(tex, tex_size) }; @@ -2145,7 +2102,6 @@ pub extern "C" fn canvas_native_context_draw_atlas_asset( let asset = unsafe { &*asset }; let context = unsafe { &mut *context }; - context.make_current(); let xform = unsafe { std::slice::from_raw_parts(xform, xform_size) }; let tex = unsafe { std::slice::from_raw_parts(tex, tex_size) }; let mut colors_value: Option> = None; @@ -2241,7 +2197,6 @@ pub extern "C" fn canvas_native_context_ellipse( #[no_mangle] pub extern "C" fn canvas_native_context_fill(context: *mut CanvasRenderingContext2D, rule: CanvasFillRule) { let context = unsafe { &mut *context }; - context.make_current(); context.context.fill_rule(None, rule.into()); } @@ -2252,7 +2207,6 @@ pub extern "C" fn canvas_native_context_fill_with_path( rule: CanvasFillRule, ) { let context = unsafe { &mut *context }; - context.make_current(); context.context.fill_rule(Some(&mut path.0), rule.into()); } @@ -2265,7 +2219,6 @@ pub extern "C" fn canvas_native_context_fill_rect( height: f32, ) { let context = unsafe { &mut *context }; - context.make_current(); context.context.fill_rect_xywh(x, y, width, height); } @@ -2282,7 +2235,6 @@ pub extern "C" fn canvas_native_context_fill_text( let text = unsafe { CStr::from_ptr(text) }; let text = text.to_string_lossy(); let context = unsafe { &mut *context }; - context.make_current(); context.context.fill_text(text.as_ref(), x, y, None); } @@ -2300,7 +2252,6 @@ pub extern "C" fn canvas_native_context_fill_text_width( let text = unsafe { CStr::from_ptr(text) }; let text = text.to_string_lossy(); let context = unsafe { &mut *context }; - context.make_current(); context.context.fill_text(text.as_ref(), x, y, Some(width)); } @@ -2313,7 +2264,6 @@ pub extern "C" fn canvas_native_context_fill_oval( height: f32, ) { let context = unsafe { &mut *context }; - context.make_current(); context.context.fill_oval(x, y, width, height); } @@ -2326,7 +2276,6 @@ pub extern "C" fn canvas_native_context_get_image_data( sh: f32, ) -> *mut ImageData { let context = unsafe { &mut *context }; - context.make_current(); Box::into_raw(Box::new(ImageData( context.context.get_image_data(sx, sy, sw, sh), ))) @@ -2461,7 +2410,6 @@ pub extern "C" fn canvas_native_context_put_image_data( ) { let context = unsafe { &mut *context }; let image_data = unsafe { &*image_data }; - context.make_current(); context.context.put_image_data( &image_data.0, dx, @@ -2596,7 +2544,6 @@ pub extern "C" fn canvas_native_context_set_transform_matrix( matrix: *const Matrix, ) { let context = unsafe { &mut *context }; - context.make_current(); let matrix = unsafe { &*matrix }; context.context.set_transform_matrix(&matrix.0); } @@ -2604,7 +2551,6 @@ pub extern "C" fn canvas_native_context_set_transform_matrix( #[no_mangle] pub extern "C" fn canvas_native_context_stroke(context: *mut CanvasRenderingContext2D) { let context = unsafe { &mut *context }; - context.make_current(); context.context.stroke(None); } @@ -2614,7 +2560,6 @@ pub extern "C" fn canvas_native_context_stroke_with_path( path: &mut Path, ) { let context = unsafe { &mut *context }; - context.make_current(); context.context.stroke(Some(&mut path.0)); } @@ -2627,7 +2572,6 @@ pub extern "C" fn canvas_native_context_stroke_rect( height: f32, ) { let context = unsafe { &mut *context }; - context.make_current(); context.context.stroke_rect_xywh(x, y, width, height); } @@ -2644,7 +2588,6 @@ pub extern "C" fn canvas_native_context_stroke_text( let text = unsafe { CStr::from_ptr(text) }; let text = text.to_string_lossy(); let context = unsafe { &mut *context }; - context.make_current(); context.context.stroke_text(text.as_ref(), x, y, None); } @@ -2662,7 +2605,6 @@ pub extern "C" fn canvas_native_context_stroke_text_width( let text = unsafe { CStr::from_ptr(text) }; let text = text.to_string_lossy(); let context = unsafe { &mut *context }; - context.make_current(); context .context .stroke_text(text.as_ref(), x, y, Some(width)); @@ -2677,7 +2619,6 @@ pub extern "C" fn canvas_native_context_stroke_oval( height: f32, ) { let context = unsafe { &mut *context }; - context.make_current(); context.context.stroke_oval(x, y, width, height); } @@ -2708,7 +2649,11 @@ pub extern "C" fn canvas_native_context_translate( #[no_mangle] pub extern "C" fn canvas_native_context_flush(context: *mut CanvasRenderingContext2D) { let context = unsafe { &mut *context }; - context.make_current(); + #[cfg(feature = "gl")]{ + if let Some(ref context) = context.context.gl_context { + context.make_current(); + } + } context.context.flush(); } @@ -2718,6 +2663,7 @@ pub extern "C" fn canvas_native_context_render(context: *mut CanvasRenderingCont return; } let context = unsafe { &mut *context }; + context.render(); } @@ -2733,7 +2679,14 @@ pub extern "C" fn canvas_native_to_data_url( let format = unsafe { CStr::from_ptr(format) }; let format = format.to_string_lossy(); let context = unsafe { &mut *context }; - context.make_current(); + + + #[cfg(feature = "gl")]{ + if let Some(ref context) = context.context.gl_context { + context.make_current(); + } + } + CString::new(to_data_url(context, format.as_ref(), quality)) .unwrap() .into_raw() diff --git a/crates/canvas-c/src/c2d/paint/mod.rs b/crates/canvas-c/src/c2d/paint/mod.rs index 1a0a66a5e..48ab37f2f 100644 --- a/crates/canvas-c/src/c2d/paint/mod.rs +++ b/crates/canvas-c/src/c2d/paint/mod.rs @@ -26,7 +26,7 @@ impl PaintStyle { } pub fn style_type(&self) -> PaintStyleType { - return match &self.0 { + match &self.0 { canvas_2d::context::fill_and_stroke_styles::paint::PaintStyle::Color(_) => { PaintStyleType::Color } @@ -36,7 +36,7 @@ impl PaintStyle { canvas_2d::context::fill_and_stroke_styles::paint::PaintStyle::Pattern(_) => { PaintStyleType::Pattern } - }; + } } } diff --git a/crates/canvas-c/src/helper.rs b/crates/canvas-c/src/helper.rs index 3e9308e3a..8f38e7a6c 100644 --- a/crates/canvas-c/src/helper.rs +++ b/crates/canvas-c/src/helper.rs @@ -1,15 +1,64 @@ +use crate::buffers::U8Buffer; use std::ffi::{CStr, CString}; use std::io::Read; use std::os::raw::c_char; -use crate::buffers::U8Buffer; - #[derive(Clone, Default)] pub struct FileHelper { data: Option, error: Option, + ext: Option, + mime: Option, +} + + +#[repr(C)] +pub struct FileHelperMime { + mime_type: *const c_char, + extension: *const c_char, } +impl Drop for FileHelperMime { + fn drop(&mut self) { + if self.mime_type != std::ptr::null() { + let _ = unsafe { CString::from_raw(self.mime_type as *mut _) }; + } + + if self.extension != std::ptr::null() { + let _ = unsafe { CString::from_raw(self.extension as *mut _) }; + } + } +} + +#[no_mangle] +pub extern "C" fn canvas_native_helper_get_mime(data: *const u8, size: usize) -> *mut FileHelperMime { + let mut ret = FileHelperMime { + mime_type: std::ptr::null_mut(), + extension: std::ptr::null_mut(), + }; + + + if data.is_null() || size == 0 { + return Box::into_raw(Box::new(ret)); + } + + let data = unsafe { std::slice::from_raw_parts(data, size) }; + match infer::get(data) { + None => std::ptr::null_mut(), + Some(_type) => { + ret.mime_type = CString::new(_type.mime_type().to_string()).unwrap().into_raw(); + ret.extension = CString::new(_type.extension().to_string()).unwrap().into_raw(); + Box::into_raw(Box::new(ret)) + } + } +} + +#[no_mangle] +pub extern "C" fn canvas_native_helper_release_mime(mime: *mut FileHelperMime) { + if !mime.is_null() { + let _ = unsafe { Box::from_raw(mime) }; + } +} #[no_mangle] pub extern "C" fn canvas_native_helper_release(value: *mut FileHelper) { @@ -19,6 +68,7 @@ pub extern "C" fn canvas_native_helper_release(value: *mut FileHelper) { let _ = unsafe { Box::from_raw(value) }; } + #[no_mangle] pub extern "C" fn canvas_native_helper_read_file(path: *const c_char) -> *mut FileHelper { assert!(!path.is_null()); @@ -31,6 +81,10 @@ pub extern "C" fn canvas_native_helper_read_file(path: *const c_char) -> *mut Fi if size != 0 { let mut buf = Vec::with_capacity(size); let _ = file.read_to_end(&mut buf); + if let Some(_type) = infer::get(&buf) { + ret.mime = Some(_type.mime_type().to_string()); + ret.ext = Some(_type.extension().to_string()); + } let buf = U8Buffer::from(buf); ret.data = Some(buf); } @@ -41,13 +95,32 @@ pub extern "C" fn canvas_native_helper_read_file(path: *const c_char) -> *mut Fi Box::into_raw(Box::new(ret)) } +#[no_mangle] +pub unsafe extern "C" fn canvas_native_helper_read_file_get_mime( + file: *mut FileHelper, +) -> *mut c_char { + assert!(!file.is_null()); + let file = &*file; + file.mime.as_ref().map(|mime| CString::new(mime.to_string()).unwrap().into_raw()).unwrap_or(std::ptr::null_mut()) +} + +#[no_mangle] +pub unsafe extern "C" fn canvas_native_helper_read_file_get_extension( + file: *mut FileHelper, +) -> *mut c_char { + assert!(!file.is_null()); + let file = &*file; + file.ext.as_ref().map(|ext| CString::new(ext.to_string()).unwrap().into_raw()).unwrap_or(std::ptr::null_mut()) +} + + #[no_mangle] pub unsafe extern "C" fn canvas_native_helper_read_file_has_error(file: *const FileHelper) -> bool { if file.is_null() { return false; }; let file = &*file; - return file.error.is_some(); + file.error.is_some() } #[no_mangle] diff --git a/crates/canvas-c/src/image_asset.rs b/crates/canvas-c/src/image_asset.rs index 35eac9ce0..9eb9bc794 100644 --- a/crates/canvas-c/src/image_asset.rs +++ b/crates/canvas-c/src/image_asset.rs @@ -58,7 +58,7 @@ impl ImageAsset { &self, width: u32, height: u32, - depth: u32, + _depth: u32, data: Vec, ) -> bool { self.0 @@ -219,6 +219,19 @@ pub extern "C" fn canvas_native_image_asset_load_from_path( #[no_mangle] pub extern "C" fn canvas_native_image_asset_load_from_raw( + asset: *const ImageAsset, + width: u32, + height: u32, + array: *const u8, + size: usize, +) -> bool { + let array = unsafe { std::slice::from_raw_parts(array, size) }; + let asset = unsafe { &*asset }; + asset.load_from_raw_bytes(width, height,4, array.to_vec()) +} + +#[no_mangle] +pub extern "C" fn canvas_native_image_asset_load_from_raw_encoded( asset: *const ImageAsset, array: *const u8, size: usize, diff --git a/crates/canvas-c/src/lib.rs b/crates/canvas-c/src/lib.rs index 5c8052273..2609f1060 100644 --- a/crates/canvas-c/src/lib.rs +++ b/crates/canvas-c/src/lib.rs @@ -77,3 +77,87 @@ pub extern "C" fn canvas_native_font_add_family( ); } } + + +#[no_mangle] +pub extern "C" fn canvas_native_context_2d_test(context: i64) { + if context == 0 { + return; + } + + let context = context as *mut CanvasRenderingContext2D; + let context = unsafe { &mut *context }; + + { + let ctx = context.get_context_mut(); + ctx.set_fill_style_with_color("red"); + ctx.fill_rect_xywh(0., 0., 300., 300.); + } + context.render(); +} + + +#[no_mangle] +pub extern "C" fn canvas_native_context_2d_path_test(context: i64) { + if context == 0 { + return; + } + + let context = context as *mut CanvasRenderingContext2D; + let context = unsafe { &mut *context }; + + { + let ctx = context.get_context_mut(); + + // Create path + let mut region = canvas_2d::context::paths::path::Path::default(); + region.move_to(30f32, 90f32); + region.line_to(110f32, 20f32); + region.line_to(240f32, 130f32); + region.line_to(60f32, 130f32); + region.line_to(190f32, 20f32); + region.line_to(270f32, 90f32); + region.close_path(); + + // Fill path + ctx.set_fill_style_with_color("green"); + ctx.fill_rule( + Some(&mut region), + canvas_2d::context::drawing_paths::fill_rule::FillRule::EvenOdd, + ); + } + context.render(); +} + + +#[no_mangle] +pub extern "C" fn canvas_native_context_2d_conic_test(context: i64) { + if context == 0 { + return; + } + + let context = context as *mut CanvasRenderingContext2D; + let context = unsafe { &mut *context }; + + { + let ctx = context.get_context_mut(); + use canvas_2d::context::fill_and_stroke_styles::paint::Color; + + // Create a conic gradient + // The start angle is 0 + // The center position is 100, 100 + let mut gradient = ctx.create_conic_gradient(0., 100., 100.); + + // Add five color stops + gradient.add_color_stop(0., Color::RED); + gradient.add_color_stop(0.25, Color::from_rgb(255, 165, 0)); + gradient.add_color_stop(0.5, Color::YELLOW); + gradient.add_color_stop(0.75, Color::GREEN); + gradient.add_color_stop(1., Color::BLUE); + + // Set the fill style and draw a rectangle + ctx.set_fill_style(canvas_2d::context::fill_and_stroke_styles::paint::PaintStyle::Gradient(gradient)); + ctx.fill_rect_xywh(20., 20., 200., 200.); + } + context.render(); +} \ No newline at end of file diff --git a/crates/canvas-c/src/raf/ios.rs b/crates/canvas-c/src/raf/ios.rs index 3313f4239..11c2e053f 100644 --- a/crates/canvas-c/src/raf/ios.rs +++ b/crates/canvas-c/src/raf/ios.rs @@ -1,13 +1,11 @@ -use std::ffi::{c_long, c_longlong, c_void}; -use std::sync::atomic::{AtomicBool, Ordering}; -use std::sync::{Arc, RwLock}; - use display_link::DisplayLink; +use std::sync::atomic::{AtomicBool, Ordering}; +use std::sync::Arc; type RafCallback = Option>; + struct RafInner { - started: bool, dl: Option, callback: RafCallback, } @@ -16,7 +14,25 @@ unsafe impl Send for RafInner {} unsafe impl Sync for RafInner {} -pub struct Raf(Arc>); +pub struct Raf { + started: Arc, + inner: Arc>, +} + +impl Clone for Raf { + fn clone(&self) -> Self { + Self { + started: Arc::clone(&self.started), + inner: Arc::clone(&self.inner), + } + } + + fn clone_from(&mut self, source: &Self) { + self.started = Arc::clone(&source.started); + self.inner = Arc::clone(&source.inner); + } +} + unsafe impl Send for Raf {} @@ -26,19 +42,21 @@ impl Raf { pub fn new(callback: RafCallback) -> Self { let inner = Arc::new(parking_lot::Mutex::new(RafInner { dl: None, - started: false, callback, })); - let clone = Arc::clone(&inner); + let started = Arc::new(AtomicBool::new(false)); + + let started2 = Arc::clone(&started); + let clone = inner.clone(); { let mut lock = inner.lock(); lock.dl = DisplayLink::new(move |ts| { - let lock = clone.lock(); - if !lock.started { + if !started2.load(Ordering::SeqCst) { return; } + let lock = clone.lock(); if let Some(callback) = lock.callback.as_ref() { callback(ts.nanos_since_zero); @@ -46,41 +64,30 @@ impl Raf { }); } - Self(inner) + Self { + started, + inner, + } } pub fn start(&self) { - let mut lock = self.0.lock(); + let mut lock = self.inner.lock(); if let Some(dl) = lock.dl.as_mut() { let _ = dl.resume(); - lock.started = !dl.is_paused(); + self.started.store(!dl.is_paused(), Ordering::SeqCst); } } pub fn stop(&self) { - let mut lock = self.0.lock(); + let mut lock = self.inner.lock(); if let Some(dl) = lock.dl.as_mut() { let _ = dl.pause(); - lock.started = !dl.is_paused(); + self.started.store(!dl.is_paused(), Ordering::SeqCst); } } - pub fn set_callback(&self, callback: RafCallback) { - let mut lock = self.0.lock(); - lock.callback = callback; - } pub fn started(&self) -> bool { - self.0.lock().started - } -} - -impl Clone for Raf { - fn clone(&self) -> Self { - Self ( Arc::clone(&self.0)) + self.started.load(Ordering::SeqCst) } - - fn clone_from(&mut self, source: &Self) { - self.0 = Arc::clone(&source.0) - } -} +} \ No newline at end of file diff --git a/crates/canvas-c/src/text_encoder.rs b/crates/canvas-c/src/text_encoder.rs index 738f27532..f39cb73bf 100644 --- a/crates/canvas-c/src/text_encoder.rs +++ b/crates/canvas-c/src/text_encoder.rs @@ -1,6 +1,5 @@ use std::ffi::{CStr, CString}; use std::os::raw::c_char; -use std::sync::Arc; use crate::buffers::U8Buffer; diff --git a/crates/canvas-c/src/webgl/gl.rs b/crates/canvas-c/src/webgl/gl.rs index 62c9cf376..bfeb1afc5 100644 --- a/crates/canvas-c/src/webgl/gl.rs +++ b/crates/canvas-c/src/webgl/gl.rs @@ -1,12 +1,12 @@ /* GL */ use std::ffi::{CStr, CString}; use std::os::raw::{c_char, c_void}; - -use parking_lot::RwLock; - -use canvas_2d::context::fill_and_stroke_styles::pattern::Repetition; +use std::ptr::NonNull; +use canvas_2d::context::SurfaceEngine::CPU; use canvas_2d::utils::image::from_image_slice; -use canvas_webgl::prelude::{WebGLPowerPreference, WebGLVersion}; +use canvas_core::context_attributes::PowerPreference; +use canvas_core::gpu::gl::GLContext; +use canvas_webgl::prelude::WebGLVersion; use crate::buffers::{F32Buffer, I32Buffer, StringBuffer, U32Buffer, U8Buffer}; use crate::c2d::CanvasRenderingContext2D; @@ -15,28 +15,8 @@ use crate::enums::CanvasRepetition; use crate::image_asset::ImageAsset; use crate::webgl::result::WebGLResultType; -#[no_mangle] -pub extern "C" fn canvas_native_context_gl_make_current( - context: *const CanvasRenderingContext2D, -) -> bool { - assert!(!context.is_null()); - let context = unsafe { &*context }; - context.make_current() -} - -#[no_mangle] -pub extern "C" fn canvas_native_context_gl_swap_buffers( - context: *const CanvasRenderingContext2D, -) -> bool { - assert!(!context.is_null()); - let context = unsafe { &*context }; - context.swap_buffers() -} /* GL */ -#[derive(Clone)] -pub struct GLContext(pub(crate) canvas_core::gl::GLContext); - #[allow(non_camel_case_types)] #[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[repr(C)] @@ -188,7 +168,10 @@ pub extern "C" fn canvas_native_context_create_pattern_webgl( ); } - context.make_current(); + #[cfg(feature = "gl")]{ + context.make_current(); + } + let ret = from_image_slice(buf.as_slice(), width, height).map(|image| { canvas_2d::context::fill_and_stroke_styles::paint::PaintStyle::Pattern( context.context.create_pattern(image, repetition.into()), @@ -294,14 +277,103 @@ pub extern "C" fn canvas_native_webgl_state_destroy(state: *mut WebGLState) { } impl WebGLState { + #[cfg(target_os = "android")] + pub fn new_with_view( + view: *mut c_void, + width: i32, + height: i32, + version: WebGLVersion, + alpha: bool, + antialias: bool, + depth: bool, + fail_if_major_performance_caveat: bool, + power_preference: PowerPreference, + premultiplied_alpha: bool, + preserve_drawing_buffer: bool, + stencil: bool, + desynchronized: bool, + xr_compatible: bool, + is_canvas: bool, + ) -> Option { + let mut attr = canvas_core::context_attributes::ContextAttributes::new( + alpha, antialias, depth, fail_if_major_performance_caveat, power_preference.into(), premultiplied_alpha, preserve_drawing_buffer, stencil, desynchronized, xr_compatible, false, + ); + + let context = if !view.is_null() { + let handle = raw_window_handle::AndroidNdkWindowHandle::new(NonNull::new(view).unwrap()); + let handle = raw_window_handle::RawWindowHandle::AndroidNdk(handle); + GLContext::create_window_context( + &mut attr, width, height, handle, + ) + } else { + GLContext::create_offscreen_context(&mut attr, width, height) + }?; + + Some(Self( + canvas_webgl::prelude::WebGLState::new_with_context_attributes( + context, + version, + attr.get_alpha(), + attr.get_antialias(), + attr.get_depth(), + fail_if_major_performance_caveat, + power_preference, + premultiplied_alpha, + attr.get_preserve_drawing_buffer(), + attr.get_stencil(), + desynchronized, + xr_compatible, + is_canvas, + ))) + } + + #[cfg(not(target_os = "android"))] + pub fn new_with_view( + view: *mut c_void, + version: WebGLVersion, + alpha: bool, + antialias: bool, + depth: bool, + fail_if_major_performance_caveat: bool, + power_preference: PowerPreference, + premultiplied_alpha: bool, + preserve_drawing_buffer: bool, + stencil: bool, + desynchronized: bool, + xr_compatible: bool, + is_canvas: bool, + ) -> Option { + let mut attr = canvas_core::context_attributes::ContextAttributes::new( + alpha, antialias, depth, fail_if_major_performance_caveat, power_preference.into(), premultiplied_alpha, preserve_drawing_buffer, stencil, desynchronized, xr_compatible, false, + ); + let context = GLContext::create_window_context( + &mut attr, NonNull::new(view)?, + ); + Some(Self( + canvas_webgl::prelude::WebGLState::new_with_context_attributes( + context?, + version, + attr.get_alpha(), + attr.get_antialias(), + attr.get_depth(), + fail_if_major_performance_caveat, + power_preference, + premultiplied_alpha, + attr.get_preserve_drawing_buffer(), + attr.get_stencil(), + desynchronized, + xr_compatible, + is_canvas, + ))) + } pub fn new_with_context( - context: canvas_core::gl::GLContext, + context: GLContext, version: WebGLVersion, alpha: bool, antialias: bool, depth: bool, fail_if_major_performance_caveat: bool, - power_preference: WebGLPowerPreference, + power_preference: PowerPreference, premultiplied_alpha: bool, preserve_drawing_buffer: bool, stencil: bool, @@ -324,8 +396,7 @@ impl WebGLState { desynchronized, xr_compatible, is_canvas, - ), - ) + )) } pub fn get_inner(&self) -> &canvas_webgl::prelude::WebGLState { &self.0 @@ -364,7 +435,7 @@ impl WebGLActiveInfo { } } -pub struct ContextAttributes(canvas_webgl::prelude::ContextAttributes); +pub struct ContextAttributes(canvas_core::context_attributes::ContextAttributes); #[no_mangle] pub extern "C" fn canvas_native_context_attributes_destroy(attr: *mut ContextAttributes) { @@ -387,7 +458,7 @@ impl ContextAttributes { pub fn get_fail_if_major_performance_caveat(&self) -> bool { self.0.get_fail_if_major_performance_caveat() } - pub fn get_power_preference(&self) -> WebGLPowerPreference { + pub fn get_power_preference(&self) -> PowerPreference { self.0.get_power_preference() } pub fn get_premultiplied_alpha(&self) -> bool { @@ -518,7 +589,7 @@ impl WebGLExtension { } #[allow(non_camel_case_types)] -pub struct EXT_blend_minmax(canvas_webgl::prelude::EXT_blend_minmax); +pub struct EXT_blend_minmax; #[no_mangle] pub extern "C" fn canvas_native_webgl_EXT_blend_minmax_destroy(value: *mut EXT_blend_minmax) { @@ -529,7 +600,7 @@ pub extern "C" fn canvas_native_webgl_EXT_blend_minmax_destroy(value: *mut EXT_b } #[allow(non_camel_case_types)] -pub struct EXT_color_buffer_half_float(canvas_webgl::prelude::EXT_color_buffer_half_float); +pub struct EXT_color_buffer_half_float; #[no_mangle] pub extern "C" fn canvas_native_webgl_EXT_color_buffer_half_float_destroy( @@ -555,7 +626,7 @@ pub extern "C" fn canvas_native_webgl_EXT_disjoint_timer_query_destroy( } #[allow(non_camel_case_types)] -pub struct EXT_sRGB(canvas_webgl::prelude::EXT_sRGB); +pub struct EXT_sRGB; #[no_mangle] pub extern "C" fn canvas_native_webgl_EXT_sRGB_destroy(value: *mut EXT_disjoint_timer_query) { @@ -579,7 +650,7 @@ pub extern "C" fn canvas_native_webgl_EXT_shader_texture_lod_destroy( } #[allow(non_camel_case_types)] -pub struct EXT_texture_filter_anisotropic(canvas_webgl::prelude::EXT_texture_filter_anisotropic); +pub struct EXT_texture_filter_anisotropic; #[no_mangle] pub extern "C" fn canvas_native_webgl_EXT_texture_filter_anisotropic_destroy( @@ -592,7 +663,7 @@ pub extern "C" fn canvas_native_webgl_EXT_texture_filter_anisotropic_destroy( } #[allow(non_camel_case_types)] -pub struct OES_element_index_uint(canvas_webgl::prelude::OES_element_index_uint); +pub struct OES_element_index_uint; #[no_mangle] pub extern "C" fn canvas_native_webgl_OES_element_index_uint_destroy( @@ -605,7 +676,7 @@ pub extern "C" fn canvas_native_webgl_OES_element_index_uint_destroy( } #[allow(non_camel_case_types)] -pub struct OES_standard_derivatives(canvas_webgl::prelude::OES_standard_derivatives); +pub struct OES_standard_derivatives; #[no_mangle] pub extern "C" fn canvas_native_webgl_OES_standard_derivatives_destroy( @@ -642,7 +713,7 @@ pub extern "C" fn canvas_native_webgl_OES_texture_float_linear_destroy( } #[allow(non_camel_case_types)] -pub struct OES_texture_half_float(canvas_webgl::prelude::OES_texture_half_float); +pub struct OES_texture_half_float; #[no_mangle] pub extern "C" fn canvas_native_webgl_OES_texture_half_float_destroy( @@ -681,7 +752,7 @@ pub extern "C" fn canvas_native_webgl_OES_vertex_array_object_destroy( } #[allow(non_camel_case_types)] -pub struct WEBGL_color_buffer_float(canvas_webgl::prelude::WEBGL_color_buffer_float); +pub struct WEBGL_color_buffer_float; #[no_mangle] pub extern "C" fn canvas_native_webgl_WEBGL_color_buffer_float_destroy( @@ -694,7 +765,7 @@ pub extern "C" fn canvas_native_webgl_WEBGL_color_buffer_float_destroy( } #[allow(non_camel_case_types)] -pub struct WEBGL_compressed_texture_atc(canvas_webgl::prelude::WEBGL_compressed_texture_atc); +pub struct WEBGL_compressed_texture_atc; #[no_mangle] pub extern "C" fn canvas_native_webgl_WEBGL_compressed_texture_atc_destroy( @@ -707,7 +778,7 @@ pub extern "C" fn canvas_native_webgl_WEBGL_compressed_texture_atc_destroy( } #[allow(non_camel_case_types)] -pub struct WEBGL_compressed_texture_etc1(canvas_webgl::prelude::WEBGL_compressed_texture_etc1); +pub struct WEBGL_compressed_texture_etc1; #[no_mangle] pub extern "C" fn canvas_native_webgl_WEBGL_compressed_texture_etc1_destroy( @@ -720,7 +791,7 @@ pub extern "C" fn canvas_native_webgl_WEBGL_compressed_texture_etc1_destroy( } #[allow(non_camel_case_types)] -pub struct WEBGL_compressed_texture_s3tc(canvas_webgl::prelude::WEBGL_compressed_texture_s3tc); +pub struct WEBGL_compressed_texture_s3tc; #[no_mangle] pub extern "C" fn canvas_native_webgl_WEBGL_compressed_texture_s3tc_destroy( @@ -733,9 +804,7 @@ pub extern "C" fn canvas_native_webgl_WEBGL_compressed_texture_s3tc_destroy( } #[allow(non_camel_case_types)] -pub struct WEBGL_compressed_texture_s3tc_srgb( - canvas_webgl::prelude::WEBGL_compressed_texture_s3tc_srgb, -); +pub struct WEBGL_compressed_texture_s3tc_srgb; #[no_mangle] pub extern "C" fn canvas_native_webgl_WEBGL_compressed_texture_s3tc_srgb_destroy( @@ -748,7 +817,7 @@ pub extern "C" fn canvas_native_webgl_WEBGL_compressed_texture_s3tc_srgb_destroy } #[allow(non_camel_case_types)] -pub struct WEBGL_compressed_texture_etc(canvas_webgl::prelude::WEBGL_compressed_texture_etc); +pub struct WEBGL_compressed_texture_etc; #[no_mangle] pub extern "C" fn canvas_native_webgl_WEBGL_compressed_texture_etc_destroy( @@ -761,7 +830,7 @@ pub extern "C" fn canvas_native_webgl_WEBGL_compressed_texture_etc_destroy( } #[allow(non_camel_case_types)] -pub struct WEBGL_compressed_texture_pvrtc(canvas_webgl::prelude::WEBGL_compressed_texture_pvrtc); +pub struct WEBGL_compressed_texture_pvrtc; #[no_mangle] pub extern "C" fn canvas_native_webgl_WEBGL_compressed_texture_pvrtc_destroy( @@ -798,7 +867,7 @@ pub extern "C" fn canvas_native_webgl_ANGLE_instanced_arrays_destroy( } #[allow(non_camel_case_types)] -pub struct WEBGL_depth_texture(canvas_webgl::prelude::WEBGL_depth_texture); +pub struct WEBGL_depth_texture; #[no_mangle] pub extern "C" fn canvas_native_webgl_WEBGL_depth_texture_destroy(value: *mut WEBGL_depth_texture) { @@ -1460,9 +1529,13 @@ pub extern "C" fn canvas_native_webgl_oes_vertex_array_object_bind_vertex_array_ /* OES_vertex_array_object */ + +#[cfg(target_os = "android")] #[no_mangle] pub extern "C" fn canvas_native_webgl_create( - gl_context: i64, + view: *mut c_void, + width: i32, + height: i32, version: i32, alpha: bool, antialias: bool, @@ -1477,14 +1550,60 @@ pub extern "C" fn canvas_native_webgl_create( ) -> *mut WebGLState { match ( WebGLVersion::try_from(version).ok(), - WebGLPowerPreference::try_from(power_preference).ok(), + PowerPreference::try_from(power_preference).ok(), ) { (Some(version), Some(power_preference)) => { - let gl_context = gl_context as *const RwLock; - let gl_context = canvas_core::gl::GLContext::from_raw_inner(gl_context); + match WebGLState::new_with_view( + view, + width, + height, + version, + alpha, + antialias, + depth, + fail_if_major_performance_caveat, + power_preference, + premultiplied_alpha, + preserve_drawing_buffer, + stencil, + desynchronized, + xr_compatible, + false, + ) { + None => std::ptr::null_mut(), + Some(state) => { + Box::into_raw(Box::new(state)) + } + } + } + _ => std::ptr::null_mut(), + } +} + - let inner = WebGLState::new_with_context( - gl_context, +#[cfg(not(target_os = "android"))] +#[no_mangle] +pub extern "C" fn canvas_native_webgl_create( + view: *mut c_void, + version: i32, + alpha: bool, + antialias: bool, + depth: bool, + fail_if_major_performance_caveat: bool, + power_preference: i32, + premultiplied_alpha: bool, + preserve_drawing_buffer: bool, + stencil: bool, + desynchronized: bool, + xr_compatible: bool, +) -> *mut WebGLState { + match ( + WebGLVersion::try_from(version).ok(), + PowerPreference::try_from(power_preference).ok(), + ) { + (Some(version), Some(power_preference)) => { + match WebGLState::new_with_view( + view, version, alpha, antialias, @@ -1497,8 +1616,12 @@ pub extern "C" fn canvas_native_webgl_create( desynchronized, xr_compatible, false, - ); - Box::into_raw(Box::new(inner)) + ) { + None => std::ptr::null_mut(), + Some(state) => { + Box::into_raw(Box::new(state)) + } + } } _ => std::ptr::null_mut(), } @@ -1523,10 +1646,10 @@ pub extern "C" fn canvas_native_webgl_create_no_window( ) -> *mut WebGLState { match ( WebGLVersion::try_from(version).ok(), - WebGLPowerPreference::try_from(power_preference).ok(), + PowerPreference::try_from(power_preference).ok(), ) { (Some(version), Some(power_preference)) => { - Box::into_raw(Box::new(canvas_native_webgl_create_no_window_internal( + match canvas_native_webgl_create_no_window_internal( width, height, version, @@ -1541,7 +1664,12 @@ pub extern "C" fn canvas_native_webgl_create_no_window( desynchronized, xr_compatible, is_canvas, - ))) + ) { + None => std::ptr::null_mut(), + Some(state) => { + Box::into_raw(Box::new(state)) + } + } } _ => std::ptr::null_mut(), } @@ -1555,14 +1683,14 @@ pub(crate) fn canvas_native_webgl_create_no_window_internal( antialias: bool, depth: bool, fail_if_major_performance_caveat: bool, - power_preference: WebGLPowerPreference, + power_preference: PowerPreference, premultiplied_alpha: bool, preserve_drawing_buffer: bool, stencil: bool, desynchronized: bool, xr_compatible: bool, is_canvas: bool, -) -> WebGLState { +) -> Option { let mut attrs = canvas_core::context_attributes::ContextAttributes::new( alpha, antialias, @@ -1577,23 +1705,24 @@ pub(crate) fn canvas_native_webgl_create_no_window_internal( is_canvas, ); - let ctx = canvas_core::gl::GLContext::create_offscreen_context(&mut attrs, width, height) - .unwrap_or_default(); - - WebGLState::new_with_context( - ctx, - version, - attrs.get_alpha(), - attrs.get_antialias(), - attrs.get_depth(), - attrs.get_fail_if_major_performance_caveat(), - WebGLPowerPreference::from(attrs.get_power_preference()), - attrs.get_premultiplied_alpha(), - attrs.get_preserve_drawing_buffer(), - attrs.get_stencil(), - attrs.get_desynchronized(), - attrs.get_xr_compatible(), - attrs.get_is_canvas(), + let ctx = GLContext::create_offscreen_context(&mut attrs, width, height)?; + + Some( + WebGLState::new_with_context( + ctx, + version, + attrs.get_alpha(), + attrs.get_antialias(), + attrs.get_depth(), + attrs.get_fail_if_major_performance_caveat(), + PowerPreference::from(attrs.get_power_preference()), + attrs.get_premultiplied_alpha(), + attrs.get_preserve_drawing_buffer(), + attrs.get_stencil(), + attrs.get_desynchronized(), + attrs.get_xr_compatible(), + attrs.get_is_canvas(), + ) ) } @@ -3255,8 +3384,6 @@ pub extern "C" fn canvas_native_webgl_tex_image2d_canvas2d( let canvas = unsafe { &mut *canvas }; let state = unsafe { &mut *state }; - canvas.make_current(); - let (width, height) = canvas.context.dimensions(); let mut bytes = vec![0u8; (width * height * 4.) as usize]; @@ -3264,6 +3391,7 @@ pub extern "C" fn canvas_native_webgl_tex_image2d_canvas2d( canvas.context.get_pixels(bytes.as_mut_slice(), (0, 0), (width as i32, height as i32)); state.0.make_current(); + canvas_webgl::webgl::canvas_native_webgl_tex_image2d( target, level, @@ -3462,15 +3590,12 @@ pub extern "C" fn canvas_native_webgl_tex_sub_image2d_canvas2d( let state = unsafe { &mut *state }; let canvas = unsafe { &mut *canvas }; - canvas.make_current(); - let (width, height) = canvas.context.dimensions(); let mut bytes = vec![0u8; (width * height * 4.) as usize]; canvas.context.get_pixels(bytes.as_mut_slice(), (0, 0), (width as i32, height as i32)); - state.0.make_current(); canvas_webgl::webgl::canvas_native_webgl_tex_sub_image2d( diff --git a/crates/canvas-c/src/webgl/gl2.rs b/crates/canvas-c/src/webgl/gl2.rs index c17de50cf..4f2e76a9b 100644 --- a/crates/canvas-c/src/webgl/gl2.rs +++ b/crates/canvas-c/src/webgl/gl2.rs @@ -1103,9 +1103,18 @@ pub extern "C" fn canvas_native_webgl2_tex_image3d_canvas2d( let state = unsafe { &mut *state }; let canvas = unsafe { &mut *canvas }; - canvas.make_current(); - let (width, height) = (canvas.context.width(), canvas.context.height()); - let snapshot = canvas.context.as_data(); + + + // let (width, height) = (canvas.context.width(), canvas.context.height()); + // let snapshot = canvas.context.as_data(); + + + let (width, height) = canvas.context.dimensions(); + + let mut bytes = vec![0u8; (width * height * 4.) as usize]; + + canvas.context.get_pixels(bytes.as_mut_slice(), (0, 0), (width as i32, height as i32)); + // todo handle pre-multipied // let premultiply = state.get_inner().get_premultiplied_alpha(); @@ -1124,7 +1133,7 @@ pub extern "C" fn canvas_native_webgl2_tex_image3d_canvas2d( border, format, type_, - snapshot.as_slice(), + bytes.as_slice(), state.get_inner_mut(), ) } @@ -1349,8 +1358,8 @@ pub extern "C" fn canvas_native_webgl2_tex_sub_image3d_canvas2d( xoffset: i32, yoffset: i32, zoffset: i32, - width: i32, - height: i32, + _width: i32, + _height: i32, depth: i32, format: u32, type_: u32, @@ -1360,9 +1369,18 @@ pub extern "C" fn canvas_native_webgl2_tex_sub_image3d_canvas2d( assert!(!state.is_null()); let state = unsafe { &mut *state }; let canvas = unsafe { &mut *canvas }; - canvas.make_current(); - let (width, height) = (canvas.context.width(), canvas.context.height()); - let data = canvas.context.as_data(); + + let (width, height) = canvas.context.dimensions(); + + let mut bytes = vec![0u8; (width * height * 4.) as usize]; + + canvas.context.get_pixels(bytes.as_mut_slice(), (0, 0), (width as i32, height as i32)); + + + + // canvas.make_current(); + // let (width, height) = (canvas.context.width(), canvas.context.height()); + // let data = canvas.context.as_data(); // let premultiply = state.get_inner().get_premultiplied_alpha(); @@ -1381,7 +1399,7 @@ pub extern "C" fn canvas_native_webgl2_tex_sub_image3d_canvas2d( depth, format, type_, - data.as_slice(), + bytes.as_slice(), state.get_inner_mut(), ); } @@ -1932,7 +1950,7 @@ pub extern "C" fn canvas_native_webgl2_tex_image2d_canvas2d( let canvas = unsafe { &mut *canvas }; let state = unsafe { &mut *state }; - canvas.make_current(); + // canvas.make_current(); let (source_width, source_height) = canvas.context.dimensions(); @@ -2041,7 +2059,7 @@ pub extern "C" fn canvas_native_webgl2_tex_image2d_canvas2d( _ => None, }; - if let Some(mut bytes) = bytes { + if let Some(bytes) = bytes { unsafe { if state.0.get_flip_y() { let mut buffer = bytes; @@ -2208,7 +2226,7 @@ pub extern "C" fn canvas_native_webgl2_tex_image2d_image_data( _ => None, }; - if let Some(mut bytes) = bytes { + if let Some(bytes) = bytes { unsafe { if state.0.get_flip_y() { let mut buffer = bytes; diff --git a/crates/canvas-c/src/webgpu/enums.rs b/crates/canvas-c/src/webgpu/enums.rs index 0b685f275..328ecfe94 100644 --- a/crates/canvas-c/src/webgpu/enums.rs +++ b/crates/canvas-c/src/webgpu/enums.rs @@ -526,7 +526,7 @@ impl From for CanvasGPUTextureFormat { wgt::TextureFormat::Rgb9e5Ufloat => CanvasGPUTextureFormat::Rgb9e5Ufloat, wgt::TextureFormat::Rgb10a2Uint => CanvasGPUTextureFormat::Rgb10a2Uint, wgt::TextureFormat::Rgb10a2Unorm => CanvasGPUTextureFormat::Rgb10a2Unorm, - wgt::TextureFormat::Rg11b10UFloat => CanvasGPUTextureFormat::Rg11b10UFloat, + wgt::TextureFormat::Rg11b10Ufloat => CanvasGPUTextureFormat::Rg11b10UFloat, wgt::TextureFormat::Rg32Uint => CanvasGPUTextureFormat::Rg32Uint, wgt::TextureFormat::Rg32Sint => CanvasGPUTextureFormat::Rg32Sint, wgt::TextureFormat::Rg32Float => CanvasGPUTextureFormat::Rg32Float, @@ -621,7 +621,7 @@ impl Into for CanvasGPUTextureFormat { CanvasGPUTextureFormat::Rgb9e5Ufloat => wgt::TextureFormat::Rgb9e5Ufloat, CanvasGPUTextureFormat::Rgb10a2Uint => wgt::TextureFormat::Rgb10a2Uint, CanvasGPUTextureFormat::Rgb10a2Unorm => wgt::TextureFormat::Rgb10a2Unorm, - CanvasGPUTextureFormat::Rg11b10UFloat => wgt::TextureFormat::Rg11b10UFloat, + CanvasGPUTextureFormat::Rg11b10UFloat => wgt::TextureFormat::Rg11b10Ufloat, CanvasGPUTextureFormat::Rg32Uint => wgt::TextureFormat::Rg32Uint, CanvasGPUTextureFormat::Rg32Sint => wgt::TextureFormat::Rg32Sint, CanvasGPUTextureFormat::Rg32Float => wgt::TextureFormat::Rg32Float, diff --git a/crates/canvas-c/src/webgpu/error.rs b/crates/canvas-c/src/webgpu/error.rs index 1c950d336..46cf46d49 100644 --- a/crates/canvas-c/src/webgpu/error.rs +++ b/crates/canvas-c/src/webgpu/error.rs @@ -3,6 +3,7 @@ use std::ffi::CString; use std::fmt::Display; use std::os::raw::c_char; use std::sync::Arc; +use std::fmt::Write; fn format_error(_context: &Arc, err: &(impl Error + 'static)) -> String { let mut output = String::new(); @@ -80,7 +81,7 @@ pub(crate) fn handle_error_fatal( // log::error!("Error in {operation}: {f}", // f = error); - let error = cause.to_string(); + let error = cause; #[cfg(target_os = "android")] log::error!("Error in {operation}: {error}"); @@ -104,6 +105,8 @@ pub enum CanvasGPUErrorType { Internal, } + +#[derive(Clone, Debug)] pub enum CanvasGPUError { None, Lost, @@ -129,8 +132,6 @@ fn fmt_err(err: &(dyn Error + 'static)) -> String { let mut level = 0; fn print_tree(output: &mut String, level: &mut usize, e: &(dyn Error + 'static)) { - use std::fmt::Write; - let mut print = |e: &(dyn Error + 'static)| { writeln!(output, "{}{}", " ".repeat(*level * 2), e).unwrap(); @@ -140,15 +141,13 @@ fn fmt_err(err: &(dyn Error + 'static)) -> String { *level -= 1; } }; - /*if let Some(multi) = e.downcast_ref::() { + if let Some(multi) = e.downcast_ref::() { for e in multi.errors() { print(e); } } else { print(e); } - */ - print(e); } print_tree(&mut output, &mut level, err); diff --git a/crates/canvas-c/src/webgpu/gpu.rs b/crates/canvas-c/src/webgpu/gpu.rs index 2924a74e1..bacf42085 100644 --- a/crates/canvas-c/src/webgpu/gpu.rs +++ b/crates/canvas-c/src/webgpu/gpu.rs @@ -1,6 +1,5 @@ use std::{os::raw::c_void, sync::Arc}; - - +use std::fmt::{Debug, Formatter}; ////use wgpu_core::gfx_select; use wgpu_core::global::Global; @@ -47,6 +46,15 @@ struct CanvasWebGPUInstanceInner { pub(crate) global: Arc, } +impl Debug for CanvasWebGPUInstanceInner { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + f.debug_struct("CanvasWebGPUInstanceInner") + .finish() + } +} + + +#[derive(Debug)] pub struct CanvasWebGPUInstance(CanvasWebGPUInstanceInner); impl Clone for CanvasWebGPUInstance { fn clone(&self) -> Self { @@ -71,8 +79,8 @@ pub extern "C" fn canvas_native_webgpu_instance_create() -> *const CanvasWebGPUI #[cfg(any(target_os = "ios", target_os = "macos"))] let backends = wgt::Backends::METAL; - #[cfg(target_os = "android")] - let backends = wgt::Backends::VULKAN | wgt::Backends::GL; + #[cfg(target_os = "android")] + let backends = wgt::Backends::from_bits(wgt::Backends::VULKAN.bits() | wgt::Backends::GL.bits()).unwrap(); #[cfg(target_os = "windows")] let backends = wgt::Backends::DX12; @@ -148,15 +156,14 @@ pub unsafe extern "C" fn canvas_native_webgpu_request_adapter( let adapter = global.request_adapter( &opts, - wgpu_core::instance::AdapterInputs::Mask(backends, |_b| None), + backends, + None, ); let adapter = adapter.map(|adapter_id| { - let features = global.adapter_features(adapter_id) - .map(build_features) - .unwrap_or_default(); + let features = build_features(global.adapter_features(adapter_id)); - let limits = global.adapter_limits(adapter_id).unwrap_or_default(); + let limits = global.adapter_limits(adapter_id); let ret = CanvasGPUAdapter { instance, diff --git a/crates/canvas-c/src/webgpu/gpu_adapter.rs b/crates/canvas-c/src/webgpu/gpu_adapter.rs index 84de90174..76effdc18 100644 --- a/crates/canvas-c/src/webgpu/gpu_adapter.rs +++ b/crates/canvas-c/src/webgpu/gpu_adapter.rs @@ -1,12 +1,11 @@ +use crate::buffers::StringBuffer; +use crate::webgpu::gpu_device::{ErrorSinkRaw, DEFAULT_DEVICE_LOST_HANDLER}; +use crate::webgpu::gpu_queue::QueueId; +use std::sync::Arc; use std::{ ffi::CString, os::raw::{c_char, c_void}, }; -use std::sync::Arc; - -use crate::buffers::StringBuffer; -use crate::webgpu::gpu_device::{DEFAULT_DEVICE_LOST_HANDLER, ErrorSinkRaw}; -use crate::webgpu::gpu_queue::QueueId; use super::{ gpu::CanvasWebGPUInstance, gpu_adapter_info::CanvasGPUAdapterInfo, gpu_device::CanvasGPUDevice, @@ -96,10 +95,9 @@ pub extern "C" fn canvas_native_webgpu_adapter_request_adapter_info( let adapter_id = adapter.adapter; let global = adapter.instance.global(); - global.adapter_get_info(adapter_id) - .map(|info| Arc::into_raw(Arc::new(CanvasGPUAdapterInfo::new(info)))) - .ok() - .unwrap_or_else(|| std::ptr::null()) + let info = global.adapter_get_info(adapter_id); + + Arc::into_raw(Arc::new(CanvasGPUAdapterInfo::new(info))) } #[no_mangle] @@ -144,14 +142,6 @@ pub extern "C" fn canvas_native_webgpu_adapter_request_device( let global = instance.global(); - let (device, queue, error) = global.adapter_request_device( - adapter_id, - &descriptor, - None, - None, - None, - ); - let callback = unsafe { std::mem::transmute::<*const i64, fn(*mut c_char, *const CanvasGPUDevice, *mut c_void)>( callback as _, @@ -159,33 +149,42 @@ pub extern "C" fn canvas_native_webgpu_adapter_request_device( }; let callback_data = callback_data as *mut c_void; - if let Some(error) = error { - let error = error.to_string(); - let ret = CString::new(error).unwrap().into_raw(); - callback(ret, std::ptr::null_mut(), callback_data); - } else { - let error_sink = Arc::new(parking_lot::Mutex::new(ErrorSinkRaw::new( - DEFAULT_DEVICE_LOST_HANDLER, - ))); - - let queue = Arc::new(CanvasGPUQueue { - label: descriptor.label, - queue: Arc::new(QueueId { - id: queue, - instance: Arc::clone(&instance_copy), - }), - error_sink: error_sink.clone(), - }); - - let ret = Arc::into_raw(Arc::new(CanvasGPUDevice { - label, - device, - queue, - user_data: std::ptr::null_mut(), - instance: instance_copy, - error_sink, - })); - callback(std::ptr::null_mut(), ret, callback_data); + match global.adapter_request_device( + adapter_id, + &descriptor, + None, + None, + None, + ) { + Ok((device, queue)) => { + let error_sink = Arc::new(parking_lot::Mutex::new(ErrorSinkRaw::new( + DEFAULT_DEVICE_LOST_HANDLER, + ))); + + let queue = Arc::new(CanvasGPUQueue { + label: descriptor.label, + queue: Arc::new(QueueId { + id: queue, + instance: Arc::clone(&instance_copy), + }), + error_sink: error_sink.clone(), + }); + + let ret = Arc::into_raw(Arc::new(CanvasGPUDevice { + label, + device, + queue, + user_data: std::ptr::null_mut(), + instance: instance_copy, + error_sink, + })); + callback(std::ptr::null_mut(), ret, callback_data); + } + Err(error) => { + let error = error.to_string(); + let ret = CString::new(error).unwrap().into_raw(); + callback(ret, std::ptr::null_mut(), callback_data); + } } }); } diff --git a/crates/canvas-c/src/webgpu/gpu_canvas_context.rs b/crates/canvas-c/src/webgpu/gpu_canvas_context.rs index 07335a942..b10acbd87 100644 --- a/crates/canvas-c/src/webgpu/gpu_canvas_context.rs +++ b/crates/canvas-c/src/webgpu/gpu_canvas_context.rs @@ -1,15 +1,16 @@ -use std::os::raw::c_void; -use std::sync::Arc; - -use parking_lot::lock_api::Mutex; -use raw_window_handle::{AppKitDisplayHandle, RawDisplayHandle, RawWindowHandle}; -use wgt::SurfaceStatus; - use crate::webgpu::enums::{CanvasOptionalGPUTextureFormat, SurfaceGetCurrentTextureStatus}; use crate::webgpu::error::handle_error_fatal; use crate::webgpu::gpu_adapter::CanvasGPUAdapter; use crate::webgpu::gpu_device::ErrorSink; use crate::webgpu::structs::{CanvasExtent3d, CanvasSurfaceCapabilities}; +use base64::Engine; +use parking_lot::lock_api::Mutex; +use raw_window_handle::{AppKitDisplayHandle, RawDisplayHandle, RawWindowHandle}; +use std::borrow::Cow; +use std::ffi::{CStr, CString}; +use std::os::raw::{c_char, c_void}; +use std::sync::Arc; +use wgt::{SurfaceStatus, TextureFormat}; use super::{ enums::CanvasGPUTextureFormat, gpu::CanvasWebGPUInstance, gpu_device::CanvasGPUDevice, @@ -18,7 +19,7 @@ use super::{ //use wgpu_core::gfx_select; -#[derive(Copy, Clone)] +#[derive(Copy, Clone, Debug)] struct TextureData { usage: wgt::TextureUsages, dimension: wgt::TextureDimension, @@ -28,8 +29,9 @@ struct TextureData { sample_count: u32, } +#[derive(Debug)] pub struct SurfaceData { - device_id: wgpu_core::id::DeviceId, + device: Arc, error_sink: ErrorSink, texture_data: TextureData, previous_configuration: wgt::SurfaceConfiguration>, @@ -41,9 +43,16 @@ pub struct ViewData { pub height: u32, } +#[derive(Copy, Clone, Debug)] +pub struct ReadBackTexture { + texture: wgpu_core::id::TextureId, + data: TextureData, +} + pub struct CanvasGPUCanvasContext { pub(crate) instance: Arc, pub(crate) surface: parking_lot::Mutex, + pub(crate) read_back_texture: parking_lot::Mutex>, pub(crate) has_surface_presented: Arc, pub(crate) data: parking_lot::Mutex>, pub(crate) view_data: parking_lot::Mutex, @@ -59,6 +68,271 @@ impl Drop for CanvasGPUCanvasContext { } } +#[no_mangle] +pub unsafe extern "C" fn canvas_native_webgpu_to_data_url( + context: *const CanvasGPUCanvasContext, + device: *const CanvasGPUDevice, + format: *const c_char, + quality: u32, +) -> *mut c_char { + if context.is_null() || device.is_null() { + return std::ptr::null_mut(); + } + let context = &*context; + let device = &*device; + if format.is_null() { + return std::ptr::null_mut(); + } + let format = CStr::from_ptr(format as *const c_char).to_string_lossy(); + if let Some(data) = to_data_url(context, device, format.as_ref(), quality) { + return CString::new(data).unwrap().into_raw(); + } + std::ptr::null_mut() +} + + +#[no_mangle] +pub unsafe extern "C" fn canvas_native_webgpu_to_data_url_with_texture( + context: *const CanvasGPUCanvasContext, + device: *const CanvasGPUDevice, + texture: *const CanvasGPUTexture, + format: *const c_char, + quality: u32, +) -> *mut c_char { + if context.is_null() || device.is_null() || texture.is_null() { + return std::ptr::null_mut(); + } + let context = &*context; + let device = &*device; + let texture = &*texture; + if format.is_null() { + return std::ptr::null_mut(); + } + let format = CStr::from_ptr(format as *const c_char).to_string_lossy(); + + if let Some(data) = to_data_url_with_texture(context, device, texture.texture, texture.width, texture.height, format.as_ref(), quality) { + return CString::new(data).unwrap().into_raw(); + } + std::ptr::null_mut() +} + + +fn to_data_url( + context: &CanvasGPUCanvasContext, + device: &CanvasGPUDevice, + format: &str, + quality: u32, +) -> Option { + let context = &*context; + let read_back_texture_lock = context.read_back_texture.lock(); + match read_back_texture_lock.as_ref() { + None => None, + Some(texture) => { + to_data_url_with_texture(context, device, texture.texture, texture.data.size.width, texture.data.size.height, format, quality) + } + } +} + + +fn round_up_to_256(value: u32) -> u32 { + (value + 255) & !255 +} + +fn round_up_to_256_u64(value: u64) -> u64 { + (value + 255) & !255 +} + + +fn to_data_url_with_texture( + context: &CanvasGPUCanvasContext, + device: &CanvasGPUDevice, + texture: wgpu_core::id::TextureId, + width: u32, + height: u32, + format: &str, + quality: u32, +) -> Option { + let context = &*context; + let global = context.instance.global(); + let queue = &device.queue; + let mut invalid = false; + let mut is_bgra = false; + { + let lock = context.data.lock(); + if let Some(data) = lock.as_ref() { + match data.texture_data.format { + TextureFormat::Rgba8Unorm | TextureFormat::Rgba8UnormSrgb => { + is_bgra = false; + } + TextureFormat::Bgra8Unorm | TextureFormat::Bgra8UnormSrgb => { + is_bgra = true + } + _ => { + invalid = true; + } + } + } + } + if invalid { + return None; + } + + + unsafe { + let output_buffer_size = round_up_to_256_u64((width as u64) * 4) * (height as u64); + let label = Cow::Borrowed("ToDataURL:Buffer"); + let (output_buffer, error) = global.device_create_buffer(device.device, &wgt::BufferDescriptor { + label: wgpu_core::Label::from(label), + size: output_buffer_size, + usage: wgt::BufferUsages::COPY_DST | wgt::BufferUsages::MAP_READ, + mapped_at_creation: false, + }, None); + + if let Some(_) = error { + return None; + } + + let texture_extent = wgt::Extent3d { + width, + height, + depth_or_array_layers: 1, + }; + + let texture_copy = wgt::ImageCopyTexture { + texture, + mip_level: 0, + origin: wgt::Origin3d::ZERO, + aspect: wgt::TextureAspect::All, + }; + + let buffer_copy = wgt::ImageCopyBuffer { + buffer: output_buffer, + layout: wgt::ImageDataLayout { + offset: 0, + bytes_per_row: Some(round_up_to_256(4 * width)), + rows_per_image: Some(height), + }, + }; + + let label = Cow::Borrowed("ToDataURL:Encoder"); + + let (encoder, error) = global.device_create_command_encoder(device.device, &wgt::CommandEncoderDescriptor { + label: wgpu_core::Label::from(label), + }, None); + + if let Some(_) = error { + return None; + } + + if let Err(_) = global.command_encoder_copy_texture_to_buffer(encoder, &texture_copy, &buffer_copy, &texture_extent) { + return None; + } + + let desc = wgt::CommandBufferDescriptor { label: None }; + + let (id, error) = global.command_encoder_finish(encoder, &desc); + + if let Some(_) = error { + return None; + } + + global.queue_submit(queue.queue.id, &[id]).ok()?; + + let op = wgpu_core::resource::BufferMapOperation { + host: wgpu_core::device::HostMap::Read, + callback: None, + }; + + + if let Err(_) = global.buffer_map_async(output_buffer, 0, None, op) { + return None; + } + + if let Err(_) = global.device_poll(device.device, wgt::Maintain::Wait) { + return None; + } + + match global.buffer_get_mapped_range(output_buffer, 0, None) { + Ok((ptr, size)) => { + let bytes = std::slice::from_raw_parts(ptr.as_ptr(), size as usize); + + if cfg!(feature = "2d") { + return Some(canvas_2d::bytes_to_data_n32_url(width as i32, height as i32, bytes, round_up_to_256_u64((4 * width) as u64) as usize, format, quality)); + } + + if cfg!(not(feature = "2d")) + { + let mut buffer = None; + + if is_bgra { + let mut bytes = bytes.to_vec(); + canvas_core::image_asset::ImageAsset::bgra_to_rgba_in_place(&mut bytes); + buffer = image::ImageBuffer::from_raw(width, height, bytes) + } else { + buffer = image::ImageBuffer::from_raw(width, height, bytes.to_vec()); + } + + return match buffer { + Some(image) => { + let buffer = image::DynamicImage::ImageRgb8( + image, + ); + + + let mut output = std::io::Cursor::new(Vec::new()); + + let fmt = match format { + "image/jpg" | "image/jpeg" => { + buffer.write_to(&mut output, image::ImageFormat::Jpeg); + "image/jpg" + } + "image/webp" => { + buffer.write_to(&mut output, image::ImageFormat::WebP); + "image/webp" + } + "image/gif" => { + buffer.write_to(&mut output, image::ImageFormat::Gif); + "image/gif" + } + "image/heif" | "image/heif-sequence" | "image/heic" | "image/heic-sequence" => { + buffer.write_to(&mut output, image::ImageFormat::Avif); + "image/heif" + } + "image/png" => { + buffer.write_to(&mut output, image::ImageFormat::Png); + "image/png" + } + _ => { + "" + } + }; + + + let mut data: Option = None; + let encoded = base64::engine::general_purpose::STANDARD.encode(output.get_ref()); + data = Some(format!("data:{};base64,{}", fmt, encoded)); + + + if let Err(_) = global.buffer_unmap(output_buffer) { + return None; + } + + data + } + None => None, + }; + } + + None + } + Err(_) => { + None + } + } + } +} + + #[cfg(any(target_os = "android"))] #[no_mangle] pub unsafe extern "C" fn canvas_native_webgpu_context_create( @@ -89,6 +363,7 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_create( has_surface_presented: Arc::default(), data: Default::default(), view_data: Mutex::new(ViewData { width, height }), + read_back_texture: Mutex::default(), }; Arc::into_raw(Arc::new(ctx)) @@ -132,6 +407,7 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_resize( match global.instance_create_surface(display_handle, window_handle, None) { Ok(surface_id) => { *surface = surface_id; + drop(surface); context.has_surface_presented.store(false, std::sync::atomic::Ordering::SeqCst); let mut view_data = context.view_data.lock(); view_data.width = width; @@ -146,7 +422,54 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_resize( new_config.width = width; new_config.height = height; - if let Some(cause) = global.surface_configure(surface_id, surface_data.device_id, &new_config) + let mut read_back_texture_lock = context.read_back_texture.lock(); + if let Some(texture) = read_back_texture_lock.take() { + global.texture_drop(texture.texture); + } + + let ((read_back, error), texture_data) = { + #[cfg(any(target_os = "ios", target_os = "macos"))] + let mut format = wgt::TextureFormat::Bgra8Unorm; + + #[cfg(any(target_os = "android"))] + let mut format = wgt::TextureFormat::Rgba8Unorm; + + + let desc = wgt::TextureDescriptor { + label: Some(Cow::Borrowed("ContextReadBack")), + size: wgt::Extent3d { + width, + height, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgt::TextureDimension::D2, + format, + usage: wgt::TextureUsages::COPY_SRC | wgt::TextureUsages::COPY_DST, + view_formats: vec![], + }; + let texture_data = TextureData { + usage: desc.usage, + dimension: desc.dimension, + size: desc.size, + format: desc.format, + mip_level_count: desc.mip_level_count, + sample_count: desc.sample_count, + }; + (global.device_create_texture(surface_data.device.device, &desc, None), texture_data) + }; + + if let Some(cause) = error { + handle_error_fatal(global, cause, "canvas_native_webgpu_context_resize: create readback texture"); + } else { + *read_back_texture_lock = Some(ReadBackTexture { + texture: read_back, + data: texture_data, + }); + } + + if let Some(cause) = global.surface_configure(surface_id, surface_data.device.device, &new_config) { handle_error_fatal(global, cause, "canvas_native_webgpu_context_resize"); } else { @@ -183,6 +506,7 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_create( data: Mutex::default(), has_surface_presented: Arc::default(), view_data: Mutex::new(ViewData { width, height }), + read_back_texture: Mutex::default(), }; Arc::into_raw(Arc::new(ctx)) @@ -221,6 +545,7 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_create_uiview( let ctx = CanvasGPUCanvasContext { instance, surface: Mutex::new(surface_id), + read_back_texture: Default::default(), has_surface_presented: Arc::default(), data: Mutex::default(), view_data: Mutex::new(ViewData { width, height }), @@ -238,7 +563,7 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_create_uiview( #[cfg(any(target_os = "ios"))] #[no_mangle] pub unsafe extern "C" fn canvas_native_webgpu_context_resize_uiview( - context: *const CanvasGPUCanvasContext, + context: *const crate::webgpu::gpu_canvas_context::CanvasGPUCanvasContext, view: *mut c_void, width: u32, height: u32, @@ -248,20 +573,21 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_resize_uiview( } let context = &*context; - let mut surface_data_lock = context.data.lock(); + + let mut surface = context.surface.lock(); let global = context.instance.global(); + global.surface_drop(*surface); + + let mut surface_data_lock = context.data.lock(); + let display_handle = RawDisplayHandle::UiKit(raw_window_handle::UiKitDisplayHandle::new()); let handle = raw_window_handle::UiKitWindowHandle::new(std::ptr::NonNull::new_unchecked(view)); let window_handle = RawWindowHandle::UiKit(handle); - let mut surface = context.surface.lock(); - - global.surface_drop(*surface); - match global.instance_create_surface(display_handle, window_handle, None) { Ok(surface_id) => { *surface = surface_id; @@ -278,7 +604,57 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_resize_uiview( new_config.width = width; new_config.height = height; - if let Some(cause) = global.surface_configure(surface_id, surface_data.device_id, &new_config) + + let mut read_back_texture_lock = context.read_back_texture.lock(); + if let Some(texture) = read_back_texture_lock.take() { + global.texture_drop(texture.texture); + } + + let ((read_back, error), texture_data) = { + #[cfg(any(target_os = "ios", target_os = "macos"))] + let mut format = wgt::TextureFormat::Bgra8Unorm; + + #[cfg(any(target_os = "android"))] + let mut format = wgt::TextureFormat::Rgba8Unorm; + + + let desc = wgt::TextureDescriptor { + label: Some(Cow::Borrowed("ContextReadBack")), + size: wgt::Extent3d { + width, + height, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgt::TextureDimension::D2, + format, + usage: wgt::TextureUsages::COPY_SRC | wgt::TextureUsages::COPY_DST, + view_formats: vec![], + }; + + let texture_data = TextureData { + usage: desc.usage, + dimension: desc.dimension, + size: desc.size, + format: desc.format, + mip_level_count: desc.mip_level_count, + sample_count: desc.sample_count, + }; + + (global.device_create_texture(surface_data.device.device, &desc, None), texture_data) + }; + + if let Some(cause) = error { + handle_error_fatal(global, cause, "canvas_native_webgpu_context_resize_uiview: create readback texture"); + } else { + *read_back_texture_lock = Some(ReadBackTexture { + texture: read_back, + data: texture_data, + }); + } + + if let Some(cause) = global.surface_configure(surface_id, surface_data.device.device, &new_config) { handle_error_fatal(global, cause, "canvas_native_webgpu_context_resize_uiview"); } else { @@ -322,6 +698,7 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_create_nsview( has_surface_presented: Arc::default(), data: Mutex::default(), view_data: Mutex::new(ViewData { width, height }), + read_back_texture: Mutex::default(), }; Arc::into_raw(Arc::new(ctx)) @@ -334,7 +711,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_create_nsview( } - #[cfg(any(target_os = "macos"))] #[no_mangle] pub unsafe extern "C" fn canvas_native_webgpu_context_resize_nsview( @@ -378,8 +754,55 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_resize_nsview( new_config.width = width; new_config.height = height; - if let Some(cause) = - gfx_select!(surface_id => global.surface_configure(surface_id, surface_data.device_id, &new_config)) + let mut read_back_texture_lock = context.read_back_texture.lock(); + if let Some(texture) = read_back_texture_lock.take() { + global.texture_drop(texture.texture); + } + + let ((read_back, error), texture_data) = { + #[cfg(any(target_os = "ios", target_os = "macos"))] + let mut format = wgt::TextureFormat::Bgra8Unorm; + + #[cfg(any(target_os = "android"))] + let mut format = wgt::TextureFormat::Rgba8Unorm; + + + let desc = wgt::TextureDescriptor { + label: Some(Cow::Borrowed("ContextReadBack")), + size: wgt::Extent3d { + width, + height, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgt::TextureDimension::D2, + format, + usage: wgt::TextureUsages::COPY_SRC | wgt::TextureUsages::COPY_DST, + view_formats: vec![], + }; + let texture_data = TextureData { + usage: desc.usage, + dimension: desc.dimension, + size: desc.size, + format: desc.format, + mip_level_count: desc.mip_level_count, + sample_count: desc.sample_count, + }; + + (global.device_create_texture(surface_data.device.device, &desc, None), texture_data) + }; + + if let Some(cause) = error { + handle_error_fatal(global, cause, "canvas_native_webgpu_context_resize_nsview: create readback texture"); + } else { + *read_back_texture_lock = Some(ReadBackTexture { + texture: read_back, + data: texture_data, + }); + } + + if let Some(cause) = global.surface_configure(surface_id, surface_data.device.device, &new_config) { handle_error_fatal(global, cause, "canvas_native_webgpu_context_resize_nsview"); } else { @@ -526,7 +949,7 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_configure( let usage = wgt::TextureUsages::from_bits_truncate(config.usage); - let view_data = if !config.size.is_null() { + let (width, height) = if !config.size.is_null() { let size = &*config.size; (size.width, size.height) } else { @@ -538,13 +961,62 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_configure( desired_maximum_frame_latency: 2, usage, format, - width: view_data.0, - height: view_data.1, + width, + height, present_mode: config.presentMode.into(), alpha_mode: config.alphaMode.into(), view_formats, }; + + let mut read_back_texture_lock = context.read_back_texture.lock(); + if let Some(texture) = read_back_texture_lock.take() { + global.texture_drop(texture.texture); + } + + let ((read_back, error), texture_data) = { + #[cfg(any(target_os = "ios", target_os = "macos"))] + let mut format = wgt::TextureFormat::Bgra8Unorm; + + #[cfg(any(target_os = "android"))] + let mut format = wgt::TextureFormat::Rgba8Unorm; + + let desc = wgt::TextureDescriptor { + label: Some(Cow::Borrowed("ContextReadBack")), + size: wgt::Extent3d { + width, + height, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: wgt::TextureDimension::D2, + format, + usage: wgt::TextureUsages::COPY_SRC | wgt::TextureUsages::COPY_DST, + view_formats: vec![], + }; + + let texture_data = TextureData { + usage: desc.usage, + dimension: desc.dimension, + size: desc.size, + format: desc.format, + mip_level_count: desc.mip_level_count, + sample_count: desc.sample_count, + }; + + (global.device_create_texture(device_id, &desc, None), texture_data) + }; + + if let Some(cause) = error { + handle_error_fatal(global, cause, "canvas_native_webgpu_context_resize: create readback texture"); + } else { + *read_back_texture_lock = Some(ReadBackTexture { + texture: read_back, + data: texture_data, + }); + } + if let Some(cause) = global.surface_configure(*surface_id, device_id, &config) { handle_error_fatal(global, cause, "canvas_native_webgpu_context_configure"); @@ -552,15 +1024,19 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_configure( *lock = None; } else { let mut lock = context.data.lock(); + + Arc::increment_strong_count(device); + let device = Arc::from_raw(device); + let error_sink = device.error_sink.clone(); *lock = Some(SurfaceData { - device_id, - error_sink: device.error_sink.clone(), + device, + error_sink, texture_data: TextureData { usage, dimension: wgt::TextureDimension::D2, size: wgt::Extent3d { - width: view_data.0, - height: view_data.1, + width, + height, depth_or_array_layers: 1, }, format, @@ -677,6 +1153,59 @@ pub unsafe extern "C" fn canvas_native_webgpu_context_present_surface( let surface_id = context.surface.lock(); let texture = unsafe { &*texture }; + + { + let lock = context.read_back_texture.lock(); + let surface_lock = context.data.lock(); + if let (Some(dst_texture), Some(data)) = (lock.as_ref(), surface_lock.as_ref()) { + unsafe { + let texture_extent = wgt::Extent3d { + width: dst_texture.data.size.width, + height: dst_texture.data.size.height, + depth_or_array_layers: 1, + }; + + let texture_src_copy = wgpu_core::command::ImageCopyTexture { + texture: texture.texture, + mip_level: 0, + origin: wgt::Origin3d::ZERO, + aspect: wgt::TextureAspect::All, + }; + + let texture_dst_copy = wgpu_core::command::ImageCopyTexture { + texture: dst_texture.texture, + mip_level: 0, + origin: wgt::Origin3d::ZERO, + aspect: wgt::TextureAspect::All, + }; + + let device = data.device.device; + + let label = Cow::Borrowed("PresentSurface:Encoder"); + + let (encoder, error) = global.device_create_command_encoder(device, &wgt::CommandEncoderDescriptor { + label: wgpu_core::Label::from(label), + }, None); + + if error.is_none() { + match global.command_encoder_copy_texture_to_texture(encoder, &texture_src_copy, &texture_dst_copy, &texture_extent) { + Ok(_) => { + let desc = wgt::CommandBufferDescriptor { label: None }; + + let (id, error) = global.command_encoder_finish(encoder, &desc); + + if error.is_none() { + global.queue_submit(data.device.queue.queue.id, &[id]).ok(); + } + } + Err(_) => {} + } + } + } + }; + } + + if let Err(cause) = global.surface_present(*surface_id) { handle_error_fatal( global, diff --git a/crates/canvas-c/src/webgpu/gpu_compute_pass_encoder.rs b/crates/canvas-c/src/webgpu/gpu_compute_pass_encoder.rs index 15964d13f..77e92cd4a 100644 --- a/crates/canvas-c/src/webgpu/gpu_compute_pass_encoder.rs +++ b/crates/canvas-c/src/webgpu/gpu_compute_pass_encoder.rs @@ -264,9 +264,10 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_set_bind_grou dynamic_offsets_start: usize, dynamic_offsets_length: usize, ) { - if compute_pass.is_null() || bind_group.is_null() { + if compute_pass.is_null() { return; } + let compute_pass = &*compute_pass; let global = compute_pass.instance.global(); @@ -274,8 +275,14 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_set_bind_grou let mut lock = compute_pass.pass.lock(); if let Some(compute_pass) = lock.as_mut() { - let bind_group = &*bind_group; - let bind_group_id = bind_group.group; + let bind_group_id = if bind_group.is_null() { + None + }else { + let bind_group = &*bind_group; + let bind_group_id = bind_group.group; + Some(bind_group_id) + }; + if !dynamic_offsets.is_null() && dynamic_offsets_size > 0 { let dynamic_offsets = std::slice::from_raw_parts(dynamic_offsets, dynamic_offsets_size); diff --git a/crates/canvas-c/src/webgpu/gpu_device.rs b/crates/canvas-c/src/webgpu/gpu_device.rs index 96a553caa..db7559cf8 100644 --- a/crates/canvas-c/src/webgpu/gpu_device.rs +++ b/crates/canvas-c/src/webgpu/gpu_device.rs @@ -1,16 +1,14 @@ +use std::cmp::PartialEq; +use std::num::NonZeroU64; +use std::sync::Arc; use std::{ borrow::Cow, collections::HashMap, ffi::{CStr, CString}, os::raw::{c_char, c_void}, }; -use std::cmp::PartialEq; -use std::num::NonZeroU64; -use std::sync::Arc; - use wgpu_core::binding_model::BufferBinding; use wgpu_core::command::RenderBundleEncoder; -use wgpu_core::device::DeviceError; use wgpu_core::id::PipelineLayoutId; use wgpu_core::pipeline::{CreateRenderPipelineError, RenderPipelineDescriptor}; //use wgpu_core::gfx_select; @@ -19,7 +17,7 @@ use wgt::Features; use crate::buffers::StringBuffer; use crate::webgpu::enums::{CanvasAddressMode, CanvasBindGroupEntry, CanvasBindGroupEntryResource, CanvasBindGroupLayoutEntry, CanvasFilterMode, CanvasOptionalCompareFunction, CanvasOptionalGPUTextureFormat, CanvasQueryType, SurfaceGetCurrentTextureStatus}; -use crate::webgpu::error::{CanvasGPUError, CanvasGPUErrorType, handle_error, handle_error_fatal}; +use crate::webgpu::error::{handle_error, handle_error_fatal, CanvasGPUError, CanvasGPUErrorType}; use crate::webgpu::gpu_bind_group::CanvasGPUBindGroup; use crate::webgpu::gpu_bind_group_layout::CanvasGPUBindGroupLayout; use crate::webgpu::gpu_compute_pipeline::CanvasGPUComputePipeline; @@ -61,11 +59,13 @@ pub enum CanvasGPUErrorFilter { pub(crate) type ErrorSink = Arc>; +#[derive(Debug)] struct ErrorScope { error: Option, filter: CanvasGPUErrorFilter, } +#[derive(Debug)] pub struct DeviceCallback { callback: T, userdata: *mut c_void, @@ -123,6 +123,7 @@ pub const DEFAULT_DEVICE_LOST_HANDLER: DeviceLostCallback = DeviceLostCallback { userdata: std::ptr::null_mut(), }; +#[derive(Debug)] pub struct ErrorSinkRaw { scopes: Vec, uncaptured_handler: UncapturedErrorCallback, @@ -211,6 +212,8 @@ impl ErrorSinkRaw { } } + +#[derive(Debug)] pub struct CanvasGPUDevice { pub(crate) label: Option>, pub(crate) instance: Arc, @@ -239,7 +242,7 @@ impl CanvasGPUDevice { pub fn label(&self) -> Option> { self.label.clone() } - pub fn features(&self) -> Result { + pub fn features(&self) -> Features { let device_id = self.device; let global = self.instance.global(); global.device_features(device_id) @@ -440,7 +443,7 @@ pub extern "C" fn canvas_native_webgpu_device_get_features( return std::ptr::null_mut(); } let device = unsafe { &*device }; - let features = device.features().unwrap_or_default(); + let features = device.features(); let features = build_features(features); let buffer = StringBuffer::from(features); Box::into_raw(Box::new(buffer)) @@ -456,16 +459,10 @@ pub extern "C" fn canvas_native_webgpu_device_get_limits( let device = unsafe { &*device }; let device_id = device.device; let global = device.instance.global(); - match global.device_limits(device_id) { - Ok(limits) => { - let limits: CanvasGPUSupportedLimits = limits.into(); - Box::into_raw(Box::new(limits)) - } - Err(err) => { - handle_error_fatal(global, err, "canvas_native_webgpu_device_get_limits"); - std::ptr::null_mut() - } - } + let limits = global.device_limits(device_id); + + let limits: CanvasGPUSupportedLimits = limits.into(); + Box::into_raw(Box::new(limits)) } #[no_mangle] @@ -787,6 +784,7 @@ pub unsafe extern "C" fn canvas_native_webgpu_device_create_compute_pipeline( let error_sink = pipeline.error_sink.as_ref(); if let Some(cause) = error { + println!("Can not create compute pipeline: {:?}", cause); if let wgpu_core::pipeline::CreateComputePipelineError::Internal(ref error) = cause { #[cfg(target_os = "android")] log::warn!( @@ -1133,6 +1131,13 @@ pub extern "C" fn canvas_native_webgpu_device_create_shader_module( let (module, error) = global.device_create_shader_module(device_id, &desc, source, None); if let Some(cause) = error { + // TODO handle validation errors GPUCompilationMessage + // match cause { + // CreateShaderModuleError::Parsing(error) => {} + // CreateShaderModuleError::Validation(error) => {} + // _ => {} + // } + handle_error( global, device.error_sink.as_ref(), @@ -1498,7 +1503,7 @@ unsafe fn create_render_pipeline( descriptor: RenderPipelineDescriptor, ) -> (wgpu_core::id::RenderPipelineId, Option) { let global = global.global(); - global.device_create_render_pipeline(device_id, &descriptor,None, None) + global.device_create_render_pipeline(device_id, &descriptor, None, None) } #[no_mangle] @@ -1519,7 +1524,21 @@ pub unsafe extern "C" fn canvas_native_webgpu_device_create_render_pipeline( let global = device.instance.global(); if let Some(cause) = error { - if let wgpu_core::pipeline::CreateRenderPipelineError::Internal { stage, ref error } = cause + // println!("Can not create render pipeline: {:?}\n", cause); + // + // println!("Can not create render pipeline: {:?}\n", cause.to_string()); + // + // println!("Can not create render pipeline: {:?}\n", cause.source()); + // + // todo improve error + // if let CreateRenderPipelineError::PipelineConstants {stage, ref error} = cause { + // println!("CreateRenderPipelineError::PipelineConstants {:?} {}", stage, error); + // } + // + // if let CreateRenderPipelineError::Stage {stage, ref error} = cause { + // println!("CreateRenderPipelineError::Stage {:?} {}", stage, error); + // } + if let CreateRenderPipelineError::Internal { stage, ref error } = cause { #[cfg(target_os = "android")] log::error!("Shader translation error for stage {:?}: {}", stage, error); @@ -1801,7 +1820,7 @@ pub extern "C" fn canvas_native_webgpu_device_create_sampler( } }; - let (sampler_id, error) = global.device_create_sampler(device_id, &desc,None); + let (sampler_id, error) = global.device_create_sampler(device_id, &desc, None); let error_sink = device.error_sink.as_ref(); if let Some(cause) = error { diff --git a/crates/canvas-c/src/webgpu/gpu_queue.rs b/crates/canvas-c/src/webgpu/gpu_queue.rs index d4c67fd53..eebf6fd46 100644 --- a/crates/canvas-c/src/webgpu/gpu_queue.rs +++ b/crates/canvas-c/src/webgpu/gpu_queue.rs @@ -1,11 +1,3 @@ -use std::borrow::Cow; -use std::os::raw::{c_char, c_void}; -use std::sync::Arc; - -//use wgpu_core::gfx_select; -use crate::webgpu::error::{handle_error, handle_error_fatal}; -use crate::webgpu::prelude::label_to_ptr; -use crate::webgpu::structs::CanvasImageCopyImageAsset; use super::{ gpu::CanvasWebGPUInstance, gpu_buffer::CanvasGPUBuffer, @@ -13,7 +5,16 @@ use super::{ gpu_command_encoder::CanvasImageCopyTexture, structs::{CanvasExtent3d, CanvasImageCopyExternalImage, CanvasImageDataLayout}, }; +//use wgpu_core::gfx_select; +use crate::webgpu::error::{handle_error, handle_error_fatal}; +use crate::webgpu::prelude::label_to_ptr; +use crate::webgpu::structs::{CanvasImageCopyCanvasRenderingContext2D, CanvasImageCopyImageAsset, CanvasImageCopyWebGL}; +use canvas_webgl::utils::gl::bytes_per_pixel; +use std::borrow::Cow; +use std::os::raw::{c_char, c_void}; +use std::sync::Arc; +#[derive(Debug)] pub struct QueueId { pub(crate) instance: Arc, pub(crate) id: wgpu_core::id::QueueId, @@ -28,7 +29,7 @@ impl Drop for QueueId { } } -#[derive(Clone)] +#[derive(Clone, Debug)] pub struct CanvasGPUQueue { pub(super) label: Option>, pub(crate) queue: Arc, @@ -87,6 +88,94 @@ fn get_offset_image( result } +#[no_mangle] +pub unsafe extern "C" fn canvas_native_webgpu_queue_copy_webgl_to_texture( + queue: *const CanvasGPUQueue, + source: *const CanvasImageCopyWebGL, + destination: *const CanvasImageCopyTexture, + size: *const CanvasExtent3d, +) { + if source.is_null() { + return; + } + + let source = &*source; + if source.source.is_null() { + return; + } + let webgl = &*source.source; + + + webgl.0.make_current(); + let width = webgl.0.get_drawing_buffer_width(); + let height = webgl.0.get_drawing_buffer_height(); + + + let row_size = bytes_per_pixel(gl_bindings::RGBA as u32, gl_bindings::RGBA as u32) as i32; + + let mut bytes = vec![0u8; (width * height * row_size) as usize]; + unsafe { + gl_bindings::Flush(); + gl_bindings::ReadPixels( + 0, + 0, + width, + height, + gl_bindings::RGBA as u32, + gl_bindings::RGBA as u32, + bytes.as_mut_ptr() as *mut c_void, + ); + } + + + let ext_source = CanvasImageCopyExternalImage { + source: bytes.as_ptr(), + source_size: bytes.len(), + origin: source.origin, + flip_y: source.flip_y, + width: width as u32, + height: height as u32, + }; + + canvas_native_webgpu_queue_copy_external_image_to_texture(queue, &ext_source, destination, size); +} + +#[no_mangle] +pub unsafe extern "C" fn canvas_native_webgpu_queue_copy_context_to_texture( + queue: *const CanvasGPUQueue, + source: *const CanvasImageCopyCanvasRenderingContext2D, + destination: *const CanvasImageCopyTexture, + size: *const CanvasExtent3d, +) { + if source.is_null() { + return; + } + + let source = &*source; + if source.source.is_null() { + return; + } + let context = &mut *(source.source as *mut crate::c2d::CanvasRenderingContext2D); + + let (width, height) = context.context.dimensions(); + + let mut bytes = vec![0u8; (width * height * 4.) as usize]; + + context.context.get_pixels(bytes.as_mut_slice(), (0, 0), (width as i32, height as i32)); + + let ext_source = CanvasImageCopyExternalImage { + source: bytes.as_ptr(), + source_size: bytes.len(), + origin: source.origin, + flip_y: source.flip_y, + width: width as u32, + height: height as u32, + }; + + canvas_native_webgpu_queue_copy_external_image_to_texture(queue, &ext_source, destination, size); +} + + #[no_mangle] pub unsafe extern "C" fn canvas_native_webgpu_queue_copy_image_asset_to_texture( queue: *const CanvasGPUQueue, @@ -103,8 +192,8 @@ pub unsafe extern "C" fn canvas_native_webgpu_queue_copy_image_asset_to_texture( return; } let image_asset = &*source.source; - image_asset.with_bytes_dimension(|bytes, dimension|{ - let ext_source = CanvasImageCopyExternalImage{ + image_asset.with_bytes_dimension(|bytes, dimension| { + let ext_source = CanvasImageCopyExternalImage { source: bytes.as_ptr(), source_size: bytes.len(), origin: source.origin, @@ -137,7 +226,7 @@ pub unsafe extern "C" fn canvas_native_webgpu_queue_copy_external_image_to_textu if source.source.is_null() || source.source_size == 0 || source.width == 0 || source.height == 0 { - return; + return; } let destination = &*destination; @@ -220,14 +309,7 @@ pub unsafe extern "C" fn canvas_native_webgpu_queue_on_submitted_work_done( callback(std::ptr::null_mut(), callback_data); })); - if let Err(cause) = global.queue_on_submitted_work_done(queue_id, done) - { - handle_error_fatal( - global, - cause, - "canvas_native_webgpu_queue_on_submitted_work_done", - ); - } + global.queue_on_submitted_work_done(queue_id, done); } #[no_mangle] @@ -257,7 +339,7 @@ pub unsafe extern "C" fn canvas_native_webgpu_queue_submit( }) .collect::>(); - if let Err(cause) = global.queue_submit(queue_id, &command_buffer_ids) + if let Err((_, cause)) = global.queue_submit(queue_id, &command_buffer_ids) { handle_error_fatal(global, cause, "canvas_native_webgpu_queue_submit"); } diff --git a/crates/canvas-c/src/webgpu/gpu_render_bundle_encoder.rs b/crates/canvas-c/src/webgpu/gpu_render_bundle_encoder.rs index 22b6aa173..25ce97a78 100644 --- a/crates/canvas-c/src/webgpu/gpu_render_bundle_encoder.rs +++ b/crates/canvas-c/src/webgpu/gpu_render_bundle_encoder.rs @@ -272,8 +272,14 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_bundle_encoder_set_bind_gro return; } - let bind_group = &*bind_group; - let bind_group_id = bind_group.group; + let bind_group_id = if bind_group.is_null() { + None + }else { + let bind_group = &*bind_group; + let bind_group_id = bind_group.group; + Some(bind_group_id) + }; + if !dynamic_offsets.is_null() && dynamic_offsets_size > 0 { let dynamic_offsets = std::slice::from_raw_parts(dynamic_offsets, dynamic_offsets_size); diff --git a/crates/canvas-c/src/webgpu/gpu_render_pass_encoder.rs b/crates/canvas-c/src/webgpu/gpu_render_pass_encoder.rs index 75fa11956..40c9a11b0 100644 --- a/crates/canvas-c/src/webgpu/gpu_render_pass_encoder.rs +++ b/crates/canvas-c/src/webgpu/gpu_render_pass_encoder.rs @@ -159,6 +159,7 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_draw_indexed( } } + #[no_mangle] pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_draw_indexed_indirect( render_pass: *const CanvasGPURenderPassEncoder, @@ -194,6 +195,43 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_draw_indexed_i } } + +#[no_mangle] +pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_multi_draw_indexed_indirect( + render_pass: *const CanvasGPURenderPassEncoder, + indirect_buffer: *const CanvasGPUBuffer, + indirect_offset: u64, + count: u32, +) { + if render_pass.is_null() || indirect_buffer.is_null() { + return; + } + + let render_pass = &*render_pass; + let global = render_pass.instance.global(); + let label = render_pass.label.clone(); + let error_sink = render_pass.error_sink.as_ref(); + + let indirect_buffer = &*indirect_buffer; + + let buffer_id = indirect_buffer.buffer; + + let mut pass = render_pass.pass.lock(); + + if let Some(pass) = pass.as_mut() { + if let Err(cause) = global.render_pass_multi_draw_indexed_indirect(pass, buffer_id, indirect_offset, count) { + handle_error( + global, + error_sink, + cause, + "encoder", + label, + "canvas_native_webgpu_render_pass_encoder_draw_indexed_indirect", + ); + } + } +} + #[no_mangle] pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_draw_indirect( render_pass: *const CanvasGPURenderPassEncoder, @@ -228,6 +266,41 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_draw_indirect( } } +#[no_mangle] +pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_multi_draw_indirect( + render_pass: *const CanvasGPURenderPassEncoder, + indirect_buffer: *const CanvasGPUBuffer, + indirect_offset: u64, + count: u32, +) { + if render_pass.is_null() || indirect_buffer.is_null() { + return; + } + + let render_pass = &*render_pass; + let global = render_pass.instance.global(); + let label = render_pass.label.clone(); + let error_sink = render_pass.error_sink.as_ref(); + + let indirect_buffer = &*indirect_buffer; + + let buffer_id = indirect_buffer.buffer; + let mut pass = render_pass.pass.lock(); + + if let Some(pass) = pass.as_mut() { + if let Err(cause) = global.render_pass_multi_draw_indirect(pass, buffer_id, indirect_offset, count) { + handle_error( + global, + error_sink, + cause, + "encoder", + label, + "canvas_native_webgpu_render_pass_encoder_draw_indirect", + ); + } + } +} + #[no_mangle] pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_end( render_pass: *const CanvasGPURenderPassEncoder, @@ -437,8 +510,14 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_set_bind_group let mut pass = render_pass.pass.lock(); if let Some(pass) = pass.as_mut() { - let bind_group = &*bind_group; - let bind_group_id = bind_group.group; + let bind_group_id = if bind_group.is_null() { + None + } else { + let bind_group = &*bind_group; + let bind_group_id = bind_group.group; + Some(bind_group_id) + }; + if !dynamic_offsets.is_null() && dynamic_offsets_size > 0 { let dynamic_offsets = std::slice::from_raw_parts(dynamic_offsets, dynamic_offsets_size); diff --git a/crates/canvas-c/src/webgpu/structs.rs b/crates/canvas-c/src/webgpu/structs.rs index 54ea7f40f..a492ffbc1 100644 --- a/crates/canvas-c/src/webgpu/structs.rs +++ b/crates/canvas-c/src/webgpu/structs.rs @@ -1,11 +1,11 @@ use wgt::{CompositeAlphaMode, PresentMode, SurfaceCapabilities}; -use crate::buffers::StringBuffer; -use crate::ImageAsset; use super::{ enums::{CanvasGPUTextureFormat, CanvasTextureAspect, CanvasVertexFormat}, gpu_texture_view::CanvasGPUTextureView, }; +use crate::buffers::StringBuffer; +use crate::ImageAsset; #[repr(C)] #[derive(Clone, Copy, PartialEq, Eq, Hash)] @@ -222,6 +222,48 @@ pub struct CanvasImageCopyExternalImage { } + +#[repr(C)] +#[derive(Debug)] +pub struct CanvasImageCopyCanvasRenderingContext2D { + /// The texture to be copied from. The copy source data is captured at the moment + /// the copy is issued. + pub source: *const crate::c2d::CanvasRenderingContext2D, + /// The base texel used for copying from the external image. Together + /// with the `copy_size` argument to copy functions, defines the + /// sub-region of the image to copy. + /// + /// Relative to the top left of the image. + /// + /// Must be [`Origin2d::ZERO`] if [`DownlevelFlags::UNRESTRICTED_EXTERNAL_TEXTURE_COPIES`] is not supported. + pub origin: CanvasOrigin2d, + /// If the Y coordinate of the image should be flipped. Even if this is + /// true, `origin` is still relative to the top left. + pub flip_y: bool, +} + + +#[repr(C)] +#[derive(Debug)] +pub struct CanvasImageCopyWebGL { + /// The texture to be copied from. The copy source data is captured at the moment + /// the copy is issued. + pub source: *const crate::webgl::WebGLState, + /// The base texel used for copying from the external image. Together + /// with the `copy_size` argument to copy functions, defines the + /// sub-region of the image to copy. + /// + /// Relative to the top left of the image. + /// + /// Must be [`Origin2d::ZERO`] if [`DownlevelFlags::UNRESTRICTED_EXTERNAL_TEXTURE_COPIES`] is not supported. + pub origin: CanvasOrigin2d, + /// If the Y coordinate of the image should be flipped. Even if this is + /// true, `origin` is still relative to the top left. + pub flip_y: bool, +} + + + #[repr(C)] #[derive(Debug)] pub struct CanvasImageCopyImageAsset { @@ -869,7 +911,6 @@ pub struct CanvasSurfaceCapabilities { impl From for CanvasSurfaceCapabilities { fn from(value: SurfaceCapabilities) -> Self { - let formats = Box::into_raw(Box::new(StringBuffer::from( value .formats @@ -943,4 +984,4 @@ pub unsafe extern "C" fn canvas_native_webgpu_struct_surface_capabilities_releas return; } let _ = Box::from_raw(cap); -} +} \ No newline at end of file diff --git a/crates/canvas-core/Cargo.toml b/crates/canvas-core/Cargo.toml index 93fc396d2..b49e616a7 100644 --- a/crates/canvas-core/Cargo.toml +++ b/crates/canvas-core/Cargo.toml @@ -5,22 +5,30 @@ authors = ["Osei Fortune "] edition = "2021" [features] -2d = ["skia-safe", "skia-safe/gl"] +2d = ["skia-safe"] +gl = ["gl-bindings", "egl", "glutin", "skia-safe/gl"] +vulkan = ["ash", "ash-window"] +mtl = ["metal", "skia-safe/metal"] [dependencies] -gl-bindings = { path = "../gl-bindings" } -raw-window-handle = "0.6.2" -parking_lot = "0.12.3" +gl-bindings = { path = "../gl-bindings", optional = true } +raw-window-handle.workspace = true +parking_lot.workspace = true stb_image = { git = "https://github.com/triniwiz/rust-stb-image", rev = "869380b" } -log = "0.4.22" -skia-safe = { workspace = true, features = ["gl"], optional = true } +log.workspace = true +skia-safe = { workspace = true, optional = true } +ash = { version = "0.38.0", optional = true, features = ["libloading"] } +ash-window = { version = "0.13.0", optional = true } [target.'cfg(any(target_os = "ios", target_os="macos"))'.dependencies] icrate = { version = "0.1.2", features = ["objc2", "Foundation", "Foundation_NSData"] } -core-foundation = "0.9.3" -objc2-foundation = { version = "0.2.2", features = ["NSGeometry", "NSData"] } +core-foundation = "0.10.0" +objc2-foundation = { version = "0.2.2", features = ["NSGeometry", "NSData", "NSAutoreleasePool"] } +metal = { version = "0.29.0", optional = true } +foreign-types-shared = "0.3.1" [target.'cfg(target_os = "android")'.dependencies] -egl = "0.2.7" +egl = { version = "0.2.7", optional = true } android_log = "0.1.3" -glutin = { version = "0.32.0", features = ["egl"] } +glutin = { version = "0.32.0", features = ["egl"], optional = true } + diff --git a/crates/canvas-core/src/context_attributes.rs b/crates/canvas-core/src/context_attributes.rs index ea44dfa13..35a2e64ab 100644 --- a/crates/canvas-core/src/context_attributes.rs +++ b/crates/canvas-core/src/context_attributes.rs @@ -18,7 +18,17 @@ impl TryFrom for PowerPreference { } } -#[derive(Copy, Clone)] +impl Into for PowerPreference { + fn into(self) -> i32 { + match self { + PowerPreference::Default => 0, + PowerPreference::HighPerformance => 1, + PowerPreference::LowPower => 2, + } + } +} + +#[derive(Copy, Clone, Debug)] pub struct ContextAttributes { alpha: bool, antialias: bool, @@ -31,7 +41,6 @@ pub struct ContextAttributes { desynchronized: bool, xr_compatible: bool, is_canvas: bool, - samples: u8, } impl Default for ContextAttributes { @@ -48,7 +57,6 @@ impl Default for ContextAttributes { desynchronized: false, xr_compatible: false, is_canvas: false, - samples: 0, } } } @@ -79,18 +87,9 @@ impl ContextAttributes { desynchronized, xr_compatible, is_canvas, - samples: 0, } } - pub fn get_samples(&self) -> u8 { - self.samples - } - - pub fn set_samples(&mut self, value: u8) { - self.samples = value; - } - pub fn get_is_canvas(&self) -> bool { self.is_canvas } diff --git a/crates/canvas-core/src/gl/mod.rs b/crates/canvas-core/src/gl/mod.rs deleted file mode 100644 index c6cdebd88..000000000 --- a/crates/canvas-core/src/gl/mod.rs +++ /dev/null @@ -1,357 +0,0 @@ -#[cfg(target_os = "ios")] -mod ios; - -#[cfg(target_os = "ios")] -pub use ios::*; -use std::ffi::CString; - -#[cfg(target_os = "macos")] -mod mac; - -#[cfg(target_os = "macos")] -pub use mac::*; - -#[cfg(target_os = "android")] -mod android; - -#[cfg(target_os = "android")] -pub use android::*; - -#[cfg(any(target_os = "android", target_os = "ios"))] -const VERTEX_SHADER: &str = " -precision highp float; -attribute vec4 aPosition; -uniform mat4 uTextureMatrix; -varying vec2 TexCoord; -void main(){ -vec2 clipSpace = (1.0 - 2.0 * aPosition.xy); -TexCoord = (uTextureMatrix * aPosition).xy; -gl_Position = vec4(clipSpace, 0.0, 1.0); -} -"; - -#[cfg(target_os = "macos")] -const VERTEX_SHADER: &str = " -#version 330 core -precision highp float; -in vec4 aPosition; -out vec2 TexCoord; -uniform mat4 uTextureMatrix; -void main() { - vec2 clipSpace = (1.0 - 2.0 * aPosition.xy); - TexCoord = (uTextureMatrix * aPosition).xy; - gl_Position = vec4(clipSpace, 0.0, 1.0); -} -"; - -#[cfg(any(target_os = "android", target_os = "ios"))] -const FRAGMENT_SHADER: &str = " - #version 330 core - precision highp float; - varying vec2 TexCoord; -uniform samplerExternalOES uSampler; -void main(){ -gl_FragColor = texture2D(uSampler, TexCoord); -} -"; - -#[cfg(target_os = "macos")] -const FRAGMENT_SHADER: &str = " -#version 330 core - -precision highp float; -in vec2 TexCoord; -uniform sampler2D uSampler; -out vec4 FragColor; - -void main() { -FragColor = texture(uSampler, TexCoord); -} -"; - -const VERTEX_COORDS: [f32; 8] = [0., 0., 1., 0., 0., 1., 1., 1.]; - -#[derive(Copy, Clone, Debug, Default)] -pub struct TransferSurface { - program: u32, - rbo: u32, - fbo: u32, - width: u32, - height: u32, - ab: u32, - pos: i32, - matrix_pos: i32, - sampler_pos: i32, - #[allow(dead_code)] - matrix: [f32; 16], - initialized: bool, -} - -#[allow(dead_code)] -fn get_shader_parameter(shader: u32, pname: u32) -> i32 { - let mut params = 0i32; - unsafe { gl_bindings::GetShaderiv(shader, pname, &mut params) } - params -} - -pub fn get_shader_info_log(shader: u32) -> String { - let mut length = 0i32; - unsafe { gl_bindings::GetShaderiv(shader, gl_bindings::INFO_LOG_LENGTH, &mut length) } - - if length == 0 { - return String::new(); - } - - let mut log = vec![0; length as usize]; - let mut len = 0; - unsafe { - gl_bindings::GetShaderInfoLog( - shader, - length, - &mut len, - log.as_mut_ptr() as *mut std::ffi::c_char, - ) - } - - log.shrink_to(len.try_into().unwrap()); - let c_str = unsafe { std::ffi::CStr::from_ptr(log.as_ptr()) }; - c_str.to_string_lossy().to_string() -} - -impl TransferSurface { - pub fn init(&mut self, texture_id: u32) { - unsafe { - if self.initialized { - return; - } - - self.program = gl_bindings::CreateProgram(); - let vs = gl_bindings::CreateShader(gl_bindings::VERTEX_SHADER); - let vs_source = CString::new(VERTEX_SHADER).unwrap(); - gl_bindings::ShaderSource(vs, 1, &vs_source.as_ptr(), std::ptr::null()); - - let fs = gl_bindings::CreateShader(gl_bindings::FRAGMENT_SHADER); - let fs_source = CString::new(FRAGMENT_SHADER).unwrap(); - - gl_bindings::ShaderSource(fs, 1, &fs_source.as_ptr(), std::ptr::null()); - - gl_bindings::CompileShader(vs); - - // let status = get_shader_parameter(vs, 0x8B81); - // - // if status == 0 { - // println!("Shader compilation failed: {:?}", get_shader_info_log(vs)); - // } - - gl_bindings::CompileShader(fs); - - // let status = get_shader_parameter(fs, 0x8B81); - // - // if status == 0 { - // println!("Shader compilation failed: {:?}", get_shader_info_log(fs)); - // } - - gl_bindings::AttachShader(self.program, vs); - gl_bindings::AttachShader(self.program, fs); - - gl_bindings::LinkProgram(self.program); - - let mut buffers = [0_u32]; - - gl_bindings::GenBuffers(1, buffers.as_mut_ptr()); - self.ab = buffers[0]; - - let mut rbos = [0_u32]; - gl_bindings::GenRenderbuffers(1, rbos.as_mut_ptr()); - self.rbo = rbos[0]; - - let mut fbos = [0_u32]; - gl_bindings::GenFramebuffers(1, fbos.as_mut_ptr()); - self.fbo = fbos[0]; - - // let mut textures = [0_u32]; - // GLES20.glGenTextures(1, textures, 0) - // textureId = textures[0] - - gl_bindings::BindBuffer(gl_bindings::ARRAY_BUFFER, self.ab); - gl_bindings::BufferData( - gl_bindings::ARRAY_BUFFER, - (std::mem::size_of::() * VERTEX_COORDS.len()) as isize, - VERTEX_COORDS.as_ptr() as _, - gl_bindings::STATIC_DRAW, - ); - - let u_sampler = CString::new("uSampler").unwrap(); - let u_texture_matrix = CString::new("uTextureMatrix").unwrap(); - let a_position = CString::new("aPosition").unwrap(); - self.sampler_pos = gl_bindings::GetUniformLocation(self.program, u_sampler.as_ptr()); - self.matrix_pos = - gl_bindings::GetUniformLocation(self.program, u_texture_matrix.as_ptr()); - self.pos = gl_bindings::GetAttribLocation(self.program, a_position.as_ptr()); - - gl_bindings::VertexAttribPointer( - self.pos as u32, - 2, - gl_bindings::FLOAT, - 0, - (2 * std::mem::size_of::()) as _, - std::ptr::null(), - ); - gl_bindings::EnableVertexAttribArray(self.pos as u32); - - let mut previous_texture = [0_i32]; - - gl_bindings::GetIntegerv( - gl_bindings::TEXTURE_BINDING_2D, - previous_texture.as_mut_ptr(), - ); - - gl_bindings::BindTexture(gl_bindings::TEXTURE_2D, texture_id); - - gl_bindings::TexParameteri( - gl_bindings::TEXTURE_2D, - gl_bindings::TEXTURE_MIN_FILTER, - gl_bindings::LINEAR as _, - ); - - gl_bindings::TexParameteri( - gl_bindings::TEXTURE_2D, - gl_bindings::TEXTURE_MAG_FILTER, - gl_bindings::LINEAR as _, - ); - - gl_bindings::TexParameteri( - gl_bindings::TEXTURE_2D, - gl_bindings::TEXTURE_WRAP_S, - gl_bindings::CLAMP_TO_EDGE as _, - ); - - gl_bindings::TexParameteri( - gl_bindings::TEXTURE_2D, - gl_bindings::TEXTURE_WRAP_T, - gl_bindings::CLAMP_TO_EDGE as _, - ); - - gl_bindings::BindTexture(gl_bindings::TEXTURE_2D, previous_texture[0] as u32); - - self.initialized = true; - } - } - - pub fn draw_tex_image_2d( - &mut self, - target: u32, - level: i32, - width: u32, - height: u32, - internal_format: i32, - _format: i32, - _flip_y_webgl: bool, - texture_id: u32, - ) { - let mut previous_texture = -1_i32; - - unsafe { - gl_bindings::GetIntegerv(gl_bindings::TEXTURE_BINDING_2D, &mut previous_texture); - - gl_bindings::BindTexture(gl_bindings::TEXTURE_2D, texture_id); - - gl_bindings::TexParameteri( - gl_bindings::TEXTURE_2D, - gl_bindings::TEXTURE_MAG_FILTER, - gl_bindings::LINEAR as i32, - ); - gl_bindings::TexParameteri( - gl_bindings::TEXTURE_2D, - gl_bindings::TEXTURE_MIN_FILTER, - gl_bindings::LINEAR as i32, - ); - - gl_bindings::TexParameteri( - gl_bindings::TEXTURE_2D, - gl_bindings::TEXTURE_WRAP_S, - gl_bindings::CLAMP_TO_EDGE as i32, - ); - gl_bindings::TexParameteri( - gl_bindings::TEXTURE_2D, - gl_bindings::TEXTURE_WRAP_T, - gl_bindings::CLAMP_TO_EDGE as i32, - ); - - gl_bindings::BindTexture(gl_bindings::TEXTURE_2D, previous_texture as u32); - - gl_bindings::CopyTexImage2D( - target, - level, - internal_format as u32, - 0, - 0, - width as i32, - height as i32, - 0, - ); - - gl_bindings::BindTexture(gl_bindings::TEXTURE_2D, previous_texture as u32); - } - - self.width = width; - self.height = height; - } - - pub fn draw_tex_sub_image_2d( - &mut self, - target: u32, - level: i32, - xoffset: i32, - yoffset: i32, - width: u32, - height: u32, - _flip_y_webgl: bool, - texture_id: u32, - ) { - let mut previous_texture = -1_i32; - - unsafe { - gl_bindings::GetIntegerv(gl_bindings::TEXTURE_BINDING_2D, &mut previous_texture); - - gl_bindings::BindTexture(gl_bindings::TEXTURE_2D, texture_id); - - gl_bindings::TexParameteri( - gl_bindings::TEXTURE_2D, - gl_bindings::TEXTURE_MAG_FILTER, - gl_bindings::LINEAR as i32, - ); - gl_bindings::TexParameteri( - gl_bindings::TEXTURE_2D, - gl_bindings::TEXTURE_MIN_FILTER, - gl_bindings::LINEAR as i32, - ); - - gl_bindings::TexParameteri( - gl_bindings::TEXTURE_2D, - gl_bindings::TEXTURE_WRAP_S, - gl_bindings::CLAMP_TO_EDGE as i32, - ); - gl_bindings::TexParameteri( - gl_bindings::TEXTURE_2D, - gl_bindings::TEXTURE_WRAP_T, - gl_bindings::CLAMP_TO_EDGE as i32, - ); - - gl_bindings::BindTexture(gl_bindings::TEXTURE_2D, previous_texture as u32); - - gl_bindings::CopyTexSubImage2D( - target, - level, - xoffset, - yoffset, - 0, - 0, - width as i32, - height as i32, - ); - - gl_bindings::BindTexture(gl_bindings::TEXTURE_2D, previous_texture as u32); - } - } -} diff --git a/crates/canvas-core/src/gl/android.rs b/crates/canvas-core/src/gpu/gl/android.rs similarity index 87% rename from crates/canvas-core/src/gl/android.rs rename to crates/canvas-core/src/gpu/gl/android.rs index 38e5f6fdb..b38ac8878 100644 --- a/crates/canvas-core/src/gl/android.rs +++ b/crates/canvas-core/src/gpu/gl/android.rs @@ -4,25 +4,23 @@ use std::num::NonZeroU32; use std::sync::Arc; use std::sync::OnceLock; +use crate::context_attributes::ContextAttributes; use glutin::api::egl::{ context::{NotCurrentContext, PossiblyCurrentContext}, display::Display, surface::Surface, }; use glutin::config::{ Api, ColorBufferType, ConfigSurfaceTypes, ConfigTemplate, ConfigTemplateBuilder, }; -use glutin::context::{ContextApi, Version}; -use glutin::display::{GetGlDisplay, RawDisplay}; +use glutin::context::AsRawContext; +use glutin::context::{ContextApi, RawContext, Version}; use glutin::display::AsRawDisplay; -use glutin::prelude::*; +use glutin::display::{GetGlDisplay, RawDisplay}; use glutin::prelude::GlSurface; -use glutin::surface::{PbufferSurface, PixmapSurface, SwapInterval, WindowSurface}; -use parking_lot::{ - MappedRwLockReadGuard, MappedRwLockWriteGuard, RwLock, RwLockReadGuard, RwLockWriteGuard, -}; +use glutin::prelude::*; +use glutin::surface::{AsRawSurface, PbufferSurface, PixmapSurface, RawSurface, SwapInterval, WindowSurface}; +use parking_lot::RwLock; use raw_window_handle::{AndroidDisplayHandle, RawDisplayHandle, RawWindowHandle}; -use crate::context_attributes::ContextAttributes; - pub static IS_GL_SYMBOLS_LOADED: OnceLock = OnceLock::new(); pub(crate) enum SurfaceHelper { @@ -31,20 +29,51 @@ pub(crate) enum SurfaceHelper { Pixmap(Surface), } +#[derive(Debug, Clone)] +pub struct GLContextRaw { + surface: RawSurface, + context: RawContext, + display: RawDisplay, + dimensions: Arc>, +} + +impl GLContextRaw { + pub fn make_current(&self) -> bool { + match (self.display, self.surface, self.context) { + (RawDisplay::Egl(display), RawSurface::Egl(surface), RawContext::Egl(context)) => { + egl::make_current(display as _, surface as _, surface as _, context as _) + } + _ => false + } + } + + pub fn remove_if_current(&self) -> bool { + let current = egl::get_current_context(); + if let (Some(current), RawContext::Egl(context)) = (current, self.context) { + return std::ptr::eq(current, context); + } + false + } +} + + +#[derive(Debug, Copy, Clone, Default)] +struct Dimensions { + width: i32, + height: i32, +} + #[derive(Default)] -pub struct GLContextInner { +pub(crate) struct GLContextInner { surface: Option, context: Option, display: Option, - transfer_surface_info: crate::gl::TransferSurface, + dimensions: Arc>, } -unsafe impl Sync for GLContextInner {} - -unsafe impl Send for GLContextInner {} - #[derive(Default)] -pub struct GLContext(Arc>); +pub struct GLContext(GLContextInner); + impl Debug for GLContext { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { @@ -54,37 +83,6 @@ impl Debug for GLContext { } } -impl GLContext { - // pointer has to - pub fn as_raw_inner(&self) -> *const RwLock { - Arc::into_raw(Arc::clone(&self.0)) - } - - pub fn from_raw_inner(raw: *const RwLock) -> Self { - Self(unsafe { Arc::from_raw(raw) }) - } - - pub fn get_strong_count(&self) -> usize { - Arc::strong_count(&self.0) - } - - pub fn increment_strong_count(self) { - let ptr = Arc::into_raw(self.0); - unsafe { Arc::increment_strong_count(ptr) } - } - - pub fn decrement_strong_count(self) { - let ptr = Arc::into_raw(self.0); - unsafe { Arc::decrement_strong_count(ptr) } - let _ = unsafe { Arc::from_raw(ptr) }; - } -} - -impl Clone for GLContext { - fn clone(&self) -> Self { - Self(Arc::clone(&self.0)) - } -} impl Into for ContextAttributes { fn into(self) -> ConfigTemplate { @@ -207,8 +205,42 @@ impl From<&mut ContextAttributes> for ConfigTemplateBuilder { // } // } -#[cfg(target_os = "android")] + impl GLContext { + pub fn as_raw(&self) -> GLContextRaw { + let surface = self.0.surface.as_ref().map(|surface| { + match surface { + SurfaceHelper::Window(window) => { + window.raw_surface() + } + SurfaceHelper::Pbuffer(buffer) => { + buffer.raw_surface() + } + SurfaceHelper::Pixmap(map) => { + map.raw_surface() + } + } + }).unwrap_or_else(|| { + RawSurface::Egl(std::ptr::null()) + }); + + let context = self.0.context.as_ref().map(|context| { + context.raw_context() + }).unwrap_or_else(|| { + RawContext::Egl(std::ptr::null()) + }); + + let display = self.0.display.as_ref().map(|display| { + display.raw_display() + }).unwrap_or_else(|| { RawDisplay::Egl(std::ptr::null()) }); + + GLContextRaw { + surface, + context, + display, + dimensions: Arc::clone(&self.0.dimensions), + } + } pub fn set_surface( &mut self, context_attrs: &mut ContextAttributes, @@ -220,9 +252,8 @@ impl GLContext { let multi_sample = context_attrs.get_antialias(); let cfg = context_attrs.clone().into(); - let mut inner = self.0.write(); unsafe { - if let Some(display) = inner.display.as_ref() { + if let Some(display) = self.0.display.as_ref() { let mut config = display .find_configs(cfg) .map(|c| { @@ -322,8 +353,6 @@ impl GLContext { context_attrs.set_antialias(false); } - context_attrs.set_samples(config.num_samples()); - let surface_attr = glutin::surface::SurfaceAttributesBuilder::::new() .build( @@ -339,9 +368,11 @@ impl GLContext { let ret = surface.is_some(); - inner.surface = surface; + self.0.surface = surface; - drop(inner); + { + *self.0.dimensions.write() = Dimensions { width, height }; + } ret } @@ -498,8 +529,6 @@ impl GLContext { context_attrs.set_antialias(false); } - context_attrs.set_samples(config.num_samples()); - let surface_attr = glutin::surface::SurfaceAttributesBuilder::::new() .build( @@ -523,11 +552,9 @@ impl GLContext { ))); if let Some(inner) = shared_context { - let inner = inner.0.read(); - if let Some(context) = inner.context.as_ref() { + if let Some(context) = inner.0.context.as_ref() { context_attrs = context_attrs.with_sharing(context); } - drop(inner); } let context_attrs = context_attrs.build(Some(window)); @@ -541,10 +568,10 @@ impl GLContext { surface, context, display: Some(display), - transfer_surface_info: Default::default(), + dimensions: Arc::new(RwLock::new(Dimensions { width, height })), }; - let ret = GLContext(Arc::new(RwLock::new(gl_context))); + let ret = GLContext(gl_context); Some(ret) } @@ -563,11 +590,9 @@ impl GLContext { window: RawWindowHandle, ) { unsafe { - let mut inner = self.0.write(); - // remove current surface - let context = inner.context.take(); - let surface = inner.surface.take(); + let context = self.0.context.take(); + let surface = self.0.surface.take(); match context { Some(context) => { let context = context.make_not_current().ok(); @@ -575,7 +600,7 @@ impl GLContext { drop(surface); - if let Some(display) = inner.display.as_ref() { + if let Some(display) = self.0.display.as_ref() { let dsply = display.clone(); IS_GL_SYMBOLS_LOADED.get_or_init(move || { gl_bindings::load_with(|symbol| { @@ -686,7 +711,6 @@ impl GLContext { context_attrs.set_antialias(false); } - context_attrs.set_samples(config.num_samples()); let surface_attr = glutin::surface::SurfaceAttributesBuilder::::new().build( @@ -701,8 +725,8 @@ impl GLContext { .map(SurfaceHelper::Window) .ok(); - inner.surface = surface; - inner.context = match (context, inner.surface.as_ref()) { + self.0.surface = surface; + let ctx = match (context, self.0.surface.as_ref()) { (Some(context), Some(surface)) => { match surface { SurfaceHelper::Window(window) => { @@ -714,6 +738,10 @@ impl GLContext { } _ => None }; + self.0.context = ctx; + { + *self.0.dimensions.write() = Dimensions { width, height } + } } } } @@ -729,8 +757,7 @@ impl GLContext { height: i32, ) { unsafe { - let mut inner = self.0.write(); - if let Some(display) = inner.display.as_ref() { + if let Some(display) = self.0.display.as_ref() { let dsply = display.clone(); IS_GL_SYMBOLS_LOADED.get_or_init(move || { gl_bindings::load_with(|symbol| { @@ -784,7 +811,6 @@ impl GLContext { context_attrs.set_antialias(false); } - context_attrs.set_samples(config.num_samples()); let surface_attr = glutin::surface::SurfaceAttributesBuilder::::new().build( @@ -797,8 +823,12 @@ impl GLContext { .map(SurfaceHelper::Pbuffer) .ok(); - inner.surface = surface; - drop(inner); + { + *self.0.dimensions.write() = Dimensions { width, height } + } + + self.0.surface = surface; + } } } @@ -941,8 +971,6 @@ impl GLContext { context_attrs.set_antialias(false); } - context_attrs.set_samples(config.num_samples()); - let surface_attr = glutin::surface::SurfaceAttributesBuilder::::new() .build( @@ -970,12 +998,12 @@ impl GLContext { .map(|v| v.treat_as_possibly_current()) .ok(); - Some(GLContext(Arc::new(RwLock::new(GLContextInner { + Some(GLContext(GLContextInner { surface, context, display: Some(display), - transfer_surface_info: Default::default(), - })))) + dimensions: Arc::new(RwLock::new(Dimensions { width, height })), + })) } None => None, } @@ -1012,13 +1040,12 @@ impl GLContext { } pub fn set_vsync(&self, sync: bool) -> bool { - let inner = self.0.read(); let vsync = if sync { SwapInterval::Wait(NonZeroU32::new(1).unwrap()) } else { SwapInterval::DontWait }; - match (inner.context.as_ref(), inner.surface.as_ref()) { + match (self.0.context.as_ref(), self.0.surface.as_ref()) { (Some(context), Some(surface)) => match surface { SurfaceHelper::Window(window) => window.set_swap_interval(context, vsync).is_ok(), SurfaceHelper::Pbuffer(buffer) => buffer.set_swap_interval(context, vsync).is_ok(), @@ -1029,8 +1056,7 @@ impl GLContext { } pub fn make_current(&self) -> bool { - let inner = self.0.read(); - match (inner.context.as_ref(), inner.surface.as_ref()) { + match (self.0.context.as_ref(), self.0.surface.as_ref()) { (Some(context), Some(surface)) => { if context.is_current() { return true; @@ -1046,9 +1072,8 @@ impl GLContext { } } - pub fn remove_if_current(&self) { - let inner = self.0.read(); - let is_current = match (inner.context.as_ref(), inner.surface.as_ref()) { + pub fn remove_if_current(&self) -> bool { + let is_current = match (self.0.context.as_ref(), self.0.surface.as_ref()) { (Some(context), Some(surface)) => { if !context.is_current() { false @@ -1064,11 +1089,11 @@ impl GLContext { }; if !is_current { - return; + return false; } { - let display = inner + let display = self.0 .display .as_ref() .map(|display| match display.raw_display() { @@ -1077,7 +1102,7 @@ impl GLContext { }) .unwrap_or(egl::EGL_NO_DISPLAY as _); - egl::make_current( + return egl::make_current( display as _, egl::EGL_NO_SURFACE, egl::EGL_NO_SURFACE, @@ -1087,8 +1112,7 @@ impl GLContext { } pub fn swap_buffers(&self) -> bool { - let inner = self.0.read(); - match (inner.context.as_ref(), inner.surface.as_ref()) { + match (self.0.context.as_ref(), self.0.surface.as_ref()) { (Some(context), Some(surface)) => match surface { SurfaceHelper::Window(window) => window.swap_buffers(context).is_ok(), SurfaceHelper::Pbuffer(buffer) => buffer.swap_buffers(context).is_ok(), @@ -1099,60 +1123,14 @@ impl GLContext { } pub fn get_surface_width(&self) -> i32 { - let inner = self.0.read(); - inner - .surface - .as_ref() - .map(|v| match v { - SurfaceHelper::Window(window) => window.width().unwrap_or_default() as i32, - SurfaceHelper::Pbuffer(buffer) => buffer.width().unwrap_or_default() as i32, - SurfaceHelper::Pixmap(pixmap) => pixmap.width().unwrap_or_default() as i32, - }) - .unwrap_or_default() + self.0.dimensions.read().width } - pub fn get_surface_height(&self) -> i32 { - let inner = self.0.read(); - inner - .surface - .as_ref() - .map(|v| match v { - SurfaceHelper::Window(window) => window.height().unwrap_or_default() as i32, - SurfaceHelper::Pbuffer(buffer) => buffer.height().unwrap_or_default() as i32, - SurfaceHelper::Pixmap(pixmap) => pixmap.height().unwrap_or_default() as i32, - }) - .unwrap_or_default() + pub fn get_surface_height(&self) -> i32 {self.0.dimensions.read().height } pub fn get_surface_dimensions(&self) -> (i32, i32) { - let inner = self.0.read(); - inner - .surface - .as_ref() - .map(|v| match v { - crate::gl::SurfaceHelper::Window(window) => ( - window.width().unwrap_or_default() as i32, - window.height().unwrap_or_default() as i32, - ), - crate::gl::SurfaceHelper::Pbuffer(buffer) => ( - buffer.width().unwrap_or_default() as i32, - buffer.height().unwrap_or_default() as i32, - ), - crate::gl::SurfaceHelper::Pixmap(pixmap) => ( - pixmap.width().unwrap_or_default() as i32, - pixmap.height().unwrap_or_default() as i32, - ), - }) - .unwrap_or_default() - } - - pub fn get_transfer_surface_info(&self) -> MappedRwLockReadGuard { - RwLockReadGuard::map(self.0.read(), |v| &v.transfer_surface_info) - } - - pub fn get_transfer_surface_info_mut( - &self, - ) -> MappedRwLockWriteGuard { - RwLockWriteGuard::map(self.0.write(), |v| &mut v.transfer_surface_info) + let lock = self.0.dimensions.read(); + (lock.width as i32, lock.height as i32) } } diff --git a/crates/canvas-core/src/gl/ios.rs b/crates/canvas-core/src/gpu/gl/ios.rs similarity index 85% rename from crates/canvas-core/src/gl/ios.rs rename to crates/canvas-core/src/gpu/gl/ios.rs index a075b0e25..8711edd7c 100644 --- a/crates/canvas-core/src/gl/ios.rs +++ b/crates/canvas-core/src/gpu/gl/ios.rs @@ -4,52 +4,51 @@ use std::ptr::NonNull; use std::sync::Arc; use std::sync::OnceLock; -use core_foundation::base::TCFType; -use core_foundation::bundle::{CFBundleGetBundleWithIdentifier, CFBundleGetFunctionPointerForName}; -use core_foundation::string::CFString; use icrate::objc2::ffi::BOOL; use icrate::objc2::{class, msg_send, msg_send_id, rc::Id, ClassType, Encode, Encoding}; use objc2_foundation::{NSData, NSInteger, NSObject, NSUInteger}; -use parking_lot::{ - MappedRwLockReadGuard, MappedRwLockWriteGuard, RwLock, RwLockReadGuard, RwLockWriteGuard, -}; -use skia_safe::wrapper::PointerWrapper; +use parking_lot::RwLock; use crate::context_attributes::ContextAttributes; pub static IS_GL_SYMBOLS_LOADED: OnceLock = OnceLock::new(); -#[derive(Debug, Default)] -pub struct GLContextInner { +#[derive(Debug, Default, Clone)] +pub(crate) struct GLContextInner { context: Option, sharegroup: EAGLSharegroup, view: Option, - transfer_surface_info: crate::gl::TransferSurface, } -unsafe impl Sync for GLContextInner {} - -unsafe impl Send for GLContextInner {} - -#[derive(Debug, Default)] -pub struct GLContext(Arc>); +#[derive(Debug, Clone)] +pub struct GLContextRaw { + context: Option, + sharegroup: EAGLSharegroup, + view: Option, +} -impl GLContext { - // pointer has to - pub fn as_raw_inner(&self) -> *const RwLock { - Arc::into_raw(Arc::clone(&self.0)) +impl GLContextRaw { + pub fn make_current(&self) -> bool { + if let Some(context) = self.context.as_ref() { + return EAGLContext::set_current_context(Some(context)); + } + false } - pub fn from_raw_inner(raw: *const RwLock) -> Self { - Self(unsafe { Arc::from_raw(raw) }) + pub fn remove_if_current(&self) { + if let Some(context) = self.context.as_ref() { + context.remove_if_current(); + } } } -impl Clone for GLContext { - fn clone(&self) -> Self { - Self(Arc::clone(&self.0)) - } -} + +unsafe impl Sync for GLContextInner {} + +unsafe impl Send for GLContextInner {} + +#[derive(Debug, Default)] +pub struct GLContext(GLContextInner); pub enum EAGLRenderingAPI { GLES1 = 1, @@ -142,9 +141,6 @@ impl EAGLContext { Some(current) => { let is_equal: bool = unsafe { msg_send![¤t, isEqual: &*self.0] }; if is_equal { - // unsafe { - // gl_bindings::Flush(); - // } let nil: *mut NSObject = std::ptr::null_mut(); return msg_send![cls, setCurrentContext: nil]; } @@ -373,18 +369,17 @@ impl GLKView { let context: Option> = unsafe { msg_send_id![&self.0, context] }; context.map(EAGLContext) } +} - fn get_proc_address(&self, addr: &str) -> *const c_void { - let symbol_name = CFString::new(addr); - let framework_name = CFString::new("com.apple.opengles"); - unsafe { - let framework = CFBundleGetBundleWithIdentifier(framework_name.as_concrete_TypeRef()); - CFBundleGetFunctionPointerForName(framework, symbol_name.as_concrete_TypeRef()).cast() +impl GLContext { + pub fn as_raw(&self) -> GLContextRaw { + GLContextRaw { + context: self.0.context.clone(), + sharegroup: self.0.sharegroup.clone(), + view: self.0.view.clone(), } } -} -impl GLContext { pub fn set_surface(&mut self, view: NonNull) -> bool { let glview = unsafe { Id::::from_raw(view.as_ptr() as _) }; match glview { @@ -392,7 +387,7 @@ impl GLContext { Some(glview) => { let id = glview.clone(); let glview = GLKView(id); - self.0.write().view = Some(glview); + self.0.view = Some(glview); true } } @@ -401,7 +396,7 @@ impl GLContext { context_attrs: &mut ContextAttributes, view: NonNull, context: &GLContext, - ) -> Option { + ) -> Option { let glview = unsafe { Id::::retain(view.as_ptr() as _) }; match glview { None => None, @@ -415,11 +410,11 @@ impl GLContext { pub fn create_window_context( context_attrs: &mut ContextAttributes, view: NonNull, - ) -> Option { + ) -> Option { let glview = unsafe { Id::::retain(view.as_ptr() as _) }; match glview { None => None, - Some(glview) => { + Some(glview) =>{ let glview = GLKView(glview); GLContext::create_window_context_with_gl_view(context_attrs, glview, None) } @@ -430,10 +425,10 @@ impl GLContext { _context_attrs: &mut ContextAttributes, mut view: GLKView, shared_context: Option<&GLContext>, - ) -> Option { + ) -> Option { let gl_view = view.clone(); - IS_GL_SYMBOLS_LOADED.get_or_init(move || { - gl_bindings::load_with(|symbol| gl_view.get_proc_address(symbol).cast()); + IS_GL_SYMBOLS_LOADED.get_or_init(||{ + gl_bindings::load_with(|symbol| super::get_proc_address(symbol).cast()); true }); @@ -441,8 +436,7 @@ impl GLContext { let share_group = match shared_context { Some(context) => { - let inner = context.0.read(); - inner.sharegroup.clone() + context.0.sharegroup.clone() } _ => EAGLSharegroup::new(), }; @@ -450,7 +444,7 @@ impl GLContext { let context = EAGLContext::new_with_api_sharegroup(api, &share_group); if context.is_none() { - return None; + return None } view.set_context(context.as_ref()); @@ -464,10 +458,9 @@ impl GLContext { context, sharegroup: share_group, view: Some(view), - transfer_surface_info: Default::default(), }; - Some(GLContext(Arc::new(RwLock::new(inner)))) + Some(GLContext(inner)) } pub fn create_offscreen_context( @@ -499,8 +492,7 @@ impl GLContext { } pub fn snapshot(&self) -> Option> { - let inner = self.0.read(); - inner.view.as_ref().map(|view| view.snapshot()) + self.0.view.as_ref().map(|view| view.snapshot()) } pub fn set_vsync(&self, _sync: bool) -> bool { @@ -508,9 +500,7 @@ impl GLContext { } pub fn make_current(&self) -> bool { - let inner = self.0.read(); - - if let Some(context) = inner.context.as_ref() { + if let Some(context) = self.0.context.as_ref() { // unsafe { // let cls = class!(EAGLContext); // let current: Option> = msg_send_id![cls, currentContext]; @@ -549,23 +539,21 @@ impl GLContext { false } - pub fn remove_if_current(&self) { - let inner = self.0.read(); - if let Some(context) = inner.context.as_ref() { - context.remove_if_current(); + pub fn remove_if_current(&self) -> bool { + if let Some(context) = self.0.context.as_ref() { + return context.remove_if_current() } + false } pub fn bind_drawable(&self) { - let inner = self.0.read(); - if let Some(view) = inner.view.as_ref() { + if let Some(view) = self.0.view.as_ref() { view.bind_drawable(); } } pub fn swap_buffers(&self) -> bool { - let inner = self.0.read(); - if let Some(view) = inner.view.as_ref() { + if let Some(view) = self.0.view.as_ref() { view.display(); // // Testing // unsafe { @@ -578,7 +566,6 @@ impl GLContext { pub fn get_surface_width(&self) -> i32 { self.0 - .read() .view .as_ref() .map(|v| v.drawable_width().try_into().unwrap_or_default()) @@ -587,7 +574,6 @@ impl GLContext { pub fn get_surface_height(&self) -> i32 { self.0 - .read() .view .as_ref() .map(|v| v.drawable_height().try_into().unwrap_or_default()) @@ -596,7 +582,7 @@ impl GLContext { pub fn get_surface_dimensions(&self) -> (i32, i32) { self.0 - .read() + .view .as_ref() .map(|v| { @@ -607,14 +593,4 @@ impl GLContext { }) .unwrap() } - - pub fn get_transfer_surface_info(&self) -> MappedRwLockReadGuard { - RwLockReadGuard::map(self.0.read(), |v| &v.transfer_surface_info) - } - - pub fn get_transfer_surface_info_mut( - &self, - ) -> MappedRwLockWriteGuard { - RwLockWriteGuard::map(self.0.write(), |v| &mut v.transfer_surface_info) - } } diff --git a/crates/canvas-core/src/gl/mac.rs b/crates/canvas-core/src/gpu/gl/mac.rs similarity index 75% rename from crates/canvas-core/src/gl/mac.rs rename to crates/canvas-core/src/gpu/gl/mac.rs index 9cf955270..270d20de3 100644 --- a/crates/canvas-core/src/gl/mac.rs +++ b/crates/canvas-core/src/gpu/gl/mac.rs @@ -1,34 +1,48 @@ use std::ffi::c_void; use std::ptr::NonNull; -use std::sync::Arc; use std::sync::OnceLock; -use core_foundation::base::TCFType; -use core_foundation::bundle::{CFBundleGetBundleWithIdentifier, CFBundleGetFunctionPointerForName}; -use core_foundation::string::CFString; use icrate::objc2::rc::Id; use icrate::objc2::{class, msg_send, msg_send_id}; use objc2_foundation::NSObject; -use parking_lot::{ - MappedRwLockReadGuard, MappedRwLockWriteGuard, RwLock, RwLockReadGuard, RwLockWriteGuard, -}; use raw_window_handle::RawWindowHandle; use crate::context_attributes::ContextAttributes; pub static IS_GL_SYMBOLS_LOADED: OnceLock = OnceLock::new(); -#[derive(Debug, Default)] -pub struct GLContextInner { +#[derive(Debug, Default, Clone)] +pub(crate) struct GLContextInner { context: Option, - sharegroup: NSOpenGLContext, + sharegroup: Option, view: Option, - transfer_surface_info: crate::gl::TransferSurface, } -unsafe impl Sync for GLContextInner {} -unsafe impl Send for GLContextInner {} +#[derive(Debug, Clone)] +pub struct GLContextRaw { + context: Option, + sharegroup: Option, + view: Option, +} + +impl GLContextRaw { + pub fn make_current(&self) -> bool { + self.view + .as_ref() + .map(|view| view.open_gl_context().make_current_context()) + .unwrap_or_default() + } + + pub fn remove_if_current(&self) -> bool { + self.view + .as_ref() + .map(|view| view.open_gl_context().remove_if_current()) + .unwrap_or_default() + } +} + + #[repr(u64)] #[derive(Clone, Copy, Debug, PartialEq)] pub enum NSOpenGLPixelFormatAttribute { @@ -86,27 +100,36 @@ pub enum NSOpenGLPFAOpenGLProfiles { pub struct NSOpenGLContext(Id); impl NSOpenGLContext { - pub fn new(format: NSOpenGLPixelFormat, share_context: Option) -> Self { + pub fn new(format: NSOpenGLPixelFormat, share_context: Option) -> Option { let cls = class!(NSOpenGLPixelFormat); let instance = unsafe { msg_send_id![cls, alloc] }; - match share_context { + let context: Option> = match share_context { None => { let nil: *mut NSObject = std::ptr::null_mut(); - NSOpenGLContext(unsafe { + unsafe { msg_send_id![ instance, initWithFormat: &*format.0, shareContext: nil ] - }) + } } - Some(share_context) => NSOpenGLContext(unsafe { - msg_send_id![ + Some(share_context) => { + unsafe { + msg_send_id![ instance, initWithFormat: &*format.0, shareContext: &*share_context.0 ] - }), + } + } + }; + + match context { + None => None, + Some(context) => { + Some(NSOpenGLContext(context)) + } } } @@ -150,26 +173,6 @@ impl NSOpenGLContext { } } -impl Default for NSOpenGLContext { - fn default() -> Self { - let format = NSOpenGLPixelFormat::init_with_attributes(&[ - NSOpenGLPixelFormatAttribute::NSOpenGLPFAAccelerated as u32, - NSOpenGLPixelFormatAttribute::NSOpenGLPFADoubleBuffer as u32, - NSOpenGLPixelFormatAttribute::NSOpenGLPFADepthSize as u32, - 24, - NSOpenGLPixelFormatAttribute::NSOpenGLPFAColorSize as u32, - 24, - NSOpenGLPixelFormatAttribute::NSOpenGLPFAAlphaSize as u32, - 8, - NSOpenGLPixelFormatAttribute::NSOpenGLPFAStencilSize as u32, - 8, - NSOpenGLPixelFormatAttribute::NSOpenGLPFAOpenGLProfile as u32, - NSOpenGLPFAOpenGLProfiles::NSOpenGLProfileVersion3_2Core as u32, - 0, - ]); - NSOpenGLContext::new(format, None) - } -} #[derive(Clone, Debug)] pub struct NSOpenGLPixelFormat(Id); @@ -232,36 +235,10 @@ impl NSOpenGLView { } } } - - fn get_proc_address(&self, addr: &str) -> *const c_void { - let symbol_name = CFString::new(addr); - let framework_name = CFString::new("com.apple.opengles"); - unsafe { - let framework = CFBundleGetBundleWithIdentifier(framework_name.as_concrete_TypeRef()); - CFBundleGetFunctionPointerForName(framework, symbol_name.as_concrete_TypeRef()).cast() - } - } } #[derive(Debug, Default)] -pub struct GLContext(Arc>); - -impl GLContext { - // pointer has to - pub fn as_raw_inner(&self) -> *const RwLock { - Arc::into_raw(Arc::clone(&self.0)) - } - - pub fn from_raw_inner(raw: *const RwLock) -> Self { - unsafe { Self(Arc::from_raw(raw)) } - } -} - -impl Clone for GLContext { - fn clone(&self) -> Self { - Self(Arc::clone(&self.0)) - } -} +pub struct GLContext(GLContextInner); fn parse_context_attributes(context_attrs: &ContextAttributes) -> NSOpenGLPixelFormat { let mut attributes = vec![ @@ -301,12 +278,20 @@ fn parse_context_attributes(context_attrs: &ContextAttributes) -> NSOpenGLPixelF #[cfg(target_os = "macos")] impl GLContext { + pub fn as_raw(&self) -> GLContextRaw { + GLContextRaw { + context: self.0.context.clone(), + sharegroup: self.0.sharegroup.clone(), + view: self.0.view.clone(), + } + } + pub fn set_surface(&mut self, view: NonNull) -> bool { let view: Option> = unsafe { Id::retain(view.as_ptr() as _) }; match view { None => false, Some(id) => { - self.0.write().view = Some(NSOpenGLView(id)); + self.0.view = Some(NSOpenGLView(id)); true } } @@ -323,7 +308,7 @@ impl GLContext { context_attrs: &mut ContextAttributes, view: NonNull, context: &GLContext, - ) -> Option { + ) -> Option { let view = unsafe { Id::::retain(view.as_ptr() as _) }; match view { None => None, @@ -337,7 +322,7 @@ impl GLContext { pub fn create_window_context( context_attrs: &mut ContextAttributes, view: NonNull, - ) -> Option { + ) -> Option { let view = unsafe { Id::::retain(view.as_ptr() as _) }; match view { None => None, @@ -352,17 +337,15 @@ impl GLContext { context_attrs: &mut ContextAttributes, view: NSOpenGLView, shared_context: Option<&GLContext>, - ) -> Option { - let view_copy = view.clone(); - IS_GL_SYMBOLS_LOADED.get_or_init(move || { - gl_bindings::load_with(|symbol| view_copy.get_proc_address(symbol).cast()); + ) -> Option { + IS_GL_SYMBOLS_LOADED.get_or_init(|| { + gl_bindings::load_with(|symbol| super::get_proc_address(symbol).cast()); true }); let share_group = match shared_context { Some(context) => { - let inner = context.0.read(); - inner.sharegroup.clone() + context.0.sharegroup.clone() } _ => { let format = NSOpenGLPixelFormat::init_with_attributes(&[ @@ -386,29 +369,29 @@ impl GLContext { let format = parse_context_attributes(context_attrs); - let context = NSOpenGLContext::new(format, Some(share_group.clone())); + let context = NSOpenGLContext::new(format, share_group.clone()); - // if context.is_none() { - // return None; - // } - view.set_open_gl_context(Some(context.clone())); + if context.is_none() { + return None; + } + + view.set_open_gl_context(context.clone()); let inner = GLContextInner { - context: Some(context), + context, sharegroup: share_group, view: Some(view), - transfer_surface_info: Default::default(), }; - Some(GLContext(Arc::new(RwLock::new(inner)))) + Some(GLContext(inner)) } pub fn create_offscreen_context( context_attrs: &mut ContextAttributes, width: i32, height: i32, - ) -> Option { + ) -> Option { let format = parse_context_attributes(context_attrs); let view = NSOpenGLView::new_with_frame_pixel_format(0., 0., width as f32, height as f32, format); @@ -429,8 +412,7 @@ impl GLContext { } pub fn make_current(&self) -> bool { - let inner = self.0.read(); - inner + self.0 .view .as_ref() .map(|view| view.open_gl_context().make_current_context()) @@ -438,8 +420,7 @@ impl GLContext { } pub fn remove_if_current(&self) -> bool { - let inner = self.0.read(); - inner + self.0 .view .as_ref() .map(|view| view.open_gl_context().remove_if_current()) @@ -447,8 +428,7 @@ impl GLContext { } pub fn swap_buffers(&self) -> bool { - let inner = self.0.read(); - inner + self.0 .view .as_ref() .map(|view| { @@ -459,8 +439,7 @@ impl GLContext { } pub fn get_surface_width(&self) -> i32 { - let inner = self.0.read(); - inner + self.0 .view .as_ref() .map(|view| view.frame().size.width as i32) @@ -468,8 +447,7 @@ impl GLContext { } pub fn get_surface_height(&self) -> i32 { - let inner = self.0.read(); - inner + self.0 .view .as_ref() .map(|view| view.frame().size.height as i32) @@ -477,8 +455,7 @@ impl GLContext { } pub fn get_surface_dimensions(&self) -> (i32, i32) { - let inner = self.0.read(); - inner + self.0 .view .as_ref() .map(|view| { @@ -487,14 +464,4 @@ impl GLContext { }) .unwrap_or_default() } - - pub fn get_transfer_surface_info(&self) -> MappedRwLockReadGuard { - RwLockReadGuard::map(self.0.read(), |v| &v.transfer_surface_info) - } - - pub fn get_transfer_surface_info_mut( - &self, - ) -> MappedRwLockWriteGuard { - RwLockWriteGuard::map(self.0.write(), |v| &mut v.transfer_surface_info) - } } diff --git a/crates/canvas-core/src/gpu/gl/mod.rs b/crates/canvas-core/src/gpu/gl/mod.rs new file mode 100644 index 000000000..bf2d67700 --- /dev/null +++ b/crates/canvas-core/src/gpu/gl/mod.rs @@ -0,0 +1,55 @@ +#[cfg(target_os = "ios")] +mod ios; +#[cfg(target_os = "ios")] +pub use ios::*; + +#[cfg(target_os = "macos")] +mod mac; + +#[cfg(target_os = "macos")] +pub use mac::*; + +#[cfg(target_os = "android")] +mod android; + +#[cfg(target_os = "android")] +pub use android::*; + + +pub fn get_shader_info_log(shader: u32) -> String { + let mut length = 0i32; + unsafe { gl_bindings::GetShaderiv(shader, gl_bindings::INFO_LOG_LENGTH, &mut length) } + + if length == 0 { + return String::new(); + } + + let mut log = vec![0; length as usize]; + let mut len = 0; + unsafe { + gl_bindings::GetShaderInfoLog( + shader, + length, + &mut len, + log.as_mut_ptr() as *mut std::ffi::c_char, + ) + } + + log.shrink_to(len.try_into().unwrap()); + let c_str = unsafe { std::ffi::CStr::from_ptr(log.as_ptr()) }; + c_str.to_string_lossy().to_string() +} + + +#[cfg(any(target_os = "macos", target_os = "ios"))] +pub(crate) fn get_proc_address(addr: &str) -> *const std::os::raw::c_void { + use core_foundation::bundle::{CFBundleGetBundleWithIdentifier, CFBundleGetFunctionPointerForName}; + use core_foundation::string::CFString; + use core_foundation::base::TCFType; + let symbol_name = CFString::new(addr); + let framework_name = CFString::new("com.apple.opengles"); + unsafe { + let framework = CFBundleGetBundleWithIdentifier(framework_name.as_concrete_TypeRef()); + CFBundleGetFunctionPointerForName(framework, symbol_name.as_concrete_TypeRef()).cast() + } +} \ No newline at end of file diff --git a/crates/canvas-core/src/gpu/metal.rs b/crates/canvas-core/src/gpu/metal.rs new file mode 100644 index 000000000..66c2f86ef --- /dev/null +++ b/crates/canvas-core/src/gpu/metal.rs @@ -0,0 +1,179 @@ +use icrate::objc2::__framework_prelude::Retained; +use icrate::objc2::msg_send; +use metal::foreign_types::ForeignType; +use metal::{MTLResourceOptions, MetalDrawable, MetalDrawableRef}; +use objc2_foundation::{NSAutoreleasePool, NSObject}; +use std::os::raw::c_void; + +#[derive(Debug)] +pub struct MetalContext { + queue: metal::CommandQueue, + device: metal::Device, + pool: Retained, + layer: metal::MetalLayer, + view: Retained, + current_drawable: Option, +} + +impl MetalContext { + pub fn new_release_pool() -> Retained { + unsafe { NSAutoreleasePool::new() } + } + pub fn new(view: *mut c_void) -> Self { + let pool = unsafe { NSAutoreleasePool::new() }; + let device = metal::Device::system_default().expect("no Metal device"); + let queue = device.new_command_queue(); + let view = unsafe { Retained::from_raw(view as _).unwrap() }; + let layer: *mut NSObject = unsafe { msg_send![&view, layer] }; + let layer = unsafe { metal::MetalLayer::from_ptr(layer as _) }; + let current_drawable = layer.next_drawable().map(|drawable| { + drawable.to_owned() + }); + + Self { + queue, + device, + pool, + layer, + view, + current_drawable, + } + } + + pub unsafe fn new_device_queue(view: *mut c_void, device: *mut c_void, queue: *mut c_void) -> Self { + let pool = NSAutoreleasePool::new(); + let device = metal::Device::from_ptr(device as _); + let view = icrate::objc2::rc::Retained::from_raw(view as _).unwrap(); + let queue = metal::CommandQueue::from_ptr(queue as _); + let layer: *mut NSObject = unsafe { msg_send![&view, layer] }; + let layer = unsafe { metal::MetalLayer::from_ptr(layer as _) }; + let current_drawable = layer.next_drawable().map(|drawable| { + drawable.to_owned() + }); + + Self { + queue, + device, + pool, + layer, + view, + current_drawable, + } + } + + pub fn queue(&self) -> *mut c_void { + self.queue.as_ptr() as _ + } + + pub fn device(&self) -> *mut c_void { + self.device.as_ptr() as _ + } + + pub fn sample_count(&self) -> usize { + let count: usize = unsafe { msg_send![&self.view, sampleCount] }; + count + } + + pub fn present(&self) { + let _: () = unsafe { msg_send![&self.view, present] }; + } + + pub fn draw(&self) { + let _: () = unsafe { msg_send![&self.view, draw] }; + } + + pub unsafe fn view(&self) -> *mut c_void { + Retained::into_raw(self.view.clone()) as _ + } + + pub fn layer(&self) -> *mut c_void { + self.layer.as_ptr() as _ + } + + pub fn present_drawable(&mut self) { + let _ = unsafe { NSAutoreleasePool::new() }; + if let Some(drawable) = self.current_drawable.take() { + let cmd = self.queue.new_command_buffer(); + cmd.present_drawable(&*drawable); + cmd.commit(); + } + } + + pub fn current_drawable(&mut self) -> Option<&MetalDrawable> { + if self.current_drawable.is_none() { + self.current_drawable = unsafe { + self.layer.next_drawable().map(|drawable| { + drawable.to_owned() + }) + } + } + self.current_drawable.as_ref() + } + + pub fn next_drawable(&mut self) -> Option<&MetalDrawable> { + let _ = unsafe { NSAutoreleasePool::new() }; + self.current_drawable = unsafe { + self.layer.next_drawable().map(|drawable| { + drawable.to_owned() + }) + }; + self.current_drawable.as_ref() + } + + pub fn drawable(&self) -> Option<&MetalDrawableRef> { + self.layer.next_drawable() + } + + pub fn drawable_size(&self) -> (f64, f64) { + let size = self.layer.drawable_size(); + (size.width, size.height) + } + + pub fn set_drawable_size(&self, width: f64, height: f64) { + let mut size = self.layer.drawable_size(); + size.width = width; + size.height = height; + self.layer.set_drawable_size(size) + } + + fn blit(device: metal::Device, queue: metal::CommandQueue, drawable: &MetalDrawable) -> Option> { + unsafe { + if drawable.presented_time() == 0.0 { + let texture = drawable.texture(); + let length = 4 * texture.width() * texture.height(); + let buffer = device.new_buffer(length, MTLResourceOptions::StorageModeShared); + let command_buffer = queue.new_command_buffer(); + let blit_encoder = command_buffer.new_blit_command_encoder(); + let region = metal::MTLRegion::new_2d(0, 0, texture.width(), texture.height()); + blit_encoder.copy_from_texture_to_buffer( + texture, 0, 0, region.origin, region.size, &buffer, + 0, 4 * texture.width(), 0, metal::MTLBlitOption::empty(), + ); + blit_encoder.end_encoding(); + command_buffer.commit(); + command_buffer.wait_until_completed(); + + let ret = std::slice::from_raw_parts(buffer.contents().cast(), length as usize); + + return Some(ret.to_vec()); + } + } + None + } + + pub fn snapshot(&mut self) -> Option> { + let device = self.device.clone(); + let queue = self.queue.clone(); + match self.current_drawable.as_ref() { + None => match self.next_drawable() { + Some(drawable) => { + Self::blit(device, queue, drawable) + } + _ => None + } + Some(drawable) => { + Self::blit(device, queue, drawable) + } + } + } +} diff --git a/crates/canvas-core/src/gpu/mod.rs b/crates/canvas-core/src/gpu/mod.rs new file mode 100644 index 000000000..d6cbf5310 --- /dev/null +++ b/crates/canvas-core/src/gpu/mod.rs @@ -0,0 +1,7 @@ +#[cfg(any(target_os = "macos", target_os = "ios"))] +pub mod metal; +#[cfg(feature = "vulkan")] +pub mod vulkan; + +#[cfg(feature = "gl")] +pub mod gl; \ No newline at end of file diff --git a/crates/canvas-core/src/gpu/vulkan.rs b/crates/canvas-core/src/gpu/vulkan.rs new file mode 100644 index 000000000..6d6ba0710 --- /dev/null +++ b/crates/canvas-core/src/gpu/vulkan.rs @@ -0,0 +1,495 @@ +use ash::vk::{Extent2D, Handle, ImageView, SwapchainCreateInfoKHR, SwapchainKHR}; +use ash::{vk, Entry, Instance}; +use skia_safe::wrapper::NativeTransmutableWrapper; +use std::ffi::CString; +use std::fmt::{Debug, Formatter}; +use std::os::raw::{c_char, c_void}; +use std::ptr::NonNull; + +pub struct AshGraphics { + pub current_index: Option, + pub swap_chain_images: Option>, + pub swap_chain_image_view: Option>, + pub swap_chain_loader: ash::khr::swapchain::Device, + pub surface: Option, + pub swap_chain: Option, + pub physical_device: vk::PhysicalDevice, + pub device: ash::Device, + pub queue_and_index: (vk::Queue, usize), + pub entry: Entry, + pub instance: Instance, + pub image_available_semaphore: vk::Semaphore, + pub present_semaphore: vk::Semaphore, + pub surface_size: vk::Extent2D, + pub alpha: bool, + pub surface_loader: ash::khr::surface::Instance, +} + +impl Drop for AshGraphics { + fn drop(&mut self) { + unsafe { + self.device.device_wait_idle().unwrap(); + + if let Some(surface) = self.surface { + self.surface_loader.destroy_surface(surface, None); + } + + self.device.destroy_device(None); + self.instance.destroy_instance(None); + } + } +} + +impl AshGraphics { + pub fn vulkan_version() -> Option<(usize, usize, usize)> { + let entry = unsafe { Entry::load() }.unwrap(); + + let detected_version = unsafe { entry.try_enumerate_instance_version().unwrap_or(None) }; + + detected_version.map(|ver| { + ( + vk::api_version_major(ver).try_into().unwrap(), + vk::api_version_minor(ver).try_into().unwrap(), + vk::api_version_patch(ver).try_into().unwrap(), + ) + }) + } + + pub unsafe fn new(app_name: &str) -> Result { + let entry = Entry::load().or(Err("Failed to load Vulkan entry"))?; + + let minimum_version = vk::make_api_version(0, 1, 1, 0); + + let instance: Instance = { + let api_version = Self::vulkan_version() + .map(|(major, minor, patch)| { + vk::make_api_version( + 0, + major.try_into().unwrap(), + minor.try_into().unwrap(), + patch.try_into().unwrap(), + ) + }) + .unwrap_or(minimum_version); + + let app_name = CString::new(app_name).unwrap(); + + + let extension_names_raw = [ + ash::khr::surface::NAME.as_ptr(), + ash::khr::android_surface::NAME.as_ptr(), + ]; + + let app_info = vk::ApplicationInfo::default() + .application_name(&app_name) + .application_version(0) + .engine_name(&app_name) + .engine_version(0) + .api_version(api_version); + + // let layers_names_raw: Vec<*const c_char> = layer_names + // .iter() + // .map(|raw_name| raw_name.as_ptr()) + // .collect(); + + let create_flags = vk::InstanceCreateFlags::ENUMERATE_PORTABILITY_KHR; + + let create_info = vk::InstanceCreateInfo::default() + .application_info(&app_info) + .enabled_layer_names(&[]) + .enabled_extension_names(&extension_names_raw) + .flags(create_flags); + + entry.create_instance(&create_info, None) + } + .or(Err("Failed to create a Vulkan instance."))?; + + + let (physical_device, queue_family_index) = { + let physical_devices = instance + .enumerate_physical_devices() + .expect("Failed to enumerate Vulkan physical devices."); + + physical_devices + .iter() + .map(|physical_device| { + instance + .get_physical_device_queue_family_properties(*physical_device) + .iter() + .enumerate() + .find_map(|(index, info)| { + let supports_graphic = + info.queue_flags.contains(vk::QueueFlags::GRAPHICS); + if supports_graphic { + Some((*physical_device, index)) + } else { + None + } + }) + }) + .find_map(|v| v) + } + .ok_or("Failed to find a Vulkan physical device.")?; + + let device: ash::Device = { + let features = vk::PhysicalDeviceFeatures::default(); + + let priorities = [1.0]; + + let queue_info = [vk::DeviceQueueCreateInfo::default() + .queue_family_index(queue_family_index as _) + .queue_priorities(&priorities)]; + + let device_extension_names_raw = [ + ash::khr::swapchain::NAME.as_ptr() + ]; + + let device_create_info = vk::DeviceCreateInfo::default() + .queue_create_infos(&queue_info) + .enabled_extension_names(&device_extension_names_raw) + .enabled_features(&features); + + instance.create_device(physical_device, &device_create_info, None) + } + .or(Err("Failed to create Device."))?; + + let queue_index: usize = 0; + let queue: vk::Queue = device.get_device_queue(queue_family_index as _, queue_index as _); + + let swap_chain_loader = ash::khr::swapchain::Device::new(&instance, &device); + + let semaphore_info = vk::SemaphoreCreateInfo::default(); + let image_available_semaphore = unsafe { device.create_semaphore(&semaphore_info, None).unwrap() }; + + let present_semaphore = unsafe { device.create_semaphore(&semaphore_info, None).unwrap() }; + + let surface_loader = ash::khr::surface::Instance::new(&entry, &instance); + + Ok(AshGraphics { + current_index: None, + alpha: false, + swap_chain_image_view: None, + swap_chain_loader, + queue_and_index: (queue, queue_index), + device, + physical_device, + instance, + entry, + image_available_semaphore, + present_semaphore, + swap_chain: None, + surface: None, + surface_size: Extent2D { width: 0, height: 0 }, + swap_chain_images: None, + surface_loader + }) + } +} + +pub struct VulkanContext { + ash: AshGraphics, + view: *mut c_void, +} + +impl Debug for VulkanContext { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + // todo + f.debug_struct("VulkanContext") + .finish() + } +} + +impl VulkanContext { + pub fn set_alpha(&mut self, alpha: bool) { + self.ash.alpha = alpha; + } + + pub fn alpha(&self) -> bool { + self.ash.alpha + } + pub fn version() -> Option<(usize, usize, usize)> { + AshGraphics::vulkan_version() + } + + pub fn new(app_name: &str) -> Result { + unsafe { + AshGraphics::new(app_name).map(|graphics| { + Self { ash: graphics, view: std::ptr::null_mut() } + }) + } + } + + pub fn queue(&self) -> u64 { + self.ash.queue_and_index.0.as_raw() + } + + pub fn index(&self) -> usize { + self.ash.queue_and_index.1 + } + + pub fn instance_handle(&self) -> u64 { + self.ash.instance.handle().as_raw() + } + + pub fn physical_device(&self) -> u64 { + self.ash.physical_device.as_raw() + } + + pub fn device_handle(&self) -> u64 { + self.ash.device.handle().as_raw() + } + + pub fn size(&self) -> Extent2D { + self.ash.surface_size + } + + pub fn current_image(&mut self) -> Option { + if self.ash.current_index.is_none() { + unsafe { + if let Ok((image_index, _)) = self.ash.swap_chain_loader.acquire_next_image( + self.ash.swap_chain?, u64::MAX, self.ash.image_available_semaphore, + vk::Fence::null(), + ) { + self.ash.current_index = Some(image_index); + } + } + } + + match self.ash.swap_chain_images.as_ref() { + None => None, + Some(images) => { + if let Some(current_index) = self.ash.current_index { + return images.get(current_index as usize).map(|image| *image); + } + None + } + } + } + + pub fn current_image_raw(&mut self) -> Option { + match self.current_image() { + None => None, + Some(image) => { + Some(image.as_raw()) + } + } + } + + pub fn next_image(&mut self) -> Option { + unsafe { + if let Ok((image_index, _)) = self.ash.swap_chain_loader.acquire_next_image( + self.ash.swap_chain?, u64::MAX, self.ash.image_available_semaphore, + vk::Fence::null(), + ) { + self.ash.current_index = Some(image_index); + } + } + + match self.ash.swap_chain_images.as_ref() { + None => None, + Some(images) => { + if let Some(current_index) = self.ash.current_index { + return images.get(current_index as usize).map(|image| *image); + } + None + } + } + } + + pub fn next_image_raw(&mut self) -> Option { + match self.next_image() { + None => None, + Some(image) => { + Some(image.as_raw()) + } + } + } + + unsafe fn create_swap_chain(&mut self, surface: vk::SurfaceKHR, width: u32, height: u32) { + unsafe { self.ash.device.device_wait_idle().unwrap(); } + + self.ash.current_index = None; + + let formats = unsafe { + self.ash.surface_loader.get_physical_device_surface_formats(self.ash.physical_device, surface).unwrap() + }; + + let capabilities = unsafe { + self.ash.surface_loader.get_physical_device_surface_capabilities(self.ash.physical_device, surface).unwrap() + }; + + let present_modes = unsafe { + self.ash.surface_loader.get_physical_device_surface_present_modes(self.ash.physical_device, surface).unwrap() + }; + + let raw_flags = vk::SwapchainCreateFlagsKHR::empty(); + let composite_alpha = if self.alpha() { + if capabilities.supported_composite_alpha.contains(vk::CompositeAlphaFlagsKHR::POST_MULTIPLIED) { + vk::CompositeAlphaFlagsKHR::POST_MULTIPLIED + } else if (capabilities.supported_composite_alpha.contains(vk::CompositeAlphaFlagsKHR::PRE_MULTIPLIED)) { + vk::CompositeAlphaFlagsKHR::PRE_MULTIPLIED + } else if (capabilities.supported_composite_alpha.contains(vk::CompositeAlphaFlagsKHR::INHERIT)) { + vk::CompositeAlphaFlagsKHR::INHERIT + } else { + vk::CompositeAlphaFlagsKHR::OPAQUE + } + } else { + vk::CompositeAlphaFlagsKHR::OPAQUE + }; + + if let Some(views) = self.ash.swap_chain_image_view.as_mut() { + views.iter().for_each(|image| { + self.ash.device.destroy_image_view(*image, None); + }); + views.clear(); + } + + if let Some(swap_chain) = self.ash.swap_chain.take() { + self.ash.swap_chain_loader.destroy_swapchain(swap_chain, None); + } + + // let old_swap_chain = self.ash.swap_chain.unwrap_or_else(|| ); + + let min_image_count = if capabilities.min_image_count + 1 <= capabilities.max_image_count { + capabilities.min_image_count + 1 + }else { + capabilities.max_image_count + }; + + let info = SwapchainCreateInfoKHR::default() + .flags(raw_flags) + .surface(surface) + .min_image_count(min_image_count) + .image_format(formats[0].format) + .image_color_space(formats[0].color_space) + .image_extent(Extent2D { width, height }) + .image_array_layers(1) + .image_usage(capabilities.supported_usage_flags) + .image_sharing_mode(vk::SharingMode::EXCLUSIVE) + .pre_transform(vk::SurfaceTransformFlagsKHR::IDENTITY) + .composite_alpha(composite_alpha) + .present_mode(present_modes[0]) + .clipped(true) + .old_swapchain(SwapchainKHR::null()); + + + self.ash.swap_chain = self.ash.swap_chain_loader.create_swapchain(&info, None) + .map(|swap_chain| { + self.ash.swap_chain_image_view = self.ash.swap_chain_loader.get_swapchain_images(swap_chain).map(|images| { + let views = images.iter() + .map(|image| { + let view_info = vk::ImageViewCreateInfo { + view_type: vk::ImageViewType::TYPE_2D, + format: info.image_format, + components: vk::ComponentMapping { + r: vk::ComponentSwizzle::IDENTITY, + g: vk::ComponentSwizzle::IDENTITY, + b: vk::ComponentSwizzle::IDENTITY, + a: vk::ComponentSwizzle::IDENTITY, + }, + subresource_range: vk::ImageSubresourceRange { + aspect_mask: vk::ImageAspectFlags::COLOR, + base_mip_level: 0, + level_count: 1, + base_array_layer: 0, + layer_count: 1, + }, + image: *image, + ..Default::default() + }; + + unsafe { + self.ash.device + .create_image_view(&view_info, None).unwrap() + } + }) + .collect::>(); + self.ash.swap_chain_images = Some(images); + views + }).ok(); + swap_chain + }) + .ok(); + + self.ash.surface_size = Extent2D { + width, + height, + }; + } + + pub fn set_view(&mut self, view: *mut c_void, width: u32, height: u32) { + self.view = view; + self.ash.surface = match NonNull::new(view) { + None => None, + Some(view) => { + let display_handle = raw_window_handle::AndroidDisplayHandle::new(); + let display_handle = raw_window_handle::RawDisplayHandle::Android(display_handle); + let window_handle = raw_window_handle::AndroidNdkWindowHandle::new(view); + let window_handle = raw_window_handle::RawWindowHandle::AndroidNdk(window_handle); + + unsafe { + match ash_window::create_surface( + &self.ash.entry, + &self.ash.instance, + display_handle, + window_handle, + None, + ) { + Ok(surface) => { + self.create_swap_chain(surface, width, height); + Some(surface) + } + Err(_) => { + None + } + } + } + } + } + } + + pub fn resize(&mut self, width: u32, height: u32) { + let mut surface = None; + if let Some(value) = self.ash.surface.as_ref() { + surface = Some(*value); + } + + if let Some(surface) = surface { + unsafe { self.create_swap_chain(surface, width, height); } + } + } + + pub fn present(&mut self) { + let _ = self.current_image(); + unsafe { + let wait_semaphores = [self.ash.present_semaphore]; + if let (Some(image_index), Some(swapchain)) = (self.ash.current_index, self.ash.swap_chain.as_ref()) { + let swapchains = [*swapchain]; + let image_indices = [image_index]; + + let present_info = vk::PresentInfoKHR::default() + .wait_semaphores(&wait_semaphores) + .swapchains(&swapchains) + .image_indices(&image_indices); + + unsafe { + self.ash.swap_chain_loader + .queue_present(self.ash.queue_and_index.0, &present_info) + .expect("Queue Present Failed."); + } + + let _ = self.next_image(); + } + } + } + + pub unsafe fn get_instance_proc_addr(&self, instance: *mut c_void, name: *const c_char) -> Option { + let vk_instance = vk::Instance::from_raw(instance as _); + self.ash.entry.get_instance_proc_addr(vk_instance, name) + } + + pub unsafe fn get_device_proc_addr(&self, device: *mut c_void, name: *const c_char) -> Option { + let vk_device = vk::Device::from_raw(device as _); + self.ash.instance.get_device_proc_addr(vk_device, name) + } +} diff --git a/crates/canvas-core/src/image_asset.rs b/crates/canvas-core/src/image_asset.rs index cdb6a6586..793ba2a13 100644 --- a/crates/canvas-core/src/image_asset.rs +++ b/crates/canvas-core/src/image_asset.rs @@ -5,6 +5,7 @@ use std::io::{BufRead, Read, Seek}; use std::os::raw::{c_char, c_int, c_uint}; use std::ptr::null; use std::sync::Arc; +use gl_bindings::RGBA; enum CanvasImage { #[cfg(not(feature = "2d"))] @@ -26,7 +27,7 @@ impl CanvasImage { } #[cfg(feature = "2d")] CanvasImage::Skia(image, _, data) => { - let dimensions = (image.width() as u32, image.height() as u32);; + let dimensions = (image.width() as u32, image.height() as u32); f(data.as_slice(), dimensions) } } @@ -120,7 +121,8 @@ impl CanvasImage { #[cfg(feature = "2d")] CanvasImage::Skia(image, _, _) => { - (image.width() as u32, image.height() as u32) + let dimensions = image.dimensions(); + (dimensions.width as u32, dimensions.height as u32) } } } @@ -250,31 +252,29 @@ impl ImageAsset { f(None) } Some(image) => { - unsafe { - match image { - #[cfg(not(feature = "2d"))] - CanvasImage::Stb(image) => { - // should always be rgba - let info = skia_safe::ImageInfo::new( - (image.width as i32, image.height as i32), - skia_safe::ColorType::RGBA8888, - skia_safe::AlphaType::Unpremul, - None, - ); - let mut bm = skia_safe::Bitmap::new(); - let success = unsafe { bm.install_pixels(&info, image.data.as_mut_ptr() as *mut c_void, info.min_row_bytes()) }; - - if success { - f(Some(&bm)) - } else { - f(None) - } - } - #[cfg(feature = "2d")] - CanvasImage::Skia(image, _, _) => { - f(Some(image)) + match image { + #[cfg(not(feature = "2d"))] + CanvasImage::Stb(image) => { + // should always be rgba + let info = skia_safe::ImageInfo::new( + (image.width as i32, image.height as i32), + skia_safe::ColorType::RGBA8888, + skia_safe::AlphaType::Unpremul, + None, + ); + let mut bm = skia_safe::Bitmap::new(); + let success = unsafe { bm.install_pixels(&info, image.data.as_mut_ptr() as *mut c_void, info.min_row_bytes()) }; + + if success { + f(Some(&bm)) + } else { + f(None) } } + #[cfg(feature = "2d")] + CanvasImage::Skia(image, _, _) => { + f(Some(image)) + } } } } @@ -291,26 +291,24 @@ impl ImageAsset { f(None) } Some(image) => { - unsafe { - match image { - #[cfg(not(feature = "2d"))] - CanvasImage::Stb(image) => { - // should always be rgba - let info = skia_safe::ImageInfo::new( - (image.width as i32, image.height as i32), - skia_safe::ColorType::RGBA8888, - skia_safe::AlphaType::Unpremul, - None, - ); - let data = unsafe { skia_safe::Data::new_bytes(image.data.as_slice()) }; - let image = skia_safe::images::raster_from_data(&info, data, info.min_row_bytes()); - f(image.as_ref()) - } - #[cfg(feature = "2d")] - CanvasImage::Skia(bitmap, _, _) => { - let image = skia_safe::images::raster_from_bitmap(bitmap); - f(image.as_ref()) - } + match image { + #[cfg(not(feature = "2d"))] + CanvasImage::Stb(image) => { + // should always be rgba + let info = skia_safe::ImageInfo::new( + (image.width as i32, image.height as i32), + skia_safe::ColorType::RGBA8888, + skia_safe::AlphaType::Unpremul, + None, + ); + let data = unsafe { skia_safe::Data::new_bytes(image.data.as_slice()) }; + let image = skia_safe::images::raster_from_data(&info, data, info.min_row_bytes()); + f(image.as_ref()) + } + #[cfg(feature = "2d")] + CanvasImage::Skia(bitmap, _, _) => { + let image = skia_safe::images::raster_from_bitmap(bitmap); + f(image.as_ref()) } } } @@ -327,30 +325,28 @@ impl ImageAsset { f(None, None) } Some(image) => { - unsafe { - match image { - #[cfg(not(feature = "2d"))] - CanvasImage::Stb(image) => { - // should always be rgba - let info = skia_safe::ImageInfo::new( - (image.width as i32, image.height as i32), - skia_safe::ColorType::RGBA8888, - skia_safe::AlphaType::Unpremul, - None, - ); - let dimensions = (image.width as u32, image.height as u32); - let slice = image.data.as_slice(); - let data = unsafe { skia_safe::Data::new_bytes(slice) }; - let image = skia_safe::images::raster_from_data(&info, data, info.min_row_bytes()); - f(image.as_ref(), Some((dimensions, slice))) - } - #[cfg(feature = "2d")] - CanvasImage::Skia(bitmap, _, bytes) => { - let image = skia_safe::images::raster_from_bitmap(bitmap); - let dimensions = bitmap.dimensions(); - // should not fail to cast - f(image.as_ref(), Some(((dimensions.width as u32, dimensions.height as u32), bytes))) - } + match image { + #[cfg(not(feature = "2d"))] + CanvasImage::Stb(image) => { + // should always be rgba + let info = skia_safe::ImageInfo::new( + (image.width as i32, image.height as i32), + skia_safe::ColorType::RGBA8888, + skia_safe::AlphaType::Unpremul, + None, + ); + let dimensions = (image.width as u32, image.height as u32); + let slice = image.data.as_slice(); + let data = unsafe { skia_safe::Data::new_bytes(slice) }; + let image = skia_safe::images::raster_from_data(&info, data, info.min_row_bytes()); + f(image.as_ref(), Some((dimensions, slice))) + } + #[cfg(feature = "2d")] + CanvasImage::Skia(bitmap, _, bytes) => { + let image = skia_safe::images::raster_from_bitmap(bitmap); + let dimensions = bitmap.dimensions(); + // should not fail to cast + f(image.as_ref(), Some(((dimensions.width as u32, dimensions.height as u32), bytes))) } } } @@ -609,7 +605,7 @@ impl ImageAsset { pub fn load_from_bytes_int(&self, buf: &mut [i8]) -> bool { - self.load_from_bytes(unsafe { std::mem::transmute(buf) }) + self.load_from_bytes(unsafe { std::mem::transmute::<&mut [i8], &[u8]>(buf) }) } #[cfg(feature = "2d")] @@ -913,6 +909,10 @@ impl ImageAsset { .unwrap_or_default() } + pub fn is_empty(&self) -> bool { + self.0.lock().image.is_none() + } + pub fn copy_bytes(&self) -> Option> { self.0.lock().image.as_ref().map(|d| { match d { @@ -931,6 +931,13 @@ impl ImageAsset { }) } + pub fn bgra_to_rgba_in_place(data: &mut [u8]) { + for chunk in data.chunks_exact_mut(4) { + chunk.swap(0, 2); + } + } + + pub fn rgb565_to_rgba8888(data: &[u8]) -> Vec { let mut rgba_data = Vec::with_capacity(data.len() * 2); for chunk in data.chunks(2) { @@ -1108,10 +1115,10 @@ impl ImageAsset { } for i in 0..(width * height) { - let red = data[i * 4 + 0]; + let red = data[i * 4]; let green = data[i * 4 + 1]; - buf[i * 2 + 0] = red; + buf[i * 2] = red; buf[i * 2 + 1] = green; } @@ -1126,10 +1133,10 @@ impl ImageAsset { } for i in 0..(width * height) { - let red = data[i * 3 + 0]; + let red = data[i * 3]; let green = data[i * 3 + 1]; - buf[i * 2 + 0] = red; + buf[i * 2] = red; buf[i * 2 + 1] = green; } @@ -1145,7 +1152,7 @@ impl ImageAsset { } for i in 0..num_pixels { - let red = data[i * 4 + 0] as u32; + let red = data[i * 4] as u32; let green = data[i * 4 + 1] as u32; let rg_packed = (red << 16) | green; diff --git a/crates/canvas-core/src/lib.rs b/crates/canvas-core/src/lib.rs index 5312b78fa..77fe841ae 100644 --- a/crates/canvas-core/src/lib.rs +++ b/crates/canvas-core/src/lib.rs @@ -1,5 +1,3 @@ -extern crate core; - pub mod context_attributes; -pub mod gl; pub mod image_asset; +pub mod gpu; \ No newline at end of file diff --git a/crates/canvas-ios/Cargo.toml b/crates/canvas-ios/Cargo.toml index edf56f3ad..643c14838 100644 --- a/crates/canvas-ios/Cargo.toml +++ b/crates/canvas-ios/Cargo.toml @@ -8,16 +8,14 @@ name = "canvasnative" crate-type = ["staticlib"] [dependencies] -canvas-core = { workspace = true, features = ["2d"] } -canvas-2d = { workspace = true, features = ["gl"] } +canvas-core = { workspace = true, features = ["2d", "gl", "metal"] } +canvas-2d = { workspace = true, features = ["gl", "metal"] } canvas-webgl = { workspace = true } -canvas-c = { workspace = true, features = ["2d", "webgl", "gl"] } +canvas-c = { workspace = true, features = ["2d", "webgl", "gl", "metal"] } gl-bindings.workspace = true raw-window-handle.workspace = true -ureq = "2.9.1" -parking_lot = "0.12.0" -utf16string = "0.2.0" -log = "0.4.21" -env_logger = "0.11.2" -skia-safe = { workspace = true, features = ["gl", "textlayout"] } +parking_lot.workspace = true +log.workspace = true +env_logger.workspace = true +skia-safe = { workspace = true, features = ["gl", "metal","textlayout"] } diff --git a/crates/canvas-ios/src/gl.rs b/crates/canvas-ios/src/gl.rs new file mode 100644 index 000000000..e69de29bb diff --git a/crates/canvas-ios/src/lib.rs b/crates/canvas-ios/src/lib.rs index f59a18a74..2b266b971 100644 --- a/crates/canvas-ios/src/lib.rs +++ b/crates/canvas-ios/src/lib.rs @@ -1,127 +1,23 @@ -use std::ffi::{c_int, c_longlong, c_void, CStr, CString}; +mod gl; +mod mtl; + +pub use mtl::*; + +use std::ffi::{c_int, c_longlong, c_void, CStr}; use std::os::raw::c_char; use std::ptr::NonNull; -use parking_lot::RwLock; - use canvas_2d::context::fill_and_stroke_styles::pattern::Repetition; use canvas_2d::utils::image::from_image_slice; pub use canvas_c::*; -use canvas_c::CanvasRenderingContext2D; -use canvas_c::PaintStyle; -use canvas_c::webgpu::gpu_canvas_context::CanvasGPUCanvasContext; -use canvas_core::context_attributes::{ContextAttributes, PowerPreference}; -use canvas_core::gl::GLContext; -use canvas_core::image_asset::ImageAsset; -use webgpu::gpu::CanvasWebGPUInstance; - -#[allow(non_camel_case_types)] -pub(crate) enum iOSView { - OffScreen, - OnScreen(NonNull), -} - -#[allow(dead_code)] -#[allow(non_camel_case_types)] -pub(crate) struct iOSGLContext { - pub(crate) context_attributes: ContextAttributes, - pub(crate) gl_context: GLContext, - ios_view: iOSView, -} - -#[allow(dead_code)] -#[allow(non_camel_case_types)] -pub(crate) struct iOSWebGPUContext { - ios_view: iOSView, -} - -#[no_mangle] -pub extern "C" fn canvas_native_init_ios_webgpu( - instance: i64, - view: i64, - width: u32, - height: u32, -) -> c_longlong { - // let _ = env_logger::try_init(); - - if instance == 0 { - return 0; - } - - if let Some(ios_view) = NonNull::new(view as *mut c_void) { - let instance = unsafe { instance as *mut CanvasWebGPUInstance }; - return unsafe { - webgpu::gpu_canvas_context::canvas_native_webgpu_context_create( - instance, - view as *mut c_void, - width, - height, - ) as i64 - }; - } - - 0 -} - -#[cfg(any(target_os = "ios"))] -#[no_mangle] -pub extern "C" fn canvas_native_init_ios_webgpu_uiview( - instance: i64, - view: i64, - width: u32, - height: u32, -) -> c_longlong { - // let _ = env_logger::try_init(); - - if instance == 0 { - return 0; - } - - if let Some(ios_view) = NonNull::new(view as *mut c_void) { - let instance = unsafe { instance as *mut CanvasWebGPUInstance }; - return unsafe { - webgpu::gpu_canvas_context::canvas_native_webgpu_context_create_uiview( - instance, - view as *mut c_void, - width, - height, - ) as i64 - }; - } +use canvas_core::context_attributes::PowerPreference; +use canvas_core::gpu::gl::GLContext; +use canvas_webgl::prelude::WebGLVersion; - 0 -} -#[cfg(any(target_os = "ios"))] #[no_mangle] -pub extern "C" fn canvas_native_resize_ios_webgpu_uiview( - context: i64, - view: i64, - width: u32, - height: u32, -) { - // let _ = env_logger::try_init(); - - if context == 0 { - return; - } - - if let Some(view) = NonNull::new(view as *mut c_void) { - let context = unsafe { context as *mut CanvasGPUCanvasContext }; - return unsafe { - webgpu::gpu_canvas_context::canvas_native_webgpu_context_resize_uiview( - context, - view.as_ptr(), - width, - height, - ); - }; - } -} - -#[no_mangle] -pub extern "C" fn canvas_native_init_ios_gl( - view: i64, +pub extern "C" fn canvas_native_ios_create_webgl_context( + view: *mut c_void, alpha: bool, antialias: bool, depth: bool, @@ -132,8 +28,7 @@ pub extern "C" fn canvas_native_init_ios_gl( stencil: bool, desynchronized: bool, xr_compatible: bool, - version: i32, - is_canvas: bool, + version: u32, ) -> c_longlong { if version == 2 && !GLContext::has_gl2support() { return 0; @@ -142,220 +37,58 @@ pub extern "C" fn canvas_native_init_ios_gl( // let _ = env_logger::try_init(); if let Some(power_preference) = PowerPreference::try_from(power_preference).ok() { - if let Some(ios_view) = NonNull::new(view as *mut c_void) { - let mut attrs = ContextAttributes::new( - alpha, - antialias, - depth, - fail_if_major_performance_caveat, - power_preference, - premultiplied_alpha, - preserve_drawing_buffer, - stencil, - desynchronized, - xr_compatible, - is_canvas, - ); - - if let Some(mut gl_context) = GLContext::create_window_context(&mut attrs, ios_view) { - return Box::into_raw(Box::new(iOSGLContext { - ios_view: iOSView::OnScreen(ios_view), - gl_context, - context_attributes: attrs, - })) as i64; - } - } + return Box::into_raw(Box::new(WebGLState::new_with_view( + view, WebGLVersion::try_from(version as i32).unwrap(), + alpha, + antialias, depth, fail_if_major_performance_caveat, power_preference.into(), + premultiplied_alpha, preserve_drawing_buffer, stencil, desynchronized, xr_compatible, false, + ))) as i64; } 0 } #[no_mangle] -pub extern "C" fn canvas_native_init_ios_gl_with_shared_gl( - view: i64, - alpha: bool, - antialias: bool, - depth: bool, - fail_if_major_performance_caveat: bool, - power_preference: i32, - premultiplied_alpha: bool, - preserve_drawing_buffer: bool, - stencil: bool, - desynchronized: bool, - xr_compatible: bool, - version: i32, - is_canvas: bool, - shared_context: i64, -) -> c_longlong { - if version == 2 && !GLContext::has_gl2support() { - return 0; - } - - if shared_context == 0 { - return 0; +pub extern "C" fn canvas_native_ios_flush_webgl(context: i64) -> bool { + if context == 0 { + return false; } - if let Some(power_preference) = PowerPreference::try_from(power_preference).ok() { - if let Some(ios_view) = NonNull::new(view as *mut c_void) { - let mut attrs = ContextAttributes::new( - alpha, - antialias, - depth, - fail_if_major_performance_caveat, - power_preference, - premultiplied_alpha, - preserve_drawing_buffer, - stencil, - desynchronized, - xr_compatible, - is_canvas, - ); - - let shared_context = shared_context as *mut iOSGLContext; - let shared_context = unsafe { &*shared_context }; - - if let Some(mut gl_context) = GLContext::create_shared_window_context( - &mut attrs, - ios_view, - &shared_context.gl_context, - ) { - return Box::into_raw(Box::new(iOSGLContext { - ios_view: iOSView::OnScreen(ios_view), - gl_context, - context_attributes: attrs, - })) as i64; - } - } - } + let context = context as *mut WebGLState; + let context = unsafe { &mut *context }; - 0 + context.get_inner().make_current(); + context.get_inner().swap_buffers() } #[no_mangle] -pub extern "C" fn canvas_native_init_offscreen_ios_gl( - width: i32, - height: i32, - alpha: bool, - antialias: bool, - depth: bool, - fail_if_major_performance_caveat: bool, - power_preference: i32, - premultiplied_alpha: bool, - preserve_drawing_buffer: bool, - stencil: bool, - desynchronized: bool, - xr_compatible: bool, - version: i32, - is_canvas: bool, -) -> c_longlong { - if version == 1 && !GLContext::has_gl2support() { - return 0; +pub extern "C" fn canvas_native_ios_flush_2d_context(context: i64) { + if context == 0 { + return; } - if let Some(power_preference) = PowerPreference::try_from(power_preference).ok() { - let mut attrs = ContextAttributes::new( - alpha, - antialias, - depth, - fail_if_major_performance_caveat, - power_preference, - premultiplied_alpha, - preserve_drawing_buffer, - stencil, - desynchronized, - xr_compatible, - is_canvas, - ); + let context = context as *mut CanvasRenderingContext2D; + let context = unsafe { &mut *context }; - if let Some(mut gl_context) = GLContext::create_offscreen_context(&mut attrs, width, height) - { - return Box::into_raw(Box::new(iOSGLContext { - ios_view: iOSView::OffScreen, - gl_context, - context_attributes: attrs, - })) as i64; - } - } - 0 + context.get_context_mut().flush(); } -#[no_mangle] -pub extern "C" fn canvas_native_init_offscreen_ios_gl_with_shared_gl( - width: i32, - height: i32, - alpha: bool, - antialias: bool, - depth: bool, - fail_if_major_performance_caveat: bool, - power_preference: i32, - premultiplied_alpha: bool, - preserve_drawing_buffer: bool, - stencil: bool, - desynchronized: bool, - xr_compatible: bool, - version: i32, - is_canvas: bool, - shared_context: i64, -) -> c_longlong { - if version == 1 && !GLContext::has_gl2support() { - return 0; - } - - if shared_context == 0 { - return 0; - } - - if let Some(power_preference) = PowerPreference::try_from(power_preference).ok() { - let mut attrs = ContextAttributes::new( - alpha, - antialias, - depth, - fail_if_major_performance_caveat, - power_preference, - premultiplied_alpha, - preserve_drawing_buffer, - stencil, - desynchronized, - xr_compatible, - is_canvas, - ); - - let shared_context = shared_context as *mut iOSGLContext; - let shared_context = unsafe { &*shared_context }; - - if let Some(mut gl_context) = GLContext::create_shared_offscreen_context( - &mut attrs, - width, - height, - &shared_context.gl_context, - ) { - return Box::into_raw(Box::new(iOSGLContext { - ios_view: iOSView::OffScreen, - gl_context, - context_attributes: attrs, - })) as i64; - } - } - - 0 -} #[no_mangle] -pub extern "C" fn canvas_native_ios_flush_gl(context: i64) -> bool { +pub extern "C" fn canvas_native_ios_present_drawable(context: i64) { if context == 0 { - return false; + return; } - let context = context as *mut iOSGLContext; + let context = context as *mut CanvasRenderingContext2D; let context = unsafe { &mut *context }; - context.gl_context.make_current(); - context.gl_context.swap_buffers() + canvas_2d::context::Context::present(context.get_context_mut()); } #[no_mangle] -pub extern "C" fn canvas_native_ios_flush_2d_context(context: i64) { +pub extern "C" fn canvas_native_ios_flush_2d_context_and_sync_cpu(context: i64) { if context == 0 { return; } @@ -363,11 +96,13 @@ pub extern "C" fn canvas_native_ios_flush_2d_context(context: i64) { let context = context as *mut CanvasRenderingContext2D; let context = unsafe { &mut *context }; - context.get_context_mut().flush(); + + context.get_context_mut().flush_and_sync_cpu(); } + #[no_mangle] -pub extern "C" fn canvas_native_resize_context_2d(context: i64, width: f32, height: f32) { +pub extern "C" fn canvas_native_ios_resize_context_2d(context: i64, width: f32, height: f32) { if context == 0 { return; } @@ -379,60 +114,38 @@ pub extern "C" fn canvas_native_resize_context_2d(context: i64, width: f32, heig } #[no_mangle] -pub extern "C" fn canvas_native_create_2d_context( - context: i64, +pub extern "C" fn canvas_native_ios_create_2d_context( + view: *mut c_void, width: i32, height: i32, alpha: bool, density: f32, - samples: i32, font_color: i32, ppi: f32, direction: i32, ) -> i64 { - if context == 0 { - return 0; - } - - let context = context as *mut iOSGLContext; - let context = unsafe { &mut *context }; - - context.gl_context.make_current(); - let mut frame_buffers = [0]; - unsafe { - gl_bindings::GetIntegerv(gl_bindings::FRAMEBUFFER_BINDING, frame_buffers.as_mut_ptr()) - }; - let ctx_2d = CanvasRenderingContext2D::new_gl( canvas_2d::context::Context::new_gl( + view, width as f32, height as f32, density, - frame_buffers[0], - samples, alpha, font_color, ppi, canvas_2d::context::text_styles::text_direction::TextDirection::from(direction as u32), ), - context.gl_context.clone(), alpha, ); - // { - // let mut ctx = ctx_2d.get_context_mut(); - // ctx.clear_canvas(); - // ctx.flush_and_render_to_surface() - // } - Box::into_raw(Box::new(ctx_2d)) as i64 } #[no_mangle] -pub extern "C" fn canvas_native_update_gl_surface( +pub extern "C" fn canvas_native_ios_update_webgl_surface( view: i64, - width: i32, - height: i32, + _width: i32, + _height: i32, context: i64, ) { if context == 0 { @@ -440,98 +153,35 @@ pub extern "C" fn canvas_native_update_gl_surface( } if let Some(ios_view) = NonNull::new(view as *mut c_void) { - let context = context as *mut iOSGLContext; + let context = context as *mut WebGLState; let context = unsafe { &mut *context }; - context.gl_context.set_surface(ios_view); - context.ios_view = iOSView::OnScreen(ios_view); + let context = context.get_inner_mut(); + context.set_surface(ios_view); } } #[no_mangle] -pub extern "C" fn canvas_native_release_ios_gl(context: i64) { +pub extern "C" fn canvas_native_ios_release_webgl(context: i64) { if context == 0 { return; } - let context = context as *mut iOSGLContext; + let context = context as *mut WebGLState; let _ = unsafe { Box::from_raw(context) }; } #[no_mangle] -pub extern "C" fn canvas_native_get_gl_pointer(gl_context: i64) -> i64 { - if gl_context == 0 { - return 0; - } - let gl_context = gl_context as *mut iOSGLContext; - let gl_context = unsafe { &*gl_context }; - gl_context.gl_context.as_raw_inner() as i64 -} - -#[no_mangle] -pub extern "C" fn canvas_native_release_gl_pointer(gl_context: i64) { - if gl_context == 0 { - return; - } - let gl_context = gl_context as *const RwLock; - let _ = GLContext::from_raw_inner(gl_context); -} - -#[no_mangle] -pub extern "C" fn canvas_native_context_2d_test(context: i64) { +pub extern "C" fn canvas_native_ios_gl_make_current(context: i64) { if context == 0 { return; } - - let context = context as *mut CanvasRenderingContext2D; - let context = unsafe { &mut *context }; - - context.make_current(); - { - let mut ctx = context.get_context_mut(); - ctx.set_fill_style_with_color("red"); - ctx.fill_rect_xywh(0., 0., 300., 300.); - } - context.render(); -} - -#[no_mangle] -pub extern "C" fn canvas_native_gl_make_current(gl_context: i64) { - if gl_context == 0 { - return; - } - let gl_context = gl_context as *mut iOSGLContext; + let gl_context = context as *mut WebGLState; let gl_context = unsafe { &*gl_context }; - gl_context.gl_context.make_current(); + gl_context.get_inner().make_current(); } #[no_mangle] -pub extern "C" fn canvas_native_context_2d_test_to_data_url(context: i64) -> *mut c_char { - if context == 0 { - return std::ptr::null_mut(); - } - - let context = context as *mut CanvasRenderingContext2D; - let context = unsafe { &mut *context }; - - context.make_current(); - let mut ctx = context.get_context_mut(); - // ctx.flush_and_render_to_surface(); - - let ret = ctx.as_data_url("image/png", 92); - CString::new(ret).unwrap().into_raw() -} - -#[no_mangle] -pub extern "C" fn canvas_native_context_2d_destroy_string(string: *mut c_char) { - if string.is_null() { - return; - } - - let _ = unsafe { CString::from_raw(string) }; -} - -#[no_mangle] -pub extern "C" fn canvas_native_imageasset_load_from_bytes( +pub extern "C" fn canvas_native_ios_image_asset_load_from_bytes( asset: i64, bytes: *mut u8, size: usize, @@ -548,7 +198,7 @@ pub extern "C" fn canvas_native_imageasset_load_from_bytes( } #[no_mangle] -pub extern "C" fn canvas_native_context_create_pattern_raw( +pub extern "C" fn canvas_native_ios_context_create_pattern_raw( context: i64, width: i32, height: i32, @@ -615,7 +265,7 @@ fn draw_image( } #[no_mangle] -pub extern "C" fn canvas_native_context_draw_image_dx_dy_with_bytes( +pub extern "C" fn canvas_native_ios_context_draw_image_dx_dy_with_bytes( context: i64, bytes: *mut u8, size: usize, @@ -625,13 +275,13 @@ pub extern "C" fn canvas_native_context_draw_image_dx_dy_with_bytes( dy: f32, ) -> bool { let bytes = unsafe { std::slice::from_raw_parts(bytes as _, size) }; - return draw_image( + draw_image( context, bytes, width, height, 0.0, 0.0, width, height, dx, dy, width, height, - ); + ) } #[no_mangle] -pub extern "C" fn canvas_native_context_draw_image_dx_dy_dw_dh_with_bytes( +pub extern "C" fn canvas_native_ios_context_draw_image_dx_dy_dw_dh_with_bytes( context: i64, bytes: *mut u8, size: usize, @@ -649,7 +299,7 @@ pub extern "C" fn canvas_native_context_draw_image_dx_dy_dw_dh_with_bytes( } #[no_mangle] -pub extern "C" fn canvas_native_context_draw_image_with_bytes( +pub extern "C" fn canvas_native_ios_context_draw_image_with_bytes( context: i64, bytes: *mut u8, size: usize, @@ -708,7 +358,7 @@ pub extern "C" fn canvas_native_svg_draw_from_path(context: i64, path: *const c_ */ #[no_mangle] -pub extern "C" fn canvas_native_context_custom_with_buffer_flush( +pub extern "C" fn canvas_native_ios_context_custom_with_buffer_flush( context: i64, bytes: *mut u8, size: usize, @@ -733,9 +383,9 @@ pub extern "C" fn canvas_native_context_custom_with_buffer_flush( skia_safe::AlphaType::Premul, None, ); - let context = context as *mut canvas_c::CanvasRenderingContext2D; - let context = unsafe { &mut *context }; - let mut context = context.get_context_mut(); + let context = context as *mut CanvasRenderingContext2D; + let context = &mut *context; + let context = context.get_context_mut(); let data = std::slice::from_raw_parts_mut(bytes, size); let mut surface = skia_safe::surfaces::wrap_pixels(&info, data, None, None).unwrap(); @@ -756,7 +406,7 @@ pub extern "C" fn canvas_native_context_custom_with_buffer_flush( } #[no_mangle] -pub extern "C" fn canvas_native_context_init_context_with_custom_surface( +pub extern "C" fn canvas_native_ios_context_init_context_with_custom_surface( width: f32, height: f32, density: f32, @@ -767,8 +417,8 @@ pub extern "C" fn canvas_native_context_init_context_with_custom_surface( ) -> c_longlong { let mut ctx_2d = CanvasRenderingContext2D::new( canvas_2d::context::Context::new( - width as f32, - height as f32, + width, + height, density, alpha, font_color, @@ -779,7 +429,7 @@ pub extern "C" fn canvas_native_context_init_context_with_custom_surface( ); { - let mut ctx = ctx_2d.get_context_mut(); + let ctx = ctx_2d.get_context_mut(); ctx.clear_canvas(); } @@ -787,42 +437,7 @@ pub extern "C" fn canvas_native_context_init_context_with_custom_surface( } #[no_mangle] -pub extern "C" fn canvas_native_context_get_texture_from_2d(context: i64) -> i64 { - if context == 0 { - return 0; - } - - let context = context as *mut CanvasRenderingContext2D; - let context = unsafe { &mut *context }; - let mut ctx = context.get_context_mut(); - canvas_2d::snapshot_to_backend_texture(&mut ctx) - .map(|texture| Box::into_raw(Box::new(texture)) as i64) - .unwrap_or(0) -} - -#[no_mangle] -pub extern "C" fn canvas_native_context_backend_texture_get_id(texture: i64) -> u32 { - if texture == 0 { - return 0; - } - - let texture = texture as *const skia_safe::gpu::BackendTexture; - let texture = unsafe { &*texture }; - texture.gl_texture_info().map(|info| info.id).unwrap_or(0) -} - -#[no_mangle] -pub extern "C" fn canvas_native_context_backend_texture_destroy(texture: i64) { - if texture == 0 { - return; - } - - let texture = texture as *mut skia_safe::gpu::BackendTexture; - let _ = unsafe { Box::from_raw(texture) }; -} - -#[no_mangle] -pub extern "C" fn canvas_native_webgl_tex_image_2d( +pub extern "C" fn canvas_native_ios_webgl_tex_image_2d( context: i64, target: i32, level: i32, @@ -840,9 +455,9 @@ pub extern "C" fn canvas_native_webgl_tex_image_2d( } let bytes = unsafe { std::slice::from_raw_parts(bytes as _, size) }; - let gl_context = context as *mut iOSGLContext; + let gl_context = context as *mut WebGLState; let gl_context = unsafe { &*gl_context }; - gl_context.gl_context.make_current(); + gl_context.get_inner().make_current(); unsafe { if flip_y { @@ -882,7 +497,7 @@ pub extern "C" fn canvas_native_webgl_tex_image_2d( } #[no_mangle] -pub extern "C" fn canvas_native_webgl_tex_sub_image_2d( +pub extern "C" fn canvas_native_ios_webgl_tex_sub_image_2d( context: i64, target: i32, level: i32, @@ -901,9 +516,9 @@ pub extern "C" fn canvas_native_webgl_tex_sub_image_2d( } let bytes = unsafe { std::slice::from_raw_parts(bytes as _, size) }; - let gl_context = context as *mut iOSGLContext; + let gl_context = context as *mut WebGLState; let gl_context = unsafe { &*gl_context }; - gl_context.gl_context.make_current(); + gl_context.get_inner().make_current(); unsafe { if flip_y { diff --git a/crates/canvas-ios/src/mtl.rs b/crates/canvas-ios/src/mtl.rs new file mode 100644 index 000000000..0e9f7df0a --- /dev/null +++ b/crates/canvas-ios/src/mtl.rs @@ -0,0 +1,151 @@ +use canvas_c::webgpu::gpu::CanvasWebGPUInstance; +use canvas_c::{webgpu, CanvasRenderingContext2D}; +use std::ffi::{c_longlong, c_void}; +use std::ptr::NonNull; + +#[allow(dead_code)] +#[allow(non_camel_case_types)] +pub(crate) struct iOSWebGPUContext { + ios_view: NonNull, + +} + +#[no_mangle] +pub extern "C" fn canvas_native_ios_create_2d_context_metal( + view: *mut c_void, + alpha: bool, + density: f32, + samples: usize, + font_color: i32, + ppi: f32, + direction: i32, +) -> i64 { + let ctx_2d = CanvasRenderingContext2D::new_metal( + canvas_2d::context::Context::new_metal( + view, + density, + samples, + alpha, + font_color, + ppi, + canvas_2d::context::text_styles::text_direction::TextDirection::from(direction as u32), + ), + alpha, + ); + + Box::into_raw(Box::new(ctx_2d)) as i64 +} + +#[no_mangle] +pub extern "C" fn canvas_native_ios_create_2d_context_metal_device_queue( + view: *mut c_void, + device: *mut c_void, + queue: *mut c_void, + alpha: bool, + density: f32, + samples: usize, + font_color: i32, + ppi: f32, + direction: i32, +) -> i64 { + let ctx_2d = CanvasRenderingContext2D::new_metal( + canvas_2d::context::Context::new_metal_device_queue( + view, + device, + queue, + density, + samples, + alpha, + font_color, + ppi, + canvas_2d::context::text_styles::text_direction::TextDirection::from(direction as u32), + ), + alpha, + ); + + Box::into_raw(Box::new(ctx_2d)) as i64 +} + + +#[no_mangle] +pub extern "C" fn canvas_native_init_ios_webgpu( + instance: i64, + view: *mut c_void, + width: u32, + height: u32, +) -> c_longlong { + // let _ = env_logger::try_init(); + + if instance == 0 { + return 0; + } + + if let Some(view) = NonNull::new(view) { + let instance = instance as *mut CanvasWebGPUInstance; + return unsafe { + webgpu::gpu_canvas_context::canvas_native_webgpu_context_create( + instance, + view.as_ptr(), + width, + height, + ) as i64 + }; + } + + 0 +} + + +#[cfg(any(target_os = "macos"))] +#[no_mangle] +pub extern "C" fn canvas_native_init_ios_webgpu_nsview( + instance: i64, + view: *mut c_void, + width: u32, + height: u32, +) -> c_longlong { + // let _ = env_logger::try_init(); + + if instance == 0 { + return 0; + } + + if let Some(view) = NonNull::new(view) { + let instance = instance as *mut CanvasWebGPUInstance; + return unsafe { + webgpu::gpu_canvas_context::canvas_native_webgpu_context_create_nsview( + instance, + view.as_ptr(), + width, + height, + ) as i64 + }; + } + + 0 +} + +#[cfg(any(target_os = "ios"))] +#[no_mangle] +pub extern "C" fn canvas_native_resize_ios_webgpu_uiview( + context: i64, + view: *mut c_void, + width: u32, + height: u32, +) { + if context == 0 { + return; + } + + if let Some(view) = NonNull::new(view) { + let context = context as *mut webgpu::gpu_canvas_context::CanvasGPUCanvasContext; + unsafe { + webgpu::gpu_canvas_context::canvas_native_webgpu_context_resize_uiview( + context, + view.as_ptr(), + width, + height, + ); + }; + } +} \ No newline at end of file diff --git a/crates/canvas-svg/Cargo.toml b/crates/canvas-svg/Cargo.toml index 9199843ce..a6e9b1eeb 100644 --- a/crates/canvas-svg/Cargo.toml +++ b/crates/canvas-svg/Cargo.toml @@ -5,12 +5,12 @@ edition = "2021" [lib] name = "canvassvg" -crate-type = ["staticlib"] +crate-type = ["cdylib"] [dependencies] -skia-safe = { workspace = true, features = ["gl","svg", "textlayout"] } +skia-safe = { workspace = true, features = ["svg", "textlayout"] } [target.'cfg(target_os = "android")'.dependencies] -jni = "0.21.1" +jni = { workspace = true } ndk = { version = "0.7.0", features = ["bitmap"] } diff --git a/crates/canvas-svg/build.rs b/crates/canvas-svg/build.rs index ca8988484..4641ddd34 100644 --- a/crates/canvas-svg/build.rs +++ b/crates/canvas-svg/build.rs @@ -12,11 +12,14 @@ fn main() { println!("cargo:rerun-if-changed=src/android.rs"); } + #[allow(dead_code)] fn setup_x86_64_android_workaround() { let target_os = env::var("CARGO_CFG_TARGET_OS").expect("CARGO_CFG_TARGET_OS not set"); let target_arch = env::var("CARGO_CFG_TARGET_ARCH").expect("CARGO_CFG_TARGET_ARCH not set"); if target_arch == "x86_64" && target_os == "android" { + println!("cargo:rustc-link-arg=-Wl,-z,max-page-size=16384"); + /* let android_ndk_home = if let Ok(android_ndk_home) = env::var("ANDROID_NDK") { android_ndk_home } else { @@ -55,6 +58,8 @@ fn setup_x86_64_android_workaround() { } else { panic!("Path {linkpath} not exists"); } + + */ } } @@ -68,6 +73,7 @@ fn setup_aarch64_android_workaround() { env::var("ANDROID_NDK_HOME").expect("ANDROID_NDK_HOME not set") }; + let build_os = match env::consts::OS { "linux" => "linux", "macos" => "darwin", @@ -83,7 +89,12 @@ fn setup_aarch64_android_workaround() { let mut data = String::new(); let _ = android_version_txt.read_to_string(&mut data); let line = data.lines().take(1).next(); - line.unwrap_or("").to_string() + let mut line = line.unwrap_or("").to_string(); + // in ndk 27 the clang version is 18.0.1 but the directory is named 18 ... let tweak it + if android_ndk_home.contains("27.0.12077973") { + line = "18".to_string(); + } + line } else { DEFAULT_CLANG_VERSION.to_string() }; @@ -95,9 +106,21 @@ fn setup_aarch64_android_workaround() { ); let linkpath = format!("{android_ndk_home}/{linux_aarch64_lib_dir}"); + + + let linux_aarch64_lib_dir_other = format!( + "toolchains/llvm/prebuilt/{build_os}-x86_64/lib/clang/{clang_version}/lib/linux/" + ); + + println!("cargo:rustc-link-arg=-Wl,-z,max-page-size=16384"); + + let linkpath_other = format!("{android_ndk_home}/{linux_aarch64_lib_dir_other}"); if Path::new(&linkpath).exists() { println!("cargo:rustc-link-search={android_ndk_home}/{linux_aarch64_lib_dir}"); println!("cargo:rustc-link-lib=static=clang_rt.builtins-aarch64-android"); + }else if Path::new(&linkpath_other).exists(){ + println!("cargo:rustc-link-search={android_ndk_home}/{linux_aarch64_lib_dir_other}"); + println!("cargo:rustc-link-lib=static=clang_rt.builtins-aarch64-android"); } else { panic!("Path {linkpath} not exists"); } diff --git a/crates/canvas-svg/src/android.rs b/crates/canvas-svg/src/android.rs index 51f667a7a..9e5cc3a41 100644 --- a/crates/canvas-svg/src/android.rs +++ b/crates/canvas-svg/src/android.rs @@ -1,7 +1,7 @@ use std::ffi::c_void; use jni::objects::{JByteBuffer, JClass, JObject, JString}; -use jni::sys::jfloat; +use jni::sys::{jfloat, jint}; use jni::JNIEnv; use ndk::bitmap::AndroidBitmap; @@ -101,14 +101,14 @@ pub extern "system" fn Java_org_nativescript_canvas_svg_NSCSVG_nativeDrawSVGFrom _: JClass, bitmap: JObject, scale: jfloat, - bytes: &JByteBuffer, + bytes: JByteBuffer, ) { if bytes.is_null() { return; } if let (Ok(bytes), Ok(size)) = ( - env.get_direct_buffer_address(bytes), - env.get_direct_buffer_capacity(bytes), + env.get_direct_buffer_address(&bytes), + env.get_direct_buffer_capacity(&bytes), ) { let source = unsafe { std::slice::from_raw_parts_mut(bytes, size) }; @@ -142,3 +142,132 @@ pub extern "system" fn Java_org_nativescript_canvas_svg_NSCSVG_nativeDrawSVGFrom let _ = native_bitmap.unlock_pixels(); } } + + +#[no_mangle] +pub extern "system" fn Java_org_nativescript_canvas_svg_NSCSVG_nativeDrawSVGWithBuffer( + mut env: JNIEnv, + _: JClass, + buffer: JByteBuffer, + width: jint, + height: jint, + scale: jfloat, + svg: JString, +) { + if buffer.is_null() { + return; + } + if let Ok(svg) = env.get_string(&svg) { + let svg = svg.to_string_lossy(); + + if let (Ok(bytes), Ok(size)) = ( + env.get_direct_buffer_address(&buffer), + env.get_direct_buffer_capacity(&buffer), + ) { + let slice = unsafe { + std::slice::from_raw_parts_mut( + bytes, + size, + ) + }; + + let info = skia_safe::ImageInfo::new_n32_premul( + skia_safe::ISize::new(width as i32, height as i32), + None, + ); + if let Some(mut surface) = + skia_safe::surface::surfaces::wrap_pixels(&info, slice, None, None) + { + crate::draw_svg(&mut surface, svg.as_ref()) + } + } + } +} + +#[allow(non_snake_case)] +#[no_mangle] +pub extern "system" fn Java_org_nativescript_canvas_svg_NSCSVG_nativeDrawSVGFromPathWithBuffer( + mut env: JNIEnv, + _: JClass, + buffer: JByteBuffer, + width: jint, + height: jint, + scale: jfloat, + path: JString, +) { + if buffer.is_null() { + return; + } + + if let Ok(path) = env.get_string(&path) { + let path = path.to_string_lossy(); + + if buffer.is_null() { + return; + } + + + if let (Ok(bytes), Ok(size)) = ( + env.get_direct_buffer_address(&buffer), + env.get_direct_buffer_capacity(&buffer), + ) { + let slice = unsafe { + std::slice::from_raw_parts_mut( + bytes, + size, + ) + }; + + let info = skia_safe::ImageInfo::new_n32_premul( + skia_safe::ISize::new(width as i32, height as i32), + None, + ); + if let Some(mut surface) = + skia_safe::surface::surfaces::wrap_pixels(&info, slice, None, None) + { + crate::draw_svg_from_path(&mut surface, path.as_ref()) + } + } + } +} + +#[no_mangle] +pub extern "system" fn Java_org_nativescript_canvas_svg_NSCSVG_nativeDrawSVGFromBytesWithBuffer( + mut env: JNIEnv, + _: JClass, + buffer: JByteBuffer, + width: jint, + height: jint, + scale: jfloat, + bytes: JByteBuffer, +) { + if bytes.is_null() { + return; + } + if let (Ok(bytes), Ok(size), Ok(dst), Ok(dst_size)) = ( + env.get_direct_buffer_address(&bytes), + env.get_direct_buffer_capacity(&bytes), + env.get_direct_buffer_address(&buffer), + env.get_direct_buffer_capacity(&buffer), + ) { + let source = unsafe { std::slice::from_raw_parts_mut(bytes, size) }; + + let slice = unsafe { + std::slice::from_raw_parts_mut( + dst, + dst_size, + ) + }; + + let info = skia_safe::ImageInfo::new_n32_premul( + skia_safe::ISize::new(width as i32, height as i32), + None, + ); + if let Some(mut surface) = + skia_safe::surface::surfaces::wrap_pixels(&info, slice, None, None) + { + // surface.canvas().scale((scale, scale)); + crate::draw_svg_from_bytes(&mut surface, source); + } + } +} diff --git a/crates/canvas-svg/src/ios.rs b/crates/canvas-svg/src/ios.rs index 86793c983..ea3b40683 100644 --- a/crates/canvas-svg/src/ios.rs +++ b/crates/canvas-svg/src/ios.rs @@ -1,6 +1,41 @@ use std::ffi::CStr; use std::os::raw::c_char; + +#[no_mangle] +pub extern "C" fn canvas_native_svg_draw_from_bytes( + data: *mut u8, + size: usize, + width: f32, + height: f32, + scale: f32, + svg_data: *const u8, + svg_size: usize, +) { + if data.is_null() || size == 0 || svg_data.is_null() || svg_size == 0 { + return; + } + + let slice = unsafe { std::slice::from_raw_parts_mut(data, size) }; + + + + let info = skia_safe::ImageInfo::new( + skia_safe::ISize::new(width as i32, height as i32), + skia_safe::ColorType::RGBA8888, + skia_safe::AlphaType::Unpremul, + None, + ); + + let svg = unsafe { std::slice::from_raw_parts(svg_data, svg_size) }; + + if let Some(mut surface) = skia_safe::surface::surfaces::wrap_pixels(&info, slice, None, None) { + // surface.canvas().scale((scale, scale)); + crate::draw_svg_from_bytes(&mut surface, svg) + } +} + + #[no_mangle] pub extern "C" fn canvas_native_svg_draw_from_string( data: *mut u8, @@ -18,8 +53,10 @@ pub extern "C" fn canvas_native_svg_draw_from_string( let svg = unsafe { CStr::from_ptr(svg) }; - let info = skia_safe::ImageInfo::new_n32_premul( + let info = skia_safe::ImageInfo::new( skia_safe::ISize::new(width as i32, height as i32), + skia_safe::ColorType::RGBA8888, + skia_safe::AlphaType::Unpremul, None, ); @@ -48,8 +85,10 @@ pub extern "C" fn canvas_native_svg_draw_from_path( let path = unsafe { CStr::from_ptr(path) }; - let info = skia_safe::ImageInfo::new_n32_premul( + let info = skia_safe::ImageInfo::new( skia_safe::ISize::new(width as i32, height as i32), + skia_safe::ColorType::RGBA8888, + skia_safe::AlphaType::Unpremul, None, ); diff --git a/crates/canvas-webgl/Cargo.toml b/crates/canvas-webgl/Cargo.toml index 561c5039c..63da47827 100644 --- a/crates/canvas-webgl/Cargo.toml +++ b/crates/canvas-webgl/Cargo.toml @@ -6,4 +6,5 @@ edition = "2021" [dependencies] parking_lot.workspace = true canvas-core.workspace = true -gl-bindings.workspace = true \ No newline at end of file +gl-bindings.workspace = true +raw-window-handle.workspace = true \ No newline at end of file diff --git a/crates/canvas-webgl/src/prelude.rs b/crates/canvas-webgl/src/prelude.rs index 1963989cc..16c9ecb2d 100644 --- a/crates/canvas-webgl/src/prelude.rs +++ b/crates/canvas-webgl/src/prelude.rs @@ -5,13 +5,14 @@ use std::cell::{Ref, RefCell, RefMut}; use std::ffi::CString; use std::os::raw::c_void; +use std::ptr::NonNull; use std::rc::Rc; use canvas_core::context_attributes::PowerPreference; -use canvas_core::gl::GLContext; +use canvas_core::context_attributes::ContextAttributes; pub fn get_sdk_version() -> i32 { - return 18; + 18 } /* Pixel storage modes */ @@ -101,72 +102,10 @@ impl TryFrom for WebGLVersion { } } -#[derive(Copy, Clone, PartialOrd, PartialEq, Debug)] -pub enum WebGLPowerPreference { - Default, - HighPerformance, - LowPower, -} - -impl TryFrom for WebGLPowerPreference { - type Error = &'static str; - - fn try_from(value: i32) -> Result { - match value { - 0 => Ok(Self::Default), - 1 => Ok(Self::HighPerformance), - 2 => Ok(Self::LowPower), - _ => Err("Invalid value!"), - } - } -} - -impl Into for WebGLPowerPreference { - fn into(self) -> PowerPreference { - match self { - WebGLPowerPreference::Default => PowerPreference::Default, - WebGLPowerPreference::HighPerformance => PowerPreference::HighPerformance, - WebGLPowerPreference::LowPower => PowerPreference::LowPower, - } - } -} - -impl From for WebGLPowerPreference { - fn from(value: PowerPreference) -> Self { - match value { - PowerPreference::Default => WebGLPowerPreference::Default, - PowerPreference::HighPerformance => WebGLPowerPreference::HighPerformance, - PowerPreference::LowPower => WebGLPowerPreference::LowPower, - } - } -} - -impl Into for WebGLPowerPreference { - fn into(self) -> i32 { - match self { - WebGLPowerPreference::Default => 0, - WebGLPowerPreference::HighPerformance => 1, - WebGLPowerPreference::LowPower => 2, - } - } -} - -#[derive(Debug)] +#[derive(Debug, Clone)] pub(crate) struct WebGLStateInner { version: WebGLVersion, - pub(crate) gl_context: GLContext, flip_y: bool, - alpha: bool, - antialias: bool, - depth: bool, - fail_if_major_performance_caveat: bool, - power_preference: WebGLPowerPreference, - premultiplied_alpha: bool, - preserve_drawing_buffer: bool, - stencil: bool, - desynchronized: bool, - xr_compatible: bool, - is_canvas: bool, clear_stencil: i32, clear_color: [f32; 4], scissor_enabled: bool, @@ -183,7 +122,11 @@ pub(crate) struct WebGLStateInner { } #[derive(Debug)] -pub struct WebGLState(pub Rc>); +pub struct WebGLState { + pub(crate) context: canvas_core::gpu::gl::GLContext, + pub(crate) state: Rc>, + pub(crate) attributes: Rc>, +} impl WebGLState { pub(crate) fn resized(&mut self) { @@ -191,58 +134,96 @@ impl WebGLState { //state.gl_context = GLContext::get_current(); } - fn get(&self) -> Ref { - Ref::map(self.0.borrow(), |v| v) + fn get_state(&self) -> Ref { + Ref::map(self.state.borrow(), |v| v) } - fn get_mut(&self) -> RefMut { - RefMut::map(self.0.borrow_mut(), |v| v) + fn get_state_mut(&self) -> RefMut { + RefMut::map(self.state.borrow_mut(), |v| v) } - pub fn new_with_context(context: GLContext, version: WebGLVersion) -> Self { + fn get_attributes(&self) -> Ref { + Ref::map(self.attributes.borrow(), |v| v) + } + + fn get_attributes_mut(&self) -> RefMut { + RefMut::map(self.attributes.borrow_mut(), |v| v) + } + + #[cfg(not(target_os = "android"))] + pub fn set_surface(&mut self, view: NonNull) -> bool { + self.context.set_surface(view) + } + + #[cfg(target_os = "android")] + pub fn set_surface(&mut self, width: i32, height: i32, window: NonNull) -> bool { + let attr = &mut *self.attributes.borrow_mut(); + let handle = raw_window_handle::AndroidNdkWindowHandle::new(window); + let handle = raw_window_handle::RawWindowHandle::AndroidNdk(handle); + self.context.set_surface(attr, width, height, handle) + } + + #[cfg(target_os = "android")] + pub fn set_window_surface(&mut self, width: i32, height: i32, window: NonNull) { + let attr = &mut *self.attributes.borrow_mut(); + let handle = raw_window_handle::AndroidNdkWindowHandle::new(window); + let handle = raw_window_handle::RawWindowHandle::AndroidNdk(handle); + self.context.set_window_surface(attr, width, height, handle); + } + + #[cfg(target_os = "android")] + pub fn resize_pbuffer(&mut self, width: i32, height: i32) { + let attr = &mut *self.attributes.borrow_mut(); + self.context.resize_pbuffer(attr, width, height); + } + + pub fn new_with_context(context: canvas_core::gpu::gl::GLContext, version: WebGLVersion) -> Self { context.make_current(); - let mut ctx = Self(Rc::new(RefCell::new(WebGLStateInner { - version, - alpha: true, - antialias: true, - depth: true, - fail_if_major_performance_caveat: false, - power_preference: WebGLPowerPreference::Default, - premultiplied_alpha: true, - preserve_drawing_buffer: false, - stencil: false, - desynchronized: false, - xr_compatible: false, - is_canvas: false, - gl_context: context, - clear_stencil: 0, - clear_color: [0., 0., 0., 0.], - scissor_enabled: false, - clear_depth: 1., - color_mask: [true, true, true, true], - stencil_mask: 0xFFFFFFFF, - stencil_mask_back: 0xFFFFFFFF, - stencil_func_ref: 0, - stencil_func_ref_back: 0, - stencil_func_mask: 0xFFFFFFFF, - stencil_func_mask_back: 0xFFFFFFFF, - depth_mask: true, - flip_y: false, - unpack_colorspace_conversion_webgl: WEBGL_BROWSER_DEFAULT_WEBGL as i32, - }))); - ctx.make_current(); - // crate::webgl::restore_state_after_clear(&mut ctx); - ctx + Self { + context, + attributes: Rc::new(RefCell::new( + ContextAttributes::new( + true, + true, + true, + false, + PowerPreference::Default, + true, + false, + false, + false, + false, + false, + ) + )), + state: Rc::new(RefCell::new(WebGLStateInner { + version, + clear_stencil: 0, + clear_color: [0., 0., 0., 0.], + scissor_enabled: false, + clear_depth: 1., + color_mask: [true, true, true, true], + stencil_mask: 0xFFFFFFFF, + stencil_mask_back: 0xFFFFFFFF, + stencil_func_ref: 0, + stencil_func_ref_back: 0, + stencil_func_mask: 0xFFFFFFFF, + stencil_func_mask_back: 0xFFFFFFFF, + depth_mask: true, + flip_y: false, + unpack_colorspace_conversion_webgl: WEBGL_BROWSER_DEFAULT_WEBGL as i32, + })), + } } pub fn new_with_context_attributes( - context: GLContext, + context: canvas_core::gpu::gl::GLContext, version: WebGLVersion, alpha: bool, antialias: bool, depth: bool, fail_if_major_performance_caveat: bool, - power_preference: WebGLPowerPreference, + power_preference: PowerPreference, premultiplied_alpha: bool, preserve_drawing_buffer: bool, stencil: bool, @@ -251,42 +232,36 @@ impl WebGLState { is_canvas: bool, ) -> Self { context.make_current(); - let mut ctx = Self(Rc::new(RefCell::new(WebGLStateInner { - version, - alpha, - antialias, - depth, - fail_if_major_performance_caveat, - power_preference, - premultiplied_alpha, - preserve_drawing_buffer, - stencil, - desynchronized, - xr_compatible, - is_canvas, - gl_context: context, - clear_stencil: 0, - clear_color: [0., 0., 0., 0.], - scissor_enabled: false, - clear_depth: 1., - color_mask: [true, true, true, true], - stencil_mask: 0xFFFFFFFF, - stencil_mask_back: 0xFFFFFFFF, - stencil_func_ref: 0, - stencil_func_ref_back: 0, - stencil_func_mask: 0xFFFFFFFF, - stencil_func_mask_back: 0xFFFFFFFF, - depth_mask: true, - flip_y: false, - unpack_colorspace_conversion_webgl: WEBGL_BROWSER_DEFAULT_WEBGL as i32, - }))); - // crate::webgl::restore_state_after_clear(&mut ctx); - ctx + Self { + context, + attributes: Rc::new(RefCell::new(ContextAttributes::new( + alpha, antialias, depth, fail_if_major_performance_caveat, + power_preference, premultiplied_alpha, + preserve_drawing_buffer, stencil, desynchronized, xr_compatible, is_canvas, + ))), + state: Rc::new(RefCell::new(WebGLStateInner { + version, + clear_stencil: 0, + clear_color: [0., 0., 0., 0.], + scissor_enabled: false, + clear_depth: 1., + color_mask: [true, true, true, true], + stencil_mask: 0xFFFFFFFF, + stencil_mask_back: 0xFFFFFFFF, + stencil_func_ref: 0, + stencil_func_ref_back: 0, + stencil_func_mask: 0xFFFFFFFF, + stencil_func_mask_back: 0xFFFFFFFF, + depth_mask: true, + flip_y: false, + unpack_colorspace_conversion_webgl: WEBGL_BROWSER_DEFAULT_WEBGL as i32, + })), + } } #[cfg(target_os = "ios")] pub fn snapshot(&self) -> Option> { - self.get().gl_context.snapshot() + self.context.snapshot() } // pub(crate) fn get_context(&self) -> &GLContext { @@ -294,275 +269,224 @@ impl WebGLState { // } pub fn get_drawing_buffer_width(&self) -> i32 { - self.get().gl_context.get_surface_width() + self.context.get_surface_width() } pub fn get_drawing_buffer_height(&self) -> i32 { - self.get().gl_context.get_surface_height() + self.context.get_surface_height() } pub fn get_dimensions(&self) -> (i32, i32) { - self.get().gl_context.get_surface_dimensions() + self.context.get_surface_dimensions() } pub(crate) fn set_antialias(&self, value: bool) { - self.get_mut().antialias = value; + self.get_attributes_mut().set_antialias(value); } pub(crate) fn set_alpha(&self, value: bool) { - self.get_mut().alpha = value; + self.get_attributes_mut().set_alpha(value); } pub(crate) fn set_webgl_version(&self, version: WebGLVersion) { - self.get_mut().version = version; + self.get_state_mut().version = version; } - pub(crate) fn set_gl_context(&mut self, context: GLContext) { - self.get_mut().gl_context = context; + pub(crate) fn set_gl_context(&mut self, context: canvas_core::gpu::gl::GLContext) { + self.context = context; } pub fn get_webgl_version(&self) -> WebGLVersion { - self.get().version + self.get_state().version } pub fn get_context_attributes(&self) -> ContextAttributes { - let lock = self.get(); - ContextAttributes { - alpha: lock.alpha, - antialias: lock.antialias, - depth: lock.depth, - fail_if_major_performance_caveat: lock.fail_if_major_performance_caveat, - power_preference: lock.power_preference, - premultiplied_alpha: lock.premultiplied_alpha, - preserve_drawing_buffer: lock.preserve_drawing_buffer, - stencil: lock.stencil, - desynchronized: lock.desynchronized, - xr_compatible: lock.xr_compatible, - is_canvas: lock.is_canvas, - } + let attributes = self.get_attributes_mut(); + *attributes } pub fn set_clear_color(&mut self, colors: [f32; 4]) { - self.get_mut().clear_color = colors; + self.get_state_mut().clear_color = colors; } pub fn set_stencil_mask(&mut self, mask: u32) { - self.get_mut().stencil_mask = mask; + self.get_state_mut().stencil_mask = mask; } pub fn set_stencil_mask_back(&mut self, mask: u32) { - self.get_mut().stencil_mask_back = mask; + self.get_state_mut().stencil_mask_back = mask; } pub fn set_clear_depth(&mut self, depth: f32) { - self.get_mut().clear_depth = depth; + self.get_state_mut().clear_depth = depth; } pub fn set_clear_stencil(&mut self, stencil: i32) { - self.get_mut().clear_stencil = stencil; + self.get_state_mut().clear_stencil = stencil; } pub fn set_color_mask(&mut self, mask: [bool; 4]) { - self.get_mut().color_mask = mask; + self.get_state_mut().color_mask = mask; } pub fn set_stencil_func_ref(&mut self, reference: i32) { - self.get_mut().stencil_func_ref = reference; + self.get_state_mut().stencil_func_ref = reference; } pub fn set_stencil_func_ref_back(&mut self, reference: i32) { - self.get_mut().stencil_func_ref_back = reference; + self.get_state_mut().stencil_func_ref_back = reference; } pub fn set_stencil_func_mask(&mut self, mask: u32) { - self.get_mut().stencil_func_mask = mask; + self.get_state_mut().stencil_func_mask = mask; } pub fn set_stencil_func_mask_back(&mut self, mask: u32) { - self.get_mut().stencil_func_mask_back = mask; + self.get_state_mut().stencil_func_mask_back = mask; } pub fn set_premultiplied_alpha(&mut self, premultiply: bool) { - self.get_mut().premultiplied_alpha = premultiply; + self.get_attributes_mut().set_premultiplied_alpha(premultiply); } pub fn set_unpack_colorspace_conversion_webgl(&mut self, color_space: i32) { - self.get_mut().unpack_colorspace_conversion_webgl = color_space; + self.get_state_mut().unpack_colorspace_conversion_webgl = color_space; } pub fn set_flip_y(&mut self, flip: bool) { - self.get_mut().flip_y = flip; + self.get_state_mut().flip_y = flip; } pub fn get_alpha(&self) -> bool { - self.get().alpha + self.get_attributes().get_alpha() } pub fn get_antialias(&self) -> bool { - self.get().antialias + self.get_attributes().get_antialias() } pub fn get_depth(&self) -> bool { - self.get().depth + self.get_attributes().get_depth() } pub fn get_fail_if_major_performance_caveat(&self) -> bool { - self.get().fail_if_major_performance_caveat + self.get_attributes().get_fail_if_major_performance_caveat() } - pub fn get_power_preference(&self) -> WebGLPowerPreference { - self.get().power_preference + pub fn get_power_preference(&self) -> PowerPreference { + self.get_attributes().get_power_preference() } pub fn get_premultiplied_alpha(&self) -> bool { - self.get().premultiplied_alpha + self.get_attributes().get_premultiplied_alpha() } pub fn get_preserve_drawing_buffer(&self) -> bool { - self.get().preserve_drawing_buffer + self.get_attributes().get_preserve_drawing_buffer() } pub fn get_stencil(&self) -> bool { - self.get().stencil + self.get_attributes().get_stencil() } pub fn get_desynchronized(&self) -> bool { - self.get().desynchronized + self.get_attributes().get_desynchronized() } pub fn get_xr_compatible(&self) -> bool { - self.get().xr_compatible + self.get_attributes().get_xr_compatible() } pub fn get_scissor_enabled(&self) -> bool { - self.get().scissor_enabled + self.get_state().scissor_enabled } pub fn get_depth_mask(&self) -> bool { - self.get().depth_mask + self.get_state().depth_mask } pub fn get_clear_stencil(&self) -> i32 { - self.get().clear_stencil + self.get_state().clear_stencil } pub fn get_stencil_mask(&self) -> u32 { - self.get().stencil_mask + self.get_state().stencil_mask } pub fn get_clear_color(&self) -> [f32; 4] { - self.get().clear_color + self.get_state().clear_color } pub fn get_color_mask(&self) -> [bool; 4] { - self.get().color_mask + self.get_state().color_mask } pub fn get_clear_depth(&self) -> f32 { - self.get().clear_depth + self.get_state().clear_depth } pub fn get_flip_y(&self) -> bool { - self.get().flip_y + self.get_state().flip_y } pub fn get_unpack_colorspace_conversion_webgl(&self) -> i32 { - self.get().unpack_colorspace_conversion_webgl + self.get_state().unpack_colorspace_conversion_webgl } pub fn drawing_buffer_width(&self) -> i32 { - self.get().gl_context.get_surface_width() + self.get_drawing_buffer_width() } pub fn drawing_buffer_height(&self) -> i32 { - self.get().gl_context.get_surface_height() + self.get_drawing_buffer_height() } pub fn make_current(&self) -> bool { - self.get().gl_context.make_current() + self.context.make_current() } pub fn swap_buffers(&self) -> bool { - self.get().gl_context.swap_buffers() + self.context.swap_buffers() } pub fn make_current_and_swap_buffers(&self) -> bool { - let current = self.get(); - if !current.gl_context.make_current() { + if !self.context.make_current() { return false; } - return current.gl_context.swap_buffers(); + self.context.swap_buffers() } pub fn remove_if_current(&self) { - self.get().gl_context.remove_if_current(); - } - - pub fn init_transfer_surface(&mut self, texture_id: u32) { - let mut lock = self.get(); - lock.gl_context - .get_transfer_surface_info_mut() - .init(texture_id); - } - - pub fn draw_tex_image_2d( - &mut self, - target: u32, - level: i32, - width: u32, - height: u32, - internal_format: i32, - format: i32, - flip_y_webgl: bool, - texture_id: u32, - ) { - let mut lock = self.get(); - lock.gl_context - .get_transfer_surface_info_mut() - .draw_tex_image_2d( - target, - level, - width, - height, - internal_format, - format, - flip_y_webgl, - texture_id, - ); - } -} - -impl Clone for WebGLState { - fn clone(&self) -> Self { - Self(Rc::clone(&self.0)) - } - - fn clone_from(&mut self, source: &Self) { - self.0 = Rc::clone(&source.0) + self.context.remove_if_current(); } } impl Default for WebGLState { fn default() -> Self { - Self(Rc::new(RefCell::new(WebGLStateInner { - version: WebGLVersion::NONE, - alpha: true, - antialias: true, - depth: true, - fail_if_major_performance_caveat: false, - power_preference: WebGLPowerPreference::Default, - premultiplied_alpha: true, - preserve_drawing_buffer: false, - stencil: false, - desynchronized: false, - xr_compatible: false, - is_canvas: false, - gl_context: Default::default(), - clear_stencil: 0, - clear_color: [0., 0., 0., 0.], - scissor_enabled: false, - clear_depth: 1., - color_mask: [true, true, true, true], - stencil_mask: 0xFFFFFFFF, - stencil_mask_back: 0xFFFFFFFF, - stencil_func_ref: 0, - stencil_func_ref_back: 0, - stencil_func_mask: 0xFFFFFFFF, - stencil_func_mask_back: 0xFFFFFFFF, - depth_mask: true, - flip_y: false, - unpack_colorspace_conversion_webgl: WEBGL_BROWSER_DEFAULT_WEBGL as i32, - }))) + Self { + context: Default::default(), + attributes: Rc::new(RefCell::new( + ContextAttributes::new( + true, true, + true, + false, + PowerPreference::Default, + true, + false, + false, + false, + false, + false, + ) + )), + state: Rc::new(RefCell::new(WebGLStateInner { + version: WebGLVersion::NONE, + clear_stencil: 0, + clear_color: [0., 0., 0., 0.], + scissor_enabled: false, + clear_depth: 1., + color_mask: [true, true, true, true], + stencil_mask: 0xFFFFFFFF, + stencil_mask_back: 0xFFFFFFFF, + stencil_func_ref: 0, + stencil_func_ref_back: 0, + stencil_func_mask: 0xFFFFFFFF, + stencil_func_mask_back: 0xFFFFFFFF, + depth_mask: true, + flip_y: false, + unpack_colorspace_conversion_webgl: WEBGL_BROWSER_DEFAULT_WEBGL as i32, + })), + } } } @@ -678,120 +602,6 @@ impl Default for WebGLFramebufferAttachmentParameter { } } -pub struct ContextAttributes { - alpha: bool, - antialias: bool, - depth: bool, - fail_if_major_performance_caveat: bool, - power_preference: WebGLPowerPreference, - premultiplied_alpha: bool, - preserve_drawing_buffer: bool, - stencil: bool, - desynchronized: bool, - xr_compatible: bool, - is_canvas: bool, -} - -impl ContextAttributes { - pub fn new( - alpha: bool, - antialias: bool, - depth: bool, - fail_if_major_performance_caveat: bool, - power_preference: WebGLPowerPreference, - premultiplied_alpha: bool, - preserve_drawing_buffer: bool, - stencil: bool, - desynchronized: bool, - xr_compatible: bool, - is_canvas: bool, - ) -> Self { - Self { - alpha, - antialias, - depth, - fail_if_major_performance_caveat, - power_preference, - premultiplied_alpha, - preserve_drawing_buffer, - stencil, - desynchronized, - xr_compatible, - is_canvas, - } - } - - pub fn get_is_canvas(&self) -> bool { - self.is_canvas - } - pub fn get_alpha(&self) -> bool { - self.alpha - } - pub fn get_antialias(&self) -> bool { - self.antialias - } - pub fn get_depth(&self) -> bool { - self.depth - } - pub fn get_fail_if_major_performance_caveat(&self) -> bool { - self.fail_if_major_performance_caveat - } - pub fn get_power_preference(&self) -> WebGLPowerPreference { - self.power_preference - } - pub fn get_premultiplied_alpha(&self) -> bool { - self.premultiplied_alpha - } - pub fn get_preserve_drawing_buffer(&self) -> bool { - self.preserve_drawing_buffer - } - pub fn get_stencil(&self) -> bool { - self.stencil - } - pub fn get_desynchronized(&self) -> bool { - self.desynchronized - } - pub fn get_xr_compatible(&self) -> bool { - self.xr_compatible - } - - pub fn set_alpha(&mut self, value: bool) { - self.alpha = value; - } - pub fn set_antialias(&mut self, value: bool) { - self.antialias = value; - } - pub fn set_depth(&mut self, value: bool) { - self.depth = value; - } - pub fn set_fail_if_major_performance_caveat(&mut self, value: bool) { - self.fail_if_major_performance_caveat = value; - } - - pub fn set_power_preference(&mut self, value: WebGLPowerPreference) { - self.power_preference = value; - } - - pub fn set_premultiplied_alpha(&mut self, value: bool) { - self.premultiplied_alpha = value; - } - - pub fn set_preserve_drawing_buffer(&mut self, value: bool) { - self.preserve_drawing_buffer = value; - } - pub fn set_stencil(&mut self, value: bool) { - self.stencil = value; - } - - pub fn set_desynchronized(&mut self, value: bool) { - self.desynchronized = value; - } - - pub fn set_xr_compatible(&mut self, value: bool) { - self.xr_compatible = value; - } -} - pub trait WebGLExtension { fn extension_type(&self) -> WebGLExtensionType; } @@ -869,7 +679,7 @@ impl WebGLExtension for EXT_color_buffer_half_float { #[derive(Clone)] pub struct EXT_disjoint_timer_query { - webgl_state: WebGLState, + context: canvas_core::gpu::gl::GLContextRaw, query_counter_bits_ext: u32, current_query_ext: u32, query_result_ext: u32, @@ -880,7 +690,7 @@ pub struct EXT_disjoint_timer_query { } impl EXT_disjoint_timer_query { - pub fn new(state: WebGLState) -> Self { + pub fn new(state: &WebGLState) -> Self { let query_counter_bits_ext = gl_bindings::QUERY_COUNTER_BITS_EXT; let current_query_ext = gl_bindings::CURRENT_QUERY; let query_result_ext = gl_bindings::QUERY_RESULT; @@ -890,7 +700,7 @@ impl EXT_disjoint_timer_query { let gpu_disjoint_ext = 0x8FBB; Self { - webgl_state: state, + context: state.context.as_raw(), query_counter_bits_ext, current_query_ext, query_result_ext, @@ -902,30 +712,30 @@ impl EXT_disjoint_timer_query { } pub fn create_query_ext(&self) -> u32 { - self.webgl_state.make_current(); + self.context.make_current(); let mut query = [0u32; 1]; unsafe { gl_bindings::GenQueries(1, query.as_mut_ptr()) } query[0] } pub fn delete_query_ext(&self, query: u32) { - self.webgl_state.make_current(); + self.context.make_current(); let query = [query]; unsafe { gl_bindings::DeleteQueries(1, query.as_ptr()) } } pub fn is_query_ext(&self, query: u32) -> bool { - self.webgl_state.make_current(); + self.context.make_current(); unsafe { gl_bindings::IsQuery(query) == 1 } } pub fn begin_query_ext(&self, target: u32, query: u32) { - self.webgl_state.make_current(); + self.context.make_current(); unsafe { gl_bindings::BeginQuery(target, query) } } pub fn end_query_ext(&self, target: u32) { - self.webgl_state.make_current(); + self.context.make_current(); unsafe { gl_bindings::EndQuery(target) } } @@ -934,12 +744,14 @@ impl EXT_disjoint_timer_query { } pub fn get_query_ext(&self, target: u32, pname: u32) -> i32 { + self.context.make_current(); let mut query = [0i32; 1]; unsafe { gl_bindings::GetQueryiv(target, pname, query.as_mut_ptr()) } - return query[0]; + query[0] } pub fn get_query_object_ext(&self, target: u32, pname: u32) -> WebGLResult { + self.context.make_current(); let mut query = [0i32; 1]; unsafe { gl_bindings::GetQueryiv(target, pname, query.as_mut_ptr()) } if pname == gl_bindings::QUERY_RESULT_AVAILABLE { @@ -1160,38 +972,38 @@ impl WebGLExtension for OES_texture_half_float_linear { #[derive(Clone)] pub struct OES_vertex_array_object { - webgl_state: WebGLState, + context: canvas_core::gpu::gl::GLContextRaw, vertex_array_binding_oes: u32, } impl OES_vertex_array_object { - pub fn new(state: WebGLState) -> Self { + pub fn new(state: &WebGLState) -> Self { Self { - webgl_state: state, + context: state.context.as_raw(), vertex_array_binding_oes: gl_bindings::VERTEX_ARRAY_BINDING, } } pub fn create_vertex_array_oes(&self) -> u32 { - self.webgl_state.make_current(); + self.context.make_current(); let mut array = [0u32; 1]; unsafe { gl_bindings::GenVertexArrays(1, array.as_mut_ptr()) }; - return array[0]; + array[0] } pub fn delete_vertex_array_oes(&self, array_object: u32) { - self.webgl_state.make_current(); + self.context.make_current(); let array = [array_object]; unsafe { gl_bindings::DeleteVertexArrays(1, array.as_ptr()) }; } pub fn is_vertex_array_oes(&self, array_object: u32) -> bool { - self.webgl_state.make_current(); + self.context.make_current(); unsafe { gl_bindings::IsVertexArray(array_object) != 0 } } pub fn bind_vertex_array_oes(&self, array_object: u32) { - self.webgl_state.make_current(); + self.context.make_current(); unsafe { gl_bindings::BindVertexArray(array_object) } } } @@ -1243,7 +1055,7 @@ impl WEBGL_compressed_texture_atc { compressed_rgb_atc_webgl: gl_bindings::ATC_RGB_AMD, compressed_rgba_atc_explicit_alpha_webgl: gl_bindings::ATC_RGBA_EXPLICIT_ALPHA_AMD, compressed_rgba_atc_interpolated_alpha_webgl: - gl_bindings::ATC_RGBA_INTERPOLATED_ALPHA_AMD, + gl_bindings::ATC_RGBA_INTERPOLATED_ALPHA_AMD, } } } @@ -1395,19 +1207,19 @@ impl WebGLExtension for WEBGL_compressed_texture_pvrtc { #[derive(Clone)] pub struct WEBGL_lose_context { - webgl_state: WebGLState, + context: canvas_core::gpu::gl::GLContextRaw, } impl WEBGL_lose_context { - pub fn new(state: WebGLState) -> Self { - Self { webgl_state: state } + pub fn new(state: &WebGLState) -> Self { + Self { context: state.context.as_raw() } } pub fn lose_context(&self) { - self.webgl_state.remove_if_current(); + self.context.remove_if_current(); } pub fn restore_context(&self) { - self.webgl_state.make_current(); + self.context.make_current(); } } @@ -1419,19 +1231,19 @@ impl WebGLExtension for WEBGL_lose_context { #[derive(Clone)] pub struct ANGLE_instanced_arrays { - webgl_state: WebGLState, + context: canvas_core::gpu::gl::GLContextRaw, vertex_attrib_array_divisor_angle: u32, } impl ANGLE_instanced_arrays { - pub fn new(state: WebGLState) -> Self { + pub fn new(state: &WebGLState) -> Self { Self { - webgl_state: state, + context: state.context.as_raw(), vertex_attrib_array_divisor_angle: gl_bindings::VERTEX_ATTRIB_ARRAY_DIVISOR, } } pub fn draw_arrays_instanced_angle(&self, mode: u32, first: i32, count: i32, primcount: i32) { - self.webgl_state.make_current(); + self.context.make_current(); unsafe { gl_bindings::DrawArraysInstanced(mode, first, count, primcount) } } @@ -1443,7 +1255,7 @@ impl ANGLE_instanced_arrays { offset: i32, primcount: i32, ) { - self.webgl_state.make_current(); + self.context.make_current(); unsafe { gl_bindings::DrawElementsInstanced( mode, @@ -1456,7 +1268,7 @@ impl ANGLE_instanced_arrays { } pub fn vertex_attrib_divisor_angle(&self, index: u32, divisor: u32) { - self.webgl_state.make_current(); + self.context.make_current(); unsafe { gl_bindings::VertexAttribDivisor(index, divisor) } } } @@ -1487,7 +1299,7 @@ impl WebGLExtension for WEBGL_depth_texture { #[derive(Clone)] pub struct WEBGL_draw_buffers { - webgl_state: WebGLState, + context: canvas_core::gpu::gl::GLContextRaw, color_attachment0_webgl: u32, color_attachment1_webgl: u32, color_attachment2_webgl: u32, @@ -1525,9 +1337,9 @@ pub struct WEBGL_draw_buffers { } impl WEBGL_draw_buffers { - pub fn new(state: WebGLState) -> Self { + pub fn new(state: &WebGLState) -> Self { Self { - webgl_state: state, + context: state.context.as_raw(), color_attachment0_webgl: gl_bindings::COLOR_ATTACHMENT0, color_attachment1_webgl: gl_bindings::COLOR_ATTACHMENT1, color_attachment2_webgl: gl_bindings::COLOR_ATTACHMENT2, @@ -1566,7 +1378,7 @@ impl WEBGL_draw_buffers { } pub fn draw_buffers_webgl(&self, buffers: &[u32]) { - self.webgl_state.make_current(); + self.context.make_current(); unsafe { gl_bindings::DrawBuffers(buffers.len().try_into().unwrap(), buffers.as_ptr()) } } } diff --git a/crates/canvas-webgl/src/utils/gl.rs b/crates/canvas-webgl/src/utils/gl.rs index dbf1eb442..d7aad4f2d 100644 --- a/crates/canvas-webgl/src/utils/gl.rs +++ b/crates/canvas-webgl/src/utils/gl.rs @@ -1,5 +1,3 @@ -use ::core::{convert::TryInto, mem}; - const GL_UNSIGNED_BYTE: u32 = 0x1401; const GL_FLOAT: u32 = 0x1406; const GL_HALF_FLOAT: u32 = 0x140B; @@ -80,13 +78,13 @@ fn flip_pixels(pixels: &'_ mut [u8], rows: usize) { type SwapBlock = [u8; SWAP_SIZE]; let i_top: &mut SwapBlock = i_top.try_into().unwrap(); let i_bot: &mut SwapBlock = i_bot.try_into().unwrap(); - mem::swap(i_top, i_bot); + std::mem::swap(i_top, i_bot); } for (b_top, b_bot) in Iterator::zip( i_tops.into_remainder().iter_mut(), i_bots.into_remainder().iter_mut(), ) { - mem::swap(b_top, b_bot); + std::mem::swap(b_top, b_bot); } } } @@ -100,7 +98,7 @@ fn flip_pixels_integer(pixels: &'_ mut [u32], rows: usize) { for (top, bot) in top_rows.zip(bot_rows) { for (i_top, i_bot) in Iterator::zip(top.iter_mut(), bot.iter_mut()) { - mem::swap(i_top, i_bot); + std::mem::swap(i_top, i_bot); } } } diff --git a/crates/canvas-webgl/src/webgl.rs b/crates/canvas-webgl/src/webgl.rs index afd0312e7..81ee75d8b 100644 --- a/crates/canvas-webgl/src/webgl.rs +++ b/crates/canvas-webgl/src/webgl.rs @@ -3,7 +3,7 @@ use std::ffi::{CStr, CString}; use std::os::raw::{c_char, c_uchar, c_void}; - +use canvas_core::context_attributes::ContextAttributes; use canvas_core::image_asset::ImageAsset; use crate::prelude::*; @@ -69,8 +69,7 @@ pub fn canvas_native_webgl_bind_frame_buffer( state.make_current(); // will bind to default buffer if framebuffer == 0 { - let inner = state.0.borrow(); - inner.gl_context.bind_drawable(); + state.context.bind_drawable(); return; } unsafe { @@ -1086,7 +1085,7 @@ pub fn canvas_native_webgl_get_extension( state: &mut WebGLState, ) -> Option> { if name.eq("WEBGL_lose_context") { - return Some(Box::new(WEBGL_lose_context::new(state.clone()))); + return Some(Box::new(WEBGL_lose_context::new(state))); } state.make_current(); @@ -1116,7 +1115,7 @@ pub fn canvas_native_webgl_get_extension( && extensions.contains("GL_EXT_disjoint_timer_query") { return if get_sdk_version() >= JELLY_BEAN_MR2 { - Some(Box::new(EXT_disjoint_timer_query::new(state.clone()))) + Some(Box::new(EXT_disjoint_timer_query::new(state))) } else { None }; @@ -1153,7 +1152,7 @@ pub fn canvas_native_webgl_get_extension( && extensions.contains("GL_OES_vertex_array_object") { return if get_sdk_version() >= JELLY_BEAN_MR2 { - Some(Box::new(OES_vertex_array_object::new(state.clone()))) + Some(Box::new(OES_vertex_array_object::new(state))) } else { None }; @@ -1187,7 +1186,7 @@ pub fn canvas_native_webgl_get_extension( } else if name.eq("ANGLE_instanced_arrays") { if version == WebGLVersion::V2 { return if get_sdk_version() >= JELLY_BEAN_MR2 { - Some(Box::new(ANGLE_instanced_arrays::new(state.clone()))) + Some(Box::new(ANGLE_instanced_arrays::new(state))) } else { None }; @@ -1199,7 +1198,7 @@ pub fn canvas_native_webgl_get_extension( } else if name.eq("WEBGL_draw_buffers") { if get_sdk_version() >= JELLY_BEAN_MR2 { if version == WebGLVersion::V2 || extensions.contains("GL_EXT_draw_buffers") { - return Some(Box::new(WEBGL_draw_buffers::new(state.clone()))); + return Some(Box::new(WEBGL_draw_buffers::new(state))); } else { None } @@ -1219,7 +1218,7 @@ pub fn canvas_native_webgl_get_extension( state: &mut WebGLState, ) -> Option> { if name.eq("WEBGL_lose_context") { - return Some(Box::new(WEBGL_lose_context::new(state.clone()))); + return Some(Box::new(WEBGL_lose_context::new(state))); } state.make_current(); let version = state.get_webgl_version(); @@ -1279,14 +1278,14 @@ pub fn canvas_native_webgl_get_extension( return Some(Box::new(WEBGL_depth_texture::new())); } "WEBGL_draw_buffers" => { - return Some(Box::new(WEBGL_draw_buffers::new(state.clone()))); + return Some(Box::new(WEBGL_draw_buffers::new(state))); } _ => {} } } if name == "ANGLE_instanced_arrays" { - return Some(Box::new(ANGLE_instanced_arrays::new(state.clone()))); + return Some(Box::new(ANGLE_instanced_arrays::new(state))); } if extensions.contains(name) { @@ -1857,12 +1856,12 @@ pub fn canvas_native_webgl_get_vertex_attrib( match pname { gl_bindings::VERTEX_ATTRIB_ARRAY_ENABLED | gl_bindings::VERTEX_ATTRIB_ARRAY_NORMALIZED - | gl_bindings::VERTEX_ATTRIB_ARRAY_INTEGER => return WebGLResult::Boolean(params == 1), + | gl_bindings::VERTEX_ATTRIB_ARRAY_INTEGER => WebGLResult::Boolean(params == 1), gl_bindings::VERTEX_ATTRIB_ARRAY_BUFFER_BINDING => WebGLResult::U32(params as u32), gl_bindings::VERTEX_ATTRIB_ARRAY_SIZE | gl_bindings::VERTEX_ATTRIB_ARRAY_STRIDE - | gl_bindings::VERTEX_ATTRIB_ARRAY_DIVISOR => return WebGLResult::I32(params), - _ => return WebGLResult::None, + | gl_bindings::VERTEX_ATTRIB_ARRAY_DIVISOR => WebGLResult::I32(params), + _ => WebGLResult::None, } } @@ -2174,7 +2173,7 @@ pub fn canvas_native_webgl_tex_image2d_asset( }; if is_rgba { - asset.with_bytes_dimension(|bytes, dimension|{ + asset.with_bytes_dimension(|bytes, dimension| { state.make_current(); unsafe { if state.get_flip_y() { @@ -2435,7 +2434,7 @@ pub fn canvas_native_webgl_tex_sub_image2d_asset( }; if is_rgba { - asset.with_bytes_dimension(|bytes, dimension|{ + asset.with_bytes_dimension(|bytes, dimension| { state.make_current(); if state.get_flip_y() { let mut buffer = bytes.to_vec(); @@ -2487,7 +2486,7 @@ pub fn canvas_native_webgl_tex_sub_image2d_asset( utils::gl::flip_in_place( buffer.as_mut_ptr(), buffer.len(), - (bytes_per_pixel(image_type as u32, format) * dimension.0) as usize, + (bytes_per_pixel(image_type as u32, format) * dimension.0) as usize, dimension.1 as usize, ); diff --git a/crates/playground/Cargo.toml b/crates/playground/Cargo.toml index d68413f64..c754f922f 100644 --- a/crates/playground/Cargo.toml +++ b/crates/playground/Cargo.toml @@ -4,9 +4,9 @@ version = "0.1.0" edition = "2021" [dependencies] -canvas-core = { path = "../canvas-core", features = ["2d"] } +canvas-core = { path = "../canvas-core", features = ["2d", "gl"] } canvas-webgl = { path = "../canvas-webgl" } -canvas-2d = { path = "../canvas-2d", features = ["gl"] } +canvas-2d = { path = "../canvas-2d", features = ["gl", "metal"] } gl-bindings = { path = "../gl-bindings" } raw-window-handle = "0.6.2" rand = "0.8.5" diff --git a/crates/playground/src/main.rs b/crates/playground/src/main.rs index 7f5041d11..ab5e59690 100644 --- a/crates/playground/src/main.rs +++ b/crates/playground/src/main.rs @@ -15,7 +15,6 @@ use winit::window::WindowBuilder; use canvas_2d::context::compositing::composite_operation_type::CompositeOperationType; use canvas_2d::context::fill_and_stroke_styles::paint::PaintStyle; use canvas_2d::context::line_styles::line_cap::LineCap; -use canvas_c::CanvasRenderingContext2D; use canvas_c::webgpu::enums::{CanvasAddressMode, CanvasBindGroupEntry, CanvasBindGroupEntryResource, CanvasBufferBinding, CanvasCullMode, CanvasFilterMode, CanvasFrontFace, CanvasGPUTextureFormat, CanvasGPUTextureUsageCopyDst, CanvasGPUTextureUsageRenderAttachment, CanvasGPUTextureUsageStorageBinding, CanvasGPUTextureUsageTextureBinding, CanvasOptionalCompareFunction, CanvasOptionalGPUTextureFormat, CanvasOptionalIndexFormat, CanvasPrimitiveTopology, CanvasTextureAspect, CanvasTextureDimension}; use canvas_c::webgpu::error::CanvasGPUErrorType; use canvas_c::webgpu::gpu_adapter::CanvasGPUAdapter; @@ -29,8 +28,8 @@ use canvas_c::webgpu::gpu_device::{ }; use canvas_c::webgpu::gpu_queue::canvas_native_webgpu_queue_release; use canvas_c::webgpu::gpu_texture::canvas_native_webgpu_texture_create_texture_view; -use canvas_c::webgpu::structs::{CanvasColor, CanvasColorTargetState, CanvasExtent3d, CanvasImageCopyExternalImage, CanvasImageCopyImageAsset, CanvasLoadOp, CanvasOptionalBlendState, CanvasOrigin2d, CanvasOrigin3d, CanvasPassChannelColor, CanvasRenderPassColorAttachment, CanvasStoreOp}; -use canvas_core::gl::get_shader_info_log; +use canvas_c::webgpu::structs::{CanvasColor, CanvasColorTargetState, CanvasExtent3d, CanvasImageCopyImageAsset, CanvasLoadOp, CanvasOptionalBlendState, CanvasOrigin2d, CanvasOrigin3d, CanvasPassChannelColor, CanvasRenderPassColorAttachment, CanvasStoreOp}; +use canvas_c::CanvasRenderingContext2D; use canvas_core::image_asset::ImageAsset; use canvas_webgl::prelude::{WebGLResult, WebGLState}; use canvas_webgl::webgl::{ @@ -611,6 +610,7 @@ fn webgpu_triangle(data: *mut Data, window: AppKitWindowHandle) { }; let RENDER_ATTACHMENT = 1 << 4 as u32; + let COPY_SRC = 1 << 0 as u32; let size = CanvasExtent3d { width: data.width, @@ -620,7 +620,7 @@ fn webgpu_triangle(data: *mut Data, window: AppKitWindowHandle) { let config = canvas_c::webgpu::gpu_canvas_context::CanvasGPUSurfaceConfiguration { alphaMode: canvas_c::webgpu::gpu_canvas_context::CanvasGPUSurfaceAlphaMode::PostMultiplied, - usage: RENDER_ATTACHMENT, + usage: RENDER_ATTACHMENT | COPY_SRC, presentMode: canvas_c::webgpu::gpu_canvas_context::CanvasGPUPresentMode::Fifo, view_formats: ptr::null(), view_formats_size: 0, @@ -792,7 +792,7 @@ fn webgpu_triangle(data: *mut Data, window: AppKitWindowHandle) { let exe = unsafe { canvas_c::webgpu::gpu_command_encoder::canvas_native_webgpu_command_encoder_finish( command_encoder, - std::ptr::null(), + ptr::null(), ) }; @@ -811,6 +811,21 @@ fn webgpu_triangle(data: *mut Data, window: AppKitWindowHandle) { context, texture, ) } + + + let format = c"image/png"; + let data = unsafe { canvas_c::webgpu::gpu_canvas_context::canvas_native_webgpu_to_data_url(context, device, format.as_ptr(), 50) }; + + + + if !data.is_null() { + unsafe { println!("data {:?}", CStr::from_ptr(data).to_string_lossy()); } + + let _ = unsafe { CString::from_raw(data) }; + } + + + } struct BlurSettings { @@ -993,7 +1008,7 @@ unsafe fn webgpu_blur(data: *mut Data, window: AppKitWindowHandle) { let image_bitmap = canvas_c::canvas_native_image_asset_create(); { - canvas_c::canvas_native_image_asset_load_from_raw(image_bitmap, di_3d.as_ptr(), di_3d.len()); + canvas_c::canvas_native_image_asset_load_from_raw_encoded(image_bitmap, di_3d.as_ptr(), di_3d.len()); } let srcWidth = canvas_c::canvas_native_image_asset_width(image_bitmap); @@ -1396,7 +1411,7 @@ fn main() { .build(&event_loop) .unwrap(); - // let raw_window_handle = window.raw_window_handle(); + // let raw_window_handle = window.raw_window_handle(); /*let mut attrs = ContextAttributes::default(); attrs.set_antialias(false); @@ -1582,11 +1597,10 @@ fn main() { match data_.window { RawWindowHandle::AppKit(window) => { - - // webgpu_triangle(data, window); - unsafe { - webgpu_blur(data, window); - } + webgpu_triangle(data, window); + // unsafe { + // webgpu_blur(data, window); + // } } _ => {} } @@ -2366,7 +2380,7 @@ impl Particle { // } // } pub fn draw(&self) { - let mut context = ( unsafe { &mut*self.context }).get_context_mut(); + let mut context = (unsafe { &mut *self.context }).get_context_mut(); context.set_fill_style(PaintStyle::white()); context.begin_path(); @@ -2500,7 +2514,7 @@ fn swarm(ctx: &mut Context, particles: &mut Vec, particle_count: i32) */ fn clock(ctx: &mut CanvasRenderingContext2D) { let pi = std::f32::consts::PI; - let now = chrono::offset::Local::now(); + let now = chrono::Local::now(); let mut ctx = ctx.get_context_mut(); ctx.save(); ctx.clear_rect(0., 0., 150., 150.); @@ -2619,7 +2633,7 @@ fn solar( let pi = std::f32::consts::PI; // Earth - let time = chrono::offset::Local::now(); + let time = chrono::Local::now(); let seconds = time.second(); let milliseconds = seconds * 1000; ctx.rotate(((2. * pi) / 60.) * seconds as f32 + ((2. * pi) / 60000.) * milliseconds as f32); @@ -2666,7 +2680,7 @@ fn create_program_from_scripts( WebGLResult::Boolean(compiled) => { if !compiled { // Something went wrong during compilation; get the error - let last_error = get_shader_info_log(shader); + let last_error = canvas_core::gpu::gl::get_shader_info_log(shader); println!("*** Error compiling shader '{}': {:?}", shader, last_error); canvas_native_webgl_delete_shader(shader, state); return None; diff --git a/migrations.json b/migrations.json index 394c30bf8..1019bdc30 100644 --- a/migrations.json +++ b/migrations.json @@ -1,6 +1 @@ -{ - "migrations": [ - { "cli": "nx", "version": "5.2.0", "description": "Migrate tools to 5.2.0", "implementation": "./src/migrations/update-5-2-0/update-5-2-0", "package": "@nativescript/plugin-tools", "name": "update-to-5.2.0" }, - { "cli": "nx", "version": "5.3.0", "description": "Migrate tools to 5.3.0", "implementation": "./src/migrations/update-5-3-0/update-5-3-0", "package": "@nativescript/plugin-tools", "name": "update-to-5.3.0" } - ] -} +{ "migrations": [{ "cli": "nx", "version": "5.4.0", "description": "Migrate tools to 5.4.0", "implementation": "./src/migrations/update-5-4-0/update-5-4-0", "package": "@nativescript/plugin-tools", "name": "update-to-5.4.0" }] } diff --git a/package.json b/package.json index 417607f39..a495c0998 100644 --- a/package.json +++ b/package.json @@ -36,11 +36,12 @@ "@angular/router": "^18.0.0", "@nativescript/angular": "^18.0.0", "@nativescript/core": "~8.8.0", - "@nativescript/plugin-tools": "5.3.1", + "@nativescript/plugin-tools": "5.4.1", "@nativescript/types": "~8.8.0", "@nativescript/webpack": "~5.0.22", "@ngtools/webpack": "^18.0.0", "@pixi-essentials/svg": "2.0.1", + "@pixi/devtools": "~2.0.1", "@types/three": "~0.167.2", "@xmldom/xmldom": "0.8.10", "babylonjs": "7.22.2", @@ -52,7 +53,7 @@ "eslint": "~9.8.0", "eslint-config-prettier": "~9.1.0", "gl-matrix": "^3.4.3", - "husky": "~9.1.0", + "husky": "~9.0.0", "matter-js": "^0.19.0", "nativescript-theme-core": "~1.0.4", "nativescript-vue": "~2.9.0", @@ -70,8 +71,8 @@ "rxjs": "~7.8.0", "svelte-native": "^1.0.5", "teapot": "^1.0.0", - "three": "~0.167.1", - "three-stdlib": "^2.32.2", + "three": "~0.169.0", + "three-stdlib": "~2.33.0", "typescript": "~5.5.0", "util": "~0.12.5", "vexflow": "^4.2.3", diff --git a/packages/canvas-babylon/package.json b/packages/canvas-babylon/package.json index df38bf1b5..0d614d636 100644 --- a/packages/canvas-babylon/package.json +++ b/packages/canvas-babylon/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/canvas-babylon", - "version": "2.0.0-webgpu.31", + "version": "2.0.0-webgpu.42", "description": "", "main": "index", "typings": "index.d.ts", diff --git a/packages/canvas-media/package.json b/packages/canvas-media/package.json index efe8806b5..a14436098 100644 --- a/packages/canvas-media/package.json +++ b/packages/canvas-media/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/canvas-media", - "version": "2.0.0-webgpu.31", + "version": "2.0.0-webgpu.42", "description": "Canvas media", "main": "index", "typings": "index.d.ts", diff --git a/packages/canvas-phaser-ce/package.json b/packages/canvas-phaser-ce/package.json index d06c3b393..7727ca5e3 100644 --- a/packages/canvas-phaser-ce/package.json +++ b/packages/canvas-phaser-ce/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/canvas-phaser-ce", - "version": "2.0.0-webgpu.31", + "version": "2.0.0-webgpu.42", "description": "Tools for using Phaser-ce to build native 2D games in NativeScript 👾", "main": "index", "typings": "index.d.ts", diff --git a/packages/canvas-phaser/package.json b/packages/canvas-phaser/package.json index 32dbfe613..a085799c5 100644 --- a/packages/canvas-phaser/package.json +++ b/packages/canvas-phaser/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/canvas-phaser", - "version": "2.0.0-webgpu.31", + "version": "2.0.0-webgpu.42", "description": "Build awesome 2D games with Phaser.js and NativeScript", "main": "index", "typings": "index.d.ts", diff --git a/packages/canvas-pixi/package.json b/packages/canvas-pixi/package.json index f838d3648..548c19237 100644 --- a/packages/canvas-pixi/package.json +++ b/packages/canvas-pixi/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/canvas-pixi", - "version": "2.0.0-webgpu.31", + "version": "2.0.0-webgpu.42", "description": "Plugin for using pixi.js in NativeScript", "main": "index", "typings": "index.d.ts", @@ -34,8 +34,8 @@ "bootstrapper": "nativescript-plugin-seed", "dependencies": { "@nativescript/canvas-polyfill": "webgpu", - "pixi.js": "~7.3.1", - "pixi.js-legacy": "~7.3.1", - "pixi-filters": "~5.3.0" + "pixi.js": "~8.5.2", + "pixi.js-legacy": "~7.4.2", + "pixi-filters": "~6.0.5" } } diff --git a/packages/canvas-polyfill/DOM/Document.ts b/packages/canvas-polyfill/DOM/Document.ts index e04336195..f0f9f84f4 100644 --- a/packages/canvas-polyfill/DOM/Document.ts +++ b/packages/canvas-polyfill/DOM/Document.ts @@ -119,9 +119,12 @@ export class Document extends Node { constructor() { super('#document'); this.body = new Element('BODY'); + this.body._ownerDocument = this as never; this._documentElement = new Element('HTML'); + this._documentElement._ownerDocument = this as never; this.readyState = 'complete'; this.head = new Element('HEAD'); + this.head._ownerDocument = this as never; this.baseURI = knownFolders.currentApp().path; } diff --git a/packages/canvas-polyfill/DOM/Element.ts b/packages/canvas-polyfill/DOM/Element.ts index 26e03f91f..b721c0f82 100644 --- a/packages/canvas-polyfill/DOM/Element.ts +++ b/packages/canvas-polyfill/DOM/Element.ts @@ -1,8 +1,9 @@ import { Node } from './Node'; -import { View, ViewBase } from '@nativescript/core'; +import { eachDescendant, Frame, StackLayout, View, ViewBase } from '@nativescript/core'; import setValue from 'set-value'; import querySelector from 'query-selector'; import { HTMLCollection } from './HTMLCollection'; +import { Canvas } from '@nativescript/canvas'; declare const NSCanvas; export class DOMRectReadOnly { @@ -41,6 +42,13 @@ export function parseChildren(element, children) { const node = element.childNodes.item(i); if (node) { switch (node.nodeName) { + case 'circle': + { + const circle = new SVGCircleElement() as unknown as Element; + circle.nativeElement.__domElement = node; + children.push(circle); + } + break; case 'image': { const image = new SVGImageElement() as unknown as Element; image.nativeElement.__domElement = node; @@ -111,6 +119,96 @@ export function parseChildren(element, children) { } } +function getElementsByClassName(v, clsName) { + var retVal = []; + if (!v) { + return retVal; + } + + if (v.classList.contains(clsName)) { + retVal.push(v); + } + + const classNameCallback = function (child) { + if (child.classList.contains(clsName)) { + retVal.push(child); + } + + // Android patch for ListView + if (child._realizedItems && child._realizedItems.size !== child._childrenCount) { + for (var key in child._realizedItems) { + if (child._realizedItems.hasOwnProperty(key)) { + classNameCallback(child._realizedItems[key]); + } + } + } + + return true; + }; + + eachDescendant(v, classNameCallback); + + // Android patch for ListView + if (v._realizedItems && v._realizedItems.size !== v._childrenCount) { + for (var key in v._realizedItems) { + if (v._realizedItems.hasOwnProperty(key)) { + classNameCallback(v._realizedItems[key]); + } + } + } + + return retVal; +} + +function getElementsByTagName(v, tagName) { + // TagName is case-Insensitive + var tagNameLC = tagName.toLowerCase(); + + var retVal = [], + allTags = false; + if (!v) { + return retVal; + } + + if (tagName === '*') { + allTags = true; + } + + if ((v.typeName && v.typeName.toLowerCase() === tagNameLC) || allTags) { + retVal.push(v); + } + + const tagNameCallback = function (child) { + if ((child.typeName && child.typeName.toLowerCase() === tagNameLC) || allTags) { + retVal.push(child); + } + + // Android patch for ListView + if (child._realizedItems && child._realizedItems.size !== child._childrenCount) { + for (var key in child._realizedItems) { + if (child._realizedItems.hasOwnProperty(key)) { + tagNameCallback(child._realizedItems[key]); + } + } + } + + return true; + }; + + eachDescendant(v, tagNameCallback); + + // Android patch for ListView + if (v._realizedItems && v._realizedItems.size !== v._childrenCount) { + for (var key in v._realizedItems) { + if (v._realizedItems.hasOwnProperty(key)) { + tagNameCallback(v._realizedItems[key]); + } + } + } + + return retVal; +} + type NativeElement = View & { __domElement?: Element }; export class Element extends Node { private _classList = new Set(); @@ -181,7 +279,7 @@ export class Element extends Node { this._children.push(document.head); this._children.push(document.body); } - const element = (this).nativeElement?.__domElement; + const element = (this)?.__domElement ?? (this).nativeElement?.__domElement; if (element) { parseChildren(element, this._children); return this._children; @@ -235,8 +333,81 @@ export class Element extends Node { removeAttributeNS() {} + getElementById(id: string) { + if (this.__instance) { + return this.__instance.getElementById(id); + } + const topmost = Frame.topmost(); + if (topmost) { + let nativeElement; + if (topmost.currentPage && topmost.currentPage.modal) { + nativeElement = topmost.getViewById(id); + } else { + nativeElement = topmost.currentPage.modal.getViewById(id); + } + + if (nativeElement) { + if (nativeElement instanceof Canvas) { + const canvas = new HTMLCanvasElement(); + (canvas).nativeElement = nativeElement; + return canvas; + } else if (nativeElement instanceof StackLayout) { + const div = new HTMLDivElement(); + (div).nativeElement = nativeElement; + return div; + } + const element = new HTMLElement(); + (element).nativeElement = nativeElement; + return element; + } + } + return null; + } + + getElementsByTagName(tagname: string) { + if (this.__instance) { + return this.__instance.getElementsByTagName(tagname); + } + const topmost = Frame.topmost(); + if (topmost) { + let view; + if (topmost.currentPage && topmost.currentPage.modal) { + view = topmost; + } else { + view = topmost.currentPage.modal; + } + const elements = getElementsByTagName(view, tagname); + + return elements; + } + return []; + } + + get __instance() { + return (this.nativeElement?.__domElement?.ownerDocument)?.__instance; + } + + getElementsByClassName(className: string) { + if (this.__instance) { + return this.__instance.getElementsByClassName(className); + } + const topmost = Frame.topmost(); + if (topmost) { + let view; + if (topmost.currentPage && topmost.currentPage.modal) { + view = topmost; + } else { + view = topmost.currentPage.modal; + } + const elements = getElementsByClassName(view, className); + + return elements; + } + return []; + } + querySelector(selector: string) { - const context = (this)._xmlDom?.documentElement ?? (this)._xmlDom; + const context = (this)._xmlDom?.documentElement ?? (this)._xmlDom ?? this.__instance ?? this.nativeElement?.__domElement; const selection = querySelector(selector, context); if (Array.isArray(selection)) { const item = selection[0]; @@ -247,6 +418,11 @@ export class Element extends Node { ret.__instance = item; return ret; } + case 'svg': { + const ret = new SVGSVGElement() as any; + ret.__domElement = item; + return ret; + } } } } diff --git a/packages/canvas-polyfill/DOM/HTMLCanvasElement.ts b/packages/canvas-polyfill/DOM/HTMLCanvasElement.ts index 2bb16c517..757944f89 100644 --- a/packages/canvas-polyfill/DOM/HTMLCanvasElement.ts +++ b/packages/canvas-polyfill/DOM/HTMLCanvasElement.ts @@ -14,7 +14,7 @@ export class HTMLCanvasElement extends HTMLElement { if (canvas instanceof Canvas) { this.nativeElement = canvas; } else { - this.nativeElement = (Canvas as any).createCustomView(); + this.nativeElement = Canvas.createCustomView(); } if (!this.nativeElement.__domElement) { diff --git a/packages/canvas-polyfill/DOM/HTMLDivElement.ts b/packages/canvas-polyfill/DOM/HTMLDivElement.ts index 3acb810ed..d6607b96a 100644 --- a/packages/canvas-polyfill/DOM/HTMLDivElement.ts +++ b/packages/canvas-polyfill/DOM/HTMLDivElement.ts @@ -17,4 +17,14 @@ export class HTMLDivElement extends HTMLElement { this.nativeElement.__domElement = new DOMParser().parseFromString('
', 'text/html').documentElement as never; } } + + get innerHTML() { + return (this.nativeElement)?.__domElement?.children[1]?.children[0]?.innerHTML; + } + + set innerHTML(value) { + if (typeof value === 'string') { + this.nativeElement.__domElement = new DOMParser().parseFromString(`
${value}
`, 'text/html').documentElement as never; + } + } } diff --git a/packages/canvas-polyfill/DOM/HTMLImageElement.ts b/packages/canvas-polyfill/DOM/HTMLImageElement.ts index 037a89c36..848ab5d1a 100644 --- a/packages/canvas-polyfill/DOM/HTMLImageElement.ts +++ b/packages/canvas-polyfill/DOM/HTMLImageElement.ts @@ -2,6 +2,7 @@ import { knownFolders, path, File, Utils, Image, Screen } from '@nativescript/co // @ts-ignore import { ImageAsset } from '@nativescript/canvas'; import { HTMLElement } from './HTMLElement'; +import { Svg } from '@nativescript/canvas-svg'; declare const NSSCanvasHelpers; // declare var NSUUID, java, NSData, android; @@ -54,10 +55,21 @@ export class HTMLImageElement extends HTMLElement { decoding = 'auto'; + private _loading = false; + private _decodingQueue: { resolve: () => void; reject: (reason?: any) => void }[] = []; + get src() { return this.localUri; } + get naturalWidth() { + return this.width; + } + + get naturalHeight() { + return this.height; + } + set src(value) { this.localUri = value; this._load(); @@ -91,6 +103,34 @@ export class HTMLImageElement extends HTMLElement { } } + private _dispatchDecode(success = false) { + for (const promise of this._decodingQueue) { + if (success) { + promise.resolve(); + } else { + promise.reject(); + } + } + this._decodingQueue = []; + } + + decode() { + if (!this.src) { + return Promise.reject(new Error('Invalid image request.')); + } + if (!this._loading && !this.complete) { + return new Promise((resolve, reject) => { + this._decodingQueue.push({ resolve, reject }); + this._load(); + }); + } else if (this._loading) { + return new Promise((resolve, reject) => { + this._decodingQueue.push({ resolve, reject }); + }); + } + return Promise.resolve(); + } + // we're {N} :D static _fromSvg(svg) { const img = new HTMLImageElement(); @@ -128,12 +168,84 @@ export class HTMLImageElement extends HTMLElement { } async _load() { - if (this.src) { - if (typeof this.src === 'string' && this.src.startsWith && this.src.startsWith('data:')) { + this._loading = true; + if (this.src && typeof this.src === 'string') { + if (this.src.startsWith('blob:nativescript/')) { + const data = (URL).InternalAccessor.getData(this.src); + const buffer = (Blob).InternalAccessor.getBuffer(data.blob); + + let isSvg = data?.type?.indexOf('svg') > -1; + let src; + let d; + if (!isSvg) { + try { + d = new TextDecoder(); + src = d.decode(buffer); + if (typeof src === 'string') { + isSvg = src.indexOf(' -1; + } + } catch (error) {} + } + + if (isSvg) { + d = d ?? new TextDecoder(); + src = src ?? d.decode(buffer); + try { + const svg = await Svg.fromSrc(src); + const data = svg.data; + this._asset + .loadFromBytes(svg.width, svg.height, data as any) + .then((done: boolean) => { + this.width = this._asset.width; + this.height = this._asset.height; + this.complete = done; + this._loading = false; + this._dispatchDecode(done); + }) + .catch((e) => { + this.dispatchEvent({ type: 'error', target: this, e }); + this._onerror?.(); + this._loading = false; + this._dispatchDecode(); + }); + return; + } catch (e) { + this.dispatchEvent({ type: 'error', target: this, error: e }); + this._onerror?.(); + this._loading = false; + this._dispatchDecode(); + return; + } + } else { + this._asset + .loadFromEncodedBytes(buffer) + .then((done: boolean) => { + this.width = this._asset.width; + this.height = this._asset.height; + this.complete = done; + this._loading = false; + this._dispatchDecode(done); + }) + .catch((e) => { + this.dispatchEvent({ type: 'error', target: this, e }); + this._onerror?.(); + this._loading = false; + this._dispatchDecode(); + }); + return; + } + } + + if (this.src.startsWith && this.src.startsWith('data:')) { // is base64 - convert and try again; this._base64 = this.src; const base64result = this.src.split(',')[1]; + if (!base64result) { + this.dispatchEvent({ type: 'error', target: this, error: new Error('Invalid image request.') }); + this._onerror?.(); + this._loading = false; + this._dispatchDecode(); return; } (async () => { @@ -148,6 +260,8 @@ export class HTMLImageElement extends HTMLElement { } this.dispatchEvent({ type: 'error', target: this, error }); this._onerror?.(); + this._loading = false; + this._dispatchDecode(); } else { this.localUri = localUri; this._load(); @@ -175,6 +289,8 @@ export class HTMLImageElement extends HTMLElement { if (owner) { owner.dispatchEvent({ type: 'error', target: ref.get(), message }); owner._onerror?.(); + owner._loading = false; + owner._dispatchDecode?.(); } }, }) @@ -187,73 +303,88 @@ export class HTMLImageElement extends HTMLElement { } this.dispatchEvent({ type: 'error', target: this, error }); this._onerror?.(); + this._loading = false; + this._dispatchDecode?.(); } })(); return; } - if (typeof this.src === 'string') { - this.dispatchEvent({ type: 'loading', target: this }); - let async = this.decoding !== 'sync'; - if (this.src.startsWith('http')) { - if (!async) { - const loaded = this._asset.fromUrlSync(this.src); - if (loaded) { + this.dispatchEvent({ type: 'loading', target: this }); + let async = this.decoding !== 'sync'; + if (this.src.startsWith('http')) { + if (!async) { + const loaded = this._asset.fromUrlSync(this.src); + let success = false; + if (loaded) { + this.width = this._asset.width; + this.height = this._asset.height; + this.complete = true; + success = true; + } else { + this.dispatchEvent({ type: 'error', target: this }); + this._onerror?.(); + } + this._loading = false; + this._dispatchDecode(success); + } else { + this._asset + .fromUrl(this.src) + .then(() => { this.width = this._asset.width; this.height = this._asset.height; this.complete = true; - this._onload?.(); - } else { - this.dispatchEvent({ type: 'error', target: this }); + this._loading = false; + this._dispatchDecode(true); + }) + .catch((e) => { + this.dispatchEvent({ type: 'error', target: this, error: e }); this._onerror?.(); - } + this._loading = false; + this._dispatchDecode(); + }); + } + } else { + this.complete = false; + let src = this.src; + if (src.startsWith('~')) { + src = knownFolders.currentApp().path + src.replace('~', ''); + } + if (!async) { + const loaded = this._asset.fromFileSync(src); + if (loaded) { + this.width = this._asset.width; + this.height = this._asset.height; + this.complete = true; + this._loading = false; + this._dispatchDecode(true); } else { - this._asset - .fromUrl(this.src) - .then(() => { - this.width = this._asset.width; - this.height = this._asset.height; - this.complete = true; - this._onload?.(); - }) - .catch((e) => { - this.dispatchEvent({ type: 'error', target: this, e }); - this._onerror?.(); - }); + this.dispatchEvent({ type: 'error', target: this }); + this._onerror?.(); + this._loading = false; + this._dispatchDecode(); } } else { - this.complete = false; - let src = this.src; - if (src.startsWith('~')) { - src = knownFolders.currentApp().path + src.replace('~', ''); - } - if (!async) { - const loaded = this._asset.fromFileSync(src); - if (loaded) { + this._asset + .fromFile(src) + .then((done) => { this.width = this._asset.width; this.height = this._asset.height; this.complete = true; - this._onload?.(); - } else { - this.dispatchEvent({ type: 'error', target: this }); + this._loading = false; + this._dispatchDecode(true); + }) + .catch((e) => { + this.dispatchEvent({ type: 'error', target: this, e }); this._onerror?.(); - } - } else { - this._asset - .fromFile(src) - .then((done) => { - this.width = this._asset.width; - this.height = this._asset.height; - this.complete = true; - this._onload?.(); - }) - .catch((e) => { - this.dispatchEvent({ type: 'error', target: this, e }); - this._onerror?.(); - }); - } + this._loading = false; + this._dispatchDecode(); + }); } } + } else { + this._loading = false; + this._dispatchDecode(); } } } diff --git a/packages/canvas-polyfill/DOM/svg/SVGElement.ts b/packages/canvas-polyfill/DOM/svg/SVGElement.ts index 07b10e41c..2156858eb 100644 --- a/packages/canvas-polyfill/DOM/svg/SVGElement.ts +++ b/packages/canvas-polyfill/DOM/svg/SVGElement.ts @@ -60,7 +60,7 @@ export class SVGElement extends Element { removeChild(view) {} setAttribute(key, value) { - const dom = this.nativeElement.__domElement; + const dom = this.__domElement ?? this.nativeElement.__domElement; if (dom) { dom.setAttribute?.(key, value); } else { @@ -69,7 +69,7 @@ export class SVGElement extends Element { } getAttribute(key): string | null { - const dom = this.nativeElement.__domElement; + const dom = this.__domElement ?? this.nativeElement.__domElement; if (dom) { return (dom.getAttribute?.(key) as never) ?? null; } @@ -77,7 +77,7 @@ export class SVGElement extends Element { } removeAttribute(key) { - const dom = this.nativeElement.__domElement; + const dom = this.__domElement ?? this.nativeElement.__domElement; if (dom) { return dom.removeAttribute?.(key); } diff --git a/packages/canvas-polyfill/async/file/file.android.ts b/packages/canvas-polyfill/async/file/file.android.ts index 7402571fc..161a31b00 100644 --- a/packages/canvas-polyfill/async/file/file.android.ts +++ b/packages/canvas-polyfill/async/file/file.android.ts @@ -30,11 +30,11 @@ export class FileManager { this.supportFastRead = typeof global?.CanvasModule?.readFile === 'function'; } if (this.supportFastRead) { - global.CanvasModule.readFile(path, function (error, buffer: ArrayBuffer) { + global.CanvasModule.readFile(path, function (error, result: { buffer: ArrayBuffer; mime?: string; extension?: string }) { if (error) { callback(new Error(error), null); } else { - callback(null, buffer); + callback(null, result); } }); } else { @@ -46,7 +46,9 @@ export class FileManager { callback(param0, null); }, onComplete(param0: any): void { - callback(null, (ArrayBuffer).from(param0)); + callback(null, { + buffer: (ArrayBuffer).from(param0), + }); }, }) ); diff --git a/packages/canvas-polyfill/async/file/file.ios.ts b/packages/canvas-polyfill/async/file/file.ios.ts index 13933ab26..12ac31d89 100644 --- a/packages/canvas-polyfill/async/file/file.ios.ts +++ b/packages/canvas-polyfill/async/file/file.ios.ts @@ -28,11 +28,11 @@ export class FileManager { } if (this.supportFastRead) { - global.CanvasModule.readFile(path, function (error, buffer) { + global.CanvasModule.readFile(path, function (error, result: { buffer: ArrayBuffer; mime?: string; extension?: string }) { if (error) { callback(new Error(error), null); } else { - callback(null, buffer); + callback(null, result); } }); } else { @@ -40,7 +40,9 @@ export class FileManager { if (error) { callback(new Error(error), null); } else { - callback(null, interop.bufferFromData(data)); + callback(null, { + buffer: interop.bufferFromData(data), + }); } }); } diff --git a/packages/canvas-polyfill/async/xhr/TNSXMLHttpRequest.ts b/packages/canvas-polyfill/async/xhr/TNSXMLHttpRequest.ts index c9422aff9..30dce0d5a 100644 --- a/packages/canvas-polyfill/async/xhr/TNSXMLHttpRequest.ts +++ b/packages/canvas-polyfill/async/xhr/TNSXMLHttpRequest.ts @@ -296,18 +296,20 @@ export class TNSXMLHttpRequest { return ret; } catch (error) {} - for (let i = 0; i < count; i++) { - let encodingType = encodings[i]; - // let java decide :D - if (encodingType === null) { - value = java.nio.charset.Charset.defaultCharset().decode(data).toString(); - break; + if (__ANDROID__) { + for (let i = 0; i < count; i++) { + let encodingType = encodings[i]; + // let java decide :D + if (encodingType === null) { + value = java.nio.charset.Charset.defaultCharset().decode(data).toString(); + break; + } + try { + const encoding = java.nio.charset.Charset.forName(encodingType); + value = encoding.decode(data).toString(); + break; + } catch (e) {} } - try { - const encoding = java.nio.charset.Charset.forName(encodingType); - value = encoding.decode(data).toString(); - break; - } catch (e) {} } return value; } @@ -500,7 +502,7 @@ export class TNSXMLHttpRequest { this._updateReadyStateChange(this.LOADING); - FileManager.readFile(path, {}, (error, data) => { + FileManager.readFile(path, {}, (error, data: { buffer: ArrayBuffer; mime?: string; extension?: string }) => { if (error) { const errorEvent = new ProgressEvent('error', this._lastProgress); this._responseText = error.message; @@ -521,6 +523,11 @@ export class TNSXMLHttpRequest { this._updateReadyStateChange(this.DONE); } else { + const header = this.getResponseHeader('Content-Type') || this.getResponseHeader('content-type'); + const contentType = header && header.toLowerCase(); + if (!contentType && data.mime) { + this._headers['Content-Type'] = data.mime; + } if (!this._didUserSetResponseType) { this._setResponseType(); } @@ -540,9 +547,9 @@ export class TNSXMLHttpRequest { this._responseText = this._toJSString(data); this._response = JSON.parse(this._responseText); } else { - this._responseText = NSString.alloc().initWithDataEncoding(data, NSUTF8StringEncoding); + this._responseText = NSString.alloc().initWithDataEncoding(data.buffer as never, NSUTF8StringEncoding); if (!this._responseText) { - this._responseText = NSString.alloc().initWithDataEncoding(data, NSISOLatin1StringEncoding); + this._responseText = NSString.alloc().initWithDataEncoding(data.buffer as never, NSISOLatin1StringEncoding); } this._response = JSON.parse(this._responseText); } @@ -558,12 +565,12 @@ export class TNSXMLHttpRequest { } else { if ((global as any).isIOS) { let code = NSUTF8StringEncoding; // long:4 - let encodedString = NSString.alloc().initWithDataEncoding(data, code); + let encodedString = NSString.alloc().initWithDataEncoding(data.buffer as never, code); // If UTF8 string encoding fails try with ISO-8859-1 if (!encodedString) { code = NSISOLatin1StringEncoding; // long:5 - encodedString = NSString.alloc().initWithDataEncoding(data, code); + encodedString = NSString.alloc().initWithDataEncoding(data.buffer as never, code); } this._responseText = this._response = encodedString.toString(); } else { @@ -578,12 +585,12 @@ export class TNSXMLHttpRequest { } else { if ((global as any).isIOS) { let code = NSUTF8StringEncoding; // long:4 - let encodedString = NSString.alloc().initWithDataEncoding(data, code); + let encodedString = NSString.alloc().initWithDataEncoding(data.buffer as never, code); // If UTF8 string encoding fails try with ISO-8859-1 if (!encodedString) { code = NSISOLatin1StringEncoding; // long:5 - encodedString = NSString.alloc().initWithDataEncoding(data, code); + encodedString = NSString.alloc().initWithDataEncoding(data.buffer as never, code); } this._responseText = this._response = encodedString.toString(); @@ -595,7 +602,8 @@ export class TNSXMLHttpRequest { } else if (this.responseType === XMLHttpRequestResponseType.arraybuffer) { this._response = data; } else if (this.responseType === XMLHttpRequestResponseType.blob) { - this._response = new Blob([data]); + const header = this.getResponseHeader('Content-Type') || this.getResponseHeader('content-type'); + this._response = new Blob([data.buffer], { type: header ?? 'application/octet-stream' }); } let size = 0; @@ -603,8 +611,10 @@ export class TNSXMLHttpRequest { if (data instanceof NSData) { size = data.length; } - } else { - size = data?.length ?? data?.byteLength ?? 0; + } + + if (size === 0) { + size = (data?.buffer as any)?.length ?? data?.buffer?.byteLength ?? 0; } this._lastProgress = { @@ -817,32 +827,34 @@ export class TNSXMLHttpRequest { this._response = (ArrayBuffer as any).from(res.content); } } else if (this.responseType === XMLHttpRequestResponseType.blob) { + const header = this.getResponseHeader('Content-Type') || this.getResponseHeader('content-type'); + const type = { type: header ?? 'application/octet-stream' }; if (__IOS__) { if (typeof res.content === 'string') { const encoder = new TextEncoder(); const buffer = encoder.encode(res.content); - this._response = new Blob([buffer]); + this._response = new Blob([buffer], type); } else if (res.content !== null && res.content !== undefined && res.content instanceof NSData) { const buffer = interop.bufferFromData(res.content); - this._response = new Blob([buffer]); + this._response = new Blob([buffer], type); } else { const encoder = new TextEncoder(); const buffer = encoder.encode(res.content.toString()); - this._response = new Blob([buffer]); + this._response = new Blob([buffer], type); } } else { if (typeof res.content === 'string') { const encoder = new TextEncoder(); const buffer = encoder.encode(res.content); - this._response = new Blob([buffer]); + this._response = new Blob([buffer], type); } else { if (res.content !== null && res.content !== undefined && res.content instanceof NSData) { const buffer = (ArrayBuffer as any).from(res.content); - this._response = new Blob([buffer]); + this._response = new Blob([buffer], type); } else { const encoder = new TextEncoder(); const buffer = encoder.encode(res.content.toString()); - this._response = new Blob([buffer]); + this._response = new Blob([buffer], type); } } } diff --git a/packages/canvas-polyfill/index.ts b/packages/canvas-polyfill/index.ts index 65cceb16b..c18e1a60f 100644 --- a/packages/canvas-polyfill/index.ts +++ b/packages/canvas-polyfill/index.ts @@ -1,6 +1,6 @@ require('globals'); -if (global.android && !(global as any).__canvasLoaded) { +if (__ANDROID__ && !(global as any).__canvasLoaded) { try { // load canvas lib if polyfill is called before java.lang.System.loadLibrary('canvasnative'); diff --git a/packages/canvas-polyfill/package.json b/packages/canvas-polyfill/package.json index 80288eb75..9e12ba6cf 100644 --- a/packages/canvas-polyfill/package.json +++ b/packages/canvas-polyfill/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/canvas-polyfill", - "version": "2.0.0-webgpu.31", + "version": "2.0.0-webgpu.42", "description": "Polyfill for making NativeScript compatible with web libs like pixi.js, three.js, phaser.js, babylon.js, etc....", "main": "index", "typings": "index.d.ts", diff --git a/packages/canvas-polyfill/src-native/AsyncDemo/.idea/misc.xml b/packages/canvas-polyfill/src-native/AsyncDemo/.idea/misc.xml index 55c0ec2c4..0f866762d 100644 --- a/packages/canvas-polyfill/src-native/AsyncDemo/.idea/misc.xml +++ b/packages/canvas-polyfill/src-native/AsyncDemo/.idea/misc.xml @@ -1,4 +1,3 @@ - diff --git a/packages/canvas-polyfill/src-native/AsyncDemo/.idea/other.xml b/packages/canvas-polyfill/src-native/AsyncDemo/.idea/other.xml deleted file mode 100644 index 4604c4460..000000000 --- a/packages/canvas-polyfill/src-native/AsyncDemo/.idea/other.xml +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/packages/canvas-polyfill/src-native/AsyncDemo/async/src/main/java/com/github/triniwiz/async/Async2.kt b/packages/canvas-polyfill/src-native/AsyncDemo/async/src/main/java/com/github/triniwiz/async/Async2.kt index 12e251acb..1984b4923 100644 --- a/packages/canvas-polyfill/src-native/AsyncDemo/async/src/main/java/com/github/triniwiz/async/Async2.kt +++ b/packages/canvas-polyfill/src-native/AsyncDemo/async/src/main/java/com/github/triniwiz/async/Async2.kt @@ -1,6 +1,5 @@ package com.github.triniwiz.async -import android.os.Build import android.os.Handler import okhttp3.* import okhttp3.internal.http2.ErrorCode @@ -16,7 +15,6 @@ import java.io.IOException import java.net.SocketTimeoutException import java.nio.ByteBuffer import java.nio.ByteOrder -import java.nio.charset.Charset import java.nio.charset.StandardCharsets import java.util.* import java.util.concurrent.ConcurrentHashMap @@ -24,7 +22,7 @@ import java.util.concurrent.Executors import java.util.concurrent.TimeUnit -public class Async2 { +class Async2 { private var handler: Handler? = null @@ -55,8 +53,7 @@ public class Async2 { @JvmStatic fun base64ToFile(base64: String, path: String, callback: Callback) { executor.execute { - val MIME: String - MIME = try { + val MIME: String = try { getMIMEForBase64String(base64) } catch (e: Exception) { callback.error(e, e.message) @@ -85,7 +82,7 @@ public class Async2 { try { os?.flush() os?.close() - } catch (_: java.lang.Exception) {} + } catch (_: Exception) {} if (!isError) { callback.success(file.absolutePath) @@ -822,7 +819,7 @@ public class Async2 { try { stream.flush() stream.close() - } catch (e: IOException) { + } catch (_: IOException) { } } if (!isError) { @@ -883,7 +880,6 @@ public class Async2 { } catch (e: FileNotFoundException) { isError = true callback.onError(e.message, e) - isError = true } catch (e: IOException) { callback.onError(e.message, e) } finally { diff --git a/packages/canvas-polyfill/window.ts b/packages/canvas-polyfill/window.ts index d529ca457..5d6630c82 100644 --- a/packages/canvas-polyfill/window.ts +++ b/packages/canvas-polyfill/window.ts @@ -190,3 +190,39 @@ if (!global.ontouchstart) { }; return obj; }; +(global as any).postMessage = global.window.postMessage = (message, targetOrigin) => { + (global as any).window.emitter.notify({ + eventName: 'message', + data: message, + }); +}; + +global.chrome = (global.window).chrome = (global.window).chrome || {}; + +global.chrome.runtime = (global.window).chrome.runtime = (global.window).chrome.runtime || {}; + +declare const __inspectorSendEvent; +global.chrome.runtime.sendMessage = ( + extensionId?: string, + message?: Record, // any + options? +) => { + try { + if (typeof extensionId === 'string') { + __inspectorSendEvent( + JSON.stringify({ + extensionId, + message, + }) + ); + } else if (typeof extensionId === 'object') { + __inspectorSendEvent(JSON.stringify(message)); + } + } catch (err) { + console.error(err); + } +}; + +global.chrome.runtime.getURL = (path: string) => { + console.log('chrome.runtime.getURL', path); +}; diff --git a/packages/canvas-svg/index.android.ts b/packages/canvas-svg/index.android.ts index 53a31257e..284a8148e 100644 --- a/packages/canvas-svg/index.android.ts +++ b/packages/canvas-svg/index.android.ts @@ -7,59 +7,74 @@ declare const org; function parseSVGDimensions(svgString) { const svgRegex = /]*)>/i; - const match = svgString.match(svgRegex); - if (!match) { return { width: 0, height: 0 }; } - const svgAttributes = match[1]; + const regex = /\b(width|height|viewBox)\s*=\s*"([^"]+)"/g; - const regex = /\b(?:width|height|viewBox)\s*=\s*"([^"]*(?:"[^"]*")*[^"]*)"/g; - - const matches = svgAttributes.match(regex); let width, height, viewBox; - if (matches) { - matches.forEach((match) => { - const parts = match.split('='); - const attributeName = parts[0].trim() as string; - const attributeValue = parts[1].trim().replace(/"/g, '') as string; - - if (attributeName === 'width') { - if (width === undefined) { - width = parseFloat(attributeValue) ?? 0; - } - } else if (attributeName === 'height') { - if (height === undefined) { - height = parseFloat(attributeValue) ?? 0; - } - } else if (attributeName === 'viewBox') { - if (viewBox === undefined) { - viewBox = attributeValue.split(' ').map(parseFloat).splice(0, 4); - } - } - }); + let attributeMatch; + while ((attributeMatch = regex.exec(svgAttributes)) !== null) { + const attributeName = attributeMatch[1]; + const attributeValue = attributeMatch[2]; + + if (attributeName === 'width') { + width = parseFloat(attributeValue) || undefined; + } else if (attributeName === 'height') { + height = parseFloat(attributeValue) || undefined; + } else if (attributeName === 'viewBox') { + viewBox = attributeValue.split(' ').map(Number); + } } if (!width && viewBox && viewBox.length === 4) { const viewBoxWidth = viewBox[2]; const viewBoxHeight = viewBox[3]; const aspectRatio = viewBoxWidth / viewBoxHeight; - width = (height ?? Screen.mainScreen.widthDIPs) * aspectRatio; + width = height ? height * aspectRatio : 150 * aspectRatio; } - if (!height && viewBox && viewBox.length === 4) { const viewBoxWidth = viewBox[2]; const viewBoxHeight = viewBox[3]; const aspectRatio = viewBoxWidth / viewBoxHeight; - height = (width ?? Screen.mainScreen.heightDIPs) / aspectRatio; + height = width ? width / aspectRatio : 300 / aspectRatio; } return { width: width ?? 0, height: height ?? 0 }; } +export class SvgData { + native: any; + + static fromNative(value) { + if (value) { + const data = new SvgData(); + data.native = value; + return data; + } + return null; + } + + get width(): number { + return this.native?.getWidth?.() ?? 0; + } + + get height(): number { + return this.native?.getHeight?.() ?? 0; + } + + get data(): ArrayBuffer | null { + const data = this.native?.getData?.(); + if (data) { + return (ArrayBuffer).from(data); + } + return null; + } +} + export class Svg extends SVGBase { _svg; @@ -109,18 +124,18 @@ export class Svg extends SVGBase { __redraw() { if (this._attachedToDom) { const domCopy = this.__domElement.valueOf() as Element; - // const width = domCopy.documentElement.getAttribute('width'); - // const height = domCopy.documentElement.getAttribute('height'); + const width = domCopy.getAttribute('width'); + const height = domCopy.getAttribute('height'); const viewBox = domCopy.getAttribute('viewBox'); - // if (!width) { - // domCopy.documentElement.setAttribute('width', `${this.getMeasuredWidth()}`); - // } - // if (!height) { - // domCopy.documentElement.setAttribute('height', `${this.getMeasuredHeight()}`); - // } + if (!width) { + domCopy.setAttribute('width', `300`); + } + if (!height) { + domCopy.setAttribute('height', `150`); + } if (!viewBox) { - domCopy.setAttribute('viewBox', '0 0 0 0'); + domCopy.setAttribute('viewBox', '0 0 100 100'); } const serialized = this._serializer.serializeToString(domCopy); @@ -155,18 +170,14 @@ export class Svg extends SVGBase { } } - static fromSrcSync(value: string): Svg | null { + static fromSrcSync(value: string): SvgData | null { if (typeof value === 'string') { const context = Utils.android.getApplicationContext(); if (value.indexOf(' -1) { const { width, height } = parseSVGDimensions(value); if (width > 0 && height > 0) { - const svg = org.nativescript.canvas.svg.NSCSVG.fromStringSync(context, width * Screen.mainScreen.scale, height * Screen.mainScreen.scale, value); - const view = new Svg(); - view._svg = svg; - view.width = width; - view.height = height; - return view; + const svg = org.nativescript.canvas.svg.NSCSVG.fromStringSync(context, width, height, value); + return SvgData.fromNative(svg); } } else { let nativeSvg; @@ -180,19 +191,14 @@ export class Svg extends SVGBase { } } catch (error) {} if (nativeSvg) { - const view = new Svg(); - view._svg = nativeSvg; - const lp = nativeSvg.getLayoutParams(); - view.width = lp.width / Screen.mainScreen.scale; - view.height = lp.height / Screen.mainScreen.scale; - return view; + return SvgData.fromNative(nativeSvg); } } } return null; } - static fromSrc(value: string): Promise { + static fromSrc(value: string): Promise { return new Promise((resolve, reject) => { if (typeof value === 'string') { const context = Utils.android.getApplicationContext(); @@ -201,16 +207,13 @@ export class Svg extends SVGBase { if (width > 0 && height > 0) { org.nativescript.canvas.svg.NSCSVG.fromString( context, - width * Screen.mainScreen.scale, - height * Screen.mainScreen.scale, + width, + height, value, new org.nativescript.canvas.svg.NSCSVG.Callback({ onSuccess(svg) { - const view = new Svg(); - view._svg = svg; - view.width = width; - view.height = height; - resolve(view); + const ret = SvgData.fromNative(svg); + resolve(ret); }, }) ); @@ -220,12 +223,8 @@ export class Svg extends SVGBase { const cb = new org.nativescript.canvas.svg.NSCSVG.Callback({ onSuccess(nativeSvg) { if (nativeSvg) { - const view = new Svg(); - const lp = nativeSvg.getLayoutParams(); - view._svg = nativeSvg; - view.width = lp.width / Screen.mainScreen.scale; - view.height = lp.height / Screen.mainScreen.scale; - resolve(view); + const ret = SvgData.fromNative(nativeSvg); + resolve(ret); } else { reject(new Error('Failed to parse SVG')); } diff --git a/packages/canvas-svg/index.d.ts b/packages/canvas-svg/index.d.ts index 079770b6b..6785f6927 100644 --- a/packages/canvas-svg/index.d.ts +++ b/packages/canvas-svg/index.d.ts @@ -2,6 +2,16 @@ export * from './Elements'; import { SVGBase } from './common'; export class Svg extends SVGBase { - static fromSrcSync(value: string): Svg | null; - static fromSrc(value: string): Promise; + static fromSrcSync(value: string): SvgData | null; + static fromSrc(value: string): Promise; +} + +export class SvgData { + readonly native: any; + + readonly width: number; + + readonly height: number; + + readonly data: ArrayBuffer | null; } diff --git a/packages/canvas-svg/index.ios.ts b/packages/canvas-svg/index.ios.ts index 58a1aa5a1..4059a2a44 100644 --- a/packages/canvas-svg/index.ios.ts +++ b/packages/canvas-svg/index.ios.ts @@ -8,58 +8,72 @@ declare const NSCSVG, CanvasSVGHelper; function parseSVGDimensions(svgString) { const svgRegex = /]*)>/i; - const match = svgString.match(svgRegex); - if (!match) { return { width: 0, height: 0 }; } - const svgAttributes = match[1]; + const regex = /\b(width|height|viewBox)\s*=\s*"([^"]+)"/g; - const regex = /\b(?:width|height|viewBox)\s*=\s*"([^"]*(?:"[^"]*")*[^"]*)"/g; - - const matches = svgAttributes.match(regex); let width, height, viewBox; - if (matches) { - matches.forEach((match) => { - const parts = match.split('='); - const attributeName = parts[0].trim() as string; - const attributeValue = parts[1].trim().replace(/"/g, '') as string; - - if (attributeName === 'width') { - if (width === undefined) { - width = parseFloat(attributeValue) ?? 0; - } - } else if (attributeName === 'height') { - if (height === undefined) { - height = parseFloat(attributeValue) ?? 0; - } - } else if (attributeName === 'viewBox') { - if (viewBox === undefined) { - viewBox = attributeValue.split(' ').map(parseFloat).splice(0, 4); - } - } - }); + let attributeMatch; + while ((attributeMatch = regex.exec(svgAttributes)) !== null) { + const attributeName = attributeMatch[1]; + const attributeValue = attributeMatch[2]; + + if (attributeName === 'width') { + width = parseFloat(attributeValue) || undefined; + } else if (attributeName === 'height') { + height = parseFloat(attributeValue) || undefined; + } else if (attributeName === 'viewBox') { + viewBox = attributeValue.split(' ').map(Number); + } } if (!width && viewBox && viewBox.length === 4) { const viewBoxWidth = viewBox[2]; const viewBoxHeight = viewBox[3]; const aspectRatio = viewBoxWidth / viewBoxHeight; - width = (height ?? Screen.mainScreen.widthDIPs) * aspectRatio; + width = height ? height * aspectRatio : 150 * aspectRatio; } - if (!height && viewBox && viewBox.length === 4) { const viewBoxWidth = viewBox[2]; const viewBoxHeight = viewBox[3]; const aspectRatio = viewBoxWidth / viewBoxHeight; - height = (width ?? Screen.mainScreen.heightDIPs) / aspectRatio; + height = width ? width / aspectRatio : 300 / aspectRatio; } return { width: width ?? 0, height: height ?? 0 }; } +export class SvgData { + native: any; + + static fromNative(value) { + if (value) { + const data = new SvgData(); + data.native = value; + return data; + } + return null; + } + + get width(): number { + return this.native?.width ?? 0; + } + + get height(): number { + return this.native?.height ?? 0; + } + + get data(): ArrayBuffer | null { + const data = this.native?.data; + if (data) { + return interop.bufferFromData(data); + } + return null; + } +} export class Svg extends SVGBase { _svg; @@ -126,10 +140,10 @@ export class Svg extends SVGBase { const height = domCopy.getAttribute('height'); const viewBox = domCopy.getAttribute('viewBox'); if (!width) { - domCopy.setAttribute('width', `${this.getMeasuredWidth() / Screen.mainScreen.scale}`); + domCopy.setAttribute('width', `300`); } if (!height) { - domCopy.setAttribute('height', `${this.getMeasuredHeight() / Screen.mainScreen.scale}`); + domCopy.setAttribute('height', `150`); } if (!viewBox) { @@ -167,18 +181,13 @@ export class Svg extends SVGBase { } } - static fromSrcSync(value: string): Svg | null { + static fromSrcSync(value: string): SvgData | null { if (typeof value === 'string') { if (value.indexOf(' -1) { const { width, height } = parseSVGDimensions(value); if (width > 0 && height > 0) { - const svg = NSCSVG.fromStringSync(value); - svg.backgroundColor = UIColor.redColor; - const view = new Svg(); - view._svg = svg; - view.width = svg.frame.size.width; - view.height = svg.frame.size.height; - return view; + const native = NSCSVG.fromSVGStringSync(value); + return SvgData.fromNative(native); } } else { let nativeSvg; @@ -192,42 +201,30 @@ export class Svg extends SVGBase { } } catch (error) {} if (nativeSvg) { - const view = new Svg(); - view._svg = nativeSvg; - const frame = nativeSvg.frame.size; - view.width = frame.width; - view.height = frame.height; - return view; + return SvgData.fromNative(nativeSvg); } } } return null; } - static fromSrc(value: string): Promise { + static fromSrc(value: string): Promise { return new Promise((resolve, reject) => { if (typeof value === 'string') { if (value.indexOf(' -1) { const { width, height } = parseSVGDimensions(value); if (width > 0 && height > 0) { NSCSVG.fromString(value, (svg) => { - const view = new Svg(); - view._svg = svg; - view.width = width; - view.height = height; - resolve(view); + const ret = SvgData.fromNative(svg); + resolve(ret); }); return; } } else { const cb = (nativeSvg) => { if (nativeSvg) { - const view = new Svg(); - const lp = nativeSvg.frame.size; - view._svg = nativeSvg; - view.width = lp.width; - view.height = lp.height; - resolve(view); + const ret = SvgData.fromNative(nativeSvg); + resolve(ret); } else { reject(new Error('Failed to parse SVG')); } diff --git a/packages/canvas-svg/package.json b/packages/canvas-svg/package.json index 8a6305320..ad525178e 100644 --- a/packages/canvas-svg/package.json +++ b/packages/canvas-svg/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/canvas-svg", - "version": "2.0.0-webgpu.31", + "version": "2.0.0-webgpu.42", "description": "Add a plugin description", "main": "index", "typings": "index.d.ts", diff --git a/packages/canvas-svg/platforms/android/canvassvg-release.aar b/packages/canvas-svg/platforms/android/canvassvg-release.aar index f0421f35e..5bddbaa87 100644 Binary files a/packages/canvas-svg/platforms/android/canvassvg-release.aar and b/packages/canvas-svg/platforms/android/canvassvg-release.aar differ diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/CanvasSVG b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/CanvasSVG index eab27238b..e5c25ae2e 100755 Binary files a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/CanvasSVG and b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/CanvasSVG differ diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/CanvasSVG-Swift.h b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/CanvasSVG-Swift.h index b57eff964..76e6c002e 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/CanvasSVG-Swift.h +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/CanvasSVG-Swift.h @@ -278,6 +278,7 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); #pragma clang diagnostic ignored "-Watimport-in-framework-header" #endif @import CoreFoundation; +@import ObjectiveC; @import UIKit; #endif @@ -303,12 +304,10 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); @class NSCoder; @class UIImage; @class NSData; +@class NSCSVGData; SWIFT_CLASS_NAMED("NSCSVG") @interface NSCSVG : UIView -@property (nonatomic, readonly) void * _Nullable data; -@property (nonatomic, readonly) CGSize data_size; -@property (nonatomic, readonly) NSUInteger buf_size; @property (nonatomic) BOOL autoScale; @property (nonatomic, copy) NSString * _Nullable src; @property (nonatomic, copy) NSString * _Nullable srcPath; @@ -319,12 +318,24 @@ SWIFT_CLASS_NAMED("NSCSVG") - (void)drawRect:(CGRect)rect; - (UIImage * _Nullable)toImage SWIFT_WARN_UNUSED_RESULT; - (NSData * _Nullable)toData SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; ++ (NSCSVGData * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; +@end + +@class NSMutableData; + +SWIFT_CLASS_NAMED("NSCSVGData") +@interface NSCSVGData : NSObject +@property (nonatomic, readonly) CGFloat width; +@property (nonatomic, readonly) CGFloat height; +@property (nonatomic, readonly) void * _Nullable rawData; +@property (nonatomic, readonly, strong) NSMutableData * _Nullable data; +- (UIImage * _Nullable)getImage SWIFT_WARN_UNUSED_RESULT; +- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; @end #endif diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/canvas_svg.h b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/canvas_svg.h index 716ac6f05..daf7068dd 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/canvas_svg.h +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/canvas_svg.h @@ -8,6 +8,16 @@ #include #include +#if defined(TARGET_OS_IOS) +void canvas_native_svg_draw_from_bytes(uint8_t *data, + uintptr_t size, + float width, + float height, + float scale, + const uint8_t *svg_data, + uintptr_t svg_size); +#endif + #if defined(TARGET_OS_IOS) void canvas_native_svg_draw_from_string(uint8_t *data, uintptr_t size, diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo index 1dd78e9a5..a91d81631 100644 Binary files a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo and b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo differ diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.abi.json b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.abi.json index 685da180d..d687042ca 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.abi.json +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.abi.json @@ -21,13 +21,91 @@ }, { "kind": "TypeDecl", - "name": "NSCSVG", - "printedName": "NSCSVG", + "name": "NSCSVGData", + "printedName": "NSCSVGData", "children": [ { "kind": "Var", - "name": "data", - "printedName": "data", + "name": "width", + "printedName": "width", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "height", + "printedName": "height", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "rawData", + "printedName": "rawData", "children": [ { "kind": "TypeNominal", @@ -45,11 +123,10 @@ } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -72,10 +149,9 @@ } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } @@ -83,22 +159,29 @@ }, { "kind": "Var", - "name": "data_size", - "printedName": "data_size", + "name": "data", + "printedName": "data", "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -107,62 +190,144 @@ "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } ] }, { - "kind": "Var", - "name": "buf_size", - "printedName": "buf_size", + "kind": "Function", + "name": "getImage", + "printedName": "getImage()", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" - } - ], - "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvp", - "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, - "accessors": [ - { - "kind": "Accessor", - "name": "Get", - "printedName": "Get()", + "name": "Optional", + "printedName": "UIKit.UIImage?", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" + "name": "UIImage", + "printedName": "UIKit.UIImage", + "usr": "c:objc(cs)UIImage" } ], - "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvg", - "moduleName": "CanvasSVG", - "implicit": true, - "declAttributes": ["ObjC"], - "accessorKind": "get" + "usr": "s:Sq" } - ] + ], + "declKind": "Func", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)getImage", + "mangledName": "$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" }, + { + "kind": "Constructor", + "name": "init", + "printedName": "init()", + "children": [ + { + "kind": "TypeNominal", + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" + } + ], + "declKind": "Constructor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)init", + "mangledName": "$s9CanvasSVG10NSCSVGDataCACycfc", + "moduleName": "CanvasSVG", + "overriding": true, + "implicit": true, + "objc_name": "init", + "declAttributes": ["Dynamic", "ObjC", "Override"], + "init_kind": "Designated" + } + ], + "declKind": "Class", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC", + "moduleName": "CanvasSVG", + "objc_name": "NSCSVGData", + "declAttributes": ["AccessControl", "ObjC", "ObjCMembers"], + "superclassUsr": "c:objc(cs)NSObject", + "inheritsConvenienceInitializers": true, + "superclassNames": ["ObjectiveC.NSObject"], + "conformances": [ + { + "kind": "Conformance", + "name": "Equatable", + "printedName": "Equatable", + "usr": "s:SQ", + "mangledName": "$sSQ" + }, + { + "kind": "Conformance", + "name": "Hashable", + "printedName": "Hashable", + "usr": "s:SH", + "mangledName": "$sSH" + }, + { + "kind": "Conformance", + "name": "CVarArg", + "printedName": "CVarArg", + "usr": "s:s7CVarArgP", + "mangledName": "$ss7CVarArgP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObservingPublishing", + "printedName": "_KeyValueCodingAndObservingPublishing", + "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP", + "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObserving", + "printedName": "_KeyValueCodingAndObserving", + "usr": "s:10Foundation27_KeyValueCodingAndObservingP", + "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP" + }, + { + "kind": "Conformance", + "name": "CustomStringConvertible", + "printedName": "CustomStringConvertible", + "usr": "s:s23CustomStringConvertibleP", + "mangledName": "$ss23CustomStringConvertibleP" + }, + { + "kind": "Conformance", + "name": "CustomDebugStringConvertible", + "printedName": "CustomDebugStringConvertible", + "usr": "s:s28CustomDebugStringConvertibleP", + "mangledName": "$ss28CustomDebugStringConvertibleP" + } + ] + }, + { + "kind": "TypeDecl", + "name": "NSCSVG", + "printedName": "NSCSVG", + "children": [ { "kind": "Var", "name": "autoScale", @@ -616,13 +781,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -636,7 +801,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromStringSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -650,13 +815,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -670,7 +835,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPathSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -684,13 +849,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -704,7 +869,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemoteSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -729,7 +894,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -739,13 +904,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -755,7 +920,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromString::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -780,7 +945,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -790,13 +955,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -806,7 +971,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPath::", - "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -831,7 +996,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -841,13 +1006,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -857,7 +1022,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemote::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -947,42 +1112,42 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "IntegerLiteral", - "offset": 341, + "offset": 291, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 368, + "offset": 2331, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 396, + "offset": 2359, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 417, + "offset": 2380, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 500, + "offset": 2495, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 450, + "offset": 2445, "length": 4, "value": "true" } diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.private.swiftinterface b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.private.swiftinterface index 8cc75d11c..e69ed9cb9 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.private.swiftinterface +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.private.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftinterface b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftinterface index 8cc75d11c..e69ed9cb9 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftinterface +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG index 13f286008..9c608b061 100644 Binary files a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG and b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG differ diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml index 786c8684e..1a23e4726 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml @@ -2,221 +2,258 @@ triple: 'arm64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/CanvasSVG' relocations: - - { offsetInCU: 0x34, offset: 0xA80B8, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x544000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0xA80ED, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x544030, symSize: 0x0 } + - { offsetInCU: 0x34, offset: 0xA80B8, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x4C3000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xA80ED, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x4C3030, symSize: 0x0 } - { offsetInCU: 0x27, offset: 0xA812A, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x4000, symSize: 0xB4 } - { offsetInCU: 0x66, offset: 0xA8169, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x4000, symSize: 0xB4 } - { offsetInCU: 0x15B, offset: 0xA825E, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xB4, symBinAddr: 0x40B4, symSize: 0xB4 } - - { offsetInCU: 0x65, offset: 0xA83BD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x4168, symSize: 0x44 } - - { offsetInCU: 0xBD, offset: 0xA8415, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvsTo', symObjAddr: 0x88, symBinAddr: 0x41F0, symSize: 0x48 } - - { offsetInCU: 0x118, offset: 0xA8470, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x12C, symBinAddr: 0x4294, symSize: 0x44 } - - { offsetInCU: 0x170, offset: 0xA84C8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x1B4, symBinAddr: 0x431C, symSize: 0x54 } - - { offsetInCU: 0x1CD, offset: 0xA8525, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvgTo', symObjAddr: 0x2B0, symBinAddr: 0x4418, symSize: 0x44 } - - { offsetInCU: 0x225, offset: 0xA857D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvsTo', symObjAddr: 0x338, symBinAddr: 0x44A0, symSize: 0x48 } - - { offsetInCU: 0x280, offset: 0xA85D8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x424, symBinAddr: 0x458C, symSize: 0x10 } - - { offsetInCU: 0x2A0, offset: 0xA85F8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x424, symBinAddr: 0x458C, symSize: 0x10 } - - { offsetInCU: 0x2D6, offset: 0xA862E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x434, symBinAddr: 0x459C, symSize: 0x10 } - - { offsetInCU: 0x2F6, offset: 0xA864E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x434, symBinAddr: 0x459C, symSize: 0x10 } - - { offsetInCU: 0x32F, offset: 0xA8687, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x444, symBinAddr: 0x45AC, symSize: 0x10 } - - { offsetInCU: 0x34F, offset: 0xA86A7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x444, symBinAddr: 0x45AC, symSize: 0x10 } - - { offsetInCU: 0x385, offset: 0xA86DD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x454, symBinAddr: 0x45BC, symSize: 0x10 } - - { offsetInCU: 0x3A5, offset: 0xA86FD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x454, symBinAddr: 0x45BC, symSize: 0x10 } - - { offsetInCU: 0x3DE, offset: 0xA8736, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x464, symBinAddr: 0x45CC, symSize: 0x10 } - - { offsetInCU: 0x3FE, offset: 0xA8756, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x464, symBinAddr: 0x45CC, symSize: 0x10 } - - { offsetInCU: 0x434, offset: 0xA878C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x474, symBinAddr: 0x45DC, symSize: 0x10 } - - { offsetInCU: 0x454, offset: 0xA87AC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x474, symBinAddr: 0x45DC, symSize: 0x10 } - - { offsetInCU: 0x48D, offset: 0xA87E5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x484, symBinAddr: 0x45EC, symSize: 0x44 } - - { offsetInCU: 0x4FB, offset: 0xA8853, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x50C, symBinAddr: 0x4674, symSize: 0x64 } - - { offsetInCU: 0x5EF, offset: 0xA8947, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScaleSfyFTo', symObjAddr: 0xADC, symBinAddr: 0x4C44, symSize: 0xB8 } - - { offsetInCU: 0x6E0, offset: 0xA8A38, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x150C, symBinAddr: 0x5674, symSize: 0x28 } - - { offsetInCU: 0x712, offset: 0xA8A6A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x17D4, symBinAddr: 0x593C, symSize: 0x28 } - - { offsetInCU: 0x744, offset: 0xA8A9C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1800, symBinAddr: 0x5964, symSize: 0x28 } - - { offsetInCU: 0x78C, offset: 0xA8AE4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1828, symBinAddr: 0x598C, symSize: 0x10 } - - { offsetInCU: 0x7AC, offset: 0xA8B04, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1828, symBinAddr: 0x598C, symSize: 0x10 } - - { offsetInCU: 0x800, offset: 0xA8B58, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1C28, symBinAddr: 0x5D8C, symSize: 0x20 } - - { offsetInCU: 0x837, offset: 0xA8B8F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x1ED0, symBinAddr: 0x6034, symSize: 0x28 } - - { offsetInCU: 0x889, offset: 0xA8BE1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x20DC, symBinAddr: 0x6224, symSize: 0x80 } - - { offsetInCU: 0x8FC, offset: 0xA8C54, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x2304, symBinAddr: 0x644C, symSize: 0x34 } - - { offsetInCU: 0x92E, offset: 0xA8C86, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x23C8, symBinAddr: 0x6510, symSize: 0x34 } - - { offsetInCU: 0xA5C, offset: 0xA8DB4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x4840, symBinAddr: 0x8988, symSize: 0x13F4 } - - { offsetInCU: 0x1743, offset: 0xA9A9B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZTf4nd_n', symObjAddr: 0x5C34, symBinAddr: 0x9D7C, symSize: 0x238 } - - { offsetInCU: 0x1961, offset: 0xA9CB9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZTf4nd_n', symObjAddr: 0x5E6C, symBinAddr: 0x9FB4, symSize: 0x2F0 } - - { offsetInCU: 0x1BAF, offset: 0xA9F07, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZTf4nd_n', symObjAddr: 0x615C, symBinAddr: 0xA2A4, symSize: 0x3A4 } - - { offsetInCU: 0x1E26, offset: 0xAA17E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvpACTK', symObjAddr: 0xD0, symBinAddr: 0x4238, symSize: 0x50 } - - { offsetInCU: 0x1E5E, offset: 0xAA1B6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTK', symObjAddr: 0x208, symBinAddr: 0x4370, symSize: 0x50 } - - { offsetInCU: 0x1E96, offset: 0xAA1EE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTk', symObjAddr: 0x258, symBinAddr: 0x43C0, symSize: 0x58 } - - { offsetInCU: 0x1ED8, offset: 0xAA230, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvpACTK', symObjAddr: 0x380, symBinAddr: 0x44E8, symSize: 0x50 } - - { offsetInCU: 0x1F10, offset: 0xAA268, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x5D0, symBinAddr: 0x4738, symSize: 0x50 } - - { offsetInCU: 0x1F48, offset: 0xAA2A0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x620, symBinAddr: 0x4788, symSize: 0x64 } - - { offsetInCU: 0x2003, offset: 0xAA35B, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x1B88, symBinAddr: 0x5CEC, symSize: 0x40 } - - { offsetInCU: 0x2017, offset: 0xAA36F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x1C08, symBinAddr: 0x5D6C, symSize: 0x20 } - - { offsetInCU: 0x203B, offset: 0xAA393, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x439C, symBinAddr: 0x84E4, symSize: 0x70 } - - { offsetInCU: 0x208F, offset: 0xAA3E7, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSS_Tgm5', symObjAddr: 0x44F4, symBinAddr: 0x863C, symSize: 0x80 } - - { offsetInCU: 0x24F9, offset: 0xAA851, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x652C, symBinAddr: 0xA674, symSize: 0xC } - - { offsetInCU: 0x250D, offset: 0xAA865, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x6538, symBinAddr: 0xA680, symSize: 0x10 } - - { offsetInCU: 0x2521, offset: 0xAA879, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x6548, symBinAddr: 0xA690, symSize: 0x8 } - - { offsetInCU: 0x2535, offset: 0xAA88D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x65E0, symBinAddr: 0xA728, symSize: 0xC } - - { offsetInCU: 0x2549, offset: 0xAA8A1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x661C, symBinAddr: 0xA764, symSize: 0xC } - - { offsetInCU: 0x255D, offset: 0xAA8B5, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x67EC, symBinAddr: 0xA934, symSize: 0xC } - - { offsetInCU: 0x2571, offset: 0xAA8C9, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x67F8, symBinAddr: 0xA940, symSize: 0x4 } - - { offsetInCU: 0x2585, offset: 0xAA8DD, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x67FC, symBinAddr: 0xA944, symSize: 0x20 } - - { offsetInCU: 0x2599, offset: 0xAA8F1, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x681C, symBinAddr: 0xA964, symSize: 0x28 } - - { offsetInCU: 0x25B8, offset: 0xAA910, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x68C0, symBinAddr: 0xAA08, symSize: 0x10 } - - { offsetInCU: 0x25E1, offset: 0xAA939, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x68D0, symBinAddr: 0xAA18, symSize: 0x40 } - - { offsetInCU: 0x25F5, offset: 0xAA94D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x694C, symBinAddr: 0xAA94, symSize: 0x24 } - - { offsetInCU: 0x2629, offset: 0xAA981, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x69A8, symBinAddr: 0xAAF0, symSize: 0x44 } - - { offsetInCU: 0x263D, offset: 0xAA995, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_yyScMYccfU_Tf2niiin_nTA', symObjAddr: 0x6B68, symBinAddr: 0xACB0, symSize: 0x108 } - - { offsetInCU: 0x2750, offset: 0xAAAA8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x6C94, symBinAddr: 0xADDC, symSize: 0x8 } - - { offsetInCU: 0x2CF9, offset: 0xAB051, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvg', symObjAddr: 0x44, symBinAddr: 0x41AC, symSize: 0x44 } - - { offsetInCU: 0x2D81, offset: 0xAB0D9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg', symObjAddr: 0x170, symBinAddr: 0x42D8, symSize: 0x44 } - - { offsetInCU: 0x2DD9, offset: 0xAB131, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvg', symObjAddr: 0x2F4, symBinAddr: 0x445C, symSize: 0x44 } - - { offsetInCU: 0x2ED2, offset: 0xAB22A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x4C8, symBinAddr: 0x4630, symSize: 0x44 } - - { offsetInCU: 0x2F25, offset: 0xAB27D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x570, symBinAddr: 0x46D8, symSize: 0x60 } - - { offsetInCU: 0x2F95, offset: 0xAB2ED, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0x684, symBinAddr: 0x47EC, symSize: 0x48 } - - { offsetInCU: 0x2FBA, offset: 0xAB312, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0x6CC, symBinAddr: 0x4834, symSize: 0x3C } - - { offsetInCU: 0x3016, offset: 0xAB36E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0x750, symBinAddr: 0x48B8, symSize: 0x48 } - - { offsetInCU: 0x303B, offset: 0xAB393, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xA60, symBinAddr: 0x4BC8, symSize: 0x48 } - - { offsetInCU: 0x31D8, offset: 0xAB530, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xB94, symBinAddr: 0x4CFC, symSize: 0x46C } - - { offsetInCU: 0x34EC, offset: 0xAB844, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x1000, symBinAddr: 0x5168, symSize: 0x508 } - - { offsetInCU: 0x3750, offset: 0xABAA8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1534, symBinAddr: 0x569C, symSize: 0x2A0 } - - { offsetInCU: 0x3AEF, offset: 0xABE47, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1838, symBinAddr: 0x599C, symSize: 0x50 } - - { offsetInCU: 0x3B03, offset: 0xABE5B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1888, symBinAddr: 0x59EC, symSize: 0x300 } - - { offsetInCU: 0x3B7F, offset: 0xABED7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1C48, symBinAddr: 0x5DAC, symSize: 0x288 } - - { offsetInCU: 0x3C2E, offset: 0xABF86, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9drawImage33_C2B5A81EA80ED94FA09E8C035710AE36LLyySo6CGRectVF', symObjAddr: 0x1EF8, symBinAddr: 0x605C, symSize: 0x1C8 } - - { offsetInCU: 0x3E34, offset: 0xAC18C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x215C, symBinAddr: 0x62A4, symSize: 0x1A8 } - - { offsetInCU: 0x4010, offset: 0xAC368, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2338, symBinAddr: 0x6480, symSize: 0x90 } - - { offsetInCU: 0x40BF, offset: 0xAC417, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ', symObjAddr: 0x23FC, symBinAddr: 0x6544, symSize: 0x4 } - - { offsetInCU: 0x40D3, offset: 0xAC42B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ', symObjAddr: 0x240C, symBinAddr: 0x6554, symSize: 0x4 } - - { offsetInCU: 0x40E7, offset: 0xAC43F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ', symObjAddr: 0x241C, symBinAddr: 0x6564, symSize: 0x4 } - - { offsetInCU: 0x4107, offset: 0xAC45F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ', symObjAddr: 0x2468, symBinAddr: 0x65B0, symSize: 0x27C } - - { offsetInCU: 0x4172, offset: 0xAC4CA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x26E4, symBinAddr: 0x682C, symSize: 0x400 } - - { offsetInCU: 0x4463, offset: 0xAC7BB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x2B4C, symBinAddr: 0x6C94, symSize: 0x84C } - - { offsetInCU: 0x45C3, offset: 0xAC91B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x36EC, symBinAddr: 0x7834, symSize: 0xC64 } - - { offsetInCU: 0x478A, offset: 0xACAE2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfD', symObjAddr: 0x436C, symBinAddr: 0x84B4, symSize: 0x30 } - - { offsetInCU: 0x47AD, offset: 0xACB05, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x440C, symBinAddr: 0x8554, symSize: 0xE8 } - - { offsetInCU: 0x47E9, offset: 0xACB41, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x4574, symBinAddr: 0x86BC, symSize: 0x1F4 } - - { offsetInCU: 0x4846, offset: 0xACB9E, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x4768, symBinAddr: 0x88B0, symSize: 0x1C } - - { offsetInCU: 0x487D, offset: 0xACBD5, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x4784, symBinAddr: 0x88CC, symSize: 0xBC } - - { offsetInCU: 0x26, offset: 0xACF12, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x95D00, symSize: 0x26E4 } - - { offsetInCU: 0x40, offset: 0xACF2C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9A58, symBinAddr: 0x57C1D8, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0xACF7E, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFA58, symBinAddr: 0x5821D8, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0xACFE2, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFA80, symBinAddr: 0x582200, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0xACFF8, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0xFE88, symBinAddr: 0x582608, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0xAD00F, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFAC8, symBinAddr: 0x582248, symSize: 0x0 } - - { offsetInCU: 0xE22, offset: 0xADD0E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x95D00, symSize: 0x26E4 } - - { offsetInCU: 0x4BAD, offset: 0xB1A99, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x95DC, symBinAddr: 0x9F2DC, symSize: 0x210 } - - { offsetInCU: 0x4E0E, offset: 0xB1CFA, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E90, symBinAddr: 0x9AB90, symSize: 0x1B8 } - - { offsetInCU: 0x5399, offset: 0xB2285, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0x983E4, symSize: 0x5A8 } - - { offsetInCU: 0x5EE1, offset: 0xB2DCD, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0x9898C, symSize: 0x6C4 } - - { offsetInCU: 0x62A7, offset: 0xB3193, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3350, symBinAddr: 0x99050, symSize: 0x1F0 } - - { offsetInCU: 0x67BC, offset: 0xB36A8, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x3540, symBinAddr: 0x99240, symSize: 0x7C4 } - - { offsetInCU: 0x75BF, offset: 0xB44AB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3D04, symBinAddr: 0x99A04, symSize: 0x614 } - - { offsetInCU: 0x7F4E, offset: 0xB4E3A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4318, symBinAddr: 0x9A018, symSize: 0xB78 } - - { offsetInCU: 0x9487, offset: 0xB6373, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x513C, symBinAddr: 0x9AE3C, symSize: 0x23CC } - - { offsetInCU: 0xC9EC, offset: 0xB98D8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5048, symBinAddr: 0x9AD48, symSize: 0xF4 } - - { offsetInCU: 0xCBE7, offset: 0xB9AD3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7508, symBinAddr: 0x9D208, symSize: 0x30 } - - { offsetInCU: 0xCCD8, offset: 0xB9BC4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x7538, symBinAddr: 0x9D238, symSize: 0x58 } - - { offsetInCU: 0xCD4D, offset: 0xB9C39, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x9D290, symSize: 0x4 } - - { offsetInCU: 0xCD95, offset: 0xB9C81, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x9D290, symSize: 0x4 } - - { offsetInCU: 0xCDC4, offset: 0xB9CB0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x9D290, symSize: 0x4 } - - { offsetInCU: 0xCDE8, offset: 0xB9CD4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7594, symBinAddr: 0x9D294, symSize: 0x8C } - - { offsetInCU: 0xCF3B, offset: 0xB9E27, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0x9D320, symSize: 0x4 } - - { offsetInCU: 0xCF74, offset: 0xB9E60, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0x9D320, symSize: 0x4 } - - { offsetInCU: 0xD20D, offset: 0xBA0F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x7624, symBinAddr: 0x9D324, symSize: 0x1400 } - - { offsetInCU: 0xF96D, offset: 0xBC859, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x97EC, symBinAddr: 0x9F4EC, symSize: 0x200 } - - { offsetInCU: 0xFED4, offset: 0xBCDC0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8A24, symBinAddr: 0x9E724, symSize: 0x20 } - - { offsetInCU: 0x10371, offset: 0xBD25D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8A44, symBinAddr: 0x9E744, symSize: 0xB98 } - - { offsetInCU: 0x26, offset: 0xBE000, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x9F6EC, symSize: 0x1E0 } - - { offsetInCU: 0x1D2, offset: 0xBE1AC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x9F6EC, symSize: 0x1E0 } - - { offsetInCU: 0x26, offset: 0xBE447, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x9F8CC, symSize: 0x3C } - - { offsetInCU: 0x34, offset: 0xBE455, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x9F8CC, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xBE565, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x9F908, symSize: 0x90 } - - { offsetInCU: 0x34, offset: 0xBE573, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x9F908, symSize: 0x90 } - - { offsetInCU: 0x86, offset: 0xBE6D6, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0x5826D0, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0xBE708, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0x582660, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0xBE72A, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0x582690, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0xBE740, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0x5826C0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0xBEA07, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x9F998, symSize: 0x18 } - - { offsetInCU: 0x3FB, offset: 0xBEA4B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x9F998, symSize: 0x18 } - - { offsetInCU: 0x594, offset: 0xBEBE4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x9F9B0, symSize: 0x18 } - - { offsetInCU: 0x63F, offset: 0xBEC8F, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x9F9C8, symSize: 0x300 } - - { offsetInCU: 0x10E8, offset: 0xBF738, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0x9FCC8, symSize: 0xAC } - - { offsetInCU: 0x13DE, offset: 0xBFA2E, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0x9FD74, symSize: 0x4D0 } - - { offsetInCU: 0x24F2, offset: 0xC0B42, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0xA0244, symSize: 0x28C } - - { offsetInCU: 0x2B67, offset: 0xC11B7, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0xA04D0, symSize: 0xF4 } - - { offsetInCU: 0x2D72, offset: 0xC13C2, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0xA05C4, symSize: 0x168 } - - { offsetInCU: 0x26, offset: 0xC171F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA072C, symSize: 0x38 } - - { offsetInCU: 0xFA, offset: 0xC17F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA072C, symSize: 0x38 } - - { offsetInCU: 0x12C, offset: 0xC1825, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA072C, symSize: 0x38 } - - { offsetInCU: 0x199, offset: 0xC1892, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xA0764, symSize: 0x3C } - - { offsetInCU: 0x1F3, offset: 0xC18EC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xA0764, symSize: 0x3C } - - { offsetInCU: 0x31B, offset: 0xC1A14, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0xA07A0, symSize: 0x5C } - - { offsetInCU: 0x517, offset: 0xC1C10, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0xA07FC, symSize: 0x1C } - - { offsetInCU: 0x636, offset: 0xC1D2F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0xA0818, symSize: 0x54 } - - { offsetInCU: 0x6D0, offset: 0xC1DC9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0xA086C, symSize: 0x4C } - - { offsetInCU: 0x8A8, offset: 0xC1FA1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xA08B8, symSize: 0xA8 } - - { offsetInCU: 0x90C, offset: 0xC2005, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xA08B8, symSize: 0xA8 } - - { offsetInCU: 0xBA6, offset: 0xC229F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0xA0960, symSize: 0x124 } - - { offsetInCU: 0xEC3, offset: 0xC25BC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xA0A84, symSize: 0xC8 } - - { offsetInCU: 0xF43, offset: 0xC263C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xA0A84, symSize: 0xC8 } - - { offsetInCU: 0x10B0, offset: 0xC27A9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0xA0B4C, symSize: 0x160 } - - { offsetInCU: 0x134C, offset: 0xC2A45, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x580, symBinAddr: 0xA0CAC, symSize: 0x150 } - - { offsetInCU: 0x14BB, offset: 0xC2BB4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x6D0, symBinAddr: 0xA0DFC, symSize: 0x18 } - - { offsetInCU: 0x1522, offset: 0xC2C1B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x6E8, symBinAddr: 0xA0E14, symSize: 0xC } - - { offsetInCU: 0x155B, offset: 0xC2C54, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x6F4, symBinAddr: 0xA0E20, symSize: 0x8 } - - { offsetInCU: 0x15DF, offset: 0xC2CD8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x6FC, symBinAddr: 0xA0E28, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xC2E85, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xA0E64, symSize: 0x120 } - - { offsetInCU: 0x34, offset: 0xC2E93, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xA0E64, symSize: 0x120 } - - { offsetInCU: 0x34, offset: 0xC2F99, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x364, symBinAddr: 0xC2B570, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xC2FDB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xA0F84, symSize: 0x35C } - - { offsetInCU: 0x76, offset: 0xC302B, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x583000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xC30AF, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x5A8000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xC3310, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xA0F84, symSize: 0x35C } - - { offsetInCU: 0xC70, offset: 0xC3C25, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0xA12E0, symSize: 0x1FC } - - { offsetInCU: 0x116D, offset: 0xC4122, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0xA14DC, symSize: 0x1B8 } - - { offsetInCU: 0x10, offset: 0xC44F7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xA16A0, symSize: 0x1A0 } - - { offsetInCU: 0x50, offset: 0xC4537, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xA16A0, symSize: 0x1A0 } - - { offsetInCU: 0x5E, offset: 0xC4545, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0xA1840, symSize: 0x60 } - - { offsetInCU: 0x81, offset: 0xC4568, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0xA18A0, symSize: 0x288 } - - { offsetInCU: 0x10, offset: 0xC4559, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xA1B30, symSize: 0x130 } - - { offsetInCU: 0x48, offset: 0xC4591, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xA1B30, symSize: 0x130 } - - { offsetInCU: 0x5F, offset: 0xC45A8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0xA1C60, symSize: 0x70 } - - { offsetInCU: 0x75, offset: 0xC45BE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0xA1CD0, symSize: 0x160 } - - { offsetInCU: 0x7A, offset: 0xC45C3, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0xA1E30, symSize: 0x378 } - - { offsetInCU: 0x10, offset: 0xC45D1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xA21C0, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xC4609, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xA21C0, symSize: 0x3A0 } - - { offsetInCU: 0x4C, offset: 0xC460D, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0xA2560, symSize: 0x6C0 } - - { offsetInCU: 0x66, offset: 0xC4627, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0xA2C20, symSize: 0x1138 } - - { offsetInCU: 0x50, offset: 0xC4673, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0xA3EC0, symSize: 0x1180 } - - { offsetInCU: 0x66, offset: 0xC4689, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0xA5040, symSize: 0x1410 } - - { offsetInCU: 0x10, offset: 0xC467F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA6460, symSize: 0x240 } - - { offsetInCU: 0x45, offset: 0xC46B4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA6460, symSize: 0x240 } - - { offsetInCU: 0x4D, offset: 0xC46BC, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0xA66A0, symSize: 0x9E0 } - - { offsetInCU: 0x63, offset: 0xC46D2, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0xA7080, symSize: 0x650 } - - { offsetInCU: 0x10, offset: 0xC46E1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA76E0, symSize: 0x40 } - - { offsetInCU: 0x47, offset: 0xC4718, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA76E0, symSize: 0x40 } - - { offsetInCU: 0x5D, offset: 0xC472E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0xA7720, symSize: 0x40 } - - { offsetInCU: 0x76, offset: 0xC4747, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0xA7760, symSize: 0x40 } - - { offsetInCU: 0x81, offset: 0xC4752, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0xA77A0, symSize: 0x1E0 } - - { offsetInCU: 0x97, offset: 0xC4768, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0xA7980, symSize: 0x170 } - - { offsetInCU: 0xAB, offset: 0xC477C, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0xA7AF0, symSize: 0x50 } - - { offsetInCU: 0xC3, offset: 0xC4794, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0xA7B40, symSize: 0x50 } - - { offsetInCU: 0xD9, offset: 0xC47AA, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0xA7B90, symSize: 0x50 } - - { offsetInCU: 0xEF, offset: 0xC47C0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0xA7BE0, symSize: 0x60 } - - { offsetInCU: 0x111, offset: 0xC47E2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0xA7C40, symSize: 0x1E0 } - - { offsetInCU: 0x124, offset: 0xC47F5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0xA7E20, symSize: 0x360 } - - { offsetInCU: 0x141, offset: 0xC4812, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0xA8180, symSize: 0x2D0 } - - { offsetInCU: 0x156, offset: 0xC4827, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0xA8450, symSize: 0x2B0 } - - { offsetInCU: 0x170, offset: 0xC4841, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0xA8700, symSize: 0x250 } - - { offsetInCU: 0x184, offset: 0xC4855, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0xA8950, symSize: 0x60 } - - { offsetInCU: 0x19A, offset: 0xC486B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0xA89B0, symSize: 0x44 } - - { offsetInCU: 0x10, offset: 0xC4861, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xA8A00, symSize: 0xB90 } - - { offsetInCU: 0x4C, offset: 0xC489D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xA8A00, symSize: 0xB90 } - - { offsetInCU: 0x62, offset: 0xC48B3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0xA9590, symSize: 0xB98 } - - { offsetInCU: 0x10, offset: 0xC48AD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAA140, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC48EE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAA140, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC48EE, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xAAF80, symSize: 0x7E0 } - - { offsetInCU: 0x10, offset: 0xC48F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAB780, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC493A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAB780, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC493A, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xAC5C0, symSize: 0x1F0 } + - { offsetInCU: 0x65, offset: 0xA83BD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x4168, symSize: 0x10 } + - { offsetInCU: 0x85, offset: 0xA83DD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x4168, symSize: 0x10 } + - { offsetInCU: 0xBB, offset: 0xA8413, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x10, symBinAddr: 0x4178, symSize: 0x10 } + - { offsetInCU: 0xDB, offset: 0xA8433, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x10, symBinAddr: 0x4178, symSize: 0x10 } + - { offsetInCU: 0x114, offset: 0xA846C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x20, symBinAddr: 0x4188, symSize: 0x14 } + - { offsetInCU: 0x134, offset: 0xA848C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x20, symBinAddr: 0x4188, symSize: 0x14 } + - { offsetInCU: 0x16A, offset: 0xA84C2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x34, symBinAddr: 0x419C, symSize: 0x14 } + - { offsetInCU: 0x18A, offset: 0xA84E2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x34, symBinAddr: 0x419C, symSize: 0x14 } + - { offsetInCU: 0x1C5, offset: 0xA851D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x48, symBinAddr: 0x41B0, symSize: 0x10 } + - { offsetInCU: 0x1E5, offset: 0xA853D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x48, symBinAddr: 0x41B0, symSize: 0x10 } + - { offsetInCU: 0x21B, offset: 0xA8573, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0x58, symBinAddr: 0x41C0, symSize: 0x10 } + - { offsetInCU: 0x23B, offset: 0xA8593, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0x58, symBinAddr: 0x41C0, symSize: 0x10 } + - { offsetInCU: 0x274, offset: 0xA85CC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0x68, symBinAddr: 0x41D0, symSize: 0x10 } + - { offsetInCU: 0x294, offset: 0xA85EC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0x68, symBinAddr: 0x41D0, symSize: 0x10 } + - { offsetInCU: 0x2CC, offset: 0xA8624, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvsTo', symObjAddr: 0x78, symBinAddr: 0x41E0, symSize: 0x34 } + - { offsetInCU: 0x325, offset: 0xA867D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0xAC, symBinAddr: 0x4214, symSize: 0x10 } + - { offsetInCU: 0x345, offset: 0xA869D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0xAC, symBinAddr: 0x4214, symSize: 0x10 } + - { offsetInCU: 0x378, offset: 0xA86D0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0xBC, symBinAddr: 0x4224, symSize: 0x10 } + - { offsetInCU: 0x398, offset: 0xA86F0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0xBC, symBinAddr: 0x4224, symSize: 0x10 } + - { offsetInCU: 0x3D0, offset: 0xA8728, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvsTo', symObjAddr: 0xCC, symBinAddr: 0x4234, symSize: 0x34 } + - { offsetInCU: 0x433, offset: 0xA878B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x278, symBinAddr: 0x43E0, symSize: 0x40 } + - { offsetInCU: 0x465, offset: 0xA87BD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4420, symSize: 0x10 } + - { offsetInCU: 0x485, offset: 0xA87DD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4420, symSize: 0x10 } + - { offsetInCU: 0x4A2, offset: 0xA87FA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4420, symSize: 0x10 } + - { offsetInCU: 0x4D4, offset: 0xA882C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4440, symSize: 0x14 } + - { offsetInCU: 0x4F4, offset: 0xA884C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4440, symSize: 0x14 } + - { offsetInCU: 0x511, offset: 0xA8869, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4440, symSize: 0x14 } + - { offsetInCU: 0x543, offset: 0xA889B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x4468, symSize: 0x10 } + - { offsetInCU: 0x563, offset: 0xA88BB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x4468, symSize: 0x10 } + - { offsetInCU: 0x580, offset: 0xA88D8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x4468, symSize: 0x10 } + - { offsetInCU: 0x59C, offset: 0xA88F4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgTo', symObjAddr: 0x320, symBinAddr: 0x4488, symSize: 0x34 } + - { offsetInCU: 0x5E4, offset: 0xA893C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyFTo', symObjAddr: 0x610, symBinAddr: 0x4778, symSize: 0x34 } + - { offsetInCU: 0x62C, offset: 0xA8984, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfcTo', symObjAddr: 0x708, symBinAddr: 0x4870, symSize: 0x20 } + - { offsetInCU: 0x659, offset: 0xA89B1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCfETo', symObjAddr: 0x734, symBinAddr: 0x489C, symSize: 0x48 } + - { offsetInCU: 0x6AA, offset: 0xA8A02, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x77C, symBinAddr: 0x48E4, symSize: 0x10 } + - { offsetInCU: 0x6CA, offset: 0xA8A22, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x77C, symBinAddr: 0x48E4, symSize: 0x10 } + - { offsetInCU: 0x700, offset: 0xA8A58, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x78C, symBinAddr: 0x48F4, symSize: 0x10 } + - { offsetInCU: 0x720, offset: 0xA8A78, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x78C, symBinAddr: 0x48F4, symSize: 0x10 } + - { offsetInCU: 0x759, offset: 0xA8AB1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x79C, symBinAddr: 0x4904, symSize: 0x10 } + - { offsetInCU: 0x779, offset: 0xA8AD1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x79C, symBinAddr: 0x4904, symSize: 0x10 } + - { offsetInCU: 0x7AF, offset: 0xA8B07, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x7AC, symBinAddr: 0x4914, symSize: 0x10 } + - { offsetInCU: 0x7CF, offset: 0xA8B27, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x7AC, symBinAddr: 0x4914, symSize: 0x10 } + - { offsetInCU: 0x808, offset: 0xA8B60, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x7BC, symBinAddr: 0x4924, symSize: 0x10 } + - { offsetInCU: 0x828, offset: 0xA8B80, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x7BC, symBinAddr: 0x4924, symSize: 0x10 } + - { offsetInCU: 0x85E, offset: 0xA8BB6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x7CC, symBinAddr: 0x4934, symSize: 0x10 } + - { offsetInCU: 0x87E, offset: 0xA8BD6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x7CC, symBinAddr: 0x4934, symSize: 0x10 } + - { offsetInCU: 0x8B7, offset: 0xA8C0F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x7DC, symBinAddr: 0x4944, symSize: 0x10 } + - { offsetInCU: 0x8D7, offset: 0xA8C2F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x7DC, symBinAddr: 0x4944, symSize: 0x10 } + - { offsetInCU: 0x90F, offset: 0xA8C67, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvsTo', symObjAddr: 0x7EC, symBinAddr: 0x4954, symSize: 0x34 } + - { offsetInCU: 0x968, offset: 0xA8CC0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x820, symBinAddr: 0x4988, symSize: 0x44 } + - { offsetInCU: 0x9D6, offset: 0xA8D2E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x8A8, symBinAddr: 0x4A10, symSize: 0x64 } + - { offsetInCU: 0xACA, offset: 0xA8E22, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScale12CoreGraphics7CGFloatVyFTo', symObjAddr: 0xE78, symBinAddr: 0x4FE0, symSize: 0xB8 } + - { offsetInCU: 0xBA6, offset: 0xA8EFE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x193C, symBinAddr: 0x5AA4, symSize: 0x28 } + - { offsetInCU: 0xBD8, offset: 0xA8F30, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x1AD0, symBinAddr: 0x5C38, symSize: 0x28 } + - { offsetInCU: 0xC0A, offset: 0xA8F62, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1AFC, symBinAddr: 0x5C60, symSize: 0x28 } + - { offsetInCU: 0xC52, offset: 0xA8FAA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1B24, symBinAddr: 0x5C88, symSize: 0x10 } + - { offsetInCU: 0xC72, offset: 0xA8FCA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1B24, symBinAddr: 0x5C88, symSize: 0x10 } + - { offsetInCU: 0xCC6, offset: 0xA901E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1E68, symBinAddr: 0x5FCC, symSize: 0x20 } + - { offsetInCU: 0xCFD, offset: 0xA9055, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x20F4, symBinAddr: 0x6258, symSize: 0x28 } + - { offsetInCU: 0xD4F, offset: 0xA90A7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x2258, symBinAddr: 0x63BC, symSize: 0x58 } + - { offsetInCU: 0xD81, offset: 0xA90D9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x2310, symBinAddr: 0x6474, symSize: 0x34 } + - { offsetInCU: 0xDB4, offset: 0xA910C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x2388, symBinAddr: 0x64EC, symSize: 0x60 } + - { offsetInCU: 0xE79, offset: 0xA91D1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9emitEventyySo9NSRunLoopC_So7NSTimerCtFZTo', symObjAddr: 0x2454, symBinAddr: 0x65B8, symSize: 0x24 } + - { offsetInCU: 0xF6D, offset: 0xA92C5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x3668, symBinAddr: 0x77CC, symSize: 0x14F0 } + - { offsetInCU: 0x1EB7, offset: 0xAA20F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4B58, symBinAddr: 0x8CBC, symSize: 0x114 } + - { offsetInCU: 0x2047, offset: 0xAA39F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4C6C, symBinAddr: 0x8DD0, symSize: 0x1E0 } + - { offsetInCU: 0x21F7, offset: 0xAA54F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4E4C, symBinAddr: 0x8FB0, symSize: 0x298 } + - { offsetInCU: 0x23DA, offset: 0xAA732, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x96C, symBinAddr: 0x4AD4, symSize: 0x50 } + - { offsetInCU: 0x2412, offset: 0xAA76A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x9BC, symBinAddr: 0x4B24, symSize: 0x64 } + - { offsetInCU: 0x24A8, offset: 0xAA800, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x2728, symBinAddr: 0x688C, symSize: 0x4C } + - { offsetInCU: 0x24C0, offset: 0xAA818, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x3090, symBinAddr: 0x71F4, symSize: 0x80 } + - { offsetInCU: 0x24EF, offset: 0xAA847, size: 0x8, addend: 0x0, symName: '_$sSvSiIegyy_SvSiIeyByy_TR', symObjAddr: 0x3110, symBinAddr: 0x7274, symSize: 0x48 } + - { offsetInCU: 0x252C, offset: 0xAA884, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSS_Tgm5', symObjAddr: 0x3240, symBinAddr: 0x73A4, symSize: 0x80 } + - { offsetInCU: 0x2670, offset: 0xAA9C8, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x3590, symBinAddr: 0x76F4, symSize: 0x10 } + - { offsetInCU: 0x2684, offset: 0xAA9DC, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x35A0, symBinAddr: 0x7704, symSize: 0x8 } + - { offsetInCU: 0x2698, offset: 0xAA9F0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCMa', symObjAddr: 0x35A8, symBinAddr: 0x770C, symSize: 0x20 } + - { offsetInCU: 0x26AC, offset: 0xAAA04, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x35C8, symBinAddr: 0x772C, symSize: 0x40 } + - { offsetInCU: 0x26C0, offset: 0xAAA18, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x3648, symBinAddr: 0x77AC, symSize: 0x20 } + - { offsetInCU: 0x2A15, offset: 0xAAD6D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5118, symBinAddr: 0x927C, symSize: 0x304 } + - { offsetInCU: 0x2C11, offset: 0xAAF69, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x54AC, symBinAddr: 0x9610, symSize: 0x3DC } + - { offsetInCU: 0x2E32, offset: 0xAB18A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x58C0, symBinAddr: 0x9A24, symSize: 0x10 } + - { offsetInCU: 0x2E46, offset: 0xAB19E, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x5AD8, symBinAddr: 0x9C3C, symSize: 0xC } + - { offsetInCU: 0x2E5A, offset: 0xAB1B2, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x5AE4, symBinAddr: 0x9C48, symSize: 0x4 } + - { offsetInCU: 0x2E6E, offset: 0xAB1C6, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x5AE8, symBinAddr: 0x9C4C, symSize: 0x20 } + - { offsetInCU: 0x2E82, offset: 0xAB1DA, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x5B08, symBinAddr: 0x9C6C, symSize: 0x28 } + - { offsetInCU: 0x2EA1, offset: 0xAB1F9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x5BAC, symBinAddr: 0x9D10, symSize: 0x10 } + - { offsetInCU: 0x2ECA, offset: 0xAB222, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU_TA', symObjAddr: 0x5BE0, symBinAddr: 0x9D44, symSize: 0x24 } + - { offsetInCU: 0x2EFE, offset: 0xAB256, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x5C04, symBinAddr: 0x9D68, symSize: 0x40 } + - { offsetInCU: 0x2F12, offset: 0xAB26A, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x5C84, symBinAddr: 0x9DE8, symSize: 0x44 } + - { offsetInCU: 0x2F26, offset: 0xAB27E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU0_Tf2nni_nTA', symObjAddr: 0x5D28, symBinAddr: 0x9E8C, symSize: 0x28 } + - { offsetInCU: 0x2F63, offset: 0xAB2BB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x5D74, symBinAddr: 0x9ED8, symSize: 0x8 } + - { offsetInCU: 0x3777, offset: 0xABACF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x100, symBinAddr: 0x4268, symSize: 0x178 } + - { offsetInCU: 0x3993, offset: 0xABCEB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x2C8, symBinAddr: 0x4430, symSize: 0x10 } + - { offsetInCU: 0x39B3, offset: 0xABD0B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x2C8, symBinAddr: 0x4430, symSize: 0x10 } + - { offsetInCU: 0x39E2, offset: 0xABD3A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x2EC, symBinAddr: 0x4454, symSize: 0x14 } + - { offsetInCU: 0x3A02, offset: 0xABD5A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x2EC, symBinAddr: 0x4454, symSize: 0x14 } + - { offsetInCU: 0x3A31, offset: 0xABD89, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x310, symBinAddr: 0x4478, symSize: 0x10 } + - { offsetInCU: 0x3A51, offset: 0xABDA9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x310, symBinAddr: 0x4478, symSize: 0x10 } + - { offsetInCU: 0x3A87, offset: 0xABDDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg', symObjAddr: 0x354, symBinAddr: 0x44BC, symSize: 0x124 } + - { offsetInCU: 0x3B9C, offset: 0xABEF4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgySv_SitcfU_Tf4nnd_n', symObjAddr: 0x358C, symBinAddr: 0x76F0, symSize: 0x4 } + - { offsetInCU: 0x3BD0, offset: 0xABF28, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF', symObjAddr: 0x478, symBinAddr: 0x45E0, symSize: 0x198 } + - { offsetInCU: 0x3DFA, offset: 0xAC152, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfC', symObjAddr: 0x644, symBinAddr: 0x47AC, symSize: 0x20 } + - { offsetInCU: 0x3E0E, offset: 0xAC166, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfc', symObjAddr: 0x664, symBinAddr: 0x47CC, symSize: 0xA4 } + - { offsetInCU: 0x3F26, offset: 0xAC27E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x864, symBinAddr: 0x49CC, symSize: 0x44 } + - { offsetInCU: 0x3F79, offset: 0xAC2D1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x90C, symBinAddr: 0x4A74, symSize: 0x60 } + - { offsetInCU: 0x3FE9, offset: 0xAC341, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0xA20, symBinAddr: 0x4B88, symSize: 0x48 } + - { offsetInCU: 0x400E, offset: 0xAC366, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0xA68, symBinAddr: 0x4BD0, symSize: 0x3C } + - { offsetInCU: 0x406A, offset: 0xAC3C2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0xAEC, symBinAddr: 0x4C54, symSize: 0x48 } + - { offsetInCU: 0x408F, offset: 0xAC3E7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xDFC, symBinAddr: 0x4F64, symSize: 0x48 } + - { offsetInCU: 0x422C, offset: 0xAC584, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xF30, symBinAddr: 0x5098, symSize: 0x444 } + - { offsetInCU: 0x45A2, offset: 0xAC8FA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x1374, symBinAddr: 0x54DC, symSize: 0x5C4 } + - { offsetInCU: 0x4887, offset: 0xACBDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1964, symBinAddr: 0x5ACC, symSize: 0x16C } + - { offsetInCU: 0x4A13, offset: 0xACD6B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1B34, symBinAddr: 0x5C98, symSize: 0x50 } + - { offsetInCU: 0x4A27, offset: 0xACD7F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1B84, symBinAddr: 0x5CE8, symSize: 0x2E4 } + - { offsetInCU: 0x4AA3, offset: 0xACDFB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1E88, symBinAddr: 0x5FEC, symSize: 0x26C } + - { offsetInCU: 0x4B63, offset: 0xACEBB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVF', symObjAddr: 0x211C, symBinAddr: 0x6280, symSize: 0x13C } + - { offsetInCU: 0x4CF9, offset: 0xAD051, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x22B0, symBinAddr: 0x6414, symSize: 0x60 } + - { offsetInCU: 0x4D5A, offset: 0xAD0B2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2344, symBinAddr: 0x64A8, symSize: 0x44 } + - { offsetInCU: 0x4DAD, offset: 0xAD105, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23E8, symBinAddr: 0x654C, symSize: 0x4 } + - { offsetInCU: 0x4DC1, offset: 0xAD119, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23F8, symBinAddr: 0x655C, symSize: 0x4 } + - { offsetInCU: 0x4DD5, offset: 0xAD12D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x2408, symBinAddr: 0x656C, symSize: 0x4 } + - { offsetInCU: 0x4E33, offset: 0xAD18B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ', symObjAddr: 0x2478, symBinAddr: 0x65DC, symSize: 0x2B0 } + - { offsetInCU: 0x4FAA, offset: 0xAD302, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_', symObjAddr: 0x2B68, symBinAddr: 0x6CCC, symSize: 0x4D0 } + - { offsetInCU: 0x5173, offset: 0xAD4CB, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x3158, symBinAddr: 0x72BC, symSize: 0xE8 } + - { offsetInCU: 0x51AF, offset: 0xAD507, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x32C0, symBinAddr: 0x7424, symSize: 0x1F4 } + - { offsetInCU: 0x520C, offset: 0xAD564, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x34B4, symBinAddr: 0x7618, symSize: 0x1C } + - { offsetInCU: 0x5243, offset: 0xAD59B, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x34D0, symBinAddr: 0x7634, symSize: 0xBC } + - { offsetInCU: 0x26, offset: 0xAD935, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xAD114, symSize: 0x26E4 } + - { offsetInCU: 0x40, offset: 0xAD94F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9A58, symBinAddr: 0x4FF188, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0xAD9A1, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFA58, symBinAddr: 0x505188, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0xADA05, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFA80, symBinAddr: 0x5051B0, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0xADA1B, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0xFE88, symBinAddr: 0x5055B8, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0xADA32, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFAC8, symBinAddr: 0x5051F8, symSize: 0x0 } + - { offsetInCU: 0xE22, offset: 0xAE731, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xAD114, symSize: 0x26E4 } + - { offsetInCU: 0x4BAD, offset: 0xB24BC, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x95DC, symBinAddr: 0xB66F0, symSize: 0x210 } + - { offsetInCU: 0x4E0E, offset: 0xB271D, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E90, symBinAddr: 0xB1FA4, symSize: 0x1B8 } + - { offsetInCU: 0x5399, offset: 0xB2CA8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0xAF7F8, symSize: 0x5A8 } + - { offsetInCU: 0x5EE1, offset: 0xB37F0, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0xAFDA0, symSize: 0x6C4 } + - { offsetInCU: 0x62A7, offset: 0xB3BB6, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3350, symBinAddr: 0xB0464, symSize: 0x1F0 } + - { offsetInCU: 0x67BC, offset: 0xB40CB, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x3540, symBinAddr: 0xB0654, symSize: 0x7C4 } + - { offsetInCU: 0x75BF, offset: 0xB4ECE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3D04, symBinAddr: 0xB0E18, symSize: 0x614 } + - { offsetInCU: 0x7F4E, offset: 0xB585D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4318, symBinAddr: 0xB142C, symSize: 0xB78 } + - { offsetInCU: 0x9487, offset: 0xB6D96, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x513C, symBinAddr: 0xB2250, symSize: 0x23CC } + - { offsetInCU: 0xC9EC, offset: 0xBA2FB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5048, symBinAddr: 0xB215C, symSize: 0xF4 } + - { offsetInCU: 0xCBE7, offset: 0xBA4F6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7508, symBinAddr: 0xB461C, symSize: 0x30 } + - { offsetInCU: 0xCCD8, offset: 0xBA5E7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x7538, symBinAddr: 0xB464C, symSize: 0x58 } + - { offsetInCU: 0xCD4D, offset: 0xBA65C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0xB46A4, symSize: 0x4 } + - { offsetInCU: 0xCD95, offset: 0xBA6A4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0xB46A4, symSize: 0x4 } + - { offsetInCU: 0xCDC4, offset: 0xBA6D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0xB46A4, symSize: 0x4 } + - { offsetInCU: 0xCDE8, offset: 0xBA6F7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7594, symBinAddr: 0xB46A8, symSize: 0x8C } + - { offsetInCU: 0xCF3B, offset: 0xBA84A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0xB4734, symSize: 0x4 } + - { offsetInCU: 0xCF74, offset: 0xBA883, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0xB4734, symSize: 0x4 } + - { offsetInCU: 0xD20D, offset: 0xBAB1C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x7624, symBinAddr: 0xB4738, symSize: 0x1400 } + - { offsetInCU: 0xF96D, offset: 0xBD27C, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x97EC, symBinAddr: 0xB6900, symSize: 0x200 } + - { offsetInCU: 0xFED4, offset: 0xBD7E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8A24, symBinAddr: 0xB5B38, symSize: 0x20 } + - { offsetInCU: 0x10371, offset: 0xBDC80, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8A44, symBinAddr: 0xB5B58, symSize: 0xB98 } + - { offsetInCU: 0x26, offset: 0xBEA23, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xB6B00, symSize: 0x1E0 } + - { offsetInCU: 0x1D2, offset: 0xBEBCF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xB6B00, symSize: 0x1E0 } + - { offsetInCU: 0x26, offset: 0xBEE6A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xB6CE0, symSize: 0x3C } + - { offsetInCU: 0x34, offset: 0xBEE78, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xB6CE0, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xBEF88, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xB6D1C, symSize: 0x90 } + - { offsetInCU: 0x34, offset: 0xBEF96, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xB6D1C, symSize: 0x90 } + - { offsetInCU: 0x86, offset: 0xBF0F9, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0x505680, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0xBF12B, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0x505610, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0xBF14D, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0x505640, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0xBF163, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0x505670, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0xBF42A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xB6DAC, symSize: 0x18 } + - { offsetInCU: 0x3FB, offset: 0xBF46E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xB6DAC, symSize: 0x18 } + - { offsetInCU: 0x594, offset: 0xBF607, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0xB6DC4, symSize: 0x18 } + - { offsetInCU: 0x63F, offset: 0xBF6B2, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0xB6DDC, symSize: 0x300 } + - { offsetInCU: 0x10E8, offset: 0xC015B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0xB70DC, symSize: 0xAC } + - { offsetInCU: 0x13DE, offset: 0xC0451, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0xB7188, symSize: 0x4D0 } + - { offsetInCU: 0x24F2, offset: 0xC1565, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0xB7658, symSize: 0x28C } + - { offsetInCU: 0x2B67, offset: 0xC1BDA, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0xB78E4, symSize: 0xF4 } + - { offsetInCU: 0x2D72, offset: 0xC1DE5, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0xB79D8, symSize: 0x168 } + - { offsetInCU: 0x26, offset: 0xC2142, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB7B40, symSize: 0x38 } + - { offsetInCU: 0xFA, offset: 0xC2216, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB7B40, symSize: 0x38 } + - { offsetInCU: 0x12C, offset: 0xC2248, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB7B40, symSize: 0x38 } + - { offsetInCU: 0x199, offset: 0xC22B5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xB7B78, symSize: 0x3C } + - { offsetInCU: 0x1F3, offset: 0xC230F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xB7B78, symSize: 0x3C } + - { offsetInCU: 0x31B, offset: 0xC2437, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0xB7BB4, symSize: 0x5C } + - { offsetInCU: 0x517, offset: 0xC2633, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0xB7C10, symSize: 0x1C } + - { offsetInCU: 0x636, offset: 0xC2752, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0xB7C2C, symSize: 0x54 } + - { offsetInCU: 0x6D0, offset: 0xC27EC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0xB7C80, symSize: 0x4C } + - { offsetInCU: 0x8A8, offset: 0xC29C4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xB7CCC, symSize: 0xA8 } + - { offsetInCU: 0x90C, offset: 0xC2A28, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xB7CCC, symSize: 0xA8 } + - { offsetInCU: 0xBA6, offset: 0xC2CC2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0xB7D74, symSize: 0x124 } + - { offsetInCU: 0xEC3, offset: 0xC2FDF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xB7E98, symSize: 0xC8 } + - { offsetInCU: 0xF43, offset: 0xC305F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xB7E98, symSize: 0xC8 } + - { offsetInCU: 0x10B0, offset: 0xC31CC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0xB7F60, symSize: 0x160 } + - { offsetInCU: 0x134C, offset: 0xC3468, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x580, symBinAddr: 0xB80C0, symSize: 0x150 } + - { offsetInCU: 0x14BB, offset: 0xC35D7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x6D0, symBinAddr: 0xB8210, symSize: 0x18 } + - { offsetInCU: 0x1522, offset: 0xC363E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x6E8, symBinAddr: 0xB8228, symSize: 0xC } + - { offsetInCU: 0x155B, offset: 0xC3677, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x6F4, symBinAddr: 0xB8234, symSize: 0x8 } + - { offsetInCU: 0x15DF, offset: 0xC36FB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x6FC, symBinAddr: 0xB823C, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xC38A8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xB8278, symSize: 0x120 } + - { offsetInCU: 0x34, offset: 0xC38B6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xB8278, symSize: 0x120 } + - { offsetInCU: 0x34, offset: 0xC39BC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x364, symBinAddr: 0xB7B980, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xC39FE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xB8398, symSize: 0x35C } + - { offsetInCU: 0x76, offset: 0xC3A4E, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x506000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xC3AD2, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x52B000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xC3D33, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xB8398, symSize: 0x35C } + - { offsetInCU: 0xC70, offset: 0xC4648, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0xB86F4, symSize: 0x1FC } + - { offsetInCU: 0x116D, offset: 0xC4B45, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0xB88F0, symSize: 0x1B8 } + - { offsetInCU: 0x10, offset: 0xC4F1A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xB8AC0, symSize: 0x1A0 } + - { offsetInCU: 0x50, offset: 0xC4F5A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xB8AC0, symSize: 0x1A0 } + - { offsetInCU: 0x5E, offset: 0xC4F68, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0xB8C60, symSize: 0x60 } + - { offsetInCU: 0x81, offset: 0xC4F8B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0xB8CC0, symSize: 0x288 } + - { offsetInCU: 0x10, offset: 0xC4F7C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xB8F50, symSize: 0x130 } + - { offsetInCU: 0x48, offset: 0xC4FB4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xB8F50, symSize: 0x130 } + - { offsetInCU: 0x5F, offset: 0xC4FCB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0xB9080, symSize: 0x70 } + - { offsetInCU: 0x75, offset: 0xC4FE1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0xB90F0, symSize: 0x160 } + - { offsetInCU: 0x7A, offset: 0xC4FE6, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0xB9250, symSize: 0x378 } + - { offsetInCU: 0x10, offset: 0xC4FF4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xB95E0, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xC502C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xB95E0, symSize: 0x3A0 } + - { offsetInCU: 0x4C, offset: 0xC5030, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0xB9980, symSize: 0x6C0 } + - { offsetInCU: 0x66, offset: 0xC504A, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0xBA040, symSize: 0x1138 } + - { offsetInCU: 0x50, offset: 0xC5096, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0xBB2C0, symSize: 0x1180 } + - { offsetInCU: 0x66, offset: 0xC50AC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0xBC440, symSize: 0x1410 } + - { offsetInCU: 0x10, offset: 0xC50A2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBD860, symSize: 0x240 } + - { offsetInCU: 0x45, offset: 0xC50D7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBD860, symSize: 0x240 } + - { offsetInCU: 0x4D, offset: 0xC50DF, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0xBDAA0, symSize: 0x9E0 } + - { offsetInCU: 0x63, offset: 0xC50F5, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0xBE480, symSize: 0x650 } + - { offsetInCU: 0x10, offset: 0xC5104, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBEAE0, symSize: 0x40 } + - { offsetInCU: 0x47, offset: 0xC513B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBEAE0, symSize: 0x40 } + - { offsetInCU: 0x5D, offset: 0xC5151, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0xBEB20, symSize: 0x40 } + - { offsetInCU: 0x76, offset: 0xC516A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0xBEB60, symSize: 0x40 } + - { offsetInCU: 0x81, offset: 0xC5175, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0xBEBA0, symSize: 0x1E0 } + - { offsetInCU: 0x97, offset: 0xC518B, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0xBED80, symSize: 0x170 } + - { offsetInCU: 0xAB, offset: 0xC519F, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0xBEEF0, symSize: 0x50 } + - { offsetInCU: 0xC3, offset: 0xC51B7, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0xBEF40, symSize: 0x50 } + - { offsetInCU: 0xD9, offset: 0xC51CD, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0xBEF90, symSize: 0x50 } + - { offsetInCU: 0xEF, offset: 0xC51E3, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0xBEFE0, symSize: 0x60 } + - { offsetInCU: 0x111, offset: 0xC5205, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0xBF040, symSize: 0x1E0 } + - { offsetInCU: 0x124, offset: 0xC5218, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0xBF220, symSize: 0x360 } + - { offsetInCU: 0x141, offset: 0xC5235, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0xBF580, symSize: 0x2D0 } + - { offsetInCU: 0x156, offset: 0xC524A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0xBF850, symSize: 0x2B0 } + - { offsetInCU: 0x170, offset: 0xC5264, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0xBFB00, symSize: 0x250 } + - { offsetInCU: 0x184, offset: 0xC5278, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0xBFD50, symSize: 0x60 } + - { offsetInCU: 0x19A, offset: 0xC528E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0xBFDB0, symSize: 0x44 } + - { offsetInCU: 0x10, offset: 0xC5284, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xBFE00, symSize: 0xB90 } + - { offsetInCU: 0x4C, offset: 0xC52C0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xBFE00, symSize: 0xB90 } + - { offsetInCU: 0x62, offset: 0xC52D6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0xC0990, symSize: 0xB98 } + - { offsetInCU: 0x10, offset: 0xC52D0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC1540, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5311, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC1540, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5311, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xC2380, symSize: 0x7E0 } + - { offsetInCU: 0x10, offset: 0xC531C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC2B80, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC535D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC2B80, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC535D, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xC39C0, symSize: 0x1F0 } ... diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/CanvasSVG b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/CanvasSVG index f22b00918..5858316e0 100755 Binary files a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/CanvasSVG and b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/CanvasSVG differ diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/CanvasSVG-Swift.h b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/CanvasSVG-Swift.h index d25817e77..7b83b2b47 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/CanvasSVG-Swift.h +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/CanvasSVG-Swift.h @@ -278,6 +278,7 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); #pragma clang diagnostic ignored "-Watimport-in-framework-header" #endif @import CoreFoundation; +@import ObjectiveC; @import UIKit; #endif @@ -303,12 +304,10 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); @class NSCoder; @class UIImage; @class NSData; +@class NSCSVGData; SWIFT_CLASS_NAMED("NSCSVG") @interface NSCSVG : UIView -@property (nonatomic, readonly) void * _Nullable data; -@property (nonatomic, readonly) CGSize data_size; -@property (nonatomic, readonly) NSUInteger buf_size; @property (nonatomic) BOOL autoScale; @property (nonatomic, copy) NSString * _Nullable src; @property (nonatomic, copy) NSString * _Nullable srcPath; @@ -319,12 +318,24 @@ SWIFT_CLASS_NAMED("NSCSVG") - (void)drawRect:(CGRect)rect; - (UIImage * _Nullable)toImage SWIFT_WARN_UNUSED_RESULT; - (NSData * _Nullable)toData SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; ++ (NSCSVGData * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; +@end + +@class NSMutableData; + +SWIFT_CLASS_NAMED("NSCSVGData") +@interface NSCSVGData : NSObject +@property (nonatomic, readonly) CGFloat width; +@property (nonatomic, readonly) CGFloat height; +@property (nonatomic, readonly) void * _Nullable rawData; +@property (nonatomic, readonly, strong) NSMutableData * _Nullable data; +- (UIImage * _Nullable)getImage SWIFT_WARN_UNUSED_RESULT; +- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; @end #endif @@ -615,6 +626,7 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); #pragma clang diagnostic ignored "-Watimport-in-framework-header" #endif @import CoreFoundation; +@import ObjectiveC; @import UIKit; #endif @@ -640,12 +652,10 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); @class NSCoder; @class UIImage; @class NSData; +@class NSCSVGData; SWIFT_CLASS_NAMED("NSCSVG") @interface NSCSVG : UIView -@property (nonatomic, readonly) void * _Nullable data; -@property (nonatomic, readonly) CGSize data_size; -@property (nonatomic, readonly) NSUInteger buf_size; @property (nonatomic) BOOL autoScale; @property (nonatomic, copy) NSString * _Nullable src; @property (nonatomic, copy) NSString * _Nullable srcPath; @@ -656,12 +666,24 @@ SWIFT_CLASS_NAMED("NSCSVG") - (void)drawRect:(CGRect)rect; - (UIImage * _Nullable)toImage SWIFT_WARN_UNUSED_RESULT; - (NSData * _Nullable)toData SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; ++ (NSCSVGData * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; +@end + +@class NSMutableData; + +SWIFT_CLASS_NAMED("NSCSVGData") +@interface NSCSVGData : NSObject +@property (nonatomic, readonly) CGFloat width; +@property (nonatomic, readonly) CGFloat height; +@property (nonatomic, readonly) void * _Nullable rawData; +@property (nonatomic, readonly, strong) NSMutableData * _Nullable data; +- (UIImage * _Nullable)getImage SWIFT_WARN_UNUSED_RESULT; +- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; @end #endif diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/canvas_svg.h b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/canvas_svg.h index 716ac6f05..daf7068dd 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/canvas_svg.h +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/canvas_svg.h @@ -8,6 +8,16 @@ #include #include +#if defined(TARGET_OS_IOS) +void canvas_native_svg_draw_from_bytes(uint8_t *data, + uintptr_t size, + float width, + float height, + float scale, + const uint8_t *svg_data, + uintptr_t svg_size); +#endif + #if defined(TARGET_OS_IOS) void canvas_native_svg_draw_from_string(uint8_t *data, uintptr_t size, diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo index 933fe5ad7..116be86ed 100644 Binary files a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo and b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo differ diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo index ddcf60a67..7297fd30a 100644 Binary files a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo and b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo differ diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json index 685da180d..d687042ca 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json @@ -21,13 +21,91 @@ }, { "kind": "TypeDecl", - "name": "NSCSVG", - "printedName": "NSCSVG", + "name": "NSCSVGData", + "printedName": "NSCSVGData", "children": [ { "kind": "Var", - "name": "data", - "printedName": "data", + "name": "width", + "printedName": "width", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "height", + "printedName": "height", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "rawData", + "printedName": "rawData", "children": [ { "kind": "TypeNominal", @@ -45,11 +123,10 @@ } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -72,10 +149,9 @@ } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } @@ -83,22 +159,29 @@ }, { "kind": "Var", - "name": "data_size", - "printedName": "data_size", + "name": "data", + "printedName": "data", "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -107,62 +190,144 @@ "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } ] }, { - "kind": "Var", - "name": "buf_size", - "printedName": "buf_size", + "kind": "Function", + "name": "getImage", + "printedName": "getImage()", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" - } - ], - "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvp", - "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, - "accessors": [ - { - "kind": "Accessor", - "name": "Get", - "printedName": "Get()", + "name": "Optional", + "printedName": "UIKit.UIImage?", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" + "name": "UIImage", + "printedName": "UIKit.UIImage", + "usr": "c:objc(cs)UIImage" } ], - "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvg", - "moduleName": "CanvasSVG", - "implicit": true, - "declAttributes": ["ObjC"], - "accessorKind": "get" + "usr": "s:Sq" } - ] + ], + "declKind": "Func", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)getImage", + "mangledName": "$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" }, + { + "kind": "Constructor", + "name": "init", + "printedName": "init()", + "children": [ + { + "kind": "TypeNominal", + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" + } + ], + "declKind": "Constructor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)init", + "mangledName": "$s9CanvasSVG10NSCSVGDataCACycfc", + "moduleName": "CanvasSVG", + "overriding": true, + "implicit": true, + "objc_name": "init", + "declAttributes": ["Dynamic", "ObjC", "Override"], + "init_kind": "Designated" + } + ], + "declKind": "Class", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC", + "moduleName": "CanvasSVG", + "objc_name": "NSCSVGData", + "declAttributes": ["AccessControl", "ObjC", "ObjCMembers"], + "superclassUsr": "c:objc(cs)NSObject", + "inheritsConvenienceInitializers": true, + "superclassNames": ["ObjectiveC.NSObject"], + "conformances": [ + { + "kind": "Conformance", + "name": "Equatable", + "printedName": "Equatable", + "usr": "s:SQ", + "mangledName": "$sSQ" + }, + { + "kind": "Conformance", + "name": "Hashable", + "printedName": "Hashable", + "usr": "s:SH", + "mangledName": "$sSH" + }, + { + "kind": "Conformance", + "name": "CVarArg", + "printedName": "CVarArg", + "usr": "s:s7CVarArgP", + "mangledName": "$ss7CVarArgP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObservingPublishing", + "printedName": "_KeyValueCodingAndObservingPublishing", + "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP", + "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObserving", + "printedName": "_KeyValueCodingAndObserving", + "usr": "s:10Foundation27_KeyValueCodingAndObservingP", + "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP" + }, + { + "kind": "Conformance", + "name": "CustomStringConvertible", + "printedName": "CustomStringConvertible", + "usr": "s:s23CustomStringConvertibleP", + "mangledName": "$ss23CustomStringConvertibleP" + }, + { + "kind": "Conformance", + "name": "CustomDebugStringConvertible", + "printedName": "CustomDebugStringConvertible", + "usr": "s:s28CustomDebugStringConvertibleP", + "mangledName": "$ss28CustomDebugStringConvertibleP" + } + ] + }, + { + "kind": "TypeDecl", + "name": "NSCSVG", + "printedName": "NSCSVG", + "children": [ { "kind": "Var", "name": "autoScale", @@ -616,13 +781,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -636,7 +801,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromStringSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -650,13 +815,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -670,7 +835,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPathSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -684,13 +849,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -704,7 +869,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemoteSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -729,7 +894,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -739,13 +904,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -755,7 +920,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromString::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -780,7 +945,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -790,13 +955,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -806,7 +971,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPath::", - "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -831,7 +996,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -841,13 +1006,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -857,7 +1022,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemote::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -947,42 +1112,42 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "IntegerLiteral", - "offset": 341, + "offset": 291, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 368, + "offset": 2331, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 396, + "offset": 2359, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 417, + "offset": 2380, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 500, + "offset": 2495, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 450, + "offset": 2445, "length": 4, "value": "true" } diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface index 9e6f991aa..2577727e7 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface index 9e6f991aa..2577727e7 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json index 685da180d..d687042ca 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json @@ -21,13 +21,91 @@ }, { "kind": "TypeDecl", - "name": "NSCSVG", - "printedName": "NSCSVG", + "name": "NSCSVGData", + "printedName": "NSCSVGData", "children": [ { "kind": "Var", - "name": "data", - "printedName": "data", + "name": "width", + "printedName": "width", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "height", + "printedName": "height", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "rawData", + "printedName": "rawData", "children": [ { "kind": "TypeNominal", @@ -45,11 +123,10 @@ } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -72,10 +149,9 @@ } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } @@ -83,22 +159,29 @@ }, { "kind": "Var", - "name": "data_size", - "printedName": "data_size", + "name": "data", + "printedName": "data", "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -107,62 +190,144 @@ "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } ] }, { - "kind": "Var", - "name": "buf_size", - "printedName": "buf_size", + "kind": "Function", + "name": "getImage", + "printedName": "getImage()", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" - } - ], - "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvp", - "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, - "accessors": [ - { - "kind": "Accessor", - "name": "Get", - "printedName": "Get()", + "name": "Optional", + "printedName": "UIKit.UIImage?", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" + "name": "UIImage", + "printedName": "UIKit.UIImage", + "usr": "c:objc(cs)UIImage" } ], - "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvg", - "moduleName": "CanvasSVG", - "implicit": true, - "declAttributes": ["ObjC"], - "accessorKind": "get" + "usr": "s:Sq" } - ] + ], + "declKind": "Func", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)getImage", + "mangledName": "$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" }, + { + "kind": "Constructor", + "name": "init", + "printedName": "init()", + "children": [ + { + "kind": "TypeNominal", + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" + } + ], + "declKind": "Constructor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)init", + "mangledName": "$s9CanvasSVG10NSCSVGDataCACycfc", + "moduleName": "CanvasSVG", + "overriding": true, + "implicit": true, + "objc_name": "init", + "declAttributes": ["Dynamic", "ObjC", "Override"], + "init_kind": "Designated" + } + ], + "declKind": "Class", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC", + "moduleName": "CanvasSVG", + "objc_name": "NSCSVGData", + "declAttributes": ["AccessControl", "ObjC", "ObjCMembers"], + "superclassUsr": "c:objc(cs)NSObject", + "inheritsConvenienceInitializers": true, + "superclassNames": ["ObjectiveC.NSObject"], + "conformances": [ + { + "kind": "Conformance", + "name": "Equatable", + "printedName": "Equatable", + "usr": "s:SQ", + "mangledName": "$sSQ" + }, + { + "kind": "Conformance", + "name": "Hashable", + "printedName": "Hashable", + "usr": "s:SH", + "mangledName": "$sSH" + }, + { + "kind": "Conformance", + "name": "CVarArg", + "printedName": "CVarArg", + "usr": "s:s7CVarArgP", + "mangledName": "$ss7CVarArgP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObservingPublishing", + "printedName": "_KeyValueCodingAndObservingPublishing", + "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP", + "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObserving", + "printedName": "_KeyValueCodingAndObserving", + "usr": "s:10Foundation27_KeyValueCodingAndObservingP", + "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP" + }, + { + "kind": "Conformance", + "name": "CustomStringConvertible", + "printedName": "CustomStringConvertible", + "usr": "s:s23CustomStringConvertibleP", + "mangledName": "$ss23CustomStringConvertibleP" + }, + { + "kind": "Conformance", + "name": "CustomDebugStringConvertible", + "printedName": "CustomDebugStringConvertible", + "usr": "s:s28CustomDebugStringConvertibleP", + "mangledName": "$ss28CustomDebugStringConvertibleP" + } + ] + }, + { + "kind": "TypeDecl", + "name": "NSCSVG", + "printedName": "NSCSVG", + "children": [ { "kind": "Var", "name": "autoScale", @@ -616,13 +781,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -636,7 +801,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromStringSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -650,13 +815,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -670,7 +835,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPathSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -684,13 +849,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -704,7 +869,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemoteSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -729,7 +894,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -739,13 +904,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -755,7 +920,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromString::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -780,7 +945,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -790,13 +955,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -806,7 +971,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPath::", - "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -831,7 +996,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -841,13 +1006,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -857,7 +1022,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemote::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -947,42 +1112,42 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "IntegerLiteral", - "offset": 341, + "offset": 291, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 368, + "offset": 2331, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 396, + "offset": 2359, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 417, + "offset": 2380, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 500, + "offset": 2495, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 450, + "offset": 2445, "length": 4, "value": "true" } diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface index fd3b29d60..c8b3f7e2a 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface index fd3b29d60..c8b3f7e2a 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/_CodeSignature/CodeResources b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/_CodeSignature/CodeResources index d2b78f22c..8f4ea139f 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/_CodeSignature/CodeResources +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/_CodeSignature/CodeResources @@ -6,7 +6,7 @@ Headers/CanvasSVG-Swift.h - Jy9uP4EYUMvke/yVeYNlP3IVI3Y= + HqgoBwKqv0bgeTJew7FjRuTzH0c= Headers/CanvasSVG.h @@ -18,7 +18,7 @@ Headers/canvas_svg.h - WhdmQ/1h/sJhKZj8kyueMEpxLDU= + UjEdRBE+rn1irq2D79vsYB1rdqE= Info.plist @@ -26,19 +26,19 @@ Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo - cOq9LO+bJyyyxlv+tV6lu/Gi3KI= + pyzwu5i/GydBxWnBJBgenYsycQA= Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo - Yj5Xv4LrBTPIKb99wXPP7p6AJrI= + /fDC282M4Tt2FwHt2SW5OaSkZEk= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json - 4v3uSc8w/dve4B9bsOmxOx25fgM= + 0UVXpsSeycxphqNyUwBq3fOCvtM= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface - IqcOh08xjYocdQz4CUg0Jp63V2o= + 2cYxSfGlvN25fqdyKmnTb19+1J8= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftdoc @@ -46,19 +46,19 @@ Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface - IqcOh08xjYocdQz4CUg0Jp63V2o= + 2cYxSfGlvN25fqdyKmnTb19+1J8= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftmodule - TejvTVZPJ4anzsKR16fWxzohADc= + 5HRXa92tHlcli3xC44J2AGFX1h0= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json - 4v3uSc8w/dve4B9bsOmxOx25fgM= + 0UVXpsSeycxphqNyUwBq3fOCvtM= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface - J1UiehUSBYBovgHFXpvru8SyIog= + TGnPpd7jxQQuzK+M5mcZ0Cww+f8= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftdoc @@ -66,11 +66,11 @@ Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface - J1UiehUSBYBovgHFXpvru8SyIog= + TGnPpd7jxQQuzK+M5mcZ0Cww+f8= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftmodule - 0lYR0mOLFtCT46dY/kRhKed+Vk8= + SxvOQkQLVxTOCHI8Lb7cLrCk05o= Modules/module.modulemap @@ -83,7 +83,7 @@ hash2 - eEvVEX/mlm8A7O+lz233wS0liYHRofQ18CXUMAu9YG8= + u7TX8s0LwbF4BamQru4hkGJA9+MnnT5T0Gy+s2MzqlM= Headers/CanvasSVG.h @@ -104,35 +104,35 @@ hash2 - WH3gIh6dEQhs+Pq3nSWgX2Vj3U82Hpk9OuZ47AhAPNI= + WnuSN7GDo2EZSRsPw64PyY4ESU/xoToiiC+KpgugJ0E= Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo hash2 - 8yI2i271ues9neYSKlMIGPZR3npzfQlzRaFg5iTcy6I= + jW748CMjBWth5cO9LC9DzkG3A90PvvCQURv/4o1IHRw= Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo hash2 - YvLRJA3vdBWZugxBMCOUkHxNGuWJ0aJ3ui/K9FPYSyM= + BEmyb6GQU41FuMWlfeTofvYtnbfHj9fQEAJ8wHVRBlc= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json hash2 - LEFS4hrvJ/Q7Qkd3GgYy4hyA/V143jNd8uK9IunfdCE= + S/g6fQJ1BzblBfE5OGPDcTLEIJZAT5IEfCF7mv2lOYk= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface hash2 - bm2pXoR3e4AtEFfvkhRltgcUqmmjhVCDFAC9q8NdPqM= + V0i9Q5A4/VItQUmwMT3aCcY1MIQbYZ4FWSjgdxcPxEM= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftdoc @@ -146,28 +146,28 @@ hash2 - bm2pXoR3e4AtEFfvkhRltgcUqmmjhVCDFAC9q8NdPqM= + V0i9Q5A4/VItQUmwMT3aCcY1MIQbYZ4FWSjgdxcPxEM= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftmodule hash2 - ySF/fe1r+lN5vh3xWDWAM9f2fEwwSabk42y5Ria0No0= + Bgjwx82a07IiYbtquJ9sGgES9myA3nao0ipEyhIrO7k= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json hash2 - LEFS4hrvJ/Q7Qkd3GgYy4hyA/V143jNd8uK9IunfdCE= + S/g6fQJ1BzblBfE5OGPDcTLEIJZAT5IEfCF7mv2lOYk= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface hash2 - iRbAuOa3oPtnn7oIQ6ntgYvRaA0FYhw0lntORxA8sDs= + 28DuCwWjdVP9iQTSjVCq23H9sqmZBVXZt+eiHY3E89U= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftdoc @@ -181,14 +181,14 @@ hash2 - iRbAuOa3oPtnn7oIQ6ntgYvRaA0FYhw0lntORxA8sDs= + 28DuCwWjdVP9iQTSjVCq23H9sqmZBVXZt+eiHY3E89U= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftmodule hash2 - bQWpMhvm3lgGRCyq6tby27ESKF+f6JKjTgc3S9NW6AU= + Zoh2XrgvAayVkg75Dx/dR3BbFGqyKAyer6/az+ROoMk= Modules/module.modulemap diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG index 90f163876..7c18b3bfa 100644 Binary files a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG and b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG differ diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml index 8eed7e3e9..a3cefaba5 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml @@ -2,221 +2,258 @@ triple: 'arm64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/CanvasSVG' relocations: - - { offsetInCU: 0x34, offset: 0xA8AAE, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x541000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0xA8AE3, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x541030, symSize: 0x0 } - - { offsetInCU: 0x27, offset: 0xA8B20, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x5340, symSize: 0xB4 } - - { offsetInCU: 0x66, offset: 0xA8B5F, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x5340, symSize: 0xB4 } - - { offsetInCU: 0x15B, offset: 0xA8C54, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xB4, symBinAddr: 0x53F4, symSize: 0xB4 } - - { offsetInCU: 0x65, offset: 0xA8DB3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x54A8, symSize: 0x44 } - - { offsetInCU: 0xBD, offset: 0xA8E0B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvsTo', symObjAddr: 0x88, symBinAddr: 0x5530, symSize: 0x48 } - - { offsetInCU: 0x118, offset: 0xA8E66, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x12C, symBinAddr: 0x55D4, symSize: 0x44 } - - { offsetInCU: 0x170, offset: 0xA8EBE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x1B4, symBinAddr: 0x565C, symSize: 0x54 } - - { offsetInCU: 0x1CD, offset: 0xA8F1B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvgTo', symObjAddr: 0x2B0, symBinAddr: 0x5758, symSize: 0x44 } - - { offsetInCU: 0x225, offset: 0xA8F73, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvsTo', symObjAddr: 0x338, symBinAddr: 0x57E0, symSize: 0x48 } - - { offsetInCU: 0x280, offset: 0xA8FCE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x424, symBinAddr: 0x58CC, symSize: 0x10 } - - { offsetInCU: 0x2A0, offset: 0xA8FEE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x424, symBinAddr: 0x58CC, symSize: 0x10 } - - { offsetInCU: 0x2D6, offset: 0xA9024, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x434, symBinAddr: 0x58DC, symSize: 0x10 } - - { offsetInCU: 0x2F6, offset: 0xA9044, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x434, symBinAddr: 0x58DC, symSize: 0x10 } - - { offsetInCU: 0x32F, offset: 0xA907D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x444, symBinAddr: 0x58EC, symSize: 0x10 } - - { offsetInCU: 0x34F, offset: 0xA909D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x444, symBinAddr: 0x58EC, symSize: 0x10 } - - { offsetInCU: 0x385, offset: 0xA90D3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x454, symBinAddr: 0x58FC, symSize: 0x10 } - - { offsetInCU: 0x3A5, offset: 0xA90F3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x454, symBinAddr: 0x58FC, symSize: 0x10 } - - { offsetInCU: 0x3DE, offset: 0xA912C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x464, symBinAddr: 0x590C, symSize: 0x10 } - - { offsetInCU: 0x3FE, offset: 0xA914C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x464, symBinAddr: 0x590C, symSize: 0x10 } - - { offsetInCU: 0x434, offset: 0xA9182, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x474, symBinAddr: 0x591C, symSize: 0x10 } - - { offsetInCU: 0x454, offset: 0xA91A2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x474, symBinAddr: 0x591C, symSize: 0x10 } - - { offsetInCU: 0x48D, offset: 0xA91DB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x484, symBinAddr: 0x592C, symSize: 0x44 } - - { offsetInCU: 0x4FB, offset: 0xA9249, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x50C, symBinAddr: 0x59B4, symSize: 0x64 } - - { offsetInCU: 0x5EF, offset: 0xA933D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScaleSfyFTo', symObjAddr: 0xADC, symBinAddr: 0x5F84, symSize: 0xB8 } - - { offsetInCU: 0x6E0, offset: 0xA942E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x1628, symBinAddr: 0x6AD0, symSize: 0x28 } - - { offsetInCU: 0x712, offset: 0xA9460, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x18F0, symBinAddr: 0x6D98, symSize: 0x28 } - - { offsetInCU: 0x744, offset: 0xA9492, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x191C, symBinAddr: 0x6DC0, symSize: 0x28 } - - { offsetInCU: 0x78C, offset: 0xA94DA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1944, symBinAddr: 0x6DE8, symSize: 0x10 } - - { offsetInCU: 0x7AC, offset: 0xA94FA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1944, symBinAddr: 0x6DE8, symSize: 0x10 } - - { offsetInCU: 0x800, offset: 0xA954E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1D3C, symBinAddr: 0x71E0, symSize: 0x20 } - - { offsetInCU: 0x837, offset: 0xA9585, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x1FD8, symBinAddr: 0x747C, symSize: 0x28 } - - { offsetInCU: 0x889, offset: 0xA95D7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x21E4, symBinAddr: 0x766C, symSize: 0x80 } - - { offsetInCU: 0x8FC, offset: 0xA964A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x240C, symBinAddr: 0x7894, symSize: 0x34 } - - { offsetInCU: 0x92E, offset: 0xA967C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x24D0, symBinAddr: 0x7958, symSize: 0x34 } - - { offsetInCU: 0xA5C, offset: 0xA97AA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x4870, symBinAddr: 0x9CF8, symSize: 0x13E8 } - - { offsetInCU: 0x172A, offset: 0xAA478, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZTf4nd_n', symObjAddr: 0x5C58, symBinAddr: 0xB0E0, symSize: 0x238 } - - { offsetInCU: 0x1948, offset: 0xAA696, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZTf4nd_n', symObjAddr: 0x5E90, symBinAddr: 0xB318, symSize: 0x2F0 } - - { offsetInCU: 0x1B96, offset: 0xAA8E4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZTf4nd_n', symObjAddr: 0x6180, symBinAddr: 0xB608, symSize: 0x3A4 } - - { offsetInCU: 0x1E0D, offset: 0xAAB5B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvpACTK', symObjAddr: 0xD0, symBinAddr: 0x5578, symSize: 0x50 } - - { offsetInCU: 0x1E45, offset: 0xAAB93, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTK', symObjAddr: 0x208, symBinAddr: 0x56B0, symSize: 0x50 } - - { offsetInCU: 0x1E7D, offset: 0xAABCB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTk', symObjAddr: 0x258, symBinAddr: 0x5700, symSize: 0x58 } - - { offsetInCU: 0x1EBF, offset: 0xAAC0D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvpACTK', symObjAddr: 0x380, symBinAddr: 0x5828, symSize: 0x50 } - - { offsetInCU: 0x1EF7, offset: 0xAAC45, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x5D0, symBinAddr: 0x5A78, symSize: 0x50 } - - { offsetInCU: 0x1F2F, offset: 0xAAC7D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x620, symBinAddr: 0x5AC8, symSize: 0x64 } - - { offsetInCU: 0x1FEA, offset: 0xAAD38, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x1C98, symBinAddr: 0x713C, symSize: 0x40 } - - { offsetInCU: 0x1FFE, offset: 0xAAD4C, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledNameAbstract, symObjAddr: 0x1CD8, symBinAddr: 0x717C, symSize: 0x44 } - - { offsetInCU: 0x2012, offset: 0xAAD60, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x1D1C, symBinAddr: 0x71C0, symSize: 0x20 } - - { offsetInCU: 0x2036, offset: 0xAAD84, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x4404, symBinAddr: 0x988C, symSize: 0x70 } - - { offsetInCU: 0x2480, offset: 0xAB1CE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6550, symBinAddr: 0xB9D8, symSize: 0xC } - - { offsetInCU: 0x2494, offset: 0xAB1E2, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x655C, symBinAddr: 0xB9E4, symSize: 0x10 } - - { offsetInCU: 0x24A8, offset: 0xAB1F6, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x656C, symBinAddr: 0xB9F4, symSize: 0x8 } - - { offsetInCU: 0x24BC, offset: 0xAB20A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x65F8, symBinAddr: 0xBA80, symSize: 0xC } - - { offsetInCU: 0x24D0, offset: 0xAB21E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6634, symBinAddr: 0xBABC, symSize: 0xC } - - { offsetInCU: 0x24E4, offset: 0xAB232, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x6804, symBinAddr: 0xBC8C, symSize: 0xC } - - { offsetInCU: 0x24F8, offset: 0xAB246, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x6810, symBinAddr: 0xBC98, symSize: 0x4 } - - { offsetInCU: 0x250C, offset: 0xAB25A, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x6814, symBinAddr: 0xBC9C, symSize: 0x20 } - - { offsetInCU: 0x2520, offset: 0xAB26E, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x6834, symBinAddr: 0xBCBC, symSize: 0x28 } - - { offsetInCU: 0x253F, offset: 0xAB28D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x68D8, symBinAddr: 0xBD60, symSize: 0x10 } - - { offsetInCU: 0x2568, offset: 0xAB2B6, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x68E8, symBinAddr: 0xBD70, symSize: 0x40 } - - { offsetInCU: 0x257C, offset: 0xAB2CA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x6964, symBinAddr: 0xBDEC, symSize: 0x24 } - - { offsetInCU: 0x25B0, offset: 0xAB2FE, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x69C0, symBinAddr: 0xBE48, symSize: 0x44 } - - { offsetInCU: 0x25C4, offset: 0xAB312, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_yyScMYccfU_Tf2niiin_nTA', symObjAddr: 0x6B80, symBinAddr: 0xC008, symSize: 0x108 } - - { offsetInCU: 0x26D7, offset: 0xAB425, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x6CAC, symBinAddr: 0xC134, symSize: 0x8 } - - { offsetInCU: 0x2C80, offset: 0xAB9CE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvg', symObjAddr: 0x44, symBinAddr: 0x54EC, symSize: 0x44 } - - { offsetInCU: 0x2D08, offset: 0xABA56, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg', symObjAddr: 0x170, symBinAddr: 0x5618, symSize: 0x44 } - - { offsetInCU: 0x2D60, offset: 0xABAAE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvg', symObjAddr: 0x2F4, symBinAddr: 0x579C, symSize: 0x44 } - - { offsetInCU: 0x2E59, offset: 0xABBA7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x4C8, symBinAddr: 0x5970, symSize: 0x44 } - - { offsetInCU: 0x2EAC, offset: 0xABBFA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x570, symBinAddr: 0x5A18, symSize: 0x60 } - - { offsetInCU: 0x2F1C, offset: 0xABC6A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0x684, symBinAddr: 0x5B2C, symSize: 0x48 } - - { offsetInCU: 0x2F41, offset: 0xABC8F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0x6CC, symBinAddr: 0x5B74, symSize: 0x3C } - - { offsetInCU: 0x2F9D, offset: 0xABCEB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0x750, symBinAddr: 0x5BF8, symSize: 0x48 } - - { offsetInCU: 0x2FC2, offset: 0xABD10, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xA60, symBinAddr: 0x5F08, symSize: 0x48 } - - { offsetInCU: 0x315F, offset: 0xABEAD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xB94, symBinAddr: 0x603C, symSize: 0x45C } - - { offsetInCU: 0x347B, offset: 0xAC1C9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0xFF0, symBinAddr: 0x6498, symSize: 0x634 } - - { offsetInCU: 0x3733, offset: 0xAC481, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1650, symBinAddr: 0x6AF8, symSize: 0x2A0 } - - { offsetInCU: 0x3AD2, offset: 0xAC820, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1954, symBinAddr: 0x6DF8, symSize: 0x50 } - - { offsetInCU: 0x3AE6, offset: 0xAC834, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x19A4, symBinAddr: 0x6E48, symSize: 0x2F4 } - - { offsetInCU: 0x3B6A, offset: 0xAC8B8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1D5C, symBinAddr: 0x7200, symSize: 0x27C } - - { offsetInCU: 0x3C21, offset: 0xAC96F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9drawImage33_C2B5A81EA80ED94FA09E8C035710AE36LLyySo6CGRectVF', symObjAddr: 0x2000, symBinAddr: 0x74A4, symSize: 0x1C8 } - - { offsetInCU: 0x3E27, offset: 0xACB75, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x2264, symBinAddr: 0x76EC, symSize: 0x1A8 } - - { offsetInCU: 0x4003, offset: 0xACD51, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2440, symBinAddr: 0x78C8, symSize: 0x90 } - - { offsetInCU: 0x40B2, offset: 0xACE00, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ', symObjAddr: 0x2504, symBinAddr: 0x798C, symSize: 0x4 } - - { offsetInCU: 0x40C6, offset: 0xACE14, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ', symObjAddr: 0x2514, symBinAddr: 0x799C, symSize: 0x4 } - - { offsetInCU: 0x40DA, offset: 0xACE28, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ', symObjAddr: 0x2524, symBinAddr: 0x79AC, symSize: 0x4 } - - { offsetInCU: 0x40FA, offset: 0xACE48, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ', symObjAddr: 0x2570, symBinAddr: 0x79F8, symSize: 0x26C } - - { offsetInCU: 0x416D, offset: 0xACEBB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x27DC, symBinAddr: 0x7C64, symSize: 0x3DC } - - { offsetInCU: 0x4466, offset: 0xAD1B4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x2C20, symBinAddr: 0x80A8, symSize: 0x81C } - - { offsetInCU: 0x45C6, offset: 0xAD314, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x36D8, symBinAddr: 0x8B60, symSize: 0xC38 } - - { offsetInCU: 0x478D, offset: 0xAD4DB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfD', symObjAddr: 0x43D4, symBinAddr: 0x985C, symSize: 0x30 } - - { offsetInCU: 0x47B0, offset: 0xAD4FE, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x4474, symBinAddr: 0x98FC, symSize: 0xE8 } - - { offsetInCU: 0x47E5, offset: 0xAD533, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x455C, symBinAddr: 0x99E4, symSize: 0x1F4 } - - { offsetInCU: 0x4842, offset: 0xAD590, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x4750, symBinAddr: 0x9BD8, symSize: 0x1C } - - { offsetInCU: 0x4880, offset: 0xAD5CE, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x476C, symBinAddr: 0x9BF4, symSize: 0x104 } - - { offsetInCU: 0x26, offset: 0xAD94B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x969E0, symSize: 0x26E4 } - - { offsetInCU: 0x40, offset: 0xAD965, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9EA8, symBinAddr: 0x5791D8, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0xAD9B7, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFEA8, symBinAddr: 0x57F1D8, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0xADA1B, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFED0, symBinAddr: 0x57F200, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0xADA31, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x102D8, symBinAddr: 0x57F608, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0xADA48, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFF18, symBinAddr: 0x57F248, symSize: 0x0 } - - { offsetInCU: 0xE22, offset: 0xAE747, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x969E0, symSize: 0x26E4 } - - { offsetInCU: 0x4BAD, offset: 0xB24D2, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9A24, symBinAddr: 0xA0404, symSize: 0x210 } - - { offsetInCU: 0x4E0E, offset: 0xB2733, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E24, symBinAddr: 0x9B804, symSize: 0x1B8 } - - { offsetInCU: 0x5399, offset: 0xB2CBE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0x990C4, symSize: 0x5A8 } - - { offsetInCU: 0x5EE1, offset: 0xB3806, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0x9966C, symSize: 0x674 } - - { offsetInCU: 0x6290, offset: 0xB3BB5, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3300, symBinAddr: 0x99CE0, symSize: 0x1F0 } - - { offsetInCU: 0x67A5, offset: 0xB40CA, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x34F0, symBinAddr: 0x99ED0, symSize: 0x7A8 } - - { offsetInCU: 0x75B2, offset: 0xB4ED7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3C98, symBinAddr: 0x9A678, symSize: 0x614 } - - { offsetInCU: 0x7F41, offset: 0xB5866, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x42AC, symBinAddr: 0x9AC8C, symSize: 0xB78 } - - { offsetInCU: 0x9472, offset: 0xB6D97, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x50D0, symBinAddr: 0x9BAB0, symSize: 0x23CC } - - { offsetInCU: 0xC9D7, offset: 0xBA2FC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x4FDC, symBinAddr: 0x9B9BC, symSize: 0xF4 } - - { offsetInCU: 0xCBD2, offset: 0xBA4F7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x749C, symBinAddr: 0x9DE7C, symSize: 0x30 } - - { offsetInCU: 0xCCC3, offset: 0xBA5E8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x74CC, symBinAddr: 0x9DEAC, symSize: 0x58 } - - { offsetInCU: 0xCD38, offset: 0xBA65D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x9DF04, symSize: 0x4 } - - { offsetInCU: 0xCD80, offset: 0xBA6A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x9DF04, symSize: 0x4 } - - { offsetInCU: 0xCDAF, offset: 0xBA6D4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x9DF04, symSize: 0x4 } - - { offsetInCU: 0xCDD3, offset: 0xBA6F8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7528, symBinAddr: 0x9DF08, symSize: 0x8C } - - { offsetInCU: 0xCF26, offset: 0xBA84B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0x9DF94, symSize: 0x4 } - - { offsetInCU: 0xCF5F, offset: 0xBA884, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0x9DF94, symSize: 0x4 } - - { offsetInCU: 0xD1F8, offset: 0xBAB1D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x75B8, symBinAddr: 0x9DF98, symSize: 0x1870 } - - { offsetInCU: 0xF966, offset: 0xBD28B, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9C34, symBinAddr: 0xA0614, symSize: 0x200 } - - { offsetInCU: 0xFECD, offset: 0xBD7F2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8E28, symBinAddr: 0x9F808, symSize: 0x20 } - - { offsetInCU: 0x1036A, offset: 0xBDC8F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8E48, symBinAddr: 0x9F828, symSize: 0xBDC } - - { offsetInCU: 0x26, offset: 0xBEA1C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xA0814, symSize: 0x1E0 } - - { offsetInCU: 0x1D2, offset: 0xBEBC8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xA0814, symSize: 0x1E0 } - - { offsetInCU: 0x26, offset: 0xBEE63, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xA09F4, symSize: 0x3C } - - { offsetInCU: 0x34, offset: 0xBEE71, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xA09F4, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xBEF81, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xA0A30, symSize: 0x90 } - - { offsetInCU: 0x34, offset: 0xBEF8F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xA0A30, symSize: 0x90 } - - { offsetInCU: 0x86, offset: 0xBF0F2, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0x57F6D0, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0xBF124, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0x57F660, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0xBF146, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0x57F690, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0xBF15C, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0x57F6C0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0xBF423, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xA0AC0, symSize: 0x18 } - - { offsetInCU: 0x3FB, offset: 0xBF467, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xA0AC0, symSize: 0x18 } - - { offsetInCU: 0x594, offset: 0xBF600, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0xA0AD8, symSize: 0x18 } - - { offsetInCU: 0x63F, offset: 0xBF6AB, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0xA0AF0, symSize: 0x300 } - - { offsetInCU: 0x10C0, offset: 0xC012C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0xA0DF0, symSize: 0xAC } - - { offsetInCU: 0x13B6, offset: 0xC0422, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0xA0E9C, symSize: 0x4D0 } - - { offsetInCU: 0x24CA, offset: 0xC1536, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0xA136C, symSize: 0x28C } - - { offsetInCU: 0x2B3F, offset: 0xC1BAB, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0xA15F8, symSize: 0xF4 } - - { offsetInCU: 0x2D4A, offset: 0xC1DB6, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0xA16EC, symSize: 0x168 } - - { offsetInCU: 0x26, offset: 0xC20D9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA1854, symSize: 0x38 } - - { offsetInCU: 0xFA, offset: 0xC21AD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA1854, symSize: 0x38 } - - { offsetInCU: 0x12C, offset: 0xC21DF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA1854, symSize: 0x38 } - - { offsetInCU: 0x199, offset: 0xC224C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xA188C, symSize: 0x3C } - - { offsetInCU: 0x1F3, offset: 0xC22A6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xA188C, symSize: 0x3C } - - { offsetInCU: 0x31B, offset: 0xC23CE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0xA18C8, symSize: 0x5C } - - { offsetInCU: 0x517, offset: 0xC25CA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0xA1924, symSize: 0x1C } - - { offsetInCU: 0x636, offset: 0xC26E9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0xA1940, symSize: 0x54 } - - { offsetInCU: 0x6D0, offset: 0xC2783, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0xA1994, symSize: 0x4C } - - { offsetInCU: 0x8A8, offset: 0xC295B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xA19E0, symSize: 0xA8 } - - { offsetInCU: 0x90C, offset: 0xC29BF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xA19E0, symSize: 0xA8 } - - { offsetInCU: 0xBA6, offset: 0xC2C59, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0xA1A88, symSize: 0x124 } - - { offsetInCU: 0xEC3, offset: 0xC2F76, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xA1BAC, symSize: 0xC8 } - - { offsetInCU: 0xF43, offset: 0xC2FF6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xA1BAC, symSize: 0xC8 } - - { offsetInCU: 0x10B0, offset: 0xC3163, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0xA1C74, symSize: 0x180 } - - { offsetInCU: 0x134C, offset: 0xC33FF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x5A0, symBinAddr: 0xA1DF4, symSize: 0x16C } - - { offsetInCU: 0x14BB, offset: 0xC356E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x70C, symBinAddr: 0xA1F60, symSize: 0x18 } - - { offsetInCU: 0x1522, offset: 0xC35D5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x724, symBinAddr: 0xA1F78, symSize: 0xC } - - { offsetInCU: 0x155B, offset: 0xC360E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x730, symBinAddr: 0xA1F84, symSize: 0x8 } - - { offsetInCU: 0x15DF, offset: 0xC3692, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x738, symBinAddr: 0xA1F8C, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xC383F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xA1FC8, symSize: 0x140 } - - { offsetInCU: 0x34, offset: 0xC384D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xA1FC8, symSize: 0x140 } - - { offsetInCU: 0x34, offset: 0xC3953, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x388, symBinAddr: 0xC2A158, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xC3995, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xA2108, symSize: 0x35C } - - { offsetInCU: 0x76, offset: 0xC39E5, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x580000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xC3A69, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x5A5000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xC3CCA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xA2108, symSize: 0x35C } - - { offsetInCU: 0xC70, offset: 0xC45DF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0xA2464, symSize: 0x1FC } - - { offsetInCU: 0x115F, offset: 0xC4ACE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0xA2660, symSize: 0x1B8 } - - { offsetInCU: 0x10, offset: 0xC4EA3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xA2820, symSize: 0x1A0 } - - { offsetInCU: 0x50, offset: 0xC4EE3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xA2820, symSize: 0x1A0 } - - { offsetInCU: 0x5E, offset: 0xC4EF1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0xA29C0, symSize: 0x60 } - - { offsetInCU: 0x81, offset: 0xC4F14, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0xA2A20, symSize: 0x288 } - - { offsetInCU: 0x10, offset: 0xC4F05, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xA2CB0, symSize: 0x130 } - - { offsetInCU: 0x48, offset: 0xC4F3D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xA2CB0, symSize: 0x130 } - - { offsetInCU: 0x5F, offset: 0xC4F54, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0xA2DE0, symSize: 0x70 } - - { offsetInCU: 0x75, offset: 0xC4F6A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0xA2E50, symSize: 0x160 } - - { offsetInCU: 0x7A, offset: 0xC4F6F, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0xA2FB0, symSize: 0x378 } - - { offsetInCU: 0x10, offset: 0xC4F7D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xA3340, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xC4FB5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xA3340, symSize: 0x3A0 } - - { offsetInCU: 0x4C, offset: 0xC4FB9, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0xA36E0, symSize: 0x6C0 } - - { offsetInCU: 0x66, offset: 0xC4FD3, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0xA3DA0, symSize: 0x1138 } - - { offsetInCU: 0x50, offset: 0xC501F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0xA5040, symSize: 0x1180 } - - { offsetInCU: 0x66, offset: 0xC5035, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0xA61C0, symSize: 0x1410 } - - { offsetInCU: 0x10, offset: 0xC502B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA75E0, symSize: 0x240 } - - { offsetInCU: 0x45, offset: 0xC5060, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA75E0, symSize: 0x240 } - - { offsetInCU: 0x4D, offset: 0xC5068, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0xA7820, symSize: 0x9E0 } - - { offsetInCU: 0x63, offset: 0xC507E, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0xA8200, symSize: 0x650 } - - { offsetInCU: 0x10, offset: 0xC508D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA8860, symSize: 0x40 } - - { offsetInCU: 0x47, offset: 0xC50C4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA8860, symSize: 0x40 } - - { offsetInCU: 0x5D, offset: 0xC50DA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0xA88A0, symSize: 0x40 } - - { offsetInCU: 0x76, offset: 0xC50F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0xA88E0, symSize: 0x40 } - - { offsetInCU: 0x81, offset: 0xC50FE, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0xA8920, symSize: 0x1E0 } - - { offsetInCU: 0x97, offset: 0xC5114, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0xA8B00, symSize: 0x170 } - - { offsetInCU: 0xAB, offset: 0xC5128, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0xA8C70, symSize: 0x50 } - - { offsetInCU: 0xC3, offset: 0xC5140, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0xA8CC0, symSize: 0x50 } - - { offsetInCU: 0xD9, offset: 0xC5156, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0xA8D10, symSize: 0x50 } - - { offsetInCU: 0xEF, offset: 0xC516C, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0xA8D60, symSize: 0x60 } - - { offsetInCU: 0x111, offset: 0xC518E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0xA8DC0, symSize: 0x1E0 } - - { offsetInCU: 0x124, offset: 0xC51A1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0xA8FA0, symSize: 0x360 } - - { offsetInCU: 0x141, offset: 0xC51BE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0xA9300, symSize: 0x2D0 } - - { offsetInCU: 0x156, offset: 0xC51D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0xA95D0, symSize: 0x2B0 } - - { offsetInCU: 0x170, offset: 0xC51ED, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0xA9880, symSize: 0x250 } - - { offsetInCU: 0x184, offset: 0xC5201, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0xA9AD0, symSize: 0x60 } - - { offsetInCU: 0x19A, offset: 0xC5217, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0xA9B30, symSize: 0x44 } - - { offsetInCU: 0x10, offset: 0xC520D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xA9B80, symSize: 0xB90 } - - { offsetInCU: 0x4C, offset: 0xC5249, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xA9B80, symSize: 0xB90 } - - { offsetInCU: 0x62, offset: 0xC525F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0xAA710, symSize: 0xB98 } - - { offsetInCU: 0x10, offset: 0xC5259, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAB2C0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC529A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAB2C0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC529A, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xAC100, symSize: 0x7E0 } - - { offsetInCU: 0x10, offset: 0xC52A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAC900, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC52E6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAC900, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC52E6, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xAD740, symSize: 0x1F0 } + - { offsetInCU: 0x34, offset: 0xA8AAE, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x4BD000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xA8AE3, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x4BD030, symSize: 0x0 } + - { offsetInCU: 0x27, offset: 0xA8B20, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x3E40, symSize: 0xB4 } + - { offsetInCU: 0x66, offset: 0xA8B5F, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x3E40, symSize: 0xB4 } + - { offsetInCU: 0x15B, offset: 0xA8C54, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xB4, symBinAddr: 0x3EF4, symSize: 0xB4 } + - { offsetInCU: 0x65, offset: 0xA8DB3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x3FA8, symSize: 0x10 } + - { offsetInCU: 0x85, offset: 0xA8DD3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x3FA8, symSize: 0x10 } + - { offsetInCU: 0xBB, offset: 0xA8E09, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x10, symBinAddr: 0x3FB8, symSize: 0x10 } + - { offsetInCU: 0xDB, offset: 0xA8E29, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x10, symBinAddr: 0x3FB8, symSize: 0x10 } + - { offsetInCU: 0x114, offset: 0xA8E62, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x20, symBinAddr: 0x3FC8, symSize: 0x14 } + - { offsetInCU: 0x134, offset: 0xA8E82, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x20, symBinAddr: 0x3FC8, symSize: 0x14 } + - { offsetInCU: 0x16A, offset: 0xA8EB8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x34, symBinAddr: 0x3FDC, symSize: 0x14 } + - { offsetInCU: 0x18A, offset: 0xA8ED8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x34, symBinAddr: 0x3FDC, symSize: 0x14 } + - { offsetInCU: 0x1C5, offset: 0xA8F13, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x48, symBinAddr: 0x3FF0, symSize: 0x10 } + - { offsetInCU: 0x1E5, offset: 0xA8F33, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x48, symBinAddr: 0x3FF0, symSize: 0x10 } + - { offsetInCU: 0x21B, offset: 0xA8F69, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0x58, symBinAddr: 0x4000, symSize: 0x10 } + - { offsetInCU: 0x23B, offset: 0xA8F89, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0x58, symBinAddr: 0x4000, symSize: 0x10 } + - { offsetInCU: 0x274, offset: 0xA8FC2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0x68, symBinAddr: 0x4010, symSize: 0x10 } + - { offsetInCU: 0x294, offset: 0xA8FE2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0x68, symBinAddr: 0x4010, symSize: 0x10 } + - { offsetInCU: 0x2CC, offset: 0xA901A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvsTo', symObjAddr: 0x78, symBinAddr: 0x4020, symSize: 0x34 } + - { offsetInCU: 0x325, offset: 0xA9073, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0xAC, symBinAddr: 0x4054, symSize: 0x10 } + - { offsetInCU: 0x345, offset: 0xA9093, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0xAC, symBinAddr: 0x4054, symSize: 0x10 } + - { offsetInCU: 0x378, offset: 0xA90C6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0xBC, symBinAddr: 0x4064, symSize: 0x10 } + - { offsetInCU: 0x398, offset: 0xA90E6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0xBC, symBinAddr: 0x4064, symSize: 0x10 } + - { offsetInCU: 0x3D0, offset: 0xA911E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvsTo', symObjAddr: 0xCC, symBinAddr: 0x4074, symSize: 0x34 } + - { offsetInCU: 0x433, offset: 0xA9181, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x278, symBinAddr: 0x4220, symSize: 0x40 } + - { offsetInCU: 0x465, offset: 0xA91B3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4260, symSize: 0x10 } + - { offsetInCU: 0x485, offset: 0xA91D3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4260, symSize: 0x10 } + - { offsetInCU: 0x4A2, offset: 0xA91F0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4260, symSize: 0x10 } + - { offsetInCU: 0x4D4, offset: 0xA9222, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4280, symSize: 0x14 } + - { offsetInCU: 0x4F4, offset: 0xA9242, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4280, symSize: 0x14 } + - { offsetInCU: 0x511, offset: 0xA925F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4280, symSize: 0x14 } + - { offsetInCU: 0x543, offset: 0xA9291, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x42A8, symSize: 0x10 } + - { offsetInCU: 0x563, offset: 0xA92B1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x42A8, symSize: 0x10 } + - { offsetInCU: 0x580, offset: 0xA92CE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x42A8, symSize: 0x10 } + - { offsetInCU: 0x59C, offset: 0xA92EA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgTo', symObjAddr: 0x320, symBinAddr: 0x42C8, symSize: 0x34 } + - { offsetInCU: 0x5E4, offset: 0xA9332, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyFTo', symObjAddr: 0x610, symBinAddr: 0x45B8, symSize: 0x34 } + - { offsetInCU: 0x62C, offset: 0xA937A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfcTo', symObjAddr: 0x708, symBinAddr: 0x46B0, symSize: 0x20 } + - { offsetInCU: 0x659, offset: 0xA93A7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCfETo', symObjAddr: 0x734, symBinAddr: 0x46DC, symSize: 0x48 } + - { offsetInCU: 0x6AA, offset: 0xA93F8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x77C, symBinAddr: 0x4724, symSize: 0x10 } + - { offsetInCU: 0x6CA, offset: 0xA9418, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x77C, symBinAddr: 0x4724, symSize: 0x10 } + - { offsetInCU: 0x700, offset: 0xA944E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x78C, symBinAddr: 0x4734, symSize: 0x10 } + - { offsetInCU: 0x720, offset: 0xA946E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x78C, symBinAddr: 0x4734, symSize: 0x10 } + - { offsetInCU: 0x759, offset: 0xA94A7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x79C, symBinAddr: 0x4744, symSize: 0x10 } + - { offsetInCU: 0x779, offset: 0xA94C7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x79C, symBinAddr: 0x4744, symSize: 0x10 } + - { offsetInCU: 0x7AF, offset: 0xA94FD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x7AC, symBinAddr: 0x4754, symSize: 0x10 } + - { offsetInCU: 0x7CF, offset: 0xA951D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x7AC, symBinAddr: 0x4754, symSize: 0x10 } + - { offsetInCU: 0x808, offset: 0xA9556, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x7BC, symBinAddr: 0x4764, symSize: 0x10 } + - { offsetInCU: 0x828, offset: 0xA9576, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x7BC, symBinAddr: 0x4764, symSize: 0x10 } + - { offsetInCU: 0x85E, offset: 0xA95AC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x7CC, symBinAddr: 0x4774, symSize: 0x10 } + - { offsetInCU: 0x87E, offset: 0xA95CC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x7CC, symBinAddr: 0x4774, symSize: 0x10 } + - { offsetInCU: 0x8B7, offset: 0xA9605, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x7DC, symBinAddr: 0x4784, symSize: 0x10 } + - { offsetInCU: 0x8D7, offset: 0xA9625, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x7DC, symBinAddr: 0x4784, symSize: 0x10 } + - { offsetInCU: 0x90F, offset: 0xA965D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvsTo', symObjAddr: 0x7EC, symBinAddr: 0x4794, symSize: 0x34 } + - { offsetInCU: 0x968, offset: 0xA96B6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x820, symBinAddr: 0x47C8, symSize: 0x44 } + - { offsetInCU: 0x9D6, offset: 0xA9724, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x8A8, symBinAddr: 0x4850, symSize: 0x64 } + - { offsetInCU: 0xACA, offset: 0xA9818, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScale12CoreGraphics7CGFloatVyFTo', symObjAddr: 0xE78, symBinAddr: 0x4E20, symSize: 0xB8 } + - { offsetInCU: 0xBA6, offset: 0xA98F4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x190C, symBinAddr: 0x58B4, symSize: 0x28 } + - { offsetInCU: 0xBD8, offset: 0xA9926, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x1AA0, symBinAddr: 0x5A48, symSize: 0x28 } + - { offsetInCU: 0xC0A, offset: 0xA9958, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1ACC, symBinAddr: 0x5A70, symSize: 0x28 } + - { offsetInCU: 0xC52, offset: 0xA99A0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1AF4, symBinAddr: 0x5A98, symSize: 0x10 } + - { offsetInCU: 0xC72, offset: 0xA99C0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1AF4, symBinAddr: 0x5A98, symSize: 0x10 } + - { offsetInCU: 0xCC6, offset: 0xA9A14, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1E2C, symBinAddr: 0x5DD0, symSize: 0x20 } + - { offsetInCU: 0xCFD, offset: 0xA9A4B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x20AC, symBinAddr: 0x6050, symSize: 0x28 } + - { offsetInCU: 0xD4F, offset: 0xA9A9D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x2210, symBinAddr: 0x61B4, symSize: 0x58 } + - { offsetInCU: 0xD81, offset: 0xA9ACF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x22C8, symBinAddr: 0x626C, symSize: 0x34 } + - { offsetInCU: 0xDB4, offset: 0xA9B02, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x2340, symBinAddr: 0x62E4, symSize: 0x60 } + - { offsetInCU: 0xE79, offset: 0xA9BC7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9emitEventyySo9NSRunLoopC_So7NSTimerCtFZTo', symObjAddr: 0x240C, symBinAddr: 0x63B0, symSize: 0x24 } + - { offsetInCU: 0xF6D, offset: 0xA9CBB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x35CC, symBinAddr: 0x7570, symSize: 0x1520 } + - { offsetInCU: 0x1E85, offset: 0xAABD3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4AEC, symBinAddr: 0x8A90, symSize: 0x114 } + - { offsetInCU: 0x2015, offset: 0xAAD63, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4C00, symBinAddr: 0x8BA4, symSize: 0x1E0 } + - { offsetInCU: 0x21C5, offset: 0xAAF13, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4DE0, symBinAddr: 0x8D84, symSize: 0x298 } + - { offsetInCU: 0x23A8, offset: 0xAB0F6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x96C, symBinAddr: 0x4914, symSize: 0x50 } + - { offsetInCU: 0x23E0, offset: 0xAB12E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x9BC, symBinAddr: 0x4964, symSize: 0x64 } + - { offsetInCU: 0x2476, offset: 0xAB1C4, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x26D0, symBinAddr: 0x6674, symSize: 0x4C } + - { offsetInCU: 0x248E, offset: 0xAB1DC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x3028, symBinAddr: 0x6FCC, symSize: 0x80 } + - { offsetInCU: 0x24BD, offset: 0xAB20B, size: 0x8, addend: 0x0, symName: '_$sSvSiIegyy_SvSiIeyByy_TR', symObjAddr: 0x30A8, symBinAddr: 0x704C, symSize: 0x48 } + - { offsetInCU: 0x25E0, offset: 0xAB32E, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x34F0, symBinAddr: 0x7494, symSize: 0x10 } + - { offsetInCU: 0x25F4, offset: 0xAB342, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x3500, symBinAddr: 0x74A4, symSize: 0x8 } + - { offsetInCU: 0x2608, offset: 0xAB356, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCMa', symObjAddr: 0x3508, symBinAddr: 0x74AC, symSize: 0x20 } + - { offsetInCU: 0x261C, offset: 0xAB36A, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x3528, symBinAddr: 0x74CC, symSize: 0x40 } + - { offsetInCU: 0x2630, offset: 0xAB37E, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledNameAbstract, symObjAddr: 0x3568, symBinAddr: 0x750C, symSize: 0x44 } + - { offsetInCU: 0x2644, offset: 0xAB392, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x35AC, symBinAddr: 0x7550, symSize: 0x20 } + - { offsetInCU: 0x2983, offset: 0xAB6D1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x50AC, symBinAddr: 0x9050, symSize: 0x304 } + - { offsetInCU: 0x2B7F, offset: 0xAB8CD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5434, symBinAddr: 0x93D8, symSize: 0x3DC } + - { offsetInCU: 0x2DA0, offset: 0xABAEE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5848, symBinAddr: 0x97EC, symSize: 0x10 } + - { offsetInCU: 0x2DB4, offset: 0xABB02, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x5A60, symBinAddr: 0x9A04, symSize: 0xC } + - { offsetInCU: 0x2DC8, offset: 0xABB16, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x5A6C, symBinAddr: 0x9A10, symSize: 0x4 } + - { offsetInCU: 0x2DDC, offset: 0xABB2A, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x5A70, symBinAddr: 0x9A14, symSize: 0x20 } + - { offsetInCU: 0x2DF0, offset: 0xABB3E, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x5A90, symBinAddr: 0x9A34, symSize: 0x28 } + - { offsetInCU: 0x2E0F, offset: 0xABB5D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x5B34, symBinAddr: 0x9AD8, symSize: 0x10 } + - { offsetInCU: 0x2E38, offset: 0xABB86, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU_TA', symObjAddr: 0x5B68, symBinAddr: 0x9B0C, symSize: 0x24 } + - { offsetInCU: 0x2E6C, offset: 0xABBBA, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x5B8C, symBinAddr: 0x9B30, symSize: 0x40 } + - { offsetInCU: 0x2E80, offset: 0xABBCE, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x5C0C, symBinAddr: 0x9BB0, symSize: 0x44 } + - { offsetInCU: 0x2E94, offset: 0xABBE2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU0_Tf2nni_nTA', symObjAddr: 0x5CB0, symBinAddr: 0x9C54, symSize: 0x28 } + - { offsetInCU: 0x2ED1, offset: 0xABC1F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x5CFC, symBinAddr: 0x9CA0, symSize: 0x8 } + - { offsetInCU: 0x36E5, offset: 0xAC433, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x100, symBinAddr: 0x40A8, symSize: 0x178 } + - { offsetInCU: 0x3901, offset: 0xAC64F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x2C8, symBinAddr: 0x4270, symSize: 0x10 } + - { offsetInCU: 0x3921, offset: 0xAC66F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x2C8, symBinAddr: 0x4270, symSize: 0x10 } + - { offsetInCU: 0x3950, offset: 0xAC69E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x2EC, symBinAddr: 0x4294, symSize: 0x14 } + - { offsetInCU: 0x3970, offset: 0xAC6BE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x2EC, symBinAddr: 0x4294, symSize: 0x14 } + - { offsetInCU: 0x399F, offset: 0xAC6ED, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x310, symBinAddr: 0x42B8, symSize: 0x10 } + - { offsetInCU: 0x39BF, offset: 0xAC70D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x310, symBinAddr: 0x42B8, symSize: 0x10 } + - { offsetInCU: 0x39F5, offset: 0xAC743, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg', symObjAddr: 0x354, symBinAddr: 0x42FC, symSize: 0x124 } + - { offsetInCU: 0x3B0A, offset: 0xAC858, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgySv_SitcfU_Tf4nnd_n', symObjAddr: 0x34EC, symBinAddr: 0x7490, symSize: 0x4 } + - { offsetInCU: 0x3B3E, offset: 0xAC88C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF', symObjAddr: 0x478, symBinAddr: 0x4420, symSize: 0x198 } + - { offsetInCU: 0x3D68, offset: 0xACAB6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfC', symObjAddr: 0x644, symBinAddr: 0x45EC, symSize: 0x20 } + - { offsetInCU: 0x3D7C, offset: 0xACACA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfc', symObjAddr: 0x664, symBinAddr: 0x460C, symSize: 0xA4 } + - { offsetInCU: 0x3E94, offset: 0xACBE2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x864, symBinAddr: 0x480C, symSize: 0x44 } + - { offsetInCU: 0x3EE7, offset: 0xACC35, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x90C, symBinAddr: 0x48B4, symSize: 0x60 } + - { offsetInCU: 0x3F57, offset: 0xACCA5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0xA20, symBinAddr: 0x49C8, symSize: 0x48 } + - { offsetInCU: 0x3F7C, offset: 0xACCCA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0xA68, symBinAddr: 0x4A10, symSize: 0x3C } + - { offsetInCU: 0x3FD8, offset: 0xACD26, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0xAEC, symBinAddr: 0x4A94, symSize: 0x48 } + - { offsetInCU: 0x3FFD, offset: 0xACD4B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xDFC, symBinAddr: 0x4DA4, symSize: 0x48 } + - { offsetInCU: 0x419A, offset: 0xACEE8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xF30, symBinAddr: 0x4ED8, symSize: 0x434 } + - { offsetInCU: 0x4518, offset: 0xAD266, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x1364, symBinAddr: 0x530C, symSize: 0x5A4 } + - { offsetInCU: 0x480D, offset: 0xAD55B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1934, symBinAddr: 0x58DC, symSize: 0x16C } + - { offsetInCU: 0x4999, offset: 0xAD6E7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1B04, symBinAddr: 0x5AA8, symSize: 0x50 } + - { offsetInCU: 0x49AD, offset: 0xAD6FB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1B54, symBinAddr: 0x5AF8, symSize: 0x2D8 } + - { offsetInCU: 0x4A31, offset: 0xAD77F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1E4C, symBinAddr: 0x5DF0, symSize: 0x260 } + - { offsetInCU: 0x4AF9, offset: 0xAD847, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVF', symObjAddr: 0x20D4, symBinAddr: 0x6078, symSize: 0x13C } + - { offsetInCU: 0x4C8F, offset: 0xAD9DD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x2268, symBinAddr: 0x620C, symSize: 0x60 } + - { offsetInCU: 0x4CF0, offset: 0xADA3E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x22FC, symBinAddr: 0x62A0, symSize: 0x44 } + - { offsetInCU: 0x4D43, offset: 0xADA91, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23A0, symBinAddr: 0x6344, symSize: 0x4 } + - { offsetInCU: 0x4D57, offset: 0xADAA5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23B0, symBinAddr: 0x6354, symSize: 0x4 } + - { offsetInCU: 0x4D6B, offset: 0xADAB9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23C0, symBinAddr: 0x6364, symSize: 0x4 } + - { offsetInCU: 0x4DC9, offset: 0xADB17, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ', symObjAddr: 0x2430, symBinAddr: 0x63D4, symSize: 0x2A0 } + - { offsetInCU: 0x4F48, offset: 0xADC96, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_', symObjAddr: 0x2A58, symBinAddr: 0x69FC, symSize: 0x4D0 } + - { offsetInCU: 0x5111, offset: 0xADE5F, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x30F0, symBinAddr: 0x7094, symSize: 0xE8 } + - { offsetInCU: 0x5146, offset: 0xADE94, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x31D8, symBinAddr: 0x717C, symSize: 0x1F4 } + - { offsetInCU: 0x51A3, offset: 0xADEF1, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x33CC, symBinAddr: 0x7370, symSize: 0x1C } + - { offsetInCU: 0x51E1, offset: 0xADF2F, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x33E8, symBinAddr: 0x738C, symSize: 0x104 } + - { offsetInCU: 0x26, offset: 0xAE309, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xAC864, symSize: 0x26E4 } + - { offsetInCU: 0x40, offset: 0xAE323, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9EA8, symBinAddr: 0x4F9188, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0xAE375, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFEA8, symBinAddr: 0x4FF188, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0xAE3D9, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFED0, symBinAddr: 0x4FF1B0, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0xAE3EF, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x102D8, symBinAddr: 0x4FF5B8, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0xAE406, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFF18, symBinAddr: 0x4FF1F8, symSize: 0x0 } + - { offsetInCU: 0xE22, offset: 0xAF105, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xAC864, symSize: 0x26E4 } + - { offsetInCU: 0x4BAD, offset: 0xB2E90, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9A24, symBinAddr: 0xB6288, symSize: 0x210 } + - { offsetInCU: 0x4E0E, offset: 0xB30F1, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E24, symBinAddr: 0xB1688, symSize: 0x1B8 } + - { offsetInCU: 0x5399, offset: 0xB367C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0xAEF48, symSize: 0x5A8 } + - { offsetInCU: 0x5EE1, offset: 0xB41C4, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0xAF4F0, symSize: 0x674 } + - { offsetInCU: 0x6290, offset: 0xB4573, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3300, symBinAddr: 0xAFB64, symSize: 0x1F0 } + - { offsetInCU: 0x67A5, offset: 0xB4A88, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x34F0, symBinAddr: 0xAFD54, symSize: 0x7A8 } + - { offsetInCU: 0x75B2, offset: 0xB5895, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3C98, symBinAddr: 0xB04FC, symSize: 0x614 } + - { offsetInCU: 0x7F41, offset: 0xB6224, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x42AC, symBinAddr: 0xB0B10, symSize: 0xB78 } + - { offsetInCU: 0x9472, offset: 0xB7755, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x50D0, symBinAddr: 0xB1934, symSize: 0x23CC } + - { offsetInCU: 0xC9D7, offset: 0xBACBA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x4FDC, symBinAddr: 0xB1840, symSize: 0xF4 } + - { offsetInCU: 0xCBD2, offset: 0xBAEB5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x749C, symBinAddr: 0xB3D00, symSize: 0x30 } + - { offsetInCU: 0xCCC3, offset: 0xBAFA6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x74CC, symBinAddr: 0xB3D30, symSize: 0x58 } + - { offsetInCU: 0xCD38, offset: 0xBB01B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0xB3D88, symSize: 0x4 } + - { offsetInCU: 0xCD80, offset: 0xBB063, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0xB3D88, symSize: 0x4 } + - { offsetInCU: 0xCDAF, offset: 0xBB092, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0xB3D88, symSize: 0x4 } + - { offsetInCU: 0xCDD3, offset: 0xBB0B6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7528, symBinAddr: 0xB3D8C, symSize: 0x8C } + - { offsetInCU: 0xCF26, offset: 0xBB209, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0xB3E18, symSize: 0x4 } + - { offsetInCU: 0xCF5F, offset: 0xBB242, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0xB3E18, symSize: 0x4 } + - { offsetInCU: 0xD1F8, offset: 0xBB4DB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x75B8, symBinAddr: 0xB3E1C, symSize: 0x1870 } + - { offsetInCU: 0xF966, offset: 0xBDC49, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9C34, symBinAddr: 0xB6498, symSize: 0x200 } + - { offsetInCU: 0xFECD, offset: 0xBE1B0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8E28, symBinAddr: 0xB568C, symSize: 0x20 } + - { offsetInCU: 0x1036A, offset: 0xBE64D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8E48, symBinAddr: 0xB56AC, symSize: 0xBDC } + - { offsetInCU: 0x26, offset: 0xBF3DA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xB6698, symSize: 0x1E0 } + - { offsetInCU: 0x1D2, offset: 0xBF586, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xB6698, symSize: 0x1E0 } + - { offsetInCU: 0x26, offset: 0xBF821, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xB6878, symSize: 0x3C } + - { offsetInCU: 0x34, offset: 0xBF82F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xB6878, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xBF93F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xB68B4, symSize: 0x90 } + - { offsetInCU: 0x34, offset: 0xBF94D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xB68B4, symSize: 0x90 } + - { offsetInCU: 0x86, offset: 0xBFAB0, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0x4FF680, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0xBFAE2, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0x4FF610, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0xBFB04, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0x4FF640, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0xBFB1A, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0x4FF670, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0xBFDE1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xB6944, symSize: 0x18 } + - { offsetInCU: 0x3FB, offset: 0xBFE25, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xB6944, symSize: 0x18 } + - { offsetInCU: 0x594, offset: 0xBFFBE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0xB695C, symSize: 0x18 } + - { offsetInCU: 0x63F, offset: 0xC0069, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0xB6974, symSize: 0x300 } + - { offsetInCU: 0x10C0, offset: 0xC0AEA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0xB6C74, symSize: 0xAC } + - { offsetInCU: 0x13B6, offset: 0xC0DE0, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0xB6D20, symSize: 0x4D0 } + - { offsetInCU: 0x24CA, offset: 0xC1EF4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0xB71F0, symSize: 0x28C } + - { offsetInCU: 0x2B3F, offset: 0xC2569, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0xB747C, symSize: 0xF4 } + - { offsetInCU: 0x2D4A, offset: 0xC2774, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0xB7570, symSize: 0x168 } + - { offsetInCU: 0x26, offset: 0xC2A97, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB76D8, symSize: 0x38 } + - { offsetInCU: 0xFA, offset: 0xC2B6B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB76D8, symSize: 0x38 } + - { offsetInCU: 0x12C, offset: 0xC2B9D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB76D8, symSize: 0x38 } + - { offsetInCU: 0x199, offset: 0xC2C0A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xB7710, symSize: 0x3C } + - { offsetInCU: 0x1F3, offset: 0xC2C64, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xB7710, symSize: 0x3C } + - { offsetInCU: 0x31B, offset: 0xC2D8C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0xB774C, symSize: 0x5C } + - { offsetInCU: 0x517, offset: 0xC2F88, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0xB77A8, symSize: 0x1C } + - { offsetInCU: 0x636, offset: 0xC30A7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0xB77C4, symSize: 0x54 } + - { offsetInCU: 0x6D0, offset: 0xC3141, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0xB7818, symSize: 0x4C } + - { offsetInCU: 0x8A8, offset: 0xC3319, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xB7864, symSize: 0xA8 } + - { offsetInCU: 0x90C, offset: 0xC337D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xB7864, symSize: 0xA8 } + - { offsetInCU: 0xBA6, offset: 0xC3617, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0xB790C, symSize: 0x124 } + - { offsetInCU: 0xEC3, offset: 0xC3934, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xB7A30, symSize: 0xC8 } + - { offsetInCU: 0xF43, offset: 0xC39B4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xB7A30, symSize: 0xC8 } + - { offsetInCU: 0x10B0, offset: 0xC3B21, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0xB7AF8, symSize: 0x180 } + - { offsetInCU: 0x134C, offset: 0xC3DBD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x5A0, symBinAddr: 0xB7C78, symSize: 0x16C } + - { offsetInCU: 0x14BB, offset: 0xC3F2C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x70C, symBinAddr: 0xB7DE4, symSize: 0x18 } + - { offsetInCU: 0x1522, offset: 0xC3F93, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x724, symBinAddr: 0xB7DFC, symSize: 0xC } + - { offsetInCU: 0x155B, offset: 0xC3FCC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x730, symBinAddr: 0xB7E08, symSize: 0x8 } + - { offsetInCU: 0x15DF, offset: 0xC4050, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x738, symBinAddr: 0xB7E10, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xC41FD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xB7E4C, symSize: 0x140 } + - { offsetInCU: 0x34, offset: 0xC420B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xB7E4C, symSize: 0x140 } + - { offsetInCU: 0x34, offset: 0xC4311, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x388, symBinAddr: 0xB756E8, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xC4353, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xB7F8C, symSize: 0x35C } + - { offsetInCU: 0x76, offset: 0xC43A3, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x500000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xC4427, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x525000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xC4688, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xB7F8C, symSize: 0x35C } + - { offsetInCU: 0xC70, offset: 0xC4F9D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0xB82E8, symSize: 0x1FC } + - { offsetInCU: 0x115F, offset: 0xC548C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0xB84E4, symSize: 0x1B8 } + - { offsetInCU: 0x10, offset: 0xC5861, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xB86A0, symSize: 0x1A0 } + - { offsetInCU: 0x50, offset: 0xC58A1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xB86A0, symSize: 0x1A0 } + - { offsetInCU: 0x5E, offset: 0xC58AF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0xB8840, symSize: 0x60 } + - { offsetInCU: 0x81, offset: 0xC58D2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0xB88A0, symSize: 0x288 } + - { offsetInCU: 0x10, offset: 0xC58C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xB8B30, symSize: 0x130 } + - { offsetInCU: 0x48, offset: 0xC58FB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xB8B30, symSize: 0x130 } + - { offsetInCU: 0x5F, offset: 0xC5912, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0xB8C60, symSize: 0x70 } + - { offsetInCU: 0x75, offset: 0xC5928, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0xB8CD0, symSize: 0x160 } + - { offsetInCU: 0x7A, offset: 0xC592D, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0xB8E30, symSize: 0x378 } + - { offsetInCU: 0x10, offset: 0xC593B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xB91C0, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xC5973, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xB91C0, symSize: 0x3A0 } + - { offsetInCU: 0x4C, offset: 0xC5977, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0xB9560, symSize: 0x6C0 } + - { offsetInCU: 0x66, offset: 0xC5991, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0xB9C20, symSize: 0x1138 } + - { offsetInCU: 0x50, offset: 0xC59DD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0xBAEC0, symSize: 0x1180 } + - { offsetInCU: 0x66, offset: 0xC59F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0xBC040, symSize: 0x1410 } + - { offsetInCU: 0x10, offset: 0xC59E9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBD460, symSize: 0x240 } + - { offsetInCU: 0x45, offset: 0xC5A1E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBD460, symSize: 0x240 } + - { offsetInCU: 0x4D, offset: 0xC5A26, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0xBD6A0, symSize: 0x9E0 } + - { offsetInCU: 0x63, offset: 0xC5A3C, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0xBE080, symSize: 0x650 } + - { offsetInCU: 0x10, offset: 0xC5A4B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBE6E0, symSize: 0x40 } + - { offsetInCU: 0x47, offset: 0xC5A82, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBE6E0, symSize: 0x40 } + - { offsetInCU: 0x5D, offset: 0xC5A98, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0xBE720, symSize: 0x40 } + - { offsetInCU: 0x76, offset: 0xC5AB1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0xBE760, symSize: 0x40 } + - { offsetInCU: 0x81, offset: 0xC5ABC, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0xBE7A0, symSize: 0x1E0 } + - { offsetInCU: 0x97, offset: 0xC5AD2, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0xBE980, symSize: 0x170 } + - { offsetInCU: 0xAB, offset: 0xC5AE6, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0xBEAF0, symSize: 0x50 } + - { offsetInCU: 0xC3, offset: 0xC5AFE, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0xBEB40, symSize: 0x50 } + - { offsetInCU: 0xD9, offset: 0xC5B14, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0xBEB90, symSize: 0x50 } + - { offsetInCU: 0xEF, offset: 0xC5B2A, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0xBEBE0, symSize: 0x60 } + - { offsetInCU: 0x111, offset: 0xC5B4C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0xBEC40, symSize: 0x1E0 } + - { offsetInCU: 0x124, offset: 0xC5B5F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0xBEE20, symSize: 0x360 } + - { offsetInCU: 0x141, offset: 0xC5B7C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0xBF180, symSize: 0x2D0 } + - { offsetInCU: 0x156, offset: 0xC5B91, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0xBF450, symSize: 0x2B0 } + - { offsetInCU: 0x170, offset: 0xC5BAB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0xBF700, symSize: 0x250 } + - { offsetInCU: 0x184, offset: 0xC5BBF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0xBF950, symSize: 0x60 } + - { offsetInCU: 0x19A, offset: 0xC5BD5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0xBF9B0, symSize: 0x44 } + - { offsetInCU: 0x10, offset: 0xC5BCB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xBFA00, symSize: 0xB90 } + - { offsetInCU: 0x4C, offset: 0xC5C07, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xBFA00, symSize: 0xB90 } + - { offsetInCU: 0x62, offset: 0xC5C1D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0xC0590, symSize: 0xB98 } + - { offsetInCU: 0x10, offset: 0xC5C17, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC1140, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5C58, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC1140, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5C58, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xC1F80, symSize: 0x7E0 } + - { offsetInCU: 0x10, offset: 0xC5C63, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC2780, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5CA4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC2780, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5CA4, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xC35C0, symSize: 0x1F0 } ... diff --git a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasSVG.yml b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasSVG.yml index a324c52eb..c9d58288a 100644 --- a/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasSVG.yml +++ b/packages/canvas-svg/platforms/ios/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasSVG.yml @@ -2,290 +2,308 @@ triple: 'x86_64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/CanvasSVG' relocations: - - { offsetInCU: 0x34, offset: 0xAB77E, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x5E1000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0xAB7B3, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x5E1030, symSize: 0x0 } - - { offsetInCU: 0x27, offset: 0xAB7F0, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x1880, symSize: 0xC5 } - - { offsetInCU: 0x66, offset: 0xAB82F, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x1880, symSize: 0xC5 } - - { offsetInCU: 0x1D9, offset: 0xAB9A2, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xC5, symBinAddr: 0x1945, symSize: 0xC5 } - - { offsetInCU: 0x65, offset: 0xABB7F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x1A10, symSize: 0x40 } - - { offsetInCU: 0xBB, offset: 0xABBD5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvsTo', symObjAddr: 0x70, symBinAddr: 0x1A80, symSize: 0x40 } - - { offsetInCU: 0x114, offset: 0xABC2E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x110, symBinAddr: 0x1B20, symSize: 0x40 } - - { offsetInCU: 0x16A, offset: 0xABC84, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x190, symBinAddr: 0x1BA0, symSize: 0x60 } - - { offsetInCU: 0x1C5, offset: 0xABCDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvgTo', symObjAddr: 0x280, symBinAddr: 0x1C90, symSize: 0x40 } - - { offsetInCU: 0x21B, offset: 0xABD35, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvsTo', symObjAddr: 0x2F0, symBinAddr: 0x1D00, symSize: 0x40 } - - { offsetInCU: 0x274, offset: 0xABD8E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x3D0, symBinAddr: 0x1DE0, symSize: 0x20 } - - { offsetInCU: 0x2CA, offset: 0xABDE4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x3F0, symBinAddr: 0x1E00, symSize: 0x10 } - - { offsetInCU: 0x323, offset: 0xABE3D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x400, symBinAddr: 0x1E10, symSize: 0x20 } - - { offsetInCU: 0x379, offset: 0xABE93, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x420, symBinAddr: 0x1E30, symSize: 0x10 } - - { offsetInCU: 0x3D2, offset: 0xABEEC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x430, symBinAddr: 0x1E40, symSize: 0x20 } - - { offsetInCU: 0x428, offset: 0xABF42, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x450, symBinAddr: 0x1E60, symSize: 0x10 } - - { offsetInCU: 0x481, offset: 0xABF9B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x460, symBinAddr: 0x1E70, symSize: 0x40 } - - { offsetInCU: 0x4ED, offset: 0xAC007, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x4D0, symBinAddr: 0x1EE0, symSize: 0x50 } - - { offsetInCU: 0x5E1, offset: 0xAC0FB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScaleSfyFTo', symObjAddr: 0xB10, symBinAddr: 0x2520, symSize: 0xB0 } - - { offsetInCU: 0x6D2, offset: 0xAC1EC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x14E0, symBinAddr: 0x2EF0, symSize: 0x30 } - - { offsetInCU: 0x704, offset: 0xAC21E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x1830, symBinAddr: 0x3240, symSize: 0x30 } - - { offsetInCU: 0x736, offset: 0xAC250, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1870, symBinAddr: 0x3270, symSize: 0x30 } - - { offsetInCU: 0x77E, offset: 0xAC298, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x18A0, symBinAddr: 0x32A0, symSize: 0x20 } - - { offsetInCU: 0x7F2, offset: 0xAC30C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1D00, symBinAddr: 0x3700, symSize: 0x30 } - - { offsetInCU: 0x829, offset: 0xAC343, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x1F90, symBinAddr: 0x3990, symSize: 0x30 } - - { offsetInCU: 0x87B, offset: 0xAC395, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x21E0, symBinAddr: 0x3BC0, symSize: 0x80 } - - { offsetInCU: 0x8EE, offset: 0xAC408, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x2400, symBinAddr: 0x3DE0, symSize: 0x30 } - - { offsetInCU: 0x920, offset: 0xAC43A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x24B0, symBinAddr: 0x3E90, symSize: 0x30 } - - { offsetInCU: 0xA4E, offset: 0xAC568, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x4BA0, symBinAddr: 0x6580, symSize: 0x17D0 } - - { offsetInCU: 0x16BB, offset: 0xAD1D5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZTf4nd_n', symObjAddr: 0x6370, symBinAddr: 0x7D50, symSize: 0x2B0 } - - { offsetInCU: 0x18BE, offset: 0xAD3D8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZTf4nd_n', symObjAddr: 0x6620, symBinAddr: 0x8000, symSize: 0x3D0 } - - { offsetInCU: 0x1AF2, offset: 0xAD60C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZTf4nd_n', symObjAddr: 0x69F0, symBinAddr: 0x83D0, symSize: 0x470 } - - { offsetInCU: 0x1D54, offset: 0xAD86E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvpACTK', symObjAddr: 0xB0, symBinAddr: 0x1AC0, symSize: 0x40 } - - { offsetInCU: 0x1D8A, offset: 0xAD8A4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTK', symObjAddr: 0x1F0, symBinAddr: 0x1C00, symSize: 0x40 } - - { offsetInCU: 0x1DC0, offset: 0xAD8DA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTk', symObjAddr: 0x230, symBinAddr: 0x1C40, symSize: 0x50 } - - { offsetInCU: 0x1DEE, offset: 0xAD908, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvpACTK', symObjAddr: 0x330, symBinAddr: 0x1D40, symSize: 0x40 } - - { offsetInCU: 0x1E24, offset: 0xAD93E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x570, symBinAddr: 0x1F80, symSize: 0x40 } - - { offsetInCU: 0x1E5A, offset: 0xAD974, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x5B0, symBinAddr: 0x1FC0, symSize: 0x50 } - - { offsetInCU: 0x1F15, offset: 0xADA2F, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x1C60, symBinAddr: 0x3660, symSize: 0x40 } - - { offsetInCU: 0x1F29, offset: 0xADA43, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x1CE0, symBinAddr: 0x36E0, symSize: 0x20 } - - { offsetInCU: 0x1F58, offset: 0xADA72, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x46F0, symBinAddr: 0x60D0, symSize: 0x70 } - - { offsetInCU: 0x1FAC, offset: 0xADAC6, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSS_Tgm5', symObjAddr: 0x4830, symBinAddr: 0x6210, symSize: 0x80 } - - { offsetInCU: 0x23F6, offset: 0xADF10, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6E90, symBinAddr: 0x8870, symSize: 0x20 } - - { offsetInCU: 0x240A, offset: 0xADF24, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x6EB0, symBinAddr: 0x8890, symSize: 0x20 } - - { offsetInCU: 0x241E, offset: 0xADF38, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x6ED0, symBinAddr: 0x88B0, symSize: 0x10 } - - { offsetInCU: 0x2432, offset: 0xADF4C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6F60, symBinAddr: 0x8940, symSize: 0x20 } - - { offsetInCU: 0x2446, offset: 0xADF60, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6FC0, symBinAddr: 0x89A0, symSize: 0x20 } - - { offsetInCU: 0x245A, offset: 0xADF74, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x7200, symBinAddr: 0x8BE0, symSize: 0x10 } - - { offsetInCU: 0x246E, offset: 0xADF88, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x7210, symBinAddr: 0x8BF0, symSize: 0x10 } - - { offsetInCU: 0x2482, offset: 0xADF9C, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x7220, symBinAddr: 0x8C00, symSize: 0x20 } - - { offsetInCU: 0x2496, offset: 0xADFB0, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x7240, symBinAddr: 0x8C20, symSize: 0x30 } - - { offsetInCU: 0x24B5, offset: 0xADFCF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x72E0, symBinAddr: 0x8CC0, symSize: 0x20 } - - { offsetInCU: 0x24DE, offset: 0xADFF8, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x7300, symBinAddr: 0x8CE0, symSize: 0x30 } - - { offsetInCU: 0x24F2, offset: 0xAE00C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x7390, symBinAddr: 0x8D70, symSize: 0x20 } - - { offsetInCU: 0x2526, offset: 0xAE040, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x73E0, symBinAddr: 0x8DC0, symSize: 0x30 } - - { offsetInCU: 0x253A, offset: 0xAE054, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_yyScMYccfU_Tf2niiin_nTA', symObjAddr: 0x75C0, symBinAddr: 0x8FA0, symSize: 0x120 } - - { offsetInCU: 0x261F, offset: 0xAE139, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x7700, symBinAddr: 0x90E0, symSize: 0x10 } - - { offsetInCU: 0x2BB4, offset: 0xAE6CE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvg', symObjAddr: 0x40, symBinAddr: 0x1A50, symSize: 0x30 } - - { offsetInCU: 0x2C3A, offset: 0xAE754, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg', symObjAddr: 0x150, symBinAddr: 0x1B60, symSize: 0x40 } - - { offsetInCU: 0x2C90, offset: 0xAE7AA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvg', symObjAddr: 0x2C0, symBinAddr: 0x1CD0, symSize: 0x30 } - - { offsetInCU: 0x2D87, offset: 0xAE8A1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x4A0, symBinAddr: 0x1EB0, symSize: 0x30 } - - { offsetInCU: 0x2DD8, offset: 0xAE8F2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x520, symBinAddr: 0x1F30, symSize: 0x50 } - - { offsetInCU: 0x2E4A, offset: 0xAE964, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0x600, symBinAddr: 0x2010, symSize: 0x40 } - - { offsetInCU: 0x2E6F, offset: 0xAE989, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0x640, symBinAddr: 0x2050, symSize: 0x30 } - - { offsetInCU: 0x2EDE, offset: 0xAE9F8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0x730, symBinAddr: 0x2140, symSize: 0x40 } - - { offsetInCU: 0x2F03, offset: 0xAEA1D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xA90, symBinAddr: 0x24A0, symSize: 0x40 } - - { offsetInCU: 0x30A0, offset: 0xAEBBA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xBC0, symBinAddr: 0x25D0, symSize: 0x460 } - - { offsetInCU: 0x33F6, offset: 0xAEF10, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x1020, symBinAddr: 0x2A30, symSize: 0x4B0 } - - { offsetInCU: 0x3696, offset: 0xAF1B0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1510, symBinAddr: 0x2F20, symSize: 0x320 } - - { offsetInCU: 0x3A1E, offset: 0xAF538, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x18C0, symBinAddr: 0x32C0, symSize: 0x80 } - - { offsetInCU: 0x3A32, offset: 0xAF54C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1940, symBinAddr: 0x3340, symSize: 0x320 } - - { offsetInCU: 0x3AAE, offset: 0xAF5C8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1D30, symBinAddr: 0x3730, symSize: 0x260 } - - { offsetInCU: 0x3B5D, offset: 0xAF677, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9drawImage33_C2B5A81EA80ED94FA09E8C035710AE36LLyySo6CGRectVF', symObjAddr: 0x1FC0, symBinAddr: 0x39C0, symSize: 0x200 } - - { offsetInCU: 0x3D61, offset: 0xAF87B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x2260, symBinAddr: 0x3C40, symSize: 0x1A0 } - - { offsetInCU: 0x3F3B, offset: 0xAFA55, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2430, symBinAddr: 0x3E10, symSize: 0x80 } - - { offsetInCU: 0x3FFA, offset: 0xAFB14, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ', symObjAddr: 0x24E0, symBinAddr: 0x3EC0, symSize: 0x10 } - - { offsetInCU: 0x400E, offset: 0xAFB28, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ', symObjAddr: 0x2510, symBinAddr: 0x3EF0, symSize: 0x10 } - - { offsetInCU: 0x4022, offset: 0xAFB3C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ', symObjAddr: 0x2540, symBinAddr: 0x3F20, symSize: 0x10 } - - { offsetInCU: 0x4042, offset: 0xAFB5C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ', symObjAddr: 0x25B0, symBinAddr: 0x3F90, symSize: 0x270 } - - { offsetInCU: 0x40AD, offset: 0xAFBC7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x2820, symBinAddr: 0x4200, symSize: 0x470 } - - { offsetInCU: 0x43A0, offset: 0xAFEBA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x2D30, symBinAddr: 0x4710, symSize: 0x9D0 } - - { offsetInCU: 0x4528, offset: 0xB0042, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x3A70, symBinAddr: 0x5450, symSize: 0xC20 } - - { offsetInCU: 0x46C7, offset: 0xB01E1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfD', symObjAddr: 0x46C0, symBinAddr: 0x60A0, symSize: 0x30 } - - { offsetInCU: 0x46EA, offset: 0xB0204, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x4760, symBinAddr: 0x6140, symSize: 0xD0 } - - { offsetInCU: 0x472D, offset: 0xB0247, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x48B0, symBinAddr: 0x6290, symSize: 0x220 } - - { offsetInCU: 0x479E, offset: 0xB02B8, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x4AD0, symBinAddr: 0x64B0, symSize: 0x20 } - - { offsetInCU: 0x47D5, offset: 0xB02EF, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x4AF0, symBinAddr: 0x64D0, symSize: 0xB0 } - - { offsetInCU: 0x26, offset: 0xB0610, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xABAF0, symSize: 0x3990 } - - { offsetInCU: 0x40, offset: 0xB062A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0xEEC0, symBinAddr: 0x618470, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0xB067C, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0x14EC0, symBinAddr: 0x61E470, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0xB06E0, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0x14EE8, symBinAddr: 0x61E498, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0xB06F6, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x152F0, symBinAddr: 0x61E8A0, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0xB070D, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0x14F30, symBinAddr: 0x61E4E0, symSize: 0x0 } - - { offsetInCU: 0xE22, offset: 0xB140C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xABAF0, symSize: 0x3990 } - - { offsetInCU: 0x4DAE, offset: 0xB5398, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0xE6E0, symBinAddr: 0xBA1D0, symSize: 0x3E0 } - - { offsetInCU: 0x4FF1, offset: 0xB55DB, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x7C20, symBinAddr: 0xB3710, symSize: 0x270 } - - { offsetInCU: 0x582C, offset: 0xB5E16, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x3990, symBinAddr: 0xAF480, symSize: 0xA10 } - - { offsetInCU: 0x684B, offset: 0xB6E35, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x43A0, symBinAddr: 0xAFE90, symSize: 0xA10 } - - { offsetInCU: 0x6EE9, offset: 0xB74D3, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x4DB0, symBinAddr: 0xB08A0, symSize: 0x2B0 } - - { offsetInCU: 0x74BC, offset: 0xB7AA6, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x5060, symBinAddr: 0xB0B50, symSize: 0xCD0 } - - { offsetInCU: 0x83FE, offset: 0xB89E8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x5D30, symBinAddr: 0xB1820, symSize: 0xB40 } - - { offsetInCU: 0x8F67, offset: 0xB9551, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x6870, symBinAddr: 0xB2360, symSize: 0x13B0 } - - { offsetInCU: 0xA567, offset: 0xBAB51, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x7FF0, symBinAddr: 0xB3AE0, symSize: 0x2A30 } - - { offsetInCU: 0xDC6D, offset: 0xBE257, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x7E90, symBinAddr: 0xB3980, symSize: 0x160 } - - { offsetInCU: 0xDEE7, offset: 0xBE4D1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0xAA20, symBinAddr: 0xB6510, symSize: 0x30 } - - { offsetInCU: 0xDFDC, offset: 0xBE5C6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0xAA50, symBinAddr: 0xB6540, symSize: 0x50 } - - { offsetInCU: 0xE051, offset: 0xBE63B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0xAAA0, symBinAddr: 0xB6590, symSize: 0x10 } - - { offsetInCU: 0xE0EC, offset: 0xBE6D6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0xAAB0, symBinAddr: 0xB65A0, symSize: 0xB0 } - - { offsetInCU: 0xE217, offset: 0xBE801, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0xAB60, symBinAddr: 0xB6650, symSize: 0x10 } - - { offsetInCU: 0xE4E9, offset: 0xBEAD3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0xAB70, symBinAddr: 0xB6660, symSize: 0x21A0 } - - { offsetInCU: 0x1118F, offset: 0xC1779, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0xEAC0, symBinAddr: 0xBA5B0, symSize: 0x2D1 } - - { offsetInCU: 0x117CF, offset: 0xC1DB9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0xCD10, symBinAddr: 0xB8800, symSize: 0x20 } - - { offsetInCU: 0x11C6C, offset: 0xC2256, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0xCD30, symBinAddr: 0xB8820, symSize: 0x19B0 } - - { offsetInCU: 0x26, offset: 0xC3306, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xBA890, symSize: 0x800 } - - { offsetInCU: 0x41, offset: 0xC3321, size: 0x8, addend: 0x0, symName: _aes_nohw_rcon, symObjAddr: 0x1B10, symBinAddr: 0x61E980, symSize: 0x0 } - - { offsetInCU: 0x484, offset: 0xC3764, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xBA890, symSize: 0x800 } - - { offsetInCU: 0x1B2B, offset: 0xC4E0B, size: 0x8, addend: 0x0, symName: _aes_nohw_sub_bytes, symObjAddr: 0x15F0, symBinAddr: 0xBBE80, symSize: 0x300 } - - { offsetInCU: 0x32EE, offset: 0xC65CE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_encrypt, symObjAddr: 0x800, symBinAddr: 0xBB090, symSize: 0x80 } - - { offsetInCU: 0x33DC, offset: 0xC66BC, size: 0x8, addend: 0x0, symName: _aes_nohw_expand_round_keys, symObjAddr: 0x880, symBinAddr: 0xBB110, symSize: 0x1A0 } - - { offsetInCU: 0x386D, offset: 0xC6B4D, size: 0x8, addend: 0x0, symName: _aes_nohw_to_batch, symObjAddr: 0xA20, symBinAddr: 0xBB2B0, symSize: 0x420 } - - { offsetInCU: 0x3D7D, offset: 0xC705D, size: 0x8, addend: 0x0, symName: _aes_nohw_encrypt_batch, symObjAddr: 0xE40, symBinAddr: 0xBB6D0, symSize: 0x380 } - - { offsetInCU: 0x424C, offset: 0xC752C, size: 0x8, addend: 0x0, symName: _aes_nohw_from_batch, symObjAddr: 0x11C0, symBinAddr: 0xBBA50, symSize: 0x250 } - - { offsetInCU: 0x498D, offset: 0xC7C6D, size: 0x8, addend: 0x0, symName: _aes_nohw_shift_rows, symObjAddr: 0x18F0, symBinAddr: 0xBC180, symSize: 0x149 } - - { offsetInCU: 0x4BF9, offset: 0xC7ED9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_ctr32_encrypt_blocks, symObjAddr: 0x1410, symBinAddr: 0xBBCA0, symSize: 0x1E0 } - - { offsetInCU: 0x26, offset: 0xC82FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xBC2D0, symSize: 0x2DC } - - { offsetInCU: 0x1D2, offset: 0xC84A6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xBC2D0, symSize: 0x2DC } - - { offsetInCU: 0x26, offset: 0xC86FF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xBC5B0, symSize: 0x87 } - - { offsetInCU: 0x34, offset: 0xC870D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xBC5B0, symSize: 0x87 } - - { offsetInCU: 0x26, offset: 0xC881D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xBC640, symSize: 0x46 } - - { offsetInCU: 0x34, offset: 0xC882B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xBC640, symSize: 0x46 } - - { offsetInCU: 0x86, offset: 0xC898E, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x15F0, symBinAddr: 0x61EA00, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0xC89C0, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1580, symBinAddr: 0x61E990, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0xC89E2, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x15B0, symBinAddr: 0x61E9C0, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0xC89F8, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x15E0, symBinAddr: 0x61E9F0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0xC8CBF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x150, symBinAddr: 0xBC690, symSize: 0x20 } - - { offsetInCU: 0x594, offset: 0xC8E9C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x250, symBinAddr: 0xBC6B0, symSize: 0x20 } - - { offsetInCU: 0x63F, offset: 0xC8F47, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x340, symBinAddr: 0xBC6D0, symSize: 0x3A0 } - - { offsetInCU: 0x11A7, offset: 0xC9AAF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x6E0, symBinAddr: 0xBCA70, symSize: 0x140 } - - { offsetInCU: 0x14A2, offset: 0xC9DAA, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x820, symBinAddr: 0xBCBB0, symSize: 0x6B0 } - - { offsetInCU: 0x26DA, offset: 0xCAFE2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xED0, symBinAddr: 0xBD260, symSize: 0x380 } - - { offsetInCU: 0x2D37, offset: 0xCB63F, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0x1250, symBinAddr: 0xBD5E0, symSize: 0x170 } - - { offsetInCU: 0x2F2F, offset: 0xCB837, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0x13C0, symBinAddr: 0xBD750, symSize: 0x1BF } - - { offsetInCU: 0x26, offset: 0xCBB82, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xBD910, symSize: 0x50 } - - { offsetInCU: 0xFA, offset: 0xCBC56, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xBD910, symSize: 0x50 } - - { offsetInCU: 0x18D, offset: 0xCBCE9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x50, symBinAddr: 0xBD960, symSize: 0x60 } - - { offsetInCU: 0x2F1, offset: 0xCBE4D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0xB0, symBinAddr: 0xBD9C0, symSize: 0x90 } - - { offsetInCU: 0x4C6, offset: 0xCC022, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0x140, symBinAddr: 0xBDA50, symSize: 0x20 } - - { offsetInCU: 0x5E3, offset: 0xCC13F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0x160, symBinAddr: 0xBDA70, symSize: 0xB0 } - - { offsetInCU: 0x696, offset: 0xCC1F2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x210, symBinAddr: 0xBDB20, symSize: 0x70 } - - { offsetInCU: 0x861, offset: 0xCC3BD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x280, symBinAddr: 0xBDB90, symSize: 0x170 } - - { offsetInCU: 0xB67, offset: 0xCC6C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x3F0, symBinAddr: 0xBDD00, symSize: 0x270 } - - { offsetInCU: 0xE6A, offset: 0xCC9C6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x660, symBinAddr: 0xBDF70, symSize: 0x1A0 } - - { offsetInCU: 0x105D, offset: 0xCCBB9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x800, symBinAddr: 0xBE110, symSize: 0x280 } - - { offsetInCU: 0x128C, offset: 0xCCDE8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0xC20, symBinAddr: 0xBE390, symSize: 0x20 } - - { offsetInCU: 0x12F3, offset: 0xCCE4F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0xC40, symBinAddr: 0xBE3B0, symSize: 0x20 } - - { offsetInCU: 0x132A, offset: 0xCCE86, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0xC60, symBinAddr: 0xBE3D0, symSize: 0x10 } - - { offsetInCU: 0x13AC, offset: 0xCCF08, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0xC70, symBinAddr: 0xBE3E0, symSize: 0x4A } - - { offsetInCU: 0x26, offset: 0xCD094, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xBE430, symSize: 0x129 } - - { offsetInCU: 0x34, offset: 0xCD0A2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xBE430, symSize: 0x129 } - - { offsetInCU: 0x34, offset: 0xCD1A4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_ia32cap_P, symObjAddr: 0x3F0, symBinAddr: 0xD5E370, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xCD1F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0xBE560, symSize: 0xF8 } - - { offsetInCU: 0xD5, offset: 0xCD2A8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0xBE560, symSize: 0xF8 } - - { offsetInCU: 0x26, offset: 0xCD3FD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0xBE660, symSize: 0x1210 } - - { offsetInCU: 0x92E, offset: 0xCDD05, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0xBE660, symSize: 0x1210 } - - { offsetInCU: 0x5347, offset: 0xD271E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base_adx, symObjAddr: 0x1210, symBinAddr: 0xBF870, symSize: 0x1E50 } - - { offsetInCU: 0x9B2F, offset: 0xD6F06, size: 0x8, addend: 0x0, symName: _inline_x25519_ge_dbl_4, symObjAddr: 0x3060, symBinAddr: 0xC16C0, symSize: 0x361 } - - { offsetInCU: 0x26, offset: 0xD82F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0xC1A30, symSize: 0xD0 } - - { offsetInCU: 0x303, offset: 0xD85D0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0xC1A30, symSize: 0xD0 } - - { offsetInCU: 0x5A4, offset: 0xD8871, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_update, symObjAddr: 0xD0, symBinAddr: 0xC1B00, symSize: 0x1C0 } - - { offsetInCU: 0x764, offset: 0xD8A31, size: 0x8, addend: 0x0, symName: _poly1305_blocks, symObjAddr: 0x5F0, symBinAddr: 0xC2020, symSize: 0x780 } - - { offsetInCU: 0x903, offset: 0xD8BD0, size: 0x8, addend: 0x0, symName: _poly1305_first_block, symObjAddr: 0x290, symBinAddr: 0xC1CC0, symSize: 0x360 } - - { offsetInCU: 0xEFC, offset: 0xD91C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_finish, symObjAddr: 0xD70, symBinAddr: 0xC27A0, symSize: 0xAA2 } - - { offsetInCU: 0x10, offset: 0xD9952, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0xC3242, symSize: 0x2AF } - - { offsetInCU: 0x51, offset: 0xD9993, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0xC3242, symSize: 0x2AF } - - { offsetInCU: 0x10, offset: 0xD9988, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0xC34F1, symSize: 0x1F4 } - - { offsetInCU: 0x54, offset: 0xD99CC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0xC34F1, symSize: 0x1F4 } - - { offsetInCU: 0x26, offset: 0xD99D4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xC36F0, symSize: 0x490 } - - { offsetInCU: 0x76, offset: 0xD9A24, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x61F000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xD9AA8, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x644000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xD9D09, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xC36F0, symSize: 0x490 } - - { offsetInCU: 0xC5A, offset: 0xDA608, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x490, symBinAddr: 0xC3B80, symSize: 0x300 } - - { offsetInCU: 0x1135, offset: 0xDAAE3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x790, symBinAddr: 0xC3E80, symSize: 0x25D } - - { offsetInCU: 0x10, offset: 0xDAEA8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xC4100, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xDAEE0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xC4100, symSize: 0x3A0 } - - { offsetInCU: 0x4D, offset: 0xDAEE5, size: 0x8, addend: 0x0, symName: ChaCha20_ssse3, symObjAddr: 0x3A0, symBinAddr: 0xC44A0, symSize: 0x220 } - - { offsetInCU: 0x60, offset: 0xDAEF8, size: 0x8, addend: 0x0, symName: ChaCha20_4x, symObjAddr: 0x5C0, symBinAddr: 0xC46C0, symSize: 0xA20 } - - { offsetInCU: 0x76, offset: 0xDAF0E, size: 0x8, addend: 0x0, symName: ChaCha20_8x, symObjAddr: 0xFE0, symBinAddr: 0xC50E0, symSize: 0xB4C } - - { offsetInCU: 0x10, offset: 0xDAF20, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0xC5C40, symSize: 0x40 } - - { offsetInCU: 0x48, offset: 0xDAF58, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0xC5C40, symSize: 0x40 } - - { offsetInCU: 0x4D, offset: 0xDAF5D, size: 0x8, addend: 0x0, symName: _aesni_encrypt2, symObjAddr: 0x40, symBinAddr: 0xC5C80, symSize: 0x60 } - - { offsetInCU: 0x63, offset: 0xDAF73, size: 0x8, addend: 0x0, symName: _aesni_encrypt3, symObjAddr: 0xA0, symBinAddr: 0xC5CE0, symSize: 0x70 } - - { offsetInCU: 0x79, offset: 0xDAF89, size: 0x8, addend: 0x0, symName: _aesni_encrypt4, symObjAddr: 0x110, symBinAddr: 0xC5D50, symSize: 0x90 } - - { offsetInCU: 0x8F, offset: 0xDAF9F, size: 0x8, addend: 0x0, symName: _aesni_encrypt6, symObjAddr: 0x1A0, symBinAddr: 0xC5DE0, symSize: 0xE0 } - - { offsetInCU: 0xA5, offset: 0xDAFB5, size: 0x8, addend: 0x0, symName: _aesni_encrypt8, symObjAddr: 0x280, symBinAddr: 0xC5EC0, symSize: 0x110 } - - { offsetInCU: 0xD9, offset: 0xDAFE9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x390, symBinAddr: 0xC5FD0, symSize: 0x940 } - - { offsetInCU: 0xEA, offset: 0xDAFFA, size: 0x8, addend: 0x0, symName: __aesni_set_encrypt_key, symObjAddr: 0xCD0, symBinAddr: 0xC6910, symSize: 0x44D } - - { offsetInCU: 0x10, offset: 0xDAFF0, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0xC6D60, symSize: 0x160 } - - { offsetInCU: 0x3B, offset: 0xDB01B, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0xC6D60, symSize: 0x160 } - - { offsetInCU: 0x54, offset: 0xDB034, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core_2x, symObjAddr: 0x160, symBinAddr: 0xC6EC0, symSize: 0x290 } - - { offsetInCU: 0x68, offset: 0xDB048, size: 0x8, addend: 0x0, symName: _vpaes_schedule_core, symObjAddr: 0x3F0, symBinAddr: 0xC7150, symSize: 0xF0 } - - { offsetInCU: 0x7F, offset: 0xDB05F, size: 0x8, addend: 0x0, symName: _vpaes_schedule_round, symObjAddr: 0x4E0, symBinAddr: 0xC7240, symSize: 0x21 } - - { offsetInCU: 0x99, offset: 0xDB079, size: 0x8, addend: 0x0, symName: _vpaes_schedule_low_round, symObjAddr: 0x501, symBinAddr: 0xC7261, symSize: 0x9F } - - { offsetInCU: 0xAF, offset: 0xDB08F, size: 0x8, addend: 0x0, symName: _vpaes_schedule_transform, symObjAddr: 0x5A0, symBinAddr: 0xC7300, symSize: 0x30 } - - { offsetInCU: 0xC2, offset: 0xDB0A2, size: 0x8, addend: 0x0, symName: _vpaes_schedule_mangle, symObjAddr: 0x5D0, symBinAddr: 0xC7330, symSize: 0x50 } - - { offsetInCU: 0xE9, offset: 0xDB0C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_set_encrypt_key, symObjAddr: 0x620, symBinAddr: 0xC7380, symSize: 0x30 } - - { offsetInCU: 0xF7, offset: 0xDB0D7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_encrypt, symObjAddr: 0x650, symBinAddr: 0xC73B0, symSize: 0x20 } - - { offsetInCU: 0x11A, offset: 0xDB0FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_ctr32_encrypt_blocks, symObjAddr: 0x670, symBinAddr: 0xC73D0, symSize: 0xD0 } - - { offsetInCU: 0x112, offset: 0xDB0F2, size: 0x8, addend: 0x0, symName: _vpaes_preheat, symObjAddr: 0x740, symBinAddr: 0xC74A0, symSize: 0x31 } - - { offsetInCU: 0x10, offset: 0xDB102, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xC74E0, symSize: 0x2A0 } - - { offsetInCU: 0x45, offset: 0xDB137, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xC74E0, symSize: 0x2A0 } - - { offsetInCU: 0x4C, offset: 0xDB13E, size: 0x8, addend: 0x0, symName: bn_mul4x_mont, symObjAddr: 0x2A0, symBinAddr: 0xC7780, symSize: 0x560 } - - { offsetInCU: 0x62, offset: 0xDB154, size: 0x8, addend: 0x0, symName: bn_sqr8x_mont, symObjAddr: 0x800, symBinAddr: 0xC7CE0, symSize: 0x220 } - - { offsetInCU: 0x79, offset: 0xDB16B, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont, symObjAddr: 0xA20, symBinAddr: 0xC7F00, symSize: 0x570 } - - { offsetInCU: 0x10, offset: 0xDB17A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0xC8480, symSize: 0x660 } - - { offsetInCU: 0x4D, offset: 0xDB1B7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0xC8480, symSize: 0x660 } - - { offsetInCU: 0x54, offset: 0xDB1BE, size: 0x8, addend: 0x0, symName: bn_mul4x_mont_gather5, symObjAddr: 0x660, symBinAddr: 0xC8AE0, symSize: 0x100 } - - { offsetInCU: 0x63, offset: 0xDB1CD, size: 0x8, addend: 0x0, symName: mul4x_internal, symObjAddr: 0x760, symBinAddr: 0xC8BE0, symSize: 0x7E0 } - - { offsetInCU: 0x85, offset: 0xDB1EF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_power5, symObjAddr: 0xF40, symBinAddr: 0xC93C0, symSize: 0x180 } - - { offsetInCU: 0xA3, offset: 0xDB20D, size: 0x8, addend: 0x0, symName: __bn_sqr8x_internal, symObjAddr: 0x10C0, symBinAddr: 0xC9540, symSize: 0x579 } - - { offsetInCU: 0xAA, offset: 0xDB214, size: 0x8, addend: 0x0, symName: __bn_sqr8x_reduction, symObjAddr: 0x1639, symBinAddr: 0xC9AB9, symSize: 0x347 } - - { offsetInCU: 0xC0, offset: 0xDB22A, size: 0x8, addend: 0x0, symName: __bn_post4x_internal, symObjAddr: 0x1980, symBinAddr: 0xC9E00, symSize: 0xA0 } - - { offsetInCU: 0xD9, offset: 0xDB243, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont_gather5, symObjAddr: 0x1A20, symBinAddr: 0xC9EA0, symSize: 0xE0 } - - { offsetInCU: 0xE8, offset: 0xDB252, size: 0x8, addend: 0x0, symName: mulx4x_internal, symObjAddr: 0x1B00, symBinAddr: 0xC9F80, symSize: 0x7E0 } - - { offsetInCU: 0xF9, offset: 0xDB263, size: 0x8, addend: 0x0, symName: bn_powerx5, symObjAddr: 0x22E0, symBinAddr: 0xCA760, symSize: 0x160 } - - { offsetInCU: 0x128, offset: 0xDB292, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_internal, symObjAddr: 0x2440, symBinAddr: 0xCA8C0, symSize: 0x637 } - - { offsetInCU: 0x12F, offset: 0xDB299, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_reduction, symObjAddr: 0x2A77, symBinAddr: 0xCAEF7, symSize: 0x329 } - - { offsetInCU: 0x145, offset: 0xDB2AF, size: 0x8, addend: 0x0, symName: __bn_postx4x_internal, symObjAddr: 0x2DA0, symBinAddr: 0xCB220, symSize: 0x90 } - - { offsetInCU: 0x163, offset: 0xDB2CD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_scatter5, symObjAddr: 0x2E30, symBinAddr: 0xCB2B0, symSize: 0x30 } - - { offsetInCU: 0x178, offset: 0xDB2E2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_gather5, symObjAddr: 0x2E60, symBinAddr: 0xCB2E0, symSize: 0x27F } - - { offsetInCU: 0x10, offset: 0xDB2E4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0xCB560, symSize: 0x80 } - - { offsetInCU: 0x4A, offset: 0xDB31E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0xCB560, symSize: 0x80 } - - { offsetInCU: 0x64, offset: 0xDB338, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0x80, symBinAddr: 0xCB5E0, symSize: 0x360 } - - { offsetInCU: 0x7E, offset: 0xDB352, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x3E0, symBinAddr: 0xCB940, symSize: 0x300 } - - { offsetInCU: 0x85, offset: 0xDB359, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_mul_montx, symObjAddr: 0x6E0, symBinAddr: 0xCBC40, symSize: 0x3C0 } - - { offsetInCU: 0x9B, offset: 0xDB36F, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_sqr_montx, symObjAddr: 0xAA0, symBinAddr: 0xCC000, symSize: 0x320 } - - { offsetInCU: 0xB5, offset: 0xDB389, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0xDC0, symBinAddr: 0xCC320, symSize: 0xA0 } - - { offsetInCU: 0xC4, offset: 0xDB398, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montq, symObjAddr: 0xE60, symBinAddr: 0xCC3C0, symSize: 0x240 } - - { offsetInCU: 0xE1, offset: 0xDB3B5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x10A0, symBinAddr: 0xCC600, symSize: 0x80 } - - { offsetInCU: 0xF0, offset: 0xDB3C4, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montq, symObjAddr: 0x1120, symBinAddr: 0xCC680, symSize: 0x1A0 } - - { offsetInCU: 0x106, offset: 0xDB3DA, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montx, symObjAddr: 0x12C0, symBinAddr: 0xCC820, symSize: 0x260 } - - { offsetInCU: 0x11C, offset: 0xDB3F0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montx, symObjAddr: 0x1520, symBinAddr: 0xCCA80, symSize: 0x1C0 } - - { offsetInCU: 0x142, offset: 0xDB416, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x16E0, symBinAddr: 0xCCC40, symSize: 0xE0 } - - { offsetInCU: 0x158, offset: 0xDB42C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x17C0, symBinAddr: 0xCCD20, symSize: 0xC0 } - - { offsetInCU: 0x162, offset: 0xDB436, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w5, symObjAddr: 0x1880, symBinAddr: 0xCCDE0, symSize: 0xC0 } - - { offsetInCU: 0x178, offset: 0xDB44C, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w7, symObjAddr: 0x1940, symBinAddr: 0xCCEA0, symSize: 0xE0 } - - { offsetInCU: 0x188, offset: 0xDB45C, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_toq, symObjAddr: 0x1A20, symBinAddr: 0xCCF80, symSize: 0x60 } - - { offsetInCU: 0x1A0, offset: 0xDB474, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromq, symObjAddr: 0x1A80, symBinAddr: 0xCCFE0, symSize: 0x60 } - - { offsetInCU: 0x1B1, offset: 0xDB485, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subq, symObjAddr: 0x1AE0, symBinAddr: 0xCD040, symSize: 0x40 } - - { offsetInCU: 0x1CC, offset: 0xDB4A0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2q, symObjAddr: 0x1B20, symBinAddr: 0xCD080, symSize: 0x60 } - - { offsetInCU: 0x1ED, offset: 0xDB4C1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x1B80, symBinAddr: 0xCD0E0, symSize: 0x320 } - - { offsetInCU: 0x200, offset: 0xDB4D4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x1EA0, symBinAddr: 0xCD400, symSize: 0x780 } - - { offsetInCU: 0x21D, offset: 0xDB4F1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0x2620, symBinAddr: 0xCDB80, symSize: 0x580 } - - { offsetInCU: 0x222, offset: 0xDB4F6, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_tox, symObjAddr: 0x2BA0, symBinAddr: 0xCE100, symSize: 0x60 } - - { offsetInCU: 0x23A, offset: 0xDB50E, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromx, symObjAddr: 0x2C00, symBinAddr: 0xCE160, symSize: 0x60 } - - { offsetInCU: 0x24B, offset: 0xDB51F, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subx, symObjAddr: 0x2C60, symBinAddr: 0xCE1C0, symSize: 0x60 } - - { offsetInCU: 0x266, offset: 0xDB53A, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2x, symObjAddr: 0x2CC0, symBinAddr: 0xCE220, symSize: 0x60 } - - { offsetInCU: 0x27F, offset: 0xDB553, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_doublex, symObjAddr: 0x2D20, symBinAddr: 0xCE280, symSize: 0x320 } - - { offsetInCU: 0x292, offset: 0xDB566, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_addx, symObjAddr: 0x3040, symBinAddr: 0xCE5A0, symSize: 0x760 } - - { offsetInCU: 0x2AF, offset: 0xDB583, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_add_affinex, symObjAddr: 0x37A0, symBinAddr: 0xCED00, symSize: 0x555 } - - { offsetInCU: 0x10, offset: 0xDB582, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0xCF260, symSize: 0x5A0 } - - { offsetInCU: 0x3D, offset: 0xDB5AF, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0xCF260, symSize: 0x5A0 } - - { offsetInCU: 0x61, offset: 0xDB5D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_decrypt, symObjAddr: 0x5A0, symBinAddr: 0xCF800, symSize: 0x140 } - - { offsetInCU: 0x63, offset: 0xDB5D5, size: 0x8, addend: 0x0, symName: _aesni_ctr32_6x, symObjAddr: 0x6E0, symBinAddr: 0xCF940, symSize: 0x180 } - - { offsetInCU: 0x8D, offset: 0xDB5FF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_encrypt, symObjAddr: 0x860, symBinAddr: 0xCFAC0, symSize: 0x423 } - - { offsetInCU: 0x10, offset: 0xDB5FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xCFF00, symSize: 0x260 } - - { offsetInCU: 0x48, offset: 0xDB632, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xCFF00, symSize: 0x260 } - - { offsetInCU: 0x5F, offset: 0xDB649, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x260, symBinAddr: 0xD0160, symSize: 0xC0 } - - { offsetInCU: 0x75, offset: 0xDB65F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x320, symBinAddr: 0xD0220, symSize: 0x660 } - - { offsetInCU: 0x88, offset: 0xDB672, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_avx, symObjAddr: 0x980, symBinAddr: 0xD0880, symSize: 0x1A0 } - - { offsetInCU: 0x9F, offset: 0xDB689, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_avx, symObjAddr: 0xB20, symBinAddr: 0xD0A20, symSize: 0x697 } - - { offsetInCU: 0x10, offset: 0xDB688, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xD10C0, symSize: 0x1240 } - - { offsetInCU: 0x51, offset: 0xDB6C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xD10C0, symSize: 0x1240 } - - { offsetInCU: 0x5A, offset: 0xDB6D2, size: 0x8, addend: 0x0, symName: sha512_block_data_order_avx, symObjAddr: 0x1240, symBinAddr: 0xD2300, symSize: 0x1176 } - - { offsetInCU: 0x10, offset: 0xDB6D4, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0xD3480, symSize: 0x200 } - - { offsetInCU: 0x44, offset: 0xDB708, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0xD3480, symSize: 0x200 } - - { offsetInCU: 0x66, offset: 0xDB72A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x200, symBinAddr: 0xD3680, symSize: 0x21C0 } - - { offsetInCU: 0x7C, offset: 0xDB740, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x23C0, symBinAddr: 0xD5840, symSize: 0x1D2D } - - { offsetInCU: 0x83, offset: 0xDB747, size: 0x8, addend: 0x0, symName: process_extra_in_trailer, symObjAddr: 0x40ED, symBinAddr: 0xD756D, symSize: 0x553 } - - { offsetInCU: 0x9C, offset: 0xDB760, size: 0x8, addend: 0x0, symName: chacha20_poly1305_open_avx2, symObjAddr: 0x4640, symBinAddr: 0xD7AC0, symSize: 0x25C0 } - - { offsetInCU: 0xB2, offset: 0xDB776, size: 0x8, addend: 0x0, symName: chacha20_poly1305_seal_avx2, symObjAddr: 0x6C00, symBinAddr: 0xDA080, symSize: 0x2F01 } - - { offsetInCU: 0x10, offset: 0xDB778, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xDCFC0, symSize: 0x1200 } - - { offsetInCU: 0x51, offset: 0xDB7B9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xDCFC0, symSize: 0x1200 } - - { offsetInCU: 0x5D, offset: 0xDB7C5, size: 0x8, addend: 0x0, symName: sha256_block_data_order_shaext, symObjAddr: 0x1200, symBinAddr: 0xDE1C0, symSize: 0x340 } - - { offsetInCU: 0x72, offset: 0xDB7DA, size: 0x8, addend: 0x0, symName: sha256_block_data_order_ssse3, symObjAddr: 0x1540, symBinAddr: 0xDE500, symSize: 0xEC0 } - - { offsetInCU: 0x86, offset: 0xDB7EE, size: 0x8, addend: 0x0, symName: sha256_block_data_order_avx, symObjAddr: 0x2400, symBinAddr: 0xDF3C0, symSize: 0xEF7 } + - { offsetInCU: 0x34, offset: 0xAB77E, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x55B000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xAB7B3, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x55B030, symSize: 0x0 } + - { offsetInCU: 0x27, offset: 0xAB7F0, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x1980, symSize: 0xC5 } + - { offsetInCU: 0x66, offset: 0xAB82F, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x1980, symSize: 0xC5 } + - { offsetInCU: 0x1D9, offset: 0xAB9A2, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xC5, symBinAddr: 0x1A45, symSize: 0xC5 } + - { offsetInCU: 0x65, offset: 0xABB7F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x1B10, symSize: 0x20 } + - { offsetInCU: 0xBB, offset: 0xABBD5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x20, symBinAddr: 0x1B30, symSize: 0x20 } + - { offsetInCU: 0x114, offset: 0xABC2E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x40, symBinAddr: 0x1B50, symSize: 0x20 } + - { offsetInCU: 0x16A, offset: 0xABC84, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x60, symBinAddr: 0x1B70, symSize: 0x20 } + - { offsetInCU: 0x1C5, offset: 0xABCDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x80, symBinAddr: 0x1B90, symSize: 0x20 } + - { offsetInCU: 0x21B, offset: 0xABD35, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0xA0, symBinAddr: 0x1BB0, symSize: 0x20 } + - { offsetInCU: 0x274, offset: 0xABD8E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0xC0, symBinAddr: 0x1BD0, symSize: 0x20 } + - { offsetInCU: 0x2CC, offset: 0xABDE6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvsTo', symObjAddr: 0xE0, symBinAddr: 0x1BF0, symSize: 0x30 } + - { offsetInCU: 0x325, offset: 0xABE3F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x110, symBinAddr: 0x1C20, symSize: 0x20 } + - { offsetInCU: 0x378, offset: 0xABE92, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0x130, symBinAddr: 0x1C40, symSize: 0x20 } + - { offsetInCU: 0x3D0, offset: 0xABEEA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvsTo', symObjAddr: 0x150, symBinAddr: 0x1C60, symSize: 0x30 } + - { offsetInCU: 0x433, offset: 0xABF4D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x360, symBinAddr: 0x1E70, symSize: 0x40 } + - { offsetInCU: 0x465, offset: 0xABF7F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x3A0, symBinAddr: 0x1EB0, symSize: 0x20 } + - { offsetInCU: 0x4D4, offset: 0xABFEE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x3E0, symBinAddr: 0x1EF0, symSize: 0x20 } + - { offsetInCU: 0x543, offset: 0xAC05D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x420, symBinAddr: 0x1F30, symSize: 0x20 } + - { offsetInCU: 0x59C, offset: 0xAC0B6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgTo', symObjAddr: 0x460, symBinAddr: 0x1F70, symSize: 0x30 } + - { offsetInCU: 0x5E4, offset: 0xAC0FE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyFTo', symObjAddr: 0x770, symBinAddr: 0x2280, symSize: 0x30 } + - { offsetInCU: 0x62C, offset: 0xAC146, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfcTo', symObjAddr: 0x870, symBinAddr: 0x2380, symSize: 0x20 } + - { offsetInCU: 0x664, offset: 0xAC17E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCfETo', symObjAddr: 0x8B0, symBinAddr: 0x23C0, symSize: 0x50 } + - { offsetInCU: 0x6B5, offset: 0xAC1CF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x900, symBinAddr: 0x2410, symSize: 0x20 } + - { offsetInCU: 0x70B, offset: 0xAC225, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x920, symBinAddr: 0x2430, symSize: 0x10 } + - { offsetInCU: 0x764, offset: 0xAC27E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x930, symBinAddr: 0x2440, symSize: 0x20 } + - { offsetInCU: 0x7BA, offset: 0xAC2D4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x950, symBinAddr: 0x2460, symSize: 0x10 } + - { offsetInCU: 0x813, offset: 0xAC32D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x960, symBinAddr: 0x2470, symSize: 0x20 } + - { offsetInCU: 0x869, offset: 0xAC383, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x980, symBinAddr: 0x2490, symSize: 0x10 } + - { offsetInCU: 0x8C2, offset: 0xAC3DC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x990, symBinAddr: 0x24A0, symSize: 0x20 } + - { offsetInCU: 0x91A, offset: 0xAC434, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvsTo', symObjAddr: 0x9B0, symBinAddr: 0x24C0, symSize: 0x30 } + - { offsetInCU: 0x973, offset: 0xAC48D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x9E0, symBinAddr: 0x24F0, symSize: 0x40 } + - { offsetInCU: 0x9DF, offset: 0xAC4F9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0xA50, symBinAddr: 0x2560, symSize: 0x50 } + - { offsetInCU: 0xAD3, offset: 0xAC5ED, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScale12CoreGraphics7CGFloatVyFTo', symObjAddr: 0x1090, symBinAddr: 0x2BA0, symSize: 0xB0 } + - { offsetInCU: 0xBAF, offset: 0xAC6C9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x1A90, symBinAddr: 0x35A0, symSize: 0x30 } + - { offsetInCU: 0xBE1, offset: 0xAC6FB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x1C30, symBinAddr: 0x3740, symSize: 0x30 } + - { offsetInCU: 0xC13, offset: 0xAC72D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1C70, symBinAddr: 0x3770, symSize: 0x30 } + - { offsetInCU: 0xC5B, offset: 0xAC775, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1CA0, symBinAddr: 0x37A0, symSize: 0x20 } + - { offsetInCU: 0xCCF, offset: 0xAC7E9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2040, symBinAddr: 0x3B40, symSize: 0x30 } + - { offsetInCU: 0xD06, offset: 0xAC820, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x22C0, symBinAddr: 0x3DC0, symSize: 0x30 } + - { offsetInCU: 0xD58, offset: 0xAC872, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x2440, symBinAddr: 0x3F40, symSize: 0x70 } + - { offsetInCU: 0xD8A, offset: 0xAC8A4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x2500, symBinAddr: 0x4000, symSize: 0x30 } + - { offsetInCU: 0xDBD, offset: 0xAC8D7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x2570, symBinAddr: 0x4070, symSize: 0x60 } + - { offsetInCU: 0xE82, offset: 0xAC99C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9emitEventyySo9NSRunLoopC_So7NSTimerCtFZTo', symObjAddr: 0x26A0, symBinAddr: 0x41A0, symSize: 0x30 } + - { offsetInCU: 0xF78, offset: 0xACA92, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x39C0, symBinAddr: 0x54C0, symSize: 0x1880 } + - { offsetInCU: 0x1E3D, offset: 0xAD957, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x5240, symBinAddr: 0x6D40, symSize: 0x140 } + - { offsetInCU: 0x1FEC, offset: 0xADB06, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x5380, symBinAddr: 0x6E80, symSize: 0x210 } + - { offsetInCU: 0x21C5, offset: 0xADCDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x5590, symBinAddr: 0x7090, symSize: 0x2C0 } + - { offsetInCU: 0x23D7, offset: 0xADEF1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0xAF0, symBinAddr: 0x2600, symSize: 0x40 } + - { offsetInCU: 0x240D, offset: 0xADF27, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0xB30, symBinAddr: 0x2640, symSize: 0x50 } + - { offsetInCU: 0x24A3, offset: 0xADFBD, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x2990, symBinAddr: 0x4490, symSize: 0x50 } + - { offsetInCU: 0x24BB, offset: 0xADFD5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x33C0, symBinAddr: 0x4EC0, symSize: 0x80 } + - { offsetInCU: 0x24EA, offset: 0xAE004, size: 0x8, addend: 0x0, symName: '_$sSvSiIegyy_SvSiIeyByy_TR', symObjAddr: 0x3440, symBinAddr: 0x4F40, symSize: 0x40 } + - { offsetInCU: 0x2527, offset: 0xAE041, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSS_Tgm5', symObjAddr: 0x3550, symBinAddr: 0x5050, symSize: 0x80 } + - { offsetInCU: 0x267B, offset: 0xAE195, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x38D0, symBinAddr: 0x53D0, symSize: 0x20 } + - { offsetInCU: 0x268F, offset: 0xAE1A9, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x38F0, symBinAddr: 0x53F0, symSize: 0x10 } + - { offsetInCU: 0x26A3, offset: 0xAE1BD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCMa', symObjAddr: 0x3900, symBinAddr: 0x5400, symSize: 0x20 } + - { offsetInCU: 0x26B7, offset: 0xAE1D1, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x3920, symBinAddr: 0x5420, symSize: 0x40 } + - { offsetInCU: 0x26CB, offset: 0xAE1E5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x39A0, symBinAddr: 0x54A0, symSize: 0x20 } + - { offsetInCU: 0x29F0, offset: 0xAE50A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5890, symBinAddr: 0x7390, symSize: 0x360 } + - { offsetInCU: 0x2C0C, offset: 0xAE726, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5C70, symBinAddr: 0x7770, symSize: 0x480 } + - { offsetInCU: 0x2EB2, offset: 0xAE9CC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x6140, symBinAddr: 0x7C40, symSize: 0x20 } + - { offsetInCU: 0x2EC6, offset: 0xAE9E0, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x63E0, symBinAddr: 0x7EE0, symSize: 0x10 } + - { offsetInCU: 0x2EDA, offset: 0xAE9F4, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x63F0, symBinAddr: 0x7EF0, symSize: 0x10 } + - { offsetInCU: 0x2EEE, offset: 0xAEA08, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x6400, symBinAddr: 0x7F00, symSize: 0x20 } + - { offsetInCU: 0x2F02, offset: 0xAEA1C, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x6420, symBinAddr: 0x7F20, symSize: 0x30 } + - { offsetInCU: 0x2F21, offset: 0xAEA3B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x64C0, symBinAddr: 0x7FC0, symSize: 0x20 } + - { offsetInCU: 0x2F4A, offset: 0xAEA64, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU_TA', symObjAddr: 0x6500, symBinAddr: 0x8000, symSize: 0x20 } + - { offsetInCU: 0x2F7E, offset: 0xAEA98, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x6520, symBinAddr: 0x8020, symSize: 0x30 } + - { offsetInCU: 0x2F92, offset: 0xAEAAC, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x65A0, symBinAddr: 0x80A0, symSize: 0x30 } + - { offsetInCU: 0x2FA6, offset: 0xAEAC0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU0_Tf2nni_nTA', symObjAddr: 0x6650, symBinAddr: 0x8150, symSize: 0x20 } + - { offsetInCU: 0x2FE3, offset: 0xAEAFD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x6690, symBinAddr: 0x8190, symSize: 0x10 } + - { offsetInCU: 0x37E3, offset: 0xAF2FD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x180, symBinAddr: 0x1C90, symSize: 0x1E0 } + - { offsetInCU: 0x39F3, offset: 0xAF50D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x3C0, symBinAddr: 0x1ED0, symSize: 0x20 } + - { offsetInCU: 0x3A42, offset: 0xAF55C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x400, symBinAddr: 0x1F10, symSize: 0x20 } + - { offsetInCU: 0x3A91, offset: 0xAF5AB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x440, symBinAddr: 0x1F50, symSize: 0x20 } + - { offsetInCU: 0x3AE7, offset: 0xAF601, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg', symObjAddr: 0x490, symBinAddr: 0x1FA0, symSize: 0x130 } + - { offsetInCU: 0x3C0E, offset: 0xAF728, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgySv_SitcfU_Tf4nnd_n', symObjAddr: 0x38C0, symBinAddr: 0x53C0, symSize: 0x10 } + - { offsetInCU: 0x3C42, offset: 0xAF75C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF', symObjAddr: 0x5C0, symBinAddr: 0x20D0, symSize: 0x1B0 } + - { offsetInCU: 0x3E6A, offset: 0xAF984, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfC', symObjAddr: 0x7A0, symBinAddr: 0x22B0, symSize: 0x20 } + - { offsetInCU: 0x3E7E, offset: 0xAF998, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfc', symObjAddr: 0x7C0, symBinAddr: 0x22D0, symSize: 0xB0 } + - { offsetInCU: 0x3F94, offset: 0xAFAAE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0xA20, symBinAddr: 0x2530, symSize: 0x30 } + - { offsetInCU: 0x3FE5, offset: 0xAFAFF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0xAA0, symBinAddr: 0x25B0, symSize: 0x50 } + - { offsetInCU: 0x4057, offset: 0xAFB71, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0xB80, symBinAddr: 0x2690, symSize: 0x40 } + - { offsetInCU: 0x407C, offset: 0xAFB96, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0xBC0, symBinAddr: 0x26D0, symSize: 0x30 } + - { offsetInCU: 0x40EB, offset: 0xAFC05, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0xCB0, symBinAddr: 0x27C0, symSize: 0x40 } + - { offsetInCU: 0x4110, offset: 0xAFC2A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0x1010, symBinAddr: 0x2B20, symSize: 0x40 } + - { offsetInCU: 0x42AD, offset: 0xAFDC7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0x1140, symBinAddr: 0x2C50, symSize: 0x460 } + - { offsetInCU: 0x464F, offset: 0xB0169, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x15A0, symBinAddr: 0x30B0, symSize: 0x4E0 } + - { offsetInCU: 0x491A, offset: 0xB0434, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1AC0, symBinAddr: 0x35D0, symSize: 0x170 } + - { offsetInCU: 0x4A91, offset: 0xB05AB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1CC0, symBinAddr: 0x37C0, symSize: 0x80 } + - { offsetInCU: 0x4AA5, offset: 0xB05BF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1D40, symBinAddr: 0x3840, symSize: 0x300 } + - { offsetInCU: 0x4B21, offset: 0xB063B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x2070, symBinAddr: 0x3B70, symSize: 0x250 } + - { offsetInCU: 0x4BE1, offset: 0xB06FB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVF', symObjAddr: 0x22F0, symBinAddr: 0x3DF0, symSize: 0x150 } + - { offsetInCU: 0x4D77, offset: 0xB0891, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x24B0, symBinAddr: 0x3FB0, symSize: 0x50 } + - { offsetInCU: 0x4DD8, offset: 0xB08F2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2530, symBinAddr: 0x4030, symSize: 0x40 } + - { offsetInCU: 0x4E2B, offset: 0xB0945, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x25D0, symBinAddr: 0x40D0, symSize: 0x10 } + - { offsetInCU: 0x4E3F, offset: 0xB0959, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x2600, symBinAddr: 0x4100, symSize: 0x10 } + - { offsetInCU: 0x4E53, offset: 0xB096D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x2630, symBinAddr: 0x4130, symSize: 0x10 } + - { offsetInCU: 0x4EB1, offset: 0xB09CB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ', symObjAddr: 0x26D0, symBinAddr: 0x41D0, symSize: 0x2C0 } + - { offsetInCU: 0x5028, offset: 0xB0B42, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_', symObjAddr: 0x2E40, symBinAddr: 0x4940, symSize: 0x500 } + - { offsetInCU: 0x5202, offset: 0xB0D1C, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x3480, symBinAddr: 0x4F80, symSize: 0xD0 } + - { offsetInCU: 0x5245, offset: 0xB0D5F, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x35D0, symBinAddr: 0x50D0, symSize: 0x220 } + - { offsetInCU: 0x52B6, offset: 0xB0DD0, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x37F0, symBinAddr: 0x52F0, symSize: 0x20 } + - { offsetInCU: 0x52ED, offset: 0xB0E07, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x3810, symBinAddr: 0x5310, symSize: 0xB0 } + - { offsetInCU: 0x26, offset: 0xB1185, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xC8700, symSize: 0x3990 } + - { offsetInCU: 0x40, offset: 0xB119F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0xEEC0, symBinAddr: 0x595ED0, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0xB11F1, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0x14EC0, symBinAddr: 0x59BED0, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0xB1255, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0x14EE8, symBinAddr: 0x59BEF8, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0xB126B, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x152F0, symBinAddr: 0x59C300, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0xB1282, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0x14F30, symBinAddr: 0x59BF40, symSize: 0x0 } + - { offsetInCU: 0xE22, offset: 0xB1F81, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xC8700, symSize: 0x3990 } + - { offsetInCU: 0x4DAE, offset: 0xB5F0D, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0xE6E0, symBinAddr: 0xD6DE0, symSize: 0x3E0 } + - { offsetInCU: 0x4FF1, offset: 0xB6150, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x7C20, symBinAddr: 0xD0320, symSize: 0x270 } + - { offsetInCU: 0x582C, offset: 0xB698B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x3990, symBinAddr: 0xCC090, symSize: 0xA10 } + - { offsetInCU: 0x684B, offset: 0xB79AA, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x43A0, symBinAddr: 0xCCAA0, symSize: 0xA10 } + - { offsetInCU: 0x6EE9, offset: 0xB8048, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x4DB0, symBinAddr: 0xCD4B0, symSize: 0x2B0 } + - { offsetInCU: 0x74BC, offset: 0xB861B, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x5060, symBinAddr: 0xCD760, symSize: 0xCD0 } + - { offsetInCU: 0x83FE, offset: 0xB955D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x5D30, symBinAddr: 0xCE430, symSize: 0xB40 } + - { offsetInCU: 0x8F67, offset: 0xBA0C6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x6870, symBinAddr: 0xCEF70, symSize: 0x13B0 } + - { offsetInCU: 0xA567, offset: 0xBB6C6, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x7FF0, symBinAddr: 0xD06F0, symSize: 0x2A30 } + - { offsetInCU: 0xDC6D, offset: 0xBEDCC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x7E90, symBinAddr: 0xD0590, symSize: 0x160 } + - { offsetInCU: 0xDEE7, offset: 0xBF046, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0xAA20, symBinAddr: 0xD3120, symSize: 0x30 } + - { offsetInCU: 0xDFDC, offset: 0xBF13B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0xAA50, symBinAddr: 0xD3150, symSize: 0x50 } + - { offsetInCU: 0xE051, offset: 0xBF1B0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0xAAA0, symBinAddr: 0xD31A0, symSize: 0x10 } + - { offsetInCU: 0xE0EC, offset: 0xBF24B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0xAAB0, symBinAddr: 0xD31B0, symSize: 0xB0 } + - { offsetInCU: 0xE217, offset: 0xBF376, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0xAB60, symBinAddr: 0xD3260, symSize: 0x10 } + - { offsetInCU: 0xE4E9, offset: 0xBF648, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0xAB70, symBinAddr: 0xD3270, symSize: 0x21A0 } + - { offsetInCU: 0x1118F, offset: 0xC22EE, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0xEAC0, symBinAddr: 0xD71C0, symSize: 0x2D1 } + - { offsetInCU: 0x117CF, offset: 0xC292E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0xCD10, symBinAddr: 0xD5410, symSize: 0x20 } + - { offsetInCU: 0x11C6C, offset: 0xC2DCB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0xCD30, symBinAddr: 0xD5430, symSize: 0x19B0 } + - { offsetInCU: 0x26, offset: 0xC3E7B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xD74A0, symSize: 0x800 } + - { offsetInCU: 0x41, offset: 0xC3E96, size: 0x8, addend: 0x0, symName: _aes_nohw_rcon, symObjAddr: 0x1B10, symBinAddr: 0x59C3E0, symSize: 0x0 } + - { offsetInCU: 0x484, offset: 0xC42D9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xD74A0, symSize: 0x800 } + - { offsetInCU: 0x1B2B, offset: 0xC5980, size: 0x8, addend: 0x0, symName: _aes_nohw_sub_bytes, symObjAddr: 0x15F0, symBinAddr: 0xD8A90, symSize: 0x300 } + - { offsetInCU: 0x32EE, offset: 0xC7143, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_encrypt, symObjAddr: 0x800, symBinAddr: 0xD7CA0, symSize: 0x80 } + - { offsetInCU: 0x33DC, offset: 0xC7231, size: 0x8, addend: 0x0, symName: _aes_nohw_expand_round_keys, symObjAddr: 0x880, symBinAddr: 0xD7D20, symSize: 0x1A0 } + - { offsetInCU: 0x386D, offset: 0xC76C2, size: 0x8, addend: 0x0, symName: _aes_nohw_to_batch, symObjAddr: 0xA20, symBinAddr: 0xD7EC0, symSize: 0x420 } + - { offsetInCU: 0x3D7D, offset: 0xC7BD2, size: 0x8, addend: 0x0, symName: _aes_nohw_encrypt_batch, symObjAddr: 0xE40, symBinAddr: 0xD82E0, symSize: 0x380 } + - { offsetInCU: 0x424C, offset: 0xC80A1, size: 0x8, addend: 0x0, symName: _aes_nohw_from_batch, symObjAddr: 0x11C0, symBinAddr: 0xD8660, symSize: 0x250 } + - { offsetInCU: 0x498D, offset: 0xC87E2, size: 0x8, addend: 0x0, symName: _aes_nohw_shift_rows, symObjAddr: 0x18F0, symBinAddr: 0xD8D90, symSize: 0x149 } + - { offsetInCU: 0x4BF9, offset: 0xC8A4E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_ctr32_encrypt_blocks, symObjAddr: 0x1410, symBinAddr: 0xD88B0, symSize: 0x1E0 } + - { offsetInCU: 0x26, offset: 0xC8E6F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xD8EE0, symSize: 0x2DC } + - { offsetInCU: 0x1D2, offset: 0xC901B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xD8EE0, symSize: 0x2DC } + - { offsetInCU: 0x26, offset: 0xC9274, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xD91C0, symSize: 0x87 } + - { offsetInCU: 0x34, offset: 0xC9282, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xD91C0, symSize: 0x87 } + - { offsetInCU: 0x26, offset: 0xC9392, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xD9250, symSize: 0x46 } + - { offsetInCU: 0x34, offset: 0xC93A0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xD9250, symSize: 0x46 } + - { offsetInCU: 0x86, offset: 0xC9503, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x15F0, symBinAddr: 0x59C460, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0xC9535, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1580, symBinAddr: 0x59C3F0, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0xC9557, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x15B0, symBinAddr: 0x59C420, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0xC956D, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x15E0, symBinAddr: 0x59C450, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0xC9834, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x150, symBinAddr: 0xD92A0, symSize: 0x20 } + - { offsetInCU: 0x594, offset: 0xC9A11, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x250, symBinAddr: 0xD92C0, symSize: 0x20 } + - { offsetInCU: 0x63F, offset: 0xC9ABC, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x340, symBinAddr: 0xD92E0, symSize: 0x3A0 } + - { offsetInCU: 0x11A7, offset: 0xCA624, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x6E0, symBinAddr: 0xD9680, symSize: 0x140 } + - { offsetInCU: 0x14A2, offset: 0xCA91F, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x820, symBinAddr: 0xD97C0, symSize: 0x6B0 } + - { offsetInCU: 0x26DA, offset: 0xCBB57, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xED0, symBinAddr: 0xD9E70, symSize: 0x380 } + - { offsetInCU: 0x2D37, offset: 0xCC1B4, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0x1250, symBinAddr: 0xDA1F0, symSize: 0x170 } + - { offsetInCU: 0x2F2F, offset: 0xCC3AC, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0x13C0, symBinAddr: 0xDA360, symSize: 0x1BF } + - { offsetInCU: 0x26, offset: 0xCC6F7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xDA520, symSize: 0x50 } + - { offsetInCU: 0xFA, offset: 0xCC7CB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xDA520, symSize: 0x50 } + - { offsetInCU: 0x18D, offset: 0xCC85E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x50, symBinAddr: 0xDA570, symSize: 0x60 } + - { offsetInCU: 0x2F1, offset: 0xCC9C2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0xB0, symBinAddr: 0xDA5D0, symSize: 0x90 } + - { offsetInCU: 0x4C6, offset: 0xCCB97, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0x140, symBinAddr: 0xDA660, symSize: 0x20 } + - { offsetInCU: 0x5E3, offset: 0xCCCB4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0x160, symBinAddr: 0xDA680, symSize: 0xB0 } + - { offsetInCU: 0x696, offset: 0xCCD67, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x210, symBinAddr: 0xDA730, symSize: 0x70 } + - { offsetInCU: 0x861, offset: 0xCCF32, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x280, symBinAddr: 0xDA7A0, symSize: 0x170 } + - { offsetInCU: 0xB67, offset: 0xCD238, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x3F0, symBinAddr: 0xDA910, symSize: 0x270 } + - { offsetInCU: 0xE6A, offset: 0xCD53B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x660, symBinAddr: 0xDAB80, symSize: 0x1A0 } + - { offsetInCU: 0x105D, offset: 0xCD72E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x800, symBinAddr: 0xDAD20, symSize: 0x280 } + - { offsetInCU: 0x128C, offset: 0xCD95D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0xC20, symBinAddr: 0xDAFA0, symSize: 0x20 } + - { offsetInCU: 0x12F3, offset: 0xCD9C4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0xC40, symBinAddr: 0xDAFC0, symSize: 0x20 } + - { offsetInCU: 0x132A, offset: 0xCD9FB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0xC60, symBinAddr: 0xDAFE0, symSize: 0x10 } + - { offsetInCU: 0x13AC, offset: 0xCDA7D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0xC70, symBinAddr: 0xDAFF0, symSize: 0x4A } + - { offsetInCU: 0x26, offset: 0xCDC09, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xDB040, symSize: 0x129 } + - { offsetInCU: 0x34, offset: 0xCDC17, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xDB040, symSize: 0x129 } + - { offsetInCU: 0x34, offset: 0xCDD19, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_ia32cap_P, symObjAddr: 0x3F0, symBinAddr: 0xC946E0, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xCDD6E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0xDB170, symSize: 0xF8 } + - { offsetInCU: 0xD5, offset: 0xCDE1D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0xDB170, symSize: 0xF8 } + - { offsetInCU: 0x26, offset: 0xCDF72, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0xDB270, symSize: 0x1210 } + - { offsetInCU: 0x92E, offset: 0xCE87A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0xDB270, symSize: 0x1210 } + - { offsetInCU: 0x5347, offset: 0xD3293, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base_adx, symObjAddr: 0x1210, symBinAddr: 0xDC480, symSize: 0x1E50 } + - { offsetInCU: 0x9B2F, offset: 0xD7A7B, size: 0x8, addend: 0x0, symName: _inline_x25519_ge_dbl_4, symObjAddr: 0x3060, symBinAddr: 0xDE2D0, symSize: 0x361 } + - { offsetInCU: 0x26, offset: 0xD8E68, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0xDE640, symSize: 0xD0 } + - { offsetInCU: 0x303, offset: 0xD9145, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0xDE640, symSize: 0xD0 } + - { offsetInCU: 0x5A4, offset: 0xD93E6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_update, symObjAddr: 0xD0, symBinAddr: 0xDE710, symSize: 0x1C0 } + - { offsetInCU: 0x764, offset: 0xD95A6, size: 0x8, addend: 0x0, symName: _poly1305_blocks, symObjAddr: 0x5F0, symBinAddr: 0xDEC30, symSize: 0x780 } + - { offsetInCU: 0x903, offset: 0xD9745, size: 0x8, addend: 0x0, symName: _poly1305_first_block, symObjAddr: 0x290, symBinAddr: 0xDE8D0, symSize: 0x360 } + - { offsetInCU: 0xEFC, offset: 0xD9D3E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_finish, symObjAddr: 0xD70, symBinAddr: 0xDF3B0, symSize: 0xAA2 } + - { offsetInCU: 0x10, offset: 0xDA4C7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0xDFE52, symSize: 0x2AF } + - { offsetInCU: 0x51, offset: 0xDA508, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0xDFE52, symSize: 0x2AF } + - { offsetInCU: 0x10, offset: 0xDA4FD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0xE0101, symSize: 0x1F4 } + - { offsetInCU: 0x54, offset: 0xDA541, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0xE0101, symSize: 0x1F4 } + - { offsetInCU: 0x26, offset: 0xDA549, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xE0300, symSize: 0x490 } + - { offsetInCU: 0x76, offset: 0xDA599, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x59D000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xDA61D, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x5C2000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xDA87E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xE0300, symSize: 0x490 } + - { offsetInCU: 0xC5A, offset: 0xDB17D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x490, symBinAddr: 0xE0790, symSize: 0x300 } + - { offsetInCU: 0x1135, offset: 0xDB658, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x790, symBinAddr: 0xE0A90, symSize: 0x25D } + - { offsetInCU: 0x10, offset: 0xDBA1D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xE0D00, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xDBA55, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xE0D00, symSize: 0x3A0 } + - { offsetInCU: 0x4D, offset: 0xDBA5A, size: 0x8, addend: 0x0, symName: ChaCha20_ssse3, symObjAddr: 0x3A0, symBinAddr: 0xE10A0, symSize: 0x220 } + - { offsetInCU: 0x60, offset: 0xDBA6D, size: 0x8, addend: 0x0, symName: ChaCha20_4x, symObjAddr: 0x5C0, symBinAddr: 0xE12C0, symSize: 0xA20 } + - { offsetInCU: 0x76, offset: 0xDBA83, size: 0x8, addend: 0x0, symName: ChaCha20_8x, symObjAddr: 0xFE0, symBinAddr: 0xE1CE0, symSize: 0xB4C } + - { offsetInCU: 0x10, offset: 0xDBA95, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0xE2840, symSize: 0x40 } + - { offsetInCU: 0x48, offset: 0xDBACD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0xE2840, symSize: 0x40 } + - { offsetInCU: 0x4D, offset: 0xDBAD2, size: 0x8, addend: 0x0, symName: _aesni_encrypt2, symObjAddr: 0x40, symBinAddr: 0xE2880, symSize: 0x60 } + - { offsetInCU: 0x63, offset: 0xDBAE8, size: 0x8, addend: 0x0, symName: _aesni_encrypt3, symObjAddr: 0xA0, symBinAddr: 0xE28E0, symSize: 0x70 } + - { offsetInCU: 0x79, offset: 0xDBAFE, size: 0x8, addend: 0x0, symName: _aesni_encrypt4, symObjAddr: 0x110, symBinAddr: 0xE2950, symSize: 0x90 } + - { offsetInCU: 0x8F, offset: 0xDBB14, size: 0x8, addend: 0x0, symName: _aesni_encrypt6, symObjAddr: 0x1A0, symBinAddr: 0xE29E0, symSize: 0xE0 } + - { offsetInCU: 0xA5, offset: 0xDBB2A, size: 0x8, addend: 0x0, symName: _aesni_encrypt8, symObjAddr: 0x280, symBinAddr: 0xE2AC0, symSize: 0x110 } + - { offsetInCU: 0xD9, offset: 0xDBB5E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x390, symBinAddr: 0xE2BD0, symSize: 0x940 } + - { offsetInCU: 0xEA, offset: 0xDBB6F, size: 0x8, addend: 0x0, symName: __aesni_set_encrypt_key, symObjAddr: 0xCD0, symBinAddr: 0xE3510, symSize: 0x44D } + - { offsetInCU: 0x10, offset: 0xDBB65, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0xE3960, symSize: 0x160 } + - { offsetInCU: 0x3B, offset: 0xDBB90, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0xE3960, symSize: 0x160 } + - { offsetInCU: 0x54, offset: 0xDBBA9, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core_2x, symObjAddr: 0x160, symBinAddr: 0xE3AC0, symSize: 0x290 } + - { offsetInCU: 0x68, offset: 0xDBBBD, size: 0x8, addend: 0x0, symName: _vpaes_schedule_core, symObjAddr: 0x3F0, symBinAddr: 0xE3D50, symSize: 0xF0 } + - { offsetInCU: 0x7F, offset: 0xDBBD4, size: 0x8, addend: 0x0, symName: _vpaes_schedule_round, symObjAddr: 0x4E0, symBinAddr: 0xE3E40, symSize: 0x21 } + - { offsetInCU: 0x99, offset: 0xDBBEE, size: 0x8, addend: 0x0, symName: _vpaes_schedule_low_round, symObjAddr: 0x501, symBinAddr: 0xE3E61, symSize: 0x9F } + - { offsetInCU: 0xAF, offset: 0xDBC04, size: 0x8, addend: 0x0, symName: _vpaes_schedule_transform, symObjAddr: 0x5A0, symBinAddr: 0xE3F00, symSize: 0x30 } + - { offsetInCU: 0xC2, offset: 0xDBC17, size: 0x8, addend: 0x0, symName: _vpaes_schedule_mangle, symObjAddr: 0x5D0, symBinAddr: 0xE3F30, symSize: 0x50 } + - { offsetInCU: 0xE9, offset: 0xDBC3E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_set_encrypt_key, symObjAddr: 0x620, symBinAddr: 0xE3F80, symSize: 0x30 } + - { offsetInCU: 0xF7, offset: 0xDBC4C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_encrypt, symObjAddr: 0x650, symBinAddr: 0xE3FB0, symSize: 0x20 } + - { offsetInCU: 0x11A, offset: 0xDBC6F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_ctr32_encrypt_blocks, symObjAddr: 0x670, symBinAddr: 0xE3FD0, symSize: 0xD0 } + - { offsetInCU: 0x112, offset: 0xDBC67, size: 0x8, addend: 0x0, symName: _vpaes_preheat, symObjAddr: 0x740, symBinAddr: 0xE40A0, symSize: 0x31 } + - { offsetInCU: 0x10, offset: 0xDBC77, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xE40E0, symSize: 0x2A0 } + - { offsetInCU: 0x45, offset: 0xDBCAC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xE40E0, symSize: 0x2A0 } + - { offsetInCU: 0x4C, offset: 0xDBCB3, size: 0x8, addend: 0x0, symName: bn_mul4x_mont, symObjAddr: 0x2A0, symBinAddr: 0xE4380, symSize: 0x560 } + - { offsetInCU: 0x62, offset: 0xDBCC9, size: 0x8, addend: 0x0, symName: bn_sqr8x_mont, symObjAddr: 0x800, symBinAddr: 0xE48E0, symSize: 0x220 } + - { offsetInCU: 0x79, offset: 0xDBCE0, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont, symObjAddr: 0xA20, symBinAddr: 0xE4B00, symSize: 0x570 } + - { offsetInCU: 0x10, offset: 0xDBCEF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0xE5080, symSize: 0x660 } + - { offsetInCU: 0x4D, offset: 0xDBD2C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0xE5080, symSize: 0x660 } + - { offsetInCU: 0x54, offset: 0xDBD33, size: 0x8, addend: 0x0, symName: bn_mul4x_mont_gather5, symObjAddr: 0x660, symBinAddr: 0xE56E0, symSize: 0x100 } + - { offsetInCU: 0x63, offset: 0xDBD42, size: 0x8, addend: 0x0, symName: mul4x_internal, symObjAddr: 0x760, symBinAddr: 0xE57E0, symSize: 0x7E0 } + - { offsetInCU: 0x85, offset: 0xDBD64, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_power5, symObjAddr: 0xF40, symBinAddr: 0xE5FC0, symSize: 0x180 } + - { offsetInCU: 0xA3, offset: 0xDBD82, size: 0x8, addend: 0x0, symName: __bn_sqr8x_internal, symObjAddr: 0x10C0, symBinAddr: 0xE6140, symSize: 0x579 } + - { offsetInCU: 0xAA, offset: 0xDBD89, size: 0x8, addend: 0x0, symName: __bn_sqr8x_reduction, symObjAddr: 0x1639, symBinAddr: 0xE66B9, symSize: 0x347 } + - { offsetInCU: 0xC0, offset: 0xDBD9F, size: 0x8, addend: 0x0, symName: __bn_post4x_internal, symObjAddr: 0x1980, symBinAddr: 0xE6A00, symSize: 0xA0 } + - { offsetInCU: 0xD9, offset: 0xDBDB8, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont_gather5, symObjAddr: 0x1A20, symBinAddr: 0xE6AA0, symSize: 0xE0 } + - { offsetInCU: 0xE8, offset: 0xDBDC7, size: 0x8, addend: 0x0, symName: mulx4x_internal, symObjAddr: 0x1B00, symBinAddr: 0xE6B80, symSize: 0x7E0 } + - { offsetInCU: 0xF9, offset: 0xDBDD8, size: 0x8, addend: 0x0, symName: bn_powerx5, symObjAddr: 0x22E0, symBinAddr: 0xE7360, symSize: 0x160 } + - { offsetInCU: 0x128, offset: 0xDBE07, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_internal, symObjAddr: 0x2440, symBinAddr: 0xE74C0, symSize: 0x637 } + - { offsetInCU: 0x12F, offset: 0xDBE0E, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_reduction, symObjAddr: 0x2A77, symBinAddr: 0xE7AF7, symSize: 0x329 } + - { offsetInCU: 0x145, offset: 0xDBE24, size: 0x8, addend: 0x0, symName: __bn_postx4x_internal, symObjAddr: 0x2DA0, symBinAddr: 0xE7E20, symSize: 0x90 } + - { offsetInCU: 0x163, offset: 0xDBE42, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_scatter5, symObjAddr: 0x2E30, symBinAddr: 0xE7EB0, symSize: 0x30 } + - { offsetInCU: 0x178, offset: 0xDBE57, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_gather5, symObjAddr: 0x2E60, symBinAddr: 0xE7EE0, symSize: 0x27F } + - { offsetInCU: 0x10, offset: 0xDBE59, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0xE8160, symSize: 0x80 } + - { offsetInCU: 0x4A, offset: 0xDBE93, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0xE8160, symSize: 0x80 } + - { offsetInCU: 0x64, offset: 0xDBEAD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0x80, symBinAddr: 0xE81E0, symSize: 0x360 } + - { offsetInCU: 0x7E, offset: 0xDBEC7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x3E0, symBinAddr: 0xE8540, symSize: 0x300 } + - { offsetInCU: 0x85, offset: 0xDBECE, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_mul_montx, symObjAddr: 0x6E0, symBinAddr: 0xE8840, symSize: 0x3C0 } + - { offsetInCU: 0x9B, offset: 0xDBEE4, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_sqr_montx, symObjAddr: 0xAA0, symBinAddr: 0xE8C00, symSize: 0x320 } + - { offsetInCU: 0xB5, offset: 0xDBEFE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0xDC0, symBinAddr: 0xE8F20, symSize: 0xA0 } + - { offsetInCU: 0xC4, offset: 0xDBF0D, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montq, symObjAddr: 0xE60, symBinAddr: 0xE8FC0, symSize: 0x240 } + - { offsetInCU: 0xE1, offset: 0xDBF2A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x10A0, symBinAddr: 0xE9200, symSize: 0x80 } + - { offsetInCU: 0xF0, offset: 0xDBF39, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montq, symObjAddr: 0x1120, symBinAddr: 0xE9280, symSize: 0x1A0 } + - { offsetInCU: 0x106, offset: 0xDBF4F, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montx, symObjAddr: 0x12C0, symBinAddr: 0xE9420, symSize: 0x260 } + - { offsetInCU: 0x11C, offset: 0xDBF65, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montx, symObjAddr: 0x1520, symBinAddr: 0xE9680, symSize: 0x1C0 } + - { offsetInCU: 0x142, offset: 0xDBF8B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x16E0, symBinAddr: 0xE9840, symSize: 0xE0 } + - { offsetInCU: 0x158, offset: 0xDBFA1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x17C0, symBinAddr: 0xE9920, symSize: 0xC0 } + - { offsetInCU: 0x162, offset: 0xDBFAB, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w5, symObjAddr: 0x1880, symBinAddr: 0xE99E0, symSize: 0xC0 } + - { offsetInCU: 0x178, offset: 0xDBFC1, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w7, symObjAddr: 0x1940, symBinAddr: 0xE9AA0, symSize: 0xE0 } + - { offsetInCU: 0x188, offset: 0xDBFD1, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_toq, symObjAddr: 0x1A20, symBinAddr: 0xE9B80, symSize: 0x60 } + - { offsetInCU: 0x1A0, offset: 0xDBFE9, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromq, symObjAddr: 0x1A80, symBinAddr: 0xE9BE0, symSize: 0x60 } + - { offsetInCU: 0x1B1, offset: 0xDBFFA, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subq, symObjAddr: 0x1AE0, symBinAddr: 0xE9C40, symSize: 0x40 } + - { offsetInCU: 0x1CC, offset: 0xDC015, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2q, symObjAddr: 0x1B20, symBinAddr: 0xE9C80, symSize: 0x60 } + - { offsetInCU: 0x1ED, offset: 0xDC036, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x1B80, symBinAddr: 0xE9CE0, symSize: 0x320 } + - { offsetInCU: 0x200, offset: 0xDC049, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x1EA0, symBinAddr: 0xEA000, symSize: 0x780 } + - { offsetInCU: 0x21D, offset: 0xDC066, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0x2620, symBinAddr: 0xEA780, symSize: 0x580 } + - { offsetInCU: 0x222, offset: 0xDC06B, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_tox, symObjAddr: 0x2BA0, symBinAddr: 0xEAD00, symSize: 0x60 } + - { offsetInCU: 0x23A, offset: 0xDC083, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromx, symObjAddr: 0x2C00, symBinAddr: 0xEAD60, symSize: 0x60 } + - { offsetInCU: 0x24B, offset: 0xDC094, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subx, symObjAddr: 0x2C60, symBinAddr: 0xEADC0, symSize: 0x60 } + - { offsetInCU: 0x266, offset: 0xDC0AF, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2x, symObjAddr: 0x2CC0, symBinAddr: 0xEAE20, symSize: 0x60 } + - { offsetInCU: 0x27F, offset: 0xDC0C8, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_doublex, symObjAddr: 0x2D20, symBinAddr: 0xEAE80, symSize: 0x320 } + - { offsetInCU: 0x292, offset: 0xDC0DB, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_addx, symObjAddr: 0x3040, symBinAddr: 0xEB1A0, symSize: 0x760 } + - { offsetInCU: 0x2AF, offset: 0xDC0F8, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_add_affinex, symObjAddr: 0x37A0, symBinAddr: 0xEB900, symSize: 0x555 } + - { offsetInCU: 0x10, offset: 0xDC0F7, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0xEBE60, symSize: 0x5A0 } + - { offsetInCU: 0x3D, offset: 0xDC124, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0xEBE60, symSize: 0x5A0 } + - { offsetInCU: 0x61, offset: 0xDC148, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_decrypt, symObjAddr: 0x5A0, symBinAddr: 0xEC400, symSize: 0x140 } + - { offsetInCU: 0x63, offset: 0xDC14A, size: 0x8, addend: 0x0, symName: _aesni_ctr32_6x, symObjAddr: 0x6E0, symBinAddr: 0xEC540, symSize: 0x180 } + - { offsetInCU: 0x8D, offset: 0xDC174, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_encrypt, symObjAddr: 0x860, symBinAddr: 0xEC6C0, symSize: 0x423 } + - { offsetInCU: 0x10, offset: 0xDC16F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xECB00, symSize: 0x260 } + - { offsetInCU: 0x48, offset: 0xDC1A7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xECB00, symSize: 0x260 } + - { offsetInCU: 0x5F, offset: 0xDC1BE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x260, symBinAddr: 0xECD60, symSize: 0xC0 } + - { offsetInCU: 0x75, offset: 0xDC1D4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x320, symBinAddr: 0xECE20, symSize: 0x660 } + - { offsetInCU: 0x88, offset: 0xDC1E7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_avx, symObjAddr: 0x980, symBinAddr: 0xED480, symSize: 0x1A0 } + - { offsetInCU: 0x9F, offset: 0xDC1FE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_avx, symObjAddr: 0xB20, symBinAddr: 0xED620, symSize: 0x697 } + - { offsetInCU: 0x10, offset: 0xDC1FD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xEDCC0, symSize: 0x1240 } + - { offsetInCU: 0x51, offset: 0xDC23E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xEDCC0, symSize: 0x1240 } + - { offsetInCU: 0x5A, offset: 0xDC247, size: 0x8, addend: 0x0, symName: sha512_block_data_order_avx, symObjAddr: 0x1240, symBinAddr: 0xEEF00, symSize: 0x1176 } + - { offsetInCU: 0x10, offset: 0xDC249, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0xF0080, symSize: 0x200 } + - { offsetInCU: 0x44, offset: 0xDC27D, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0xF0080, symSize: 0x200 } + - { offsetInCU: 0x66, offset: 0xDC29F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x200, symBinAddr: 0xF0280, symSize: 0x21C0 } + - { offsetInCU: 0x7C, offset: 0xDC2B5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x23C0, symBinAddr: 0xF2440, symSize: 0x1D2D } + - { offsetInCU: 0x83, offset: 0xDC2BC, size: 0x8, addend: 0x0, symName: process_extra_in_trailer, symObjAddr: 0x40ED, symBinAddr: 0xF416D, symSize: 0x553 } + - { offsetInCU: 0x9C, offset: 0xDC2D5, size: 0x8, addend: 0x0, symName: chacha20_poly1305_open_avx2, symObjAddr: 0x4640, symBinAddr: 0xF46C0, symSize: 0x25C0 } + - { offsetInCU: 0xB2, offset: 0xDC2EB, size: 0x8, addend: 0x0, symName: chacha20_poly1305_seal_avx2, symObjAddr: 0x6C00, symBinAddr: 0xF6C80, symSize: 0x2F01 } + - { offsetInCU: 0x10, offset: 0xDC2ED, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xF9BC0, symSize: 0x1200 } + - { offsetInCU: 0x51, offset: 0xDC32E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xF9BC0, symSize: 0x1200 } + - { offsetInCU: 0x5D, offset: 0xDC33A, size: 0x8, addend: 0x0, symName: sha256_block_data_order_shaext, symObjAddr: 0x1200, symBinAddr: 0xFADC0, symSize: 0x340 } + - { offsetInCU: 0x72, offset: 0xDC34F, size: 0x8, addend: 0x0, symName: sha256_block_data_order_ssse3, symObjAddr: 0x1540, symBinAddr: 0xFB100, symSize: 0xEC0 } + - { offsetInCU: 0x86, offset: 0xDC363, size: 0x8, addend: 0x0, symName: sha256_block_data_order_avx, symObjAddr: 0x2400, symBinAddr: 0xFBFC0, symSize: 0xEF7 } ... diff --git a/packages/canvas-svg/src-native/android/.idea/other.xml b/packages/canvas-svg/src-native/android/.idea/other.xml deleted file mode 100644 index 4604c4460..000000000 --- a/packages/canvas-svg/src-native/android/.idea/other.xml +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/packages/canvas-svg/src-native/android/canvassvg/src/main/java/org/nativescript/canvas/svg/NSCSVG.kt b/packages/canvas-svg/src-native/android/canvassvg/src/main/java/org/nativescript/canvas/svg/NSCSVG.kt index 7b3599e59..675097157 100644 --- a/packages/canvas-svg/src-native/android/canvassvg/src/main/java/org/nativescript/canvas/svg/NSCSVG.kt +++ b/packages/canvas-svg/src-native/android/canvassvg/src/main/java/org/nativescript/canvas/svg/NSCSVG.kt @@ -5,25 +5,79 @@ import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.Color import android.graphics.Matrix +import android.os.Build import android.util.AttributeSet -import android.util.Log import android.view.View -import android.view.ViewGroup import java.io.BufferedReader import java.io.File import java.io.InputStreamReader import java.net.HttpURLConnection import java.net.URL import java.nio.ByteBuffer -import java.util.concurrent.CountDownLatch +import java.nio.charset.Charset +import java.nio.charset.StandardCharsets import java.util.concurrent.Executors -import java.util.concurrent.TimeUnit import java.util.regex.Pattern import kotlin.math.min +class NSCSVGData { + internal var mData: ByteBuffer? = null + internal var mWidth: Int = 0 + internal var mHeight: Int = 0 + internal var mSize: Int = 0 + internal var mBitmap: Bitmap? = null + + + fun resize(width: Int, height: Int) { + if (width > 0 && height > 0) { + mData = null + mBitmap = null + val size = (width * height * 4) + mData = ByteBuffer.allocateDirect(size) + mSize = size + this.mWidth = width + this.mHeight = height + } else { + mData = null + mBitmap = null + this.mWidth = 0 + this.mHeight = 0 + } + } + + val data: ByteBuffer? + get() { + return this.mData + } + + val width: Int + get() { + return this.mWidth + } + + val height: Int + get() { + return this.mHeight + } + + fun toImage(): Bitmap? { + if (mBitmap == null) { + if (mWidth > 0 && mHeight > 0) { + mData?.let { data -> + val bitmap = Bitmap.createBitmap(mWidth.toInt(), mHeight.toInt(), Bitmap.Config.ARGB_8888) + data.rewind() + bitmap.copyPixelsFromBuffer(data) + } + } + } + return mBitmap + } +} + + class NSCSVG : View { - var bitmap: Bitmap? = null + var data: NSCSVGData? = null internal set internal val lock = Any() private var pendingInvalidate: Boolean = false @@ -46,6 +100,7 @@ class NSCSVG : View { if (isInEditMode) { return } + data = NSCSVGData() setBackgroundColor(Color.TRANSPARENT) } @@ -59,20 +114,20 @@ class NSCSVG : View { if ((w != 0 && h != 0) && w != layoutParams.width && h != layoutParams.height) { - bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888) + data?.resize(w, h) resize(w, h) } } override fun onDraw(canvas: Canvas) { - bitmap?.let { + data?.toImage()?.let { canvas.drawBitmap(it, mMatrix, null) } } private fun doDraw() { - bitmap?.let { + data?.toImage()?.let { currentTask?.cancel(true) if (sync) { if (srcPath.isNotEmpty()) { @@ -120,7 +175,7 @@ class NSCSVG : View { interface Callback { - fun onSuccess(view: NSCSVG?) + fun onSuccess(view: NSCSVGData?) } companion object { @@ -141,25 +196,59 @@ class NSCSVG : View { private external fun nativeDrawSVGFromBytes(bitmap: Bitmap, scale: Float, bytes: ByteBuffer) @JvmStatic - fun fromPathSync(context: Context, path: String): NSCSVG? { - val view = NSCSVG(context) + private external fun nativeDrawSVGWithBuffer( + buffer: ByteBuffer, + width: Int, + height: Int, + scale: Float, + svg: String + ) + + @JvmStatic + private external fun nativeDrawSVGFromPathWithBuffer( + buffer: ByteBuffer, + width: Int, + height: Int, + scale: Float, + svg: String + ) + + @JvmStatic + private external fun nativeDrawSVGFromBytesWithBuffer( + buffer: ByteBuffer, + width: Int, + height: Int, + scale: Float, + bytes: ByteBuffer + ) + + @JvmStatic + fun fromPathSync(context: Context, path: String): NSCSVGData? { + val ret = NSCSVGData() val file = File(path) if (file.length() == 0L) { return null } val text = file.readText() val dim = parseSVGDimensions(context, text) - view.layoutParams = ViewGroup.LayoutParams(dim.width, dim.height) - val bitmap = Bitmap.createBitmap(dim.width, dim.height, Bitmap.Config.ARGB_8888) - nativeDrawSVGFromPath(bitmap, context.resources.displayMetrics.density, path) - return view + ret.resize(dim.width, dim.height) + return ret.mData?.let { data -> + nativeDrawSVGFromPathWithBuffer( + data, + ret.width, + ret.height, + context.resources.displayMetrics.density, + path + ) + ret + } } @JvmStatic fun fromPath(context: Context, path: String, callback: Callback) { val executor = Executors.newSingleThreadExecutor() executor.execute { - val view = NSCSVG(context) + val ret = NSCSVGData() val file = File(path) if (file.length() == 0L) { callback.onSuccess(null) @@ -167,33 +256,53 @@ class NSCSVG : View { } val text = file.readText() val dim = parseSVGDimensions(context, text) - view.layoutParams = ViewGroup.LayoutParams(dim.width, dim.height) - val bitmap = Bitmap.createBitmap(dim.width, dim.height, Bitmap.Config.ARGB_8888) - nativeDrawSVGFromPath(bitmap, context.resources.displayMetrics.density, path) - callback.onSuccess(view) + ret.resize(dim.width, dim.height) + ret.mData?.let { data -> + nativeDrawSVGFromPathWithBuffer( + data, + dim.width, + dim.height, + context.resources.displayMetrics.density, + path + ) + callback.onSuccess(ret) + } ?: callback.onSuccess(null) + } } @JvmStatic - fun fromStringSync(context: Context, width: Int, height: Int, string: String): NSCSVG { - val view = NSCSVG(context) - view.layoutParams = ViewGroup.LayoutParams(width, height) - val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) - nativeDrawSVG(bitmap, context.resources.displayMetrics.density, string) - view.bitmap = bitmap - return view + fun fromStringSync(context: Context, width: Int, height: Int, string: String): NSCSVGData { + val ret = NSCSVGData() + ret.resize(width, height) + ret.mData?.let { data -> + nativeDrawSVGWithBuffer( + data, + width, + height, + context.resources.displayMetrics.density, + string + ) + } + return ret } @JvmStatic fun fromString(context: Context, width: Int, height: Int, string: String, callback: Callback) { val executor = Executors.newSingleThreadExecutor() executor.execute { - val view = NSCSVG(context) - view.layoutParams = ViewGroup.LayoutParams(width, height) - val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) - nativeDrawSVG(bitmap, context.resources.displayMetrics.density, string) - view.bitmap = bitmap - callback.onSuccess(view) + val ret = NSCSVGData() + ret.resize(width, height) + ret.mData?.let { data -> + nativeDrawSVGWithBuffer( + data, + width, + height, + context.resources.displayMetrics.density, + string + ) + callback.onSuccess(ret) + } ?: callback.onSuccess(null) } } @@ -206,15 +315,20 @@ class NSCSVG : View { val connection = url.openConnection() as HttpURLConnection val br = BufferedReader(InputStreamReader(connection.inputStream)) val svg = br.readText() - val view = NSCSVG(context) + val ret = NSCSVGData() val dim = parseSVGDimensions(context, svg) - view.layoutParams = ViewGroup.LayoutParams(dim.width, dim.height) - val bitmap = Bitmap.createBitmap(dim.width, dim.height, Bitmap.Config.ARGB_8888) - nativeDrawSVG(bitmap, context.resources.displayMetrics.density, svg) - view.bitmap = bitmap - callback.onSuccess(view) + ret.resize(dim.width, dim.height) + ret.mData?.let { data -> + nativeDrawSVGWithBuffer( + data, + dim.width, + dim.height, + context.resources.displayMetrics.density, + svg + ) + callback.onSuccess(ret) + } ?: callback.onSuccess(null) } catch (e: Exception) { - e.printStackTrace() callback.onSuccess(null) } } @@ -224,24 +338,104 @@ class NSCSVG : View { fun fromRemoteSync( context: Context, path: String - ): NSCSVG? { - var view: NSCSVG? = null + ): NSCSVGData? { + var ret: NSCSVGData? = null val thread = Thread { - view = NSCSVG(context) + ret = NSCSVGData() val url = URL(path) val connection = url.openConnection() as HttpURLConnection val br = BufferedReader(InputStreamReader(connection.inputStream)) val svg = br.readText() val dim = parseSVGDimensions(context, svg) - view?.layoutParams = ViewGroup.LayoutParams(dim.width, dim.height) - val bitmap = Bitmap.createBitmap(dim.width, dim.height, Bitmap.Config.ARGB_8888) - nativeDrawSVG(bitmap, context.resources.displayMetrics.density, svg) - view?.bitmap = bitmap + ret?.resize(dim.width, dim.height) + ret = ret?.mData?.let { data -> + nativeDrawSVGWithBuffer( + data, + dim.width, + dim.height, + context.resources.displayMetrics.density, + svg + ) + ret + } } thread.start() thread.join() - return view + return ret + } + + + @JvmStatic + fun fromBytesSync(context: Context, bytes: ByteBuffer): NSCSVGData? { + val ret = NSCSVGData() + bytes.rewind() + var svg: String? = null + try { + svg = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + StandardCharsets.UTF_8.decode(bytes).toString() + } else { + Charset.forName("UTF-8").decode(bytes).toString() + } + } catch (_: Exception) { + } finally { + bytes.rewind() + } + if (svg == null) { + return null + } + val dim = parseSVGDimensions(context, svg) + ret.resize(dim.width, dim.height) + return ret.mData?.let { data -> + nativeDrawSVGWithBuffer( + data, + ret.width, + ret.height, + context.resources.displayMetrics.density, + svg + ) + ret + } + } + + @JvmStatic + fun fromBytes(context: Context, bytes: ByteBuffer, callback: Callback) { + val executor = Executors.newSingleThreadExecutor() + executor.execute { + val ret = NSCSVGData() + bytes.rewind() + + var svg: String? = null + try { + svg = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + StandardCharsets.UTF_8.decode(bytes).toString() + } else { + Charset.forName("UTF-8").decode(bytes).toString() + } + } catch (_: Exception) { + } finally { + bytes.rewind() + } + + if (svg == null) { + callback.onSuccess(null) + return@execute + } + + val dim = parseSVGDimensions(context, svg) + ret.resize(dim.width, dim.height) + ret.mData?.let { data -> + nativeDrawSVGWithBuffer( + data, + dim.width, + dim.height, + context.resources.displayMetrics.density, + svg + ) + callback.onSuccess(ret) + } ?: callback.onSuccess(null) + + } } @@ -272,42 +466,45 @@ class NSCSVG : View { while (attributesMatcher.find()) { val attributePair = attributesMatcher.group(0)?.trim() - attributePair?.split("=")?.let { parts -> - if (parts.size == 2) { - val attributeName = parts[0].trim() - var attributeValue = parts[1].trim().replace("\"", "") - - - val stringLiteralPattern = Pattern.compile("\\\\\"(\\d*\\.?\\d+)\\\\\"") - val stringLiteralMatcher = stringLiteralPattern.matcher(attributeValue) - if (stringLiteralMatcher.matches()) { - stringLiteralMatcher.group(1)?.let { - attributeValue = it - } - } - if (attributeName == "width") { - width = attributeValue.toDouble() * context.resources.displayMetrics.density - widthDefined = true - } else if (attributeName == "height") { - height = attributeValue.toDouble() * context.resources.displayMetrics.density - heightDefined = true - } else if (attributeName == "viewBox") { - val viewBoxValues = parts[1].trim { it <= ' ' } - .split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() - for (i in 0 until min(4.0, viewBoxValues.size.toDouble()).toInt()) { - var value = viewBoxValues[i].trim().replace("\"", ""); - val slm = stringLiteralPattern.matcher(value) - if (slm.matches()) { - slm.group(1)?.let { - value = it + attributePair?.split(" ")?.let { attributes -> + for (attr in attributes) { + attr.split("=").let { parts -> + if (parts.size == 2) { + val attributeName = parts[0].trim() + var attributeValue = parts[1].trim().replace("\"", "") + + + val stringLiteralPattern = Pattern.compile("\\\\\"(\\d*\\.?\\d+)\\\\\"") + val stringLiteralMatcher = stringLiteralPattern.matcher(attributeValue) + if (stringLiteralMatcher.matches()) { + stringLiteralMatcher.group(1)?.let { + attributeValue = it + } + } + if (attributeName == "width") { + width = attributeValue.toDouble() * context.resources.displayMetrics.density + widthDefined = true + } else if (attributeName == "height") { + height = attributeValue.toDouble() * context.resources.displayMetrics.density + heightDefined = true + } else if (attributeName == "viewBox") { + val viewBoxValues = parts[1].trim { it <= ' ' } + .split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() + for (i in 0 until min(4.0, viewBoxValues.size.toDouble()).toInt()) { + var value = viewBoxValues[i].trim().replace("\"", ""); + val slm = stringLiteralPattern.matcher(value) + if (slm.matches()) { + slm.group(1)?.let { + value = it + } + } + viewBox[i] = value.toDouble() } } - viewBox[i] = value.toDouble() } } } } - } if (width == 0.0 && viewBox.size == 4) { diff --git a/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/arm64-v8a/libcanvassvg.so b/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/arm64-v8a/libcanvassvg.so index 2a5a26aeb..e3f0a762e 100755 Binary files a/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/arm64-v8a/libcanvassvg.so and b/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/arm64-v8a/libcanvassvg.so differ diff --git a/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/armeabi-v7a/libcanvassvg.so b/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/armeabi-v7a/libcanvassvg.so index d76ed8989..d4604cfcf 100755 Binary files a/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/armeabi-v7a/libcanvassvg.so and b/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/armeabi-v7a/libcanvassvg.so differ diff --git a/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/x86/libcanvassvg.so b/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/x86/libcanvassvg.so index e83c1a192..850205476 100755 Binary files a/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/x86/libcanvassvg.so and b/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/x86/libcanvassvg.so differ diff --git a/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/x86_64/libcanvassvg.so b/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/x86_64/libcanvassvg.so index c1e8f5cba..06a505ea7 100755 Binary files a/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/x86_64/libcanvassvg.so and b/packages/canvas-svg/src-native/android/canvassvg/src/main/jniLibs/x86_64/libcanvassvg.so differ diff --git a/packages/canvas-svg/src-native/ios/CanvasSVG.xcodeproj/project.xcworkspace/xcuserdata/triniwiz.xcuserdatad/UserInterfaceState.xcuserstate b/packages/canvas-svg/src-native/ios/CanvasSVG.xcodeproj/project.xcworkspace/xcuserdata/triniwiz.xcuserdatad/UserInterfaceState.xcuserstate index c9e71136e..14c9a3e74 100644 Binary files a/packages/canvas-svg/src-native/ios/CanvasSVG.xcodeproj/project.xcworkspace/xcuserdata/triniwiz.xcuserdatad/UserInterfaceState.xcuserstate and b/packages/canvas-svg/src-native/ios/CanvasSVG.xcodeproj/project.xcworkspace/xcuserdata/triniwiz.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift b/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift index 0ec2bc2f2..da7597fe7 100644 --- a/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift +++ b/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift @@ -8,16 +8,84 @@ import Foundation import UIKit +@objcMembers +@objc(NSCSVGData) +public class NSCSVGData: NSObject { + var data_ptr: UnsafeMutableRawPointer? = nil + var data_size: CGSize = .zero + var buf_size: UInt = 0 + var data_data: NSMutableData? = nil + let colorSpace = CGColorSpaceCreateDeviceRGB() + var image: UIImage? = nil + + + func resize(_ width: CGFloat, _ height: CGFloat){ + if(!width.isZero && !width.isNaN && !height.isZero && !height.isNaN){ + data_ptr?.deallocate() + data_data = nil + image = nil + data_ptr = calloc(Int(width * height), 4) + buf_size = UInt(width * height * 4) + data_size = CGSize(width: CGFloat(width), height: CGFloat(height)) + } + } + + public var width: CGFloat { + get { + return data_size.width + } + } + + public var height: CGFloat { + get { + return data_size.height + } + } + + public var rawData: UnsafeMutableRawPointer? { + get { + return data_ptr + } + } + + public var data: NSMutableData? { + get { + if(data_data != nil){ + return data_data + } + guard let data = data_ptr else {return nil} + let ptr = Unmanaged.passRetained(self) + data_data = NSMutableData(bytesNoCopy: data, length: Int(buf_size)) { _, _ in + let _ = Unmanaged.toOpaque(ptr) + } + return data_data + } + } + + public func getImage() -> UIImage? { + if(image != nil){ + return image + } + guard let data = data_ptr else {return nil} + + let width = Int(self.data_size.width) + let height = Int(self.data_size.height) + let ctx = CGContext(data: data, width: width, height: height, bitsPerComponent: 8, bytesPerRow: width * 4, space: colorSpace, bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue | CGBitmapInfo.byteOrder32Big.rawValue) + + guard let cgImage = ctx?.makeImage() else {return nil} + self.image = UIImage(cgImage: cgImage) + return self.image + } +} + @objcMembers @objc(NSCSVG) public class NSCSVG: UIView { - public internal(set) var data: UnsafeMutableRawPointer? = nil - public internal(set) var data_size: CGSize = .zero - public internal(set) var buf_size: UInt = 0 var didInitDrawing = false var forceResize = false var sync = false + var data: NSCSVGData? = nil public var autoScale = true { didSet { forceResize = true @@ -35,9 +103,9 @@ public class NSCSVG: UIView { } } - func deviceScale() -> Float32 { + func deviceScale() -> CGFloat { if autoScale { - return Float32(UIScreen.main.nativeScale) + return UIScreen.main.nativeScale } return 1 } @@ -52,11 +120,11 @@ public class NSCSVG: UIView { guard let srcPath = self.srcPath else{return} let source = srcPath as NSString - guard let buf = self.data?.assumingMemoryBound(to: UInt8.self) else {return} - - CanvasSVGHelper.draw(fromPath: buf, size: self.buf_size, width: Float(self.data_size.width), height: Float(self.data_size.height), path: source as String) + guard let data = self.data else {return} + guard let buf = data.rawData?.assumingMemoryBound(to: UInt8.self) else {return} + CanvasSVGHelper.draw(fromPath: buf, size: data.buf_size, width: Float(data.data_size.width), height: Float(data.data_size.height), path: source as String) self.didInitDrawing = true self.setNeedsDisplay() @@ -66,10 +134,12 @@ public class NSCSVG: UIView { guard let src = self.src else{return} let source = src as NSString - guard let buf = self.data?.assumingMemoryBound(to: UInt8.self) else {return} + guard let data = self.data else {return} + guard let buf = data.rawData?.assumingMemoryBound(to: UInt8.self) else {return} - CanvasSVGHelper.draw(fromString: buf, size: self.buf_size, width: Float(self.data_size.width), height: Float(self.data_size.height), svg: source as String) + + CanvasSVGHelper.draw(fromString: buf, size: data.buf_size, width: Float(data.data_size.width), height: Float(data.data_size.height), svg: source as String) self.didInitDrawing = true self.setNeedsDisplay() @@ -85,12 +155,12 @@ public class NSCSVG: UIView { if(self.srcPath != nil){ guard let srcPath = self.srcPath else{return} let source = srcPath as NSString + guard let data = self.data else {return} - - guard let buf = self.data?.assumingMemoryBound(to: UInt8.self) else {return} + guard let buf = data.rawData?.assumingMemoryBound(to: UInt8.self) else {return} - CanvasSVGHelper.draw(fromPath: buf, size: self.buf_size, width: Float(self.data_size.width), height: Float(self.data_size.height), path: source as String) + CanvasSVGHelper.draw(fromPath: buf, size: data.buf_size, width: Float(data.data_size.width), height: Float(data.data_size.height), path: source as String) DispatchQueue.main.async { [self] in @@ -108,11 +178,13 @@ public class NSCSVG: UIView { guard let src = self.src else{return} let source = src as NSString - guard let buf = self.data?.assumingMemoryBound(to: UInt8.self) else {return} + guard let data = self.data else {return} + + guard let buf = data.rawData?.assumingMemoryBound(to: UInt8.self) else {return} - CanvasSVGHelper.draw(fromString: buf, size: self.buf_size, width: Float(self.data_size.width), height: Float(self.data_size.height), svg: source as String) + CanvasSVGHelper.draw(fromString: buf, size: data.buf_size, width: Float(data.data_size.width), height: Float(data.data_size.height), svg: source as String) DispatchQueue.main.async { @@ -131,13 +203,12 @@ public class NSCSVG: UIView { public func update(){ let size = layer.frame.size - let width = Float(size.width) * deviceScale() - let height = Float(size.height) * deviceScale() - if (CGFloat(width) != data_size.width && CGFloat(height) != data_size.height) || forceResize { - data?.deallocate() - data = calloc(Int(width * height), 4) - buf_size = UInt(width * height * 4) - data_size = CGSize(width: CGFloat(width), height: CGFloat(height)) + let scale = deviceScale() + let width = size.width * scale + let height = size.height * scale + guard let data = data else {return} + if (width != data.data_size.width && height != data.data_size.height) || forceResize { + data.resize(width, height) doDraw() if forceResize { @@ -165,12 +236,10 @@ public class NSCSVG: UIView { } private func drawImage(_ rect: CGRect){ - let width = Int(self.data_size.width) - let height = Int(self.data_size.height) - let ctx = CGContext(data: self.data, width: width, height: height, bitsPerComponent: 8, bytesPerRow: width * 4, space: self.colorSpace, bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue | CGBitmapInfo.byteOrder32Big.rawValue) - - guard let cgImage = ctx?.makeImage() else {return} - let image = UIImage(cgImage: cgImage) + guard let data = self.data else {return} + let width = Int(data.data_size.width) + let height = Int(data.data_size.height) + guard let image = data.getImage() else {return} image.draw(in: rect) } @@ -182,45 +251,35 @@ public class NSCSVG: UIView { public func toImage() -> UIImage? { if didInitDrawing { - let width = Int(self.data_size.width) - let height = Int(self.data_size.height) - let ctx = CGContext(data: self.data, width: width, height: height, bitsPerComponent: 8, bytesPerRow: width * 4, space: self.colorSpace, bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue | CGBitmapInfo.byteOrder32Big.rawValue) - - guard let cgImage = ctx?.makeImage() else {return nil} - return UIImage(cgImage: cgImage) - + return self.data?.getImage() } return nil } public func toData() -> NSData? { - return NSMutableData(bytes: data, length: Int(buf_size)) + return self.data?.data } - public static func fromStringSync(_ source: String) -> NSCSVG? { - var view = NSCSVG() + public static func fromStringSync(_ source: String) -> NSCSVGData? { let dim = parseSVGDimensions(source) if(dim.width.isZero || dim.height.isZero){ return nil } - view.frame = CGRect(x: 0, y: 0, width: dim.width, height: dim.height) let width = dim.width let height = dim.height - view.data = calloc(Int(width * height), 4) - view.buf_size = UInt(width * height * 4) - view.data_size = CGSize(width: CGFloat(width), height: CGFloat(height)) + let data = NSCSVGData() + data.resize(CGFloat(width), CGFloat(height)) + + guard let buf = data.rawData?.assumingMemoryBound(to: UInt8.self) else {return nil} + CanvasSVGHelper.draw(fromString: buf, size: data.buf_size, width: Float(data.data_size.width), height: Float(data.data_size.height), svg: source as String) - guard let buf = view.data?.assumingMemoryBound(to: UInt8.self) else {return nil} - CanvasSVGHelper.draw(fromString: buf, size: view.buf_size, width: Float(view.data_size.width), height: Float(view.data_size.height), svg: source as String) - - - return view + return data } - public static func fromPathSync(_ path: String) -> NSCSVG? { - var view = NSCSVG() + public static func fromPathSync(_ path: String) -> NSCSVGData? { + var data: NSCSVGData? = nil if(!FileManager.default.fileExists(atPath: path)){return nil} do { let text = try String(contentsOfFile: path) @@ -232,26 +291,26 @@ public class NSCSVG: UIView { if(dim.width.isZero || dim.height.isZero){ return nil } - view.frame = CGRect(x: 0, y: 0, width: dim.width, height: dim.height) - let width = dim.width - let height = dim.height - view.data = calloc(Int(width * height), 4) - view.buf_size = UInt(width * height * 4) - view.data_size = CGSize(width: CGFloat(width), height: CGFloat(height)) - - guard let buf = view.data?.assumingMemoryBound(to: UInt8.self) else {return nil} - CanvasSVGHelper.draw(fromString: buf, size: view.buf_size, width: Float(view.data_size.width), height: Float(view.data_size.height), svg: text as String) + let ret = NSCSVGData() + + ret.resize(CGFloat(dim.width), CGFloat(dim.height)) + + guard let buf = ret.rawData?.assumingMemoryBound(to: UInt8.self) else {return nil} + + CanvasSVGHelper.draw(fromString: buf, size: ret.buf_size, width: Float(ret.data_size.width), height: Float(ret.data_size.height), svg: text as String) + + data = ret }catch{ return nil } - return view + return data } - public static func fromRemoteSync(_ path: String) -> NSCSVG? { - var view = NSCSVG() + public static func fromRemoteSync(_ path: String) -> NSCSVGData? { + var data: NSCSVGData? = nil guard let url = URL(string: path) else { return nil } @@ -262,169 +321,161 @@ public class NSCSVG: UIView { } let dim = parseSVGDimensions(text) + if(dim.width.isZero || dim.height.isZero){ return nil } - view.frame = CGRect(x: 0, y: 0, width: dim.width, height: dim.height) - let width = dim.width - let height = dim.height - view.data = calloc(Int(width * height), 4) - view.buf_size = UInt(width * height * 4) - view.data_size = CGSize(width: CGFloat(width), height: CGFloat(height)) + + let ret = NSCSVGData() + + ret.resize(CGFloat(dim.width), CGFloat(dim.height)) + + guard let buf = ret.rawData?.assumingMemoryBound(to: UInt8.self) else {return nil} + + CanvasSVGHelper.draw(fromString: buf, size: ret.buf_size, width: Float(ret.data_size.width), height: Float(ret.data_size.height), svg: text as String) + + data = ret - guard let buf = view.data?.assumingMemoryBound(to: UInt8.self) else {return nil} - CanvasSVGHelper.draw(fromString: buf, size: view.buf_size, width: Float(view.data_size.width), height: Float(view.data_size.height), svg: text as String) }catch{ return nil } - return view + return data + } + + static func emitEvent(_ loop: RunLoop, _ event: Timer){ + loop.add(event, forMode: .common) } - public static func fromString(_ source: String, _ callback:@escaping ((NSCSVG?)-> Void)) { + public static func fromString(_ source: String, _ callback:@escaping ((NSCSVGData?)-> Void)) { + let current = RunLoop.current DispatchQueue.global(qos: .utility).async { - var view = NSCSVG() + let nilEvent = Timer(timeInterval: 0, repeats: false) { _ in + callback(nil) + } + let dim = parseSVGDimensions(source) + + if(dim.width.isZero || dim.height.isZero){ - callback(nil) + emitEvent(current, nilEvent) return } - let width = dim.width - let height = dim.height - var data = calloc(Int(width * height), 4) - var buf_size = UInt(width * height * 4) - var data_size = CGSize(width: CGFloat(width), height: CGFloat(height)) + var data = NSCSVGData() + data.resize(CGFloat(dim.width), CGFloat(dim.height)) - guard let buf = view.data?.assumingMemoryBound(to: UInt8.self) else { - callback(nil) + guard let buf = data.rawData?.assumingMemoryBound(to: UInt8.self) else { + emitEvent(current, nilEvent) return } - CanvasSVGHelper.draw(fromString: buf, size: buf_size, width: Float(data_size.width), height: Float(data_size.height), svg: source as String) - DispatchQueue.main.async { - var view = NSCSVG() - view.frame = CGRect(x: 0, y: 0, width: dim.width, height: dim.height) - view.data = data - view.data_size = data_size - view.buf_size = buf_size - callback(view) + CanvasSVGHelper.draw(fromString: buf, size: data.buf_size, width: Float(data.data_size.width), height: Float(data.data_size.height), svg: source as String) + + + let event = Timer(timeInterval: 0, repeats: false) { _ in + callback(data) } + + emitEvent(current, event) + } } - public static func fromPath(_ path: String, _ callback:@escaping ((NSCSVG?)-> Void)) { + public static func fromPath(_ path: String, _ callback:@escaping ((NSCSVGData?)-> Void)) { + let current = RunLoop.current DispatchQueue.global(qos: .utility).async { - var view = NSCSVG() + let nilEvent = Timer(timeInterval: 0, repeats: false) { _ in + callback(nil) + } + if(!FileManager.default.fileExists(atPath: path)){ - DispatchQueue.main.async { - callback(nil) - } + emitEvent(current, nilEvent) return } do { let text = try String(contentsOfFile: path) if (text.isEmpty) { - DispatchQueue.main.async { - callback(nil) - } + emitEvent(current, nilEvent) return } - let dim = parseSVGDimensions(text) + var dim = parseSVGDimensions(text) if(dim.width.isZero || dim.height.isZero){ - callback(nil) + emitEvent(current, nilEvent) return } - let width = dim.width - let height = dim.height - var data = calloc(Int(width * height), 4) - var buf_size = UInt(width * height * 4) - var data_size = CGSize(width: CGFloat(width), height: CGFloat(height)) + + let data = NSCSVGData() + data.resize(CGFloat(dim.width), CGFloat(dim.height)) - guard let buf = data?.assumingMemoryBound(to: UInt8.self) else { - callback(nil) + guard let buf = data.rawData?.assumingMemoryBound(to: UInt8.self) else { + emitEvent(current, nilEvent) return } - CanvasSVGHelper.draw(fromString: buf, size: buf_size, width: Float(data_size.width), height: Float(data_size.height), svg: text as String) - DispatchQueue.main.async { - var view = NSCSVG() - view.frame = CGRect(x: 0, y: 0, width: dim.width, height: dim.height) - view.data = data - view.data_size = data_size - view.buf_size = buf_size - callback(view) + CanvasSVGHelper.draw(fromString: buf, size: data.buf_size, width: Float(data.data_size.width), height: Float(data.data_size.height), svg: text as String) + + + let event = Timer(timeInterval: 0, repeats: false) { _ in + callback(data) } + emitEvent(current, event) + }catch{ - DispatchQueue.main.async { - callback(nil) - } + emitEvent(current, nilEvent) } - + } } - public static func fromRemote(_ path: String, _ callback:@escaping ((NSCSVG?)-> Void)) { + public static func fromRemote(_ path: String, _ callback:@escaping ((NSCSVGData?)-> Void)) { + let current = RunLoop.current DispatchQueue.global(qos: .utility).async { + let nilEvent = Timer(timeInterval: 0, repeats: false) { _ in + callback(nil) + } + guard let url = URL(string: path) else { - DispatchQueue.main.async { - callback(nil) - } + emitEvent(current, nilEvent) return } do { let text = try String(contentsOf: url, encoding: .utf8) if (text.isEmpty) { - DispatchQueue.main.async { - callback(nil) - } + emitEvent(current, nilEvent) return } - let dim = parseSVGDimensions(text) - if(dim.width.isZero || dim.height.isZero){ - DispatchQueue.main.async { - callback(nil) - } - return - } - let width = dim.width - let height = dim.height - var data = calloc(Int(width * height), 4) - var buf_size = UInt(width * height * 4) - var data_size = CGSize(width: CGFloat(width), height: CGFloat(height)) + var dim = parseSVGDimensions(text) + let data = NSCSVGData() + data.resize(CGFloat(dim.width), CGFloat(dim.height)) - guard let buf = data?.assumingMemoryBound(to: UInt8.self) else { - DispatchQueue.main.async { - callback(nil) - } + + guard let buf = data.rawData?.assumingMemoryBound(to: UInt8.self) else { + emitEvent(current, nilEvent) return } - CanvasSVGHelper.draw(fromString: buf, size: buf_size, width: Float(data_size.width), height: Float(data_size.height), svg: text as String) + CanvasSVGHelper.draw(fromString: buf, size: data.buf_size, width: Float(data.data_size.width), height: Float(data.data_size.height), svg: text as String) + - DispatchQueue.main.async { - var view = NSCSVG() - view.frame = CGRect(x: 0, y: 0, width: dim.width, height: dim.height) - view.data = data - view.data_size = data_size - view.buf_size = buf_size - callback(view) + let event = Timer(timeInterval: 0, repeats: false) { _ in + callback(data) } + emitEvent(current, event) + }catch{ - DispatchQueue.main.async { - callback(nil) - } + emitEvent(current, nilEvent) } } } @@ -458,55 +509,59 @@ public class NSCSVG: UIView { for match in matchesAttributes { let attributePair = (svgAttributes as NSString).substring(with: match.range) - let parts = attributePair.components(separatedBy: "=").map { $0.trimmingCharacters(in: .whitespaces) } + let split = attributePair.components(separatedBy: " ").map { $0.trimmingCharacters(in: .whitespaces) } - if parts.count == 2 { - let attributeName = parts[0] - var attributeValue = parts[1].replacingOccurrences(of: "\"", with: "") - - let stringLiteralPattern = try! NSRegularExpression(pattern: "\\\\\"(\\d*\\.?\\d+)\\\\\"") - let stringLiteralMatches = stringLiteralPattern.matches(in: attributeValue, options: [], range: NSRange(location: 0, length: attributeValue.utf16.count)) - - if let stringLiteralMatch = stringLiteralMatches.first { - attributeValue = (attributeValue as NSString).substring(with: stringLiteralMatch.range(at: 1)) - } + for part in split { + let parts = part.components(separatedBy: "=").map { $0.trimmingCharacters(in: .whitespaces) } - if attributeName == "width" { - width = (attributeValue as NSString).doubleValue - widthDefined = true - } else if attributeName == "height" { - height = (attributeValue as NSString).doubleValue - heightDefined = true - } else if attributeName == "viewBox" { - let viewBoxValues = attributeValue.components(separatedBy: .whitespaces) - for i in 0.. #include +#if defined(TARGET_OS_IOS) +void canvas_native_svg_draw_from_bytes(uint8_t *data, + uintptr_t size, + float width, + float height, + float scale, + const uint8_t *svg_data, + uintptr_t svg_size); +#endif + #if defined(TARGET_OS_IOS) void canvas_native_svg_draw_from_string(uint8_t *data, uintptr_t size, diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/CanvasSVG b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/CanvasSVG index eab27238b..e5c25ae2e 100755 Binary files a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/CanvasSVG and b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/CanvasSVG differ diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/CanvasSVG-Swift.h b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/CanvasSVG-Swift.h index b57eff964..76e6c002e 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/CanvasSVG-Swift.h +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/CanvasSVG-Swift.h @@ -278,6 +278,7 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); #pragma clang diagnostic ignored "-Watimport-in-framework-header" #endif @import CoreFoundation; +@import ObjectiveC; @import UIKit; #endif @@ -303,12 +304,10 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); @class NSCoder; @class UIImage; @class NSData; +@class NSCSVGData; SWIFT_CLASS_NAMED("NSCSVG") @interface NSCSVG : UIView -@property (nonatomic, readonly) void * _Nullable data; -@property (nonatomic, readonly) CGSize data_size; -@property (nonatomic, readonly) NSUInteger buf_size; @property (nonatomic) BOOL autoScale; @property (nonatomic, copy) NSString * _Nullable src; @property (nonatomic, copy) NSString * _Nullable srcPath; @@ -319,12 +318,24 @@ SWIFT_CLASS_NAMED("NSCSVG") - (void)drawRect:(CGRect)rect; - (UIImage * _Nullable)toImage SWIFT_WARN_UNUSED_RESULT; - (NSData * _Nullable)toData SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; ++ (NSCSVGData * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; +@end + +@class NSMutableData; + +SWIFT_CLASS_NAMED("NSCSVGData") +@interface NSCSVGData : NSObject +@property (nonatomic, readonly) CGFloat width; +@property (nonatomic, readonly) CGFloat height; +@property (nonatomic, readonly) void * _Nullable rawData; +@property (nonatomic, readonly, strong) NSMutableData * _Nullable data; +- (UIImage * _Nullable)getImage SWIFT_WARN_UNUSED_RESULT; +- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; @end #endif diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/canvas_svg.h b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/canvas_svg.h index 716ac6f05..daf7068dd 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/canvas_svg.h +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Headers/canvas_svg.h @@ -8,6 +8,16 @@ #include #include +#if defined(TARGET_OS_IOS) +void canvas_native_svg_draw_from_bytes(uint8_t *data, + uintptr_t size, + float width, + float height, + float scale, + const uint8_t *svg_data, + uintptr_t svg_size); +#endif + #if defined(TARGET_OS_IOS) void canvas_native_svg_draw_from_string(uint8_t *data, uintptr_t size, diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo index 1dd78e9a5..a91d81631 100644 Binary files a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo and b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo differ diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.abi.json b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.abi.json index 685da180d..d687042ca 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.abi.json +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.abi.json @@ -21,13 +21,91 @@ }, { "kind": "TypeDecl", - "name": "NSCSVG", - "printedName": "NSCSVG", + "name": "NSCSVGData", + "printedName": "NSCSVGData", "children": [ { "kind": "Var", - "name": "data", - "printedName": "data", + "name": "width", + "printedName": "width", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "height", + "printedName": "height", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "rawData", + "printedName": "rawData", "children": [ { "kind": "TypeNominal", @@ -45,11 +123,10 @@ } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -72,10 +149,9 @@ } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } @@ -83,22 +159,29 @@ }, { "kind": "Var", - "name": "data_size", - "printedName": "data_size", + "name": "data", + "printedName": "data", "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -107,62 +190,144 @@ "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } ] }, { - "kind": "Var", - "name": "buf_size", - "printedName": "buf_size", + "kind": "Function", + "name": "getImage", + "printedName": "getImage()", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" - } - ], - "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvp", - "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, - "accessors": [ - { - "kind": "Accessor", - "name": "Get", - "printedName": "Get()", + "name": "Optional", + "printedName": "UIKit.UIImage?", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" + "name": "UIImage", + "printedName": "UIKit.UIImage", + "usr": "c:objc(cs)UIImage" } ], - "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvg", - "moduleName": "CanvasSVG", - "implicit": true, - "declAttributes": ["ObjC"], - "accessorKind": "get" + "usr": "s:Sq" } - ] + ], + "declKind": "Func", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)getImage", + "mangledName": "$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" }, + { + "kind": "Constructor", + "name": "init", + "printedName": "init()", + "children": [ + { + "kind": "TypeNominal", + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" + } + ], + "declKind": "Constructor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)init", + "mangledName": "$s9CanvasSVG10NSCSVGDataCACycfc", + "moduleName": "CanvasSVG", + "overriding": true, + "implicit": true, + "objc_name": "init", + "declAttributes": ["Dynamic", "ObjC", "Override"], + "init_kind": "Designated" + } + ], + "declKind": "Class", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC", + "moduleName": "CanvasSVG", + "objc_name": "NSCSVGData", + "declAttributes": ["AccessControl", "ObjC", "ObjCMembers"], + "superclassUsr": "c:objc(cs)NSObject", + "inheritsConvenienceInitializers": true, + "superclassNames": ["ObjectiveC.NSObject"], + "conformances": [ + { + "kind": "Conformance", + "name": "Equatable", + "printedName": "Equatable", + "usr": "s:SQ", + "mangledName": "$sSQ" + }, + { + "kind": "Conformance", + "name": "Hashable", + "printedName": "Hashable", + "usr": "s:SH", + "mangledName": "$sSH" + }, + { + "kind": "Conformance", + "name": "CVarArg", + "printedName": "CVarArg", + "usr": "s:s7CVarArgP", + "mangledName": "$ss7CVarArgP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObservingPublishing", + "printedName": "_KeyValueCodingAndObservingPublishing", + "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP", + "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObserving", + "printedName": "_KeyValueCodingAndObserving", + "usr": "s:10Foundation27_KeyValueCodingAndObservingP", + "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP" + }, + { + "kind": "Conformance", + "name": "CustomStringConvertible", + "printedName": "CustomStringConvertible", + "usr": "s:s23CustomStringConvertibleP", + "mangledName": "$ss23CustomStringConvertibleP" + }, + { + "kind": "Conformance", + "name": "CustomDebugStringConvertible", + "printedName": "CustomDebugStringConvertible", + "usr": "s:s28CustomDebugStringConvertibleP", + "mangledName": "$ss28CustomDebugStringConvertibleP" + } + ] + }, + { + "kind": "TypeDecl", + "name": "NSCSVG", + "printedName": "NSCSVG", + "children": [ { "kind": "Var", "name": "autoScale", @@ -616,13 +781,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -636,7 +801,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromStringSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -650,13 +815,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -670,7 +835,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPathSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -684,13 +849,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -704,7 +869,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemoteSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -729,7 +894,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -739,13 +904,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -755,7 +920,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromString::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -780,7 +945,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -790,13 +955,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -806,7 +971,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPath::", - "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -831,7 +996,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -841,13 +1006,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -857,7 +1022,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemote::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -947,42 +1112,42 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "IntegerLiteral", - "offset": 341, + "offset": 291, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 368, + "offset": 2331, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 396, + "offset": 2359, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 417, + "offset": 2380, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 500, + "offset": 2495, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 450, + "offset": 2445, "length": 4, "value": "true" } diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.private.swiftinterface b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.private.swiftinterface index 8cc75d11c..e69ed9cb9 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.private.swiftinterface +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.private.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftinterface b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftinterface index 8cc75d11c..e69ed9cb9 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftinterface +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG index 13f286008..9c608b061 100644 Binary files a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG and b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG differ diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml index 786c8684e..1a23e4726 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml @@ -2,221 +2,258 @@ triple: 'arm64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/CanvasSVG' relocations: - - { offsetInCU: 0x34, offset: 0xA80B8, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x544000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0xA80ED, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x544030, symSize: 0x0 } + - { offsetInCU: 0x34, offset: 0xA80B8, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x4C3000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xA80ED, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x4C3030, symSize: 0x0 } - { offsetInCU: 0x27, offset: 0xA812A, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x4000, symSize: 0xB4 } - { offsetInCU: 0x66, offset: 0xA8169, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x4000, symSize: 0xB4 } - { offsetInCU: 0x15B, offset: 0xA825E, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xB4, symBinAddr: 0x40B4, symSize: 0xB4 } - - { offsetInCU: 0x65, offset: 0xA83BD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x4168, symSize: 0x44 } - - { offsetInCU: 0xBD, offset: 0xA8415, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvsTo', symObjAddr: 0x88, symBinAddr: 0x41F0, symSize: 0x48 } - - { offsetInCU: 0x118, offset: 0xA8470, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x12C, symBinAddr: 0x4294, symSize: 0x44 } - - { offsetInCU: 0x170, offset: 0xA84C8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x1B4, symBinAddr: 0x431C, symSize: 0x54 } - - { offsetInCU: 0x1CD, offset: 0xA8525, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvgTo', symObjAddr: 0x2B0, symBinAddr: 0x4418, symSize: 0x44 } - - { offsetInCU: 0x225, offset: 0xA857D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvsTo', symObjAddr: 0x338, symBinAddr: 0x44A0, symSize: 0x48 } - - { offsetInCU: 0x280, offset: 0xA85D8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x424, symBinAddr: 0x458C, symSize: 0x10 } - - { offsetInCU: 0x2A0, offset: 0xA85F8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x424, symBinAddr: 0x458C, symSize: 0x10 } - - { offsetInCU: 0x2D6, offset: 0xA862E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x434, symBinAddr: 0x459C, symSize: 0x10 } - - { offsetInCU: 0x2F6, offset: 0xA864E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x434, symBinAddr: 0x459C, symSize: 0x10 } - - { offsetInCU: 0x32F, offset: 0xA8687, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x444, symBinAddr: 0x45AC, symSize: 0x10 } - - { offsetInCU: 0x34F, offset: 0xA86A7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x444, symBinAddr: 0x45AC, symSize: 0x10 } - - { offsetInCU: 0x385, offset: 0xA86DD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x454, symBinAddr: 0x45BC, symSize: 0x10 } - - { offsetInCU: 0x3A5, offset: 0xA86FD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x454, symBinAddr: 0x45BC, symSize: 0x10 } - - { offsetInCU: 0x3DE, offset: 0xA8736, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x464, symBinAddr: 0x45CC, symSize: 0x10 } - - { offsetInCU: 0x3FE, offset: 0xA8756, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x464, symBinAddr: 0x45CC, symSize: 0x10 } - - { offsetInCU: 0x434, offset: 0xA878C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x474, symBinAddr: 0x45DC, symSize: 0x10 } - - { offsetInCU: 0x454, offset: 0xA87AC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x474, symBinAddr: 0x45DC, symSize: 0x10 } - - { offsetInCU: 0x48D, offset: 0xA87E5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x484, symBinAddr: 0x45EC, symSize: 0x44 } - - { offsetInCU: 0x4FB, offset: 0xA8853, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x50C, symBinAddr: 0x4674, symSize: 0x64 } - - { offsetInCU: 0x5EF, offset: 0xA8947, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScaleSfyFTo', symObjAddr: 0xADC, symBinAddr: 0x4C44, symSize: 0xB8 } - - { offsetInCU: 0x6E0, offset: 0xA8A38, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x150C, symBinAddr: 0x5674, symSize: 0x28 } - - { offsetInCU: 0x712, offset: 0xA8A6A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x17D4, symBinAddr: 0x593C, symSize: 0x28 } - - { offsetInCU: 0x744, offset: 0xA8A9C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1800, symBinAddr: 0x5964, symSize: 0x28 } - - { offsetInCU: 0x78C, offset: 0xA8AE4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1828, symBinAddr: 0x598C, symSize: 0x10 } - - { offsetInCU: 0x7AC, offset: 0xA8B04, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1828, symBinAddr: 0x598C, symSize: 0x10 } - - { offsetInCU: 0x800, offset: 0xA8B58, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1C28, symBinAddr: 0x5D8C, symSize: 0x20 } - - { offsetInCU: 0x837, offset: 0xA8B8F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x1ED0, symBinAddr: 0x6034, symSize: 0x28 } - - { offsetInCU: 0x889, offset: 0xA8BE1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x20DC, symBinAddr: 0x6224, symSize: 0x80 } - - { offsetInCU: 0x8FC, offset: 0xA8C54, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x2304, symBinAddr: 0x644C, symSize: 0x34 } - - { offsetInCU: 0x92E, offset: 0xA8C86, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x23C8, symBinAddr: 0x6510, symSize: 0x34 } - - { offsetInCU: 0xA5C, offset: 0xA8DB4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x4840, symBinAddr: 0x8988, symSize: 0x13F4 } - - { offsetInCU: 0x1743, offset: 0xA9A9B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZTf4nd_n', symObjAddr: 0x5C34, symBinAddr: 0x9D7C, symSize: 0x238 } - - { offsetInCU: 0x1961, offset: 0xA9CB9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZTf4nd_n', symObjAddr: 0x5E6C, symBinAddr: 0x9FB4, symSize: 0x2F0 } - - { offsetInCU: 0x1BAF, offset: 0xA9F07, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZTf4nd_n', symObjAddr: 0x615C, symBinAddr: 0xA2A4, symSize: 0x3A4 } - - { offsetInCU: 0x1E26, offset: 0xAA17E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvpACTK', symObjAddr: 0xD0, symBinAddr: 0x4238, symSize: 0x50 } - - { offsetInCU: 0x1E5E, offset: 0xAA1B6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTK', symObjAddr: 0x208, symBinAddr: 0x4370, symSize: 0x50 } - - { offsetInCU: 0x1E96, offset: 0xAA1EE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTk', symObjAddr: 0x258, symBinAddr: 0x43C0, symSize: 0x58 } - - { offsetInCU: 0x1ED8, offset: 0xAA230, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvpACTK', symObjAddr: 0x380, symBinAddr: 0x44E8, symSize: 0x50 } - - { offsetInCU: 0x1F10, offset: 0xAA268, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x5D0, symBinAddr: 0x4738, symSize: 0x50 } - - { offsetInCU: 0x1F48, offset: 0xAA2A0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x620, symBinAddr: 0x4788, symSize: 0x64 } - - { offsetInCU: 0x2003, offset: 0xAA35B, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x1B88, symBinAddr: 0x5CEC, symSize: 0x40 } - - { offsetInCU: 0x2017, offset: 0xAA36F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x1C08, symBinAddr: 0x5D6C, symSize: 0x20 } - - { offsetInCU: 0x203B, offset: 0xAA393, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x439C, symBinAddr: 0x84E4, symSize: 0x70 } - - { offsetInCU: 0x208F, offset: 0xAA3E7, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSS_Tgm5', symObjAddr: 0x44F4, symBinAddr: 0x863C, symSize: 0x80 } - - { offsetInCU: 0x24F9, offset: 0xAA851, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x652C, symBinAddr: 0xA674, symSize: 0xC } - - { offsetInCU: 0x250D, offset: 0xAA865, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x6538, symBinAddr: 0xA680, symSize: 0x10 } - - { offsetInCU: 0x2521, offset: 0xAA879, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x6548, symBinAddr: 0xA690, symSize: 0x8 } - - { offsetInCU: 0x2535, offset: 0xAA88D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x65E0, symBinAddr: 0xA728, symSize: 0xC } - - { offsetInCU: 0x2549, offset: 0xAA8A1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x661C, symBinAddr: 0xA764, symSize: 0xC } - - { offsetInCU: 0x255D, offset: 0xAA8B5, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x67EC, symBinAddr: 0xA934, symSize: 0xC } - - { offsetInCU: 0x2571, offset: 0xAA8C9, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x67F8, symBinAddr: 0xA940, symSize: 0x4 } - - { offsetInCU: 0x2585, offset: 0xAA8DD, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x67FC, symBinAddr: 0xA944, symSize: 0x20 } - - { offsetInCU: 0x2599, offset: 0xAA8F1, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x681C, symBinAddr: 0xA964, symSize: 0x28 } - - { offsetInCU: 0x25B8, offset: 0xAA910, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x68C0, symBinAddr: 0xAA08, symSize: 0x10 } - - { offsetInCU: 0x25E1, offset: 0xAA939, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x68D0, symBinAddr: 0xAA18, symSize: 0x40 } - - { offsetInCU: 0x25F5, offset: 0xAA94D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x694C, symBinAddr: 0xAA94, symSize: 0x24 } - - { offsetInCU: 0x2629, offset: 0xAA981, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x69A8, symBinAddr: 0xAAF0, symSize: 0x44 } - - { offsetInCU: 0x263D, offset: 0xAA995, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_yyScMYccfU_Tf2niiin_nTA', symObjAddr: 0x6B68, symBinAddr: 0xACB0, symSize: 0x108 } - - { offsetInCU: 0x2750, offset: 0xAAAA8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x6C94, symBinAddr: 0xADDC, symSize: 0x8 } - - { offsetInCU: 0x2CF9, offset: 0xAB051, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvg', symObjAddr: 0x44, symBinAddr: 0x41AC, symSize: 0x44 } - - { offsetInCU: 0x2D81, offset: 0xAB0D9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg', symObjAddr: 0x170, symBinAddr: 0x42D8, symSize: 0x44 } - - { offsetInCU: 0x2DD9, offset: 0xAB131, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvg', symObjAddr: 0x2F4, symBinAddr: 0x445C, symSize: 0x44 } - - { offsetInCU: 0x2ED2, offset: 0xAB22A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x4C8, symBinAddr: 0x4630, symSize: 0x44 } - - { offsetInCU: 0x2F25, offset: 0xAB27D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x570, symBinAddr: 0x46D8, symSize: 0x60 } - - { offsetInCU: 0x2F95, offset: 0xAB2ED, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0x684, symBinAddr: 0x47EC, symSize: 0x48 } - - { offsetInCU: 0x2FBA, offset: 0xAB312, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0x6CC, symBinAddr: 0x4834, symSize: 0x3C } - - { offsetInCU: 0x3016, offset: 0xAB36E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0x750, symBinAddr: 0x48B8, symSize: 0x48 } - - { offsetInCU: 0x303B, offset: 0xAB393, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xA60, symBinAddr: 0x4BC8, symSize: 0x48 } - - { offsetInCU: 0x31D8, offset: 0xAB530, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xB94, symBinAddr: 0x4CFC, symSize: 0x46C } - - { offsetInCU: 0x34EC, offset: 0xAB844, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x1000, symBinAddr: 0x5168, symSize: 0x508 } - - { offsetInCU: 0x3750, offset: 0xABAA8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1534, symBinAddr: 0x569C, symSize: 0x2A0 } - - { offsetInCU: 0x3AEF, offset: 0xABE47, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1838, symBinAddr: 0x599C, symSize: 0x50 } - - { offsetInCU: 0x3B03, offset: 0xABE5B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1888, symBinAddr: 0x59EC, symSize: 0x300 } - - { offsetInCU: 0x3B7F, offset: 0xABED7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1C48, symBinAddr: 0x5DAC, symSize: 0x288 } - - { offsetInCU: 0x3C2E, offset: 0xABF86, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9drawImage33_C2B5A81EA80ED94FA09E8C035710AE36LLyySo6CGRectVF', symObjAddr: 0x1EF8, symBinAddr: 0x605C, symSize: 0x1C8 } - - { offsetInCU: 0x3E34, offset: 0xAC18C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x215C, symBinAddr: 0x62A4, symSize: 0x1A8 } - - { offsetInCU: 0x4010, offset: 0xAC368, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2338, symBinAddr: 0x6480, symSize: 0x90 } - - { offsetInCU: 0x40BF, offset: 0xAC417, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ', symObjAddr: 0x23FC, symBinAddr: 0x6544, symSize: 0x4 } - - { offsetInCU: 0x40D3, offset: 0xAC42B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ', symObjAddr: 0x240C, symBinAddr: 0x6554, symSize: 0x4 } - - { offsetInCU: 0x40E7, offset: 0xAC43F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ', symObjAddr: 0x241C, symBinAddr: 0x6564, symSize: 0x4 } - - { offsetInCU: 0x4107, offset: 0xAC45F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ', symObjAddr: 0x2468, symBinAddr: 0x65B0, symSize: 0x27C } - - { offsetInCU: 0x4172, offset: 0xAC4CA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x26E4, symBinAddr: 0x682C, symSize: 0x400 } - - { offsetInCU: 0x4463, offset: 0xAC7BB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x2B4C, symBinAddr: 0x6C94, symSize: 0x84C } - - { offsetInCU: 0x45C3, offset: 0xAC91B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x36EC, symBinAddr: 0x7834, symSize: 0xC64 } - - { offsetInCU: 0x478A, offset: 0xACAE2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfD', symObjAddr: 0x436C, symBinAddr: 0x84B4, symSize: 0x30 } - - { offsetInCU: 0x47AD, offset: 0xACB05, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x440C, symBinAddr: 0x8554, symSize: 0xE8 } - - { offsetInCU: 0x47E9, offset: 0xACB41, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x4574, symBinAddr: 0x86BC, symSize: 0x1F4 } - - { offsetInCU: 0x4846, offset: 0xACB9E, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x4768, symBinAddr: 0x88B0, symSize: 0x1C } - - { offsetInCU: 0x487D, offset: 0xACBD5, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x4784, symBinAddr: 0x88CC, symSize: 0xBC } - - { offsetInCU: 0x26, offset: 0xACF12, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x95D00, symSize: 0x26E4 } - - { offsetInCU: 0x40, offset: 0xACF2C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9A58, symBinAddr: 0x57C1D8, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0xACF7E, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFA58, symBinAddr: 0x5821D8, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0xACFE2, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFA80, symBinAddr: 0x582200, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0xACFF8, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0xFE88, symBinAddr: 0x582608, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0xAD00F, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFAC8, symBinAddr: 0x582248, symSize: 0x0 } - - { offsetInCU: 0xE22, offset: 0xADD0E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x95D00, symSize: 0x26E4 } - - { offsetInCU: 0x4BAD, offset: 0xB1A99, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x95DC, symBinAddr: 0x9F2DC, symSize: 0x210 } - - { offsetInCU: 0x4E0E, offset: 0xB1CFA, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E90, symBinAddr: 0x9AB90, symSize: 0x1B8 } - - { offsetInCU: 0x5399, offset: 0xB2285, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0x983E4, symSize: 0x5A8 } - - { offsetInCU: 0x5EE1, offset: 0xB2DCD, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0x9898C, symSize: 0x6C4 } - - { offsetInCU: 0x62A7, offset: 0xB3193, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3350, symBinAddr: 0x99050, symSize: 0x1F0 } - - { offsetInCU: 0x67BC, offset: 0xB36A8, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x3540, symBinAddr: 0x99240, symSize: 0x7C4 } - - { offsetInCU: 0x75BF, offset: 0xB44AB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3D04, symBinAddr: 0x99A04, symSize: 0x614 } - - { offsetInCU: 0x7F4E, offset: 0xB4E3A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4318, symBinAddr: 0x9A018, symSize: 0xB78 } - - { offsetInCU: 0x9487, offset: 0xB6373, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x513C, symBinAddr: 0x9AE3C, symSize: 0x23CC } - - { offsetInCU: 0xC9EC, offset: 0xB98D8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5048, symBinAddr: 0x9AD48, symSize: 0xF4 } - - { offsetInCU: 0xCBE7, offset: 0xB9AD3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7508, symBinAddr: 0x9D208, symSize: 0x30 } - - { offsetInCU: 0xCCD8, offset: 0xB9BC4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x7538, symBinAddr: 0x9D238, symSize: 0x58 } - - { offsetInCU: 0xCD4D, offset: 0xB9C39, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x9D290, symSize: 0x4 } - - { offsetInCU: 0xCD95, offset: 0xB9C81, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x9D290, symSize: 0x4 } - - { offsetInCU: 0xCDC4, offset: 0xB9CB0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x9D290, symSize: 0x4 } - - { offsetInCU: 0xCDE8, offset: 0xB9CD4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7594, symBinAddr: 0x9D294, symSize: 0x8C } - - { offsetInCU: 0xCF3B, offset: 0xB9E27, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0x9D320, symSize: 0x4 } - - { offsetInCU: 0xCF74, offset: 0xB9E60, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0x9D320, symSize: 0x4 } - - { offsetInCU: 0xD20D, offset: 0xBA0F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x7624, symBinAddr: 0x9D324, symSize: 0x1400 } - - { offsetInCU: 0xF96D, offset: 0xBC859, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x97EC, symBinAddr: 0x9F4EC, symSize: 0x200 } - - { offsetInCU: 0xFED4, offset: 0xBCDC0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8A24, symBinAddr: 0x9E724, symSize: 0x20 } - - { offsetInCU: 0x10371, offset: 0xBD25D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8A44, symBinAddr: 0x9E744, symSize: 0xB98 } - - { offsetInCU: 0x26, offset: 0xBE000, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x9F6EC, symSize: 0x1E0 } - - { offsetInCU: 0x1D2, offset: 0xBE1AC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x9F6EC, symSize: 0x1E0 } - - { offsetInCU: 0x26, offset: 0xBE447, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x9F8CC, symSize: 0x3C } - - { offsetInCU: 0x34, offset: 0xBE455, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x9F8CC, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xBE565, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x9F908, symSize: 0x90 } - - { offsetInCU: 0x34, offset: 0xBE573, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x9F908, symSize: 0x90 } - - { offsetInCU: 0x86, offset: 0xBE6D6, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0x5826D0, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0xBE708, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0x582660, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0xBE72A, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0x582690, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0xBE740, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0x5826C0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0xBEA07, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x9F998, symSize: 0x18 } - - { offsetInCU: 0x3FB, offset: 0xBEA4B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x9F998, symSize: 0x18 } - - { offsetInCU: 0x594, offset: 0xBEBE4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x9F9B0, symSize: 0x18 } - - { offsetInCU: 0x63F, offset: 0xBEC8F, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x9F9C8, symSize: 0x300 } - - { offsetInCU: 0x10E8, offset: 0xBF738, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0x9FCC8, symSize: 0xAC } - - { offsetInCU: 0x13DE, offset: 0xBFA2E, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0x9FD74, symSize: 0x4D0 } - - { offsetInCU: 0x24F2, offset: 0xC0B42, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0xA0244, symSize: 0x28C } - - { offsetInCU: 0x2B67, offset: 0xC11B7, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0xA04D0, symSize: 0xF4 } - - { offsetInCU: 0x2D72, offset: 0xC13C2, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0xA05C4, symSize: 0x168 } - - { offsetInCU: 0x26, offset: 0xC171F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA072C, symSize: 0x38 } - - { offsetInCU: 0xFA, offset: 0xC17F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA072C, symSize: 0x38 } - - { offsetInCU: 0x12C, offset: 0xC1825, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA072C, symSize: 0x38 } - - { offsetInCU: 0x199, offset: 0xC1892, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xA0764, symSize: 0x3C } - - { offsetInCU: 0x1F3, offset: 0xC18EC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xA0764, symSize: 0x3C } - - { offsetInCU: 0x31B, offset: 0xC1A14, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0xA07A0, symSize: 0x5C } - - { offsetInCU: 0x517, offset: 0xC1C10, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0xA07FC, symSize: 0x1C } - - { offsetInCU: 0x636, offset: 0xC1D2F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0xA0818, symSize: 0x54 } - - { offsetInCU: 0x6D0, offset: 0xC1DC9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0xA086C, symSize: 0x4C } - - { offsetInCU: 0x8A8, offset: 0xC1FA1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xA08B8, symSize: 0xA8 } - - { offsetInCU: 0x90C, offset: 0xC2005, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xA08B8, symSize: 0xA8 } - - { offsetInCU: 0xBA6, offset: 0xC229F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0xA0960, symSize: 0x124 } - - { offsetInCU: 0xEC3, offset: 0xC25BC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xA0A84, symSize: 0xC8 } - - { offsetInCU: 0xF43, offset: 0xC263C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xA0A84, symSize: 0xC8 } - - { offsetInCU: 0x10B0, offset: 0xC27A9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0xA0B4C, symSize: 0x160 } - - { offsetInCU: 0x134C, offset: 0xC2A45, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x580, symBinAddr: 0xA0CAC, symSize: 0x150 } - - { offsetInCU: 0x14BB, offset: 0xC2BB4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x6D0, symBinAddr: 0xA0DFC, symSize: 0x18 } - - { offsetInCU: 0x1522, offset: 0xC2C1B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x6E8, symBinAddr: 0xA0E14, symSize: 0xC } - - { offsetInCU: 0x155B, offset: 0xC2C54, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x6F4, symBinAddr: 0xA0E20, symSize: 0x8 } - - { offsetInCU: 0x15DF, offset: 0xC2CD8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x6FC, symBinAddr: 0xA0E28, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xC2E85, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xA0E64, symSize: 0x120 } - - { offsetInCU: 0x34, offset: 0xC2E93, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xA0E64, symSize: 0x120 } - - { offsetInCU: 0x34, offset: 0xC2F99, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x364, symBinAddr: 0xC2B570, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xC2FDB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xA0F84, symSize: 0x35C } - - { offsetInCU: 0x76, offset: 0xC302B, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x583000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xC30AF, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x5A8000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xC3310, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xA0F84, symSize: 0x35C } - - { offsetInCU: 0xC70, offset: 0xC3C25, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0xA12E0, symSize: 0x1FC } - - { offsetInCU: 0x116D, offset: 0xC4122, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0xA14DC, symSize: 0x1B8 } - - { offsetInCU: 0x10, offset: 0xC44F7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xA16A0, symSize: 0x1A0 } - - { offsetInCU: 0x50, offset: 0xC4537, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xA16A0, symSize: 0x1A0 } - - { offsetInCU: 0x5E, offset: 0xC4545, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0xA1840, symSize: 0x60 } - - { offsetInCU: 0x81, offset: 0xC4568, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0xA18A0, symSize: 0x288 } - - { offsetInCU: 0x10, offset: 0xC4559, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xA1B30, symSize: 0x130 } - - { offsetInCU: 0x48, offset: 0xC4591, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xA1B30, symSize: 0x130 } - - { offsetInCU: 0x5F, offset: 0xC45A8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0xA1C60, symSize: 0x70 } - - { offsetInCU: 0x75, offset: 0xC45BE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0xA1CD0, symSize: 0x160 } - - { offsetInCU: 0x7A, offset: 0xC45C3, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0xA1E30, symSize: 0x378 } - - { offsetInCU: 0x10, offset: 0xC45D1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xA21C0, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xC4609, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xA21C0, symSize: 0x3A0 } - - { offsetInCU: 0x4C, offset: 0xC460D, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0xA2560, symSize: 0x6C0 } - - { offsetInCU: 0x66, offset: 0xC4627, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0xA2C20, symSize: 0x1138 } - - { offsetInCU: 0x50, offset: 0xC4673, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0xA3EC0, symSize: 0x1180 } - - { offsetInCU: 0x66, offset: 0xC4689, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0xA5040, symSize: 0x1410 } - - { offsetInCU: 0x10, offset: 0xC467F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA6460, symSize: 0x240 } - - { offsetInCU: 0x45, offset: 0xC46B4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA6460, symSize: 0x240 } - - { offsetInCU: 0x4D, offset: 0xC46BC, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0xA66A0, symSize: 0x9E0 } - - { offsetInCU: 0x63, offset: 0xC46D2, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0xA7080, symSize: 0x650 } - - { offsetInCU: 0x10, offset: 0xC46E1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA76E0, symSize: 0x40 } - - { offsetInCU: 0x47, offset: 0xC4718, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA76E0, symSize: 0x40 } - - { offsetInCU: 0x5D, offset: 0xC472E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0xA7720, symSize: 0x40 } - - { offsetInCU: 0x76, offset: 0xC4747, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0xA7760, symSize: 0x40 } - - { offsetInCU: 0x81, offset: 0xC4752, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0xA77A0, symSize: 0x1E0 } - - { offsetInCU: 0x97, offset: 0xC4768, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0xA7980, symSize: 0x170 } - - { offsetInCU: 0xAB, offset: 0xC477C, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0xA7AF0, symSize: 0x50 } - - { offsetInCU: 0xC3, offset: 0xC4794, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0xA7B40, symSize: 0x50 } - - { offsetInCU: 0xD9, offset: 0xC47AA, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0xA7B90, symSize: 0x50 } - - { offsetInCU: 0xEF, offset: 0xC47C0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0xA7BE0, symSize: 0x60 } - - { offsetInCU: 0x111, offset: 0xC47E2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0xA7C40, symSize: 0x1E0 } - - { offsetInCU: 0x124, offset: 0xC47F5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0xA7E20, symSize: 0x360 } - - { offsetInCU: 0x141, offset: 0xC4812, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0xA8180, symSize: 0x2D0 } - - { offsetInCU: 0x156, offset: 0xC4827, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0xA8450, symSize: 0x2B0 } - - { offsetInCU: 0x170, offset: 0xC4841, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0xA8700, symSize: 0x250 } - - { offsetInCU: 0x184, offset: 0xC4855, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0xA8950, symSize: 0x60 } - - { offsetInCU: 0x19A, offset: 0xC486B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0xA89B0, symSize: 0x44 } - - { offsetInCU: 0x10, offset: 0xC4861, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xA8A00, symSize: 0xB90 } - - { offsetInCU: 0x4C, offset: 0xC489D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xA8A00, symSize: 0xB90 } - - { offsetInCU: 0x62, offset: 0xC48B3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0xA9590, symSize: 0xB98 } - - { offsetInCU: 0x10, offset: 0xC48AD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAA140, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC48EE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAA140, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC48EE, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xAAF80, symSize: 0x7E0 } - - { offsetInCU: 0x10, offset: 0xC48F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAB780, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC493A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAB780, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC493A, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xAC5C0, symSize: 0x1F0 } + - { offsetInCU: 0x65, offset: 0xA83BD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x4168, symSize: 0x10 } + - { offsetInCU: 0x85, offset: 0xA83DD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x4168, symSize: 0x10 } + - { offsetInCU: 0xBB, offset: 0xA8413, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x10, symBinAddr: 0x4178, symSize: 0x10 } + - { offsetInCU: 0xDB, offset: 0xA8433, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x10, symBinAddr: 0x4178, symSize: 0x10 } + - { offsetInCU: 0x114, offset: 0xA846C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x20, symBinAddr: 0x4188, symSize: 0x14 } + - { offsetInCU: 0x134, offset: 0xA848C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x20, symBinAddr: 0x4188, symSize: 0x14 } + - { offsetInCU: 0x16A, offset: 0xA84C2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x34, symBinAddr: 0x419C, symSize: 0x14 } + - { offsetInCU: 0x18A, offset: 0xA84E2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x34, symBinAddr: 0x419C, symSize: 0x14 } + - { offsetInCU: 0x1C5, offset: 0xA851D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x48, symBinAddr: 0x41B0, symSize: 0x10 } + - { offsetInCU: 0x1E5, offset: 0xA853D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x48, symBinAddr: 0x41B0, symSize: 0x10 } + - { offsetInCU: 0x21B, offset: 0xA8573, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0x58, symBinAddr: 0x41C0, symSize: 0x10 } + - { offsetInCU: 0x23B, offset: 0xA8593, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0x58, symBinAddr: 0x41C0, symSize: 0x10 } + - { offsetInCU: 0x274, offset: 0xA85CC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0x68, symBinAddr: 0x41D0, symSize: 0x10 } + - { offsetInCU: 0x294, offset: 0xA85EC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0x68, symBinAddr: 0x41D0, symSize: 0x10 } + - { offsetInCU: 0x2CC, offset: 0xA8624, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvsTo', symObjAddr: 0x78, symBinAddr: 0x41E0, symSize: 0x34 } + - { offsetInCU: 0x325, offset: 0xA867D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0xAC, symBinAddr: 0x4214, symSize: 0x10 } + - { offsetInCU: 0x345, offset: 0xA869D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0xAC, symBinAddr: 0x4214, symSize: 0x10 } + - { offsetInCU: 0x378, offset: 0xA86D0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0xBC, symBinAddr: 0x4224, symSize: 0x10 } + - { offsetInCU: 0x398, offset: 0xA86F0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0xBC, symBinAddr: 0x4224, symSize: 0x10 } + - { offsetInCU: 0x3D0, offset: 0xA8728, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvsTo', symObjAddr: 0xCC, symBinAddr: 0x4234, symSize: 0x34 } + - { offsetInCU: 0x433, offset: 0xA878B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x278, symBinAddr: 0x43E0, symSize: 0x40 } + - { offsetInCU: 0x465, offset: 0xA87BD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4420, symSize: 0x10 } + - { offsetInCU: 0x485, offset: 0xA87DD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4420, symSize: 0x10 } + - { offsetInCU: 0x4A2, offset: 0xA87FA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4420, symSize: 0x10 } + - { offsetInCU: 0x4D4, offset: 0xA882C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4440, symSize: 0x14 } + - { offsetInCU: 0x4F4, offset: 0xA884C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4440, symSize: 0x14 } + - { offsetInCU: 0x511, offset: 0xA8869, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4440, symSize: 0x14 } + - { offsetInCU: 0x543, offset: 0xA889B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x4468, symSize: 0x10 } + - { offsetInCU: 0x563, offset: 0xA88BB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x4468, symSize: 0x10 } + - { offsetInCU: 0x580, offset: 0xA88D8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x4468, symSize: 0x10 } + - { offsetInCU: 0x59C, offset: 0xA88F4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgTo', symObjAddr: 0x320, symBinAddr: 0x4488, symSize: 0x34 } + - { offsetInCU: 0x5E4, offset: 0xA893C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyFTo', symObjAddr: 0x610, symBinAddr: 0x4778, symSize: 0x34 } + - { offsetInCU: 0x62C, offset: 0xA8984, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfcTo', symObjAddr: 0x708, symBinAddr: 0x4870, symSize: 0x20 } + - { offsetInCU: 0x659, offset: 0xA89B1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCfETo', symObjAddr: 0x734, symBinAddr: 0x489C, symSize: 0x48 } + - { offsetInCU: 0x6AA, offset: 0xA8A02, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x77C, symBinAddr: 0x48E4, symSize: 0x10 } + - { offsetInCU: 0x6CA, offset: 0xA8A22, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x77C, symBinAddr: 0x48E4, symSize: 0x10 } + - { offsetInCU: 0x700, offset: 0xA8A58, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x78C, symBinAddr: 0x48F4, symSize: 0x10 } + - { offsetInCU: 0x720, offset: 0xA8A78, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x78C, symBinAddr: 0x48F4, symSize: 0x10 } + - { offsetInCU: 0x759, offset: 0xA8AB1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x79C, symBinAddr: 0x4904, symSize: 0x10 } + - { offsetInCU: 0x779, offset: 0xA8AD1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x79C, symBinAddr: 0x4904, symSize: 0x10 } + - { offsetInCU: 0x7AF, offset: 0xA8B07, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x7AC, symBinAddr: 0x4914, symSize: 0x10 } + - { offsetInCU: 0x7CF, offset: 0xA8B27, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x7AC, symBinAddr: 0x4914, symSize: 0x10 } + - { offsetInCU: 0x808, offset: 0xA8B60, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x7BC, symBinAddr: 0x4924, symSize: 0x10 } + - { offsetInCU: 0x828, offset: 0xA8B80, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x7BC, symBinAddr: 0x4924, symSize: 0x10 } + - { offsetInCU: 0x85E, offset: 0xA8BB6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x7CC, symBinAddr: 0x4934, symSize: 0x10 } + - { offsetInCU: 0x87E, offset: 0xA8BD6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x7CC, symBinAddr: 0x4934, symSize: 0x10 } + - { offsetInCU: 0x8B7, offset: 0xA8C0F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x7DC, symBinAddr: 0x4944, symSize: 0x10 } + - { offsetInCU: 0x8D7, offset: 0xA8C2F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x7DC, symBinAddr: 0x4944, symSize: 0x10 } + - { offsetInCU: 0x90F, offset: 0xA8C67, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvsTo', symObjAddr: 0x7EC, symBinAddr: 0x4954, symSize: 0x34 } + - { offsetInCU: 0x968, offset: 0xA8CC0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x820, symBinAddr: 0x4988, symSize: 0x44 } + - { offsetInCU: 0x9D6, offset: 0xA8D2E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x8A8, symBinAddr: 0x4A10, symSize: 0x64 } + - { offsetInCU: 0xACA, offset: 0xA8E22, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScale12CoreGraphics7CGFloatVyFTo', symObjAddr: 0xE78, symBinAddr: 0x4FE0, symSize: 0xB8 } + - { offsetInCU: 0xBA6, offset: 0xA8EFE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x193C, symBinAddr: 0x5AA4, symSize: 0x28 } + - { offsetInCU: 0xBD8, offset: 0xA8F30, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x1AD0, symBinAddr: 0x5C38, symSize: 0x28 } + - { offsetInCU: 0xC0A, offset: 0xA8F62, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1AFC, symBinAddr: 0x5C60, symSize: 0x28 } + - { offsetInCU: 0xC52, offset: 0xA8FAA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1B24, symBinAddr: 0x5C88, symSize: 0x10 } + - { offsetInCU: 0xC72, offset: 0xA8FCA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1B24, symBinAddr: 0x5C88, symSize: 0x10 } + - { offsetInCU: 0xCC6, offset: 0xA901E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1E68, symBinAddr: 0x5FCC, symSize: 0x20 } + - { offsetInCU: 0xCFD, offset: 0xA9055, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x20F4, symBinAddr: 0x6258, symSize: 0x28 } + - { offsetInCU: 0xD4F, offset: 0xA90A7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x2258, symBinAddr: 0x63BC, symSize: 0x58 } + - { offsetInCU: 0xD81, offset: 0xA90D9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x2310, symBinAddr: 0x6474, symSize: 0x34 } + - { offsetInCU: 0xDB4, offset: 0xA910C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x2388, symBinAddr: 0x64EC, symSize: 0x60 } + - { offsetInCU: 0xE79, offset: 0xA91D1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9emitEventyySo9NSRunLoopC_So7NSTimerCtFZTo', symObjAddr: 0x2454, symBinAddr: 0x65B8, symSize: 0x24 } + - { offsetInCU: 0xF6D, offset: 0xA92C5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x3668, symBinAddr: 0x77CC, symSize: 0x14F0 } + - { offsetInCU: 0x1EB7, offset: 0xAA20F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4B58, symBinAddr: 0x8CBC, symSize: 0x114 } + - { offsetInCU: 0x2047, offset: 0xAA39F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4C6C, symBinAddr: 0x8DD0, symSize: 0x1E0 } + - { offsetInCU: 0x21F7, offset: 0xAA54F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4E4C, symBinAddr: 0x8FB0, symSize: 0x298 } + - { offsetInCU: 0x23DA, offset: 0xAA732, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x96C, symBinAddr: 0x4AD4, symSize: 0x50 } + - { offsetInCU: 0x2412, offset: 0xAA76A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x9BC, symBinAddr: 0x4B24, symSize: 0x64 } + - { offsetInCU: 0x24A8, offset: 0xAA800, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x2728, symBinAddr: 0x688C, symSize: 0x4C } + - { offsetInCU: 0x24C0, offset: 0xAA818, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x3090, symBinAddr: 0x71F4, symSize: 0x80 } + - { offsetInCU: 0x24EF, offset: 0xAA847, size: 0x8, addend: 0x0, symName: '_$sSvSiIegyy_SvSiIeyByy_TR', symObjAddr: 0x3110, symBinAddr: 0x7274, symSize: 0x48 } + - { offsetInCU: 0x252C, offset: 0xAA884, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSS_Tgm5', symObjAddr: 0x3240, symBinAddr: 0x73A4, symSize: 0x80 } + - { offsetInCU: 0x2670, offset: 0xAA9C8, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x3590, symBinAddr: 0x76F4, symSize: 0x10 } + - { offsetInCU: 0x2684, offset: 0xAA9DC, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x35A0, symBinAddr: 0x7704, symSize: 0x8 } + - { offsetInCU: 0x2698, offset: 0xAA9F0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCMa', symObjAddr: 0x35A8, symBinAddr: 0x770C, symSize: 0x20 } + - { offsetInCU: 0x26AC, offset: 0xAAA04, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x35C8, symBinAddr: 0x772C, symSize: 0x40 } + - { offsetInCU: 0x26C0, offset: 0xAAA18, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x3648, symBinAddr: 0x77AC, symSize: 0x20 } + - { offsetInCU: 0x2A15, offset: 0xAAD6D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5118, symBinAddr: 0x927C, symSize: 0x304 } + - { offsetInCU: 0x2C11, offset: 0xAAF69, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x54AC, symBinAddr: 0x9610, symSize: 0x3DC } + - { offsetInCU: 0x2E32, offset: 0xAB18A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x58C0, symBinAddr: 0x9A24, symSize: 0x10 } + - { offsetInCU: 0x2E46, offset: 0xAB19E, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x5AD8, symBinAddr: 0x9C3C, symSize: 0xC } + - { offsetInCU: 0x2E5A, offset: 0xAB1B2, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x5AE4, symBinAddr: 0x9C48, symSize: 0x4 } + - { offsetInCU: 0x2E6E, offset: 0xAB1C6, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x5AE8, symBinAddr: 0x9C4C, symSize: 0x20 } + - { offsetInCU: 0x2E82, offset: 0xAB1DA, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x5B08, symBinAddr: 0x9C6C, symSize: 0x28 } + - { offsetInCU: 0x2EA1, offset: 0xAB1F9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x5BAC, symBinAddr: 0x9D10, symSize: 0x10 } + - { offsetInCU: 0x2ECA, offset: 0xAB222, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU_TA', symObjAddr: 0x5BE0, symBinAddr: 0x9D44, symSize: 0x24 } + - { offsetInCU: 0x2EFE, offset: 0xAB256, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x5C04, symBinAddr: 0x9D68, symSize: 0x40 } + - { offsetInCU: 0x2F12, offset: 0xAB26A, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x5C84, symBinAddr: 0x9DE8, symSize: 0x44 } + - { offsetInCU: 0x2F26, offset: 0xAB27E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU0_Tf2nni_nTA', symObjAddr: 0x5D28, symBinAddr: 0x9E8C, symSize: 0x28 } + - { offsetInCU: 0x2F63, offset: 0xAB2BB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x5D74, symBinAddr: 0x9ED8, symSize: 0x8 } + - { offsetInCU: 0x3777, offset: 0xABACF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x100, symBinAddr: 0x4268, symSize: 0x178 } + - { offsetInCU: 0x3993, offset: 0xABCEB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x2C8, symBinAddr: 0x4430, symSize: 0x10 } + - { offsetInCU: 0x39B3, offset: 0xABD0B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x2C8, symBinAddr: 0x4430, symSize: 0x10 } + - { offsetInCU: 0x39E2, offset: 0xABD3A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x2EC, symBinAddr: 0x4454, symSize: 0x14 } + - { offsetInCU: 0x3A02, offset: 0xABD5A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x2EC, symBinAddr: 0x4454, symSize: 0x14 } + - { offsetInCU: 0x3A31, offset: 0xABD89, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x310, symBinAddr: 0x4478, symSize: 0x10 } + - { offsetInCU: 0x3A51, offset: 0xABDA9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x310, symBinAddr: 0x4478, symSize: 0x10 } + - { offsetInCU: 0x3A87, offset: 0xABDDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg', symObjAddr: 0x354, symBinAddr: 0x44BC, symSize: 0x124 } + - { offsetInCU: 0x3B9C, offset: 0xABEF4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgySv_SitcfU_Tf4nnd_n', symObjAddr: 0x358C, symBinAddr: 0x76F0, symSize: 0x4 } + - { offsetInCU: 0x3BD0, offset: 0xABF28, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF', symObjAddr: 0x478, symBinAddr: 0x45E0, symSize: 0x198 } + - { offsetInCU: 0x3DFA, offset: 0xAC152, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfC', symObjAddr: 0x644, symBinAddr: 0x47AC, symSize: 0x20 } + - { offsetInCU: 0x3E0E, offset: 0xAC166, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfc', symObjAddr: 0x664, symBinAddr: 0x47CC, symSize: 0xA4 } + - { offsetInCU: 0x3F26, offset: 0xAC27E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x864, symBinAddr: 0x49CC, symSize: 0x44 } + - { offsetInCU: 0x3F79, offset: 0xAC2D1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x90C, symBinAddr: 0x4A74, symSize: 0x60 } + - { offsetInCU: 0x3FE9, offset: 0xAC341, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0xA20, symBinAddr: 0x4B88, symSize: 0x48 } + - { offsetInCU: 0x400E, offset: 0xAC366, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0xA68, symBinAddr: 0x4BD0, symSize: 0x3C } + - { offsetInCU: 0x406A, offset: 0xAC3C2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0xAEC, symBinAddr: 0x4C54, symSize: 0x48 } + - { offsetInCU: 0x408F, offset: 0xAC3E7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xDFC, symBinAddr: 0x4F64, symSize: 0x48 } + - { offsetInCU: 0x422C, offset: 0xAC584, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xF30, symBinAddr: 0x5098, symSize: 0x444 } + - { offsetInCU: 0x45A2, offset: 0xAC8FA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x1374, symBinAddr: 0x54DC, symSize: 0x5C4 } + - { offsetInCU: 0x4887, offset: 0xACBDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1964, symBinAddr: 0x5ACC, symSize: 0x16C } + - { offsetInCU: 0x4A13, offset: 0xACD6B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1B34, symBinAddr: 0x5C98, symSize: 0x50 } + - { offsetInCU: 0x4A27, offset: 0xACD7F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1B84, symBinAddr: 0x5CE8, symSize: 0x2E4 } + - { offsetInCU: 0x4AA3, offset: 0xACDFB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1E88, symBinAddr: 0x5FEC, symSize: 0x26C } + - { offsetInCU: 0x4B63, offset: 0xACEBB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVF', symObjAddr: 0x211C, symBinAddr: 0x6280, symSize: 0x13C } + - { offsetInCU: 0x4CF9, offset: 0xAD051, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x22B0, symBinAddr: 0x6414, symSize: 0x60 } + - { offsetInCU: 0x4D5A, offset: 0xAD0B2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2344, symBinAddr: 0x64A8, symSize: 0x44 } + - { offsetInCU: 0x4DAD, offset: 0xAD105, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23E8, symBinAddr: 0x654C, symSize: 0x4 } + - { offsetInCU: 0x4DC1, offset: 0xAD119, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23F8, symBinAddr: 0x655C, symSize: 0x4 } + - { offsetInCU: 0x4DD5, offset: 0xAD12D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x2408, symBinAddr: 0x656C, symSize: 0x4 } + - { offsetInCU: 0x4E33, offset: 0xAD18B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ', symObjAddr: 0x2478, symBinAddr: 0x65DC, symSize: 0x2B0 } + - { offsetInCU: 0x4FAA, offset: 0xAD302, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_', symObjAddr: 0x2B68, symBinAddr: 0x6CCC, symSize: 0x4D0 } + - { offsetInCU: 0x5173, offset: 0xAD4CB, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x3158, symBinAddr: 0x72BC, symSize: 0xE8 } + - { offsetInCU: 0x51AF, offset: 0xAD507, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x32C0, symBinAddr: 0x7424, symSize: 0x1F4 } + - { offsetInCU: 0x520C, offset: 0xAD564, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x34B4, symBinAddr: 0x7618, symSize: 0x1C } + - { offsetInCU: 0x5243, offset: 0xAD59B, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x34D0, symBinAddr: 0x7634, symSize: 0xBC } + - { offsetInCU: 0x26, offset: 0xAD935, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xAD114, symSize: 0x26E4 } + - { offsetInCU: 0x40, offset: 0xAD94F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9A58, symBinAddr: 0x4FF188, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0xAD9A1, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFA58, symBinAddr: 0x505188, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0xADA05, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFA80, symBinAddr: 0x5051B0, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0xADA1B, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0xFE88, symBinAddr: 0x5055B8, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0xADA32, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFAC8, symBinAddr: 0x5051F8, symSize: 0x0 } + - { offsetInCU: 0xE22, offset: 0xAE731, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xAD114, symSize: 0x26E4 } + - { offsetInCU: 0x4BAD, offset: 0xB24BC, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x95DC, symBinAddr: 0xB66F0, symSize: 0x210 } + - { offsetInCU: 0x4E0E, offset: 0xB271D, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E90, symBinAddr: 0xB1FA4, symSize: 0x1B8 } + - { offsetInCU: 0x5399, offset: 0xB2CA8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0xAF7F8, symSize: 0x5A8 } + - { offsetInCU: 0x5EE1, offset: 0xB37F0, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0xAFDA0, symSize: 0x6C4 } + - { offsetInCU: 0x62A7, offset: 0xB3BB6, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3350, symBinAddr: 0xB0464, symSize: 0x1F0 } + - { offsetInCU: 0x67BC, offset: 0xB40CB, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x3540, symBinAddr: 0xB0654, symSize: 0x7C4 } + - { offsetInCU: 0x75BF, offset: 0xB4ECE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3D04, symBinAddr: 0xB0E18, symSize: 0x614 } + - { offsetInCU: 0x7F4E, offset: 0xB585D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4318, symBinAddr: 0xB142C, symSize: 0xB78 } + - { offsetInCU: 0x9487, offset: 0xB6D96, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x513C, symBinAddr: 0xB2250, symSize: 0x23CC } + - { offsetInCU: 0xC9EC, offset: 0xBA2FB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5048, symBinAddr: 0xB215C, symSize: 0xF4 } + - { offsetInCU: 0xCBE7, offset: 0xBA4F6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7508, symBinAddr: 0xB461C, symSize: 0x30 } + - { offsetInCU: 0xCCD8, offset: 0xBA5E7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x7538, symBinAddr: 0xB464C, symSize: 0x58 } + - { offsetInCU: 0xCD4D, offset: 0xBA65C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0xB46A4, symSize: 0x4 } + - { offsetInCU: 0xCD95, offset: 0xBA6A4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0xB46A4, symSize: 0x4 } + - { offsetInCU: 0xCDC4, offset: 0xBA6D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0xB46A4, symSize: 0x4 } + - { offsetInCU: 0xCDE8, offset: 0xBA6F7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7594, symBinAddr: 0xB46A8, symSize: 0x8C } + - { offsetInCU: 0xCF3B, offset: 0xBA84A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0xB4734, symSize: 0x4 } + - { offsetInCU: 0xCF74, offset: 0xBA883, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0xB4734, symSize: 0x4 } + - { offsetInCU: 0xD20D, offset: 0xBAB1C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x7624, symBinAddr: 0xB4738, symSize: 0x1400 } + - { offsetInCU: 0xF96D, offset: 0xBD27C, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x97EC, symBinAddr: 0xB6900, symSize: 0x200 } + - { offsetInCU: 0xFED4, offset: 0xBD7E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8A24, symBinAddr: 0xB5B38, symSize: 0x20 } + - { offsetInCU: 0x10371, offset: 0xBDC80, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8A44, symBinAddr: 0xB5B58, symSize: 0xB98 } + - { offsetInCU: 0x26, offset: 0xBEA23, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xB6B00, symSize: 0x1E0 } + - { offsetInCU: 0x1D2, offset: 0xBEBCF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xB6B00, symSize: 0x1E0 } + - { offsetInCU: 0x26, offset: 0xBEE6A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xB6CE0, symSize: 0x3C } + - { offsetInCU: 0x34, offset: 0xBEE78, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xB6CE0, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xBEF88, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xB6D1C, symSize: 0x90 } + - { offsetInCU: 0x34, offset: 0xBEF96, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xB6D1C, symSize: 0x90 } + - { offsetInCU: 0x86, offset: 0xBF0F9, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0x505680, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0xBF12B, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0x505610, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0xBF14D, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0x505640, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0xBF163, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0x505670, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0xBF42A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xB6DAC, symSize: 0x18 } + - { offsetInCU: 0x3FB, offset: 0xBF46E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xB6DAC, symSize: 0x18 } + - { offsetInCU: 0x594, offset: 0xBF607, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0xB6DC4, symSize: 0x18 } + - { offsetInCU: 0x63F, offset: 0xBF6B2, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0xB6DDC, symSize: 0x300 } + - { offsetInCU: 0x10E8, offset: 0xC015B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0xB70DC, symSize: 0xAC } + - { offsetInCU: 0x13DE, offset: 0xC0451, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0xB7188, symSize: 0x4D0 } + - { offsetInCU: 0x24F2, offset: 0xC1565, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0xB7658, symSize: 0x28C } + - { offsetInCU: 0x2B67, offset: 0xC1BDA, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0xB78E4, symSize: 0xF4 } + - { offsetInCU: 0x2D72, offset: 0xC1DE5, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0xB79D8, symSize: 0x168 } + - { offsetInCU: 0x26, offset: 0xC2142, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB7B40, symSize: 0x38 } + - { offsetInCU: 0xFA, offset: 0xC2216, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB7B40, symSize: 0x38 } + - { offsetInCU: 0x12C, offset: 0xC2248, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB7B40, symSize: 0x38 } + - { offsetInCU: 0x199, offset: 0xC22B5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xB7B78, symSize: 0x3C } + - { offsetInCU: 0x1F3, offset: 0xC230F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xB7B78, symSize: 0x3C } + - { offsetInCU: 0x31B, offset: 0xC2437, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0xB7BB4, symSize: 0x5C } + - { offsetInCU: 0x517, offset: 0xC2633, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0xB7C10, symSize: 0x1C } + - { offsetInCU: 0x636, offset: 0xC2752, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0xB7C2C, symSize: 0x54 } + - { offsetInCU: 0x6D0, offset: 0xC27EC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0xB7C80, symSize: 0x4C } + - { offsetInCU: 0x8A8, offset: 0xC29C4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xB7CCC, symSize: 0xA8 } + - { offsetInCU: 0x90C, offset: 0xC2A28, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xB7CCC, symSize: 0xA8 } + - { offsetInCU: 0xBA6, offset: 0xC2CC2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0xB7D74, symSize: 0x124 } + - { offsetInCU: 0xEC3, offset: 0xC2FDF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xB7E98, symSize: 0xC8 } + - { offsetInCU: 0xF43, offset: 0xC305F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xB7E98, symSize: 0xC8 } + - { offsetInCU: 0x10B0, offset: 0xC31CC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0xB7F60, symSize: 0x160 } + - { offsetInCU: 0x134C, offset: 0xC3468, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x580, symBinAddr: 0xB80C0, symSize: 0x150 } + - { offsetInCU: 0x14BB, offset: 0xC35D7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x6D0, symBinAddr: 0xB8210, symSize: 0x18 } + - { offsetInCU: 0x1522, offset: 0xC363E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x6E8, symBinAddr: 0xB8228, symSize: 0xC } + - { offsetInCU: 0x155B, offset: 0xC3677, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x6F4, symBinAddr: 0xB8234, symSize: 0x8 } + - { offsetInCU: 0x15DF, offset: 0xC36FB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x6FC, symBinAddr: 0xB823C, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xC38A8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xB8278, symSize: 0x120 } + - { offsetInCU: 0x34, offset: 0xC38B6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xB8278, symSize: 0x120 } + - { offsetInCU: 0x34, offset: 0xC39BC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x364, symBinAddr: 0xB7B980, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xC39FE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xB8398, symSize: 0x35C } + - { offsetInCU: 0x76, offset: 0xC3A4E, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x506000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xC3AD2, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x52B000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xC3D33, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xB8398, symSize: 0x35C } + - { offsetInCU: 0xC70, offset: 0xC4648, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0xB86F4, symSize: 0x1FC } + - { offsetInCU: 0x116D, offset: 0xC4B45, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0xB88F0, symSize: 0x1B8 } + - { offsetInCU: 0x10, offset: 0xC4F1A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xB8AC0, symSize: 0x1A0 } + - { offsetInCU: 0x50, offset: 0xC4F5A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xB8AC0, symSize: 0x1A0 } + - { offsetInCU: 0x5E, offset: 0xC4F68, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0xB8C60, symSize: 0x60 } + - { offsetInCU: 0x81, offset: 0xC4F8B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0xB8CC0, symSize: 0x288 } + - { offsetInCU: 0x10, offset: 0xC4F7C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xB8F50, symSize: 0x130 } + - { offsetInCU: 0x48, offset: 0xC4FB4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xB8F50, symSize: 0x130 } + - { offsetInCU: 0x5F, offset: 0xC4FCB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0xB9080, symSize: 0x70 } + - { offsetInCU: 0x75, offset: 0xC4FE1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0xB90F0, symSize: 0x160 } + - { offsetInCU: 0x7A, offset: 0xC4FE6, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0xB9250, symSize: 0x378 } + - { offsetInCU: 0x10, offset: 0xC4FF4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xB95E0, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xC502C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xB95E0, symSize: 0x3A0 } + - { offsetInCU: 0x4C, offset: 0xC5030, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0xB9980, symSize: 0x6C0 } + - { offsetInCU: 0x66, offset: 0xC504A, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0xBA040, symSize: 0x1138 } + - { offsetInCU: 0x50, offset: 0xC5096, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0xBB2C0, symSize: 0x1180 } + - { offsetInCU: 0x66, offset: 0xC50AC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0xBC440, symSize: 0x1410 } + - { offsetInCU: 0x10, offset: 0xC50A2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBD860, symSize: 0x240 } + - { offsetInCU: 0x45, offset: 0xC50D7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBD860, symSize: 0x240 } + - { offsetInCU: 0x4D, offset: 0xC50DF, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0xBDAA0, symSize: 0x9E0 } + - { offsetInCU: 0x63, offset: 0xC50F5, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0xBE480, symSize: 0x650 } + - { offsetInCU: 0x10, offset: 0xC5104, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBEAE0, symSize: 0x40 } + - { offsetInCU: 0x47, offset: 0xC513B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBEAE0, symSize: 0x40 } + - { offsetInCU: 0x5D, offset: 0xC5151, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0xBEB20, symSize: 0x40 } + - { offsetInCU: 0x76, offset: 0xC516A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0xBEB60, symSize: 0x40 } + - { offsetInCU: 0x81, offset: 0xC5175, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0xBEBA0, symSize: 0x1E0 } + - { offsetInCU: 0x97, offset: 0xC518B, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0xBED80, symSize: 0x170 } + - { offsetInCU: 0xAB, offset: 0xC519F, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0xBEEF0, symSize: 0x50 } + - { offsetInCU: 0xC3, offset: 0xC51B7, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0xBEF40, symSize: 0x50 } + - { offsetInCU: 0xD9, offset: 0xC51CD, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0xBEF90, symSize: 0x50 } + - { offsetInCU: 0xEF, offset: 0xC51E3, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0xBEFE0, symSize: 0x60 } + - { offsetInCU: 0x111, offset: 0xC5205, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0xBF040, symSize: 0x1E0 } + - { offsetInCU: 0x124, offset: 0xC5218, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0xBF220, symSize: 0x360 } + - { offsetInCU: 0x141, offset: 0xC5235, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0xBF580, symSize: 0x2D0 } + - { offsetInCU: 0x156, offset: 0xC524A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0xBF850, symSize: 0x2B0 } + - { offsetInCU: 0x170, offset: 0xC5264, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0xBFB00, symSize: 0x250 } + - { offsetInCU: 0x184, offset: 0xC5278, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0xBFD50, symSize: 0x60 } + - { offsetInCU: 0x19A, offset: 0xC528E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0xBFDB0, symSize: 0x44 } + - { offsetInCU: 0x10, offset: 0xC5284, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xBFE00, symSize: 0xB90 } + - { offsetInCU: 0x4C, offset: 0xC52C0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xBFE00, symSize: 0xB90 } + - { offsetInCU: 0x62, offset: 0xC52D6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0xC0990, symSize: 0xB98 } + - { offsetInCU: 0x10, offset: 0xC52D0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC1540, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5311, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC1540, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5311, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xC2380, symSize: 0x7E0 } + - { offsetInCU: 0x10, offset: 0xC531C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC2B80, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC535D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC2B80, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC535D, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xC39C0, symSize: 0x1F0 } ... diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/CanvasSVG b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/CanvasSVG index f22b00918..5858316e0 100755 Binary files a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/CanvasSVG and b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/CanvasSVG differ diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/CanvasSVG-Swift.h b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/CanvasSVG-Swift.h index d25817e77..7b83b2b47 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/CanvasSVG-Swift.h +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/CanvasSVG-Swift.h @@ -278,6 +278,7 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); #pragma clang diagnostic ignored "-Watimport-in-framework-header" #endif @import CoreFoundation; +@import ObjectiveC; @import UIKit; #endif @@ -303,12 +304,10 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); @class NSCoder; @class UIImage; @class NSData; +@class NSCSVGData; SWIFT_CLASS_NAMED("NSCSVG") @interface NSCSVG : UIView -@property (nonatomic, readonly) void * _Nullable data; -@property (nonatomic, readonly) CGSize data_size; -@property (nonatomic, readonly) NSUInteger buf_size; @property (nonatomic) BOOL autoScale; @property (nonatomic, copy) NSString * _Nullable src; @property (nonatomic, copy) NSString * _Nullable srcPath; @@ -319,12 +318,24 @@ SWIFT_CLASS_NAMED("NSCSVG") - (void)drawRect:(CGRect)rect; - (UIImage * _Nullable)toImage SWIFT_WARN_UNUSED_RESULT; - (NSData * _Nullable)toData SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; ++ (NSCSVGData * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; +@end + +@class NSMutableData; + +SWIFT_CLASS_NAMED("NSCSVGData") +@interface NSCSVGData : NSObject +@property (nonatomic, readonly) CGFloat width; +@property (nonatomic, readonly) CGFloat height; +@property (nonatomic, readonly) void * _Nullable rawData; +@property (nonatomic, readonly, strong) NSMutableData * _Nullable data; +- (UIImage * _Nullable)getImage SWIFT_WARN_UNUSED_RESULT; +- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; @end #endif @@ -615,6 +626,7 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); #pragma clang diagnostic ignored "-Watimport-in-framework-header" #endif @import CoreFoundation; +@import ObjectiveC; @import UIKit; #endif @@ -640,12 +652,10 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); @class NSCoder; @class UIImage; @class NSData; +@class NSCSVGData; SWIFT_CLASS_NAMED("NSCSVG") @interface NSCSVG : UIView -@property (nonatomic, readonly) void * _Nullable data; -@property (nonatomic, readonly) CGSize data_size; -@property (nonatomic, readonly) NSUInteger buf_size; @property (nonatomic) BOOL autoScale; @property (nonatomic, copy) NSString * _Nullable src; @property (nonatomic, copy) NSString * _Nullable srcPath; @@ -656,12 +666,24 @@ SWIFT_CLASS_NAMED("NSCSVG") - (void)drawRect:(CGRect)rect; - (UIImage * _Nullable)toImage SWIFT_WARN_UNUSED_RESULT; - (NSData * _Nullable)toData SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; ++ (NSCSVGData * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; +@end + +@class NSMutableData; + +SWIFT_CLASS_NAMED("NSCSVGData") +@interface NSCSVGData : NSObject +@property (nonatomic, readonly) CGFloat width; +@property (nonatomic, readonly) CGFloat height; +@property (nonatomic, readonly) void * _Nullable rawData; +@property (nonatomic, readonly, strong) NSMutableData * _Nullable data; +- (UIImage * _Nullable)getImage SWIFT_WARN_UNUSED_RESULT; +- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; @end #endif diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/canvas_svg.h b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/canvas_svg.h index 716ac6f05..daf7068dd 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/canvas_svg.h +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Headers/canvas_svg.h @@ -8,6 +8,16 @@ #include #include +#if defined(TARGET_OS_IOS) +void canvas_native_svg_draw_from_bytes(uint8_t *data, + uintptr_t size, + float width, + float height, + float scale, + const uint8_t *svg_data, + uintptr_t svg_size); +#endif + #if defined(TARGET_OS_IOS) void canvas_native_svg_draw_from_string(uint8_t *data, uintptr_t size, diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo index 933fe5ad7..116be86ed 100644 Binary files a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo and b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo differ diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo index ddcf60a67..7297fd30a 100644 Binary files a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo and b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo differ diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json index 685da180d..d687042ca 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json @@ -21,13 +21,91 @@ }, { "kind": "TypeDecl", - "name": "NSCSVG", - "printedName": "NSCSVG", + "name": "NSCSVGData", + "printedName": "NSCSVGData", "children": [ { "kind": "Var", - "name": "data", - "printedName": "data", + "name": "width", + "printedName": "width", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "height", + "printedName": "height", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "rawData", + "printedName": "rawData", "children": [ { "kind": "TypeNominal", @@ -45,11 +123,10 @@ } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -72,10 +149,9 @@ } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } @@ -83,22 +159,29 @@ }, { "kind": "Var", - "name": "data_size", - "printedName": "data_size", + "name": "data", + "printedName": "data", "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -107,62 +190,144 @@ "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } ] }, { - "kind": "Var", - "name": "buf_size", - "printedName": "buf_size", + "kind": "Function", + "name": "getImage", + "printedName": "getImage()", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" - } - ], - "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvp", - "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, - "accessors": [ - { - "kind": "Accessor", - "name": "Get", - "printedName": "Get()", + "name": "Optional", + "printedName": "UIKit.UIImage?", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" + "name": "UIImage", + "printedName": "UIKit.UIImage", + "usr": "c:objc(cs)UIImage" } ], - "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvg", - "moduleName": "CanvasSVG", - "implicit": true, - "declAttributes": ["ObjC"], - "accessorKind": "get" + "usr": "s:Sq" } - ] + ], + "declKind": "Func", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)getImage", + "mangledName": "$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" }, + { + "kind": "Constructor", + "name": "init", + "printedName": "init()", + "children": [ + { + "kind": "TypeNominal", + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" + } + ], + "declKind": "Constructor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)init", + "mangledName": "$s9CanvasSVG10NSCSVGDataCACycfc", + "moduleName": "CanvasSVG", + "overriding": true, + "implicit": true, + "objc_name": "init", + "declAttributes": ["Dynamic", "ObjC", "Override"], + "init_kind": "Designated" + } + ], + "declKind": "Class", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC", + "moduleName": "CanvasSVG", + "objc_name": "NSCSVGData", + "declAttributes": ["AccessControl", "ObjC", "ObjCMembers"], + "superclassUsr": "c:objc(cs)NSObject", + "inheritsConvenienceInitializers": true, + "superclassNames": ["ObjectiveC.NSObject"], + "conformances": [ + { + "kind": "Conformance", + "name": "Equatable", + "printedName": "Equatable", + "usr": "s:SQ", + "mangledName": "$sSQ" + }, + { + "kind": "Conformance", + "name": "Hashable", + "printedName": "Hashable", + "usr": "s:SH", + "mangledName": "$sSH" + }, + { + "kind": "Conformance", + "name": "CVarArg", + "printedName": "CVarArg", + "usr": "s:s7CVarArgP", + "mangledName": "$ss7CVarArgP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObservingPublishing", + "printedName": "_KeyValueCodingAndObservingPublishing", + "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP", + "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObserving", + "printedName": "_KeyValueCodingAndObserving", + "usr": "s:10Foundation27_KeyValueCodingAndObservingP", + "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP" + }, + { + "kind": "Conformance", + "name": "CustomStringConvertible", + "printedName": "CustomStringConvertible", + "usr": "s:s23CustomStringConvertibleP", + "mangledName": "$ss23CustomStringConvertibleP" + }, + { + "kind": "Conformance", + "name": "CustomDebugStringConvertible", + "printedName": "CustomDebugStringConvertible", + "usr": "s:s28CustomDebugStringConvertibleP", + "mangledName": "$ss28CustomDebugStringConvertibleP" + } + ] + }, + { + "kind": "TypeDecl", + "name": "NSCSVG", + "printedName": "NSCSVG", + "children": [ { "kind": "Var", "name": "autoScale", @@ -616,13 +781,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -636,7 +801,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromStringSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -650,13 +815,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -670,7 +835,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPathSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -684,13 +849,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -704,7 +869,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemoteSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -729,7 +894,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -739,13 +904,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -755,7 +920,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromString::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -780,7 +945,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -790,13 +955,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -806,7 +971,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPath::", - "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -831,7 +996,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -841,13 +1006,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -857,7 +1022,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemote::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -947,42 +1112,42 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "IntegerLiteral", - "offset": 341, + "offset": 291, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 368, + "offset": 2331, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 396, + "offset": 2359, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 417, + "offset": 2380, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 500, + "offset": 2495, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 450, + "offset": 2445, "length": 4, "value": "true" } diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface index 9e6f991aa..2577727e7 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface index 9e6f991aa..2577727e7 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json index 685da180d..d687042ca 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json @@ -21,13 +21,91 @@ }, { "kind": "TypeDecl", - "name": "NSCSVG", - "printedName": "NSCSVG", + "name": "NSCSVGData", + "printedName": "NSCSVGData", "children": [ { "kind": "Var", - "name": "data", - "printedName": "data", + "name": "width", + "printedName": "width", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "height", + "printedName": "height", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "rawData", + "printedName": "rawData", "children": [ { "kind": "TypeNominal", @@ -45,11 +123,10 @@ } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -72,10 +149,9 @@ } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } @@ -83,22 +159,29 @@ }, { "kind": "Var", - "name": "data_size", - "printedName": "data_size", + "name": "data", + "printedName": "data", "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -107,62 +190,144 @@ "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } ] }, { - "kind": "Var", - "name": "buf_size", - "printedName": "buf_size", + "kind": "Function", + "name": "getImage", + "printedName": "getImage()", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" - } - ], - "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvp", - "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, - "accessors": [ - { - "kind": "Accessor", - "name": "Get", - "printedName": "Get()", + "name": "Optional", + "printedName": "UIKit.UIImage?", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" + "name": "UIImage", + "printedName": "UIKit.UIImage", + "usr": "c:objc(cs)UIImage" } ], - "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvg", - "moduleName": "CanvasSVG", - "implicit": true, - "declAttributes": ["ObjC"], - "accessorKind": "get" + "usr": "s:Sq" } - ] + ], + "declKind": "Func", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)getImage", + "mangledName": "$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" }, + { + "kind": "Constructor", + "name": "init", + "printedName": "init()", + "children": [ + { + "kind": "TypeNominal", + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" + } + ], + "declKind": "Constructor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)init", + "mangledName": "$s9CanvasSVG10NSCSVGDataCACycfc", + "moduleName": "CanvasSVG", + "overriding": true, + "implicit": true, + "objc_name": "init", + "declAttributes": ["Dynamic", "ObjC", "Override"], + "init_kind": "Designated" + } + ], + "declKind": "Class", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC", + "moduleName": "CanvasSVG", + "objc_name": "NSCSVGData", + "declAttributes": ["AccessControl", "ObjC", "ObjCMembers"], + "superclassUsr": "c:objc(cs)NSObject", + "inheritsConvenienceInitializers": true, + "superclassNames": ["ObjectiveC.NSObject"], + "conformances": [ + { + "kind": "Conformance", + "name": "Equatable", + "printedName": "Equatable", + "usr": "s:SQ", + "mangledName": "$sSQ" + }, + { + "kind": "Conformance", + "name": "Hashable", + "printedName": "Hashable", + "usr": "s:SH", + "mangledName": "$sSH" + }, + { + "kind": "Conformance", + "name": "CVarArg", + "printedName": "CVarArg", + "usr": "s:s7CVarArgP", + "mangledName": "$ss7CVarArgP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObservingPublishing", + "printedName": "_KeyValueCodingAndObservingPublishing", + "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP", + "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObserving", + "printedName": "_KeyValueCodingAndObserving", + "usr": "s:10Foundation27_KeyValueCodingAndObservingP", + "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP" + }, + { + "kind": "Conformance", + "name": "CustomStringConvertible", + "printedName": "CustomStringConvertible", + "usr": "s:s23CustomStringConvertibleP", + "mangledName": "$ss23CustomStringConvertibleP" + }, + { + "kind": "Conformance", + "name": "CustomDebugStringConvertible", + "printedName": "CustomDebugStringConvertible", + "usr": "s:s28CustomDebugStringConvertibleP", + "mangledName": "$ss28CustomDebugStringConvertibleP" + } + ] + }, + { + "kind": "TypeDecl", + "name": "NSCSVG", + "printedName": "NSCSVG", + "children": [ { "kind": "Var", "name": "autoScale", @@ -616,13 +781,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -636,7 +801,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromStringSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -650,13 +815,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -670,7 +835,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPathSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -684,13 +849,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -704,7 +869,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemoteSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -729,7 +894,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -739,13 +904,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -755,7 +920,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromString::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -780,7 +945,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -790,13 +955,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -806,7 +971,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPath::", - "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -831,7 +996,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -841,13 +1006,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -857,7 +1022,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemote::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -947,42 +1112,42 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "IntegerLiteral", - "offset": 341, + "offset": 291, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 368, + "offset": 2331, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 396, + "offset": 2359, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 417, + "offset": 2380, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 500, + "offset": 2495, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 450, + "offset": 2445, "length": 4, "value": "true" } diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface index fd3b29d60..c8b3f7e2a 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface index fd3b29d60..c8b3f7e2a 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/_CodeSignature/CodeResources b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/_CodeSignature/CodeResources index d2b78f22c..8f4ea139f 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/_CodeSignature/CodeResources +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/CanvasSVG.framework/_CodeSignature/CodeResources @@ -6,7 +6,7 @@ Headers/CanvasSVG-Swift.h - Jy9uP4EYUMvke/yVeYNlP3IVI3Y= + HqgoBwKqv0bgeTJew7FjRuTzH0c= Headers/CanvasSVG.h @@ -18,7 +18,7 @@ Headers/canvas_svg.h - WhdmQ/1h/sJhKZj8kyueMEpxLDU= + UjEdRBE+rn1irq2D79vsYB1rdqE= Info.plist @@ -26,19 +26,19 @@ Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo - cOq9LO+bJyyyxlv+tV6lu/Gi3KI= + pyzwu5i/GydBxWnBJBgenYsycQA= Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo - Yj5Xv4LrBTPIKb99wXPP7p6AJrI= + /fDC282M4Tt2FwHt2SW5OaSkZEk= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json - 4v3uSc8w/dve4B9bsOmxOx25fgM= + 0UVXpsSeycxphqNyUwBq3fOCvtM= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface - IqcOh08xjYocdQz4CUg0Jp63V2o= + 2cYxSfGlvN25fqdyKmnTb19+1J8= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftdoc @@ -46,19 +46,19 @@ Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface - IqcOh08xjYocdQz4CUg0Jp63V2o= + 2cYxSfGlvN25fqdyKmnTb19+1J8= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftmodule - TejvTVZPJ4anzsKR16fWxzohADc= + 5HRXa92tHlcli3xC44J2AGFX1h0= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json - 4v3uSc8w/dve4B9bsOmxOx25fgM= + 0UVXpsSeycxphqNyUwBq3fOCvtM= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface - J1UiehUSBYBovgHFXpvru8SyIog= + TGnPpd7jxQQuzK+M5mcZ0Cww+f8= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftdoc @@ -66,11 +66,11 @@ Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface - J1UiehUSBYBovgHFXpvru8SyIog= + TGnPpd7jxQQuzK+M5mcZ0Cww+f8= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftmodule - 0lYR0mOLFtCT46dY/kRhKed+Vk8= + SxvOQkQLVxTOCHI8Lb7cLrCk05o= Modules/module.modulemap @@ -83,7 +83,7 @@ hash2 - eEvVEX/mlm8A7O+lz233wS0liYHRofQ18CXUMAu9YG8= + u7TX8s0LwbF4BamQru4hkGJA9+MnnT5T0Gy+s2MzqlM= Headers/CanvasSVG.h @@ -104,35 +104,35 @@ hash2 - WH3gIh6dEQhs+Pq3nSWgX2Vj3U82Hpk9OuZ47AhAPNI= + WnuSN7GDo2EZSRsPw64PyY4ESU/xoToiiC+KpgugJ0E= Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo hash2 - 8yI2i271ues9neYSKlMIGPZR3npzfQlzRaFg5iTcy6I= + jW748CMjBWth5cO9LC9DzkG3A90PvvCQURv/4o1IHRw= Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo hash2 - YvLRJA3vdBWZugxBMCOUkHxNGuWJ0aJ3ui/K9FPYSyM= + BEmyb6GQU41FuMWlfeTofvYtnbfHj9fQEAJ8wHVRBlc= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json hash2 - LEFS4hrvJ/Q7Qkd3GgYy4hyA/V143jNd8uK9IunfdCE= + S/g6fQJ1BzblBfE5OGPDcTLEIJZAT5IEfCF7mv2lOYk= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface hash2 - bm2pXoR3e4AtEFfvkhRltgcUqmmjhVCDFAC9q8NdPqM= + V0i9Q5A4/VItQUmwMT3aCcY1MIQbYZ4FWSjgdxcPxEM= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftdoc @@ -146,28 +146,28 @@ hash2 - bm2pXoR3e4AtEFfvkhRltgcUqmmjhVCDFAC9q8NdPqM= + V0i9Q5A4/VItQUmwMT3aCcY1MIQbYZ4FWSjgdxcPxEM= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftmodule hash2 - ySF/fe1r+lN5vh3xWDWAM9f2fEwwSabk42y5Ria0No0= + Bgjwx82a07IiYbtquJ9sGgES9myA3nao0ipEyhIrO7k= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json hash2 - LEFS4hrvJ/Q7Qkd3GgYy4hyA/V143jNd8uK9IunfdCE= + S/g6fQJ1BzblBfE5OGPDcTLEIJZAT5IEfCF7mv2lOYk= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface hash2 - iRbAuOa3oPtnn7oIQ6ntgYvRaA0FYhw0lntORxA8sDs= + 28DuCwWjdVP9iQTSjVCq23H9sqmZBVXZt+eiHY3E89U= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftdoc @@ -181,14 +181,14 @@ hash2 - iRbAuOa3oPtnn7oIQ6ntgYvRaA0FYhw0lntORxA8sDs= + 28DuCwWjdVP9iQTSjVCq23H9sqmZBVXZt+eiHY3E89U= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftmodule hash2 - bQWpMhvm3lgGRCyq6tby27ESKF+f6JKjTgc3S9NW6AU= + Zoh2XrgvAayVkg75Dx/dR3BbFGqyKAyer6/az+ROoMk= Modules/module.modulemap diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG index 90f163876..7c18b3bfa 100644 Binary files a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG and b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG differ diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml index 8eed7e3e9..a3cefaba5 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml @@ -2,221 +2,258 @@ triple: 'arm64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/CanvasSVG' relocations: - - { offsetInCU: 0x34, offset: 0xA8AAE, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x541000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0xA8AE3, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x541030, symSize: 0x0 } - - { offsetInCU: 0x27, offset: 0xA8B20, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x5340, symSize: 0xB4 } - - { offsetInCU: 0x66, offset: 0xA8B5F, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x5340, symSize: 0xB4 } - - { offsetInCU: 0x15B, offset: 0xA8C54, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xB4, symBinAddr: 0x53F4, symSize: 0xB4 } - - { offsetInCU: 0x65, offset: 0xA8DB3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x54A8, symSize: 0x44 } - - { offsetInCU: 0xBD, offset: 0xA8E0B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvsTo', symObjAddr: 0x88, symBinAddr: 0x5530, symSize: 0x48 } - - { offsetInCU: 0x118, offset: 0xA8E66, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x12C, symBinAddr: 0x55D4, symSize: 0x44 } - - { offsetInCU: 0x170, offset: 0xA8EBE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x1B4, symBinAddr: 0x565C, symSize: 0x54 } - - { offsetInCU: 0x1CD, offset: 0xA8F1B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvgTo', symObjAddr: 0x2B0, symBinAddr: 0x5758, symSize: 0x44 } - - { offsetInCU: 0x225, offset: 0xA8F73, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvsTo', symObjAddr: 0x338, symBinAddr: 0x57E0, symSize: 0x48 } - - { offsetInCU: 0x280, offset: 0xA8FCE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x424, symBinAddr: 0x58CC, symSize: 0x10 } - - { offsetInCU: 0x2A0, offset: 0xA8FEE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x424, symBinAddr: 0x58CC, symSize: 0x10 } - - { offsetInCU: 0x2D6, offset: 0xA9024, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x434, symBinAddr: 0x58DC, symSize: 0x10 } - - { offsetInCU: 0x2F6, offset: 0xA9044, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x434, symBinAddr: 0x58DC, symSize: 0x10 } - - { offsetInCU: 0x32F, offset: 0xA907D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x444, symBinAddr: 0x58EC, symSize: 0x10 } - - { offsetInCU: 0x34F, offset: 0xA909D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x444, symBinAddr: 0x58EC, symSize: 0x10 } - - { offsetInCU: 0x385, offset: 0xA90D3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x454, symBinAddr: 0x58FC, symSize: 0x10 } - - { offsetInCU: 0x3A5, offset: 0xA90F3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x454, symBinAddr: 0x58FC, symSize: 0x10 } - - { offsetInCU: 0x3DE, offset: 0xA912C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x464, symBinAddr: 0x590C, symSize: 0x10 } - - { offsetInCU: 0x3FE, offset: 0xA914C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x464, symBinAddr: 0x590C, symSize: 0x10 } - - { offsetInCU: 0x434, offset: 0xA9182, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x474, symBinAddr: 0x591C, symSize: 0x10 } - - { offsetInCU: 0x454, offset: 0xA91A2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x474, symBinAddr: 0x591C, symSize: 0x10 } - - { offsetInCU: 0x48D, offset: 0xA91DB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x484, symBinAddr: 0x592C, symSize: 0x44 } - - { offsetInCU: 0x4FB, offset: 0xA9249, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x50C, symBinAddr: 0x59B4, symSize: 0x64 } - - { offsetInCU: 0x5EF, offset: 0xA933D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScaleSfyFTo', symObjAddr: 0xADC, symBinAddr: 0x5F84, symSize: 0xB8 } - - { offsetInCU: 0x6E0, offset: 0xA942E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x1628, symBinAddr: 0x6AD0, symSize: 0x28 } - - { offsetInCU: 0x712, offset: 0xA9460, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x18F0, symBinAddr: 0x6D98, symSize: 0x28 } - - { offsetInCU: 0x744, offset: 0xA9492, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x191C, symBinAddr: 0x6DC0, symSize: 0x28 } - - { offsetInCU: 0x78C, offset: 0xA94DA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1944, symBinAddr: 0x6DE8, symSize: 0x10 } - - { offsetInCU: 0x7AC, offset: 0xA94FA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1944, symBinAddr: 0x6DE8, symSize: 0x10 } - - { offsetInCU: 0x800, offset: 0xA954E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1D3C, symBinAddr: 0x71E0, symSize: 0x20 } - - { offsetInCU: 0x837, offset: 0xA9585, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x1FD8, symBinAddr: 0x747C, symSize: 0x28 } - - { offsetInCU: 0x889, offset: 0xA95D7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x21E4, symBinAddr: 0x766C, symSize: 0x80 } - - { offsetInCU: 0x8FC, offset: 0xA964A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x240C, symBinAddr: 0x7894, symSize: 0x34 } - - { offsetInCU: 0x92E, offset: 0xA967C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x24D0, symBinAddr: 0x7958, symSize: 0x34 } - - { offsetInCU: 0xA5C, offset: 0xA97AA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x4870, symBinAddr: 0x9CF8, symSize: 0x13E8 } - - { offsetInCU: 0x172A, offset: 0xAA478, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZTf4nd_n', symObjAddr: 0x5C58, symBinAddr: 0xB0E0, symSize: 0x238 } - - { offsetInCU: 0x1948, offset: 0xAA696, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZTf4nd_n', symObjAddr: 0x5E90, symBinAddr: 0xB318, symSize: 0x2F0 } - - { offsetInCU: 0x1B96, offset: 0xAA8E4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZTf4nd_n', symObjAddr: 0x6180, symBinAddr: 0xB608, symSize: 0x3A4 } - - { offsetInCU: 0x1E0D, offset: 0xAAB5B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvpACTK', symObjAddr: 0xD0, symBinAddr: 0x5578, symSize: 0x50 } - - { offsetInCU: 0x1E45, offset: 0xAAB93, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTK', symObjAddr: 0x208, symBinAddr: 0x56B0, symSize: 0x50 } - - { offsetInCU: 0x1E7D, offset: 0xAABCB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTk', symObjAddr: 0x258, symBinAddr: 0x5700, symSize: 0x58 } - - { offsetInCU: 0x1EBF, offset: 0xAAC0D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvpACTK', symObjAddr: 0x380, symBinAddr: 0x5828, symSize: 0x50 } - - { offsetInCU: 0x1EF7, offset: 0xAAC45, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x5D0, symBinAddr: 0x5A78, symSize: 0x50 } - - { offsetInCU: 0x1F2F, offset: 0xAAC7D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x620, symBinAddr: 0x5AC8, symSize: 0x64 } - - { offsetInCU: 0x1FEA, offset: 0xAAD38, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x1C98, symBinAddr: 0x713C, symSize: 0x40 } - - { offsetInCU: 0x1FFE, offset: 0xAAD4C, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledNameAbstract, symObjAddr: 0x1CD8, symBinAddr: 0x717C, symSize: 0x44 } - - { offsetInCU: 0x2012, offset: 0xAAD60, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x1D1C, symBinAddr: 0x71C0, symSize: 0x20 } - - { offsetInCU: 0x2036, offset: 0xAAD84, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x4404, symBinAddr: 0x988C, symSize: 0x70 } - - { offsetInCU: 0x2480, offset: 0xAB1CE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6550, symBinAddr: 0xB9D8, symSize: 0xC } - - { offsetInCU: 0x2494, offset: 0xAB1E2, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x655C, symBinAddr: 0xB9E4, symSize: 0x10 } - - { offsetInCU: 0x24A8, offset: 0xAB1F6, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x656C, symBinAddr: 0xB9F4, symSize: 0x8 } - - { offsetInCU: 0x24BC, offset: 0xAB20A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x65F8, symBinAddr: 0xBA80, symSize: 0xC } - - { offsetInCU: 0x24D0, offset: 0xAB21E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6634, symBinAddr: 0xBABC, symSize: 0xC } - - { offsetInCU: 0x24E4, offset: 0xAB232, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x6804, symBinAddr: 0xBC8C, symSize: 0xC } - - { offsetInCU: 0x24F8, offset: 0xAB246, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x6810, symBinAddr: 0xBC98, symSize: 0x4 } - - { offsetInCU: 0x250C, offset: 0xAB25A, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x6814, symBinAddr: 0xBC9C, symSize: 0x20 } - - { offsetInCU: 0x2520, offset: 0xAB26E, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x6834, symBinAddr: 0xBCBC, symSize: 0x28 } - - { offsetInCU: 0x253F, offset: 0xAB28D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x68D8, symBinAddr: 0xBD60, symSize: 0x10 } - - { offsetInCU: 0x2568, offset: 0xAB2B6, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x68E8, symBinAddr: 0xBD70, symSize: 0x40 } - - { offsetInCU: 0x257C, offset: 0xAB2CA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x6964, symBinAddr: 0xBDEC, symSize: 0x24 } - - { offsetInCU: 0x25B0, offset: 0xAB2FE, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x69C0, symBinAddr: 0xBE48, symSize: 0x44 } - - { offsetInCU: 0x25C4, offset: 0xAB312, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_yyScMYccfU_Tf2niiin_nTA', symObjAddr: 0x6B80, symBinAddr: 0xC008, symSize: 0x108 } - - { offsetInCU: 0x26D7, offset: 0xAB425, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x6CAC, symBinAddr: 0xC134, symSize: 0x8 } - - { offsetInCU: 0x2C80, offset: 0xAB9CE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvg', symObjAddr: 0x44, symBinAddr: 0x54EC, symSize: 0x44 } - - { offsetInCU: 0x2D08, offset: 0xABA56, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg', symObjAddr: 0x170, symBinAddr: 0x5618, symSize: 0x44 } - - { offsetInCU: 0x2D60, offset: 0xABAAE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvg', symObjAddr: 0x2F4, symBinAddr: 0x579C, symSize: 0x44 } - - { offsetInCU: 0x2E59, offset: 0xABBA7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x4C8, symBinAddr: 0x5970, symSize: 0x44 } - - { offsetInCU: 0x2EAC, offset: 0xABBFA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x570, symBinAddr: 0x5A18, symSize: 0x60 } - - { offsetInCU: 0x2F1C, offset: 0xABC6A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0x684, symBinAddr: 0x5B2C, symSize: 0x48 } - - { offsetInCU: 0x2F41, offset: 0xABC8F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0x6CC, symBinAddr: 0x5B74, symSize: 0x3C } - - { offsetInCU: 0x2F9D, offset: 0xABCEB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0x750, symBinAddr: 0x5BF8, symSize: 0x48 } - - { offsetInCU: 0x2FC2, offset: 0xABD10, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xA60, symBinAddr: 0x5F08, symSize: 0x48 } - - { offsetInCU: 0x315F, offset: 0xABEAD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xB94, symBinAddr: 0x603C, symSize: 0x45C } - - { offsetInCU: 0x347B, offset: 0xAC1C9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0xFF0, symBinAddr: 0x6498, symSize: 0x634 } - - { offsetInCU: 0x3733, offset: 0xAC481, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1650, symBinAddr: 0x6AF8, symSize: 0x2A0 } - - { offsetInCU: 0x3AD2, offset: 0xAC820, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1954, symBinAddr: 0x6DF8, symSize: 0x50 } - - { offsetInCU: 0x3AE6, offset: 0xAC834, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x19A4, symBinAddr: 0x6E48, symSize: 0x2F4 } - - { offsetInCU: 0x3B6A, offset: 0xAC8B8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1D5C, symBinAddr: 0x7200, symSize: 0x27C } - - { offsetInCU: 0x3C21, offset: 0xAC96F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9drawImage33_C2B5A81EA80ED94FA09E8C035710AE36LLyySo6CGRectVF', symObjAddr: 0x2000, symBinAddr: 0x74A4, symSize: 0x1C8 } - - { offsetInCU: 0x3E27, offset: 0xACB75, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x2264, symBinAddr: 0x76EC, symSize: 0x1A8 } - - { offsetInCU: 0x4003, offset: 0xACD51, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2440, symBinAddr: 0x78C8, symSize: 0x90 } - - { offsetInCU: 0x40B2, offset: 0xACE00, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ', symObjAddr: 0x2504, symBinAddr: 0x798C, symSize: 0x4 } - - { offsetInCU: 0x40C6, offset: 0xACE14, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ', symObjAddr: 0x2514, symBinAddr: 0x799C, symSize: 0x4 } - - { offsetInCU: 0x40DA, offset: 0xACE28, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ', symObjAddr: 0x2524, symBinAddr: 0x79AC, symSize: 0x4 } - - { offsetInCU: 0x40FA, offset: 0xACE48, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ', symObjAddr: 0x2570, symBinAddr: 0x79F8, symSize: 0x26C } - - { offsetInCU: 0x416D, offset: 0xACEBB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x27DC, symBinAddr: 0x7C64, symSize: 0x3DC } - - { offsetInCU: 0x4466, offset: 0xAD1B4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x2C20, symBinAddr: 0x80A8, symSize: 0x81C } - - { offsetInCU: 0x45C6, offset: 0xAD314, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x36D8, symBinAddr: 0x8B60, symSize: 0xC38 } - - { offsetInCU: 0x478D, offset: 0xAD4DB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfD', symObjAddr: 0x43D4, symBinAddr: 0x985C, symSize: 0x30 } - - { offsetInCU: 0x47B0, offset: 0xAD4FE, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x4474, symBinAddr: 0x98FC, symSize: 0xE8 } - - { offsetInCU: 0x47E5, offset: 0xAD533, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x455C, symBinAddr: 0x99E4, symSize: 0x1F4 } - - { offsetInCU: 0x4842, offset: 0xAD590, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x4750, symBinAddr: 0x9BD8, symSize: 0x1C } - - { offsetInCU: 0x4880, offset: 0xAD5CE, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x476C, symBinAddr: 0x9BF4, symSize: 0x104 } - - { offsetInCU: 0x26, offset: 0xAD94B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x969E0, symSize: 0x26E4 } - - { offsetInCU: 0x40, offset: 0xAD965, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9EA8, symBinAddr: 0x5791D8, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0xAD9B7, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFEA8, symBinAddr: 0x57F1D8, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0xADA1B, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFED0, symBinAddr: 0x57F200, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0xADA31, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x102D8, symBinAddr: 0x57F608, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0xADA48, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFF18, symBinAddr: 0x57F248, symSize: 0x0 } - - { offsetInCU: 0xE22, offset: 0xAE747, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x969E0, symSize: 0x26E4 } - - { offsetInCU: 0x4BAD, offset: 0xB24D2, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9A24, symBinAddr: 0xA0404, symSize: 0x210 } - - { offsetInCU: 0x4E0E, offset: 0xB2733, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E24, symBinAddr: 0x9B804, symSize: 0x1B8 } - - { offsetInCU: 0x5399, offset: 0xB2CBE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0x990C4, symSize: 0x5A8 } - - { offsetInCU: 0x5EE1, offset: 0xB3806, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0x9966C, symSize: 0x674 } - - { offsetInCU: 0x6290, offset: 0xB3BB5, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3300, symBinAddr: 0x99CE0, symSize: 0x1F0 } - - { offsetInCU: 0x67A5, offset: 0xB40CA, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x34F0, symBinAddr: 0x99ED0, symSize: 0x7A8 } - - { offsetInCU: 0x75B2, offset: 0xB4ED7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3C98, symBinAddr: 0x9A678, symSize: 0x614 } - - { offsetInCU: 0x7F41, offset: 0xB5866, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x42AC, symBinAddr: 0x9AC8C, symSize: 0xB78 } - - { offsetInCU: 0x9472, offset: 0xB6D97, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x50D0, symBinAddr: 0x9BAB0, symSize: 0x23CC } - - { offsetInCU: 0xC9D7, offset: 0xBA2FC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x4FDC, symBinAddr: 0x9B9BC, symSize: 0xF4 } - - { offsetInCU: 0xCBD2, offset: 0xBA4F7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x749C, symBinAddr: 0x9DE7C, symSize: 0x30 } - - { offsetInCU: 0xCCC3, offset: 0xBA5E8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x74CC, symBinAddr: 0x9DEAC, symSize: 0x58 } - - { offsetInCU: 0xCD38, offset: 0xBA65D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x9DF04, symSize: 0x4 } - - { offsetInCU: 0xCD80, offset: 0xBA6A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x9DF04, symSize: 0x4 } - - { offsetInCU: 0xCDAF, offset: 0xBA6D4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x9DF04, symSize: 0x4 } - - { offsetInCU: 0xCDD3, offset: 0xBA6F8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7528, symBinAddr: 0x9DF08, symSize: 0x8C } - - { offsetInCU: 0xCF26, offset: 0xBA84B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0x9DF94, symSize: 0x4 } - - { offsetInCU: 0xCF5F, offset: 0xBA884, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0x9DF94, symSize: 0x4 } - - { offsetInCU: 0xD1F8, offset: 0xBAB1D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x75B8, symBinAddr: 0x9DF98, symSize: 0x1870 } - - { offsetInCU: 0xF966, offset: 0xBD28B, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9C34, symBinAddr: 0xA0614, symSize: 0x200 } - - { offsetInCU: 0xFECD, offset: 0xBD7F2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8E28, symBinAddr: 0x9F808, symSize: 0x20 } - - { offsetInCU: 0x1036A, offset: 0xBDC8F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8E48, symBinAddr: 0x9F828, symSize: 0xBDC } - - { offsetInCU: 0x26, offset: 0xBEA1C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xA0814, symSize: 0x1E0 } - - { offsetInCU: 0x1D2, offset: 0xBEBC8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xA0814, symSize: 0x1E0 } - - { offsetInCU: 0x26, offset: 0xBEE63, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xA09F4, symSize: 0x3C } - - { offsetInCU: 0x34, offset: 0xBEE71, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xA09F4, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xBEF81, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xA0A30, symSize: 0x90 } - - { offsetInCU: 0x34, offset: 0xBEF8F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xA0A30, symSize: 0x90 } - - { offsetInCU: 0x86, offset: 0xBF0F2, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0x57F6D0, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0xBF124, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0x57F660, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0xBF146, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0x57F690, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0xBF15C, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0x57F6C0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0xBF423, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xA0AC0, symSize: 0x18 } - - { offsetInCU: 0x3FB, offset: 0xBF467, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xA0AC0, symSize: 0x18 } - - { offsetInCU: 0x594, offset: 0xBF600, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0xA0AD8, symSize: 0x18 } - - { offsetInCU: 0x63F, offset: 0xBF6AB, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0xA0AF0, symSize: 0x300 } - - { offsetInCU: 0x10C0, offset: 0xC012C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0xA0DF0, symSize: 0xAC } - - { offsetInCU: 0x13B6, offset: 0xC0422, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0xA0E9C, symSize: 0x4D0 } - - { offsetInCU: 0x24CA, offset: 0xC1536, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0xA136C, symSize: 0x28C } - - { offsetInCU: 0x2B3F, offset: 0xC1BAB, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0xA15F8, symSize: 0xF4 } - - { offsetInCU: 0x2D4A, offset: 0xC1DB6, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0xA16EC, symSize: 0x168 } - - { offsetInCU: 0x26, offset: 0xC20D9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA1854, symSize: 0x38 } - - { offsetInCU: 0xFA, offset: 0xC21AD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA1854, symSize: 0x38 } - - { offsetInCU: 0x12C, offset: 0xC21DF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA1854, symSize: 0x38 } - - { offsetInCU: 0x199, offset: 0xC224C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xA188C, symSize: 0x3C } - - { offsetInCU: 0x1F3, offset: 0xC22A6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xA188C, symSize: 0x3C } - - { offsetInCU: 0x31B, offset: 0xC23CE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0xA18C8, symSize: 0x5C } - - { offsetInCU: 0x517, offset: 0xC25CA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0xA1924, symSize: 0x1C } - - { offsetInCU: 0x636, offset: 0xC26E9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0xA1940, symSize: 0x54 } - - { offsetInCU: 0x6D0, offset: 0xC2783, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0xA1994, symSize: 0x4C } - - { offsetInCU: 0x8A8, offset: 0xC295B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xA19E0, symSize: 0xA8 } - - { offsetInCU: 0x90C, offset: 0xC29BF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xA19E0, symSize: 0xA8 } - - { offsetInCU: 0xBA6, offset: 0xC2C59, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0xA1A88, symSize: 0x124 } - - { offsetInCU: 0xEC3, offset: 0xC2F76, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xA1BAC, symSize: 0xC8 } - - { offsetInCU: 0xF43, offset: 0xC2FF6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xA1BAC, symSize: 0xC8 } - - { offsetInCU: 0x10B0, offset: 0xC3163, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0xA1C74, symSize: 0x180 } - - { offsetInCU: 0x134C, offset: 0xC33FF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x5A0, symBinAddr: 0xA1DF4, symSize: 0x16C } - - { offsetInCU: 0x14BB, offset: 0xC356E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x70C, symBinAddr: 0xA1F60, symSize: 0x18 } - - { offsetInCU: 0x1522, offset: 0xC35D5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x724, symBinAddr: 0xA1F78, symSize: 0xC } - - { offsetInCU: 0x155B, offset: 0xC360E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x730, symBinAddr: 0xA1F84, symSize: 0x8 } - - { offsetInCU: 0x15DF, offset: 0xC3692, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x738, symBinAddr: 0xA1F8C, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xC383F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xA1FC8, symSize: 0x140 } - - { offsetInCU: 0x34, offset: 0xC384D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xA1FC8, symSize: 0x140 } - - { offsetInCU: 0x34, offset: 0xC3953, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x388, symBinAddr: 0xC2A158, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xC3995, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xA2108, symSize: 0x35C } - - { offsetInCU: 0x76, offset: 0xC39E5, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x580000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xC3A69, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x5A5000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xC3CCA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xA2108, symSize: 0x35C } - - { offsetInCU: 0xC70, offset: 0xC45DF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0xA2464, symSize: 0x1FC } - - { offsetInCU: 0x115F, offset: 0xC4ACE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0xA2660, symSize: 0x1B8 } - - { offsetInCU: 0x10, offset: 0xC4EA3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xA2820, symSize: 0x1A0 } - - { offsetInCU: 0x50, offset: 0xC4EE3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xA2820, symSize: 0x1A0 } - - { offsetInCU: 0x5E, offset: 0xC4EF1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0xA29C0, symSize: 0x60 } - - { offsetInCU: 0x81, offset: 0xC4F14, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0xA2A20, symSize: 0x288 } - - { offsetInCU: 0x10, offset: 0xC4F05, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xA2CB0, symSize: 0x130 } - - { offsetInCU: 0x48, offset: 0xC4F3D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xA2CB0, symSize: 0x130 } - - { offsetInCU: 0x5F, offset: 0xC4F54, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0xA2DE0, symSize: 0x70 } - - { offsetInCU: 0x75, offset: 0xC4F6A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0xA2E50, symSize: 0x160 } - - { offsetInCU: 0x7A, offset: 0xC4F6F, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0xA2FB0, symSize: 0x378 } - - { offsetInCU: 0x10, offset: 0xC4F7D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xA3340, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xC4FB5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xA3340, symSize: 0x3A0 } - - { offsetInCU: 0x4C, offset: 0xC4FB9, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0xA36E0, symSize: 0x6C0 } - - { offsetInCU: 0x66, offset: 0xC4FD3, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0xA3DA0, symSize: 0x1138 } - - { offsetInCU: 0x50, offset: 0xC501F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0xA5040, symSize: 0x1180 } - - { offsetInCU: 0x66, offset: 0xC5035, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0xA61C0, symSize: 0x1410 } - - { offsetInCU: 0x10, offset: 0xC502B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA75E0, symSize: 0x240 } - - { offsetInCU: 0x45, offset: 0xC5060, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA75E0, symSize: 0x240 } - - { offsetInCU: 0x4D, offset: 0xC5068, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0xA7820, symSize: 0x9E0 } - - { offsetInCU: 0x63, offset: 0xC507E, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0xA8200, symSize: 0x650 } - - { offsetInCU: 0x10, offset: 0xC508D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA8860, symSize: 0x40 } - - { offsetInCU: 0x47, offset: 0xC50C4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA8860, symSize: 0x40 } - - { offsetInCU: 0x5D, offset: 0xC50DA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0xA88A0, symSize: 0x40 } - - { offsetInCU: 0x76, offset: 0xC50F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0xA88E0, symSize: 0x40 } - - { offsetInCU: 0x81, offset: 0xC50FE, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0xA8920, symSize: 0x1E0 } - - { offsetInCU: 0x97, offset: 0xC5114, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0xA8B00, symSize: 0x170 } - - { offsetInCU: 0xAB, offset: 0xC5128, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0xA8C70, symSize: 0x50 } - - { offsetInCU: 0xC3, offset: 0xC5140, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0xA8CC0, symSize: 0x50 } - - { offsetInCU: 0xD9, offset: 0xC5156, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0xA8D10, symSize: 0x50 } - - { offsetInCU: 0xEF, offset: 0xC516C, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0xA8D60, symSize: 0x60 } - - { offsetInCU: 0x111, offset: 0xC518E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0xA8DC0, symSize: 0x1E0 } - - { offsetInCU: 0x124, offset: 0xC51A1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0xA8FA0, symSize: 0x360 } - - { offsetInCU: 0x141, offset: 0xC51BE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0xA9300, symSize: 0x2D0 } - - { offsetInCU: 0x156, offset: 0xC51D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0xA95D0, symSize: 0x2B0 } - - { offsetInCU: 0x170, offset: 0xC51ED, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0xA9880, symSize: 0x250 } - - { offsetInCU: 0x184, offset: 0xC5201, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0xA9AD0, symSize: 0x60 } - - { offsetInCU: 0x19A, offset: 0xC5217, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0xA9B30, symSize: 0x44 } - - { offsetInCU: 0x10, offset: 0xC520D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xA9B80, symSize: 0xB90 } - - { offsetInCU: 0x4C, offset: 0xC5249, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xA9B80, symSize: 0xB90 } - - { offsetInCU: 0x62, offset: 0xC525F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0xAA710, symSize: 0xB98 } - - { offsetInCU: 0x10, offset: 0xC5259, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAB2C0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC529A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAB2C0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC529A, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xAC100, symSize: 0x7E0 } - - { offsetInCU: 0x10, offset: 0xC52A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAC900, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC52E6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAC900, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC52E6, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xAD740, symSize: 0x1F0 } + - { offsetInCU: 0x34, offset: 0xA8AAE, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x4BD000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xA8AE3, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x4BD030, symSize: 0x0 } + - { offsetInCU: 0x27, offset: 0xA8B20, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x3E40, symSize: 0xB4 } + - { offsetInCU: 0x66, offset: 0xA8B5F, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x3E40, symSize: 0xB4 } + - { offsetInCU: 0x15B, offset: 0xA8C54, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xB4, symBinAddr: 0x3EF4, symSize: 0xB4 } + - { offsetInCU: 0x65, offset: 0xA8DB3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x3FA8, symSize: 0x10 } + - { offsetInCU: 0x85, offset: 0xA8DD3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x3FA8, symSize: 0x10 } + - { offsetInCU: 0xBB, offset: 0xA8E09, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x10, symBinAddr: 0x3FB8, symSize: 0x10 } + - { offsetInCU: 0xDB, offset: 0xA8E29, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x10, symBinAddr: 0x3FB8, symSize: 0x10 } + - { offsetInCU: 0x114, offset: 0xA8E62, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x20, symBinAddr: 0x3FC8, symSize: 0x14 } + - { offsetInCU: 0x134, offset: 0xA8E82, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x20, symBinAddr: 0x3FC8, symSize: 0x14 } + - { offsetInCU: 0x16A, offset: 0xA8EB8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x34, symBinAddr: 0x3FDC, symSize: 0x14 } + - { offsetInCU: 0x18A, offset: 0xA8ED8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x34, symBinAddr: 0x3FDC, symSize: 0x14 } + - { offsetInCU: 0x1C5, offset: 0xA8F13, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x48, symBinAddr: 0x3FF0, symSize: 0x10 } + - { offsetInCU: 0x1E5, offset: 0xA8F33, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x48, symBinAddr: 0x3FF0, symSize: 0x10 } + - { offsetInCU: 0x21B, offset: 0xA8F69, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0x58, symBinAddr: 0x4000, symSize: 0x10 } + - { offsetInCU: 0x23B, offset: 0xA8F89, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0x58, symBinAddr: 0x4000, symSize: 0x10 } + - { offsetInCU: 0x274, offset: 0xA8FC2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0x68, symBinAddr: 0x4010, symSize: 0x10 } + - { offsetInCU: 0x294, offset: 0xA8FE2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0x68, symBinAddr: 0x4010, symSize: 0x10 } + - { offsetInCU: 0x2CC, offset: 0xA901A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvsTo', symObjAddr: 0x78, symBinAddr: 0x4020, symSize: 0x34 } + - { offsetInCU: 0x325, offset: 0xA9073, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0xAC, symBinAddr: 0x4054, symSize: 0x10 } + - { offsetInCU: 0x345, offset: 0xA9093, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0xAC, symBinAddr: 0x4054, symSize: 0x10 } + - { offsetInCU: 0x378, offset: 0xA90C6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0xBC, symBinAddr: 0x4064, symSize: 0x10 } + - { offsetInCU: 0x398, offset: 0xA90E6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0xBC, symBinAddr: 0x4064, symSize: 0x10 } + - { offsetInCU: 0x3D0, offset: 0xA911E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvsTo', symObjAddr: 0xCC, symBinAddr: 0x4074, symSize: 0x34 } + - { offsetInCU: 0x433, offset: 0xA9181, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x278, symBinAddr: 0x4220, symSize: 0x40 } + - { offsetInCU: 0x465, offset: 0xA91B3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4260, symSize: 0x10 } + - { offsetInCU: 0x485, offset: 0xA91D3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4260, symSize: 0x10 } + - { offsetInCU: 0x4A2, offset: 0xA91F0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4260, symSize: 0x10 } + - { offsetInCU: 0x4D4, offset: 0xA9222, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4280, symSize: 0x14 } + - { offsetInCU: 0x4F4, offset: 0xA9242, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4280, symSize: 0x14 } + - { offsetInCU: 0x511, offset: 0xA925F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4280, symSize: 0x14 } + - { offsetInCU: 0x543, offset: 0xA9291, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x42A8, symSize: 0x10 } + - { offsetInCU: 0x563, offset: 0xA92B1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x42A8, symSize: 0x10 } + - { offsetInCU: 0x580, offset: 0xA92CE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x42A8, symSize: 0x10 } + - { offsetInCU: 0x59C, offset: 0xA92EA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgTo', symObjAddr: 0x320, symBinAddr: 0x42C8, symSize: 0x34 } + - { offsetInCU: 0x5E4, offset: 0xA9332, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyFTo', symObjAddr: 0x610, symBinAddr: 0x45B8, symSize: 0x34 } + - { offsetInCU: 0x62C, offset: 0xA937A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfcTo', symObjAddr: 0x708, symBinAddr: 0x46B0, symSize: 0x20 } + - { offsetInCU: 0x659, offset: 0xA93A7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCfETo', symObjAddr: 0x734, symBinAddr: 0x46DC, symSize: 0x48 } + - { offsetInCU: 0x6AA, offset: 0xA93F8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x77C, symBinAddr: 0x4724, symSize: 0x10 } + - { offsetInCU: 0x6CA, offset: 0xA9418, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x77C, symBinAddr: 0x4724, symSize: 0x10 } + - { offsetInCU: 0x700, offset: 0xA944E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x78C, symBinAddr: 0x4734, symSize: 0x10 } + - { offsetInCU: 0x720, offset: 0xA946E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x78C, symBinAddr: 0x4734, symSize: 0x10 } + - { offsetInCU: 0x759, offset: 0xA94A7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x79C, symBinAddr: 0x4744, symSize: 0x10 } + - { offsetInCU: 0x779, offset: 0xA94C7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x79C, symBinAddr: 0x4744, symSize: 0x10 } + - { offsetInCU: 0x7AF, offset: 0xA94FD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x7AC, symBinAddr: 0x4754, symSize: 0x10 } + - { offsetInCU: 0x7CF, offset: 0xA951D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x7AC, symBinAddr: 0x4754, symSize: 0x10 } + - { offsetInCU: 0x808, offset: 0xA9556, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x7BC, symBinAddr: 0x4764, symSize: 0x10 } + - { offsetInCU: 0x828, offset: 0xA9576, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x7BC, symBinAddr: 0x4764, symSize: 0x10 } + - { offsetInCU: 0x85E, offset: 0xA95AC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x7CC, symBinAddr: 0x4774, symSize: 0x10 } + - { offsetInCU: 0x87E, offset: 0xA95CC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x7CC, symBinAddr: 0x4774, symSize: 0x10 } + - { offsetInCU: 0x8B7, offset: 0xA9605, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x7DC, symBinAddr: 0x4784, symSize: 0x10 } + - { offsetInCU: 0x8D7, offset: 0xA9625, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x7DC, symBinAddr: 0x4784, symSize: 0x10 } + - { offsetInCU: 0x90F, offset: 0xA965D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvsTo', symObjAddr: 0x7EC, symBinAddr: 0x4794, symSize: 0x34 } + - { offsetInCU: 0x968, offset: 0xA96B6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x820, symBinAddr: 0x47C8, symSize: 0x44 } + - { offsetInCU: 0x9D6, offset: 0xA9724, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x8A8, symBinAddr: 0x4850, symSize: 0x64 } + - { offsetInCU: 0xACA, offset: 0xA9818, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScale12CoreGraphics7CGFloatVyFTo', symObjAddr: 0xE78, symBinAddr: 0x4E20, symSize: 0xB8 } + - { offsetInCU: 0xBA6, offset: 0xA98F4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x190C, symBinAddr: 0x58B4, symSize: 0x28 } + - { offsetInCU: 0xBD8, offset: 0xA9926, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x1AA0, symBinAddr: 0x5A48, symSize: 0x28 } + - { offsetInCU: 0xC0A, offset: 0xA9958, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1ACC, symBinAddr: 0x5A70, symSize: 0x28 } + - { offsetInCU: 0xC52, offset: 0xA99A0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1AF4, symBinAddr: 0x5A98, symSize: 0x10 } + - { offsetInCU: 0xC72, offset: 0xA99C0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1AF4, symBinAddr: 0x5A98, symSize: 0x10 } + - { offsetInCU: 0xCC6, offset: 0xA9A14, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1E2C, symBinAddr: 0x5DD0, symSize: 0x20 } + - { offsetInCU: 0xCFD, offset: 0xA9A4B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x20AC, symBinAddr: 0x6050, symSize: 0x28 } + - { offsetInCU: 0xD4F, offset: 0xA9A9D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x2210, symBinAddr: 0x61B4, symSize: 0x58 } + - { offsetInCU: 0xD81, offset: 0xA9ACF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x22C8, symBinAddr: 0x626C, symSize: 0x34 } + - { offsetInCU: 0xDB4, offset: 0xA9B02, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x2340, symBinAddr: 0x62E4, symSize: 0x60 } + - { offsetInCU: 0xE79, offset: 0xA9BC7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9emitEventyySo9NSRunLoopC_So7NSTimerCtFZTo', symObjAddr: 0x240C, symBinAddr: 0x63B0, symSize: 0x24 } + - { offsetInCU: 0xF6D, offset: 0xA9CBB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x35CC, symBinAddr: 0x7570, symSize: 0x1520 } + - { offsetInCU: 0x1E85, offset: 0xAABD3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4AEC, symBinAddr: 0x8A90, symSize: 0x114 } + - { offsetInCU: 0x2015, offset: 0xAAD63, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4C00, symBinAddr: 0x8BA4, symSize: 0x1E0 } + - { offsetInCU: 0x21C5, offset: 0xAAF13, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4DE0, symBinAddr: 0x8D84, symSize: 0x298 } + - { offsetInCU: 0x23A8, offset: 0xAB0F6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x96C, symBinAddr: 0x4914, symSize: 0x50 } + - { offsetInCU: 0x23E0, offset: 0xAB12E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x9BC, symBinAddr: 0x4964, symSize: 0x64 } + - { offsetInCU: 0x2476, offset: 0xAB1C4, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x26D0, symBinAddr: 0x6674, symSize: 0x4C } + - { offsetInCU: 0x248E, offset: 0xAB1DC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x3028, symBinAddr: 0x6FCC, symSize: 0x80 } + - { offsetInCU: 0x24BD, offset: 0xAB20B, size: 0x8, addend: 0x0, symName: '_$sSvSiIegyy_SvSiIeyByy_TR', symObjAddr: 0x30A8, symBinAddr: 0x704C, symSize: 0x48 } + - { offsetInCU: 0x25E0, offset: 0xAB32E, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x34F0, symBinAddr: 0x7494, symSize: 0x10 } + - { offsetInCU: 0x25F4, offset: 0xAB342, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x3500, symBinAddr: 0x74A4, symSize: 0x8 } + - { offsetInCU: 0x2608, offset: 0xAB356, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCMa', symObjAddr: 0x3508, symBinAddr: 0x74AC, symSize: 0x20 } + - { offsetInCU: 0x261C, offset: 0xAB36A, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x3528, symBinAddr: 0x74CC, symSize: 0x40 } + - { offsetInCU: 0x2630, offset: 0xAB37E, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledNameAbstract, symObjAddr: 0x3568, symBinAddr: 0x750C, symSize: 0x44 } + - { offsetInCU: 0x2644, offset: 0xAB392, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x35AC, symBinAddr: 0x7550, symSize: 0x20 } + - { offsetInCU: 0x2983, offset: 0xAB6D1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x50AC, symBinAddr: 0x9050, symSize: 0x304 } + - { offsetInCU: 0x2B7F, offset: 0xAB8CD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5434, symBinAddr: 0x93D8, symSize: 0x3DC } + - { offsetInCU: 0x2DA0, offset: 0xABAEE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5848, symBinAddr: 0x97EC, symSize: 0x10 } + - { offsetInCU: 0x2DB4, offset: 0xABB02, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x5A60, symBinAddr: 0x9A04, symSize: 0xC } + - { offsetInCU: 0x2DC8, offset: 0xABB16, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x5A6C, symBinAddr: 0x9A10, symSize: 0x4 } + - { offsetInCU: 0x2DDC, offset: 0xABB2A, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x5A70, symBinAddr: 0x9A14, symSize: 0x20 } + - { offsetInCU: 0x2DF0, offset: 0xABB3E, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x5A90, symBinAddr: 0x9A34, symSize: 0x28 } + - { offsetInCU: 0x2E0F, offset: 0xABB5D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x5B34, symBinAddr: 0x9AD8, symSize: 0x10 } + - { offsetInCU: 0x2E38, offset: 0xABB86, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU_TA', symObjAddr: 0x5B68, symBinAddr: 0x9B0C, symSize: 0x24 } + - { offsetInCU: 0x2E6C, offset: 0xABBBA, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x5B8C, symBinAddr: 0x9B30, symSize: 0x40 } + - { offsetInCU: 0x2E80, offset: 0xABBCE, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x5C0C, symBinAddr: 0x9BB0, symSize: 0x44 } + - { offsetInCU: 0x2E94, offset: 0xABBE2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU0_Tf2nni_nTA', symObjAddr: 0x5CB0, symBinAddr: 0x9C54, symSize: 0x28 } + - { offsetInCU: 0x2ED1, offset: 0xABC1F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x5CFC, symBinAddr: 0x9CA0, symSize: 0x8 } + - { offsetInCU: 0x36E5, offset: 0xAC433, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x100, symBinAddr: 0x40A8, symSize: 0x178 } + - { offsetInCU: 0x3901, offset: 0xAC64F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x2C8, symBinAddr: 0x4270, symSize: 0x10 } + - { offsetInCU: 0x3921, offset: 0xAC66F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x2C8, symBinAddr: 0x4270, symSize: 0x10 } + - { offsetInCU: 0x3950, offset: 0xAC69E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x2EC, symBinAddr: 0x4294, symSize: 0x14 } + - { offsetInCU: 0x3970, offset: 0xAC6BE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x2EC, symBinAddr: 0x4294, symSize: 0x14 } + - { offsetInCU: 0x399F, offset: 0xAC6ED, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x310, symBinAddr: 0x42B8, symSize: 0x10 } + - { offsetInCU: 0x39BF, offset: 0xAC70D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x310, symBinAddr: 0x42B8, symSize: 0x10 } + - { offsetInCU: 0x39F5, offset: 0xAC743, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg', symObjAddr: 0x354, symBinAddr: 0x42FC, symSize: 0x124 } + - { offsetInCU: 0x3B0A, offset: 0xAC858, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgySv_SitcfU_Tf4nnd_n', symObjAddr: 0x34EC, symBinAddr: 0x7490, symSize: 0x4 } + - { offsetInCU: 0x3B3E, offset: 0xAC88C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF', symObjAddr: 0x478, symBinAddr: 0x4420, symSize: 0x198 } + - { offsetInCU: 0x3D68, offset: 0xACAB6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfC', symObjAddr: 0x644, symBinAddr: 0x45EC, symSize: 0x20 } + - { offsetInCU: 0x3D7C, offset: 0xACACA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfc', symObjAddr: 0x664, symBinAddr: 0x460C, symSize: 0xA4 } + - { offsetInCU: 0x3E94, offset: 0xACBE2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x864, symBinAddr: 0x480C, symSize: 0x44 } + - { offsetInCU: 0x3EE7, offset: 0xACC35, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x90C, symBinAddr: 0x48B4, symSize: 0x60 } + - { offsetInCU: 0x3F57, offset: 0xACCA5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0xA20, symBinAddr: 0x49C8, symSize: 0x48 } + - { offsetInCU: 0x3F7C, offset: 0xACCCA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0xA68, symBinAddr: 0x4A10, symSize: 0x3C } + - { offsetInCU: 0x3FD8, offset: 0xACD26, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0xAEC, symBinAddr: 0x4A94, symSize: 0x48 } + - { offsetInCU: 0x3FFD, offset: 0xACD4B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xDFC, symBinAddr: 0x4DA4, symSize: 0x48 } + - { offsetInCU: 0x419A, offset: 0xACEE8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xF30, symBinAddr: 0x4ED8, symSize: 0x434 } + - { offsetInCU: 0x4518, offset: 0xAD266, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x1364, symBinAddr: 0x530C, symSize: 0x5A4 } + - { offsetInCU: 0x480D, offset: 0xAD55B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1934, symBinAddr: 0x58DC, symSize: 0x16C } + - { offsetInCU: 0x4999, offset: 0xAD6E7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1B04, symBinAddr: 0x5AA8, symSize: 0x50 } + - { offsetInCU: 0x49AD, offset: 0xAD6FB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1B54, symBinAddr: 0x5AF8, symSize: 0x2D8 } + - { offsetInCU: 0x4A31, offset: 0xAD77F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1E4C, symBinAddr: 0x5DF0, symSize: 0x260 } + - { offsetInCU: 0x4AF9, offset: 0xAD847, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVF', symObjAddr: 0x20D4, symBinAddr: 0x6078, symSize: 0x13C } + - { offsetInCU: 0x4C8F, offset: 0xAD9DD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x2268, symBinAddr: 0x620C, symSize: 0x60 } + - { offsetInCU: 0x4CF0, offset: 0xADA3E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x22FC, symBinAddr: 0x62A0, symSize: 0x44 } + - { offsetInCU: 0x4D43, offset: 0xADA91, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23A0, symBinAddr: 0x6344, symSize: 0x4 } + - { offsetInCU: 0x4D57, offset: 0xADAA5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23B0, symBinAddr: 0x6354, symSize: 0x4 } + - { offsetInCU: 0x4D6B, offset: 0xADAB9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23C0, symBinAddr: 0x6364, symSize: 0x4 } + - { offsetInCU: 0x4DC9, offset: 0xADB17, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ', symObjAddr: 0x2430, symBinAddr: 0x63D4, symSize: 0x2A0 } + - { offsetInCU: 0x4F48, offset: 0xADC96, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_', symObjAddr: 0x2A58, symBinAddr: 0x69FC, symSize: 0x4D0 } + - { offsetInCU: 0x5111, offset: 0xADE5F, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x30F0, symBinAddr: 0x7094, symSize: 0xE8 } + - { offsetInCU: 0x5146, offset: 0xADE94, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x31D8, symBinAddr: 0x717C, symSize: 0x1F4 } + - { offsetInCU: 0x51A3, offset: 0xADEF1, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x33CC, symBinAddr: 0x7370, symSize: 0x1C } + - { offsetInCU: 0x51E1, offset: 0xADF2F, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x33E8, symBinAddr: 0x738C, symSize: 0x104 } + - { offsetInCU: 0x26, offset: 0xAE309, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xAC864, symSize: 0x26E4 } + - { offsetInCU: 0x40, offset: 0xAE323, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9EA8, symBinAddr: 0x4F9188, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0xAE375, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFEA8, symBinAddr: 0x4FF188, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0xAE3D9, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFED0, symBinAddr: 0x4FF1B0, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0xAE3EF, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x102D8, symBinAddr: 0x4FF5B8, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0xAE406, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFF18, symBinAddr: 0x4FF1F8, symSize: 0x0 } + - { offsetInCU: 0xE22, offset: 0xAF105, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xAC864, symSize: 0x26E4 } + - { offsetInCU: 0x4BAD, offset: 0xB2E90, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9A24, symBinAddr: 0xB6288, symSize: 0x210 } + - { offsetInCU: 0x4E0E, offset: 0xB30F1, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E24, symBinAddr: 0xB1688, symSize: 0x1B8 } + - { offsetInCU: 0x5399, offset: 0xB367C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0xAEF48, symSize: 0x5A8 } + - { offsetInCU: 0x5EE1, offset: 0xB41C4, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0xAF4F0, symSize: 0x674 } + - { offsetInCU: 0x6290, offset: 0xB4573, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3300, symBinAddr: 0xAFB64, symSize: 0x1F0 } + - { offsetInCU: 0x67A5, offset: 0xB4A88, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x34F0, symBinAddr: 0xAFD54, symSize: 0x7A8 } + - { offsetInCU: 0x75B2, offset: 0xB5895, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3C98, symBinAddr: 0xB04FC, symSize: 0x614 } + - { offsetInCU: 0x7F41, offset: 0xB6224, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x42AC, symBinAddr: 0xB0B10, symSize: 0xB78 } + - { offsetInCU: 0x9472, offset: 0xB7755, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x50D0, symBinAddr: 0xB1934, symSize: 0x23CC } + - { offsetInCU: 0xC9D7, offset: 0xBACBA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x4FDC, symBinAddr: 0xB1840, symSize: 0xF4 } + - { offsetInCU: 0xCBD2, offset: 0xBAEB5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x749C, symBinAddr: 0xB3D00, symSize: 0x30 } + - { offsetInCU: 0xCCC3, offset: 0xBAFA6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x74CC, symBinAddr: 0xB3D30, symSize: 0x58 } + - { offsetInCU: 0xCD38, offset: 0xBB01B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0xB3D88, symSize: 0x4 } + - { offsetInCU: 0xCD80, offset: 0xBB063, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0xB3D88, symSize: 0x4 } + - { offsetInCU: 0xCDAF, offset: 0xBB092, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0xB3D88, symSize: 0x4 } + - { offsetInCU: 0xCDD3, offset: 0xBB0B6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7528, symBinAddr: 0xB3D8C, symSize: 0x8C } + - { offsetInCU: 0xCF26, offset: 0xBB209, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0xB3E18, symSize: 0x4 } + - { offsetInCU: 0xCF5F, offset: 0xBB242, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0xB3E18, symSize: 0x4 } + - { offsetInCU: 0xD1F8, offset: 0xBB4DB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x75B8, symBinAddr: 0xB3E1C, symSize: 0x1870 } + - { offsetInCU: 0xF966, offset: 0xBDC49, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9C34, symBinAddr: 0xB6498, symSize: 0x200 } + - { offsetInCU: 0xFECD, offset: 0xBE1B0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8E28, symBinAddr: 0xB568C, symSize: 0x20 } + - { offsetInCU: 0x1036A, offset: 0xBE64D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8E48, symBinAddr: 0xB56AC, symSize: 0xBDC } + - { offsetInCU: 0x26, offset: 0xBF3DA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xB6698, symSize: 0x1E0 } + - { offsetInCU: 0x1D2, offset: 0xBF586, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xB6698, symSize: 0x1E0 } + - { offsetInCU: 0x26, offset: 0xBF821, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xB6878, symSize: 0x3C } + - { offsetInCU: 0x34, offset: 0xBF82F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xB6878, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xBF93F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xB68B4, symSize: 0x90 } + - { offsetInCU: 0x34, offset: 0xBF94D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xB68B4, symSize: 0x90 } + - { offsetInCU: 0x86, offset: 0xBFAB0, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0x4FF680, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0xBFAE2, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0x4FF610, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0xBFB04, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0x4FF640, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0xBFB1A, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0x4FF670, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0xBFDE1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xB6944, symSize: 0x18 } + - { offsetInCU: 0x3FB, offset: 0xBFE25, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xB6944, symSize: 0x18 } + - { offsetInCU: 0x594, offset: 0xBFFBE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0xB695C, symSize: 0x18 } + - { offsetInCU: 0x63F, offset: 0xC0069, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0xB6974, symSize: 0x300 } + - { offsetInCU: 0x10C0, offset: 0xC0AEA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0xB6C74, symSize: 0xAC } + - { offsetInCU: 0x13B6, offset: 0xC0DE0, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0xB6D20, symSize: 0x4D0 } + - { offsetInCU: 0x24CA, offset: 0xC1EF4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0xB71F0, symSize: 0x28C } + - { offsetInCU: 0x2B3F, offset: 0xC2569, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0xB747C, symSize: 0xF4 } + - { offsetInCU: 0x2D4A, offset: 0xC2774, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0xB7570, symSize: 0x168 } + - { offsetInCU: 0x26, offset: 0xC2A97, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB76D8, symSize: 0x38 } + - { offsetInCU: 0xFA, offset: 0xC2B6B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB76D8, symSize: 0x38 } + - { offsetInCU: 0x12C, offset: 0xC2B9D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB76D8, symSize: 0x38 } + - { offsetInCU: 0x199, offset: 0xC2C0A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xB7710, symSize: 0x3C } + - { offsetInCU: 0x1F3, offset: 0xC2C64, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xB7710, symSize: 0x3C } + - { offsetInCU: 0x31B, offset: 0xC2D8C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0xB774C, symSize: 0x5C } + - { offsetInCU: 0x517, offset: 0xC2F88, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0xB77A8, symSize: 0x1C } + - { offsetInCU: 0x636, offset: 0xC30A7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0xB77C4, symSize: 0x54 } + - { offsetInCU: 0x6D0, offset: 0xC3141, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0xB7818, symSize: 0x4C } + - { offsetInCU: 0x8A8, offset: 0xC3319, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xB7864, symSize: 0xA8 } + - { offsetInCU: 0x90C, offset: 0xC337D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xB7864, symSize: 0xA8 } + - { offsetInCU: 0xBA6, offset: 0xC3617, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0xB790C, symSize: 0x124 } + - { offsetInCU: 0xEC3, offset: 0xC3934, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xB7A30, symSize: 0xC8 } + - { offsetInCU: 0xF43, offset: 0xC39B4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xB7A30, symSize: 0xC8 } + - { offsetInCU: 0x10B0, offset: 0xC3B21, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0xB7AF8, symSize: 0x180 } + - { offsetInCU: 0x134C, offset: 0xC3DBD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x5A0, symBinAddr: 0xB7C78, symSize: 0x16C } + - { offsetInCU: 0x14BB, offset: 0xC3F2C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x70C, symBinAddr: 0xB7DE4, symSize: 0x18 } + - { offsetInCU: 0x1522, offset: 0xC3F93, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x724, symBinAddr: 0xB7DFC, symSize: 0xC } + - { offsetInCU: 0x155B, offset: 0xC3FCC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x730, symBinAddr: 0xB7E08, symSize: 0x8 } + - { offsetInCU: 0x15DF, offset: 0xC4050, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x738, symBinAddr: 0xB7E10, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xC41FD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xB7E4C, symSize: 0x140 } + - { offsetInCU: 0x34, offset: 0xC420B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xB7E4C, symSize: 0x140 } + - { offsetInCU: 0x34, offset: 0xC4311, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x388, symBinAddr: 0xB756E8, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xC4353, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xB7F8C, symSize: 0x35C } + - { offsetInCU: 0x76, offset: 0xC43A3, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x500000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xC4427, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x525000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xC4688, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xB7F8C, symSize: 0x35C } + - { offsetInCU: 0xC70, offset: 0xC4F9D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0xB82E8, symSize: 0x1FC } + - { offsetInCU: 0x115F, offset: 0xC548C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0xB84E4, symSize: 0x1B8 } + - { offsetInCU: 0x10, offset: 0xC5861, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xB86A0, symSize: 0x1A0 } + - { offsetInCU: 0x50, offset: 0xC58A1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xB86A0, symSize: 0x1A0 } + - { offsetInCU: 0x5E, offset: 0xC58AF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0xB8840, symSize: 0x60 } + - { offsetInCU: 0x81, offset: 0xC58D2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0xB88A0, symSize: 0x288 } + - { offsetInCU: 0x10, offset: 0xC58C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xB8B30, symSize: 0x130 } + - { offsetInCU: 0x48, offset: 0xC58FB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xB8B30, symSize: 0x130 } + - { offsetInCU: 0x5F, offset: 0xC5912, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0xB8C60, symSize: 0x70 } + - { offsetInCU: 0x75, offset: 0xC5928, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0xB8CD0, symSize: 0x160 } + - { offsetInCU: 0x7A, offset: 0xC592D, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0xB8E30, symSize: 0x378 } + - { offsetInCU: 0x10, offset: 0xC593B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xB91C0, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xC5973, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xB91C0, symSize: 0x3A0 } + - { offsetInCU: 0x4C, offset: 0xC5977, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0xB9560, symSize: 0x6C0 } + - { offsetInCU: 0x66, offset: 0xC5991, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0xB9C20, symSize: 0x1138 } + - { offsetInCU: 0x50, offset: 0xC59DD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0xBAEC0, symSize: 0x1180 } + - { offsetInCU: 0x66, offset: 0xC59F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0xBC040, symSize: 0x1410 } + - { offsetInCU: 0x10, offset: 0xC59E9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBD460, symSize: 0x240 } + - { offsetInCU: 0x45, offset: 0xC5A1E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBD460, symSize: 0x240 } + - { offsetInCU: 0x4D, offset: 0xC5A26, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0xBD6A0, symSize: 0x9E0 } + - { offsetInCU: 0x63, offset: 0xC5A3C, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0xBE080, symSize: 0x650 } + - { offsetInCU: 0x10, offset: 0xC5A4B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBE6E0, symSize: 0x40 } + - { offsetInCU: 0x47, offset: 0xC5A82, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBE6E0, symSize: 0x40 } + - { offsetInCU: 0x5D, offset: 0xC5A98, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0xBE720, symSize: 0x40 } + - { offsetInCU: 0x76, offset: 0xC5AB1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0xBE760, symSize: 0x40 } + - { offsetInCU: 0x81, offset: 0xC5ABC, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0xBE7A0, symSize: 0x1E0 } + - { offsetInCU: 0x97, offset: 0xC5AD2, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0xBE980, symSize: 0x170 } + - { offsetInCU: 0xAB, offset: 0xC5AE6, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0xBEAF0, symSize: 0x50 } + - { offsetInCU: 0xC3, offset: 0xC5AFE, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0xBEB40, symSize: 0x50 } + - { offsetInCU: 0xD9, offset: 0xC5B14, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0xBEB90, symSize: 0x50 } + - { offsetInCU: 0xEF, offset: 0xC5B2A, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0xBEBE0, symSize: 0x60 } + - { offsetInCU: 0x111, offset: 0xC5B4C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0xBEC40, symSize: 0x1E0 } + - { offsetInCU: 0x124, offset: 0xC5B5F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0xBEE20, symSize: 0x360 } + - { offsetInCU: 0x141, offset: 0xC5B7C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0xBF180, symSize: 0x2D0 } + - { offsetInCU: 0x156, offset: 0xC5B91, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0xBF450, symSize: 0x2B0 } + - { offsetInCU: 0x170, offset: 0xC5BAB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0xBF700, symSize: 0x250 } + - { offsetInCU: 0x184, offset: 0xC5BBF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0xBF950, symSize: 0x60 } + - { offsetInCU: 0x19A, offset: 0xC5BD5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0xBF9B0, symSize: 0x44 } + - { offsetInCU: 0x10, offset: 0xC5BCB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xBFA00, symSize: 0xB90 } + - { offsetInCU: 0x4C, offset: 0xC5C07, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xBFA00, symSize: 0xB90 } + - { offsetInCU: 0x62, offset: 0xC5C1D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0xC0590, symSize: 0xB98 } + - { offsetInCU: 0x10, offset: 0xC5C17, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC1140, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5C58, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC1140, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5C58, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xC1F80, symSize: 0x7E0 } + - { offsetInCU: 0x10, offset: 0xC5C63, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC2780, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5CA4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC2780, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5CA4, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xC35C0, symSize: 0x1F0 } ... diff --git a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasSVG.yml b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasSVG.yml index a324c52eb..c9d58288a 100644 --- a/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasSVG.yml +++ b/packages/canvas-svg/src-native/ios/dist/CanvasSVG.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasSVG.yml @@ -2,290 +2,308 @@ triple: 'x86_64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/CanvasSVG' relocations: - - { offsetInCU: 0x34, offset: 0xAB77E, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x5E1000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0xAB7B3, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x5E1030, symSize: 0x0 } - - { offsetInCU: 0x27, offset: 0xAB7F0, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x1880, symSize: 0xC5 } - - { offsetInCU: 0x66, offset: 0xAB82F, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x1880, symSize: 0xC5 } - - { offsetInCU: 0x1D9, offset: 0xAB9A2, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xC5, symBinAddr: 0x1945, symSize: 0xC5 } - - { offsetInCU: 0x65, offset: 0xABB7F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x1A10, symSize: 0x40 } - - { offsetInCU: 0xBB, offset: 0xABBD5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvsTo', symObjAddr: 0x70, symBinAddr: 0x1A80, symSize: 0x40 } - - { offsetInCU: 0x114, offset: 0xABC2E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x110, symBinAddr: 0x1B20, symSize: 0x40 } - - { offsetInCU: 0x16A, offset: 0xABC84, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x190, symBinAddr: 0x1BA0, symSize: 0x60 } - - { offsetInCU: 0x1C5, offset: 0xABCDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvgTo', symObjAddr: 0x280, symBinAddr: 0x1C90, symSize: 0x40 } - - { offsetInCU: 0x21B, offset: 0xABD35, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvsTo', symObjAddr: 0x2F0, symBinAddr: 0x1D00, symSize: 0x40 } - - { offsetInCU: 0x274, offset: 0xABD8E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x3D0, symBinAddr: 0x1DE0, symSize: 0x20 } - - { offsetInCU: 0x2CA, offset: 0xABDE4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x3F0, symBinAddr: 0x1E00, symSize: 0x10 } - - { offsetInCU: 0x323, offset: 0xABE3D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x400, symBinAddr: 0x1E10, symSize: 0x20 } - - { offsetInCU: 0x379, offset: 0xABE93, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x420, symBinAddr: 0x1E30, symSize: 0x10 } - - { offsetInCU: 0x3D2, offset: 0xABEEC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x430, symBinAddr: 0x1E40, symSize: 0x20 } - - { offsetInCU: 0x428, offset: 0xABF42, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x450, symBinAddr: 0x1E60, symSize: 0x10 } - - { offsetInCU: 0x481, offset: 0xABF9B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x460, symBinAddr: 0x1E70, symSize: 0x40 } - - { offsetInCU: 0x4ED, offset: 0xAC007, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x4D0, symBinAddr: 0x1EE0, symSize: 0x50 } - - { offsetInCU: 0x5E1, offset: 0xAC0FB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScaleSfyFTo', symObjAddr: 0xB10, symBinAddr: 0x2520, symSize: 0xB0 } - - { offsetInCU: 0x6D2, offset: 0xAC1EC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x14E0, symBinAddr: 0x2EF0, symSize: 0x30 } - - { offsetInCU: 0x704, offset: 0xAC21E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x1830, symBinAddr: 0x3240, symSize: 0x30 } - - { offsetInCU: 0x736, offset: 0xAC250, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1870, symBinAddr: 0x3270, symSize: 0x30 } - - { offsetInCU: 0x77E, offset: 0xAC298, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x18A0, symBinAddr: 0x32A0, symSize: 0x20 } - - { offsetInCU: 0x7F2, offset: 0xAC30C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1D00, symBinAddr: 0x3700, symSize: 0x30 } - - { offsetInCU: 0x829, offset: 0xAC343, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x1F90, symBinAddr: 0x3990, symSize: 0x30 } - - { offsetInCU: 0x87B, offset: 0xAC395, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x21E0, symBinAddr: 0x3BC0, symSize: 0x80 } - - { offsetInCU: 0x8EE, offset: 0xAC408, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x2400, symBinAddr: 0x3DE0, symSize: 0x30 } - - { offsetInCU: 0x920, offset: 0xAC43A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x24B0, symBinAddr: 0x3E90, symSize: 0x30 } - - { offsetInCU: 0xA4E, offset: 0xAC568, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x4BA0, symBinAddr: 0x6580, symSize: 0x17D0 } - - { offsetInCU: 0x16BB, offset: 0xAD1D5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZTf4nd_n', symObjAddr: 0x6370, symBinAddr: 0x7D50, symSize: 0x2B0 } - - { offsetInCU: 0x18BE, offset: 0xAD3D8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZTf4nd_n', symObjAddr: 0x6620, symBinAddr: 0x8000, symSize: 0x3D0 } - - { offsetInCU: 0x1AF2, offset: 0xAD60C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZTf4nd_n', symObjAddr: 0x69F0, symBinAddr: 0x83D0, symSize: 0x470 } - - { offsetInCU: 0x1D54, offset: 0xAD86E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvpACTK', symObjAddr: 0xB0, symBinAddr: 0x1AC0, symSize: 0x40 } - - { offsetInCU: 0x1D8A, offset: 0xAD8A4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTK', symObjAddr: 0x1F0, symBinAddr: 0x1C00, symSize: 0x40 } - - { offsetInCU: 0x1DC0, offset: 0xAD8DA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTk', symObjAddr: 0x230, symBinAddr: 0x1C40, symSize: 0x50 } - - { offsetInCU: 0x1DEE, offset: 0xAD908, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvpACTK', symObjAddr: 0x330, symBinAddr: 0x1D40, symSize: 0x40 } - - { offsetInCU: 0x1E24, offset: 0xAD93E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x570, symBinAddr: 0x1F80, symSize: 0x40 } - - { offsetInCU: 0x1E5A, offset: 0xAD974, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x5B0, symBinAddr: 0x1FC0, symSize: 0x50 } - - { offsetInCU: 0x1F15, offset: 0xADA2F, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x1C60, symBinAddr: 0x3660, symSize: 0x40 } - - { offsetInCU: 0x1F29, offset: 0xADA43, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x1CE0, symBinAddr: 0x36E0, symSize: 0x20 } - - { offsetInCU: 0x1F58, offset: 0xADA72, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x46F0, symBinAddr: 0x60D0, symSize: 0x70 } - - { offsetInCU: 0x1FAC, offset: 0xADAC6, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSS_Tgm5', symObjAddr: 0x4830, symBinAddr: 0x6210, symSize: 0x80 } - - { offsetInCU: 0x23F6, offset: 0xADF10, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6E90, symBinAddr: 0x8870, symSize: 0x20 } - - { offsetInCU: 0x240A, offset: 0xADF24, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x6EB0, symBinAddr: 0x8890, symSize: 0x20 } - - { offsetInCU: 0x241E, offset: 0xADF38, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x6ED0, symBinAddr: 0x88B0, symSize: 0x10 } - - { offsetInCU: 0x2432, offset: 0xADF4C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6F60, symBinAddr: 0x8940, symSize: 0x20 } - - { offsetInCU: 0x2446, offset: 0xADF60, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6FC0, symBinAddr: 0x89A0, symSize: 0x20 } - - { offsetInCU: 0x245A, offset: 0xADF74, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x7200, symBinAddr: 0x8BE0, symSize: 0x10 } - - { offsetInCU: 0x246E, offset: 0xADF88, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x7210, symBinAddr: 0x8BF0, symSize: 0x10 } - - { offsetInCU: 0x2482, offset: 0xADF9C, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x7220, symBinAddr: 0x8C00, symSize: 0x20 } - - { offsetInCU: 0x2496, offset: 0xADFB0, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x7240, symBinAddr: 0x8C20, symSize: 0x30 } - - { offsetInCU: 0x24B5, offset: 0xADFCF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x72E0, symBinAddr: 0x8CC0, symSize: 0x20 } - - { offsetInCU: 0x24DE, offset: 0xADFF8, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x7300, symBinAddr: 0x8CE0, symSize: 0x30 } - - { offsetInCU: 0x24F2, offset: 0xAE00C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x7390, symBinAddr: 0x8D70, symSize: 0x20 } - - { offsetInCU: 0x2526, offset: 0xAE040, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x73E0, symBinAddr: 0x8DC0, symSize: 0x30 } - - { offsetInCU: 0x253A, offset: 0xAE054, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_yyScMYccfU_Tf2niiin_nTA', symObjAddr: 0x75C0, symBinAddr: 0x8FA0, symSize: 0x120 } - - { offsetInCU: 0x261F, offset: 0xAE139, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x7700, symBinAddr: 0x90E0, symSize: 0x10 } - - { offsetInCU: 0x2BB4, offset: 0xAE6CE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvg', symObjAddr: 0x40, symBinAddr: 0x1A50, symSize: 0x30 } - - { offsetInCU: 0x2C3A, offset: 0xAE754, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg', symObjAddr: 0x150, symBinAddr: 0x1B60, symSize: 0x40 } - - { offsetInCU: 0x2C90, offset: 0xAE7AA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvg', symObjAddr: 0x2C0, symBinAddr: 0x1CD0, symSize: 0x30 } - - { offsetInCU: 0x2D87, offset: 0xAE8A1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x4A0, symBinAddr: 0x1EB0, symSize: 0x30 } - - { offsetInCU: 0x2DD8, offset: 0xAE8F2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x520, symBinAddr: 0x1F30, symSize: 0x50 } - - { offsetInCU: 0x2E4A, offset: 0xAE964, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0x600, symBinAddr: 0x2010, symSize: 0x40 } - - { offsetInCU: 0x2E6F, offset: 0xAE989, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0x640, symBinAddr: 0x2050, symSize: 0x30 } - - { offsetInCU: 0x2EDE, offset: 0xAE9F8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0x730, symBinAddr: 0x2140, symSize: 0x40 } - - { offsetInCU: 0x2F03, offset: 0xAEA1D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xA90, symBinAddr: 0x24A0, symSize: 0x40 } - - { offsetInCU: 0x30A0, offset: 0xAEBBA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xBC0, symBinAddr: 0x25D0, symSize: 0x460 } - - { offsetInCU: 0x33F6, offset: 0xAEF10, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x1020, symBinAddr: 0x2A30, symSize: 0x4B0 } - - { offsetInCU: 0x3696, offset: 0xAF1B0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1510, symBinAddr: 0x2F20, symSize: 0x320 } - - { offsetInCU: 0x3A1E, offset: 0xAF538, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x18C0, symBinAddr: 0x32C0, symSize: 0x80 } - - { offsetInCU: 0x3A32, offset: 0xAF54C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1940, symBinAddr: 0x3340, symSize: 0x320 } - - { offsetInCU: 0x3AAE, offset: 0xAF5C8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1D30, symBinAddr: 0x3730, symSize: 0x260 } - - { offsetInCU: 0x3B5D, offset: 0xAF677, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9drawImage33_C2B5A81EA80ED94FA09E8C035710AE36LLyySo6CGRectVF', symObjAddr: 0x1FC0, symBinAddr: 0x39C0, symSize: 0x200 } - - { offsetInCU: 0x3D61, offset: 0xAF87B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x2260, symBinAddr: 0x3C40, symSize: 0x1A0 } - - { offsetInCU: 0x3F3B, offset: 0xAFA55, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2430, symBinAddr: 0x3E10, symSize: 0x80 } - - { offsetInCU: 0x3FFA, offset: 0xAFB14, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ', symObjAddr: 0x24E0, symBinAddr: 0x3EC0, symSize: 0x10 } - - { offsetInCU: 0x400E, offset: 0xAFB28, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ', symObjAddr: 0x2510, symBinAddr: 0x3EF0, symSize: 0x10 } - - { offsetInCU: 0x4022, offset: 0xAFB3C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ', symObjAddr: 0x2540, symBinAddr: 0x3F20, symSize: 0x10 } - - { offsetInCU: 0x4042, offset: 0xAFB5C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ', symObjAddr: 0x25B0, symBinAddr: 0x3F90, symSize: 0x270 } - - { offsetInCU: 0x40AD, offset: 0xAFBC7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x2820, symBinAddr: 0x4200, symSize: 0x470 } - - { offsetInCU: 0x43A0, offset: 0xAFEBA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x2D30, symBinAddr: 0x4710, symSize: 0x9D0 } - - { offsetInCU: 0x4528, offset: 0xB0042, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x3A70, symBinAddr: 0x5450, symSize: 0xC20 } - - { offsetInCU: 0x46C7, offset: 0xB01E1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfD', symObjAddr: 0x46C0, symBinAddr: 0x60A0, symSize: 0x30 } - - { offsetInCU: 0x46EA, offset: 0xB0204, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x4760, symBinAddr: 0x6140, symSize: 0xD0 } - - { offsetInCU: 0x472D, offset: 0xB0247, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x48B0, symBinAddr: 0x6290, symSize: 0x220 } - - { offsetInCU: 0x479E, offset: 0xB02B8, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x4AD0, symBinAddr: 0x64B0, symSize: 0x20 } - - { offsetInCU: 0x47D5, offset: 0xB02EF, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x4AF0, symBinAddr: 0x64D0, symSize: 0xB0 } - - { offsetInCU: 0x26, offset: 0xB0610, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xABAF0, symSize: 0x3990 } - - { offsetInCU: 0x40, offset: 0xB062A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0xEEC0, symBinAddr: 0x618470, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0xB067C, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0x14EC0, symBinAddr: 0x61E470, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0xB06E0, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0x14EE8, symBinAddr: 0x61E498, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0xB06F6, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x152F0, symBinAddr: 0x61E8A0, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0xB070D, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0x14F30, symBinAddr: 0x61E4E0, symSize: 0x0 } - - { offsetInCU: 0xE22, offset: 0xB140C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xABAF0, symSize: 0x3990 } - - { offsetInCU: 0x4DAE, offset: 0xB5398, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0xE6E0, symBinAddr: 0xBA1D0, symSize: 0x3E0 } - - { offsetInCU: 0x4FF1, offset: 0xB55DB, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x7C20, symBinAddr: 0xB3710, symSize: 0x270 } - - { offsetInCU: 0x582C, offset: 0xB5E16, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x3990, symBinAddr: 0xAF480, symSize: 0xA10 } - - { offsetInCU: 0x684B, offset: 0xB6E35, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x43A0, symBinAddr: 0xAFE90, symSize: 0xA10 } - - { offsetInCU: 0x6EE9, offset: 0xB74D3, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x4DB0, symBinAddr: 0xB08A0, symSize: 0x2B0 } - - { offsetInCU: 0x74BC, offset: 0xB7AA6, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x5060, symBinAddr: 0xB0B50, symSize: 0xCD0 } - - { offsetInCU: 0x83FE, offset: 0xB89E8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x5D30, symBinAddr: 0xB1820, symSize: 0xB40 } - - { offsetInCU: 0x8F67, offset: 0xB9551, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x6870, symBinAddr: 0xB2360, symSize: 0x13B0 } - - { offsetInCU: 0xA567, offset: 0xBAB51, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x7FF0, symBinAddr: 0xB3AE0, symSize: 0x2A30 } - - { offsetInCU: 0xDC6D, offset: 0xBE257, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x7E90, symBinAddr: 0xB3980, symSize: 0x160 } - - { offsetInCU: 0xDEE7, offset: 0xBE4D1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0xAA20, symBinAddr: 0xB6510, symSize: 0x30 } - - { offsetInCU: 0xDFDC, offset: 0xBE5C6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0xAA50, symBinAddr: 0xB6540, symSize: 0x50 } - - { offsetInCU: 0xE051, offset: 0xBE63B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0xAAA0, symBinAddr: 0xB6590, symSize: 0x10 } - - { offsetInCU: 0xE0EC, offset: 0xBE6D6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0xAAB0, symBinAddr: 0xB65A0, symSize: 0xB0 } - - { offsetInCU: 0xE217, offset: 0xBE801, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0xAB60, symBinAddr: 0xB6650, symSize: 0x10 } - - { offsetInCU: 0xE4E9, offset: 0xBEAD3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0xAB70, symBinAddr: 0xB6660, symSize: 0x21A0 } - - { offsetInCU: 0x1118F, offset: 0xC1779, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0xEAC0, symBinAddr: 0xBA5B0, symSize: 0x2D1 } - - { offsetInCU: 0x117CF, offset: 0xC1DB9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0xCD10, symBinAddr: 0xB8800, symSize: 0x20 } - - { offsetInCU: 0x11C6C, offset: 0xC2256, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0xCD30, symBinAddr: 0xB8820, symSize: 0x19B0 } - - { offsetInCU: 0x26, offset: 0xC3306, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xBA890, symSize: 0x800 } - - { offsetInCU: 0x41, offset: 0xC3321, size: 0x8, addend: 0x0, symName: _aes_nohw_rcon, symObjAddr: 0x1B10, symBinAddr: 0x61E980, symSize: 0x0 } - - { offsetInCU: 0x484, offset: 0xC3764, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xBA890, symSize: 0x800 } - - { offsetInCU: 0x1B2B, offset: 0xC4E0B, size: 0x8, addend: 0x0, symName: _aes_nohw_sub_bytes, symObjAddr: 0x15F0, symBinAddr: 0xBBE80, symSize: 0x300 } - - { offsetInCU: 0x32EE, offset: 0xC65CE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_encrypt, symObjAddr: 0x800, symBinAddr: 0xBB090, symSize: 0x80 } - - { offsetInCU: 0x33DC, offset: 0xC66BC, size: 0x8, addend: 0x0, symName: _aes_nohw_expand_round_keys, symObjAddr: 0x880, symBinAddr: 0xBB110, symSize: 0x1A0 } - - { offsetInCU: 0x386D, offset: 0xC6B4D, size: 0x8, addend: 0x0, symName: _aes_nohw_to_batch, symObjAddr: 0xA20, symBinAddr: 0xBB2B0, symSize: 0x420 } - - { offsetInCU: 0x3D7D, offset: 0xC705D, size: 0x8, addend: 0x0, symName: _aes_nohw_encrypt_batch, symObjAddr: 0xE40, symBinAddr: 0xBB6D0, symSize: 0x380 } - - { offsetInCU: 0x424C, offset: 0xC752C, size: 0x8, addend: 0x0, symName: _aes_nohw_from_batch, symObjAddr: 0x11C0, symBinAddr: 0xBBA50, symSize: 0x250 } - - { offsetInCU: 0x498D, offset: 0xC7C6D, size: 0x8, addend: 0x0, symName: _aes_nohw_shift_rows, symObjAddr: 0x18F0, symBinAddr: 0xBC180, symSize: 0x149 } - - { offsetInCU: 0x4BF9, offset: 0xC7ED9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_ctr32_encrypt_blocks, symObjAddr: 0x1410, symBinAddr: 0xBBCA0, symSize: 0x1E0 } - - { offsetInCU: 0x26, offset: 0xC82FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xBC2D0, symSize: 0x2DC } - - { offsetInCU: 0x1D2, offset: 0xC84A6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xBC2D0, symSize: 0x2DC } - - { offsetInCU: 0x26, offset: 0xC86FF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xBC5B0, symSize: 0x87 } - - { offsetInCU: 0x34, offset: 0xC870D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xBC5B0, symSize: 0x87 } - - { offsetInCU: 0x26, offset: 0xC881D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xBC640, symSize: 0x46 } - - { offsetInCU: 0x34, offset: 0xC882B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xBC640, symSize: 0x46 } - - { offsetInCU: 0x86, offset: 0xC898E, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x15F0, symBinAddr: 0x61EA00, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0xC89C0, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1580, symBinAddr: 0x61E990, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0xC89E2, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x15B0, symBinAddr: 0x61E9C0, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0xC89F8, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x15E0, symBinAddr: 0x61E9F0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0xC8CBF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x150, symBinAddr: 0xBC690, symSize: 0x20 } - - { offsetInCU: 0x594, offset: 0xC8E9C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x250, symBinAddr: 0xBC6B0, symSize: 0x20 } - - { offsetInCU: 0x63F, offset: 0xC8F47, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x340, symBinAddr: 0xBC6D0, symSize: 0x3A0 } - - { offsetInCU: 0x11A7, offset: 0xC9AAF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x6E0, symBinAddr: 0xBCA70, symSize: 0x140 } - - { offsetInCU: 0x14A2, offset: 0xC9DAA, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x820, symBinAddr: 0xBCBB0, symSize: 0x6B0 } - - { offsetInCU: 0x26DA, offset: 0xCAFE2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xED0, symBinAddr: 0xBD260, symSize: 0x380 } - - { offsetInCU: 0x2D37, offset: 0xCB63F, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0x1250, symBinAddr: 0xBD5E0, symSize: 0x170 } - - { offsetInCU: 0x2F2F, offset: 0xCB837, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0x13C0, symBinAddr: 0xBD750, symSize: 0x1BF } - - { offsetInCU: 0x26, offset: 0xCBB82, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xBD910, symSize: 0x50 } - - { offsetInCU: 0xFA, offset: 0xCBC56, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xBD910, symSize: 0x50 } - - { offsetInCU: 0x18D, offset: 0xCBCE9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x50, symBinAddr: 0xBD960, symSize: 0x60 } - - { offsetInCU: 0x2F1, offset: 0xCBE4D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0xB0, symBinAddr: 0xBD9C0, symSize: 0x90 } - - { offsetInCU: 0x4C6, offset: 0xCC022, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0x140, symBinAddr: 0xBDA50, symSize: 0x20 } - - { offsetInCU: 0x5E3, offset: 0xCC13F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0x160, symBinAddr: 0xBDA70, symSize: 0xB0 } - - { offsetInCU: 0x696, offset: 0xCC1F2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x210, symBinAddr: 0xBDB20, symSize: 0x70 } - - { offsetInCU: 0x861, offset: 0xCC3BD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x280, symBinAddr: 0xBDB90, symSize: 0x170 } - - { offsetInCU: 0xB67, offset: 0xCC6C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x3F0, symBinAddr: 0xBDD00, symSize: 0x270 } - - { offsetInCU: 0xE6A, offset: 0xCC9C6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x660, symBinAddr: 0xBDF70, symSize: 0x1A0 } - - { offsetInCU: 0x105D, offset: 0xCCBB9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x800, symBinAddr: 0xBE110, symSize: 0x280 } - - { offsetInCU: 0x128C, offset: 0xCCDE8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0xC20, symBinAddr: 0xBE390, symSize: 0x20 } - - { offsetInCU: 0x12F3, offset: 0xCCE4F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0xC40, symBinAddr: 0xBE3B0, symSize: 0x20 } - - { offsetInCU: 0x132A, offset: 0xCCE86, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0xC60, symBinAddr: 0xBE3D0, symSize: 0x10 } - - { offsetInCU: 0x13AC, offset: 0xCCF08, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0xC70, symBinAddr: 0xBE3E0, symSize: 0x4A } - - { offsetInCU: 0x26, offset: 0xCD094, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xBE430, symSize: 0x129 } - - { offsetInCU: 0x34, offset: 0xCD0A2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xBE430, symSize: 0x129 } - - { offsetInCU: 0x34, offset: 0xCD1A4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_ia32cap_P, symObjAddr: 0x3F0, symBinAddr: 0xD5E370, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xCD1F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0xBE560, symSize: 0xF8 } - - { offsetInCU: 0xD5, offset: 0xCD2A8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0xBE560, symSize: 0xF8 } - - { offsetInCU: 0x26, offset: 0xCD3FD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0xBE660, symSize: 0x1210 } - - { offsetInCU: 0x92E, offset: 0xCDD05, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0xBE660, symSize: 0x1210 } - - { offsetInCU: 0x5347, offset: 0xD271E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base_adx, symObjAddr: 0x1210, symBinAddr: 0xBF870, symSize: 0x1E50 } - - { offsetInCU: 0x9B2F, offset: 0xD6F06, size: 0x8, addend: 0x0, symName: _inline_x25519_ge_dbl_4, symObjAddr: 0x3060, symBinAddr: 0xC16C0, symSize: 0x361 } - - { offsetInCU: 0x26, offset: 0xD82F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0xC1A30, symSize: 0xD0 } - - { offsetInCU: 0x303, offset: 0xD85D0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0xC1A30, symSize: 0xD0 } - - { offsetInCU: 0x5A4, offset: 0xD8871, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_update, symObjAddr: 0xD0, symBinAddr: 0xC1B00, symSize: 0x1C0 } - - { offsetInCU: 0x764, offset: 0xD8A31, size: 0x8, addend: 0x0, symName: _poly1305_blocks, symObjAddr: 0x5F0, symBinAddr: 0xC2020, symSize: 0x780 } - - { offsetInCU: 0x903, offset: 0xD8BD0, size: 0x8, addend: 0x0, symName: _poly1305_first_block, symObjAddr: 0x290, symBinAddr: 0xC1CC0, symSize: 0x360 } - - { offsetInCU: 0xEFC, offset: 0xD91C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_finish, symObjAddr: 0xD70, symBinAddr: 0xC27A0, symSize: 0xAA2 } - - { offsetInCU: 0x10, offset: 0xD9952, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0xC3242, symSize: 0x2AF } - - { offsetInCU: 0x51, offset: 0xD9993, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0xC3242, symSize: 0x2AF } - - { offsetInCU: 0x10, offset: 0xD9988, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0xC34F1, symSize: 0x1F4 } - - { offsetInCU: 0x54, offset: 0xD99CC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0xC34F1, symSize: 0x1F4 } - - { offsetInCU: 0x26, offset: 0xD99D4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xC36F0, symSize: 0x490 } - - { offsetInCU: 0x76, offset: 0xD9A24, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x61F000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xD9AA8, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x644000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xD9D09, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xC36F0, symSize: 0x490 } - - { offsetInCU: 0xC5A, offset: 0xDA608, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x490, symBinAddr: 0xC3B80, symSize: 0x300 } - - { offsetInCU: 0x1135, offset: 0xDAAE3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x790, symBinAddr: 0xC3E80, symSize: 0x25D } - - { offsetInCU: 0x10, offset: 0xDAEA8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xC4100, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xDAEE0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xC4100, symSize: 0x3A0 } - - { offsetInCU: 0x4D, offset: 0xDAEE5, size: 0x8, addend: 0x0, symName: ChaCha20_ssse3, symObjAddr: 0x3A0, symBinAddr: 0xC44A0, symSize: 0x220 } - - { offsetInCU: 0x60, offset: 0xDAEF8, size: 0x8, addend: 0x0, symName: ChaCha20_4x, symObjAddr: 0x5C0, symBinAddr: 0xC46C0, symSize: 0xA20 } - - { offsetInCU: 0x76, offset: 0xDAF0E, size: 0x8, addend: 0x0, symName: ChaCha20_8x, symObjAddr: 0xFE0, symBinAddr: 0xC50E0, symSize: 0xB4C } - - { offsetInCU: 0x10, offset: 0xDAF20, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0xC5C40, symSize: 0x40 } - - { offsetInCU: 0x48, offset: 0xDAF58, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0xC5C40, symSize: 0x40 } - - { offsetInCU: 0x4D, offset: 0xDAF5D, size: 0x8, addend: 0x0, symName: _aesni_encrypt2, symObjAddr: 0x40, symBinAddr: 0xC5C80, symSize: 0x60 } - - { offsetInCU: 0x63, offset: 0xDAF73, size: 0x8, addend: 0x0, symName: _aesni_encrypt3, symObjAddr: 0xA0, symBinAddr: 0xC5CE0, symSize: 0x70 } - - { offsetInCU: 0x79, offset: 0xDAF89, size: 0x8, addend: 0x0, symName: _aesni_encrypt4, symObjAddr: 0x110, symBinAddr: 0xC5D50, symSize: 0x90 } - - { offsetInCU: 0x8F, offset: 0xDAF9F, size: 0x8, addend: 0x0, symName: _aesni_encrypt6, symObjAddr: 0x1A0, symBinAddr: 0xC5DE0, symSize: 0xE0 } - - { offsetInCU: 0xA5, offset: 0xDAFB5, size: 0x8, addend: 0x0, symName: _aesni_encrypt8, symObjAddr: 0x280, symBinAddr: 0xC5EC0, symSize: 0x110 } - - { offsetInCU: 0xD9, offset: 0xDAFE9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x390, symBinAddr: 0xC5FD0, symSize: 0x940 } - - { offsetInCU: 0xEA, offset: 0xDAFFA, size: 0x8, addend: 0x0, symName: __aesni_set_encrypt_key, symObjAddr: 0xCD0, symBinAddr: 0xC6910, symSize: 0x44D } - - { offsetInCU: 0x10, offset: 0xDAFF0, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0xC6D60, symSize: 0x160 } - - { offsetInCU: 0x3B, offset: 0xDB01B, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0xC6D60, symSize: 0x160 } - - { offsetInCU: 0x54, offset: 0xDB034, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core_2x, symObjAddr: 0x160, symBinAddr: 0xC6EC0, symSize: 0x290 } - - { offsetInCU: 0x68, offset: 0xDB048, size: 0x8, addend: 0x0, symName: _vpaes_schedule_core, symObjAddr: 0x3F0, symBinAddr: 0xC7150, symSize: 0xF0 } - - { offsetInCU: 0x7F, offset: 0xDB05F, size: 0x8, addend: 0x0, symName: _vpaes_schedule_round, symObjAddr: 0x4E0, symBinAddr: 0xC7240, symSize: 0x21 } - - { offsetInCU: 0x99, offset: 0xDB079, size: 0x8, addend: 0x0, symName: _vpaes_schedule_low_round, symObjAddr: 0x501, symBinAddr: 0xC7261, symSize: 0x9F } - - { offsetInCU: 0xAF, offset: 0xDB08F, size: 0x8, addend: 0x0, symName: _vpaes_schedule_transform, symObjAddr: 0x5A0, symBinAddr: 0xC7300, symSize: 0x30 } - - { offsetInCU: 0xC2, offset: 0xDB0A2, size: 0x8, addend: 0x0, symName: _vpaes_schedule_mangle, symObjAddr: 0x5D0, symBinAddr: 0xC7330, symSize: 0x50 } - - { offsetInCU: 0xE9, offset: 0xDB0C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_set_encrypt_key, symObjAddr: 0x620, symBinAddr: 0xC7380, symSize: 0x30 } - - { offsetInCU: 0xF7, offset: 0xDB0D7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_encrypt, symObjAddr: 0x650, symBinAddr: 0xC73B0, symSize: 0x20 } - - { offsetInCU: 0x11A, offset: 0xDB0FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_ctr32_encrypt_blocks, symObjAddr: 0x670, symBinAddr: 0xC73D0, symSize: 0xD0 } - - { offsetInCU: 0x112, offset: 0xDB0F2, size: 0x8, addend: 0x0, symName: _vpaes_preheat, symObjAddr: 0x740, symBinAddr: 0xC74A0, symSize: 0x31 } - - { offsetInCU: 0x10, offset: 0xDB102, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xC74E0, symSize: 0x2A0 } - - { offsetInCU: 0x45, offset: 0xDB137, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xC74E0, symSize: 0x2A0 } - - { offsetInCU: 0x4C, offset: 0xDB13E, size: 0x8, addend: 0x0, symName: bn_mul4x_mont, symObjAddr: 0x2A0, symBinAddr: 0xC7780, symSize: 0x560 } - - { offsetInCU: 0x62, offset: 0xDB154, size: 0x8, addend: 0x0, symName: bn_sqr8x_mont, symObjAddr: 0x800, symBinAddr: 0xC7CE0, symSize: 0x220 } - - { offsetInCU: 0x79, offset: 0xDB16B, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont, symObjAddr: 0xA20, symBinAddr: 0xC7F00, symSize: 0x570 } - - { offsetInCU: 0x10, offset: 0xDB17A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0xC8480, symSize: 0x660 } - - { offsetInCU: 0x4D, offset: 0xDB1B7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0xC8480, symSize: 0x660 } - - { offsetInCU: 0x54, offset: 0xDB1BE, size: 0x8, addend: 0x0, symName: bn_mul4x_mont_gather5, symObjAddr: 0x660, symBinAddr: 0xC8AE0, symSize: 0x100 } - - { offsetInCU: 0x63, offset: 0xDB1CD, size: 0x8, addend: 0x0, symName: mul4x_internal, symObjAddr: 0x760, symBinAddr: 0xC8BE0, symSize: 0x7E0 } - - { offsetInCU: 0x85, offset: 0xDB1EF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_power5, symObjAddr: 0xF40, symBinAddr: 0xC93C0, symSize: 0x180 } - - { offsetInCU: 0xA3, offset: 0xDB20D, size: 0x8, addend: 0x0, symName: __bn_sqr8x_internal, symObjAddr: 0x10C0, symBinAddr: 0xC9540, symSize: 0x579 } - - { offsetInCU: 0xAA, offset: 0xDB214, size: 0x8, addend: 0x0, symName: __bn_sqr8x_reduction, symObjAddr: 0x1639, symBinAddr: 0xC9AB9, symSize: 0x347 } - - { offsetInCU: 0xC0, offset: 0xDB22A, size: 0x8, addend: 0x0, symName: __bn_post4x_internal, symObjAddr: 0x1980, symBinAddr: 0xC9E00, symSize: 0xA0 } - - { offsetInCU: 0xD9, offset: 0xDB243, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont_gather5, symObjAddr: 0x1A20, symBinAddr: 0xC9EA0, symSize: 0xE0 } - - { offsetInCU: 0xE8, offset: 0xDB252, size: 0x8, addend: 0x0, symName: mulx4x_internal, symObjAddr: 0x1B00, symBinAddr: 0xC9F80, symSize: 0x7E0 } - - { offsetInCU: 0xF9, offset: 0xDB263, size: 0x8, addend: 0x0, symName: bn_powerx5, symObjAddr: 0x22E0, symBinAddr: 0xCA760, symSize: 0x160 } - - { offsetInCU: 0x128, offset: 0xDB292, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_internal, symObjAddr: 0x2440, symBinAddr: 0xCA8C0, symSize: 0x637 } - - { offsetInCU: 0x12F, offset: 0xDB299, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_reduction, symObjAddr: 0x2A77, symBinAddr: 0xCAEF7, symSize: 0x329 } - - { offsetInCU: 0x145, offset: 0xDB2AF, size: 0x8, addend: 0x0, symName: __bn_postx4x_internal, symObjAddr: 0x2DA0, symBinAddr: 0xCB220, symSize: 0x90 } - - { offsetInCU: 0x163, offset: 0xDB2CD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_scatter5, symObjAddr: 0x2E30, symBinAddr: 0xCB2B0, symSize: 0x30 } - - { offsetInCU: 0x178, offset: 0xDB2E2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_gather5, symObjAddr: 0x2E60, symBinAddr: 0xCB2E0, symSize: 0x27F } - - { offsetInCU: 0x10, offset: 0xDB2E4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0xCB560, symSize: 0x80 } - - { offsetInCU: 0x4A, offset: 0xDB31E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0xCB560, symSize: 0x80 } - - { offsetInCU: 0x64, offset: 0xDB338, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0x80, symBinAddr: 0xCB5E0, symSize: 0x360 } - - { offsetInCU: 0x7E, offset: 0xDB352, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x3E0, symBinAddr: 0xCB940, symSize: 0x300 } - - { offsetInCU: 0x85, offset: 0xDB359, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_mul_montx, symObjAddr: 0x6E0, symBinAddr: 0xCBC40, symSize: 0x3C0 } - - { offsetInCU: 0x9B, offset: 0xDB36F, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_sqr_montx, symObjAddr: 0xAA0, symBinAddr: 0xCC000, symSize: 0x320 } - - { offsetInCU: 0xB5, offset: 0xDB389, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0xDC0, symBinAddr: 0xCC320, symSize: 0xA0 } - - { offsetInCU: 0xC4, offset: 0xDB398, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montq, symObjAddr: 0xE60, symBinAddr: 0xCC3C0, symSize: 0x240 } - - { offsetInCU: 0xE1, offset: 0xDB3B5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x10A0, symBinAddr: 0xCC600, symSize: 0x80 } - - { offsetInCU: 0xF0, offset: 0xDB3C4, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montq, symObjAddr: 0x1120, symBinAddr: 0xCC680, symSize: 0x1A0 } - - { offsetInCU: 0x106, offset: 0xDB3DA, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montx, symObjAddr: 0x12C0, symBinAddr: 0xCC820, symSize: 0x260 } - - { offsetInCU: 0x11C, offset: 0xDB3F0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montx, symObjAddr: 0x1520, symBinAddr: 0xCCA80, symSize: 0x1C0 } - - { offsetInCU: 0x142, offset: 0xDB416, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x16E0, symBinAddr: 0xCCC40, symSize: 0xE0 } - - { offsetInCU: 0x158, offset: 0xDB42C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x17C0, symBinAddr: 0xCCD20, symSize: 0xC0 } - - { offsetInCU: 0x162, offset: 0xDB436, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w5, symObjAddr: 0x1880, symBinAddr: 0xCCDE0, symSize: 0xC0 } - - { offsetInCU: 0x178, offset: 0xDB44C, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w7, symObjAddr: 0x1940, symBinAddr: 0xCCEA0, symSize: 0xE0 } - - { offsetInCU: 0x188, offset: 0xDB45C, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_toq, symObjAddr: 0x1A20, symBinAddr: 0xCCF80, symSize: 0x60 } - - { offsetInCU: 0x1A0, offset: 0xDB474, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromq, symObjAddr: 0x1A80, symBinAddr: 0xCCFE0, symSize: 0x60 } - - { offsetInCU: 0x1B1, offset: 0xDB485, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subq, symObjAddr: 0x1AE0, symBinAddr: 0xCD040, symSize: 0x40 } - - { offsetInCU: 0x1CC, offset: 0xDB4A0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2q, symObjAddr: 0x1B20, symBinAddr: 0xCD080, symSize: 0x60 } - - { offsetInCU: 0x1ED, offset: 0xDB4C1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x1B80, symBinAddr: 0xCD0E0, symSize: 0x320 } - - { offsetInCU: 0x200, offset: 0xDB4D4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x1EA0, symBinAddr: 0xCD400, symSize: 0x780 } - - { offsetInCU: 0x21D, offset: 0xDB4F1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0x2620, symBinAddr: 0xCDB80, symSize: 0x580 } - - { offsetInCU: 0x222, offset: 0xDB4F6, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_tox, symObjAddr: 0x2BA0, symBinAddr: 0xCE100, symSize: 0x60 } - - { offsetInCU: 0x23A, offset: 0xDB50E, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromx, symObjAddr: 0x2C00, symBinAddr: 0xCE160, symSize: 0x60 } - - { offsetInCU: 0x24B, offset: 0xDB51F, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subx, symObjAddr: 0x2C60, symBinAddr: 0xCE1C0, symSize: 0x60 } - - { offsetInCU: 0x266, offset: 0xDB53A, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2x, symObjAddr: 0x2CC0, symBinAddr: 0xCE220, symSize: 0x60 } - - { offsetInCU: 0x27F, offset: 0xDB553, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_doublex, symObjAddr: 0x2D20, symBinAddr: 0xCE280, symSize: 0x320 } - - { offsetInCU: 0x292, offset: 0xDB566, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_addx, symObjAddr: 0x3040, symBinAddr: 0xCE5A0, symSize: 0x760 } - - { offsetInCU: 0x2AF, offset: 0xDB583, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_add_affinex, symObjAddr: 0x37A0, symBinAddr: 0xCED00, symSize: 0x555 } - - { offsetInCU: 0x10, offset: 0xDB582, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0xCF260, symSize: 0x5A0 } - - { offsetInCU: 0x3D, offset: 0xDB5AF, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0xCF260, symSize: 0x5A0 } - - { offsetInCU: 0x61, offset: 0xDB5D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_decrypt, symObjAddr: 0x5A0, symBinAddr: 0xCF800, symSize: 0x140 } - - { offsetInCU: 0x63, offset: 0xDB5D5, size: 0x8, addend: 0x0, symName: _aesni_ctr32_6x, symObjAddr: 0x6E0, symBinAddr: 0xCF940, symSize: 0x180 } - - { offsetInCU: 0x8D, offset: 0xDB5FF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_encrypt, symObjAddr: 0x860, symBinAddr: 0xCFAC0, symSize: 0x423 } - - { offsetInCU: 0x10, offset: 0xDB5FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xCFF00, symSize: 0x260 } - - { offsetInCU: 0x48, offset: 0xDB632, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xCFF00, symSize: 0x260 } - - { offsetInCU: 0x5F, offset: 0xDB649, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x260, symBinAddr: 0xD0160, symSize: 0xC0 } - - { offsetInCU: 0x75, offset: 0xDB65F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x320, symBinAddr: 0xD0220, symSize: 0x660 } - - { offsetInCU: 0x88, offset: 0xDB672, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_avx, symObjAddr: 0x980, symBinAddr: 0xD0880, symSize: 0x1A0 } - - { offsetInCU: 0x9F, offset: 0xDB689, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_avx, symObjAddr: 0xB20, symBinAddr: 0xD0A20, symSize: 0x697 } - - { offsetInCU: 0x10, offset: 0xDB688, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xD10C0, symSize: 0x1240 } - - { offsetInCU: 0x51, offset: 0xDB6C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xD10C0, symSize: 0x1240 } - - { offsetInCU: 0x5A, offset: 0xDB6D2, size: 0x8, addend: 0x0, symName: sha512_block_data_order_avx, symObjAddr: 0x1240, symBinAddr: 0xD2300, symSize: 0x1176 } - - { offsetInCU: 0x10, offset: 0xDB6D4, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0xD3480, symSize: 0x200 } - - { offsetInCU: 0x44, offset: 0xDB708, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0xD3480, symSize: 0x200 } - - { offsetInCU: 0x66, offset: 0xDB72A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x200, symBinAddr: 0xD3680, symSize: 0x21C0 } - - { offsetInCU: 0x7C, offset: 0xDB740, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x23C0, symBinAddr: 0xD5840, symSize: 0x1D2D } - - { offsetInCU: 0x83, offset: 0xDB747, size: 0x8, addend: 0x0, symName: process_extra_in_trailer, symObjAddr: 0x40ED, symBinAddr: 0xD756D, symSize: 0x553 } - - { offsetInCU: 0x9C, offset: 0xDB760, size: 0x8, addend: 0x0, symName: chacha20_poly1305_open_avx2, symObjAddr: 0x4640, symBinAddr: 0xD7AC0, symSize: 0x25C0 } - - { offsetInCU: 0xB2, offset: 0xDB776, size: 0x8, addend: 0x0, symName: chacha20_poly1305_seal_avx2, symObjAddr: 0x6C00, symBinAddr: 0xDA080, symSize: 0x2F01 } - - { offsetInCU: 0x10, offset: 0xDB778, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xDCFC0, symSize: 0x1200 } - - { offsetInCU: 0x51, offset: 0xDB7B9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xDCFC0, symSize: 0x1200 } - - { offsetInCU: 0x5D, offset: 0xDB7C5, size: 0x8, addend: 0x0, symName: sha256_block_data_order_shaext, symObjAddr: 0x1200, symBinAddr: 0xDE1C0, symSize: 0x340 } - - { offsetInCU: 0x72, offset: 0xDB7DA, size: 0x8, addend: 0x0, symName: sha256_block_data_order_ssse3, symObjAddr: 0x1540, symBinAddr: 0xDE500, symSize: 0xEC0 } - - { offsetInCU: 0x86, offset: 0xDB7EE, size: 0x8, addend: 0x0, symName: sha256_block_data_order_avx, symObjAddr: 0x2400, symBinAddr: 0xDF3C0, symSize: 0xEF7 } + - { offsetInCU: 0x34, offset: 0xAB77E, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x55B000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xAB7B3, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x55B030, symSize: 0x0 } + - { offsetInCU: 0x27, offset: 0xAB7F0, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x1980, symSize: 0xC5 } + - { offsetInCU: 0x66, offset: 0xAB82F, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x1980, symSize: 0xC5 } + - { offsetInCU: 0x1D9, offset: 0xAB9A2, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xC5, symBinAddr: 0x1A45, symSize: 0xC5 } + - { offsetInCU: 0x65, offset: 0xABB7F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x1B10, symSize: 0x20 } + - { offsetInCU: 0xBB, offset: 0xABBD5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x20, symBinAddr: 0x1B30, symSize: 0x20 } + - { offsetInCU: 0x114, offset: 0xABC2E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x40, symBinAddr: 0x1B50, symSize: 0x20 } + - { offsetInCU: 0x16A, offset: 0xABC84, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x60, symBinAddr: 0x1B70, symSize: 0x20 } + - { offsetInCU: 0x1C5, offset: 0xABCDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x80, symBinAddr: 0x1B90, symSize: 0x20 } + - { offsetInCU: 0x21B, offset: 0xABD35, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0xA0, symBinAddr: 0x1BB0, symSize: 0x20 } + - { offsetInCU: 0x274, offset: 0xABD8E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0xC0, symBinAddr: 0x1BD0, symSize: 0x20 } + - { offsetInCU: 0x2CC, offset: 0xABDE6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvsTo', symObjAddr: 0xE0, symBinAddr: 0x1BF0, symSize: 0x30 } + - { offsetInCU: 0x325, offset: 0xABE3F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x110, symBinAddr: 0x1C20, symSize: 0x20 } + - { offsetInCU: 0x378, offset: 0xABE92, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0x130, symBinAddr: 0x1C40, symSize: 0x20 } + - { offsetInCU: 0x3D0, offset: 0xABEEA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvsTo', symObjAddr: 0x150, symBinAddr: 0x1C60, symSize: 0x30 } + - { offsetInCU: 0x433, offset: 0xABF4D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x360, symBinAddr: 0x1E70, symSize: 0x40 } + - { offsetInCU: 0x465, offset: 0xABF7F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x3A0, symBinAddr: 0x1EB0, symSize: 0x20 } + - { offsetInCU: 0x4D4, offset: 0xABFEE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x3E0, symBinAddr: 0x1EF0, symSize: 0x20 } + - { offsetInCU: 0x543, offset: 0xAC05D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x420, symBinAddr: 0x1F30, symSize: 0x20 } + - { offsetInCU: 0x59C, offset: 0xAC0B6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgTo', symObjAddr: 0x460, symBinAddr: 0x1F70, symSize: 0x30 } + - { offsetInCU: 0x5E4, offset: 0xAC0FE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyFTo', symObjAddr: 0x770, symBinAddr: 0x2280, symSize: 0x30 } + - { offsetInCU: 0x62C, offset: 0xAC146, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfcTo', symObjAddr: 0x870, symBinAddr: 0x2380, symSize: 0x20 } + - { offsetInCU: 0x664, offset: 0xAC17E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCfETo', symObjAddr: 0x8B0, symBinAddr: 0x23C0, symSize: 0x50 } + - { offsetInCU: 0x6B5, offset: 0xAC1CF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x900, symBinAddr: 0x2410, symSize: 0x20 } + - { offsetInCU: 0x70B, offset: 0xAC225, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x920, symBinAddr: 0x2430, symSize: 0x10 } + - { offsetInCU: 0x764, offset: 0xAC27E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x930, symBinAddr: 0x2440, symSize: 0x20 } + - { offsetInCU: 0x7BA, offset: 0xAC2D4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x950, symBinAddr: 0x2460, symSize: 0x10 } + - { offsetInCU: 0x813, offset: 0xAC32D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x960, symBinAddr: 0x2470, symSize: 0x20 } + - { offsetInCU: 0x869, offset: 0xAC383, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x980, symBinAddr: 0x2490, symSize: 0x10 } + - { offsetInCU: 0x8C2, offset: 0xAC3DC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x990, symBinAddr: 0x24A0, symSize: 0x20 } + - { offsetInCU: 0x91A, offset: 0xAC434, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvsTo', symObjAddr: 0x9B0, symBinAddr: 0x24C0, symSize: 0x30 } + - { offsetInCU: 0x973, offset: 0xAC48D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x9E0, symBinAddr: 0x24F0, symSize: 0x40 } + - { offsetInCU: 0x9DF, offset: 0xAC4F9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0xA50, symBinAddr: 0x2560, symSize: 0x50 } + - { offsetInCU: 0xAD3, offset: 0xAC5ED, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScale12CoreGraphics7CGFloatVyFTo', symObjAddr: 0x1090, symBinAddr: 0x2BA0, symSize: 0xB0 } + - { offsetInCU: 0xBAF, offset: 0xAC6C9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x1A90, symBinAddr: 0x35A0, symSize: 0x30 } + - { offsetInCU: 0xBE1, offset: 0xAC6FB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x1C30, symBinAddr: 0x3740, symSize: 0x30 } + - { offsetInCU: 0xC13, offset: 0xAC72D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1C70, symBinAddr: 0x3770, symSize: 0x30 } + - { offsetInCU: 0xC5B, offset: 0xAC775, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1CA0, symBinAddr: 0x37A0, symSize: 0x20 } + - { offsetInCU: 0xCCF, offset: 0xAC7E9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2040, symBinAddr: 0x3B40, symSize: 0x30 } + - { offsetInCU: 0xD06, offset: 0xAC820, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x22C0, symBinAddr: 0x3DC0, symSize: 0x30 } + - { offsetInCU: 0xD58, offset: 0xAC872, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x2440, symBinAddr: 0x3F40, symSize: 0x70 } + - { offsetInCU: 0xD8A, offset: 0xAC8A4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x2500, symBinAddr: 0x4000, symSize: 0x30 } + - { offsetInCU: 0xDBD, offset: 0xAC8D7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x2570, symBinAddr: 0x4070, symSize: 0x60 } + - { offsetInCU: 0xE82, offset: 0xAC99C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9emitEventyySo9NSRunLoopC_So7NSTimerCtFZTo', symObjAddr: 0x26A0, symBinAddr: 0x41A0, symSize: 0x30 } + - { offsetInCU: 0xF78, offset: 0xACA92, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x39C0, symBinAddr: 0x54C0, symSize: 0x1880 } + - { offsetInCU: 0x1E3D, offset: 0xAD957, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x5240, symBinAddr: 0x6D40, symSize: 0x140 } + - { offsetInCU: 0x1FEC, offset: 0xADB06, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x5380, symBinAddr: 0x6E80, symSize: 0x210 } + - { offsetInCU: 0x21C5, offset: 0xADCDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x5590, symBinAddr: 0x7090, symSize: 0x2C0 } + - { offsetInCU: 0x23D7, offset: 0xADEF1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0xAF0, symBinAddr: 0x2600, symSize: 0x40 } + - { offsetInCU: 0x240D, offset: 0xADF27, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0xB30, symBinAddr: 0x2640, symSize: 0x50 } + - { offsetInCU: 0x24A3, offset: 0xADFBD, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x2990, symBinAddr: 0x4490, symSize: 0x50 } + - { offsetInCU: 0x24BB, offset: 0xADFD5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x33C0, symBinAddr: 0x4EC0, symSize: 0x80 } + - { offsetInCU: 0x24EA, offset: 0xAE004, size: 0x8, addend: 0x0, symName: '_$sSvSiIegyy_SvSiIeyByy_TR', symObjAddr: 0x3440, symBinAddr: 0x4F40, symSize: 0x40 } + - { offsetInCU: 0x2527, offset: 0xAE041, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSS_Tgm5', symObjAddr: 0x3550, symBinAddr: 0x5050, symSize: 0x80 } + - { offsetInCU: 0x267B, offset: 0xAE195, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x38D0, symBinAddr: 0x53D0, symSize: 0x20 } + - { offsetInCU: 0x268F, offset: 0xAE1A9, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x38F0, symBinAddr: 0x53F0, symSize: 0x10 } + - { offsetInCU: 0x26A3, offset: 0xAE1BD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCMa', symObjAddr: 0x3900, symBinAddr: 0x5400, symSize: 0x20 } + - { offsetInCU: 0x26B7, offset: 0xAE1D1, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x3920, symBinAddr: 0x5420, symSize: 0x40 } + - { offsetInCU: 0x26CB, offset: 0xAE1E5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x39A0, symBinAddr: 0x54A0, symSize: 0x20 } + - { offsetInCU: 0x29F0, offset: 0xAE50A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5890, symBinAddr: 0x7390, symSize: 0x360 } + - { offsetInCU: 0x2C0C, offset: 0xAE726, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5C70, symBinAddr: 0x7770, symSize: 0x480 } + - { offsetInCU: 0x2EB2, offset: 0xAE9CC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x6140, symBinAddr: 0x7C40, symSize: 0x20 } + - { offsetInCU: 0x2EC6, offset: 0xAE9E0, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x63E0, symBinAddr: 0x7EE0, symSize: 0x10 } + - { offsetInCU: 0x2EDA, offset: 0xAE9F4, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x63F0, symBinAddr: 0x7EF0, symSize: 0x10 } + - { offsetInCU: 0x2EEE, offset: 0xAEA08, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x6400, symBinAddr: 0x7F00, symSize: 0x20 } + - { offsetInCU: 0x2F02, offset: 0xAEA1C, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x6420, symBinAddr: 0x7F20, symSize: 0x30 } + - { offsetInCU: 0x2F21, offset: 0xAEA3B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x64C0, symBinAddr: 0x7FC0, symSize: 0x20 } + - { offsetInCU: 0x2F4A, offset: 0xAEA64, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU_TA', symObjAddr: 0x6500, symBinAddr: 0x8000, symSize: 0x20 } + - { offsetInCU: 0x2F7E, offset: 0xAEA98, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x6520, symBinAddr: 0x8020, symSize: 0x30 } + - { offsetInCU: 0x2F92, offset: 0xAEAAC, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x65A0, symBinAddr: 0x80A0, symSize: 0x30 } + - { offsetInCU: 0x2FA6, offset: 0xAEAC0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU0_Tf2nni_nTA', symObjAddr: 0x6650, symBinAddr: 0x8150, symSize: 0x20 } + - { offsetInCU: 0x2FE3, offset: 0xAEAFD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x6690, symBinAddr: 0x8190, symSize: 0x10 } + - { offsetInCU: 0x37E3, offset: 0xAF2FD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x180, symBinAddr: 0x1C90, symSize: 0x1E0 } + - { offsetInCU: 0x39F3, offset: 0xAF50D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x3C0, symBinAddr: 0x1ED0, symSize: 0x20 } + - { offsetInCU: 0x3A42, offset: 0xAF55C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x400, symBinAddr: 0x1F10, symSize: 0x20 } + - { offsetInCU: 0x3A91, offset: 0xAF5AB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x440, symBinAddr: 0x1F50, symSize: 0x20 } + - { offsetInCU: 0x3AE7, offset: 0xAF601, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg', symObjAddr: 0x490, symBinAddr: 0x1FA0, symSize: 0x130 } + - { offsetInCU: 0x3C0E, offset: 0xAF728, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgySv_SitcfU_Tf4nnd_n', symObjAddr: 0x38C0, symBinAddr: 0x53C0, symSize: 0x10 } + - { offsetInCU: 0x3C42, offset: 0xAF75C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF', symObjAddr: 0x5C0, symBinAddr: 0x20D0, symSize: 0x1B0 } + - { offsetInCU: 0x3E6A, offset: 0xAF984, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfC', symObjAddr: 0x7A0, symBinAddr: 0x22B0, symSize: 0x20 } + - { offsetInCU: 0x3E7E, offset: 0xAF998, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfc', symObjAddr: 0x7C0, symBinAddr: 0x22D0, symSize: 0xB0 } + - { offsetInCU: 0x3F94, offset: 0xAFAAE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0xA20, symBinAddr: 0x2530, symSize: 0x30 } + - { offsetInCU: 0x3FE5, offset: 0xAFAFF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0xAA0, symBinAddr: 0x25B0, symSize: 0x50 } + - { offsetInCU: 0x4057, offset: 0xAFB71, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0xB80, symBinAddr: 0x2690, symSize: 0x40 } + - { offsetInCU: 0x407C, offset: 0xAFB96, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0xBC0, symBinAddr: 0x26D0, symSize: 0x30 } + - { offsetInCU: 0x40EB, offset: 0xAFC05, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0xCB0, symBinAddr: 0x27C0, symSize: 0x40 } + - { offsetInCU: 0x4110, offset: 0xAFC2A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0x1010, symBinAddr: 0x2B20, symSize: 0x40 } + - { offsetInCU: 0x42AD, offset: 0xAFDC7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0x1140, symBinAddr: 0x2C50, symSize: 0x460 } + - { offsetInCU: 0x464F, offset: 0xB0169, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x15A0, symBinAddr: 0x30B0, symSize: 0x4E0 } + - { offsetInCU: 0x491A, offset: 0xB0434, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1AC0, symBinAddr: 0x35D0, symSize: 0x170 } + - { offsetInCU: 0x4A91, offset: 0xB05AB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1CC0, symBinAddr: 0x37C0, symSize: 0x80 } + - { offsetInCU: 0x4AA5, offset: 0xB05BF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1D40, symBinAddr: 0x3840, symSize: 0x300 } + - { offsetInCU: 0x4B21, offset: 0xB063B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x2070, symBinAddr: 0x3B70, symSize: 0x250 } + - { offsetInCU: 0x4BE1, offset: 0xB06FB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVF', symObjAddr: 0x22F0, symBinAddr: 0x3DF0, symSize: 0x150 } + - { offsetInCU: 0x4D77, offset: 0xB0891, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x24B0, symBinAddr: 0x3FB0, symSize: 0x50 } + - { offsetInCU: 0x4DD8, offset: 0xB08F2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2530, symBinAddr: 0x4030, symSize: 0x40 } + - { offsetInCU: 0x4E2B, offset: 0xB0945, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x25D0, symBinAddr: 0x40D0, symSize: 0x10 } + - { offsetInCU: 0x4E3F, offset: 0xB0959, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x2600, symBinAddr: 0x4100, symSize: 0x10 } + - { offsetInCU: 0x4E53, offset: 0xB096D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x2630, symBinAddr: 0x4130, symSize: 0x10 } + - { offsetInCU: 0x4EB1, offset: 0xB09CB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ', symObjAddr: 0x26D0, symBinAddr: 0x41D0, symSize: 0x2C0 } + - { offsetInCU: 0x5028, offset: 0xB0B42, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_', symObjAddr: 0x2E40, symBinAddr: 0x4940, symSize: 0x500 } + - { offsetInCU: 0x5202, offset: 0xB0D1C, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x3480, symBinAddr: 0x4F80, symSize: 0xD0 } + - { offsetInCU: 0x5245, offset: 0xB0D5F, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x35D0, symBinAddr: 0x50D0, symSize: 0x220 } + - { offsetInCU: 0x52B6, offset: 0xB0DD0, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x37F0, symBinAddr: 0x52F0, symSize: 0x20 } + - { offsetInCU: 0x52ED, offset: 0xB0E07, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x3810, symBinAddr: 0x5310, symSize: 0xB0 } + - { offsetInCU: 0x26, offset: 0xB1185, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xC8700, symSize: 0x3990 } + - { offsetInCU: 0x40, offset: 0xB119F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0xEEC0, symBinAddr: 0x595ED0, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0xB11F1, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0x14EC0, symBinAddr: 0x59BED0, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0xB1255, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0x14EE8, symBinAddr: 0x59BEF8, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0xB126B, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x152F0, symBinAddr: 0x59C300, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0xB1282, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0x14F30, symBinAddr: 0x59BF40, symSize: 0x0 } + - { offsetInCU: 0xE22, offset: 0xB1F81, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xC8700, symSize: 0x3990 } + - { offsetInCU: 0x4DAE, offset: 0xB5F0D, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0xE6E0, symBinAddr: 0xD6DE0, symSize: 0x3E0 } + - { offsetInCU: 0x4FF1, offset: 0xB6150, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x7C20, symBinAddr: 0xD0320, symSize: 0x270 } + - { offsetInCU: 0x582C, offset: 0xB698B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x3990, symBinAddr: 0xCC090, symSize: 0xA10 } + - { offsetInCU: 0x684B, offset: 0xB79AA, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x43A0, symBinAddr: 0xCCAA0, symSize: 0xA10 } + - { offsetInCU: 0x6EE9, offset: 0xB8048, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x4DB0, symBinAddr: 0xCD4B0, symSize: 0x2B0 } + - { offsetInCU: 0x74BC, offset: 0xB861B, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x5060, symBinAddr: 0xCD760, symSize: 0xCD0 } + - { offsetInCU: 0x83FE, offset: 0xB955D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x5D30, symBinAddr: 0xCE430, symSize: 0xB40 } + - { offsetInCU: 0x8F67, offset: 0xBA0C6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x6870, symBinAddr: 0xCEF70, symSize: 0x13B0 } + - { offsetInCU: 0xA567, offset: 0xBB6C6, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x7FF0, symBinAddr: 0xD06F0, symSize: 0x2A30 } + - { offsetInCU: 0xDC6D, offset: 0xBEDCC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x7E90, symBinAddr: 0xD0590, symSize: 0x160 } + - { offsetInCU: 0xDEE7, offset: 0xBF046, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0xAA20, symBinAddr: 0xD3120, symSize: 0x30 } + - { offsetInCU: 0xDFDC, offset: 0xBF13B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0xAA50, symBinAddr: 0xD3150, symSize: 0x50 } + - { offsetInCU: 0xE051, offset: 0xBF1B0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0xAAA0, symBinAddr: 0xD31A0, symSize: 0x10 } + - { offsetInCU: 0xE0EC, offset: 0xBF24B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0xAAB0, symBinAddr: 0xD31B0, symSize: 0xB0 } + - { offsetInCU: 0xE217, offset: 0xBF376, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0xAB60, symBinAddr: 0xD3260, symSize: 0x10 } + - { offsetInCU: 0xE4E9, offset: 0xBF648, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0xAB70, symBinAddr: 0xD3270, symSize: 0x21A0 } + - { offsetInCU: 0x1118F, offset: 0xC22EE, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0xEAC0, symBinAddr: 0xD71C0, symSize: 0x2D1 } + - { offsetInCU: 0x117CF, offset: 0xC292E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0xCD10, symBinAddr: 0xD5410, symSize: 0x20 } + - { offsetInCU: 0x11C6C, offset: 0xC2DCB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0xCD30, symBinAddr: 0xD5430, symSize: 0x19B0 } + - { offsetInCU: 0x26, offset: 0xC3E7B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xD74A0, symSize: 0x800 } + - { offsetInCU: 0x41, offset: 0xC3E96, size: 0x8, addend: 0x0, symName: _aes_nohw_rcon, symObjAddr: 0x1B10, symBinAddr: 0x59C3E0, symSize: 0x0 } + - { offsetInCU: 0x484, offset: 0xC42D9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xD74A0, symSize: 0x800 } + - { offsetInCU: 0x1B2B, offset: 0xC5980, size: 0x8, addend: 0x0, symName: _aes_nohw_sub_bytes, symObjAddr: 0x15F0, symBinAddr: 0xD8A90, symSize: 0x300 } + - { offsetInCU: 0x32EE, offset: 0xC7143, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_encrypt, symObjAddr: 0x800, symBinAddr: 0xD7CA0, symSize: 0x80 } + - { offsetInCU: 0x33DC, offset: 0xC7231, size: 0x8, addend: 0x0, symName: _aes_nohw_expand_round_keys, symObjAddr: 0x880, symBinAddr: 0xD7D20, symSize: 0x1A0 } + - { offsetInCU: 0x386D, offset: 0xC76C2, size: 0x8, addend: 0x0, symName: _aes_nohw_to_batch, symObjAddr: 0xA20, symBinAddr: 0xD7EC0, symSize: 0x420 } + - { offsetInCU: 0x3D7D, offset: 0xC7BD2, size: 0x8, addend: 0x0, symName: _aes_nohw_encrypt_batch, symObjAddr: 0xE40, symBinAddr: 0xD82E0, symSize: 0x380 } + - { offsetInCU: 0x424C, offset: 0xC80A1, size: 0x8, addend: 0x0, symName: _aes_nohw_from_batch, symObjAddr: 0x11C0, symBinAddr: 0xD8660, symSize: 0x250 } + - { offsetInCU: 0x498D, offset: 0xC87E2, size: 0x8, addend: 0x0, symName: _aes_nohw_shift_rows, symObjAddr: 0x18F0, symBinAddr: 0xD8D90, symSize: 0x149 } + - { offsetInCU: 0x4BF9, offset: 0xC8A4E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_ctr32_encrypt_blocks, symObjAddr: 0x1410, symBinAddr: 0xD88B0, symSize: 0x1E0 } + - { offsetInCU: 0x26, offset: 0xC8E6F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xD8EE0, symSize: 0x2DC } + - { offsetInCU: 0x1D2, offset: 0xC901B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xD8EE0, symSize: 0x2DC } + - { offsetInCU: 0x26, offset: 0xC9274, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xD91C0, symSize: 0x87 } + - { offsetInCU: 0x34, offset: 0xC9282, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xD91C0, symSize: 0x87 } + - { offsetInCU: 0x26, offset: 0xC9392, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xD9250, symSize: 0x46 } + - { offsetInCU: 0x34, offset: 0xC93A0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xD9250, symSize: 0x46 } + - { offsetInCU: 0x86, offset: 0xC9503, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x15F0, symBinAddr: 0x59C460, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0xC9535, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1580, symBinAddr: 0x59C3F0, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0xC9557, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x15B0, symBinAddr: 0x59C420, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0xC956D, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x15E0, symBinAddr: 0x59C450, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0xC9834, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x150, symBinAddr: 0xD92A0, symSize: 0x20 } + - { offsetInCU: 0x594, offset: 0xC9A11, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x250, symBinAddr: 0xD92C0, symSize: 0x20 } + - { offsetInCU: 0x63F, offset: 0xC9ABC, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x340, symBinAddr: 0xD92E0, symSize: 0x3A0 } + - { offsetInCU: 0x11A7, offset: 0xCA624, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x6E0, symBinAddr: 0xD9680, symSize: 0x140 } + - { offsetInCU: 0x14A2, offset: 0xCA91F, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x820, symBinAddr: 0xD97C0, symSize: 0x6B0 } + - { offsetInCU: 0x26DA, offset: 0xCBB57, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xED0, symBinAddr: 0xD9E70, symSize: 0x380 } + - { offsetInCU: 0x2D37, offset: 0xCC1B4, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0x1250, symBinAddr: 0xDA1F0, symSize: 0x170 } + - { offsetInCU: 0x2F2F, offset: 0xCC3AC, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0x13C0, symBinAddr: 0xDA360, symSize: 0x1BF } + - { offsetInCU: 0x26, offset: 0xCC6F7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xDA520, symSize: 0x50 } + - { offsetInCU: 0xFA, offset: 0xCC7CB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xDA520, symSize: 0x50 } + - { offsetInCU: 0x18D, offset: 0xCC85E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x50, symBinAddr: 0xDA570, symSize: 0x60 } + - { offsetInCU: 0x2F1, offset: 0xCC9C2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0xB0, symBinAddr: 0xDA5D0, symSize: 0x90 } + - { offsetInCU: 0x4C6, offset: 0xCCB97, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0x140, symBinAddr: 0xDA660, symSize: 0x20 } + - { offsetInCU: 0x5E3, offset: 0xCCCB4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0x160, symBinAddr: 0xDA680, symSize: 0xB0 } + - { offsetInCU: 0x696, offset: 0xCCD67, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x210, symBinAddr: 0xDA730, symSize: 0x70 } + - { offsetInCU: 0x861, offset: 0xCCF32, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x280, symBinAddr: 0xDA7A0, symSize: 0x170 } + - { offsetInCU: 0xB67, offset: 0xCD238, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x3F0, symBinAddr: 0xDA910, symSize: 0x270 } + - { offsetInCU: 0xE6A, offset: 0xCD53B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x660, symBinAddr: 0xDAB80, symSize: 0x1A0 } + - { offsetInCU: 0x105D, offset: 0xCD72E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x800, symBinAddr: 0xDAD20, symSize: 0x280 } + - { offsetInCU: 0x128C, offset: 0xCD95D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0xC20, symBinAddr: 0xDAFA0, symSize: 0x20 } + - { offsetInCU: 0x12F3, offset: 0xCD9C4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0xC40, symBinAddr: 0xDAFC0, symSize: 0x20 } + - { offsetInCU: 0x132A, offset: 0xCD9FB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0xC60, symBinAddr: 0xDAFE0, symSize: 0x10 } + - { offsetInCU: 0x13AC, offset: 0xCDA7D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0xC70, symBinAddr: 0xDAFF0, symSize: 0x4A } + - { offsetInCU: 0x26, offset: 0xCDC09, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xDB040, symSize: 0x129 } + - { offsetInCU: 0x34, offset: 0xCDC17, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xDB040, symSize: 0x129 } + - { offsetInCU: 0x34, offset: 0xCDD19, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_ia32cap_P, symObjAddr: 0x3F0, symBinAddr: 0xC946E0, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xCDD6E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0xDB170, symSize: 0xF8 } + - { offsetInCU: 0xD5, offset: 0xCDE1D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0xDB170, symSize: 0xF8 } + - { offsetInCU: 0x26, offset: 0xCDF72, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0xDB270, symSize: 0x1210 } + - { offsetInCU: 0x92E, offset: 0xCE87A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0xDB270, symSize: 0x1210 } + - { offsetInCU: 0x5347, offset: 0xD3293, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base_adx, symObjAddr: 0x1210, symBinAddr: 0xDC480, symSize: 0x1E50 } + - { offsetInCU: 0x9B2F, offset: 0xD7A7B, size: 0x8, addend: 0x0, symName: _inline_x25519_ge_dbl_4, symObjAddr: 0x3060, symBinAddr: 0xDE2D0, symSize: 0x361 } + - { offsetInCU: 0x26, offset: 0xD8E68, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0xDE640, symSize: 0xD0 } + - { offsetInCU: 0x303, offset: 0xD9145, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0xDE640, symSize: 0xD0 } + - { offsetInCU: 0x5A4, offset: 0xD93E6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_update, symObjAddr: 0xD0, symBinAddr: 0xDE710, symSize: 0x1C0 } + - { offsetInCU: 0x764, offset: 0xD95A6, size: 0x8, addend: 0x0, symName: _poly1305_blocks, symObjAddr: 0x5F0, symBinAddr: 0xDEC30, symSize: 0x780 } + - { offsetInCU: 0x903, offset: 0xD9745, size: 0x8, addend: 0x0, symName: _poly1305_first_block, symObjAddr: 0x290, symBinAddr: 0xDE8D0, symSize: 0x360 } + - { offsetInCU: 0xEFC, offset: 0xD9D3E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_finish, symObjAddr: 0xD70, symBinAddr: 0xDF3B0, symSize: 0xAA2 } + - { offsetInCU: 0x10, offset: 0xDA4C7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0xDFE52, symSize: 0x2AF } + - { offsetInCU: 0x51, offset: 0xDA508, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0xDFE52, symSize: 0x2AF } + - { offsetInCU: 0x10, offset: 0xDA4FD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0xE0101, symSize: 0x1F4 } + - { offsetInCU: 0x54, offset: 0xDA541, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0xE0101, symSize: 0x1F4 } + - { offsetInCU: 0x26, offset: 0xDA549, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xE0300, symSize: 0x490 } + - { offsetInCU: 0x76, offset: 0xDA599, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x59D000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xDA61D, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x5C2000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xDA87E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xE0300, symSize: 0x490 } + - { offsetInCU: 0xC5A, offset: 0xDB17D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x490, symBinAddr: 0xE0790, symSize: 0x300 } + - { offsetInCU: 0x1135, offset: 0xDB658, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x790, symBinAddr: 0xE0A90, symSize: 0x25D } + - { offsetInCU: 0x10, offset: 0xDBA1D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xE0D00, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xDBA55, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xE0D00, symSize: 0x3A0 } + - { offsetInCU: 0x4D, offset: 0xDBA5A, size: 0x8, addend: 0x0, symName: ChaCha20_ssse3, symObjAddr: 0x3A0, symBinAddr: 0xE10A0, symSize: 0x220 } + - { offsetInCU: 0x60, offset: 0xDBA6D, size: 0x8, addend: 0x0, symName: ChaCha20_4x, symObjAddr: 0x5C0, symBinAddr: 0xE12C0, symSize: 0xA20 } + - { offsetInCU: 0x76, offset: 0xDBA83, size: 0x8, addend: 0x0, symName: ChaCha20_8x, symObjAddr: 0xFE0, symBinAddr: 0xE1CE0, symSize: 0xB4C } + - { offsetInCU: 0x10, offset: 0xDBA95, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0xE2840, symSize: 0x40 } + - { offsetInCU: 0x48, offset: 0xDBACD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0xE2840, symSize: 0x40 } + - { offsetInCU: 0x4D, offset: 0xDBAD2, size: 0x8, addend: 0x0, symName: _aesni_encrypt2, symObjAddr: 0x40, symBinAddr: 0xE2880, symSize: 0x60 } + - { offsetInCU: 0x63, offset: 0xDBAE8, size: 0x8, addend: 0x0, symName: _aesni_encrypt3, symObjAddr: 0xA0, symBinAddr: 0xE28E0, symSize: 0x70 } + - { offsetInCU: 0x79, offset: 0xDBAFE, size: 0x8, addend: 0x0, symName: _aesni_encrypt4, symObjAddr: 0x110, symBinAddr: 0xE2950, symSize: 0x90 } + - { offsetInCU: 0x8F, offset: 0xDBB14, size: 0x8, addend: 0x0, symName: _aesni_encrypt6, symObjAddr: 0x1A0, symBinAddr: 0xE29E0, symSize: 0xE0 } + - { offsetInCU: 0xA5, offset: 0xDBB2A, size: 0x8, addend: 0x0, symName: _aesni_encrypt8, symObjAddr: 0x280, symBinAddr: 0xE2AC0, symSize: 0x110 } + - { offsetInCU: 0xD9, offset: 0xDBB5E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x390, symBinAddr: 0xE2BD0, symSize: 0x940 } + - { offsetInCU: 0xEA, offset: 0xDBB6F, size: 0x8, addend: 0x0, symName: __aesni_set_encrypt_key, symObjAddr: 0xCD0, symBinAddr: 0xE3510, symSize: 0x44D } + - { offsetInCU: 0x10, offset: 0xDBB65, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0xE3960, symSize: 0x160 } + - { offsetInCU: 0x3B, offset: 0xDBB90, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0xE3960, symSize: 0x160 } + - { offsetInCU: 0x54, offset: 0xDBBA9, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core_2x, symObjAddr: 0x160, symBinAddr: 0xE3AC0, symSize: 0x290 } + - { offsetInCU: 0x68, offset: 0xDBBBD, size: 0x8, addend: 0x0, symName: _vpaes_schedule_core, symObjAddr: 0x3F0, symBinAddr: 0xE3D50, symSize: 0xF0 } + - { offsetInCU: 0x7F, offset: 0xDBBD4, size: 0x8, addend: 0x0, symName: _vpaes_schedule_round, symObjAddr: 0x4E0, symBinAddr: 0xE3E40, symSize: 0x21 } + - { offsetInCU: 0x99, offset: 0xDBBEE, size: 0x8, addend: 0x0, symName: _vpaes_schedule_low_round, symObjAddr: 0x501, symBinAddr: 0xE3E61, symSize: 0x9F } + - { offsetInCU: 0xAF, offset: 0xDBC04, size: 0x8, addend: 0x0, symName: _vpaes_schedule_transform, symObjAddr: 0x5A0, symBinAddr: 0xE3F00, symSize: 0x30 } + - { offsetInCU: 0xC2, offset: 0xDBC17, size: 0x8, addend: 0x0, symName: _vpaes_schedule_mangle, symObjAddr: 0x5D0, symBinAddr: 0xE3F30, symSize: 0x50 } + - { offsetInCU: 0xE9, offset: 0xDBC3E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_set_encrypt_key, symObjAddr: 0x620, symBinAddr: 0xE3F80, symSize: 0x30 } + - { offsetInCU: 0xF7, offset: 0xDBC4C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_encrypt, symObjAddr: 0x650, symBinAddr: 0xE3FB0, symSize: 0x20 } + - { offsetInCU: 0x11A, offset: 0xDBC6F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_ctr32_encrypt_blocks, symObjAddr: 0x670, symBinAddr: 0xE3FD0, symSize: 0xD0 } + - { offsetInCU: 0x112, offset: 0xDBC67, size: 0x8, addend: 0x0, symName: _vpaes_preheat, symObjAddr: 0x740, symBinAddr: 0xE40A0, symSize: 0x31 } + - { offsetInCU: 0x10, offset: 0xDBC77, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xE40E0, symSize: 0x2A0 } + - { offsetInCU: 0x45, offset: 0xDBCAC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xE40E0, symSize: 0x2A0 } + - { offsetInCU: 0x4C, offset: 0xDBCB3, size: 0x8, addend: 0x0, symName: bn_mul4x_mont, symObjAddr: 0x2A0, symBinAddr: 0xE4380, symSize: 0x560 } + - { offsetInCU: 0x62, offset: 0xDBCC9, size: 0x8, addend: 0x0, symName: bn_sqr8x_mont, symObjAddr: 0x800, symBinAddr: 0xE48E0, symSize: 0x220 } + - { offsetInCU: 0x79, offset: 0xDBCE0, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont, symObjAddr: 0xA20, symBinAddr: 0xE4B00, symSize: 0x570 } + - { offsetInCU: 0x10, offset: 0xDBCEF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0xE5080, symSize: 0x660 } + - { offsetInCU: 0x4D, offset: 0xDBD2C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0xE5080, symSize: 0x660 } + - { offsetInCU: 0x54, offset: 0xDBD33, size: 0x8, addend: 0x0, symName: bn_mul4x_mont_gather5, symObjAddr: 0x660, symBinAddr: 0xE56E0, symSize: 0x100 } + - { offsetInCU: 0x63, offset: 0xDBD42, size: 0x8, addend: 0x0, symName: mul4x_internal, symObjAddr: 0x760, symBinAddr: 0xE57E0, symSize: 0x7E0 } + - { offsetInCU: 0x85, offset: 0xDBD64, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_power5, symObjAddr: 0xF40, symBinAddr: 0xE5FC0, symSize: 0x180 } + - { offsetInCU: 0xA3, offset: 0xDBD82, size: 0x8, addend: 0x0, symName: __bn_sqr8x_internal, symObjAddr: 0x10C0, symBinAddr: 0xE6140, symSize: 0x579 } + - { offsetInCU: 0xAA, offset: 0xDBD89, size: 0x8, addend: 0x0, symName: __bn_sqr8x_reduction, symObjAddr: 0x1639, symBinAddr: 0xE66B9, symSize: 0x347 } + - { offsetInCU: 0xC0, offset: 0xDBD9F, size: 0x8, addend: 0x0, symName: __bn_post4x_internal, symObjAddr: 0x1980, symBinAddr: 0xE6A00, symSize: 0xA0 } + - { offsetInCU: 0xD9, offset: 0xDBDB8, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont_gather5, symObjAddr: 0x1A20, symBinAddr: 0xE6AA0, symSize: 0xE0 } + - { offsetInCU: 0xE8, offset: 0xDBDC7, size: 0x8, addend: 0x0, symName: mulx4x_internal, symObjAddr: 0x1B00, symBinAddr: 0xE6B80, symSize: 0x7E0 } + - { offsetInCU: 0xF9, offset: 0xDBDD8, size: 0x8, addend: 0x0, symName: bn_powerx5, symObjAddr: 0x22E0, symBinAddr: 0xE7360, symSize: 0x160 } + - { offsetInCU: 0x128, offset: 0xDBE07, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_internal, symObjAddr: 0x2440, symBinAddr: 0xE74C0, symSize: 0x637 } + - { offsetInCU: 0x12F, offset: 0xDBE0E, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_reduction, symObjAddr: 0x2A77, symBinAddr: 0xE7AF7, symSize: 0x329 } + - { offsetInCU: 0x145, offset: 0xDBE24, size: 0x8, addend: 0x0, symName: __bn_postx4x_internal, symObjAddr: 0x2DA0, symBinAddr: 0xE7E20, symSize: 0x90 } + - { offsetInCU: 0x163, offset: 0xDBE42, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_scatter5, symObjAddr: 0x2E30, symBinAddr: 0xE7EB0, symSize: 0x30 } + - { offsetInCU: 0x178, offset: 0xDBE57, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_gather5, symObjAddr: 0x2E60, symBinAddr: 0xE7EE0, symSize: 0x27F } + - { offsetInCU: 0x10, offset: 0xDBE59, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0xE8160, symSize: 0x80 } + - { offsetInCU: 0x4A, offset: 0xDBE93, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0xE8160, symSize: 0x80 } + - { offsetInCU: 0x64, offset: 0xDBEAD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0x80, symBinAddr: 0xE81E0, symSize: 0x360 } + - { offsetInCU: 0x7E, offset: 0xDBEC7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x3E0, symBinAddr: 0xE8540, symSize: 0x300 } + - { offsetInCU: 0x85, offset: 0xDBECE, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_mul_montx, symObjAddr: 0x6E0, symBinAddr: 0xE8840, symSize: 0x3C0 } + - { offsetInCU: 0x9B, offset: 0xDBEE4, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_sqr_montx, symObjAddr: 0xAA0, symBinAddr: 0xE8C00, symSize: 0x320 } + - { offsetInCU: 0xB5, offset: 0xDBEFE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0xDC0, symBinAddr: 0xE8F20, symSize: 0xA0 } + - { offsetInCU: 0xC4, offset: 0xDBF0D, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montq, symObjAddr: 0xE60, symBinAddr: 0xE8FC0, symSize: 0x240 } + - { offsetInCU: 0xE1, offset: 0xDBF2A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x10A0, symBinAddr: 0xE9200, symSize: 0x80 } + - { offsetInCU: 0xF0, offset: 0xDBF39, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montq, symObjAddr: 0x1120, symBinAddr: 0xE9280, symSize: 0x1A0 } + - { offsetInCU: 0x106, offset: 0xDBF4F, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montx, symObjAddr: 0x12C0, symBinAddr: 0xE9420, symSize: 0x260 } + - { offsetInCU: 0x11C, offset: 0xDBF65, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montx, symObjAddr: 0x1520, symBinAddr: 0xE9680, symSize: 0x1C0 } + - { offsetInCU: 0x142, offset: 0xDBF8B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x16E0, symBinAddr: 0xE9840, symSize: 0xE0 } + - { offsetInCU: 0x158, offset: 0xDBFA1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x17C0, symBinAddr: 0xE9920, symSize: 0xC0 } + - { offsetInCU: 0x162, offset: 0xDBFAB, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w5, symObjAddr: 0x1880, symBinAddr: 0xE99E0, symSize: 0xC0 } + - { offsetInCU: 0x178, offset: 0xDBFC1, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w7, symObjAddr: 0x1940, symBinAddr: 0xE9AA0, symSize: 0xE0 } + - { offsetInCU: 0x188, offset: 0xDBFD1, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_toq, symObjAddr: 0x1A20, symBinAddr: 0xE9B80, symSize: 0x60 } + - { offsetInCU: 0x1A0, offset: 0xDBFE9, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromq, symObjAddr: 0x1A80, symBinAddr: 0xE9BE0, symSize: 0x60 } + - { offsetInCU: 0x1B1, offset: 0xDBFFA, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subq, symObjAddr: 0x1AE0, symBinAddr: 0xE9C40, symSize: 0x40 } + - { offsetInCU: 0x1CC, offset: 0xDC015, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2q, symObjAddr: 0x1B20, symBinAddr: 0xE9C80, symSize: 0x60 } + - { offsetInCU: 0x1ED, offset: 0xDC036, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x1B80, symBinAddr: 0xE9CE0, symSize: 0x320 } + - { offsetInCU: 0x200, offset: 0xDC049, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x1EA0, symBinAddr: 0xEA000, symSize: 0x780 } + - { offsetInCU: 0x21D, offset: 0xDC066, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0x2620, symBinAddr: 0xEA780, symSize: 0x580 } + - { offsetInCU: 0x222, offset: 0xDC06B, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_tox, symObjAddr: 0x2BA0, symBinAddr: 0xEAD00, symSize: 0x60 } + - { offsetInCU: 0x23A, offset: 0xDC083, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromx, symObjAddr: 0x2C00, symBinAddr: 0xEAD60, symSize: 0x60 } + - { offsetInCU: 0x24B, offset: 0xDC094, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subx, symObjAddr: 0x2C60, symBinAddr: 0xEADC0, symSize: 0x60 } + - { offsetInCU: 0x266, offset: 0xDC0AF, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2x, symObjAddr: 0x2CC0, symBinAddr: 0xEAE20, symSize: 0x60 } + - { offsetInCU: 0x27F, offset: 0xDC0C8, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_doublex, symObjAddr: 0x2D20, symBinAddr: 0xEAE80, symSize: 0x320 } + - { offsetInCU: 0x292, offset: 0xDC0DB, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_addx, symObjAddr: 0x3040, symBinAddr: 0xEB1A0, symSize: 0x760 } + - { offsetInCU: 0x2AF, offset: 0xDC0F8, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_add_affinex, symObjAddr: 0x37A0, symBinAddr: 0xEB900, symSize: 0x555 } + - { offsetInCU: 0x10, offset: 0xDC0F7, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0xEBE60, symSize: 0x5A0 } + - { offsetInCU: 0x3D, offset: 0xDC124, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0xEBE60, symSize: 0x5A0 } + - { offsetInCU: 0x61, offset: 0xDC148, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_decrypt, symObjAddr: 0x5A0, symBinAddr: 0xEC400, symSize: 0x140 } + - { offsetInCU: 0x63, offset: 0xDC14A, size: 0x8, addend: 0x0, symName: _aesni_ctr32_6x, symObjAddr: 0x6E0, symBinAddr: 0xEC540, symSize: 0x180 } + - { offsetInCU: 0x8D, offset: 0xDC174, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_encrypt, symObjAddr: 0x860, symBinAddr: 0xEC6C0, symSize: 0x423 } + - { offsetInCU: 0x10, offset: 0xDC16F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xECB00, symSize: 0x260 } + - { offsetInCU: 0x48, offset: 0xDC1A7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xECB00, symSize: 0x260 } + - { offsetInCU: 0x5F, offset: 0xDC1BE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x260, symBinAddr: 0xECD60, symSize: 0xC0 } + - { offsetInCU: 0x75, offset: 0xDC1D4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x320, symBinAddr: 0xECE20, symSize: 0x660 } + - { offsetInCU: 0x88, offset: 0xDC1E7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_avx, symObjAddr: 0x980, symBinAddr: 0xED480, symSize: 0x1A0 } + - { offsetInCU: 0x9F, offset: 0xDC1FE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_avx, symObjAddr: 0xB20, symBinAddr: 0xED620, symSize: 0x697 } + - { offsetInCU: 0x10, offset: 0xDC1FD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xEDCC0, symSize: 0x1240 } + - { offsetInCU: 0x51, offset: 0xDC23E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xEDCC0, symSize: 0x1240 } + - { offsetInCU: 0x5A, offset: 0xDC247, size: 0x8, addend: 0x0, symName: sha512_block_data_order_avx, symObjAddr: 0x1240, symBinAddr: 0xEEF00, symSize: 0x1176 } + - { offsetInCU: 0x10, offset: 0xDC249, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0xF0080, symSize: 0x200 } + - { offsetInCU: 0x44, offset: 0xDC27D, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0xF0080, symSize: 0x200 } + - { offsetInCU: 0x66, offset: 0xDC29F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x200, symBinAddr: 0xF0280, symSize: 0x21C0 } + - { offsetInCU: 0x7C, offset: 0xDC2B5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x23C0, symBinAddr: 0xF2440, symSize: 0x1D2D } + - { offsetInCU: 0x83, offset: 0xDC2BC, size: 0x8, addend: 0x0, symName: process_extra_in_trailer, symObjAddr: 0x40ED, symBinAddr: 0xF416D, symSize: 0x553 } + - { offsetInCU: 0x9C, offset: 0xDC2D5, size: 0x8, addend: 0x0, symName: chacha20_poly1305_open_avx2, symObjAddr: 0x4640, symBinAddr: 0xF46C0, symSize: 0x25C0 } + - { offsetInCU: 0xB2, offset: 0xDC2EB, size: 0x8, addend: 0x0, symName: chacha20_poly1305_seal_avx2, symObjAddr: 0x6C00, symBinAddr: 0xF6C80, symSize: 0x2F01 } + - { offsetInCU: 0x10, offset: 0xDC2ED, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xF9BC0, symSize: 0x1200 } + - { offsetInCU: 0x51, offset: 0xDC32E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xF9BC0, symSize: 0x1200 } + - { offsetInCU: 0x5D, offset: 0xDC33A, size: 0x8, addend: 0x0, symName: sha256_block_data_order_shaext, symObjAddr: 0x1200, symBinAddr: 0xFADC0, symSize: 0x340 } + - { offsetInCU: 0x72, offset: 0xDC34F, size: 0x8, addend: 0x0, symName: sha256_block_data_order_ssse3, symObjAddr: 0x1540, symBinAddr: 0xFB100, symSize: 0xEC0 } + - { offsetInCU: 0x86, offset: 0xDC363, size: 0x8, addend: 0x0, symName: sha256_block_data_order_avx, symObjAddr: 0x2400, symBinAddr: 0xFBFC0, symSize: 0xEF7 } ... diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG index 13f286008..9c608b061 100644 Binary files a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG and b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG differ diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml index 786c8684e..1a23e4726 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml @@ -2,221 +2,258 @@ triple: 'arm64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/CanvasSVG' relocations: - - { offsetInCU: 0x34, offset: 0xA80B8, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x544000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0xA80ED, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x544030, symSize: 0x0 } + - { offsetInCU: 0x34, offset: 0xA80B8, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x4C3000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xA80ED, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x4C3030, symSize: 0x0 } - { offsetInCU: 0x27, offset: 0xA812A, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x4000, symSize: 0xB4 } - { offsetInCU: 0x66, offset: 0xA8169, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x4000, symSize: 0xB4 } - { offsetInCU: 0x15B, offset: 0xA825E, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xB4, symBinAddr: 0x40B4, symSize: 0xB4 } - - { offsetInCU: 0x65, offset: 0xA83BD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x4168, symSize: 0x44 } - - { offsetInCU: 0xBD, offset: 0xA8415, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvsTo', symObjAddr: 0x88, symBinAddr: 0x41F0, symSize: 0x48 } - - { offsetInCU: 0x118, offset: 0xA8470, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x12C, symBinAddr: 0x4294, symSize: 0x44 } - - { offsetInCU: 0x170, offset: 0xA84C8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x1B4, symBinAddr: 0x431C, symSize: 0x54 } - - { offsetInCU: 0x1CD, offset: 0xA8525, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvgTo', symObjAddr: 0x2B0, symBinAddr: 0x4418, symSize: 0x44 } - - { offsetInCU: 0x225, offset: 0xA857D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvsTo', symObjAddr: 0x338, symBinAddr: 0x44A0, symSize: 0x48 } - - { offsetInCU: 0x280, offset: 0xA85D8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x424, symBinAddr: 0x458C, symSize: 0x10 } - - { offsetInCU: 0x2A0, offset: 0xA85F8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x424, symBinAddr: 0x458C, symSize: 0x10 } - - { offsetInCU: 0x2D6, offset: 0xA862E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x434, symBinAddr: 0x459C, symSize: 0x10 } - - { offsetInCU: 0x2F6, offset: 0xA864E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x434, symBinAddr: 0x459C, symSize: 0x10 } - - { offsetInCU: 0x32F, offset: 0xA8687, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x444, symBinAddr: 0x45AC, symSize: 0x10 } - - { offsetInCU: 0x34F, offset: 0xA86A7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x444, symBinAddr: 0x45AC, symSize: 0x10 } - - { offsetInCU: 0x385, offset: 0xA86DD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x454, symBinAddr: 0x45BC, symSize: 0x10 } - - { offsetInCU: 0x3A5, offset: 0xA86FD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x454, symBinAddr: 0x45BC, symSize: 0x10 } - - { offsetInCU: 0x3DE, offset: 0xA8736, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x464, symBinAddr: 0x45CC, symSize: 0x10 } - - { offsetInCU: 0x3FE, offset: 0xA8756, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x464, symBinAddr: 0x45CC, symSize: 0x10 } - - { offsetInCU: 0x434, offset: 0xA878C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x474, symBinAddr: 0x45DC, symSize: 0x10 } - - { offsetInCU: 0x454, offset: 0xA87AC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x474, symBinAddr: 0x45DC, symSize: 0x10 } - - { offsetInCU: 0x48D, offset: 0xA87E5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x484, symBinAddr: 0x45EC, symSize: 0x44 } - - { offsetInCU: 0x4FB, offset: 0xA8853, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x50C, symBinAddr: 0x4674, symSize: 0x64 } - - { offsetInCU: 0x5EF, offset: 0xA8947, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScaleSfyFTo', symObjAddr: 0xADC, symBinAddr: 0x4C44, symSize: 0xB8 } - - { offsetInCU: 0x6E0, offset: 0xA8A38, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x150C, symBinAddr: 0x5674, symSize: 0x28 } - - { offsetInCU: 0x712, offset: 0xA8A6A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x17D4, symBinAddr: 0x593C, symSize: 0x28 } - - { offsetInCU: 0x744, offset: 0xA8A9C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1800, symBinAddr: 0x5964, symSize: 0x28 } - - { offsetInCU: 0x78C, offset: 0xA8AE4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1828, symBinAddr: 0x598C, symSize: 0x10 } - - { offsetInCU: 0x7AC, offset: 0xA8B04, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1828, symBinAddr: 0x598C, symSize: 0x10 } - - { offsetInCU: 0x800, offset: 0xA8B58, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1C28, symBinAddr: 0x5D8C, symSize: 0x20 } - - { offsetInCU: 0x837, offset: 0xA8B8F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x1ED0, symBinAddr: 0x6034, symSize: 0x28 } - - { offsetInCU: 0x889, offset: 0xA8BE1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x20DC, symBinAddr: 0x6224, symSize: 0x80 } - - { offsetInCU: 0x8FC, offset: 0xA8C54, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x2304, symBinAddr: 0x644C, symSize: 0x34 } - - { offsetInCU: 0x92E, offset: 0xA8C86, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x23C8, symBinAddr: 0x6510, symSize: 0x34 } - - { offsetInCU: 0xA5C, offset: 0xA8DB4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x4840, symBinAddr: 0x8988, symSize: 0x13F4 } - - { offsetInCU: 0x1743, offset: 0xA9A9B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZTf4nd_n', symObjAddr: 0x5C34, symBinAddr: 0x9D7C, symSize: 0x238 } - - { offsetInCU: 0x1961, offset: 0xA9CB9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZTf4nd_n', symObjAddr: 0x5E6C, symBinAddr: 0x9FB4, symSize: 0x2F0 } - - { offsetInCU: 0x1BAF, offset: 0xA9F07, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZTf4nd_n', symObjAddr: 0x615C, symBinAddr: 0xA2A4, symSize: 0x3A4 } - - { offsetInCU: 0x1E26, offset: 0xAA17E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvpACTK', symObjAddr: 0xD0, symBinAddr: 0x4238, symSize: 0x50 } - - { offsetInCU: 0x1E5E, offset: 0xAA1B6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTK', symObjAddr: 0x208, symBinAddr: 0x4370, symSize: 0x50 } - - { offsetInCU: 0x1E96, offset: 0xAA1EE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTk', symObjAddr: 0x258, symBinAddr: 0x43C0, symSize: 0x58 } - - { offsetInCU: 0x1ED8, offset: 0xAA230, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvpACTK', symObjAddr: 0x380, symBinAddr: 0x44E8, symSize: 0x50 } - - { offsetInCU: 0x1F10, offset: 0xAA268, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x5D0, symBinAddr: 0x4738, symSize: 0x50 } - - { offsetInCU: 0x1F48, offset: 0xAA2A0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x620, symBinAddr: 0x4788, symSize: 0x64 } - - { offsetInCU: 0x2003, offset: 0xAA35B, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x1B88, symBinAddr: 0x5CEC, symSize: 0x40 } - - { offsetInCU: 0x2017, offset: 0xAA36F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x1C08, symBinAddr: 0x5D6C, symSize: 0x20 } - - { offsetInCU: 0x203B, offset: 0xAA393, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x439C, symBinAddr: 0x84E4, symSize: 0x70 } - - { offsetInCU: 0x208F, offset: 0xAA3E7, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSS_Tgm5', symObjAddr: 0x44F4, symBinAddr: 0x863C, symSize: 0x80 } - - { offsetInCU: 0x24F9, offset: 0xAA851, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x652C, symBinAddr: 0xA674, symSize: 0xC } - - { offsetInCU: 0x250D, offset: 0xAA865, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x6538, symBinAddr: 0xA680, symSize: 0x10 } - - { offsetInCU: 0x2521, offset: 0xAA879, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x6548, symBinAddr: 0xA690, symSize: 0x8 } - - { offsetInCU: 0x2535, offset: 0xAA88D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x65E0, symBinAddr: 0xA728, symSize: 0xC } - - { offsetInCU: 0x2549, offset: 0xAA8A1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x661C, symBinAddr: 0xA764, symSize: 0xC } - - { offsetInCU: 0x255D, offset: 0xAA8B5, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x67EC, symBinAddr: 0xA934, symSize: 0xC } - - { offsetInCU: 0x2571, offset: 0xAA8C9, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x67F8, symBinAddr: 0xA940, symSize: 0x4 } - - { offsetInCU: 0x2585, offset: 0xAA8DD, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x67FC, symBinAddr: 0xA944, symSize: 0x20 } - - { offsetInCU: 0x2599, offset: 0xAA8F1, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x681C, symBinAddr: 0xA964, symSize: 0x28 } - - { offsetInCU: 0x25B8, offset: 0xAA910, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x68C0, symBinAddr: 0xAA08, symSize: 0x10 } - - { offsetInCU: 0x25E1, offset: 0xAA939, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x68D0, symBinAddr: 0xAA18, symSize: 0x40 } - - { offsetInCU: 0x25F5, offset: 0xAA94D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x694C, symBinAddr: 0xAA94, symSize: 0x24 } - - { offsetInCU: 0x2629, offset: 0xAA981, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x69A8, symBinAddr: 0xAAF0, symSize: 0x44 } - - { offsetInCU: 0x263D, offset: 0xAA995, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_yyScMYccfU_Tf2niiin_nTA', symObjAddr: 0x6B68, symBinAddr: 0xACB0, symSize: 0x108 } - - { offsetInCU: 0x2750, offset: 0xAAAA8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x6C94, symBinAddr: 0xADDC, symSize: 0x8 } - - { offsetInCU: 0x2CF9, offset: 0xAB051, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvg', symObjAddr: 0x44, symBinAddr: 0x41AC, symSize: 0x44 } - - { offsetInCU: 0x2D81, offset: 0xAB0D9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg', symObjAddr: 0x170, symBinAddr: 0x42D8, symSize: 0x44 } - - { offsetInCU: 0x2DD9, offset: 0xAB131, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvg', symObjAddr: 0x2F4, symBinAddr: 0x445C, symSize: 0x44 } - - { offsetInCU: 0x2ED2, offset: 0xAB22A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x4C8, symBinAddr: 0x4630, symSize: 0x44 } - - { offsetInCU: 0x2F25, offset: 0xAB27D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x570, symBinAddr: 0x46D8, symSize: 0x60 } - - { offsetInCU: 0x2F95, offset: 0xAB2ED, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0x684, symBinAddr: 0x47EC, symSize: 0x48 } - - { offsetInCU: 0x2FBA, offset: 0xAB312, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0x6CC, symBinAddr: 0x4834, symSize: 0x3C } - - { offsetInCU: 0x3016, offset: 0xAB36E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0x750, symBinAddr: 0x48B8, symSize: 0x48 } - - { offsetInCU: 0x303B, offset: 0xAB393, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xA60, symBinAddr: 0x4BC8, symSize: 0x48 } - - { offsetInCU: 0x31D8, offset: 0xAB530, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xB94, symBinAddr: 0x4CFC, symSize: 0x46C } - - { offsetInCU: 0x34EC, offset: 0xAB844, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x1000, symBinAddr: 0x5168, symSize: 0x508 } - - { offsetInCU: 0x3750, offset: 0xABAA8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1534, symBinAddr: 0x569C, symSize: 0x2A0 } - - { offsetInCU: 0x3AEF, offset: 0xABE47, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1838, symBinAddr: 0x599C, symSize: 0x50 } - - { offsetInCU: 0x3B03, offset: 0xABE5B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1888, symBinAddr: 0x59EC, symSize: 0x300 } - - { offsetInCU: 0x3B7F, offset: 0xABED7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1C48, symBinAddr: 0x5DAC, symSize: 0x288 } - - { offsetInCU: 0x3C2E, offset: 0xABF86, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9drawImage33_C2B5A81EA80ED94FA09E8C035710AE36LLyySo6CGRectVF', symObjAddr: 0x1EF8, symBinAddr: 0x605C, symSize: 0x1C8 } - - { offsetInCU: 0x3E34, offset: 0xAC18C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x215C, symBinAddr: 0x62A4, symSize: 0x1A8 } - - { offsetInCU: 0x4010, offset: 0xAC368, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2338, symBinAddr: 0x6480, symSize: 0x90 } - - { offsetInCU: 0x40BF, offset: 0xAC417, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ', symObjAddr: 0x23FC, symBinAddr: 0x6544, symSize: 0x4 } - - { offsetInCU: 0x40D3, offset: 0xAC42B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ', symObjAddr: 0x240C, symBinAddr: 0x6554, symSize: 0x4 } - - { offsetInCU: 0x40E7, offset: 0xAC43F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ', symObjAddr: 0x241C, symBinAddr: 0x6564, symSize: 0x4 } - - { offsetInCU: 0x4107, offset: 0xAC45F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ', symObjAddr: 0x2468, symBinAddr: 0x65B0, symSize: 0x27C } - - { offsetInCU: 0x4172, offset: 0xAC4CA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x26E4, symBinAddr: 0x682C, symSize: 0x400 } - - { offsetInCU: 0x4463, offset: 0xAC7BB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x2B4C, symBinAddr: 0x6C94, symSize: 0x84C } - - { offsetInCU: 0x45C3, offset: 0xAC91B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x36EC, symBinAddr: 0x7834, symSize: 0xC64 } - - { offsetInCU: 0x478A, offset: 0xACAE2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfD', symObjAddr: 0x436C, symBinAddr: 0x84B4, symSize: 0x30 } - - { offsetInCU: 0x47AD, offset: 0xACB05, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x440C, symBinAddr: 0x8554, symSize: 0xE8 } - - { offsetInCU: 0x47E9, offset: 0xACB41, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x4574, symBinAddr: 0x86BC, symSize: 0x1F4 } - - { offsetInCU: 0x4846, offset: 0xACB9E, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x4768, symBinAddr: 0x88B0, symSize: 0x1C } - - { offsetInCU: 0x487D, offset: 0xACBD5, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x4784, symBinAddr: 0x88CC, symSize: 0xBC } - - { offsetInCU: 0x26, offset: 0xACF12, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x95D00, symSize: 0x26E4 } - - { offsetInCU: 0x40, offset: 0xACF2C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9A58, symBinAddr: 0x57C1D8, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0xACF7E, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFA58, symBinAddr: 0x5821D8, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0xACFE2, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFA80, symBinAddr: 0x582200, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0xACFF8, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0xFE88, symBinAddr: 0x582608, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0xAD00F, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFAC8, symBinAddr: 0x582248, symSize: 0x0 } - - { offsetInCU: 0xE22, offset: 0xADD0E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x95D00, symSize: 0x26E4 } - - { offsetInCU: 0x4BAD, offset: 0xB1A99, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x95DC, symBinAddr: 0x9F2DC, symSize: 0x210 } - - { offsetInCU: 0x4E0E, offset: 0xB1CFA, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E90, symBinAddr: 0x9AB90, symSize: 0x1B8 } - - { offsetInCU: 0x5399, offset: 0xB2285, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0x983E4, symSize: 0x5A8 } - - { offsetInCU: 0x5EE1, offset: 0xB2DCD, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0x9898C, symSize: 0x6C4 } - - { offsetInCU: 0x62A7, offset: 0xB3193, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3350, symBinAddr: 0x99050, symSize: 0x1F0 } - - { offsetInCU: 0x67BC, offset: 0xB36A8, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x3540, symBinAddr: 0x99240, symSize: 0x7C4 } - - { offsetInCU: 0x75BF, offset: 0xB44AB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3D04, symBinAddr: 0x99A04, symSize: 0x614 } - - { offsetInCU: 0x7F4E, offset: 0xB4E3A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4318, symBinAddr: 0x9A018, symSize: 0xB78 } - - { offsetInCU: 0x9487, offset: 0xB6373, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x513C, symBinAddr: 0x9AE3C, symSize: 0x23CC } - - { offsetInCU: 0xC9EC, offset: 0xB98D8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5048, symBinAddr: 0x9AD48, symSize: 0xF4 } - - { offsetInCU: 0xCBE7, offset: 0xB9AD3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7508, symBinAddr: 0x9D208, symSize: 0x30 } - - { offsetInCU: 0xCCD8, offset: 0xB9BC4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x7538, symBinAddr: 0x9D238, symSize: 0x58 } - - { offsetInCU: 0xCD4D, offset: 0xB9C39, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x9D290, symSize: 0x4 } - - { offsetInCU: 0xCD95, offset: 0xB9C81, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x9D290, symSize: 0x4 } - - { offsetInCU: 0xCDC4, offset: 0xB9CB0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x9D290, symSize: 0x4 } - - { offsetInCU: 0xCDE8, offset: 0xB9CD4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7594, symBinAddr: 0x9D294, symSize: 0x8C } - - { offsetInCU: 0xCF3B, offset: 0xB9E27, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0x9D320, symSize: 0x4 } - - { offsetInCU: 0xCF74, offset: 0xB9E60, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0x9D320, symSize: 0x4 } - - { offsetInCU: 0xD20D, offset: 0xBA0F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x7624, symBinAddr: 0x9D324, symSize: 0x1400 } - - { offsetInCU: 0xF96D, offset: 0xBC859, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x97EC, symBinAddr: 0x9F4EC, symSize: 0x200 } - - { offsetInCU: 0xFED4, offset: 0xBCDC0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8A24, symBinAddr: 0x9E724, symSize: 0x20 } - - { offsetInCU: 0x10371, offset: 0xBD25D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8A44, symBinAddr: 0x9E744, symSize: 0xB98 } - - { offsetInCU: 0x26, offset: 0xBE000, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x9F6EC, symSize: 0x1E0 } - - { offsetInCU: 0x1D2, offset: 0xBE1AC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x9F6EC, symSize: 0x1E0 } - - { offsetInCU: 0x26, offset: 0xBE447, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x9F8CC, symSize: 0x3C } - - { offsetInCU: 0x34, offset: 0xBE455, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x9F8CC, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xBE565, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x9F908, symSize: 0x90 } - - { offsetInCU: 0x34, offset: 0xBE573, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x9F908, symSize: 0x90 } - - { offsetInCU: 0x86, offset: 0xBE6D6, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0x5826D0, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0xBE708, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0x582660, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0xBE72A, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0x582690, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0xBE740, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0x5826C0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0xBEA07, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x9F998, symSize: 0x18 } - - { offsetInCU: 0x3FB, offset: 0xBEA4B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x9F998, symSize: 0x18 } - - { offsetInCU: 0x594, offset: 0xBEBE4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x9F9B0, symSize: 0x18 } - - { offsetInCU: 0x63F, offset: 0xBEC8F, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x9F9C8, symSize: 0x300 } - - { offsetInCU: 0x10E8, offset: 0xBF738, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0x9FCC8, symSize: 0xAC } - - { offsetInCU: 0x13DE, offset: 0xBFA2E, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0x9FD74, symSize: 0x4D0 } - - { offsetInCU: 0x24F2, offset: 0xC0B42, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0xA0244, symSize: 0x28C } - - { offsetInCU: 0x2B67, offset: 0xC11B7, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0xA04D0, symSize: 0xF4 } - - { offsetInCU: 0x2D72, offset: 0xC13C2, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0xA05C4, symSize: 0x168 } - - { offsetInCU: 0x26, offset: 0xC171F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA072C, symSize: 0x38 } - - { offsetInCU: 0xFA, offset: 0xC17F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA072C, symSize: 0x38 } - - { offsetInCU: 0x12C, offset: 0xC1825, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA072C, symSize: 0x38 } - - { offsetInCU: 0x199, offset: 0xC1892, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xA0764, symSize: 0x3C } - - { offsetInCU: 0x1F3, offset: 0xC18EC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xA0764, symSize: 0x3C } - - { offsetInCU: 0x31B, offset: 0xC1A14, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0xA07A0, symSize: 0x5C } - - { offsetInCU: 0x517, offset: 0xC1C10, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0xA07FC, symSize: 0x1C } - - { offsetInCU: 0x636, offset: 0xC1D2F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0xA0818, symSize: 0x54 } - - { offsetInCU: 0x6D0, offset: 0xC1DC9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0xA086C, symSize: 0x4C } - - { offsetInCU: 0x8A8, offset: 0xC1FA1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xA08B8, symSize: 0xA8 } - - { offsetInCU: 0x90C, offset: 0xC2005, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xA08B8, symSize: 0xA8 } - - { offsetInCU: 0xBA6, offset: 0xC229F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0xA0960, symSize: 0x124 } - - { offsetInCU: 0xEC3, offset: 0xC25BC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xA0A84, symSize: 0xC8 } - - { offsetInCU: 0xF43, offset: 0xC263C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xA0A84, symSize: 0xC8 } - - { offsetInCU: 0x10B0, offset: 0xC27A9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0xA0B4C, symSize: 0x160 } - - { offsetInCU: 0x134C, offset: 0xC2A45, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x580, symBinAddr: 0xA0CAC, symSize: 0x150 } - - { offsetInCU: 0x14BB, offset: 0xC2BB4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x6D0, symBinAddr: 0xA0DFC, symSize: 0x18 } - - { offsetInCU: 0x1522, offset: 0xC2C1B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x6E8, symBinAddr: 0xA0E14, symSize: 0xC } - - { offsetInCU: 0x155B, offset: 0xC2C54, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x6F4, symBinAddr: 0xA0E20, symSize: 0x8 } - - { offsetInCU: 0x15DF, offset: 0xC2CD8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x6FC, symBinAddr: 0xA0E28, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xC2E85, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xA0E64, symSize: 0x120 } - - { offsetInCU: 0x34, offset: 0xC2E93, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xA0E64, symSize: 0x120 } - - { offsetInCU: 0x34, offset: 0xC2F99, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x364, symBinAddr: 0xC2B570, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xC2FDB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xA0F84, symSize: 0x35C } - - { offsetInCU: 0x76, offset: 0xC302B, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x583000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xC30AF, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x5A8000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xC3310, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xA0F84, symSize: 0x35C } - - { offsetInCU: 0xC70, offset: 0xC3C25, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0xA12E0, symSize: 0x1FC } - - { offsetInCU: 0x116D, offset: 0xC4122, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0xA14DC, symSize: 0x1B8 } - - { offsetInCU: 0x10, offset: 0xC44F7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xA16A0, symSize: 0x1A0 } - - { offsetInCU: 0x50, offset: 0xC4537, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xA16A0, symSize: 0x1A0 } - - { offsetInCU: 0x5E, offset: 0xC4545, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0xA1840, symSize: 0x60 } - - { offsetInCU: 0x81, offset: 0xC4568, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0xA18A0, symSize: 0x288 } - - { offsetInCU: 0x10, offset: 0xC4559, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xA1B30, symSize: 0x130 } - - { offsetInCU: 0x48, offset: 0xC4591, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xA1B30, symSize: 0x130 } - - { offsetInCU: 0x5F, offset: 0xC45A8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0xA1C60, symSize: 0x70 } - - { offsetInCU: 0x75, offset: 0xC45BE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0xA1CD0, symSize: 0x160 } - - { offsetInCU: 0x7A, offset: 0xC45C3, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0xA1E30, symSize: 0x378 } - - { offsetInCU: 0x10, offset: 0xC45D1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xA21C0, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xC4609, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xA21C0, symSize: 0x3A0 } - - { offsetInCU: 0x4C, offset: 0xC460D, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0xA2560, symSize: 0x6C0 } - - { offsetInCU: 0x66, offset: 0xC4627, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0xA2C20, symSize: 0x1138 } - - { offsetInCU: 0x50, offset: 0xC4673, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0xA3EC0, symSize: 0x1180 } - - { offsetInCU: 0x66, offset: 0xC4689, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0xA5040, symSize: 0x1410 } - - { offsetInCU: 0x10, offset: 0xC467F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA6460, symSize: 0x240 } - - { offsetInCU: 0x45, offset: 0xC46B4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA6460, symSize: 0x240 } - - { offsetInCU: 0x4D, offset: 0xC46BC, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0xA66A0, symSize: 0x9E0 } - - { offsetInCU: 0x63, offset: 0xC46D2, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0xA7080, symSize: 0x650 } - - { offsetInCU: 0x10, offset: 0xC46E1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA76E0, symSize: 0x40 } - - { offsetInCU: 0x47, offset: 0xC4718, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA76E0, symSize: 0x40 } - - { offsetInCU: 0x5D, offset: 0xC472E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0xA7720, symSize: 0x40 } - - { offsetInCU: 0x76, offset: 0xC4747, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0xA7760, symSize: 0x40 } - - { offsetInCU: 0x81, offset: 0xC4752, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0xA77A0, symSize: 0x1E0 } - - { offsetInCU: 0x97, offset: 0xC4768, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0xA7980, symSize: 0x170 } - - { offsetInCU: 0xAB, offset: 0xC477C, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0xA7AF0, symSize: 0x50 } - - { offsetInCU: 0xC3, offset: 0xC4794, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0xA7B40, symSize: 0x50 } - - { offsetInCU: 0xD9, offset: 0xC47AA, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0xA7B90, symSize: 0x50 } - - { offsetInCU: 0xEF, offset: 0xC47C0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0xA7BE0, symSize: 0x60 } - - { offsetInCU: 0x111, offset: 0xC47E2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0xA7C40, symSize: 0x1E0 } - - { offsetInCU: 0x124, offset: 0xC47F5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0xA7E20, symSize: 0x360 } - - { offsetInCU: 0x141, offset: 0xC4812, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0xA8180, symSize: 0x2D0 } - - { offsetInCU: 0x156, offset: 0xC4827, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0xA8450, symSize: 0x2B0 } - - { offsetInCU: 0x170, offset: 0xC4841, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0xA8700, symSize: 0x250 } - - { offsetInCU: 0x184, offset: 0xC4855, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0xA8950, symSize: 0x60 } - - { offsetInCU: 0x19A, offset: 0xC486B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0xA89B0, symSize: 0x44 } - - { offsetInCU: 0x10, offset: 0xC4861, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xA8A00, symSize: 0xB90 } - - { offsetInCU: 0x4C, offset: 0xC489D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xA8A00, symSize: 0xB90 } - - { offsetInCU: 0x62, offset: 0xC48B3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0xA9590, symSize: 0xB98 } - - { offsetInCU: 0x10, offset: 0xC48AD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAA140, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC48EE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAA140, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC48EE, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xAAF80, symSize: 0x7E0 } - - { offsetInCU: 0x10, offset: 0xC48F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAB780, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC493A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAB780, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC493A, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xAC5C0, symSize: 0x1F0 } + - { offsetInCU: 0x65, offset: 0xA83BD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x4168, symSize: 0x10 } + - { offsetInCU: 0x85, offset: 0xA83DD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x4168, symSize: 0x10 } + - { offsetInCU: 0xBB, offset: 0xA8413, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x10, symBinAddr: 0x4178, symSize: 0x10 } + - { offsetInCU: 0xDB, offset: 0xA8433, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x10, symBinAddr: 0x4178, symSize: 0x10 } + - { offsetInCU: 0x114, offset: 0xA846C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x20, symBinAddr: 0x4188, symSize: 0x14 } + - { offsetInCU: 0x134, offset: 0xA848C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x20, symBinAddr: 0x4188, symSize: 0x14 } + - { offsetInCU: 0x16A, offset: 0xA84C2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x34, symBinAddr: 0x419C, symSize: 0x14 } + - { offsetInCU: 0x18A, offset: 0xA84E2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x34, symBinAddr: 0x419C, symSize: 0x14 } + - { offsetInCU: 0x1C5, offset: 0xA851D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x48, symBinAddr: 0x41B0, symSize: 0x10 } + - { offsetInCU: 0x1E5, offset: 0xA853D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x48, symBinAddr: 0x41B0, symSize: 0x10 } + - { offsetInCU: 0x21B, offset: 0xA8573, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0x58, symBinAddr: 0x41C0, symSize: 0x10 } + - { offsetInCU: 0x23B, offset: 0xA8593, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0x58, symBinAddr: 0x41C0, symSize: 0x10 } + - { offsetInCU: 0x274, offset: 0xA85CC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0x68, symBinAddr: 0x41D0, symSize: 0x10 } + - { offsetInCU: 0x294, offset: 0xA85EC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0x68, symBinAddr: 0x41D0, symSize: 0x10 } + - { offsetInCU: 0x2CC, offset: 0xA8624, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvsTo', symObjAddr: 0x78, symBinAddr: 0x41E0, symSize: 0x34 } + - { offsetInCU: 0x325, offset: 0xA867D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0xAC, symBinAddr: 0x4214, symSize: 0x10 } + - { offsetInCU: 0x345, offset: 0xA869D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0xAC, symBinAddr: 0x4214, symSize: 0x10 } + - { offsetInCU: 0x378, offset: 0xA86D0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0xBC, symBinAddr: 0x4224, symSize: 0x10 } + - { offsetInCU: 0x398, offset: 0xA86F0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0xBC, symBinAddr: 0x4224, symSize: 0x10 } + - { offsetInCU: 0x3D0, offset: 0xA8728, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvsTo', symObjAddr: 0xCC, symBinAddr: 0x4234, symSize: 0x34 } + - { offsetInCU: 0x433, offset: 0xA878B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x278, symBinAddr: 0x43E0, symSize: 0x40 } + - { offsetInCU: 0x465, offset: 0xA87BD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4420, symSize: 0x10 } + - { offsetInCU: 0x485, offset: 0xA87DD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4420, symSize: 0x10 } + - { offsetInCU: 0x4A2, offset: 0xA87FA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4420, symSize: 0x10 } + - { offsetInCU: 0x4D4, offset: 0xA882C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4440, symSize: 0x14 } + - { offsetInCU: 0x4F4, offset: 0xA884C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4440, symSize: 0x14 } + - { offsetInCU: 0x511, offset: 0xA8869, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4440, symSize: 0x14 } + - { offsetInCU: 0x543, offset: 0xA889B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x4468, symSize: 0x10 } + - { offsetInCU: 0x563, offset: 0xA88BB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x4468, symSize: 0x10 } + - { offsetInCU: 0x580, offset: 0xA88D8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x4468, symSize: 0x10 } + - { offsetInCU: 0x59C, offset: 0xA88F4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgTo', symObjAddr: 0x320, symBinAddr: 0x4488, symSize: 0x34 } + - { offsetInCU: 0x5E4, offset: 0xA893C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyFTo', symObjAddr: 0x610, symBinAddr: 0x4778, symSize: 0x34 } + - { offsetInCU: 0x62C, offset: 0xA8984, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfcTo', symObjAddr: 0x708, symBinAddr: 0x4870, symSize: 0x20 } + - { offsetInCU: 0x659, offset: 0xA89B1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCfETo', symObjAddr: 0x734, symBinAddr: 0x489C, symSize: 0x48 } + - { offsetInCU: 0x6AA, offset: 0xA8A02, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x77C, symBinAddr: 0x48E4, symSize: 0x10 } + - { offsetInCU: 0x6CA, offset: 0xA8A22, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x77C, symBinAddr: 0x48E4, symSize: 0x10 } + - { offsetInCU: 0x700, offset: 0xA8A58, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x78C, symBinAddr: 0x48F4, symSize: 0x10 } + - { offsetInCU: 0x720, offset: 0xA8A78, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x78C, symBinAddr: 0x48F4, symSize: 0x10 } + - { offsetInCU: 0x759, offset: 0xA8AB1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x79C, symBinAddr: 0x4904, symSize: 0x10 } + - { offsetInCU: 0x779, offset: 0xA8AD1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x79C, symBinAddr: 0x4904, symSize: 0x10 } + - { offsetInCU: 0x7AF, offset: 0xA8B07, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x7AC, symBinAddr: 0x4914, symSize: 0x10 } + - { offsetInCU: 0x7CF, offset: 0xA8B27, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x7AC, symBinAddr: 0x4914, symSize: 0x10 } + - { offsetInCU: 0x808, offset: 0xA8B60, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x7BC, symBinAddr: 0x4924, symSize: 0x10 } + - { offsetInCU: 0x828, offset: 0xA8B80, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x7BC, symBinAddr: 0x4924, symSize: 0x10 } + - { offsetInCU: 0x85E, offset: 0xA8BB6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x7CC, symBinAddr: 0x4934, symSize: 0x10 } + - { offsetInCU: 0x87E, offset: 0xA8BD6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x7CC, symBinAddr: 0x4934, symSize: 0x10 } + - { offsetInCU: 0x8B7, offset: 0xA8C0F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x7DC, symBinAddr: 0x4944, symSize: 0x10 } + - { offsetInCU: 0x8D7, offset: 0xA8C2F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x7DC, symBinAddr: 0x4944, symSize: 0x10 } + - { offsetInCU: 0x90F, offset: 0xA8C67, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvsTo', symObjAddr: 0x7EC, symBinAddr: 0x4954, symSize: 0x34 } + - { offsetInCU: 0x968, offset: 0xA8CC0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x820, symBinAddr: 0x4988, symSize: 0x44 } + - { offsetInCU: 0x9D6, offset: 0xA8D2E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x8A8, symBinAddr: 0x4A10, symSize: 0x64 } + - { offsetInCU: 0xACA, offset: 0xA8E22, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScale12CoreGraphics7CGFloatVyFTo', symObjAddr: 0xE78, symBinAddr: 0x4FE0, symSize: 0xB8 } + - { offsetInCU: 0xBA6, offset: 0xA8EFE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x193C, symBinAddr: 0x5AA4, symSize: 0x28 } + - { offsetInCU: 0xBD8, offset: 0xA8F30, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x1AD0, symBinAddr: 0x5C38, symSize: 0x28 } + - { offsetInCU: 0xC0A, offset: 0xA8F62, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1AFC, symBinAddr: 0x5C60, symSize: 0x28 } + - { offsetInCU: 0xC52, offset: 0xA8FAA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1B24, symBinAddr: 0x5C88, symSize: 0x10 } + - { offsetInCU: 0xC72, offset: 0xA8FCA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1B24, symBinAddr: 0x5C88, symSize: 0x10 } + - { offsetInCU: 0xCC6, offset: 0xA901E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1E68, symBinAddr: 0x5FCC, symSize: 0x20 } + - { offsetInCU: 0xCFD, offset: 0xA9055, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x20F4, symBinAddr: 0x6258, symSize: 0x28 } + - { offsetInCU: 0xD4F, offset: 0xA90A7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x2258, symBinAddr: 0x63BC, symSize: 0x58 } + - { offsetInCU: 0xD81, offset: 0xA90D9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x2310, symBinAddr: 0x6474, symSize: 0x34 } + - { offsetInCU: 0xDB4, offset: 0xA910C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x2388, symBinAddr: 0x64EC, symSize: 0x60 } + - { offsetInCU: 0xE79, offset: 0xA91D1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9emitEventyySo9NSRunLoopC_So7NSTimerCtFZTo', symObjAddr: 0x2454, symBinAddr: 0x65B8, symSize: 0x24 } + - { offsetInCU: 0xF6D, offset: 0xA92C5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x3668, symBinAddr: 0x77CC, symSize: 0x14F0 } + - { offsetInCU: 0x1EB7, offset: 0xAA20F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4B58, symBinAddr: 0x8CBC, symSize: 0x114 } + - { offsetInCU: 0x2047, offset: 0xAA39F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4C6C, symBinAddr: 0x8DD0, symSize: 0x1E0 } + - { offsetInCU: 0x21F7, offset: 0xAA54F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4E4C, symBinAddr: 0x8FB0, symSize: 0x298 } + - { offsetInCU: 0x23DA, offset: 0xAA732, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x96C, symBinAddr: 0x4AD4, symSize: 0x50 } + - { offsetInCU: 0x2412, offset: 0xAA76A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x9BC, symBinAddr: 0x4B24, symSize: 0x64 } + - { offsetInCU: 0x24A8, offset: 0xAA800, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x2728, symBinAddr: 0x688C, symSize: 0x4C } + - { offsetInCU: 0x24C0, offset: 0xAA818, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x3090, symBinAddr: 0x71F4, symSize: 0x80 } + - { offsetInCU: 0x24EF, offset: 0xAA847, size: 0x8, addend: 0x0, symName: '_$sSvSiIegyy_SvSiIeyByy_TR', symObjAddr: 0x3110, symBinAddr: 0x7274, symSize: 0x48 } + - { offsetInCU: 0x252C, offset: 0xAA884, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSS_Tgm5', symObjAddr: 0x3240, symBinAddr: 0x73A4, symSize: 0x80 } + - { offsetInCU: 0x2670, offset: 0xAA9C8, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x3590, symBinAddr: 0x76F4, symSize: 0x10 } + - { offsetInCU: 0x2684, offset: 0xAA9DC, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x35A0, symBinAddr: 0x7704, symSize: 0x8 } + - { offsetInCU: 0x2698, offset: 0xAA9F0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCMa', symObjAddr: 0x35A8, symBinAddr: 0x770C, symSize: 0x20 } + - { offsetInCU: 0x26AC, offset: 0xAAA04, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x35C8, symBinAddr: 0x772C, symSize: 0x40 } + - { offsetInCU: 0x26C0, offset: 0xAAA18, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x3648, symBinAddr: 0x77AC, symSize: 0x20 } + - { offsetInCU: 0x2A15, offset: 0xAAD6D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5118, symBinAddr: 0x927C, symSize: 0x304 } + - { offsetInCU: 0x2C11, offset: 0xAAF69, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x54AC, symBinAddr: 0x9610, symSize: 0x3DC } + - { offsetInCU: 0x2E32, offset: 0xAB18A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x58C0, symBinAddr: 0x9A24, symSize: 0x10 } + - { offsetInCU: 0x2E46, offset: 0xAB19E, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x5AD8, symBinAddr: 0x9C3C, symSize: 0xC } + - { offsetInCU: 0x2E5A, offset: 0xAB1B2, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x5AE4, symBinAddr: 0x9C48, symSize: 0x4 } + - { offsetInCU: 0x2E6E, offset: 0xAB1C6, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x5AE8, symBinAddr: 0x9C4C, symSize: 0x20 } + - { offsetInCU: 0x2E82, offset: 0xAB1DA, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x5B08, symBinAddr: 0x9C6C, symSize: 0x28 } + - { offsetInCU: 0x2EA1, offset: 0xAB1F9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x5BAC, symBinAddr: 0x9D10, symSize: 0x10 } + - { offsetInCU: 0x2ECA, offset: 0xAB222, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU_TA', symObjAddr: 0x5BE0, symBinAddr: 0x9D44, symSize: 0x24 } + - { offsetInCU: 0x2EFE, offset: 0xAB256, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x5C04, symBinAddr: 0x9D68, symSize: 0x40 } + - { offsetInCU: 0x2F12, offset: 0xAB26A, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x5C84, symBinAddr: 0x9DE8, symSize: 0x44 } + - { offsetInCU: 0x2F26, offset: 0xAB27E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU0_Tf2nni_nTA', symObjAddr: 0x5D28, symBinAddr: 0x9E8C, symSize: 0x28 } + - { offsetInCU: 0x2F63, offset: 0xAB2BB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x5D74, symBinAddr: 0x9ED8, symSize: 0x8 } + - { offsetInCU: 0x3777, offset: 0xABACF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x100, symBinAddr: 0x4268, symSize: 0x178 } + - { offsetInCU: 0x3993, offset: 0xABCEB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x2C8, symBinAddr: 0x4430, symSize: 0x10 } + - { offsetInCU: 0x39B3, offset: 0xABD0B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x2C8, symBinAddr: 0x4430, symSize: 0x10 } + - { offsetInCU: 0x39E2, offset: 0xABD3A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x2EC, symBinAddr: 0x4454, symSize: 0x14 } + - { offsetInCU: 0x3A02, offset: 0xABD5A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x2EC, symBinAddr: 0x4454, symSize: 0x14 } + - { offsetInCU: 0x3A31, offset: 0xABD89, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x310, symBinAddr: 0x4478, symSize: 0x10 } + - { offsetInCU: 0x3A51, offset: 0xABDA9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x310, symBinAddr: 0x4478, symSize: 0x10 } + - { offsetInCU: 0x3A87, offset: 0xABDDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg', symObjAddr: 0x354, symBinAddr: 0x44BC, symSize: 0x124 } + - { offsetInCU: 0x3B9C, offset: 0xABEF4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgySv_SitcfU_Tf4nnd_n', symObjAddr: 0x358C, symBinAddr: 0x76F0, symSize: 0x4 } + - { offsetInCU: 0x3BD0, offset: 0xABF28, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF', symObjAddr: 0x478, symBinAddr: 0x45E0, symSize: 0x198 } + - { offsetInCU: 0x3DFA, offset: 0xAC152, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfC', symObjAddr: 0x644, symBinAddr: 0x47AC, symSize: 0x20 } + - { offsetInCU: 0x3E0E, offset: 0xAC166, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfc', symObjAddr: 0x664, symBinAddr: 0x47CC, symSize: 0xA4 } + - { offsetInCU: 0x3F26, offset: 0xAC27E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x864, symBinAddr: 0x49CC, symSize: 0x44 } + - { offsetInCU: 0x3F79, offset: 0xAC2D1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x90C, symBinAddr: 0x4A74, symSize: 0x60 } + - { offsetInCU: 0x3FE9, offset: 0xAC341, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0xA20, symBinAddr: 0x4B88, symSize: 0x48 } + - { offsetInCU: 0x400E, offset: 0xAC366, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0xA68, symBinAddr: 0x4BD0, symSize: 0x3C } + - { offsetInCU: 0x406A, offset: 0xAC3C2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0xAEC, symBinAddr: 0x4C54, symSize: 0x48 } + - { offsetInCU: 0x408F, offset: 0xAC3E7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xDFC, symBinAddr: 0x4F64, symSize: 0x48 } + - { offsetInCU: 0x422C, offset: 0xAC584, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xF30, symBinAddr: 0x5098, symSize: 0x444 } + - { offsetInCU: 0x45A2, offset: 0xAC8FA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x1374, symBinAddr: 0x54DC, symSize: 0x5C4 } + - { offsetInCU: 0x4887, offset: 0xACBDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1964, symBinAddr: 0x5ACC, symSize: 0x16C } + - { offsetInCU: 0x4A13, offset: 0xACD6B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1B34, symBinAddr: 0x5C98, symSize: 0x50 } + - { offsetInCU: 0x4A27, offset: 0xACD7F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1B84, symBinAddr: 0x5CE8, symSize: 0x2E4 } + - { offsetInCU: 0x4AA3, offset: 0xACDFB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1E88, symBinAddr: 0x5FEC, symSize: 0x26C } + - { offsetInCU: 0x4B63, offset: 0xACEBB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVF', symObjAddr: 0x211C, symBinAddr: 0x6280, symSize: 0x13C } + - { offsetInCU: 0x4CF9, offset: 0xAD051, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x22B0, symBinAddr: 0x6414, symSize: 0x60 } + - { offsetInCU: 0x4D5A, offset: 0xAD0B2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2344, symBinAddr: 0x64A8, symSize: 0x44 } + - { offsetInCU: 0x4DAD, offset: 0xAD105, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23E8, symBinAddr: 0x654C, symSize: 0x4 } + - { offsetInCU: 0x4DC1, offset: 0xAD119, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23F8, symBinAddr: 0x655C, symSize: 0x4 } + - { offsetInCU: 0x4DD5, offset: 0xAD12D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x2408, symBinAddr: 0x656C, symSize: 0x4 } + - { offsetInCU: 0x4E33, offset: 0xAD18B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ', symObjAddr: 0x2478, symBinAddr: 0x65DC, symSize: 0x2B0 } + - { offsetInCU: 0x4FAA, offset: 0xAD302, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_', symObjAddr: 0x2B68, symBinAddr: 0x6CCC, symSize: 0x4D0 } + - { offsetInCU: 0x5173, offset: 0xAD4CB, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x3158, symBinAddr: 0x72BC, symSize: 0xE8 } + - { offsetInCU: 0x51AF, offset: 0xAD507, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x32C0, symBinAddr: 0x7424, symSize: 0x1F4 } + - { offsetInCU: 0x520C, offset: 0xAD564, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x34B4, symBinAddr: 0x7618, symSize: 0x1C } + - { offsetInCU: 0x5243, offset: 0xAD59B, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x34D0, symBinAddr: 0x7634, symSize: 0xBC } + - { offsetInCU: 0x26, offset: 0xAD935, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xAD114, symSize: 0x26E4 } + - { offsetInCU: 0x40, offset: 0xAD94F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9A58, symBinAddr: 0x4FF188, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0xAD9A1, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFA58, symBinAddr: 0x505188, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0xADA05, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFA80, symBinAddr: 0x5051B0, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0xADA1B, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0xFE88, symBinAddr: 0x5055B8, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0xADA32, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFAC8, symBinAddr: 0x5051F8, symSize: 0x0 } + - { offsetInCU: 0xE22, offset: 0xAE731, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xAD114, symSize: 0x26E4 } + - { offsetInCU: 0x4BAD, offset: 0xB24BC, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x95DC, symBinAddr: 0xB66F0, symSize: 0x210 } + - { offsetInCU: 0x4E0E, offset: 0xB271D, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E90, symBinAddr: 0xB1FA4, symSize: 0x1B8 } + - { offsetInCU: 0x5399, offset: 0xB2CA8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0xAF7F8, symSize: 0x5A8 } + - { offsetInCU: 0x5EE1, offset: 0xB37F0, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0xAFDA0, symSize: 0x6C4 } + - { offsetInCU: 0x62A7, offset: 0xB3BB6, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3350, symBinAddr: 0xB0464, symSize: 0x1F0 } + - { offsetInCU: 0x67BC, offset: 0xB40CB, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x3540, symBinAddr: 0xB0654, symSize: 0x7C4 } + - { offsetInCU: 0x75BF, offset: 0xB4ECE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3D04, symBinAddr: 0xB0E18, symSize: 0x614 } + - { offsetInCU: 0x7F4E, offset: 0xB585D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4318, symBinAddr: 0xB142C, symSize: 0xB78 } + - { offsetInCU: 0x9487, offset: 0xB6D96, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x513C, symBinAddr: 0xB2250, symSize: 0x23CC } + - { offsetInCU: 0xC9EC, offset: 0xBA2FB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5048, symBinAddr: 0xB215C, symSize: 0xF4 } + - { offsetInCU: 0xCBE7, offset: 0xBA4F6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7508, symBinAddr: 0xB461C, symSize: 0x30 } + - { offsetInCU: 0xCCD8, offset: 0xBA5E7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x7538, symBinAddr: 0xB464C, symSize: 0x58 } + - { offsetInCU: 0xCD4D, offset: 0xBA65C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0xB46A4, symSize: 0x4 } + - { offsetInCU: 0xCD95, offset: 0xBA6A4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0xB46A4, symSize: 0x4 } + - { offsetInCU: 0xCDC4, offset: 0xBA6D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0xB46A4, symSize: 0x4 } + - { offsetInCU: 0xCDE8, offset: 0xBA6F7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7594, symBinAddr: 0xB46A8, symSize: 0x8C } + - { offsetInCU: 0xCF3B, offset: 0xBA84A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0xB4734, symSize: 0x4 } + - { offsetInCU: 0xCF74, offset: 0xBA883, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0xB4734, symSize: 0x4 } + - { offsetInCU: 0xD20D, offset: 0xBAB1C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x7624, symBinAddr: 0xB4738, symSize: 0x1400 } + - { offsetInCU: 0xF96D, offset: 0xBD27C, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x97EC, symBinAddr: 0xB6900, symSize: 0x200 } + - { offsetInCU: 0xFED4, offset: 0xBD7E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8A24, symBinAddr: 0xB5B38, symSize: 0x20 } + - { offsetInCU: 0x10371, offset: 0xBDC80, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8A44, symBinAddr: 0xB5B58, symSize: 0xB98 } + - { offsetInCU: 0x26, offset: 0xBEA23, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xB6B00, symSize: 0x1E0 } + - { offsetInCU: 0x1D2, offset: 0xBEBCF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xB6B00, symSize: 0x1E0 } + - { offsetInCU: 0x26, offset: 0xBEE6A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xB6CE0, symSize: 0x3C } + - { offsetInCU: 0x34, offset: 0xBEE78, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xB6CE0, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xBEF88, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xB6D1C, symSize: 0x90 } + - { offsetInCU: 0x34, offset: 0xBEF96, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xB6D1C, symSize: 0x90 } + - { offsetInCU: 0x86, offset: 0xBF0F9, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0x505680, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0xBF12B, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0x505610, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0xBF14D, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0x505640, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0xBF163, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0x505670, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0xBF42A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xB6DAC, symSize: 0x18 } + - { offsetInCU: 0x3FB, offset: 0xBF46E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xB6DAC, symSize: 0x18 } + - { offsetInCU: 0x594, offset: 0xBF607, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0xB6DC4, symSize: 0x18 } + - { offsetInCU: 0x63F, offset: 0xBF6B2, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0xB6DDC, symSize: 0x300 } + - { offsetInCU: 0x10E8, offset: 0xC015B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0xB70DC, symSize: 0xAC } + - { offsetInCU: 0x13DE, offset: 0xC0451, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0xB7188, symSize: 0x4D0 } + - { offsetInCU: 0x24F2, offset: 0xC1565, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0xB7658, symSize: 0x28C } + - { offsetInCU: 0x2B67, offset: 0xC1BDA, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0xB78E4, symSize: 0xF4 } + - { offsetInCU: 0x2D72, offset: 0xC1DE5, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0xB79D8, symSize: 0x168 } + - { offsetInCU: 0x26, offset: 0xC2142, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB7B40, symSize: 0x38 } + - { offsetInCU: 0xFA, offset: 0xC2216, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB7B40, symSize: 0x38 } + - { offsetInCU: 0x12C, offset: 0xC2248, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB7B40, symSize: 0x38 } + - { offsetInCU: 0x199, offset: 0xC22B5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xB7B78, symSize: 0x3C } + - { offsetInCU: 0x1F3, offset: 0xC230F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xB7B78, symSize: 0x3C } + - { offsetInCU: 0x31B, offset: 0xC2437, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0xB7BB4, symSize: 0x5C } + - { offsetInCU: 0x517, offset: 0xC2633, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0xB7C10, symSize: 0x1C } + - { offsetInCU: 0x636, offset: 0xC2752, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0xB7C2C, symSize: 0x54 } + - { offsetInCU: 0x6D0, offset: 0xC27EC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0xB7C80, symSize: 0x4C } + - { offsetInCU: 0x8A8, offset: 0xC29C4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xB7CCC, symSize: 0xA8 } + - { offsetInCU: 0x90C, offset: 0xC2A28, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xB7CCC, symSize: 0xA8 } + - { offsetInCU: 0xBA6, offset: 0xC2CC2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0xB7D74, symSize: 0x124 } + - { offsetInCU: 0xEC3, offset: 0xC2FDF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xB7E98, symSize: 0xC8 } + - { offsetInCU: 0xF43, offset: 0xC305F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xB7E98, symSize: 0xC8 } + - { offsetInCU: 0x10B0, offset: 0xC31CC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0xB7F60, symSize: 0x160 } + - { offsetInCU: 0x134C, offset: 0xC3468, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x580, symBinAddr: 0xB80C0, symSize: 0x150 } + - { offsetInCU: 0x14BB, offset: 0xC35D7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x6D0, symBinAddr: 0xB8210, symSize: 0x18 } + - { offsetInCU: 0x1522, offset: 0xC363E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x6E8, symBinAddr: 0xB8228, symSize: 0xC } + - { offsetInCU: 0x155B, offset: 0xC3677, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x6F4, symBinAddr: 0xB8234, symSize: 0x8 } + - { offsetInCU: 0x15DF, offset: 0xC36FB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x6FC, symBinAddr: 0xB823C, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xC38A8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xB8278, symSize: 0x120 } + - { offsetInCU: 0x34, offset: 0xC38B6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xB8278, symSize: 0x120 } + - { offsetInCU: 0x34, offset: 0xC39BC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x364, symBinAddr: 0xB7B980, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xC39FE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xB8398, symSize: 0x35C } + - { offsetInCU: 0x76, offset: 0xC3A4E, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x506000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xC3AD2, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x52B000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xC3D33, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xB8398, symSize: 0x35C } + - { offsetInCU: 0xC70, offset: 0xC4648, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0xB86F4, symSize: 0x1FC } + - { offsetInCU: 0x116D, offset: 0xC4B45, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0xB88F0, symSize: 0x1B8 } + - { offsetInCU: 0x10, offset: 0xC4F1A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xB8AC0, symSize: 0x1A0 } + - { offsetInCU: 0x50, offset: 0xC4F5A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xB8AC0, symSize: 0x1A0 } + - { offsetInCU: 0x5E, offset: 0xC4F68, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0xB8C60, symSize: 0x60 } + - { offsetInCU: 0x81, offset: 0xC4F8B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0xB8CC0, symSize: 0x288 } + - { offsetInCU: 0x10, offset: 0xC4F7C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xB8F50, symSize: 0x130 } + - { offsetInCU: 0x48, offset: 0xC4FB4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xB8F50, symSize: 0x130 } + - { offsetInCU: 0x5F, offset: 0xC4FCB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0xB9080, symSize: 0x70 } + - { offsetInCU: 0x75, offset: 0xC4FE1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0xB90F0, symSize: 0x160 } + - { offsetInCU: 0x7A, offset: 0xC4FE6, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0xB9250, symSize: 0x378 } + - { offsetInCU: 0x10, offset: 0xC4FF4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xB95E0, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xC502C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xB95E0, symSize: 0x3A0 } + - { offsetInCU: 0x4C, offset: 0xC5030, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0xB9980, symSize: 0x6C0 } + - { offsetInCU: 0x66, offset: 0xC504A, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0xBA040, symSize: 0x1138 } + - { offsetInCU: 0x50, offset: 0xC5096, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0xBB2C0, symSize: 0x1180 } + - { offsetInCU: 0x66, offset: 0xC50AC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0xBC440, symSize: 0x1410 } + - { offsetInCU: 0x10, offset: 0xC50A2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBD860, symSize: 0x240 } + - { offsetInCU: 0x45, offset: 0xC50D7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBD860, symSize: 0x240 } + - { offsetInCU: 0x4D, offset: 0xC50DF, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0xBDAA0, symSize: 0x9E0 } + - { offsetInCU: 0x63, offset: 0xC50F5, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0xBE480, symSize: 0x650 } + - { offsetInCU: 0x10, offset: 0xC5104, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBEAE0, symSize: 0x40 } + - { offsetInCU: 0x47, offset: 0xC513B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBEAE0, symSize: 0x40 } + - { offsetInCU: 0x5D, offset: 0xC5151, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0xBEB20, symSize: 0x40 } + - { offsetInCU: 0x76, offset: 0xC516A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0xBEB60, symSize: 0x40 } + - { offsetInCU: 0x81, offset: 0xC5175, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0xBEBA0, symSize: 0x1E0 } + - { offsetInCU: 0x97, offset: 0xC518B, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0xBED80, symSize: 0x170 } + - { offsetInCU: 0xAB, offset: 0xC519F, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0xBEEF0, symSize: 0x50 } + - { offsetInCU: 0xC3, offset: 0xC51B7, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0xBEF40, symSize: 0x50 } + - { offsetInCU: 0xD9, offset: 0xC51CD, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0xBEF90, symSize: 0x50 } + - { offsetInCU: 0xEF, offset: 0xC51E3, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0xBEFE0, symSize: 0x60 } + - { offsetInCU: 0x111, offset: 0xC5205, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0xBF040, symSize: 0x1E0 } + - { offsetInCU: 0x124, offset: 0xC5218, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0xBF220, symSize: 0x360 } + - { offsetInCU: 0x141, offset: 0xC5235, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0xBF580, symSize: 0x2D0 } + - { offsetInCU: 0x156, offset: 0xC524A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0xBF850, symSize: 0x2B0 } + - { offsetInCU: 0x170, offset: 0xC5264, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0xBFB00, symSize: 0x250 } + - { offsetInCU: 0x184, offset: 0xC5278, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0xBFD50, symSize: 0x60 } + - { offsetInCU: 0x19A, offset: 0xC528E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0xBFDB0, symSize: 0x44 } + - { offsetInCU: 0x10, offset: 0xC5284, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xBFE00, symSize: 0xB90 } + - { offsetInCU: 0x4C, offset: 0xC52C0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xBFE00, symSize: 0xB90 } + - { offsetInCU: 0x62, offset: 0xC52D6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0xC0990, symSize: 0xB98 } + - { offsetInCU: 0x10, offset: 0xC52D0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC1540, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5311, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC1540, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5311, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xC2380, symSize: 0x7E0 } + - { offsetInCU: 0x10, offset: 0xC531C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC2B80, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC535D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC2B80, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC535D, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xC39C0, symSize: 0x1F0 } ... diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/CanvasSVG b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/CanvasSVG index eab27238b..e5c25ae2e 100755 Binary files a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/CanvasSVG and b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/CanvasSVG differ diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Headers/CanvasSVG-Swift.h b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Headers/CanvasSVG-Swift.h index b57eff964..76e6c002e 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Headers/CanvasSVG-Swift.h +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Headers/CanvasSVG-Swift.h @@ -278,6 +278,7 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); #pragma clang diagnostic ignored "-Watimport-in-framework-header" #endif @import CoreFoundation; +@import ObjectiveC; @import UIKit; #endif @@ -303,12 +304,10 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); @class NSCoder; @class UIImage; @class NSData; +@class NSCSVGData; SWIFT_CLASS_NAMED("NSCSVG") @interface NSCSVG : UIView -@property (nonatomic, readonly) void * _Nullable data; -@property (nonatomic, readonly) CGSize data_size; -@property (nonatomic, readonly) NSUInteger buf_size; @property (nonatomic) BOOL autoScale; @property (nonatomic, copy) NSString * _Nullable src; @property (nonatomic, copy) NSString * _Nullable srcPath; @@ -319,12 +318,24 @@ SWIFT_CLASS_NAMED("NSCSVG") - (void)drawRect:(CGRect)rect; - (UIImage * _Nullable)toImage SWIFT_WARN_UNUSED_RESULT; - (NSData * _Nullable)toData SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; ++ (NSCSVGData * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; +@end + +@class NSMutableData; + +SWIFT_CLASS_NAMED("NSCSVGData") +@interface NSCSVGData : NSObject +@property (nonatomic, readonly) CGFloat width; +@property (nonatomic, readonly) CGFloat height; +@property (nonatomic, readonly) void * _Nullable rawData; +@property (nonatomic, readonly, strong) NSMutableData * _Nullable data; +- (UIImage * _Nullable)getImage SWIFT_WARN_UNUSED_RESULT; +- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; @end #endif diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Headers/canvas_svg.h b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Headers/canvas_svg.h index 716ac6f05..daf7068dd 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Headers/canvas_svg.h +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Headers/canvas_svg.h @@ -8,6 +8,16 @@ #include #include +#if defined(TARGET_OS_IOS) +void canvas_native_svg_draw_from_bytes(uint8_t *data, + uintptr_t size, + float width, + float height, + float scale, + const uint8_t *svg_data, + uintptr_t svg_size); +#endif + #if defined(TARGET_OS_IOS) void canvas_native_svg_draw_from_string(uint8_t *data, uintptr_t size, diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo index 1dd78e9a5..a91d81631 100644 Binary files a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo and b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo differ diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.abi.json b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.abi.json index 685da180d..d687042ca 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.abi.json +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.abi.json @@ -21,13 +21,91 @@ }, { "kind": "TypeDecl", - "name": "NSCSVG", - "printedName": "NSCSVG", + "name": "NSCSVGData", + "printedName": "NSCSVGData", "children": [ { "kind": "Var", - "name": "data", - "printedName": "data", + "name": "width", + "printedName": "width", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "height", + "printedName": "height", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "rawData", + "printedName": "rawData", "children": [ { "kind": "TypeNominal", @@ -45,11 +123,10 @@ } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -72,10 +149,9 @@ } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } @@ -83,22 +159,29 @@ }, { "kind": "Var", - "name": "data_size", - "printedName": "data_size", + "name": "data", + "printedName": "data", "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -107,62 +190,144 @@ "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } ] }, { - "kind": "Var", - "name": "buf_size", - "printedName": "buf_size", + "kind": "Function", + "name": "getImage", + "printedName": "getImage()", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" - } - ], - "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvp", - "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, - "accessors": [ - { - "kind": "Accessor", - "name": "Get", - "printedName": "Get()", + "name": "Optional", + "printedName": "UIKit.UIImage?", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" + "name": "UIImage", + "printedName": "UIKit.UIImage", + "usr": "c:objc(cs)UIImage" } ], - "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvg", - "moduleName": "CanvasSVG", - "implicit": true, - "declAttributes": ["ObjC"], - "accessorKind": "get" + "usr": "s:Sq" } - ] + ], + "declKind": "Func", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)getImage", + "mangledName": "$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" }, + { + "kind": "Constructor", + "name": "init", + "printedName": "init()", + "children": [ + { + "kind": "TypeNominal", + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" + } + ], + "declKind": "Constructor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)init", + "mangledName": "$s9CanvasSVG10NSCSVGDataCACycfc", + "moduleName": "CanvasSVG", + "overriding": true, + "implicit": true, + "objc_name": "init", + "declAttributes": ["Dynamic", "ObjC", "Override"], + "init_kind": "Designated" + } + ], + "declKind": "Class", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC", + "moduleName": "CanvasSVG", + "objc_name": "NSCSVGData", + "declAttributes": ["AccessControl", "ObjC", "ObjCMembers"], + "superclassUsr": "c:objc(cs)NSObject", + "inheritsConvenienceInitializers": true, + "superclassNames": ["ObjectiveC.NSObject"], + "conformances": [ + { + "kind": "Conformance", + "name": "Equatable", + "printedName": "Equatable", + "usr": "s:SQ", + "mangledName": "$sSQ" + }, + { + "kind": "Conformance", + "name": "Hashable", + "printedName": "Hashable", + "usr": "s:SH", + "mangledName": "$sSH" + }, + { + "kind": "Conformance", + "name": "CVarArg", + "printedName": "CVarArg", + "usr": "s:s7CVarArgP", + "mangledName": "$ss7CVarArgP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObservingPublishing", + "printedName": "_KeyValueCodingAndObservingPublishing", + "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP", + "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObserving", + "printedName": "_KeyValueCodingAndObserving", + "usr": "s:10Foundation27_KeyValueCodingAndObservingP", + "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP" + }, + { + "kind": "Conformance", + "name": "CustomStringConvertible", + "printedName": "CustomStringConvertible", + "usr": "s:s23CustomStringConvertibleP", + "mangledName": "$ss23CustomStringConvertibleP" + }, + { + "kind": "Conformance", + "name": "CustomDebugStringConvertible", + "printedName": "CustomDebugStringConvertible", + "usr": "s:s28CustomDebugStringConvertibleP", + "mangledName": "$ss28CustomDebugStringConvertibleP" + } + ] + }, + { + "kind": "TypeDecl", + "name": "NSCSVG", + "printedName": "NSCSVG", + "children": [ { "kind": "Var", "name": "autoScale", @@ -616,13 +781,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -636,7 +801,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromStringSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -650,13 +815,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -670,7 +835,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPathSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -684,13 +849,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -704,7 +869,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemoteSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -729,7 +894,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -739,13 +904,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -755,7 +920,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromString::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -780,7 +945,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -790,13 +955,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -806,7 +971,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPath::", - "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -831,7 +996,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -841,13 +1006,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -857,7 +1022,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemote::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -947,42 +1112,42 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "IntegerLiteral", - "offset": 341, + "offset": 291, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 368, + "offset": 2331, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 396, + "offset": 2359, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 417, + "offset": 2380, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 500, + "offset": 2495, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 450, + "offset": 2445, "length": 4, "value": "true" } diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.private.swiftinterface b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.private.swiftinterface index 8cc75d11c..e69ed9cb9 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.private.swiftinterface +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.private.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftinterface b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftinterface index 8cc75d11c..e69ed9cb9 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftinterface +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftmodule b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftmodule index aa9032a6e..2fb3b2ec3 100644 Binary files a/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftmodule and b/packages/canvas-svg/src-native/ios/dist/Release-iphoneos/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios.swiftmodule differ diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG index 90f163876..7c18b3bfa 100644 Binary files a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG and b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework.dSYM/Contents/Resources/DWARF/CanvasSVG differ diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml index 8eed7e3e9..a3cefaba5 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasSVG.yml @@ -2,221 +2,258 @@ triple: 'arm64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/CanvasSVG' relocations: - - { offsetInCU: 0x34, offset: 0xA8AAE, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x541000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0xA8AE3, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x541030, symSize: 0x0 } - - { offsetInCU: 0x27, offset: 0xA8B20, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x5340, symSize: 0xB4 } - - { offsetInCU: 0x66, offset: 0xA8B5F, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x5340, symSize: 0xB4 } - - { offsetInCU: 0x15B, offset: 0xA8C54, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xB4, symBinAddr: 0x53F4, symSize: 0xB4 } - - { offsetInCU: 0x65, offset: 0xA8DB3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x54A8, symSize: 0x44 } - - { offsetInCU: 0xBD, offset: 0xA8E0B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvsTo', symObjAddr: 0x88, symBinAddr: 0x5530, symSize: 0x48 } - - { offsetInCU: 0x118, offset: 0xA8E66, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x12C, symBinAddr: 0x55D4, symSize: 0x44 } - - { offsetInCU: 0x170, offset: 0xA8EBE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x1B4, symBinAddr: 0x565C, symSize: 0x54 } - - { offsetInCU: 0x1CD, offset: 0xA8F1B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvgTo', symObjAddr: 0x2B0, symBinAddr: 0x5758, symSize: 0x44 } - - { offsetInCU: 0x225, offset: 0xA8F73, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvsTo', symObjAddr: 0x338, symBinAddr: 0x57E0, symSize: 0x48 } - - { offsetInCU: 0x280, offset: 0xA8FCE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x424, symBinAddr: 0x58CC, symSize: 0x10 } - - { offsetInCU: 0x2A0, offset: 0xA8FEE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x424, symBinAddr: 0x58CC, symSize: 0x10 } - - { offsetInCU: 0x2D6, offset: 0xA9024, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x434, symBinAddr: 0x58DC, symSize: 0x10 } - - { offsetInCU: 0x2F6, offset: 0xA9044, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x434, symBinAddr: 0x58DC, symSize: 0x10 } - - { offsetInCU: 0x32F, offset: 0xA907D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x444, symBinAddr: 0x58EC, symSize: 0x10 } - - { offsetInCU: 0x34F, offset: 0xA909D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x444, symBinAddr: 0x58EC, symSize: 0x10 } - - { offsetInCU: 0x385, offset: 0xA90D3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x454, symBinAddr: 0x58FC, symSize: 0x10 } - - { offsetInCU: 0x3A5, offset: 0xA90F3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x454, symBinAddr: 0x58FC, symSize: 0x10 } - - { offsetInCU: 0x3DE, offset: 0xA912C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x464, symBinAddr: 0x590C, symSize: 0x10 } - - { offsetInCU: 0x3FE, offset: 0xA914C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x464, symBinAddr: 0x590C, symSize: 0x10 } - - { offsetInCU: 0x434, offset: 0xA9182, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x474, symBinAddr: 0x591C, symSize: 0x10 } - - { offsetInCU: 0x454, offset: 0xA91A2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x474, symBinAddr: 0x591C, symSize: 0x10 } - - { offsetInCU: 0x48D, offset: 0xA91DB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x484, symBinAddr: 0x592C, symSize: 0x44 } - - { offsetInCU: 0x4FB, offset: 0xA9249, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x50C, symBinAddr: 0x59B4, symSize: 0x64 } - - { offsetInCU: 0x5EF, offset: 0xA933D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScaleSfyFTo', symObjAddr: 0xADC, symBinAddr: 0x5F84, symSize: 0xB8 } - - { offsetInCU: 0x6E0, offset: 0xA942E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x1628, symBinAddr: 0x6AD0, symSize: 0x28 } - - { offsetInCU: 0x712, offset: 0xA9460, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x18F0, symBinAddr: 0x6D98, symSize: 0x28 } - - { offsetInCU: 0x744, offset: 0xA9492, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x191C, symBinAddr: 0x6DC0, symSize: 0x28 } - - { offsetInCU: 0x78C, offset: 0xA94DA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1944, symBinAddr: 0x6DE8, symSize: 0x10 } - - { offsetInCU: 0x7AC, offset: 0xA94FA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1944, symBinAddr: 0x6DE8, symSize: 0x10 } - - { offsetInCU: 0x800, offset: 0xA954E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1D3C, symBinAddr: 0x71E0, symSize: 0x20 } - - { offsetInCU: 0x837, offset: 0xA9585, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x1FD8, symBinAddr: 0x747C, symSize: 0x28 } - - { offsetInCU: 0x889, offset: 0xA95D7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x21E4, symBinAddr: 0x766C, symSize: 0x80 } - - { offsetInCU: 0x8FC, offset: 0xA964A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x240C, symBinAddr: 0x7894, symSize: 0x34 } - - { offsetInCU: 0x92E, offset: 0xA967C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x24D0, symBinAddr: 0x7958, symSize: 0x34 } - - { offsetInCU: 0xA5C, offset: 0xA97AA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x4870, symBinAddr: 0x9CF8, symSize: 0x13E8 } - - { offsetInCU: 0x172A, offset: 0xAA478, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZTf4nd_n', symObjAddr: 0x5C58, symBinAddr: 0xB0E0, symSize: 0x238 } - - { offsetInCU: 0x1948, offset: 0xAA696, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZTf4nd_n', symObjAddr: 0x5E90, symBinAddr: 0xB318, symSize: 0x2F0 } - - { offsetInCU: 0x1B96, offset: 0xAA8E4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZTf4nd_n', symObjAddr: 0x6180, symBinAddr: 0xB608, symSize: 0x3A4 } - - { offsetInCU: 0x1E0D, offset: 0xAAB5B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvpACTK', symObjAddr: 0xD0, symBinAddr: 0x5578, symSize: 0x50 } - - { offsetInCU: 0x1E45, offset: 0xAAB93, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTK', symObjAddr: 0x208, symBinAddr: 0x56B0, symSize: 0x50 } - - { offsetInCU: 0x1E7D, offset: 0xAABCB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTk', symObjAddr: 0x258, symBinAddr: 0x5700, symSize: 0x58 } - - { offsetInCU: 0x1EBF, offset: 0xAAC0D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvpACTK', symObjAddr: 0x380, symBinAddr: 0x5828, symSize: 0x50 } - - { offsetInCU: 0x1EF7, offset: 0xAAC45, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x5D0, symBinAddr: 0x5A78, symSize: 0x50 } - - { offsetInCU: 0x1F2F, offset: 0xAAC7D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x620, symBinAddr: 0x5AC8, symSize: 0x64 } - - { offsetInCU: 0x1FEA, offset: 0xAAD38, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x1C98, symBinAddr: 0x713C, symSize: 0x40 } - - { offsetInCU: 0x1FFE, offset: 0xAAD4C, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledNameAbstract, symObjAddr: 0x1CD8, symBinAddr: 0x717C, symSize: 0x44 } - - { offsetInCU: 0x2012, offset: 0xAAD60, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x1D1C, symBinAddr: 0x71C0, symSize: 0x20 } - - { offsetInCU: 0x2036, offset: 0xAAD84, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x4404, symBinAddr: 0x988C, symSize: 0x70 } - - { offsetInCU: 0x2480, offset: 0xAB1CE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6550, symBinAddr: 0xB9D8, symSize: 0xC } - - { offsetInCU: 0x2494, offset: 0xAB1E2, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x655C, symBinAddr: 0xB9E4, symSize: 0x10 } - - { offsetInCU: 0x24A8, offset: 0xAB1F6, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x656C, symBinAddr: 0xB9F4, symSize: 0x8 } - - { offsetInCU: 0x24BC, offset: 0xAB20A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x65F8, symBinAddr: 0xBA80, symSize: 0xC } - - { offsetInCU: 0x24D0, offset: 0xAB21E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6634, symBinAddr: 0xBABC, symSize: 0xC } - - { offsetInCU: 0x24E4, offset: 0xAB232, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x6804, symBinAddr: 0xBC8C, symSize: 0xC } - - { offsetInCU: 0x24F8, offset: 0xAB246, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x6810, symBinAddr: 0xBC98, symSize: 0x4 } - - { offsetInCU: 0x250C, offset: 0xAB25A, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x6814, symBinAddr: 0xBC9C, symSize: 0x20 } - - { offsetInCU: 0x2520, offset: 0xAB26E, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x6834, symBinAddr: 0xBCBC, symSize: 0x28 } - - { offsetInCU: 0x253F, offset: 0xAB28D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x68D8, symBinAddr: 0xBD60, symSize: 0x10 } - - { offsetInCU: 0x2568, offset: 0xAB2B6, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x68E8, symBinAddr: 0xBD70, symSize: 0x40 } - - { offsetInCU: 0x257C, offset: 0xAB2CA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x6964, symBinAddr: 0xBDEC, symSize: 0x24 } - - { offsetInCU: 0x25B0, offset: 0xAB2FE, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x69C0, symBinAddr: 0xBE48, symSize: 0x44 } - - { offsetInCU: 0x25C4, offset: 0xAB312, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_yyScMYccfU_Tf2niiin_nTA', symObjAddr: 0x6B80, symBinAddr: 0xC008, symSize: 0x108 } - - { offsetInCU: 0x26D7, offset: 0xAB425, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x6CAC, symBinAddr: 0xC134, symSize: 0x8 } - - { offsetInCU: 0x2C80, offset: 0xAB9CE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvg', symObjAddr: 0x44, symBinAddr: 0x54EC, symSize: 0x44 } - - { offsetInCU: 0x2D08, offset: 0xABA56, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg', symObjAddr: 0x170, symBinAddr: 0x5618, symSize: 0x44 } - - { offsetInCU: 0x2D60, offset: 0xABAAE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvg', symObjAddr: 0x2F4, symBinAddr: 0x579C, symSize: 0x44 } - - { offsetInCU: 0x2E59, offset: 0xABBA7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x4C8, symBinAddr: 0x5970, symSize: 0x44 } - - { offsetInCU: 0x2EAC, offset: 0xABBFA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x570, symBinAddr: 0x5A18, symSize: 0x60 } - - { offsetInCU: 0x2F1C, offset: 0xABC6A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0x684, symBinAddr: 0x5B2C, symSize: 0x48 } - - { offsetInCU: 0x2F41, offset: 0xABC8F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0x6CC, symBinAddr: 0x5B74, symSize: 0x3C } - - { offsetInCU: 0x2F9D, offset: 0xABCEB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0x750, symBinAddr: 0x5BF8, symSize: 0x48 } - - { offsetInCU: 0x2FC2, offset: 0xABD10, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xA60, symBinAddr: 0x5F08, symSize: 0x48 } - - { offsetInCU: 0x315F, offset: 0xABEAD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xB94, symBinAddr: 0x603C, symSize: 0x45C } - - { offsetInCU: 0x347B, offset: 0xAC1C9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0xFF0, symBinAddr: 0x6498, symSize: 0x634 } - - { offsetInCU: 0x3733, offset: 0xAC481, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1650, symBinAddr: 0x6AF8, symSize: 0x2A0 } - - { offsetInCU: 0x3AD2, offset: 0xAC820, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1954, symBinAddr: 0x6DF8, symSize: 0x50 } - - { offsetInCU: 0x3AE6, offset: 0xAC834, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x19A4, symBinAddr: 0x6E48, symSize: 0x2F4 } - - { offsetInCU: 0x3B6A, offset: 0xAC8B8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1D5C, symBinAddr: 0x7200, symSize: 0x27C } - - { offsetInCU: 0x3C21, offset: 0xAC96F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9drawImage33_C2B5A81EA80ED94FA09E8C035710AE36LLyySo6CGRectVF', symObjAddr: 0x2000, symBinAddr: 0x74A4, symSize: 0x1C8 } - - { offsetInCU: 0x3E27, offset: 0xACB75, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x2264, symBinAddr: 0x76EC, symSize: 0x1A8 } - - { offsetInCU: 0x4003, offset: 0xACD51, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2440, symBinAddr: 0x78C8, symSize: 0x90 } - - { offsetInCU: 0x40B2, offset: 0xACE00, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ', symObjAddr: 0x2504, symBinAddr: 0x798C, symSize: 0x4 } - - { offsetInCU: 0x40C6, offset: 0xACE14, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ', symObjAddr: 0x2514, symBinAddr: 0x799C, symSize: 0x4 } - - { offsetInCU: 0x40DA, offset: 0xACE28, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ', symObjAddr: 0x2524, symBinAddr: 0x79AC, symSize: 0x4 } - - { offsetInCU: 0x40FA, offset: 0xACE48, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ', symObjAddr: 0x2570, symBinAddr: 0x79F8, symSize: 0x26C } - - { offsetInCU: 0x416D, offset: 0xACEBB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x27DC, symBinAddr: 0x7C64, symSize: 0x3DC } - - { offsetInCU: 0x4466, offset: 0xAD1B4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x2C20, symBinAddr: 0x80A8, symSize: 0x81C } - - { offsetInCU: 0x45C6, offset: 0xAD314, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x36D8, symBinAddr: 0x8B60, symSize: 0xC38 } - - { offsetInCU: 0x478D, offset: 0xAD4DB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfD', symObjAddr: 0x43D4, symBinAddr: 0x985C, symSize: 0x30 } - - { offsetInCU: 0x47B0, offset: 0xAD4FE, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x4474, symBinAddr: 0x98FC, symSize: 0xE8 } - - { offsetInCU: 0x47E5, offset: 0xAD533, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x455C, symBinAddr: 0x99E4, symSize: 0x1F4 } - - { offsetInCU: 0x4842, offset: 0xAD590, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x4750, symBinAddr: 0x9BD8, symSize: 0x1C } - - { offsetInCU: 0x4880, offset: 0xAD5CE, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x476C, symBinAddr: 0x9BF4, symSize: 0x104 } - - { offsetInCU: 0x26, offset: 0xAD94B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x969E0, symSize: 0x26E4 } - - { offsetInCU: 0x40, offset: 0xAD965, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9EA8, symBinAddr: 0x5791D8, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0xAD9B7, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFEA8, symBinAddr: 0x57F1D8, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0xADA1B, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFED0, symBinAddr: 0x57F200, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0xADA31, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x102D8, symBinAddr: 0x57F608, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0xADA48, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFF18, symBinAddr: 0x57F248, symSize: 0x0 } - - { offsetInCU: 0xE22, offset: 0xAE747, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x969E0, symSize: 0x26E4 } - - { offsetInCU: 0x4BAD, offset: 0xB24D2, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9A24, symBinAddr: 0xA0404, symSize: 0x210 } - - { offsetInCU: 0x4E0E, offset: 0xB2733, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E24, symBinAddr: 0x9B804, symSize: 0x1B8 } - - { offsetInCU: 0x5399, offset: 0xB2CBE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0x990C4, symSize: 0x5A8 } - - { offsetInCU: 0x5EE1, offset: 0xB3806, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0x9966C, symSize: 0x674 } - - { offsetInCU: 0x6290, offset: 0xB3BB5, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3300, symBinAddr: 0x99CE0, symSize: 0x1F0 } - - { offsetInCU: 0x67A5, offset: 0xB40CA, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x34F0, symBinAddr: 0x99ED0, symSize: 0x7A8 } - - { offsetInCU: 0x75B2, offset: 0xB4ED7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3C98, symBinAddr: 0x9A678, symSize: 0x614 } - - { offsetInCU: 0x7F41, offset: 0xB5866, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x42AC, symBinAddr: 0x9AC8C, symSize: 0xB78 } - - { offsetInCU: 0x9472, offset: 0xB6D97, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x50D0, symBinAddr: 0x9BAB0, symSize: 0x23CC } - - { offsetInCU: 0xC9D7, offset: 0xBA2FC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x4FDC, symBinAddr: 0x9B9BC, symSize: 0xF4 } - - { offsetInCU: 0xCBD2, offset: 0xBA4F7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x749C, symBinAddr: 0x9DE7C, symSize: 0x30 } - - { offsetInCU: 0xCCC3, offset: 0xBA5E8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x74CC, symBinAddr: 0x9DEAC, symSize: 0x58 } - - { offsetInCU: 0xCD38, offset: 0xBA65D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x9DF04, symSize: 0x4 } - - { offsetInCU: 0xCD80, offset: 0xBA6A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x9DF04, symSize: 0x4 } - - { offsetInCU: 0xCDAF, offset: 0xBA6D4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x9DF04, symSize: 0x4 } - - { offsetInCU: 0xCDD3, offset: 0xBA6F8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7528, symBinAddr: 0x9DF08, symSize: 0x8C } - - { offsetInCU: 0xCF26, offset: 0xBA84B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0x9DF94, symSize: 0x4 } - - { offsetInCU: 0xCF5F, offset: 0xBA884, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0x9DF94, symSize: 0x4 } - - { offsetInCU: 0xD1F8, offset: 0xBAB1D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x75B8, symBinAddr: 0x9DF98, symSize: 0x1870 } - - { offsetInCU: 0xF966, offset: 0xBD28B, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9C34, symBinAddr: 0xA0614, symSize: 0x200 } - - { offsetInCU: 0xFECD, offset: 0xBD7F2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8E28, symBinAddr: 0x9F808, symSize: 0x20 } - - { offsetInCU: 0x1036A, offset: 0xBDC8F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8E48, symBinAddr: 0x9F828, symSize: 0xBDC } - - { offsetInCU: 0x26, offset: 0xBEA1C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xA0814, symSize: 0x1E0 } - - { offsetInCU: 0x1D2, offset: 0xBEBC8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xA0814, symSize: 0x1E0 } - - { offsetInCU: 0x26, offset: 0xBEE63, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xA09F4, symSize: 0x3C } - - { offsetInCU: 0x34, offset: 0xBEE71, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xA09F4, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xBEF81, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xA0A30, symSize: 0x90 } - - { offsetInCU: 0x34, offset: 0xBEF8F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xA0A30, symSize: 0x90 } - - { offsetInCU: 0x86, offset: 0xBF0F2, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0x57F6D0, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0xBF124, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0x57F660, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0xBF146, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0x57F690, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0xBF15C, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0x57F6C0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0xBF423, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xA0AC0, symSize: 0x18 } - - { offsetInCU: 0x3FB, offset: 0xBF467, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xA0AC0, symSize: 0x18 } - - { offsetInCU: 0x594, offset: 0xBF600, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0xA0AD8, symSize: 0x18 } - - { offsetInCU: 0x63F, offset: 0xBF6AB, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0xA0AF0, symSize: 0x300 } - - { offsetInCU: 0x10C0, offset: 0xC012C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0xA0DF0, symSize: 0xAC } - - { offsetInCU: 0x13B6, offset: 0xC0422, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0xA0E9C, symSize: 0x4D0 } - - { offsetInCU: 0x24CA, offset: 0xC1536, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0xA136C, symSize: 0x28C } - - { offsetInCU: 0x2B3F, offset: 0xC1BAB, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0xA15F8, symSize: 0xF4 } - - { offsetInCU: 0x2D4A, offset: 0xC1DB6, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0xA16EC, symSize: 0x168 } - - { offsetInCU: 0x26, offset: 0xC20D9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA1854, symSize: 0x38 } - - { offsetInCU: 0xFA, offset: 0xC21AD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA1854, symSize: 0x38 } - - { offsetInCU: 0x12C, offset: 0xC21DF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xA1854, symSize: 0x38 } - - { offsetInCU: 0x199, offset: 0xC224C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xA188C, symSize: 0x3C } - - { offsetInCU: 0x1F3, offset: 0xC22A6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xA188C, symSize: 0x3C } - - { offsetInCU: 0x31B, offset: 0xC23CE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0xA18C8, symSize: 0x5C } - - { offsetInCU: 0x517, offset: 0xC25CA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0xA1924, symSize: 0x1C } - - { offsetInCU: 0x636, offset: 0xC26E9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0xA1940, symSize: 0x54 } - - { offsetInCU: 0x6D0, offset: 0xC2783, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0xA1994, symSize: 0x4C } - - { offsetInCU: 0x8A8, offset: 0xC295B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xA19E0, symSize: 0xA8 } - - { offsetInCU: 0x90C, offset: 0xC29BF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xA19E0, symSize: 0xA8 } - - { offsetInCU: 0xBA6, offset: 0xC2C59, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0xA1A88, symSize: 0x124 } - - { offsetInCU: 0xEC3, offset: 0xC2F76, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xA1BAC, symSize: 0xC8 } - - { offsetInCU: 0xF43, offset: 0xC2FF6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xA1BAC, symSize: 0xC8 } - - { offsetInCU: 0x10B0, offset: 0xC3163, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0xA1C74, symSize: 0x180 } - - { offsetInCU: 0x134C, offset: 0xC33FF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x5A0, symBinAddr: 0xA1DF4, symSize: 0x16C } - - { offsetInCU: 0x14BB, offset: 0xC356E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x70C, symBinAddr: 0xA1F60, symSize: 0x18 } - - { offsetInCU: 0x1522, offset: 0xC35D5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x724, symBinAddr: 0xA1F78, symSize: 0xC } - - { offsetInCU: 0x155B, offset: 0xC360E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x730, symBinAddr: 0xA1F84, symSize: 0x8 } - - { offsetInCU: 0x15DF, offset: 0xC3692, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x738, symBinAddr: 0xA1F8C, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xC383F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xA1FC8, symSize: 0x140 } - - { offsetInCU: 0x34, offset: 0xC384D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xA1FC8, symSize: 0x140 } - - { offsetInCU: 0x34, offset: 0xC3953, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x388, symBinAddr: 0xC2A158, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xC3995, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xA2108, symSize: 0x35C } - - { offsetInCU: 0x76, offset: 0xC39E5, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x580000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xC3A69, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x5A5000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xC3CCA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xA2108, symSize: 0x35C } - - { offsetInCU: 0xC70, offset: 0xC45DF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0xA2464, symSize: 0x1FC } - - { offsetInCU: 0x115F, offset: 0xC4ACE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0xA2660, symSize: 0x1B8 } - - { offsetInCU: 0x10, offset: 0xC4EA3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xA2820, symSize: 0x1A0 } - - { offsetInCU: 0x50, offset: 0xC4EE3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xA2820, symSize: 0x1A0 } - - { offsetInCU: 0x5E, offset: 0xC4EF1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0xA29C0, symSize: 0x60 } - - { offsetInCU: 0x81, offset: 0xC4F14, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0xA2A20, symSize: 0x288 } - - { offsetInCU: 0x10, offset: 0xC4F05, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xA2CB0, symSize: 0x130 } - - { offsetInCU: 0x48, offset: 0xC4F3D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xA2CB0, symSize: 0x130 } - - { offsetInCU: 0x5F, offset: 0xC4F54, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0xA2DE0, symSize: 0x70 } - - { offsetInCU: 0x75, offset: 0xC4F6A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0xA2E50, symSize: 0x160 } - - { offsetInCU: 0x7A, offset: 0xC4F6F, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0xA2FB0, symSize: 0x378 } - - { offsetInCU: 0x10, offset: 0xC4F7D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xA3340, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xC4FB5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xA3340, symSize: 0x3A0 } - - { offsetInCU: 0x4C, offset: 0xC4FB9, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0xA36E0, symSize: 0x6C0 } - - { offsetInCU: 0x66, offset: 0xC4FD3, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0xA3DA0, symSize: 0x1138 } - - { offsetInCU: 0x50, offset: 0xC501F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0xA5040, symSize: 0x1180 } - - { offsetInCU: 0x66, offset: 0xC5035, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0xA61C0, symSize: 0x1410 } - - { offsetInCU: 0x10, offset: 0xC502B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA75E0, symSize: 0x240 } - - { offsetInCU: 0x45, offset: 0xC5060, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA75E0, symSize: 0x240 } - - { offsetInCU: 0x4D, offset: 0xC5068, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0xA7820, symSize: 0x9E0 } - - { offsetInCU: 0x63, offset: 0xC507E, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0xA8200, symSize: 0x650 } - - { offsetInCU: 0x10, offset: 0xC508D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA8860, symSize: 0x40 } - - { offsetInCU: 0x47, offset: 0xC50C4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xA8860, symSize: 0x40 } - - { offsetInCU: 0x5D, offset: 0xC50DA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0xA88A0, symSize: 0x40 } - - { offsetInCU: 0x76, offset: 0xC50F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0xA88E0, symSize: 0x40 } - - { offsetInCU: 0x81, offset: 0xC50FE, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0xA8920, symSize: 0x1E0 } - - { offsetInCU: 0x97, offset: 0xC5114, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0xA8B00, symSize: 0x170 } - - { offsetInCU: 0xAB, offset: 0xC5128, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0xA8C70, symSize: 0x50 } - - { offsetInCU: 0xC3, offset: 0xC5140, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0xA8CC0, symSize: 0x50 } - - { offsetInCU: 0xD9, offset: 0xC5156, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0xA8D10, symSize: 0x50 } - - { offsetInCU: 0xEF, offset: 0xC516C, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0xA8D60, symSize: 0x60 } - - { offsetInCU: 0x111, offset: 0xC518E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0xA8DC0, symSize: 0x1E0 } - - { offsetInCU: 0x124, offset: 0xC51A1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0xA8FA0, symSize: 0x360 } - - { offsetInCU: 0x141, offset: 0xC51BE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0xA9300, symSize: 0x2D0 } - - { offsetInCU: 0x156, offset: 0xC51D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0xA95D0, symSize: 0x2B0 } - - { offsetInCU: 0x170, offset: 0xC51ED, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0xA9880, symSize: 0x250 } - - { offsetInCU: 0x184, offset: 0xC5201, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0xA9AD0, symSize: 0x60 } - - { offsetInCU: 0x19A, offset: 0xC5217, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0xA9B30, symSize: 0x44 } - - { offsetInCU: 0x10, offset: 0xC520D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xA9B80, symSize: 0xB90 } - - { offsetInCU: 0x4C, offset: 0xC5249, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xA9B80, symSize: 0xB90 } - - { offsetInCU: 0x62, offset: 0xC525F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0xAA710, symSize: 0xB98 } - - { offsetInCU: 0x10, offset: 0xC5259, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAB2C0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC529A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAB2C0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC529A, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xAC100, symSize: 0x7E0 } - - { offsetInCU: 0x10, offset: 0xC52A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAC900, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC52E6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xAC900, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xC52E6, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xAD740, symSize: 0x1F0 } + - { offsetInCU: 0x34, offset: 0xA8AAE, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x4BD000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xA8AE3, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x4BD030, symSize: 0x0 } + - { offsetInCU: 0x27, offset: 0xA8B20, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x3E40, symSize: 0xB4 } + - { offsetInCU: 0x66, offset: 0xA8B5F, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x3E40, symSize: 0xB4 } + - { offsetInCU: 0x15B, offset: 0xA8C54, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xB4, symBinAddr: 0x3EF4, symSize: 0xB4 } + - { offsetInCU: 0x65, offset: 0xA8DB3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x3FA8, symSize: 0x10 } + - { offsetInCU: 0x85, offset: 0xA8DD3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x3FA8, symSize: 0x10 } + - { offsetInCU: 0xBB, offset: 0xA8E09, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x10, symBinAddr: 0x3FB8, symSize: 0x10 } + - { offsetInCU: 0xDB, offset: 0xA8E29, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x10, symBinAddr: 0x3FB8, symSize: 0x10 } + - { offsetInCU: 0x114, offset: 0xA8E62, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x20, symBinAddr: 0x3FC8, symSize: 0x14 } + - { offsetInCU: 0x134, offset: 0xA8E82, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x20, symBinAddr: 0x3FC8, symSize: 0x14 } + - { offsetInCU: 0x16A, offset: 0xA8EB8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x34, symBinAddr: 0x3FDC, symSize: 0x14 } + - { offsetInCU: 0x18A, offset: 0xA8ED8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x34, symBinAddr: 0x3FDC, symSize: 0x14 } + - { offsetInCU: 0x1C5, offset: 0xA8F13, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x48, symBinAddr: 0x3FF0, symSize: 0x10 } + - { offsetInCU: 0x1E5, offset: 0xA8F33, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x48, symBinAddr: 0x3FF0, symSize: 0x10 } + - { offsetInCU: 0x21B, offset: 0xA8F69, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0x58, symBinAddr: 0x4000, symSize: 0x10 } + - { offsetInCU: 0x23B, offset: 0xA8F89, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0x58, symBinAddr: 0x4000, symSize: 0x10 } + - { offsetInCU: 0x274, offset: 0xA8FC2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0x68, symBinAddr: 0x4010, symSize: 0x10 } + - { offsetInCU: 0x294, offset: 0xA8FE2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0x68, symBinAddr: 0x4010, symSize: 0x10 } + - { offsetInCU: 0x2CC, offset: 0xA901A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvsTo', symObjAddr: 0x78, symBinAddr: 0x4020, symSize: 0x34 } + - { offsetInCU: 0x325, offset: 0xA9073, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0xAC, symBinAddr: 0x4054, symSize: 0x10 } + - { offsetInCU: 0x345, offset: 0xA9093, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0xAC, symBinAddr: 0x4054, symSize: 0x10 } + - { offsetInCU: 0x378, offset: 0xA90C6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0xBC, symBinAddr: 0x4064, symSize: 0x10 } + - { offsetInCU: 0x398, offset: 0xA90E6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0xBC, symBinAddr: 0x4064, symSize: 0x10 } + - { offsetInCU: 0x3D0, offset: 0xA911E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvsTo', symObjAddr: 0xCC, symBinAddr: 0x4074, symSize: 0x34 } + - { offsetInCU: 0x433, offset: 0xA9181, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x278, symBinAddr: 0x4220, symSize: 0x40 } + - { offsetInCU: 0x465, offset: 0xA91B3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4260, symSize: 0x10 } + - { offsetInCU: 0x485, offset: 0xA91D3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4260, symSize: 0x10 } + - { offsetInCU: 0x4A2, offset: 0xA91F0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2B8, symBinAddr: 0x4260, symSize: 0x10 } + - { offsetInCU: 0x4D4, offset: 0xA9222, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4280, symSize: 0x14 } + - { offsetInCU: 0x4F4, offset: 0xA9242, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4280, symSize: 0x14 } + - { offsetInCU: 0x511, offset: 0xA925F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x2D8, symBinAddr: 0x4280, symSize: 0x14 } + - { offsetInCU: 0x543, offset: 0xA9291, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x42A8, symSize: 0x10 } + - { offsetInCU: 0x563, offset: 0xA92B1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x42A8, symSize: 0x10 } + - { offsetInCU: 0x580, offset: 0xA92CE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x300, symBinAddr: 0x42A8, symSize: 0x10 } + - { offsetInCU: 0x59C, offset: 0xA92EA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgTo', symObjAddr: 0x320, symBinAddr: 0x42C8, symSize: 0x34 } + - { offsetInCU: 0x5E4, offset: 0xA9332, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyFTo', symObjAddr: 0x610, symBinAddr: 0x45B8, symSize: 0x34 } + - { offsetInCU: 0x62C, offset: 0xA937A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfcTo', symObjAddr: 0x708, symBinAddr: 0x46B0, symSize: 0x20 } + - { offsetInCU: 0x659, offset: 0xA93A7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCfETo', symObjAddr: 0x734, symBinAddr: 0x46DC, symSize: 0x48 } + - { offsetInCU: 0x6AA, offset: 0xA93F8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x77C, symBinAddr: 0x4724, symSize: 0x10 } + - { offsetInCU: 0x6CA, offset: 0xA9418, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x77C, symBinAddr: 0x4724, symSize: 0x10 } + - { offsetInCU: 0x700, offset: 0xA944E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x78C, symBinAddr: 0x4734, symSize: 0x10 } + - { offsetInCU: 0x720, offset: 0xA946E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x78C, symBinAddr: 0x4734, symSize: 0x10 } + - { offsetInCU: 0x759, offset: 0xA94A7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x79C, symBinAddr: 0x4744, symSize: 0x10 } + - { offsetInCU: 0x779, offset: 0xA94C7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x79C, symBinAddr: 0x4744, symSize: 0x10 } + - { offsetInCU: 0x7AF, offset: 0xA94FD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x7AC, symBinAddr: 0x4754, symSize: 0x10 } + - { offsetInCU: 0x7CF, offset: 0xA951D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x7AC, symBinAddr: 0x4754, symSize: 0x10 } + - { offsetInCU: 0x808, offset: 0xA9556, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x7BC, symBinAddr: 0x4764, symSize: 0x10 } + - { offsetInCU: 0x828, offset: 0xA9576, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x7BC, symBinAddr: 0x4764, symSize: 0x10 } + - { offsetInCU: 0x85E, offset: 0xA95AC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x7CC, symBinAddr: 0x4774, symSize: 0x10 } + - { offsetInCU: 0x87E, offset: 0xA95CC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x7CC, symBinAddr: 0x4774, symSize: 0x10 } + - { offsetInCU: 0x8B7, offset: 0xA9605, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x7DC, symBinAddr: 0x4784, symSize: 0x10 } + - { offsetInCU: 0x8D7, offset: 0xA9625, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x7DC, symBinAddr: 0x4784, symSize: 0x10 } + - { offsetInCU: 0x90F, offset: 0xA965D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvsTo', symObjAddr: 0x7EC, symBinAddr: 0x4794, symSize: 0x34 } + - { offsetInCU: 0x968, offset: 0xA96B6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x820, symBinAddr: 0x47C8, symSize: 0x44 } + - { offsetInCU: 0x9D6, offset: 0xA9724, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x8A8, symBinAddr: 0x4850, symSize: 0x64 } + - { offsetInCU: 0xACA, offset: 0xA9818, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScale12CoreGraphics7CGFloatVyFTo', symObjAddr: 0xE78, symBinAddr: 0x4E20, symSize: 0xB8 } + - { offsetInCU: 0xBA6, offset: 0xA98F4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x190C, symBinAddr: 0x58B4, symSize: 0x28 } + - { offsetInCU: 0xBD8, offset: 0xA9926, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x1AA0, symBinAddr: 0x5A48, symSize: 0x28 } + - { offsetInCU: 0xC0A, offset: 0xA9958, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1ACC, symBinAddr: 0x5A70, symSize: 0x28 } + - { offsetInCU: 0xC52, offset: 0xA99A0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1AF4, symBinAddr: 0x5A98, symSize: 0x10 } + - { offsetInCU: 0xC72, offset: 0xA99C0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1AF4, symBinAddr: 0x5A98, symSize: 0x10 } + - { offsetInCU: 0xCC6, offset: 0xA9A14, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1E2C, symBinAddr: 0x5DD0, symSize: 0x20 } + - { offsetInCU: 0xCFD, offset: 0xA9A4B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x20AC, symBinAddr: 0x6050, symSize: 0x28 } + - { offsetInCU: 0xD4F, offset: 0xA9A9D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x2210, symBinAddr: 0x61B4, symSize: 0x58 } + - { offsetInCU: 0xD81, offset: 0xA9ACF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x22C8, symBinAddr: 0x626C, symSize: 0x34 } + - { offsetInCU: 0xDB4, offset: 0xA9B02, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x2340, symBinAddr: 0x62E4, symSize: 0x60 } + - { offsetInCU: 0xE79, offset: 0xA9BC7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9emitEventyySo9NSRunLoopC_So7NSTimerCtFZTo', symObjAddr: 0x240C, symBinAddr: 0x63B0, symSize: 0x24 } + - { offsetInCU: 0xF6D, offset: 0xA9CBB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x35CC, symBinAddr: 0x7570, symSize: 0x1520 } + - { offsetInCU: 0x1E85, offset: 0xAABD3, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4AEC, symBinAddr: 0x8A90, symSize: 0x114 } + - { offsetInCU: 0x2015, offset: 0xAAD63, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4C00, symBinAddr: 0x8BA4, symSize: 0x1E0 } + - { offsetInCU: 0x21C5, offset: 0xAAF13, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x4DE0, symBinAddr: 0x8D84, symSize: 0x298 } + - { offsetInCU: 0x23A8, offset: 0xAB0F6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x96C, symBinAddr: 0x4914, symSize: 0x50 } + - { offsetInCU: 0x23E0, offset: 0xAB12E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x9BC, symBinAddr: 0x4964, symSize: 0x64 } + - { offsetInCU: 0x2476, offset: 0xAB1C4, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x26D0, symBinAddr: 0x6674, symSize: 0x4C } + - { offsetInCU: 0x248E, offset: 0xAB1DC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x3028, symBinAddr: 0x6FCC, symSize: 0x80 } + - { offsetInCU: 0x24BD, offset: 0xAB20B, size: 0x8, addend: 0x0, symName: '_$sSvSiIegyy_SvSiIeyByy_TR', symObjAddr: 0x30A8, symBinAddr: 0x704C, symSize: 0x48 } + - { offsetInCU: 0x25E0, offset: 0xAB32E, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x34F0, symBinAddr: 0x7494, symSize: 0x10 } + - { offsetInCU: 0x25F4, offset: 0xAB342, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x3500, symBinAddr: 0x74A4, symSize: 0x8 } + - { offsetInCU: 0x2608, offset: 0xAB356, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCMa', symObjAddr: 0x3508, symBinAddr: 0x74AC, symSize: 0x20 } + - { offsetInCU: 0x261C, offset: 0xAB36A, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x3528, symBinAddr: 0x74CC, symSize: 0x40 } + - { offsetInCU: 0x2630, offset: 0xAB37E, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledNameAbstract, symObjAddr: 0x3568, symBinAddr: 0x750C, symSize: 0x44 } + - { offsetInCU: 0x2644, offset: 0xAB392, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x35AC, symBinAddr: 0x7550, symSize: 0x20 } + - { offsetInCU: 0x2983, offset: 0xAB6D1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x50AC, symBinAddr: 0x9050, symSize: 0x304 } + - { offsetInCU: 0x2B7F, offset: 0xAB8CD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5434, symBinAddr: 0x93D8, symSize: 0x3DC } + - { offsetInCU: 0x2DA0, offset: 0xABAEE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5848, symBinAddr: 0x97EC, symSize: 0x10 } + - { offsetInCU: 0x2DB4, offset: 0xABB02, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x5A60, symBinAddr: 0x9A04, symSize: 0xC } + - { offsetInCU: 0x2DC8, offset: 0xABB16, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x5A6C, symBinAddr: 0x9A10, symSize: 0x4 } + - { offsetInCU: 0x2DDC, offset: 0xABB2A, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x5A70, symBinAddr: 0x9A14, symSize: 0x20 } + - { offsetInCU: 0x2DF0, offset: 0xABB3E, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x5A90, symBinAddr: 0x9A34, symSize: 0x28 } + - { offsetInCU: 0x2E0F, offset: 0xABB5D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x5B34, symBinAddr: 0x9AD8, symSize: 0x10 } + - { offsetInCU: 0x2E38, offset: 0xABB86, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU_TA', symObjAddr: 0x5B68, symBinAddr: 0x9B0C, symSize: 0x24 } + - { offsetInCU: 0x2E6C, offset: 0xABBBA, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x5B8C, symBinAddr: 0x9B30, symSize: 0x40 } + - { offsetInCU: 0x2E80, offset: 0xABBCE, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x5C0C, symBinAddr: 0x9BB0, symSize: 0x44 } + - { offsetInCU: 0x2E94, offset: 0xABBE2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU0_Tf2nni_nTA', symObjAddr: 0x5CB0, symBinAddr: 0x9C54, symSize: 0x28 } + - { offsetInCU: 0x2ED1, offset: 0xABC1F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x5CFC, symBinAddr: 0x9CA0, symSize: 0x8 } + - { offsetInCU: 0x36E5, offset: 0xAC433, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x100, symBinAddr: 0x40A8, symSize: 0x178 } + - { offsetInCU: 0x3901, offset: 0xAC64F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x2C8, symBinAddr: 0x4270, symSize: 0x10 } + - { offsetInCU: 0x3921, offset: 0xAC66F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x2C8, symBinAddr: 0x4270, symSize: 0x10 } + - { offsetInCU: 0x3950, offset: 0xAC69E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x2EC, symBinAddr: 0x4294, symSize: 0x14 } + - { offsetInCU: 0x3970, offset: 0xAC6BE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x2EC, symBinAddr: 0x4294, symSize: 0x14 } + - { offsetInCU: 0x399F, offset: 0xAC6ED, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x310, symBinAddr: 0x42B8, symSize: 0x10 } + - { offsetInCU: 0x39BF, offset: 0xAC70D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x310, symBinAddr: 0x42B8, symSize: 0x10 } + - { offsetInCU: 0x39F5, offset: 0xAC743, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg', symObjAddr: 0x354, symBinAddr: 0x42FC, symSize: 0x124 } + - { offsetInCU: 0x3B0A, offset: 0xAC858, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgySv_SitcfU_Tf4nnd_n', symObjAddr: 0x34EC, symBinAddr: 0x7490, symSize: 0x4 } + - { offsetInCU: 0x3B3E, offset: 0xAC88C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF', symObjAddr: 0x478, symBinAddr: 0x4420, symSize: 0x198 } + - { offsetInCU: 0x3D68, offset: 0xACAB6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfC', symObjAddr: 0x644, symBinAddr: 0x45EC, symSize: 0x20 } + - { offsetInCU: 0x3D7C, offset: 0xACACA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfc', symObjAddr: 0x664, symBinAddr: 0x460C, symSize: 0xA4 } + - { offsetInCU: 0x3E94, offset: 0xACBE2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x864, symBinAddr: 0x480C, symSize: 0x44 } + - { offsetInCU: 0x3EE7, offset: 0xACC35, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x90C, symBinAddr: 0x48B4, symSize: 0x60 } + - { offsetInCU: 0x3F57, offset: 0xACCA5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0xA20, symBinAddr: 0x49C8, symSize: 0x48 } + - { offsetInCU: 0x3F7C, offset: 0xACCCA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0xA68, symBinAddr: 0x4A10, symSize: 0x3C } + - { offsetInCU: 0x3FD8, offset: 0xACD26, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0xAEC, symBinAddr: 0x4A94, symSize: 0x48 } + - { offsetInCU: 0x3FFD, offset: 0xACD4B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xDFC, symBinAddr: 0x4DA4, symSize: 0x48 } + - { offsetInCU: 0x419A, offset: 0xACEE8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xF30, symBinAddr: 0x4ED8, symSize: 0x434 } + - { offsetInCU: 0x4518, offset: 0xAD266, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x1364, symBinAddr: 0x530C, symSize: 0x5A4 } + - { offsetInCU: 0x480D, offset: 0xAD55B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1934, symBinAddr: 0x58DC, symSize: 0x16C } + - { offsetInCU: 0x4999, offset: 0xAD6E7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1B04, symBinAddr: 0x5AA8, symSize: 0x50 } + - { offsetInCU: 0x49AD, offset: 0xAD6FB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1B54, symBinAddr: 0x5AF8, symSize: 0x2D8 } + - { offsetInCU: 0x4A31, offset: 0xAD77F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1E4C, symBinAddr: 0x5DF0, symSize: 0x260 } + - { offsetInCU: 0x4AF9, offset: 0xAD847, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVF', symObjAddr: 0x20D4, symBinAddr: 0x6078, symSize: 0x13C } + - { offsetInCU: 0x4C8F, offset: 0xAD9DD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x2268, symBinAddr: 0x620C, symSize: 0x60 } + - { offsetInCU: 0x4CF0, offset: 0xADA3E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x22FC, symBinAddr: 0x62A0, symSize: 0x44 } + - { offsetInCU: 0x4D43, offset: 0xADA91, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23A0, symBinAddr: 0x6344, symSize: 0x4 } + - { offsetInCU: 0x4D57, offset: 0xADAA5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23B0, symBinAddr: 0x6354, symSize: 0x4 } + - { offsetInCU: 0x4D6B, offset: 0xADAB9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x23C0, symBinAddr: 0x6364, symSize: 0x4 } + - { offsetInCU: 0x4DC9, offset: 0xADB17, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ', symObjAddr: 0x2430, symBinAddr: 0x63D4, symSize: 0x2A0 } + - { offsetInCU: 0x4F48, offset: 0xADC96, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_', symObjAddr: 0x2A58, symBinAddr: 0x69FC, symSize: 0x4D0 } + - { offsetInCU: 0x5111, offset: 0xADE5F, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x30F0, symBinAddr: 0x7094, symSize: 0xE8 } + - { offsetInCU: 0x5146, offset: 0xADE94, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x31D8, symBinAddr: 0x717C, symSize: 0x1F4 } + - { offsetInCU: 0x51A3, offset: 0xADEF1, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x33CC, symBinAddr: 0x7370, symSize: 0x1C } + - { offsetInCU: 0x51E1, offset: 0xADF2F, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x33E8, symBinAddr: 0x738C, symSize: 0x104 } + - { offsetInCU: 0x26, offset: 0xAE309, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xAC864, symSize: 0x26E4 } + - { offsetInCU: 0x40, offset: 0xAE323, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9EA8, symBinAddr: 0x4F9188, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0xAE375, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFEA8, symBinAddr: 0x4FF188, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0xAE3D9, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFED0, symBinAddr: 0x4FF1B0, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0xAE3EF, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x102D8, symBinAddr: 0x4FF5B8, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0xAE406, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFF18, symBinAddr: 0x4FF1F8, symSize: 0x0 } + - { offsetInCU: 0xE22, offset: 0xAF105, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xAC864, symSize: 0x26E4 } + - { offsetInCU: 0x4BAD, offset: 0xB2E90, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9A24, symBinAddr: 0xB6288, symSize: 0x210 } + - { offsetInCU: 0x4E0E, offset: 0xB30F1, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E24, symBinAddr: 0xB1688, symSize: 0x1B8 } + - { offsetInCU: 0x5399, offset: 0xB367C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0xAEF48, symSize: 0x5A8 } + - { offsetInCU: 0x5EE1, offset: 0xB41C4, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0xAF4F0, symSize: 0x674 } + - { offsetInCU: 0x6290, offset: 0xB4573, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3300, symBinAddr: 0xAFB64, symSize: 0x1F0 } + - { offsetInCU: 0x67A5, offset: 0xB4A88, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x34F0, symBinAddr: 0xAFD54, symSize: 0x7A8 } + - { offsetInCU: 0x75B2, offset: 0xB5895, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3C98, symBinAddr: 0xB04FC, symSize: 0x614 } + - { offsetInCU: 0x7F41, offset: 0xB6224, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x42AC, symBinAddr: 0xB0B10, symSize: 0xB78 } + - { offsetInCU: 0x9472, offset: 0xB7755, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x50D0, symBinAddr: 0xB1934, symSize: 0x23CC } + - { offsetInCU: 0xC9D7, offset: 0xBACBA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x4FDC, symBinAddr: 0xB1840, symSize: 0xF4 } + - { offsetInCU: 0xCBD2, offset: 0xBAEB5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x749C, symBinAddr: 0xB3D00, symSize: 0x30 } + - { offsetInCU: 0xCCC3, offset: 0xBAFA6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x74CC, symBinAddr: 0xB3D30, symSize: 0x58 } + - { offsetInCU: 0xCD38, offset: 0xBB01B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0xB3D88, symSize: 0x4 } + - { offsetInCU: 0xCD80, offset: 0xBB063, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0xB3D88, symSize: 0x4 } + - { offsetInCU: 0xCDAF, offset: 0xBB092, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0xB3D88, symSize: 0x4 } + - { offsetInCU: 0xCDD3, offset: 0xBB0B6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7528, symBinAddr: 0xB3D8C, symSize: 0x8C } + - { offsetInCU: 0xCF26, offset: 0xBB209, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0xB3E18, symSize: 0x4 } + - { offsetInCU: 0xCF5F, offset: 0xBB242, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0xB3E18, symSize: 0x4 } + - { offsetInCU: 0xD1F8, offset: 0xBB4DB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x75B8, symBinAddr: 0xB3E1C, symSize: 0x1870 } + - { offsetInCU: 0xF966, offset: 0xBDC49, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9C34, symBinAddr: 0xB6498, symSize: 0x200 } + - { offsetInCU: 0xFECD, offset: 0xBE1B0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8E28, symBinAddr: 0xB568C, symSize: 0x20 } + - { offsetInCU: 0x1036A, offset: 0xBE64D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8E48, symBinAddr: 0xB56AC, symSize: 0xBDC } + - { offsetInCU: 0x26, offset: 0xBF3DA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xB6698, symSize: 0x1E0 } + - { offsetInCU: 0x1D2, offset: 0xBF586, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xB6698, symSize: 0x1E0 } + - { offsetInCU: 0x26, offset: 0xBF821, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xB6878, symSize: 0x3C } + - { offsetInCU: 0x34, offset: 0xBF82F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xB6878, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xBF93F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xB68B4, symSize: 0x90 } + - { offsetInCU: 0x34, offset: 0xBF94D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xB68B4, symSize: 0x90 } + - { offsetInCU: 0x86, offset: 0xBFAB0, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0x4FF680, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0xBFAE2, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0x4FF610, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0xBFB04, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0x4FF640, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0xBFB1A, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0x4FF670, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0xBFDE1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xB6944, symSize: 0x18 } + - { offsetInCU: 0x3FB, offset: 0xBFE25, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0xB6944, symSize: 0x18 } + - { offsetInCU: 0x594, offset: 0xBFFBE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0xB695C, symSize: 0x18 } + - { offsetInCU: 0x63F, offset: 0xC0069, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0xB6974, symSize: 0x300 } + - { offsetInCU: 0x10C0, offset: 0xC0AEA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0xB6C74, symSize: 0xAC } + - { offsetInCU: 0x13B6, offset: 0xC0DE0, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0xB6D20, symSize: 0x4D0 } + - { offsetInCU: 0x24CA, offset: 0xC1EF4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0xB71F0, symSize: 0x28C } + - { offsetInCU: 0x2B3F, offset: 0xC2569, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0xB747C, symSize: 0xF4 } + - { offsetInCU: 0x2D4A, offset: 0xC2774, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0xB7570, symSize: 0x168 } + - { offsetInCU: 0x26, offset: 0xC2A97, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB76D8, symSize: 0x38 } + - { offsetInCU: 0xFA, offset: 0xC2B6B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB76D8, symSize: 0x38 } + - { offsetInCU: 0x12C, offset: 0xC2B9D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xB76D8, symSize: 0x38 } + - { offsetInCU: 0x199, offset: 0xC2C0A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xB7710, symSize: 0x3C } + - { offsetInCU: 0x1F3, offset: 0xC2C64, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0xB7710, symSize: 0x3C } + - { offsetInCU: 0x31B, offset: 0xC2D8C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0xB774C, symSize: 0x5C } + - { offsetInCU: 0x517, offset: 0xC2F88, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0xB77A8, symSize: 0x1C } + - { offsetInCU: 0x636, offset: 0xC30A7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0xB77C4, symSize: 0x54 } + - { offsetInCU: 0x6D0, offset: 0xC3141, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0xB7818, symSize: 0x4C } + - { offsetInCU: 0x8A8, offset: 0xC3319, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xB7864, symSize: 0xA8 } + - { offsetInCU: 0x90C, offset: 0xC337D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0xB7864, symSize: 0xA8 } + - { offsetInCU: 0xBA6, offset: 0xC3617, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0xB790C, symSize: 0x124 } + - { offsetInCU: 0xEC3, offset: 0xC3934, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xB7A30, symSize: 0xC8 } + - { offsetInCU: 0xF43, offset: 0xC39B4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0xB7A30, symSize: 0xC8 } + - { offsetInCU: 0x10B0, offset: 0xC3B21, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0xB7AF8, symSize: 0x180 } + - { offsetInCU: 0x134C, offset: 0xC3DBD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x5A0, symBinAddr: 0xB7C78, symSize: 0x16C } + - { offsetInCU: 0x14BB, offset: 0xC3F2C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x70C, symBinAddr: 0xB7DE4, symSize: 0x18 } + - { offsetInCU: 0x1522, offset: 0xC3F93, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x724, symBinAddr: 0xB7DFC, symSize: 0xC } + - { offsetInCU: 0x155B, offset: 0xC3FCC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x730, symBinAddr: 0xB7E08, symSize: 0x8 } + - { offsetInCU: 0x15DF, offset: 0xC4050, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x738, symBinAddr: 0xB7E10, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xC41FD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xB7E4C, symSize: 0x140 } + - { offsetInCU: 0x34, offset: 0xC420B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xB7E4C, symSize: 0x140 } + - { offsetInCU: 0x34, offset: 0xC4311, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x388, symBinAddr: 0xB756E8, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xC4353, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xB7F8C, symSize: 0x35C } + - { offsetInCU: 0x76, offset: 0xC43A3, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x500000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xC4427, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x525000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xC4688, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xB7F8C, symSize: 0x35C } + - { offsetInCU: 0xC70, offset: 0xC4F9D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0xB82E8, symSize: 0x1FC } + - { offsetInCU: 0x115F, offset: 0xC548C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0xB84E4, symSize: 0x1B8 } + - { offsetInCU: 0x10, offset: 0xC5861, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xB86A0, symSize: 0x1A0 } + - { offsetInCU: 0x50, offset: 0xC58A1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xB86A0, symSize: 0x1A0 } + - { offsetInCU: 0x5E, offset: 0xC58AF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0xB8840, symSize: 0x60 } + - { offsetInCU: 0x81, offset: 0xC58D2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0xB88A0, symSize: 0x288 } + - { offsetInCU: 0x10, offset: 0xC58C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xB8B30, symSize: 0x130 } + - { offsetInCU: 0x48, offset: 0xC58FB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xB8B30, symSize: 0x130 } + - { offsetInCU: 0x5F, offset: 0xC5912, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0xB8C60, symSize: 0x70 } + - { offsetInCU: 0x75, offset: 0xC5928, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0xB8CD0, symSize: 0x160 } + - { offsetInCU: 0x7A, offset: 0xC592D, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0xB8E30, symSize: 0x378 } + - { offsetInCU: 0x10, offset: 0xC593B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xB91C0, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xC5973, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xB91C0, symSize: 0x3A0 } + - { offsetInCU: 0x4C, offset: 0xC5977, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0xB9560, symSize: 0x6C0 } + - { offsetInCU: 0x66, offset: 0xC5991, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0xB9C20, symSize: 0x1138 } + - { offsetInCU: 0x50, offset: 0xC59DD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0xBAEC0, symSize: 0x1180 } + - { offsetInCU: 0x66, offset: 0xC59F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0xBC040, symSize: 0x1410 } + - { offsetInCU: 0x10, offset: 0xC59E9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBD460, symSize: 0x240 } + - { offsetInCU: 0x45, offset: 0xC5A1E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBD460, symSize: 0x240 } + - { offsetInCU: 0x4D, offset: 0xC5A26, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0xBD6A0, symSize: 0x9E0 } + - { offsetInCU: 0x63, offset: 0xC5A3C, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0xBE080, symSize: 0x650 } + - { offsetInCU: 0x10, offset: 0xC5A4B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBE6E0, symSize: 0x40 } + - { offsetInCU: 0x47, offset: 0xC5A82, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0xBE6E0, symSize: 0x40 } + - { offsetInCU: 0x5D, offset: 0xC5A98, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0xBE720, symSize: 0x40 } + - { offsetInCU: 0x76, offset: 0xC5AB1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0xBE760, symSize: 0x40 } + - { offsetInCU: 0x81, offset: 0xC5ABC, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0xBE7A0, symSize: 0x1E0 } + - { offsetInCU: 0x97, offset: 0xC5AD2, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0xBE980, symSize: 0x170 } + - { offsetInCU: 0xAB, offset: 0xC5AE6, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0xBEAF0, symSize: 0x50 } + - { offsetInCU: 0xC3, offset: 0xC5AFE, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0xBEB40, symSize: 0x50 } + - { offsetInCU: 0xD9, offset: 0xC5B14, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0xBEB90, symSize: 0x50 } + - { offsetInCU: 0xEF, offset: 0xC5B2A, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0xBEBE0, symSize: 0x60 } + - { offsetInCU: 0x111, offset: 0xC5B4C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0xBEC40, symSize: 0x1E0 } + - { offsetInCU: 0x124, offset: 0xC5B5F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0xBEE20, symSize: 0x360 } + - { offsetInCU: 0x141, offset: 0xC5B7C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0xBF180, symSize: 0x2D0 } + - { offsetInCU: 0x156, offset: 0xC5B91, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0xBF450, symSize: 0x2B0 } + - { offsetInCU: 0x170, offset: 0xC5BAB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0xBF700, symSize: 0x250 } + - { offsetInCU: 0x184, offset: 0xC5BBF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0xBF950, symSize: 0x60 } + - { offsetInCU: 0x19A, offset: 0xC5BD5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0xBF9B0, symSize: 0x44 } + - { offsetInCU: 0x10, offset: 0xC5BCB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xBFA00, symSize: 0xB90 } + - { offsetInCU: 0x4C, offset: 0xC5C07, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0xBFA00, symSize: 0xB90 } + - { offsetInCU: 0x62, offset: 0xC5C1D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0xC0590, symSize: 0xB98 } + - { offsetInCU: 0x10, offset: 0xC5C17, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC1140, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5C58, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC1140, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5C58, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xC1F80, symSize: 0x7E0 } + - { offsetInCU: 0x10, offset: 0xC5C63, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC2780, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5CA4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xC2780, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xC5CA4, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0xC35C0, symSize: 0x1F0 } ... diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasSVG.yml b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasSVG.yml index a324c52eb..c9d58288a 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasSVG.yml +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasSVG.yml @@ -2,290 +2,308 @@ triple: 'x86_64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/CanvasSVG' relocations: - - { offsetInCU: 0x34, offset: 0xAB77E, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x5E1000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0xAB7B3, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x5E1030, symSize: 0x0 } - - { offsetInCU: 0x27, offset: 0xAB7F0, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x1880, symSize: 0xC5 } - - { offsetInCU: 0x66, offset: 0xAB82F, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x1880, symSize: 0xC5 } - - { offsetInCU: 0x1D9, offset: 0xAB9A2, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xC5, symBinAddr: 0x1945, symSize: 0xC5 } - - { offsetInCU: 0x65, offset: 0xABB7F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x1A10, symSize: 0x40 } - - { offsetInCU: 0xBB, offset: 0xABBD5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvsTo', symObjAddr: 0x70, symBinAddr: 0x1A80, symSize: 0x40 } - - { offsetInCU: 0x114, offset: 0xABC2E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x110, symBinAddr: 0x1B20, symSize: 0x40 } - - { offsetInCU: 0x16A, offset: 0xABC84, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x190, symBinAddr: 0x1BA0, symSize: 0x60 } - - { offsetInCU: 0x1C5, offset: 0xABCDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvgTo', symObjAddr: 0x280, symBinAddr: 0x1C90, symSize: 0x40 } - - { offsetInCU: 0x21B, offset: 0xABD35, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvsTo', symObjAddr: 0x2F0, symBinAddr: 0x1D00, symSize: 0x40 } - - { offsetInCU: 0x274, offset: 0xABD8E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x3D0, symBinAddr: 0x1DE0, symSize: 0x20 } - - { offsetInCU: 0x2CA, offset: 0xABDE4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x3F0, symBinAddr: 0x1E00, symSize: 0x10 } - - { offsetInCU: 0x323, offset: 0xABE3D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x400, symBinAddr: 0x1E10, symSize: 0x20 } - - { offsetInCU: 0x379, offset: 0xABE93, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x420, symBinAddr: 0x1E30, symSize: 0x10 } - - { offsetInCU: 0x3D2, offset: 0xABEEC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x430, symBinAddr: 0x1E40, symSize: 0x20 } - - { offsetInCU: 0x428, offset: 0xABF42, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x450, symBinAddr: 0x1E60, symSize: 0x10 } - - { offsetInCU: 0x481, offset: 0xABF9B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x460, symBinAddr: 0x1E70, symSize: 0x40 } - - { offsetInCU: 0x4ED, offset: 0xAC007, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0x4D0, symBinAddr: 0x1EE0, symSize: 0x50 } - - { offsetInCU: 0x5E1, offset: 0xAC0FB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScaleSfyFTo', symObjAddr: 0xB10, symBinAddr: 0x2520, symSize: 0xB0 } - - { offsetInCU: 0x6D2, offset: 0xAC1EC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x14E0, symBinAddr: 0x2EF0, symSize: 0x30 } - - { offsetInCU: 0x704, offset: 0xAC21E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x1830, symBinAddr: 0x3240, symSize: 0x30 } - - { offsetInCU: 0x736, offset: 0xAC250, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1870, symBinAddr: 0x3270, symSize: 0x30 } - - { offsetInCU: 0x77E, offset: 0xAC298, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x18A0, symBinAddr: 0x32A0, symSize: 0x20 } - - { offsetInCU: 0x7F2, offset: 0xAC30C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x1D00, symBinAddr: 0x3700, symSize: 0x30 } - - { offsetInCU: 0x829, offset: 0xAC343, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x1F90, symBinAddr: 0x3990, symSize: 0x30 } - - { offsetInCU: 0x87B, offset: 0xAC395, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x21E0, symBinAddr: 0x3BC0, symSize: 0x80 } - - { offsetInCU: 0x8EE, offset: 0xAC408, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x2400, symBinAddr: 0x3DE0, symSize: 0x30 } - - { offsetInCU: 0x920, offset: 0xAC43A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x24B0, symBinAddr: 0x3E90, symSize: 0x30 } - - { offsetInCU: 0xA4E, offset: 0xAC568, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x4BA0, symBinAddr: 0x6580, symSize: 0x17D0 } - - { offsetInCU: 0x16BB, offset: 0xAD1D5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZTf4nd_n', symObjAddr: 0x6370, symBinAddr: 0x7D50, symSize: 0x2B0 } - - { offsetInCU: 0x18BE, offset: 0xAD3D8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZTf4nd_n', symObjAddr: 0x6620, symBinAddr: 0x8000, symSize: 0x3D0 } - - { offsetInCU: 0x1AF2, offset: 0xAD60C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZTf4nd_n', symObjAddr: 0x69F0, symBinAddr: 0x83D0, symSize: 0x470 } - - { offsetInCU: 0x1D54, offset: 0xAD86E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvpACTK', symObjAddr: 0xB0, symBinAddr: 0x1AC0, symSize: 0x40 } - - { offsetInCU: 0x1D8A, offset: 0xAD8A4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTK', symObjAddr: 0x1F0, symBinAddr: 0x1C00, symSize: 0x40 } - - { offsetInCU: 0x1DC0, offset: 0xAD8DA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvpACTk', symObjAddr: 0x230, symBinAddr: 0x1C40, symSize: 0x50 } - - { offsetInCU: 0x1DEE, offset: 0xAD908, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvpACTK', symObjAddr: 0x330, symBinAddr: 0x1D40, symSize: 0x40 } - - { offsetInCU: 0x1E24, offset: 0xAD93E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0x570, symBinAddr: 0x1F80, symSize: 0x40 } - - { offsetInCU: 0x1E5A, offset: 0xAD974, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0x5B0, symBinAddr: 0x1FC0, symSize: 0x50 } - - { offsetInCU: 0x1F15, offset: 0xADA2F, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x1C60, symBinAddr: 0x3660, symSize: 0x40 } - - { offsetInCU: 0x1F29, offset: 0xADA43, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x1CE0, symBinAddr: 0x36E0, symSize: 0x20 } - - { offsetInCU: 0x1F58, offset: 0xADA72, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x46F0, symBinAddr: 0x60D0, symSize: 0x70 } - - { offsetInCU: 0x1FAC, offset: 0xADAC6, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSS_Tgm5', symObjAddr: 0x4830, symBinAddr: 0x6210, symSize: 0x80 } - - { offsetInCU: 0x23F6, offset: 0xADF10, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6E90, symBinAddr: 0x8870, symSize: 0x20 } - - { offsetInCU: 0x240A, offset: 0xADF24, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x6EB0, symBinAddr: 0x8890, symSize: 0x20 } - - { offsetInCU: 0x241E, offset: 0xADF38, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x6ED0, symBinAddr: 0x88B0, symSize: 0x10 } - - { offsetInCU: 0x2432, offset: 0xADF4C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6F60, symBinAddr: 0x8940, symSize: 0x20 } - - { offsetInCU: 0x2446, offset: 0xADF60, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_TA', symObjAddr: 0x6FC0, symBinAddr: 0x89A0, symSize: 0x20 } - - { offsetInCU: 0x245A, offset: 0xADF74, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x7200, symBinAddr: 0x8BE0, symSize: 0x10 } - - { offsetInCU: 0x246E, offset: 0xADF88, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x7210, symBinAddr: 0x8BF0, symSize: 0x10 } - - { offsetInCU: 0x2482, offset: 0xADF9C, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x7220, symBinAddr: 0x8C00, symSize: 0x20 } - - { offsetInCU: 0x2496, offset: 0xADFB0, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x7240, symBinAddr: 0x8C20, symSize: 0x30 } - - { offsetInCU: 0x24B5, offset: 0xADFCF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x72E0, symBinAddr: 0x8CC0, symSize: 0x20 } - - { offsetInCU: 0x24DE, offset: 0xADFF8, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x7300, symBinAddr: 0x8CE0, symSize: 0x30 } - - { offsetInCU: 0x24F2, offset: 0xAE00C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0x7390, symBinAddr: 0x8D70, symSize: 0x20 } - - { offsetInCU: 0x2526, offset: 0xAE040, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x73E0, symBinAddr: 0x8DC0, symSize: 0x30 } - - { offsetInCU: 0x253A, offset: 0xAE054, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_yyScMYccfU_Tf2niiin_nTA', symObjAddr: 0x75C0, symBinAddr: 0x8FA0, symSize: 0x120 } - - { offsetInCU: 0x261F, offset: 0xAE139, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x7700, symBinAddr: 0x90E0, symSize: 0x10 } - - { offsetInCU: 0x2BB4, offset: 0xAE6CE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataSvSgvg', symObjAddr: 0x40, symBinAddr: 0x1A50, symSize: 0x30 } - - { offsetInCU: 0x2C3A, offset: 0xAE754, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg', symObjAddr: 0x150, symBinAddr: 0x1B60, symSize: 0x40 } - - { offsetInCU: 0x2C90, offset: 0xAE7AA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8buf_sizeSuvg', symObjAddr: 0x2C0, symBinAddr: 0x1CD0, symSize: 0x30 } - - { offsetInCU: 0x2D87, offset: 0xAE8A1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0x4A0, symBinAddr: 0x1EB0, symSize: 0x30 } - - { offsetInCU: 0x2DD8, offset: 0xAE8F2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0x520, symBinAddr: 0x1F30, symSize: 0x50 } - - { offsetInCU: 0x2E4A, offset: 0xAE964, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0x600, symBinAddr: 0x2010, symSize: 0x40 } - - { offsetInCU: 0x2E6F, offset: 0xAE989, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0x640, symBinAddr: 0x2050, symSize: 0x30 } - - { offsetInCU: 0x2EDE, offset: 0xAE9F8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0x730, symBinAddr: 0x2140, symSize: 0x40 } - - { offsetInCU: 0x2F03, offset: 0xAEA1D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0xA90, symBinAddr: 0x24A0, symSize: 0x40 } - - { offsetInCU: 0x30A0, offset: 0xAEBBA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0xBC0, symBinAddr: 0x25D0, symSize: 0x460 } - - { offsetInCU: 0x33F6, offset: 0xAEF10, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x1020, symBinAddr: 0x2A30, symSize: 0x4B0 } - - { offsetInCU: 0x3696, offset: 0xAF1B0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1510, symBinAddr: 0x2F20, symSize: 0x320 } - - { offsetInCU: 0x3A1E, offset: 0xAF538, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x18C0, symBinAddr: 0x32C0, symSize: 0x80 } - - { offsetInCU: 0x3A32, offset: 0xAF54C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1940, symBinAddr: 0x3340, symSize: 0x320 } - - { offsetInCU: 0x3AAE, offset: 0xAF5C8, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1D30, symBinAddr: 0x3730, symSize: 0x260 } - - { offsetInCU: 0x3B5D, offset: 0xAF677, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9drawImage33_C2B5A81EA80ED94FA09E8C035710AE36LLyySo6CGRectVF', symObjAddr: 0x1FC0, symBinAddr: 0x39C0, symSize: 0x200 } - - { offsetInCU: 0x3D61, offset: 0xAF87B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x2260, symBinAddr: 0x3C40, symSize: 0x1A0 } - - { offsetInCU: 0x3F3B, offset: 0xAFA55, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2430, symBinAddr: 0x3E10, symSize: 0x80 } - - { offsetInCU: 0x3FFA, offset: 0xAFB14, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ', symObjAddr: 0x24E0, symBinAddr: 0x3EC0, symSize: 0x10 } - - { offsetInCU: 0x400E, offset: 0xAFB28, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ', symObjAddr: 0x2510, symBinAddr: 0x3EF0, symSize: 0x10 } - - { offsetInCU: 0x4022, offset: 0xAFB3C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ', symObjAddr: 0x2540, symBinAddr: 0x3F20, symSize: 0x10 } - - { offsetInCU: 0x4042, offset: 0xAFB5C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ', symObjAddr: 0x25B0, symBinAddr: 0x3F90, symSize: 0x270 } - - { offsetInCU: 0x40AD, offset: 0xAFBC7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x2820, symBinAddr: 0x4200, symSize: 0x470 } - - { offsetInCU: 0x43A0, offset: 0xAFEBA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x2D30, symBinAddr: 0x4710, symSize: 0x9D0 } - - { offsetInCU: 0x4528, offset: 0xB0042, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZyyYbcfU_', symObjAddr: 0x3A70, symBinAddr: 0x5450, symSize: 0xC20 } - - { offsetInCU: 0x46C7, offset: 0xB01E1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfD', symObjAddr: 0x46C0, symBinAddr: 0x60A0, symSize: 0x30 } - - { offsetInCU: 0x46EA, offset: 0xB0204, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x4760, symBinAddr: 0x6140, symSize: 0xD0 } - - { offsetInCU: 0x472D, offset: 0xB0247, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x48B0, symBinAddr: 0x6290, symSize: 0x220 } - - { offsetInCU: 0x479E, offset: 0xB02B8, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x4AD0, symBinAddr: 0x64B0, symSize: 0x20 } - - { offsetInCU: 0x47D5, offset: 0xB02EF, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x4AF0, symBinAddr: 0x64D0, symSize: 0xB0 } - - { offsetInCU: 0x26, offset: 0xB0610, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xABAF0, symSize: 0x3990 } - - { offsetInCU: 0x40, offset: 0xB062A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0xEEC0, symBinAddr: 0x618470, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0xB067C, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0x14EC0, symBinAddr: 0x61E470, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0xB06E0, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0x14EE8, symBinAddr: 0x61E498, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0xB06F6, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x152F0, symBinAddr: 0x61E8A0, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0xB070D, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0x14F30, symBinAddr: 0x61E4E0, symSize: 0x0 } - - { offsetInCU: 0xE22, offset: 0xB140C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xABAF0, symSize: 0x3990 } - - { offsetInCU: 0x4DAE, offset: 0xB5398, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0xE6E0, symBinAddr: 0xBA1D0, symSize: 0x3E0 } - - { offsetInCU: 0x4FF1, offset: 0xB55DB, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x7C20, symBinAddr: 0xB3710, symSize: 0x270 } - - { offsetInCU: 0x582C, offset: 0xB5E16, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x3990, symBinAddr: 0xAF480, symSize: 0xA10 } - - { offsetInCU: 0x684B, offset: 0xB6E35, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x43A0, symBinAddr: 0xAFE90, symSize: 0xA10 } - - { offsetInCU: 0x6EE9, offset: 0xB74D3, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x4DB0, symBinAddr: 0xB08A0, symSize: 0x2B0 } - - { offsetInCU: 0x74BC, offset: 0xB7AA6, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x5060, symBinAddr: 0xB0B50, symSize: 0xCD0 } - - { offsetInCU: 0x83FE, offset: 0xB89E8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x5D30, symBinAddr: 0xB1820, symSize: 0xB40 } - - { offsetInCU: 0x8F67, offset: 0xB9551, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x6870, symBinAddr: 0xB2360, symSize: 0x13B0 } - - { offsetInCU: 0xA567, offset: 0xBAB51, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x7FF0, symBinAddr: 0xB3AE0, symSize: 0x2A30 } - - { offsetInCU: 0xDC6D, offset: 0xBE257, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x7E90, symBinAddr: 0xB3980, symSize: 0x160 } - - { offsetInCU: 0xDEE7, offset: 0xBE4D1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0xAA20, symBinAddr: 0xB6510, symSize: 0x30 } - - { offsetInCU: 0xDFDC, offset: 0xBE5C6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0xAA50, symBinAddr: 0xB6540, symSize: 0x50 } - - { offsetInCU: 0xE051, offset: 0xBE63B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0xAAA0, symBinAddr: 0xB6590, symSize: 0x10 } - - { offsetInCU: 0xE0EC, offset: 0xBE6D6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0xAAB0, symBinAddr: 0xB65A0, symSize: 0xB0 } - - { offsetInCU: 0xE217, offset: 0xBE801, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0xAB60, symBinAddr: 0xB6650, symSize: 0x10 } - - { offsetInCU: 0xE4E9, offset: 0xBEAD3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0xAB70, symBinAddr: 0xB6660, symSize: 0x21A0 } - - { offsetInCU: 0x1118F, offset: 0xC1779, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0xEAC0, symBinAddr: 0xBA5B0, symSize: 0x2D1 } - - { offsetInCU: 0x117CF, offset: 0xC1DB9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0xCD10, symBinAddr: 0xB8800, symSize: 0x20 } - - { offsetInCU: 0x11C6C, offset: 0xC2256, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0xCD30, symBinAddr: 0xB8820, symSize: 0x19B0 } - - { offsetInCU: 0x26, offset: 0xC3306, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xBA890, symSize: 0x800 } - - { offsetInCU: 0x41, offset: 0xC3321, size: 0x8, addend: 0x0, symName: _aes_nohw_rcon, symObjAddr: 0x1B10, symBinAddr: 0x61E980, symSize: 0x0 } - - { offsetInCU: 0x484, offset: 0xC3764, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xBA890, symSize: 0x800 } - - { offsetInCU: 0x1B2B, offset: 0xC4E0B, size: 0x8, addend: 0x0, symName: _aes_nohw_sub_bytes, symObjAddr: 0x15F0, symBinAddr: 0xBBE80, symSize: 0x300 } - - { offsetInCU: 0x32EE, offset: 0xC65CE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_encrypt, symObjAddr: 0x800, symBinAddr: 0xBB090, symSize: 0x80 } - - { offsetInCU: 0x33DC, offset: 0xC66BC, size: 0x8, addend: 0x0, symName: _aes_nohw_expand_round_keys, symObjAddr: 0x880, symBinAddr: 0xBB110, symSize: 0x1A0 } - - { offsetInCU: 0x386D, offset: 0xC6B4D, size: 0x8, addend: 0x0, symName: _aes_nohw_to_batch, symObjAddr: 0xA20, symBinAddr: 0xBB2B0, symSize: 0x420 } - - { offsetInCU: 0x3D7D, offset: 0xC705D, size: 0x8, addend: 0x0, symName: _aes_nohw_encrypt_batch, symObjAddr: 0xE40, symBinAddr: 0xBB6D0, symSize: 0x380 } - - { offsetInCU: 0x424C, offset: 0xC752C, size: 0x8, addend: 0x0, symName: _aes_nohw_from_batch, symObjAddr: 0x11C0, symBinAddr: 0xBBA50, symSize: 0x250 } - - { offsetInCU: 0x498D, offset: 0xC7C6D, size: 0x8, addend: 0x0, symName: _aes_nohw_shift_rows, symObjAddr: 0x18F0, symBinAddr: 0xBC180, symSize: 0x149 } - - { offsetInCU: 0x4BF9, offset: 0xC7ED9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_ctr32_encrypt_blocks, symObjAddr: 0x1410, symBinAddr: 0xBBCA0, symSize: 0x1E0 } - - { offsetInCU: 0x26, offset: 0xC82FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xBC2D0, symSize: 0x2DC } - - { offsetInCU: 0x1D2, offset: 0xC84A6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xBC2D0, symSize: 0x2DC } - - { offsetInCU: 0x26, offset: 0xC86FF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xBC5B0, symSize: 0x87 } - - { offsetInCU: 0x34, offset: 0xC870D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xBC5B0, symSize: 0x87 } - - { offsetInCU: 0x26, offset: 0xC881D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xBC640, symSize: 0x46 } - - { offsetInCU: 0x34, offset: 0xC882B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xBC640, symSize: 0x46 } - - { offsetInCU: 0x86, offset: 0xC898E, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x15F0, symBinAddr: 0x61EA00, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0xC89C0, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1580, symBinAddr: 0x61E990, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0xC89E2, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x15B0, symBinAddr: 0x61E9C0, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0xC89F8, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x15E0, symBinAddr: 0x61E9F0, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0xC8CBF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x150, symBinAddr: 0xBC690, symSize: 0x20 } - - { offsetInCU: 0x594, offset: 0xC8E9C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x250, symBinAddr: 0xBC6B0, symSize: 0x20 } - - { offsetInCU: 0x63F, offset: 0xC8F47, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x340, symBinAddr: 0xBC6D0, symSize: 0x3A0 } - - { offsetInCU: 0x11A7, offset: 0xC9AAF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x6E0, symBinAddr: 0xBCA70, symSize: 0x140 } - - { offsetInCU: 0x14A2, offset: 0xC9DAA, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x820, symBinAddr: 0xBCBB0, symSize: 0x6B0 } - - { offsetInCU: 0x26DA, offset: 0xCAFE2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xED0, symBinAddr: 0xBD260, symSize: 0x380 } - - { offsetInCU: 0x2D37, offset: 0xCB63F, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0x1250, symBinAddr: 0xBD5E0, symSize: 0x170 } - - { offsetInCU: 0x2F2F, offset: 0xCB837, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0x13C0, symBinAddr: 0xBD750, symSize: 0x1BF } - - { offsetInCU: 0x26, offset: 0xCBB82, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xBD910, symSize: 0x50 } - - { offsetInCU: 0xFA, offset: 0xCBC56, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xBD910, symSize: 0x50 } - - { offsetInCU: 0x18D, offset: 0xCBCE9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x50, symBinAddr: 0xBD960, symSize: 0x60 } - - { offsetInCU: 0x2F1, offset: 0xCBE4D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0xB0, symBinAddr: 0xBD9C0, symSize: 0x90 } - - { offsetInCU: 0x4C6, offset: 0xCC022, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0x140, symBinAddr: 0xBDA50, symSize: 0x20 } - - { offsetInCU: 0x5E3, offset: 0xCC13F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0x160, symBinAddr: 0xBDA70, symSize: 0xB0 } - - { offsetInCU: 0x696, offset: 0xCC1F2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x210, symBinAddr: 0xBDB20, symSize: 0x70 } - - { offsetInCU: 0x861, offset: 0xCC3BD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x280, symBinAddr: 0xBDB90, symSize: 0x170 } - - { offsetInCU: 0xB67, offset: 0xCC6C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x3F0, symBinAddr: 0xBDD00, symSize: 0x270 } - - { offsetInCU: 0xE6A, offset: 0xCC9C6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x660, symBinAddr: 0xBDF70, symSize: 0x1A0 } - - { offsetInCU: 0x105D, offset: 0xCCBB9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x800, symBinAddr: 0xBE110, symSize: 0x280 } - - { offsetInCU: 0x128C, offset: 0xCCDE8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0xC20, symBinAddr: 0xBE390, symSize: 0x20 } - - { offsetInCU: 0x12F3, offset: 0xCCE4F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0xC40, symBinAddr: 0xBE3B0, symSize: 0x20 } - - { offsetInCU: 0x132A, offset: 0xCCE86, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0xC60, symBinAddr: 0xBE3D0, symSize: 0x10 } - - { offsetInCU: 0x13AC, offset: 0xCCF08, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0xC70, symBinAddr: 0xBE3E0, symSize: 0x4A } - - { offsetInCU: 0x26, offset: 0xCD094, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xBE430, symSize: 0x129 } - - { offsetInCU: 0x34, offset: 0xCD0A2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xBE430, symSize: 0x129 } - - { offsetInCU: 0x34, offset: 0xCD1A4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_ia32cap_P, symObjAddr: 0x3F0, symBinAddr: 0xD5E370, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xCD1F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0xBE560, symSize: 0xF8 } - - { offsetInCU: 0xD5, offset: 0xCD2A8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0xBE560, symSize: 0xF8 } - - { offsetInCU: 0x26, offset: 0xCD3FD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0xBE660, symSize: 0x1210 } - - { offsetInCU: 0x92E, offset: 0xCDD05, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0xBE660, symSize: 0x1210 } - - { offsetInCU: 0x5347, offset: 0xD271E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base_adx, symObjAddr: 0x1210, symBinAddr: 0xBF870, symSize: 0x1E50 } - - { offsetInCU: 0x9B2F, offset: 0xD6F06, size: 0x8, addend: 0x0, symName: _inline_x25519_ge_dbl_4, symObjAddr: 0x3060, symBinAddr: 0xC16C0, symSize: 0x361 } - - { offsetInCU: 0x26, offset: 0xD82F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0xC1A30, symSize: 0xD0 } - - { offsetInCU: 0x303, offset: 0xD85D0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0xC1A30, symSize: 0xD0 } - - { offsetInCU: 0x5A4, offset: 0xD8871, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_update, symObjAddr: 0xD0, symBinAddr: 0xC1B00, symSize: 0x1C0 } - - { offsetInCU: 0x764, offset: 0xD8A31, size: 0x8, addend: 0x0, symName: _poly1305_blocks, symObjAddr: 0x5F0, symBinAddr: 0xC2020, symSize: 0x780 } - - { offsetInCU: 0x903, offset: 0xD8BD0, size: 0x8, addend: 0x0, symName: _poly1305_first_block, symObjAddr: 0x290, symBinAddr: 0xC1CC0, symSize: 0x360 } - - { offsetInCU: 0xEFC, offset: 0xD91C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_finish, symObjAddr: 0xD70, symBinAddr: 0xC27A0, symSize: 0xAA2 } - - { offsetInCU: 0x10, offset: 0xD9952, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0xC3242, symSize: 0x2AF } - - { offsetInCU: 0x51, offset: 0xD9993, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0xC3242, symSize: 0x2AF } - - { offsetInCU: 0x10, offset: 0xD9988, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0xC34F1, symSize: 0x1F4 } - - { offsetInCU: 0x54, offset: 0xD99CC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0xC34F1, symSize: 0x1F4 } - - { offsetInCU: 0x26, offset: 0xD99D4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xC36F0, symSize: 0x490 } - - { offsetInCU: 0x76, offset: 0xD9A24, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x61F000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xD9AA8, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x644000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xD9D09, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xC36F0, symSize: 0x490 } - - { offsetInCU: 0xC5A, offset: 0xDA608, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x490, symBinAddr: 0xC3B80, symSize: 0x300 } - - { offsetInCU: 0x1135, offset: 0xDAAE3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x790, symBinAddr: 0xC3E80, symSize: 0x25D } - - { offsetInCU: 0x10, offset: 0xDAEA8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xC4100, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xDAEE0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xC4100, symSize: 0x3A0 } - - { offsetInCU: 0x4D, offset: 0xDAEE5, size: 0x8, addend: 0x0, symName: ChaCha20_ssse3, symObjAddr: 0x3A0, symBinAddr: 0xC44A0, symSize: 0x220 } - - { offsetInCU: 0x60, offset: 0xDAEF8, size: 0x8, addend: 0x0, symName: ChaCha20_4x, symObjAddr: 0x5C0, symBinAddr: 0xC46C0, symSize: 0xA20 } - - { offsetInCU: 0x76, offset: 0xDAF0E, size: 0x8, addend: 0x0, symName: ChaCha20_8x, symObjAddr: 0xFE0, symBinAddr: 0xC50E0, symSize: 0xB4C } - - { offsetInCU: 0x10, offset: 0xDAF20, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0xC5C40, symSize: 0x40 } - - { offsetInCU: 0x48, offset: 0xDAF58, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0xC5C40, symSize: 0x40 } - - { offsetInCU: 0x4D, offset: 0xDAF5D, size: 0x8, addend: 0x0, symName: _aesni_encrypt2, symObjAddr: 0x40, symBinAddr: 0xC5C80, symSize: 0x60 } - - { offsetInCU: 0x63, offset: 0xDAF73, size: 0x8, addend: 0x0, symName: _aesni_encrypt3, symObjAddr: 0xA0, symBinAddr: 0xC5CE0, symSize: 0x70 } - - { offsetInCU: 0x79, offset: 0xDAF89, size: 0x8, addend: 0x0, symName: _aesni_encrypt4, symObjAddr: 0x110, symBinAddr: 0xC5D50, symSize: 0x90 } - - { offsetInCU: 0x8F, offset: 0xDAF9F, size: 0x8, addend: 0x0, symName: _aesni_encrypt6, symObjAddr: 0x1A0, symBinAddr: 0xC5DE0, symSize: 0xE0 } - - { offsetInCU: 0xA5, offset: 0xDAFB5, size: 0x8, addend: 0x0, symName: _aesni_encrypt8, symObjAddr: 0x280, symBinAddr: 0xC5EC0, symSize: 0x110 } - - { offsetInCU: 0xD9, offset: 0xDAFE9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x390, symBinAddr: 0xC5FD0, symSize: 0x940 } - - { offsetInCU: 0xEA, offset: 0xDAFFA, size: 0x8, addend: 0x0, symName: __aesni_set_encrypt_key, symObjAddr: 0xCD0, symBinAddr: 0xC6910, symSize: 0x44D } - - { offsetInCU: 0x10, offset: 0xDAFF0, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0xC6D60, symSize: 0x160 } - - { offsetInCU: 0x3B, offset: 0xDB01B, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0xC6D60, symSize: 0x160 } - - { offsetInCU: 0x54, offset: 0xDB034, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core_2x, symObjAddr: 0x160, symBinAddr: 0xC6EC0, symSize: 0x290 } - - { offsetInCU: 0x68, offset: 0xDB048, size: 0x8, addend: 0x0, symName: _vpaes_schedule_core, symObjAddr: 0x3F0, symBinAddr: 0xC7150, symSize: 0xF0 } - - { offsetInCU: 0x7F, offset: 0xDB05F, size: 0x8, addend: 0x0, symName: _vpaes_schedule_round, symObjAddr: 0x4E0, symBinAddr: 0xC7240, symSize: 0x21 } - - { offsetInCU: 0x99, offset: 0xDB079, size: 0x8, addend: 0x0, symName: _vpaes_schedule_low_round, symObjAddr: 0x501, symBinAddr: 0xC7261, symSize: 0x9F } - - { offsetInCU: 0xAF, offset: 0xDB08F, size: 0x8, addend: 0x0, symName: _vpaes_schedule_transform, symObjAddr: 0x5A0, symBinAddr: 0xC7300, symSize: 0x30 } - - { offsetInCU: 0xC2, offset: 0xDB0A2, size: 0x8, addend: 0x0, symName: _vpaes_schedule_mangle, symObjAddr: 0x5D0, symBinAddr: 0xC7330, symSize: 0x50 } - - { offsetInCU: 0xE9, offset: 0xDB0C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_set_encrypt_key, symObjAddr: 0x620, symBinAddr: 0xC7380, symSize: 0x30 } - - { offsetInCU: 0xF7, offset: 0xDB0D7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_encrypt, symObjAddr: 0x650, symBinAddr: 0xC73B0, symSize: 0x20 } - - { offsetInCU: 0x11A, offset: 0xDB0FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_ctr32_encrypt_blocks, symObjAddr: 0x670, symBinAddr: 0xC73D0, symSize: 0xD0 } - - { offsetInCU: 0x112, offset: 0xDB0F2, size: 0x8, addend: 0x0, symName: _vpaes_preheat, symObjAddr: 0x740, symBinAddr: 0xC74A0, symSize: 0x31 } - - { offsetInCU: 0x10, offset: 0xDB102, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xC74E0, symSize: 0x2A0 } - - { offsetInCU: 0x45, offset: 0xDB137, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xC74E0, symSize: 0x2A0 } - - { offsetInCU: 0x4C, offset: 0xDB13E, size: 0x8, addend: 0x0, symName: bn_mul4x_mont, symObjAddr: 0x2A0, symBinAddr: 0xC7780, symSize: 0x560 } - - { offsetInCU: 0x62, offset: 0xDB154, size: 0x8, addend: 0x0, symName: bn_sqr8x_mont, symObjAddr: 0x800, symBinAddr: 0xC7CE0, symSize: 0x220 } - - { offsetInCU: 0x79, offset: 0xDB16B, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont, symObjAddr: 0xA20, symBinAddr: 0xC7F00, symSize: 0x570 } - - { offsetInCU: 0x10, offset: 0xDB17A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0xC8480, symSize: 0x660 } - - { offsetInCU: 0x4D, offset: 0xDB1B7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0xC8480, symSize: 0x660 } - - { offsetInCU: 0x54, offset: 0xDB1BE, size: 0x8, addend: 0x0, symName: bn_mul4x_mont_gather5, symObjAddr: 0x660, symBinAddr: 0xC8AE0, symSize: 0x100 } - - { offsetInCU: 0x63, offset: 0xDB1CD, size: 0x8, addend: 0x0, symName: mul4x_internal, symObjAddr: 0x760, symBinAddr: 0xC8BE0, symSize: 0x7E0 } - - { offsetInCU: 0x85, offset: 0xDB1EF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_power5, symObjAddr: 0xF40, symBinAddr: 0xC93C0, symSize: 0x180 } - - { offsetInCU: 0xA3, offset: 0xDB20D, size: 0x8, addend: 0x0, symName: __bn_sqr8x_internal, symObjAddr: 0x10C0, symBinAddr: 0xC9540, symSize: 0x579 } - - { offsetInCU: 0xAA, offset: 0xDB214, size: 0x8, addend: 0x0, symName: __bn_sqr8x_reduction, symObjAddr: 0x1639, symBinAddr: 0xC9AB9, symSize: 0x347 } - - { offsetInCU: 0xC0, offset: 0xDB22A, size: 0x8, addend: 0x0, symName: __bn_post4x_internal, symObjAddr: 0x1980, symBinAddr: 0xC9E00, symSize: 0xA0 } - - { offsetInCU: 0xD9, offset: 0xDB243, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont_gather5, symObjAddr: 0x1A20, symBinAddr: 0xC9EA0, symSize: 0xE0 } - - { offsetInCU: 0xE8, offset: 0xDB252, size: 0x8, addend: 0x0, symName: mulx4x_internal, symObjAddr: 0x1B00, symBinAddr: 0xC9F80, symSize: 0x7E0 } - - { offsetInCU: 0xF9, offset: 0xDB263, size: 0x8, addend: 0x0, symName: bn_powerx5, symObjAddr: 0x22E0, symBinAddr: 0xCA760, symSize: 0x160 } - - { offsetInCU: 0x128, offset: 0xDB292, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_internal, symObjAddr: 0x2440, symBinAddr: 0xCA8C0, symSize: 0x637 } - - { offsetInCU: 0x12F, offset: 0xDB299, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_reduction, symObjAddr: 0x2A77, symBinAddr: 0xCAEF7, symSize: 0x329 } - - { offsetInCU: 0x145, offset: 0xDB2AF, size: 0x8, addend: 0x0, symName: __bn_postx4x_internal, symObjAddr: 0x2DA0, symBinAddr: 0xCB220, symSize: 0x90 } - - { offsetInCU: 0x163, offset: 0xDB2CD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_scatter5, symObjAddr: 0x2E30, symBinAddr: 0xCB2B0, symSize: 0x30 } - - { offsetInCU: 0x178, offset: 0xDB2E2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_gather5, symObjAddr: 0x2E60, symBinAddr: 0xCB2E0, symSize: 0x27F } - - { offsetInCU: 0x10, offset: 0xDB2E4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0xCB560, symSize: 0x80 } - - { offsetInCU: 0x4A, offset: 0xDB31E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0xCB560, symSize: 0x80 } - - { offsetInCU: 0x64, offset: 0xDB338, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0x80, symBinAddr: 0xCB5E0, symSize: 0x360 } - - { offsetInCU: 0x7E, offset: 0xDB352, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x3E0, symBinAddr: 0xCB940, symSize: 0x300 } - - { offsetInCU: 0x85, offset: 0xDB359, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_mul_montx, symObjAddr: 0x6E0, symBinAddr: 0xCBC40, symSize: 0x3C0 } - - { offsetInCU: 0x9B, offset: 0xDB36F, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_sqr_montx, symObjAddr: 0xAA0, symBinAddr: 0xCC000, symSize: 0x320 } - - { offsetInCU: 0xB5, offset: 0xDB389, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0xDC0, symBinAddr: 0xCC320, symSize: 0xA0 } - - { offsetInCU: 0xC4, offset: 0xDB398, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montq, symObjAddr: 0xE60, symBinAddr: 0xCC3C0, symSize: 0x240 } - - { offsetInCU: 0xE1, offset: 0xDB3B5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x10A0, symBinAddr: 0xCC600, symSize: 0x80 } - - { offsetInCU: 0xF0, offset: 0xDB3C4, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montq, symObjAddr: 0x1120, symBinAddr: 0xCC680, symSize: 0x1A0 } - - { offsetInCU: 0x106, offset: 0xDB3DA, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montx, symObjAddr: 0x12C0, symBinAddr: 0xCC820, symSize: 0x260 } - - { offsetInCU: 0x11C, offset: 0xDB3F0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montx, symObjAddr: 0x1520, symBinAddr: 0xCCA80, symSize: 0x1C0 } - - { offsetInCU: 0x142, offset: 0xDB416, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x16E0, symBinAddr: 0xCCC40, symSize: 0xE0 } - - { offsetInCU: 0x158, offset: 0xDB42C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x17C0, symBinAddr: 0xCCD20, symSize: 0xC0 } - - { offsetInCU: 0x162, offset: 0xDB436, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w5, symObjAddr: 0x1880, symBinAddr: 0xCCDE0, symSize: 0xC0 } - - { offsetInCU: 0x178, offset: 0xDB44C, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w7, symObjAddr: 0x1940, symBinAddr: 0xCCEA0, symSize: 0xE0 } - - { offsetInCU: 0x188, offset: 0xDB45C, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_toq, symObjAddr: 0x1A20, symBinAddr: 0xCCF80, symSize: 0x60 } - - { offsetInCU: 0x1A0, offset: 0xDB474, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromq, symObjAddr: 0x1A80, symBinAddr: 0xCCFE0, symSize: 0x60 } - - { offsetInCU: 0x1B1, offset: 0xDB485, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subq, symObjAddr: 0x1AE0, symBinAddr: 0xCD040, symSize: 0x40 } - - { offsetInCU: 0x1CC, offset: 0xDB4A0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2q, symObjAddr: 0x1B20, symBinAddr: 0xCD080, symSize: 0x60 } - - { offsetInCU: 0x1ED, offset: 0xDB4C1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x1B80, symBinAddr: 0xCD0E0, symSize: 0x320 } - - { offsetInCU: 0x200, offset: 0xDB4D4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x1EA0, symBinAddr: 0xCD400, symSize: 0x780 } - - { offsetInCU: 0x21D, offset: 0xDB4F1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0x2620, symBinAddr: 0xCDB80, symSize: 0x580 } - - { offsetInCU: 0x222, offset: 0xDB4F6, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_tox, symObjAddr: 0x2BA0, symBinAddr: 0xCE100, symSize: 0x60 } - - { offsetInCU: 0x23A, offset: 0xDB50E, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromx, symObjAddr: 0x2C00, symBinAddr: 0xCE160, symSize: 0x60 } - - { offsetInCU: 0x24B, offset: 0xDB51F, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subx, symObjAddr: 0x2C60, symBinAddr: 0xCE1C0, symSize: 0x60 } - - { offsetInCU: 0x266, offset: 0xDB53A, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2x, symObjAddr: 0x2CC0, symBinAddr: 0xCE220, symSize: 0x60 } - - { offsetInCU: 0x27F, offset: 0xDB553, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_doublex, symObjAddr: 0x2D20, symBinAddr: 0xCE280, symSize: 0x320 } - - { offsetInCU: 0x292, offset: 0xDB566, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_addx, symObjAddr: 0x3040, symBinAddr: 0xCE5A0, symSize: 0x760 } - - { offsetInCU: 0x2AF, offset: 0xDB583, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_add_affinex, symObjAddr: 0x37A0, symBinAddr: 0xCED00, symSize: 0x555 } - - { offsetInCU: 0x10, offset: 0xDB582, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0xCF260, symSize: 0x5A0 } - - { offsetInCU: 0x3D, offset: 0xDB5AF, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0xCF260, symSize: 0x5A0 } - - { offsetInCU: 0x61, offset: 0xDB5D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_decrypt, symObjAddr: 0x5A0, symBinAddr: 0xCF800, symSize: 0x140 } - - { offsetInCU: 0x63, offset: 0xDB5D5, size: 0x8, addend: 0x0, symName: _aesni_ctr32_6x, symObjAddr: 0x6E0, symBinAddr: 0xCF940, symSize: 0x180 } - - { offsetInCU: 0x8D, offset: 0xDB5FF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_encrypt, symObjAddr: 0x860, symBinAddr: 0xCFAC0, symSize: 0x423 } - - { offsetInCU: 0x10, offset: 0xDB5FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xCFF00, symSize: 0x260 } - - { offsetInCU: 0x48, offset: 0xDB632, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xCFF00, symSize: 0x260 } - - { offsetInCU: 0x5F, offset: 0xDB649, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x260, symBinAddr: 0xD0160, symSize: 0xC0 } - - { offsetInCU: 0x75, offset: 0xDB65F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x320, symBinAddr: 0xD0220, symSize: 0x660 } - - { offsetInCU: 0x88, offset: 0xDB672, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_avx, symObjAddr: 0x980, symBinAddr: 0xD0880, symSize: 0x1A0 } - - { offsetInCU: 0x9F, offset: 0xDB689, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_avx, symObjAddr: 0xB20, symBinAddr: 0xD0A20, symSize: 0x697 } - - { offsetInCU: 0x10, offset: 0xDB688, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xD10C0, symSize: 0x1240 } - - { offsetInCU: 0x51, offset: 0xDB6C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xD10C0, symSize: 0x1240 } - - { offsetInCU: 0x5A, offset: 0xDB6D2, size: 0x8, addend: 0x0, symName: sha512_block_data_order_avx, symObjAddr: 0x1240, symBinAddr: 0xD2300, symSize: 0x1176 } - - { offsetInCU: 0x10, offset: 0xDB6D4, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0xD3480, symSize: 0x200 } - - { offsetInCU: 0x44, offset: 0xDB708, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0xD3480, symSize: 0x200 } - - { offsetInCU: 0x66, offset: 0xDB72A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x200, symBinAddr: 0xD3680, symSize: 0x21C0 } - - { offsetInCU: 0x7C, offset: 0xDB740, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x23C0, symBinAddr: 0xD5840, symSize: 0x1D2D } - - { offsetInCU: 0x83, offset: 0xDB747, size: 0x8, addend: 0x0, symName: process_extra_in_trailer, symObjAddr: 0x40ED, symBinAddr: 0xD756D, symSize: 0x553 } - - { offsetInCU: 0x9C, offset: 0xDB760, size: 0x8, addend: 0x0, symName: chacha20_poly1305_open_avx2, symObjAddr: 0x4640, symBinAddr: 0xD7AC0, symSize: 0x25C0 } - - { offsetInCU: 0xB2, offset: 0xDB776, size: 0x8, addend: 0x0, symName: chacha20_poly1305_seal_avx2, symObjAddr: 0x6C00, symBinAddr: 0xDA080, symSize: 0x2F01 } - - { offsetInCU: 0x10, offset: 0xDB778, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xDCFC0, symSize: 0x1200 } - - { offsetInCU: 0x51, offset: 0xDB7B9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xDCFC0, symSize: 0x1200 } - - { offsetInCU: 0x5D, offset: 0xDB7C5, size: 0x8, addend: 0x0, symName: sha256_block_data_order_shaext, symObjAddr: 0x1200, symBinAddr: 0xDE1C0, symSize: 0x340 } - - { offsetInCU: 0x72, offset: 0xDB7DA, size: 0x8, addend: 0x0, symName: sha256_block_data_order_ssse3, symObjAddr: 0x1540, symBinAddr: 0xDE500, symSize: 0xEC0 } - - { offsetInCU: 0x86, offset: 0xDB7EE, size: 0x8, addend: 0x0, symName: sha256_block_data_order_avx, symObjAddr: 0x2400, symBinAddr: 0xDF3C0, symSize: 0xEF7 } + - { offsetInCU: 0x34, offset: 0xAB77E, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionString, symObjAddr: 0x0, symBinAddr: 0x55B000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xAB7B3, size: 0x8, addend: 0x0, symName: _CanvasSVGVersionNumber, symObjAddr: 0x30, symBinAddr: 0x55B030, symSize: 0x0 } + - { offsetInCU: 0x27, offset: 0xAB7F0, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x1980, symSize: 0xC5 } + - { offsetInCU: 0x66, offset: 0xAB82F, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromString:size:width:height:svg:]', symObjAddr: 0x0, symBinAddr: 0x1980, symSize: 0xC5 } + - { offsetInCU: 0x1D9, offset: 0xAB9A2, size: 0x8, addend: 0x0, symName: '+[CanvasSVGHelper drawFromPath:size:width:height:path:]', symObjAddr: 0xC5, symBinAddr: 0x1A45, symSize: 0xC5 } + - { offsetInCU: 0x65, offset: 0xABB7F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvgTo', symObjAddr: 0x0, symBinAddr: 0x1B10, symSize: 0x20 } + - { offsetInCU: 0xBB, offset: 0xABBD5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8data_ptrSvSgvsTo', symObjAddr: 0x20, symBinAddr: 0x1B30, symSize: 0x20 } + - { offsetInCU: 0x114, offset: 0xABC2E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvgTo', symObjAddr: 0x40, symBinAddr: 0x1B50, symSize: 0x20 } + - { offsetInCU: 0x16A, offset: 0xABC84, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC9data_sizeSo6CGSizeVvsTo', symObjAddr: 0x60, symBinAddr: 0x1B70, symSize: 0x20 } + - { offsetInCU: 0x1C5, offset: 0xABCDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvgTo', symObjAddr: 0x80, symBinAddr: 0x1B90, symSize: 0x20 } + - { offsetInCU: 0x21B, offset: 0xABD35, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8buf_sizeSuvsTo', symObjAddr: 0xA0, symBinAddr: 0x1BB0, symSize: 0x20 } + - { offsetInCU: 0x274, offset: 0xABD8E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvgTo', symObjAddr: 0xC0, symBinAddr: 0x1BD0, symSize: 0x20 } + - { offsetInCU: 0x2CC, offset: 0xABDE6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC05data_D0So13NSMutableDataCSgvsTo', symObjAddr: 0xE0, symBinAddr: 0x1BF0, symSize: 0x30 } + - { offsetInCU: 0x325, offset: 0xABE3F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x110, symBinAddr: 0x1C20, symSize: 0x20 } + - { offsetInCU: 0x378, offset: 0xABE92, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvgTo', symObjAddr: 0x130, symBinAddr: 0x1C40, symSize: 0x20 } + - { offsetInCU: 0x3D0, offset: 0xABEEA, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5imageSo7UIImageCSgvsTo', symObjAddr: 0x150, symBinAddr: 0x1C60, symSize: 0x30 } + - { offsetInCU: 0x433, offset: 0xABF4D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x360, symBinAddr: 0x1E70, symSize: 0x40 } + - { offsetInCU: 0x465, offset: 0xABF7F, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x3A0, symBinAddr: 0x1EB0, symSize: 0x20 } + - { offsetInCU: 0x4D4, offset: 0xABFEE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x3E0, symBinAddr: 0x1EF0, symSize: 0x20 } + - { offsetInCU: 0x543, offset: 0xAC05D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvgTo', symObjAddr: 0x420, symBinAddr: 0x1F30, symSize: 0x20 } + - { offsetInCU: 0x59C, offset: 0xAC0B6, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgTo', symObjAddr: 0x460, symBinAddr: 0x1F70, symSize: 0x30 } + - { offsetInCU: 0x5E4, offset: 0xAC0FE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyFTo', symObjAddr: 0x770, symBinAddr: 0x2280, symSize: 0x30 } + - { offsetInCU: 0x62C, offset: 0xAC146, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfcTo', symObjAddr: 0x870, symBinAddr: 0x2380, symSize: 0x20 } + - { offsetInCU: 0x664, offset: 0xAC17E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCfETo', symObjAddr: 0x8B0, symBinAddr: 0x23C0, symSize: 0x50 } + - { offsetInCU: 0x6B5, offset: 0xAC1CF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvgTo', symObjAddr: 0x900, symBinAddr: 0x2410, symSize: 0x20 } + - { offsetInCU: 0x70B, offset: 0xAC225, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14didInitDrawingSbvsTo', symObjAddr: 0x920, symBinAddr: 0x2430, symSize: 0x10 } + - { offsetInCU: 0x764, offset: 0xAC27E, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvgTo', symObjAddr: 0x930, symBinAddr: 0x2440, symSize: 0x20 } + - { offsetInCU: 0x7BA, offset: 0xAC2D4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11forceResizeSbvsTo', symObjAddr: 0x950, symBinAddr: 0x2460, symSize: 0x10 } + - { offsetInCU: 0x813, offset: 0xAC32D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvgTo', symObjAddr: 0x960, symBinAddr: 0x2470, symSize: 0x20 } + - { offsetInCU: 0x869, offset: 0xAC383, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4syncSbvsTo', symObjAddr: 0x980, symBinAddr: 0x2490, symSize: 0x10 } + - { offsetInCU: 0x8C2, offset: 0xAC3DC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvgTo', symObjAddr: 0x990, symBinAddr: 0x24A0, symSize: 0x20 } + - { offsetInCU: 0x91A, offset: 0xAC434, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4dataAA10NSCSVGDataCSgvsTo', symObjAddr: 0x9B0, symBinAddr: 0x24C0, symSize: 0x30 } + - { offsetInCU: 0x973, offset: 0xAC48D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvgTo', symObjAddr: 0x9E0, symBinAddr: 0x24F0, symSize: 0x40 } + - { offsetInCU: 0x9DF, offset: 0xAC4F9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvsTo', symObjAddr: 0xA50, symBinAddr: 0x2560, symSize: 0x50 } + - { offsetInCU: 0xAD3, offset: 0xAC5ED, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC11deviceScale12CoreGraphics7CGFloatVyFTo', symObjAddr: 0x1090, symBinAddr: 0x2BA0, symSize: 0xB0 } + - { offsetInCU: 0xBAF, offset: 0xAC6C9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFTo', symObjAddr: 0x1A90, symBinAddr: 0x35A0, symSize: 0x30 } + - { offsetInCU: 0xBE1, offset: 0xAC6FB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyFTo', symObjAddr: 0x1C30, symBinAddr: 0x3740, symSize: 0x30 } + - { offsetInCU: 0xC13, offset: 0xAC72D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14layoutSubviewsyyFTo', symObjAddr: 0x1C70, symBinAddr: 0x3770, symSize: 0x30 } + - { offsetInCU: 0xC5B, offset: 0xAC775, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10colorSpaceSo07CGColorE3RefavgTo', symObjAddr: 0x1CA0, symBinAddr: 0x37A0, symSize: 0x20 } + - { offsetInCU: 0xCCF, offset: 0xAC7E9, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2040, symBinAddr: 0x3B40, symSize: 0x30 } + - { offsetInCU: 0xD06, offset: 0xAC820, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x22C0, symBinAddr: 0x3DC0, symSize: 0x30 } + - { offsetInCU: 0xD58, offset: 0xAC872, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVFTo', symObjAddr: 0x2440, symBinAddr: 0x3F40, symSize: 0x70 } + - { offsetInCU: 0xD8A, offset: 0xAC8A4, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyFTo', symObjAddr: 0x2500, symBinAddr: 0x4000, symSize: 0x30 } + - { offsetInCU: 0xDBD, offset: 0xAC8D7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyFTo', symObjAddr: 0x2570, symBinAddr: 0x4070, symSize: 0x60 } + - { offsetInCU: 0xE82, offset: 0xAC99C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9emitEventyySo9NSRunLoopC_So7NSTimerCtFZTo', symObjAddr: 0x26A0, symBinAddr: 0x41A0, symSize: 0x30 } + - { offsetInCU: 0xF78, offset: 0xACA92, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC18parseSVGDimensionsyAC10DimensionsVSSFZTf4nd_n', symObjAddr: 0x39C0, symBinAddr: 0x54C0, symSize: 0x1880 } + - { offsetInCU: 0x1E3D, offset: 0xAD957, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x5240, symBinAddr: 0x6D40, symSize: 0x140 } + - { offsetInCU: 0x1FEC, offset: 0xADB06, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x5380, symBinAddr: 0x6E80, symSize: 0x210 } + - { offsetInCU: 0x21C5, offset: 0xADCDF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZTf4nd_n', symObjAddr: 0x5590, symBinAddr: 0x7090, symSize: 0x2C0 } + - { offsetInCU: 0x23D7, offset: 0xADEF1, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTK', symObjAddr: 0xAF0, symBinAddr: 0x2600, symSize: 0x40 } + - { offsetInCU: 0x240D, offset: 0xADF27, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvpACTk', symObjAddr: 0xB30, symBinAddr: 0x2640, symSize: 0x50 } + - { offsetInCU: 0x24A3, offset: 0xADFBD, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x2990, symBinAddr: 0x4490, symSize: 0x50 } + - { offsetInCU: 0x24BB, offset: 0xADFD5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCfETo', symObjAddr: 0x33C0, symBinAddr: 0x4EC0, symSize: 0x80 } + - { offsetInCU: 0x24EA, offset: 0xAE004, size: 0x8, addend: 0x0, symName: '_$sSvSiIegyy_SvSiIeyByy_TR', symObjAddr: 0x3440, symBinAddr: 0x4F40, symSize: 0x40 } + - { offsetInCU: 0x2527, offset: 0xAE041, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSS_Tgm5', symObjAddr: 0x3550, symBinAddr: 0x5050, symSize: 0x80 } + - { offsetInCU: 0x267B, offset: 0xAE195, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x38D0, symBinAddr: 0x53D0, symSize: 0x20 } + - { offsetInCU: 0x268F, offset: 0xAE1A9, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x38F0, symBinAddr: 0x53F0, symSize: 0x10 } + - { offsetInCU: 0x26A3, offset: 0xAE1BD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCMa', symObjAddr: 0x3900, symBinAddr: 0x5400, symSize: 0x20 } + - { offsetInCU: 0x26B7, offset: 0xAE1D1, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x3920, symBinAddr: 0x5420, symSize: 0x40 } + - { offsetInCU: 0x26CB, offset: 0xAE1E5, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGCMa', symObjAddr: 0x39A0, symBinAddr: 0x54A0, symSize: 0x20 } + - { offsetInCU: 0x29F0, offset: 0xAE50A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5890, symBinAddr: 0x7390, symSize: 0x360 } + - { offsetInCU: 0x2C0C, offset: 0xAE726, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x5C70, symBinAddr: 0x7770, symSize: 0x480 } + - { offsetInCU: 0x2EB2, offset: 0xAE9CC, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_TA', symObjAddr: 0x6140, symBinAddr: 0x7C40, symSize: 0x20 } + - { offsetInCU: 0x2EC6, offset: 0xAE9E0, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x63E0, symBinAddr: 0x7EE0, symSize: 0x10 } + - { offsetInCU: 0x2EDA, offset: 0xAE9F4, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x63F0, symBinAddr: 0x7EF0, symSize: 0x10 } + - { offsetInCU: 0x2EEE, offset: 0xAEA08, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x6400, symBinAddr: 0x7F00, symSize: 0x20 } + - { offsetInCU: 0x2F02, offset: 0xAEA1C, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x6420, symBinAddr: 0x7F20, symSize: 0x30 } + - { offsetInCU: 0x2F21, offset: 0xAEA3B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCSgIeyBy_ADIegg_TRTA', symObjAddr: 0x64C0, symBinAddr: 0x7FC0, symSize: 0x20 } + - { offsetInCU: 0x2F4A, offset: 0xAEA64, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU_TA', symObjAddr: 0x6500, symBinAddr: 0x8000, symSize: 0x20 } + - { offsetInCU: 0x2F7E, offset: 0xAEA98, size: 0x8, addend: 0x0, symName: '_$s10Foundation3URLVSgWOh', symObjAddr: 0x6520, symBinAddr: 0x8020, symSize: 0x30 } + - { offsetInCU: 0x2F92, offset: 0xAEAAC, size: 0x8, addend: 0x0, symName: '_$sS2SSysWl', symObjAddr: 0x65A0, symBinAddr: 0x80A0, symSize: 0x30 } + - { offsetInCU: 0x2FA6, offset: 0xAEAC0, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_ySo7NSTimerCYbcfU0_Tf2nni_nTA', symObjAddr: 0x6650, symBinAddr: 0x8150, symSize: 0x20 } + - { offsetInCU: 0x2FE3, offset: 0xAEAFD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_TA', symObjAddr: 0x6690, symBinAddr: 0x8190, symSize: 0x10 } + - { offsetInCU: 0x37E3, offset: 0xAF2FD, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6resizeyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x180, symBinAddr: 0x1C90, symSize: 0x1E0 } + - { offsetInCU: 0x39F3, offset: 0xAF50D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg', symObjAddr: 0x3C0, symBinAddr: 0x1ED0, symSize: 0x20 } + - { offsetInCU: 0x3A42, offset: 0xAF55C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg', symObjAddr: 0x400, symBinAddr: 0x1F10, symSize: 0x20 } + - { offsetInCU: 0x3A91, offset: 0xAF5AB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg', symObjAddr: 0x440, symBinAddr: 0x1F50, symSize: 0x20 } + - { offsetInCU: 0x3AE7, offset: 0xAF601, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg', symObjAddr: 0x490, symBinAddr: 0x1FA0, symSize: 0x130 } + - { offsetInCU: 0x3C0E, offset: 0xAF728, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvgySv_SitcfU_Tf4nnd_n', symObjAddr: 0x38C0, symBinAddr: 0x53C0, symSize: 0x10 } + - { offsetInCU: 0x3C42, offset: 0xAF75C, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF', symObjAddr: 0x5C0, symBinAddr: 0x20D0, symSize: 0x1B0 } + - { offsetInCU: 0x3E6A, offset: 0xAF984, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfC', symObjAddr: 0x7A0, symBinAddr: 0x22B0, symSize: 0x20 } + - { offsetInCU: 0x3E7E, offset: 0xAF998, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG10NSCSVGDataCACycfc', symObjAddr: 0x7C0, symBinAddr: 0x22D0, symSize: 0xB0 } + - { offsetInCU: 0x3F94, offset: 0xAFAAE, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvg', symObjAddr: 0xA20, symBinAddr: 0x2530, symSize: 0x30 } + - { offsetInCU: 0x3FE5, offset: 0xAFAFF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvs', symObjAddr: 0xAA0, symBinAddr: 0x25B0, symSize: 0x50 } + - { offsetInCU: 0x4057, offset: 0xAFB71, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM', symObjAddr: 0xB80, symBinAddr: 0x2690, symSize: 0x40 } + - { offsetInCU: 0x407C, offset: 0xAFB96, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC9autoScaleSbvM.resume.0', symObjAddr: 0xBC0, symBinAddr: 0x26D0, symSize: 0x30 } + - { offsetInCU: 0x40EB, offset: 0xAFC05, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC3srcSSSgvM', symObjAddr: 0xCB0, symBinAddr: 0x27C0, symSize: 0x40 } + - { offsetInCU: 0x4110, offset: 0xAFC2A, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7srcPathSSSgvM', symObjAddr: 0x1010, symBinAddr: 0x2B20, symSize: 0x40 } + - { offsetInCU: 0x42AD, offset: 0xAFDC7, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyF', symObjAddr: 0x1140, symBinAddr: 0x2C50, symSize: 0x460 } + - { offsetInCU: 0x464F, offset: 0xB0169, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6doDrawyyFyycfU_', symObjAddr: 0x15A0, symBinAddr: 0x30B0, symSize: 0x4E0 } + - { offsetInCU: 0x491A, offset: 0xB0434, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6updateyyF', symObjAddr: 0x1AC0, symBinAddr: 0x35D0, symSize: 0x170 } + - { offsetInCU: 0x4A91, offset: 0xB05AB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfC', symObjAddr: 0x1CC0, symBinAddr: 0x37C0, symSize: 0x80 } + - { offsetInCU: 0x4AA5, offset: 0xB05BF, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5frameACSo6CGRectV_tcfc', symObjAddr: 0x1D40, symBinAddr: 0x3840, symSize: 0x300 } + - { offsetInCU: 0x4B21, offset: 0xB063B, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x2070, symBinAddr: 0x3B70, symSize: 0x250 } + - { offsetInCU: 0x4BE1, offset: 0xB06FB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC4drawyySo6CGRectVF', symObjAddr: 0x22F0, symBinAddr: 0x3DF0, symSize: 0x150 } + - { offsetInCU: 0x4D77, offset: 0xB0891, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC7toImageSo7UIImageCSgyF', symObjAddr: 0x24B0, symBinAddr: 0x3FB0, symSize: 0x50 } + - { offsetInCU: 0x4DD8, offset: 0xB08F2, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC6toDataSo6NSDataCSgyF', symObjAddr: 0x2530, symBinAddr: 0x4030, symSize: 0x40 } + - { offsetInCU: 0x4E2B, offset: 0xB0945, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x25D0, symBinAddr: 0x40D0, symSize: 0x10 } + - { offsetInCU: 0x4E3F, offset: 0xB0959, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x2600, symBinAddr: 0x4100, symSize: 0x10 } + - { offsetInCU: 0x4E53, offset: 0xB096D, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ', symObjAddr: 0x2630, symBinAddr: 0x4130, symSize: 0x10 } + - { offsetInCU: 0x4EB1, offset: 0xB09CB, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ', symObjAddr: 0x26D0, symBinAddr: 0x41D0, symSize: 0x2C0 } + - { offsetInCU: 0x5028, offset: 0xB0B42, size: 0x8, addend: 0x0, symName: '_$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZyyYbcfU_', symObjAddr: 0x2E40, symBinAddr: 0x4940, symSize: 0x500 } + - { offsetInCU: 0x5202, offset: 0xB0D1C, size: 0x8, addend: 0x0, symName: '_$sSo19NSRegularExpressionC7pattern7optionsABSS_So0aB7OptionsVtKcfcTO', symObjAddr: 0x3480, symBinAddr: 0x4F80, symSize: 0xD0 } + - { offsetInCU: 0x5245, offset: 0xB0D5F, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo20NSTextCheckingResultC_Tg5', symObjAddr: 0x35D0, symBinAddr: 0x50D0, symSize: 0x220 } + - { offsetInCU: 0x52B6, offset: 0xB0DD0, size: 0x8, addend: 0x0, symName: '_$ss15ContiguousArrayV16_createNewBuffer14bufferIsUnique15minimumCapacity13growForAppendySb_SiSbtFSS_Tg5', symObjAddr: 0x37F0, symBinAddr: 0x52F0, symSize: 0x20 } + - { offsetInCU: 0x52ED, offset: 0xB0E07, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFSS_Tg5', symObjAddr: 0x3810, symBinAddr: 0x5310, symSize: 0xB0 } + - { offsetInCU: 0x26, offset: 0xB1185, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xC8700, symSize: 0x3990 } + - { offsetInCU: 0x40, offset: 0xB119F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0xEEC0, symBinAddr: 0x595ED0, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0xB11F1, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0x14EC0, symBinAddr: 0x59BED0, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0xB1255, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0x14EE8, symBinAddr: 0x59BEF8, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0xB126B, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x152F0, symBinAddr: 0x59C300, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0xB1282, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0x14F30, symBinAddr: 0x59BF40, symSize: 0x0 } + - { offsetInCU: 0xE22, offset: 0xB1F81, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0xC8700, symSize: 0x3990 } + - { offsetInCU: 0x4DAE, offset: 0xB5F0D, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0xE6E0, symBinAddr: 0xD6DE0, symSize: 0x3E0 } + - { offsetInCU: 0x4FF1, offset: 0xB6150, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x7C20, symBinAddr: 0xD0320, symSize: 0x270 } + - { offsetInCU: 0x582C, offset: 0xB698B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x3990, symBinAddr: 0xCC090, symSize: 0xA10 } + - { offsetInCU: 0x684B, offset: 0xB79AA, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x43A0, symBinAddr: 0xCCAA0, symSize: 0xA10 } + - { offsetInCU: 0x6EE9, offset: 0xB8048, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x4DB0, symBinAddr: 0xCD4B0, symSize: 0x2B0 } + - { offsetInCU: 0x74BC, offset: 0xB861B, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x5060, symBinAddr: 0xCD760, symSize: 0xCD0 } + - { offsetInCU: 0x83FE, offset: 0xB955D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x5D30, symBinAddr: 0xCE430, symSize: 0xB40 } + - { offsetInCU: 0x8F67, offset: 0xBA0C6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x6870, symBinAddr: 0xCEF70, symSize: 0x13B0 } + - { offsetInCU: 0xA567, offset: 0xBB6C6, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x7FF0, symBinAddr: 0xD06F0, symSize: 0x2A30 } + - { offsetInCU: 0xDC6D, offset: 0xBEDCC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x7E90, symBinAddr: 0xD0590, symSize: 0x160 } + - { offsetInCU: 0xDEE7, offset: 0xBF046, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0xAA20, symBinAddr: 0xD3120, symSize: 0x30 } + - { offsetInCU: 0xDFDC, offset: 0xBF13B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0xAA50, symBinAddr: 0xD3150, symSize: 0x50 } + - { offsetInCU: 0xE051, offset: 0xBF1B0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0xAAA0, symBinAddr: 0xD31A0, symSize: 0x10 } + - { offsetInCU: 0xE0EC, offset: 0xBF24B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0xAAB0, symBinAddr: 0xD31B0, symSize: 0xB0 } + - { offsetInCU: 0xE217, offset: 0xBF376, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0xAB60, symBinAddr: 0xD3260, symSize: 0x10 } + - { offsetInCU: 0xE4E9, offset: 0xBF648, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0xAB70, symBinAddr: 0xD3270, symSize: 0x21A0 } + - { offsetInCU: 0x1118F, offset: 0xC22EE, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0xEAC0, symBinAddr: 0xD71C0, symSize: 0x2D1 } + - { offsetInCU: 0x117CF, offset: 0xC292E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0xCD10, symBinAddr: 0xD5410, symSize: 0x20 } + - { offsetInCU: 0x11C6C, offset: 0xC2DCB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0xCD30, symBinAddr: 0xD5430, symSize: 0x19B0 } + - { offsetInCU: 0x26, offset: 0xC3E7B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xD74A0, symSize: 0x800 } + - { offsetInCU: 0x41, offset: 0xC3E96, size: 0x8, addend: 0x0, symName: _aes_nohw_rcon, symObjAddr: 0x1B10, symBinAddr: 0x59C3E0, symSize: 0x0 } + - { offsetInCU: 0x484, offset: 0xC42D9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0xD74A0, symSize: 0x800 } + - { offsetInCU: 0x1B2B, offset: 0xC5980, size: 0x8, addend: 0x0, symName: _aes_nohw_sub_bytes, symObjAddr: 0x15F0, symBinAddr: 0xD8A90, symSize: 0x300 } + - { offsetInCU: 0x32EE, offset: 0xC7143, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_encrypt, symObjAddr: 0x800, symBinAddr: 0xD7CA0, symSize: 0x80 } + - { offsetInCU: 0x33DC, offset: 0xC7231, size: 0x8, addend: 0x0, symName: _aes_nohw_expand_round_keys, symObjAddr: 0x880, symBinAddr: 0xD7D20, symSize: 0x1A0 } + - { offsetInCU: 0x386D, offset: 0xC76C2, size: 0x8, addend: 0x0, symName: _aes_nohw_to_batch, symObjAddr: 0xA20, symBinAddr: 0xD7EC0, symSize: 0x420 } + - { offsetInCU: 0x3D7D, offset: 0xC7BD2, size: 0x8, addend: 0x0, symName: _aes_nohw_encrypt_batch, symObjAddr: 0xE40, symBinAddr: 0xD82E0, symSize: 0x380 } + - { offsetInCU: 0x424C, offset: 0xC80A1, size: 0x8, addend: 0x0, symName: _aes_nohw_from_batch, symObjAddr: 0x11C0, symBinAddr: 0xD8660, symSize: 0x250 } + - { offsetInCU: 0x498D, offset: 0xC87E2, size: 0x8, addend: 0x0, symName: _aes_nohw_shift_rows, symObjAddr: 0x18F0, symBinAddr: 0xD8D90, symSize: 0x149 } + - { offsetInCU: 0x4BF9, offset: 0xC8A4E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_ctr32_encrypt_blocks, symObjAddr: 0x1410, symBinAddr: 0xD88B0, symSize: 0x1E0 } + - { offsetInCU: 0x26, offset: 0xC8E6F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xD8EE0, symSize: 0x2DC } + - { offsetInCU: 0x1D2, offset: 0xC901B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0xD8EE0, symSize: 0x2DC } + - { offsetInCU: 0x26, offset: 0xC9274, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xD91C0, symSize: 0x87 } + - { offsetInCU: 0x34, offset: 0xC9282, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0xD91C0, symSize: 0x87 } + - { offsetInCU: 0x26, offset: 0xC9392, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xD9250, symSize: 0x46 } + - { offsetInCU: 0x34, offset: 0xC93A0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0xD9250, symSize: 0x46 } + - { offsetInCU: 0x86, offset: 0xC9503, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x15F0, symBinAddr: 0x59C460, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0xC9535, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1580, symBinAddr: 0x59C3F0, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0xC9557, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x15B0, symBinAddr: 0x59C420, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0xC956D, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x15E0, symBinAddr: 0x59C450, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0xC9834, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x150, symBinAddr: 0xD92A0, symSize: 0x20 } + - { offsetInCU: 0x594, offset: 0xC9A11, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x250, symBinAddr: 0xD92C0, symSize: 0x20 } + - { offsetInCU: 0x63F, offset: 0xC9ABC, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x340, symBinAddr: 0xD92E0, symSize: 0x3A0 } + - { offsetInCU: 0x11A7, offset: 0xCA624, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x6E0, symBinAddr: 0xD9680, symSize: 0x140 } + - { offsetInCU: 0x14A2, offset: 0xCA91F, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x820, symBinAddr: 0xD97C0, symSize: 0x6B0 } + - { offsetInCU: 0x26DA, offset: 0xCBB57, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xED0, symBinAddr: 0xD9E70, symSize: 0x380 } + - { offsetInCU: 0x2D37, offset: 0xCC1B4, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0x1250, symBinAddr: 0xDA1F0, symSize: 0x170 } + - { offsetInCU: 0x2F2F, offset: 0xCC3AC, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0x13C0, symBinAddr: 0xDA360, symSize: 0x1BF } + - { offsetInCU: 0x26, offset: 0xCC6F7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xDA520, symSize: 0x50 } + - { offsetInCU: 0xFA, offset: 0xCC7CB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0xDA520, symSize: 0x50 } + - { offsetInCU: 0x18D, offset: 0xCC85E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x50, symBinAddr: 0xDA570, symSize: 0x60 } + - { offsetInCU: 0x2F1, offset: 0xCC9C2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0xB0, symBinAddr: 0xDA5D0, symSize: 0x90 } + - { offsetInCU: 0x4C6, offset: 0xCCB97, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0x140, symBinAddr: 0xDA660, symSize: 0x20 } + - { offsetInCU: 0x5E3, offset: 0xCCCB4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0x160, symBinAddr: 0xDA680, symSize: 0xB0 } + - { offsetInCU: 0x696, offset: 0xCCD67, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x210, symBinAddr: 0xDA730, symSize: 0x70 } + - { offsetInCU: 0x861, offset: 0xCCF32, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x280, symBinAddr: 0xDA7A0, symSize: 0x170 } + - { offsetInCU: 0xB67, offset: 0xCD238, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x3F0, symBinAddr: 0xDA910, symSize: 0x270 } + - { offsetInCU: 0xE6A, offset: 0xCD53B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x660, symBinAddr: 0xDAB80, symSize: 0x1A0 } + - { offsetInCU: 0x105D, offset: 0xCD72E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x800, symBinAddr: 0xDAD20, symSize: 0x280 } + - { offsetInCU: 0x128C, offset: 0xCD95D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0xC20, symBinAddr: 0xDAFA0, symSize: 0x20 } + - { offsetInCU: 0x12F3, offset: 0xCD9C4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0xC40, symBinAddr: 0xDAFC0, symSize: 0x20 } + - { offsetInCU: 0x132A, offset: 0xCD9FB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0xC60, symBinAddr: 0xDAFE0, symSize: 0x10 } + - { offsetInCU: 0x13AC, offset: 0xCDA7D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0xC70, symBinAddr: 0xDAFF0, symSize: 0x4A } + - { offsetInCU: 0x26, offset: 0xCDC09, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xDB040, symSize: 0x129 } + - { offsetInCU: 0x34, offset: 0xCDC17, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0xDB040, symSize: 0x129 } + - { offsetInCU: 0x34, offset: 0xCDD19, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_ia32cap_P, symObjAddr: 0x3F0, symBinAddr: 0xC946E0, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xCDD6E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0xDB170, symSize: 0xF8 } + - { offsetInCU: 0xD5, offset: 0xCDE1D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0xDB170, symSize: 0xF8 } + - { offsetInCU: 0x26, offset: 0xCDF72, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0xDB270, symSize: 0x1210 } + - { offsetInCU: 0x92E, offset: 0xCE87A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0xDB270, symSize: 0x1210 } + - { offsetInCU: 0x5347, offset: 0xD3293, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base_adx, symObjAddr: 0x1210, symBinAddr: 0xDC480, symSize: 0x1E50 } + - { offsetInCU: 0x9B2F, offset: 0xD7A7B, size: 0x8, addend: 0x0, symName: _inline_x25519_ge_dbl_4, symObjAddr: 0x3060, symBinAddr: 0xDE2D0, symSize: 0x361 } + - { offsetInCU: 0x26, offset: 0xD8E68, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0xDE640, symSize: 0xD0 } + - { offsetInCU: 0x303, offset: 0xD9145, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0xDE640, symSize: 0xD0 } + - { offsetInCU: 0x5A4, offset: 0xD93E6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_update, symObjAddr: 0xD0, symBinAddr: 0xDE710, symSize: 0x1C0 } + - { offsetInCU: 0x764, offset: 0xD95A6, size: 0x8, addend: 0x0, symName: _poly1305_blocks, symObjAddr: 0x5F0, symBinAddr: 0xDEC30, symSize: 0x780 } + - { offsetInCU: 0x903, offset: 0xD9745, size: 0x8, addend: 0x0, symName: _poly1305_first_block, symObjAddr: 0x290, symBinAddr: 0xDE8D0, symSize: 0x360 } + - { offsetInCU: 0xEFC, offset: 0xD9D3E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_finish, symObjAddr: 0xD70, symBinAddr: 0xDF3B0, symSize: 0xAA2 } + - { offsetInCU: 0x10, offset: 0xDA4C7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0xDFE52, symSize: 0x2AF } + - { offsetInCU: 0x51, offset: 0xDA508, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0xDFE52, symSize: 0x2AF } + - { offsetInCU: 0x10, offset: 0xDA4FD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0xE0101, symSize: 0x1F4 } + - { offsetInCU: 0x54, offset: 0xDA541, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0xE0101, symSize: 0x1F4 } + - { offsetInCU: 0x26, offset: 0xDA549, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xE0300, symSize: 0x490 } + - { offsetInCU: 0x76, offset: 0xDA599, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x59D000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xDA61D, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x5C2000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xDA87E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0xE0300, symSize: 0x490 } + - { offsetInCU: 0xC5A, offset: 0xDB17D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x490, symBinAddr: 0xE0790, symSize: 0x300 } + - { offsetInCU: 0x1135, offset: 0xDB658, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x790, symBinAddr: 0xE0A90, symSize: 0x25D } + - { offsetInCU: 0x10, offset: 0xDBA1D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xE0D00, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xDBA55, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0xE0D00, symSize: 0x3A0 } + - { offsetInCU: 0x4D, offset: 0xDBA5A, size: 0x8, addend: 0x0, symName: ChaCha20_ssse3, symObjAddr: 0x3A0, symBinAddr: 0xE10A0, symSize: 0x220 } + - { offsetInCU: 0x60, offset: 0xDBA6D, size: 0x8, addend: 0x0, symName: ChaCha20_4x, symObjAddr: 0x5C0, symBinAddr: 0xE12C0, symSize: 0xA20 } + - { offsetInCU: 0x76, offset: 0xDBA83, size: 0x8, addend: 0x0, symName: ChaCha20_8x, symObjAddr: 0xFE0, symBinAddr: 0xE1CE0, symSize: 0xB4C } + - { offsetInCU: 0x10, offset: 0xDBA95, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0xE2840, symSize: 0x40 } + - { offsetInCU: 0x48, offset: 0xDBACD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0xE2840, symSize: 0x40 } + - { offsetInCU: 0x4D, offset: 0xDBAD2, size: 0x8, addend: 0x0, symName: _aesni_encrypt2, symObjAddr: 0x40, symBinAddr: 0xE2880, symSize: 0x60 } + - { offsetInCU: 0x63, offset: 0xDBAE8, size: 0x8, addend: 0x0, symName: _aesni_encrypt3, symObjAddr: 0xA0, symBinAddr: 0xE28E0, symSize: 0x70 } + - { offsetInCU: 0x79, offset: 0xDBAFE, size: 0x8, addend: 0x0, symName: _aesni_encrypt4, symObjAddr: 0x110, symBinAddr: 0xE2950, symSize: 0x90 } + - { offsetInCU: 0x8F, offset: 0xDBB14, size: 0x8, addend: 0x0, symName: _aesni_encrypt6, symObjAddr: 0x1A0, symBinAddr: 0xE29E0, symSize: 0xE0 } + - { offsetInCU: 0xA5, offset: 0xDBB2A, size: 0x8, addend: 0x0, symName: _aesni_encrypt8, symObjAddr: 0x280, symBinAddr: 0xE2AC0, symSize: 0x110 } + - { offsetInCU: 0xD9, offset: 0xDBB5E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x390, symBinAddr: 0xE2BD0, symSize: 0x940 } + - { offsetInCU: 0xEA, offset: 0xDBB6F, size: 0x8, addend: 0x0, symName: __aesni_set_encrypt_key, symObjAddr: 0xCD0, symBinAddr: 0xE3510, symSize: 0x44D } + - { offsetInCU: 0x10, offset: 0xDBB65, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0xE3960, symSize: 0x160 } + - { offsetInCU: 0x3B, offset: 0xDBB90, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0xE3960, symSize: 0x160 } + - { offsetInCU: 0x54, offset: 0xDBBA9, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core_2x, symObjAddr: 0x160, symBinAddr: 0xE3AC0, symSize: 0x290 } + - { offsetInCU: 0x68, offset: 0xDBBBD, size: 0x8, addend: 0x0, symName: _vpaes_schedule_core, symObjAddr: 0x3F0, symBinAddr: 0xE3D50, symSize: 0xF0 } + - { offsetInCU: 0x7F, offset: 0xDBBD4, size: 0x8, addend: 0x0, symName: _vpaes_schedule_round, symObjAddr: 0x4E0, symBinAddr: 0xE3E40, symSize: 0x21 } + - { offsetInCU: 0x99, offset: 0xDBBEE, size: 0x8, addend: 0x0, symName: _vpaes_schedule_low_round, symObjAddr: 0x501, symBinAddr: 0xE3E61, symSize: 0x9F } + - { offsetInCU: 0xAF, offset: 0xDBC04, size: 0x8, addend: 0x0, symName: _vpaes_schedule_transform, symObjAddr: 0x5A0, symBinAddr: 0xE3F00, symSize: 0x30 } + - { offsetInCU: 0xC2, offset: 0xDBC17, size: 0x8, addend: 0x0, symName: _vpaes_schedule_mangle, symObjAddr: 0x5D0, symBinAddr: 0xE3F30, symSize: 0x50 } + - { offsetInCU: 0xE9, offset: 0xDBC3E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_set_encrypt_key, symObjAddr: 0x620, symBinAddr: 0xE3F80, symSize: 0x30 } + - { offsetInCU: 0xF7, offset: 0xDBC4C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_encrypt, symObjAddr: 0x650, symBinAddr: 0xE3FB0, symSize: 0x20 } + - { offsetInCU: 0x11A, offset: 0xDBC6F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_ctr32_encrypt_blocks, symObjAddr: 0x670, symBinAddr: 0xE3FD0, symSize: 0xD0 } + - { offsetInCU: 0x112, offset: 0xDBC67, size: 0x8, addend: 0x0, symName: _vpaes_preheat, symObjAddr: 0x740, symBinAddr: 0xE40A0, symSize: 0x31 } + - { offsetInCU: 0x10, offset: 0xDBC77, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xE40E0, symSize: 0x2A0 } + - { offsetInCU: 0x45, offset: 0xDBCAC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0xE40E0, symSize: 0x2A0 } + - { offsetInCU: 0x4C, offset: 0xDBCB3, size: 0x8, addend: 0x0, symName: bn_mul4x_mont, symObjAddr: 0x2A0, symBinAddr: 0xE4380, symSize: 0x560 } + - { offsetInCU: 0x62, offset: 0xDBCC9, size: 0x8, addend: 0x0, symName: bn_sqr8x_mont, symObjAddr: 0x800, symBinAddr: 0xE48E0, symSize: 0x220 } + - { offsetInCU: 0x79, offset: 0xDBCE0, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont, symObjAddr: 0xA20, symBinAddr: 0xE4B00, symSize: 0x570 } + - { offsetInCU: 0x10, offset: 0xDBCEF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0xE5080, symSize: 0x660 } + - { offsetInCU: 0x4D, offset: 0xDBD2C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0xE5080, symSize: 0x660 } + - { offsetInCU: 0x54, offset: 0xDBD33, size: 0x8, addend: 0x0, symName: bn_mul4x_mont_gather5, symObjAddr: 0x660, symBinAddr: 0xE56E0, symSize: 0x100 } + - { offsetInCU: 0x63, offset: 0xDBD42, size: 0x8, addend: 0x0, symName: mul4x_internal, symObjAddr: 0x760, symBinAddr: 0xE57E0, symSize: 0x7E0 } + - { offsetInCU: 0x85, offset: 0xDBD64, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_power5, symObjAddr: 0xF40, symBinAddr: 0xE5FC0, symSize: 0x180 } + - { offsetInCU: 0xA3, offset: 0xDBD82, size: 0x8, addend: 0x0, symName: __bn_sqr8x_internal, symObjAddr: 0x10C0, symBinAddr: 0xE6140, symSize: 0x579 } + - { offsetInCU: 0xAA, offset: 0xDBD89, size: 0x8, addend: 0x0, symName: __bn_sqr8x_reduction, symObjAddr: 0x1639, symBinAddr: 0xE66B9, symSize: 0x347 } + - { offsetInCU: 0xC0, offset: 0xDBD9F, size: 0x8, addend: 0x0, symName: __bn_post4x_internal, symObjAddr: 0x1980, symBinAddr: 0xE6A00, symSize: 0xA0 } + - { offsetInCU: 0xD9, offset: 0xDBDB8, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont_gather5, symObjAddr: 0x1A20, symBinAddr: 0xE6AA0, symSize: 0xE0 } + - { offsetInCU: 0xE8, offset: 0xDBDC7, size: 0x8, addend: 0x0, symName: mulx4x_internal, symObjAddr: 0x1B00, symBinAddr: 0xE6B80, symSize: 0x7E0 } + - { offsetInCU: 0xF9, offset: 0xDBDD8, size: 0x8, addend: 0x0, symName: bn_powerx5, symObjAddr: 0x22E0, symBinAddr: 0xE7360, symSize: 0x160 } + - { offsetInCU: 0x128, offset: 0xDBE07, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_internal, symObjAddr: 0x2440, symBinAddr: 0xE74C0, symSize: 0x637 } + - { offsetInCU: 0x12F, offset: 0xDBE0E, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_reduction, symObjAddr: 0x2A77, symBinAddr: 0xE7AF7, symSize: 0x329 } + - { offsetInCU: 0x145, offset: 0xDBE24, size: 0x8, addend: 0x0, symName: __bn_postx4x_internal, symObjAddr: 0x2DA0, symBinAddr: 0xE7E20, symSize: 0x90 } + - { offsetInCU: 0x163, offset: 0xDBE42, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_scatter5, symObjAddr: 0x2E30, symBinAddr: 0xE7EB0, symSize: 0x30 } + - { offsetInCU: 0x178, offset: 0xDBE57, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_gather5, symObjAddr: 0x2E60, symBinAddr: 0xE7EE0, symSize: 0x27F } + - { offsetInCU: 0x10, offset: 0xDBE59, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0xE8160, symSize: 0x80 } + - { offsetInCU: 0x4A, offset: 0xDBE93, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0xE8160, symSize: 0x80 } + - { offsetInCU: 0x64, offset: 0xDBEAD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0x80, symBinAddr: 0xE81E0, symSize: 0x360 } + - { offsetInCU: 0x7E, offset: 0xDBEC7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x3E0, symBinAddr: 0xE8540, symSize: 0x300 } + - { offsetInCU: 0x85, offset: 0xDBECE, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_mul_montx, symObjAddr: 0x6E0, symBinAddr: 0xE8840, symSize: 0x3C0 } + - { offsetInCU: 0x9B, offset: 0xDBEE4, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_sqr_montx, symObjAddr: 0xAA0, symBinAddr: 0xE8C00, symSize: 0x320 } + - { offsetInCU: 0xB5, offset: 0xDBEFE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0xDC0, symBinAddr: 0xE8F20, symSize: 0xA0 } + - { offsetInCU: 0xC4, offset: 0xDBF0D, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montq, symObjAddr: 0xE60, symBinAddr: 0xE8FC0, symSize: 0x240 } + - { offsetInCU: 0xE1, offset: 0xDBF2A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x10A0, symBinAddr: 0xE9200, symSize: 0x80 } + - { offsetInCU: 0xF0, offset: 0xDBF39, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montq, symObjAddr: 0x1120, symBinAddr: 0xE9280, symSize: 0x1A0 } + - { offsetInCU: 0x106, offset: 0xDBF4F, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montx, symObjAddr: 0x12C0, symBinAddr: 0xE9420, symSize: 0x260 } + - { offsetInCU: 0x11C, offset: 0xDBF65, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montx, symObjAddr: 0x1520, symBinAddr: 0xE9680, symSize: 0x1C0 } + - { offsetInCU: 0x142, offset: 0xDBF8B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x16E0, symBinAddr: 0xE9840, symSize: 0xE0 } + - { offsetInCU: 0x158, offset: 0xDBFA1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x17C0, symBinAddr: 0xE9920, symSize: 0xC0 } + - { offsetInCU: 0x162, offset: 0xDBFAB, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w5, symObjAddr: 0x1880, symBinAddr: 0xE99E0, symSize: 0xC0 } + - { offsetInCU: 0x178, offset: 0xDBFC1, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w7, symObjAddr: 0x1940, symBinAddr: 0xE9AA0, symSize: 0xE0 } + - { offsetInCU: 0x188, offset: 0xDBFD1, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_toq, symObjAddr: 0x1A20, symBinAddr: 0xE9B80, symSize: 0x60 } + - { offsetInCU: 0x1A0, offset: 0xDBFE9, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromq, symObjAddr: 0x1A80, symBinAddr: 0xE9BE0, symSize: 0x60 } + - { offsetInCU: 0x1B1, offset: 0xDBFFA, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subq, symObjAddr: 0x1AE0, symBinAddr: 0xE9C40, symSize: 0x40 } + - { offsetInCU: 0x1CC, offset: 0xDC015, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2q, symObjAddr: 0x1B20, symBinAddr: 0xE9C80, symSize: 0x60 } + - { offsetInCU: 0x1ED, offset: 0xDC036, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x1B80, symBinAddr: 0xE9CE0, symSize: 0x320 } + - { offsetInCU: 0x200, offset: 0xDC049, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x1EA0, symBinAddr: 0xEA000, symSize: 0x780 } + - { offsetInCU: 0x21D, offset: 0xDC066, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0x2620, symBinAddr: 0xEA780, symSize: 0x580 } + - { offsetInCU: 0x222, offset: 0xDC06B, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_tox, symObjAddr: 0x2BA0, symBinAddr: 0xEAD00, symSize: 0x60 } + - { offsetInCU: 0x23A, offset: 0xDC083, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromx, symObjAddr: 0x2C00, symBinAddr: 0xEAD60, symSize: 0x60 } + - { offsetInCU: 0x24B, offset: 0xDC094, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subx, symObjAddr: 0x2C60, symBinAddr: 0xEADC0, symSize: 0x60 } + - { offsetInCU: 0x266, offset: 0xDC0AF, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2x, symObjAddr: 0x2CC0, symBinAddr: 0xEAE20, symSize: 0x60 } + - { offsetInCU: 0x27F, offset: 0xDC0C8, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_doublex, symObjAddr: 0x2D20, symBinAddr: 0xEAE80, symSize: 0x320 } + - { offsetInCU: 0x292, offset: 0xDC0DB, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_addx, symObjAddr: 0x3040, symBinAddr: 0xEB1A0, symSize: 0x760 } + - { offsetInCU: 0x2AF, offset: 0xDC0F8, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_add_affinex, symObjAddr: 0x37A0, symBinAddr: 0xEB900, symSize: 0x555 } + - { offsetInCU: 0x10, offset: 0xDC0F7, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0xEBE60, symSize: 0x5A0 } + - { offsetInCU: 0x3D, offset: 0xDC124, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0xEBE60, symSize: 0x5A0 } + - { offsetInCU: 0x61, offset: 0xDC148, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_decrypt, symObjAddr: 0x5A0, symBinAddr: 0xEC400, symSize: 0x140 } + - { offsetInCU: 0x63, offset: 0xDC14A, size: 0x8, addend: 0x0, symName: _aesni_ctr32_6x, symObjAddr: 0x6E0, symBinAddr: 0xEC540, symSize: 0x180 } + - { offsetInCU: 0x8D, offset: 0xDC174, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_encrypt, symObjAddr: 0x860, symBinAddr: 0xEC6C0, symSize: 0x423 } + - { offsetInCU: 0x10, offset: 0xDC16F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xECB00, symSize: 0x260 } + - { offsetInCU: 0x48, offset: 0xDC1A7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0xECB00, symSize: 0x260 } + - { offsetInCU: 0x5F, offset: 0xDC1BE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x260, symBinAddr: 0xECD60, symSize: 0xC0 } + - { offsetInCU: 0x75, offset: 0xDC1D4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x320, symBinAddr: 0xECE20, symSize: 0x660 } + - { offsetInCU: 0x88, offset: 0xDC1E7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_avx, symObjAddr: 0x980, symBinAddr: 0xED480, symSize: 0x1A0 } + - { offsetInCU: 0x9F, offset: 0xDC1FE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_avx, symObjAddr: 0xB20, symBinAddr: 0xED620, symSize: 0x697 } + - { offsetInCU: 0x10, offset: 0xDC1FD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xEDCC0, symSize: 0x1240 } + - { offsetInCU: 0x51, offset: 0xDC23E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0xEDCC0, symSize: 0x1240 } + - { offsetInCU: 0x5A, offset: 0xDC247, size: 0x8, addend: 0x0, symName: sha512_block_data_order_avx, symObjAddr: 0x1240, symBinAddr: 0xEEF00, symSize: 0x1176 } + - { offsetInCU: 0x10, offset: 0xDC249, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0xF0080, symSize: 0x200 } + - { offsetInCU: 0x44, offset: 0xDC27D, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0xF0080, symSize: 0x200 } + - { offsetInCU: 0x66, offset: 0xDC29F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x200, symBinAddr: 0xF0280, symSize: 0x21C0 } + - { offsetInCU: 0x7C, offset: 0xDC2B5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x23C0, symBinAddr: 0xF2440, symSize: 0x1D2D } + - { offsetInCU: 0x83, offset: 0xDC2BC, size: 0x8, addend: 0x0, symName: process_extra_in_trailer, symObjAddr: 0x40ED, symBinAddr: 0xF416D, symSize: 0x553 } + - { offsetInCU: 0x9C, offset: 0xDC2D5, size: 0x8, addend: 0x0, symName: chacha20_poly1305_open_avx2, symObjAddr: 0x4640, symBinAddr: 0xF46C0, symSize: 0x25C0 } + - { offsetInCU: 0xB2, offset: 0xDC2EB, size: 0x8, addend: 0x0, symName: chacha20_poly1305_seal_avx2, symObjAddr: 0x6C00, symBinAddr: 0xF6C80, symSize: 0x2F01 } + - { offsetInCU: 0x10, offset: 0xDC2ED, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xF9BC0, symSize: 0x1200 } + - { offsetInCU: 0x51, offset: 0xDC32E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0xF9BC0, symSize: 0x1200 } + - { offsetInCU: 0x5D, offset: 0xDC33A, size: 0x8, addend: 0x0, symName: sha256_block_data_order_shaext, symObjAddr: 0x1200, symBinAddr: 0xFADC0, symSize: 0x340 } + - { offsetInCU: 0x72, offset: 0xDC34F, size: 0x8, addend: 0x0, symName: sha256_block_data_order_ssse3, symObjAddr: 0x1540, symBinAddr: 0xFB100, symSize: 0xEC0 } + - { offsetInCU: 0x86, offset: 0xDC363, size: 0x8, addend: 0x0, symName: sha256_block_data_order_avx, symObjAddr: 0x2400, symBinAddr: 0xFBFC0, symSize: 0xEF7 } ... diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/CanvasSVG b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/CanvasSVG index f22b00918..5858316e0 100755 Binary files a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/CanvasSVG and b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/CanvasSVG differ diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Headers/CanvasSVG-Swift.h b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Headers/CanvasSVG-Swift.h index d25817e77..7b83b2b47 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Headers/CanvasSVG-Swift.h +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Headers/CanvasSVG-Swift.h @@ -278,6 +278,7 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); #pragma clang diagnostic ignored "-Watimport-in-framework-header" #endif @import CoreFoundation; +@import ObjectiveC; @import UIKit; #endif @@ -303,12 +304,10 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); @class NSCoder; @class UIImage; @class NSData; +@class NSCSVGData; SWIFT_CLASS_NAMED("NSCSVG") @interface NSCSVG : UIView -@property (nonatomic, readonly) void * _Nullable data; -@property (nonatomic, readonly) CGSize data_size; -@property (nonatomic, readonly) NSUInteger buf_size; @property (nonatomic) BOOL autoScale; @property (nonatomic, copy) NSString * _Nullable src; @property (nonatomic, copy) NSString * _Nullable srcPath; @@ -319,12 +318,24 @@ SWIFT_CLASS_NAMED("NSCSVG") - (void)drawRect:(CGRect)rect; - (UIImage * _Nullable)toImage SWIFT_WARN_UNUSED_RESULT; - (NSData * _Nullable)toData SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; ++ (NSCSVGData * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; +@end + +@class NSMutableData; + +SWIFT_CLASS_NAMED("NSCSVGData") +@interface NSCSVGData : NSObject +@property (nonatomic, readonly) CGFloat width; +@property (nonatomic, readonly) CGFloat height; +@property (nonatomic, readonly) void * _Nullable rawData; +@property (nonatomic, readonly, strong) NSMutableData * _Nullable data; +- (UIImage * _Nullable)getImage SWIFT_WARN_UNUSED_RESULT; +- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; @end #endif @@ -615,6 +626,7 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); #pragma clang diagnostic ignored "-Watimport-in-framework-header" #endif @import CoreFoundation; +@import ObjectiveC; @import UIKit; #endif @@ -640,12 +652,10 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); @class NSCoder; @class UIImage; @class NSData; +@class NSCSVGData; SWIFT_CLASS_NAMED("NSCSVG") @interface NSCSVG : UIView -@property (nonatomic, readonly) void * _Nullable data; -@property (nonatomic, readonly) CGSize data_size; -@property (nonatomic, readonly) NSUInteger buf_size; @property (nonatomic) BOOL autoScale; @property (nonatomic, copy) NSString * _Nullable src; @property (nonatomic, copy) NSString * _Nullable srcPath; @@ -656,12 +666,24 @@ SWIFT_CLASS_NAMED("NSCSVG") - (void)drawRect:(CGRect)rect; - (UIImage * _Nullable)toImage SWIFT_WARN_UNUSED_RESULT; - (NSData * _Nullable)toData SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (NSCSVG * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; -+ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; -+ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVG * _Nullable))callback; ++ (NSCSVGData * _Nullable)fromStringSync:(NSString * _Nonnull)source SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromPathSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (NSCSVGData * _Nullable)fromRemoteSync:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT; ++ (void)fromString:(NSString * _Nonnull)source :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromPath:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; ++ (void)fromRemote:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSCSVGData * _Nullable))callback; +@end + +@class NSMutableData; + +SWIFT_CLASS_NAMED("NSCSVGData") +@interface NSCSVGData : NSObject +@property (nonatomic, readonly) CGFloat width; +@property (nonatomic, readonly) CGFloat height; +@property (nonatomic, readonly) void * _Nullable rawData; +@property (nonatomic, readonly, strong) NSMutableData * _Nullable data; +- (UIImage * _Nullable)getImage SWIFT_WARN_UNUSED_RESULT; +- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; @end #endif diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Headers/canvas_svg.h b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Headers/canvas_svg.h index 716ac6f05..daf7068dd 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Headers/canvas_svg.h +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Headers/canvas_svg.h @@ -8,6 +8,16 @@ #include #include +#if defined(TARGET_OS_IOS) +void canvas_native_svg_draw_from_bytes(uint8_t *data, + uintptr_t size, + float width, + float height, + float scale, + const uint8_t *svg_data, + uintptr_t svg_size); +#endif + #if defined(TARGET_OS_IOS) void canvas_native_svg_draw_from_string(uint8_t *data, uintptr_t size, diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo index 933fe5ad7..116be86ed 100644 Binary files a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo and b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo differ diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo index ddcf60a67..7297fd30a 100644 Binary files a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo and b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo differ diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json index 685da180d..d687042ca 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json @@ -21,13 +21,91 @@ }, { "kind": "TypeDecl", - "name": "NSCSVG", - "printedName": "NSCSVG", + "name": "NSCSVGData", + "printedName": "NSCSVGData", "children": [ { "kind": "Var", - "name": "data", - "printedName": "data", + "name": "width", + "printedName": "width", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "height", + "printedName": "height", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "rawData", + "printedName": "rawData", "children": [ { "kind": "TypeNominal", @@ -45,11 +123,10 @@ } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -72,10 +149,9 @@ } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } @@ -83,22 +159,29 @@ }, { "kind": "Var", - "name": "data_size", - "printedName": "data_size", + "name": "data", + "printedName": "data", "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -107,62 +190,144 @@ "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } ] }, { - "kind": "Var", - "name": "buf_size", - "printedName": "buf_size", + "kind": "Function", + "name": "getImage", + "printedName": "getImage()", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" - } - ], - "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvp", - "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, - "accessors": [ - { - "kind": "Accessor", - "name": "Get", - "printedName": "Get()", + "name": "Optional", + "printedName": "UIKit.UIImage?", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" + "name": "UIImage", + "printedName": "UIKit.UIImage", + "usr": "c:objc(cs)UIImage" } ], - "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvg", - "moduleName": "CanvasSVG", - "implicit": true, - "declAttributes": ["ObjC"], - "accessorKind": "get" + "usr": "s:Sq" } - ] + ], + "declKind": "Func", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)getImage", + "mangledName": "$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" }, + { + "kind": "Constructor", + "name": "init", + "printedName": "init()", + "children": [ + { + "kind": "TypeNominal", + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" + } + ], + "declKind": "Constructor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)init", + "mangledName": "$s9CanvasSVG10NSCSVGDataCACycfc", + "moduleName": "CanvasSVG", + "overriding": true, + "implicit": true, + "objc_name": "init", + "declAttributes": ["Dynamic", "ObjC", "Override"], + "init_kind": "Designated" + } + ], + "declKind": "Class", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC", + "moduleName": "CanvasSVG", + "objc_name": "NSCSVGData", + "declAttributes": ["AccessControl", "ObjC", "ObjCMembers"], + "superclassUsr": "c:objc(cs)NSObject", + "inheritsConvenienceInitializers": true, + "superclassNames": ["ObjectiveC.NSObject"], + "conformances": [ + { + "kind": "Conformance", + "name": "Equatable", + "printedName": "Equatable", + "usr": "s:SQ", + "mangledName": "$sSQ" + }, + { + "kind": "Conformance", + "name": "Hashable", + "printedName": "Hashable", + "usr": "s:SH", + "mangledName": "$sSH" + }, + { + "kind": "Conformance", + "name": "CVarArg", + "printedName": "CVarArg", + "usr": "s:s7CVarArgP", + "mangledName": "$ss7CVarArgP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObservingPublishing", + "printedName": "_KeyValueCodingAndObservingPublishing", + "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP", + "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObserving", + "printedName": "_KeyValueCodingAndObserving", + "usr": "s:10Foundation27_KeyValueCodingAndObservingP", + "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP" + }, + { + "kind": "Conformance", + "name": "CustomStringConvertible", + "printedName": "CustomStringConvertible", + "usr": "s:s23CustomStringConvertibleP", + "mangledName": "$ss23CustomStringConvertibleP" + }, + { + "kind": "Conformance", + "name": "CustomDebugStringConvertible", + "printedName": "CustomDebugStringConvertible", + "usr": "s:s28CustomDebugStringConvertibleP", + "mangledName": "$ss28CustomDebugStringConvertibleP" + } + ] + }, + { + "kind": "TypeDecl", + "name": "NSCSVG", + "printedName": "NSCSVG", + "children": [ { "kind": "Var", "name": "autoScale", @@ -616,13 +781,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -636,7 +801,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromStringSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -650,13 +815,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -670,7 +835,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPathSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -684,13 +849,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -704,7 +869,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemoteSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -729,7 +894,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -739,13 +904,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -755,7 +920,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromString::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -780,7 +945,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -790,13 +955,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -806,7 +971,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPath::", - "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -831,7 +996,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -841,13 +1006,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -857,7 +1022,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemote::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -947,42 +1112,42 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "IntegerLiteral", - "offset": 341, + "offset": 291, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 368, + "offset": 2331, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 396, + "offset": 2359, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 417, + "offset": 2380, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 500, + "offset": 2495, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 450, + "offset": 2445, "length": 4, "value": "true" } diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface index 9e6f991aa..2577727e7 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface index 9e6f991aa..2577727e7 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftmodule b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftmodule index e0e2a8f56..4af7a4a9b 100644 Binary files a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftmodule and b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftmodule differ diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json index 685da180d..d687042ca 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json @@ -21,13 +21,91 @@ }, { "kind": "TypeDecl", - "name": "NSCSVG", - "printedName": "NSCSVG", + "name": "NSCSVGData", + "printedName": "NSCSVGData", "children": [ { "kind": "Var", - "name": "data", - "printedName": "data", + "name": "width", + "printedName": "width", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)width", + "mangledName": "$s9CanvasSVG10NSCSVGDataC5width12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "height", + "printedName": "height", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvp", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CGFloat", + "printedName": "CoreGraphics.CGFloat", + "usr": "s:14CoreFoundation7CGFloatV" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)height", + "mangledName": "$s9CanvasSVG10NSCSVGDataC6height12CoreGraphics7CGFloatVvg", + "moduleName": "CanvasSVG", + "declAttributes": ["ObjC"], + "accessorKind": "get" + } + ] + }, + { + "kind": "Var", + "name": "rawData", + "printedName": "rawData", "children": [ { "kind": "TypeNominal", @@ -45,11 +123,10 @@ } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -72,10 +149,9 @@ } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data", - "mangledName": "$s9CanvasSVG6NSCSVGC4dataSvSgvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)rawData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC7rawDataSvSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } @@ -83,22 +159,29 @@ }, { "kind": "Var", - "name": "data_size", - "printedName": "data_size", + "name": "data", + "printedName": "data", "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvp", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(py)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvp", "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, + "declAttributes": ["AccessControl", "ObjC"], "accessors": [ { "kind": "Accessor", @@ -107,62 +190,144 @@ "children": [ { "kind": "TypeNominal", - "name": "CGSize", - "printedName": "CoreFoundation.CGSize", - "usr": "c:@S@CGSize" + "name": "Optional", + "printedName": "Foundation.NSMutableData?", + "children": [ + { + "kind": "TypeNominal", + "name": "NSMutableData", + "printedName": "Foundation.NSMutableData", + "usr": "c:objc(cs)NSMutableData" + } + ], + "usr": "s:Sq" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)data_size", - "mangledName": "$s9CanvasSVG6NSCSVGC9data_sizeSo6CGSizeVvg", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)data", + "mangledName": "$s9CanvasSVG10NSCSVGDataC4dataSo13NSMutableDataCSgvg", "moduleName": "CanvasSVG", - "implicit": true, "declAttributes": ["ObjC"], "accessorKind": "get" } ] }, { - "kind": "Var", - "name": "buf_size", - "printedName": "buf_size", + "kind": "Function", + "name": "getImage", + "printedName": "getImage()", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" - } - ], - "declKind": "Var", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(py)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvp", - "moduleName": "CanvasSVG", - "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "SetterAccess", "AccessControl", "ObjC"], - "hasStorage": true, - "accessors": [ - { - "kind": "Accessor", - "name": "Get", - "printedName": "Get()", + "name": "Optional", + "printedName": "UIKit.UIImage?", "children": [ { "kind": "TypeNominal", - "name": "UInt", - "printedName": "Swift.UInt", - "usr": "s:Su" + "name": "UIImage", + "printedName": "UIKit.UIImage", + "usr": "c:objc(cs)UIImage" } ], - "declKind": "Accessor", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(im)buf_size", - "mangledName": "$s9CanvasSVG6NSCSVGC8buf_sizeSuvg", - "moduleName": "CanvasSVG", - "implicit": true, - "declAttributes": ["ObjC"], - "accessorKind": "get" + "usr": "s:Sq" } - ] + ], + "declKind": "Func", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)getImage", + "mangledName": "$s9CanvasSVG10NSCSVGDataC8getImageSo7UIImageCSgyF", + "moduleName": "CanvasSVG", + "declAttributes": ["AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" }, + { + "kind": "Constructor", + "name": "init", + "printedName": "init()", + "children": [ + { + "kind": "TypeNominal", + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" + } + ], + "declKind": "Constructor", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData(im)init", + "mangledName": "$s9CanvasSVG10NSCSVGDataCACycfc", + "moduleName": "CanvasSVG", + "overriding": true, + "implicit": true, + "objc_name": "init", + "declAttributes": ["Dynamic", "ObjC", "Override"], + "init_kind": "Designated" + } + ], + "declKind": "Class", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData", + "mangledName": "$s9CanvasSVG10NSCSVGDataC", + "moduleName": "CanvasSVG", + "objc_name": "NSCSVGData", + "declAttributes": ["AccessControl", "ObjC", "ObjCMembers"], + "superclassUsr": "c:objc(cs)NSObject", + "inheritsConvenienceInitializers": true, + "superclassNames": ["ObjectiveC.NSObject"], + "conformances": [ + { + "kind": "Conformance", + "name": "Equatable", + "printedName": "Equatable", + "usr": "s:SQ", + "mangledName": "$sSQ" + }, + { + "kind": "Conformance", + "name": "Hashable", + "printedName": "Hashable", + "usr": "s:SH", + "mangledName": "$sSH" + }, + { + "kind": "Conformance", + "name": "CVarArg", + "printedName": "CVarArg", + "usr": "s:s7CVarArgP", + "mangledName": "$ss7CVarArgP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObservingPublishing", + "printedName": "_KeyValueCodingAndObservingPublishing", + "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP", + "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP" + }, + { + "kind": "Conformance", + "name": "_KeyValueCodingAndObserving", + "printedName": "_KeyValueCodingAndObserving", + "usr": "s:10Foundation27_KeyValueCodingAndObservingP", + "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP" + }, + { + "kind": "Conformance", + "name": "CustomStringConvertible", + "printedName": "CustomStringConvertible", + "usr": "s:s23CustomStringConvertibleP", + "mangledName": "$ss23CustomStringConvertibleP" + }, + { + "kind": "Conformance", + "name": "CustomDebugStringConvertible", + "printedName": "CustomDebugStringConvertible", + "usr": "s:s28CustomDebugStringConvertibleP", + "mangledName": "$ss28CustomDebugStringConvertibleP" + } + ] + }, + { + "kind": "TypeDecl", + "name": "NSCSVG", + "printedName": "NSCSVG", + "children": [ { "kind": "Var", "name": "autoScale", @@ -616,13 +781,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -636,7 +801,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromStringSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromStringSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -650,13 +815,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -670,7 +835,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPathSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC12fromPathSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -684,13 +849,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -704,7 +869,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemoteSync:", - "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyACSgSSFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC14fromRemoteSyncyAA10NSCSVGDataCSgSSFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -729,7 +894,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -739,13 +904,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -755,7 +920,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromString::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromStringyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -780,7 +945,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -790,13 +955,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -806,7 +971,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromPath::", - "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC8fromPathyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -831,7 +996,7 @@ { "kind": "TypeFunc", "name": "Function", - "printedName": "(CanvasSVG.NSCSVG?) -> ()", + "printedName": "(CanvasSVG.NSCSVGData?) -> ()", "children": [ { "kind": "TypeNominal", @@ -841,13 +1006,13 @@ { "kind": "TypeNominal", "name": "Optional", - "printedName": "CanvasSVG.NSCSVG?", + "printedName": "CanvasSVG.NSCSVGData?", "children": [ { "kind": "TypeNominal", - "name": "NSCSVG", - "printedName": "CanvasSVG.NSCSVG", - "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG" + "name": "NSCSVGData", + "printedName": "CanvasSVG.NSCSVGData", + "usr": "c:@M@CanvasSVG@objc(cs)NSCSVGData" } ], "usr": "s:Sq" @@ -857,7 +1022,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasSVG@objc(cs)NSCSVG(cm)fromRemote::", - "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yACSgctFZ", + "mangledName": "$s9CanvasSVG6NSCSVGC10fromRemoteyySS_yAA10NSCSVGDataCSgctFZ", "moduleName": "CanvasSVG", "static": true, "declAttributes": ["Final", "Custom", "AccessControl", "ObjC"], @@ -947,42 +1112,42 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "IntegerLiteral", - "offset": 341, + "offset": 291, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 368, + "offset": 2331, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 396, + "offset": 2359, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 417, + "offset": 2380, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 500, + "offset": 2495, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas-svg/src-native/ios/CanvasSVG/NSCSVG.swift", "kind": "BooleanLiteral", - "offset": 450, + "offset": 2445, "length": 4, "value": "true" } diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface index fd3b29d60..c8b3f7e2a 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface index fd3b29d60..c8b3f7e2a 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface @@ -8,16 +8,24 @@ import UIKit import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { - @objc @_Concurrency.MainActor(unsafe) public var data: Swift.UnsafeMutableRawPointer? { - get +@_inheritsConvenienceInitializers @objcMembers @objc(NSCSVGData) public class NSCSVGData : ObjectiveC.NSObject { + @objc public var width: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var data_size: CoreFoundation.CGSize { - get + @objc public var height: CoreFoundation.CGFloat { + @objc get } - @objc @_Concurrency.MainActor(unsafe) public var buf_size: Swift.UInt { - get + @objc public var rawData: Swift.UnsafeMutableRawPointer? { + @objc get } + @objc public var data: Foundation.NSMutableData? { + @objc get + } + @objc public func getImage() -> UIKit.UIImage? + @objc override dynamic public init() + @objc deinit +} +@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCSVG) @_Concurrency.MainActor(unsafe) public class NSCSVG : UIKit.UIView { @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set @@ -36,11 +44,11 @@ import _SwiftConcurrencyShims @_Concurrency.MainActor(unsafe) @objc override dynamic public func draw(_ rect: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public func toImage() -> UIKit.UIImage? @objc @_Concurrency.MainActor(unsafe) public func toData() -> Foundation.NSData? - @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVG? - @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) - @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVG?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromStringSync(_ source: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromPathSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromRemoteSync(_ path: Swift.String) -> CanvasSVG.NSCSVGData? + @objc @_Concurrency.MainActor(unsafe) public static func fromString(_ source: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromPath(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) + @objc @_Concurrency.MainActor(unsafe) public static func fromRemote(_ path: Swift.String, _ callback: @escaping ((CanvasSVG.NSCSVGData?) -> Swift.Void)) @objc deinit } diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftmodule b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftmodule index 78e42018b..bc728957c 100644 Binary files a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftmodule and b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftmodule differ diff --git a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/_CodeSignature/CodeResources b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/_CodeSignature/CodeResources index d2b78f22c..8f4ea139f 100644 --- a/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/_CodeSignature/CodeResources +++ b/packages/canvas-svg/src-native/ios/dist/Release-iphonesimulator/CanvasSVG.framework/_CodeSignature/CodeResources @@ -6,7 +6,7 @@ Headers/CanvasSVG-Swift.h - Jy9uP4EYUMvke/yVeYNlP3IVI3Y= + HqgoBwKqv0bgeTJew7FjRuTzH0c= Headers/CanvasSVG.h @@ -18,7 +18,7 @@ Headers/canvas_svg.h - WhdmQ/1h/sJhKZj8kyueMEpxLDU= + UjEdRBE+rn1irq2D79vsYB1rdqE= Info.plist @@ -26,19 +26,19 @@ Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo - cOq9LO+bJyyyxlv+tV6lu/Gi3KI= + pyzwu5i/GydBxWnBJBgenYsycQA= Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo - Yj5Xv4LrBTPIKb99wXPP7p6AJrI= + /fDC282M4Tt2FwHt2SW5OaSkZEk= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json - 4v3uSc8w/dve4B9bsOmxOx25fgM= + 0UVXpsSeycxphqNyUwBq3fOCvtM= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface - IqcOh08xjYocdQz4CUg0Jp63V2o= + 2cYxSfGlvN25fqdyKmnTb19+1J8= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftdoc @@ -46,19 +46,19 @@ Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftinterface - IqcOh08xjYocdQz4CUg0Jp63V2o= + 2cYxSfGlvN25fqdyKmnTb19+1J8= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftmodule - TejvTVZPJ4anzsKR16fWxzohADc= + 5HRXa92tHlcli3xC44J2AGFX1h0= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json - 4v3uSc8w/dve4B9bsOmxOx25fgM= + 0UVXpsSeycxphqNyUwBq3fOCvtM= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface - J1UiehUSBYBovgHFXpvru8SyIog= + TGnPpd7jxQQuzK+M5mcZ0Cww+f8= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftdoc @@ -66,11 +66,11 @@ Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftinterface - J1UiehUSBYBovgHFXpvru8SyIog= + TGnPpd7jxQQuzK+M5mcZ0Cww+f8= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftmodule - 0lYR0mOLFtCT46dY/kRhKed+Vk8= + SxvOQkQLVxTOCHI8Lb7cLrCk05o= Modules/module.modulemap @@ -83,7 +83,7 @@ hash2 - eEvVEX/mlm8A7O+lz233wS0liYHRofQ18CXUMAu9YG8= + u7TX8s0LwbF4BamQru4hkGJA9+MnnT5T0Gy+s2MzqlM= Headers/CanvasSVG.h @@ -104,35 +104,35 @@ hash2 - WH3gIh6dEQhs+Pq3nSWgX2Vj3U82Hpk9OuZ47AhAPNI= + WnuSN7GDo2EZSRsPw64PyY4ESU/xoToiiC+KpgugJ0E= Modules/CanvasSVG.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo hash2 - 8yI2i271ues9neYSKlMIGPZR3npzfQlzRaFg5iTcy6I= + jW748CMjBWth5cO9LC9DzkG3A90PvvCQURv/4o1IHRw= Modules/CanvasSVG.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo hash2 - YvLRJA3vdBWZugxBMCOUkHxNGuWJ0aJ3ui/K9FPYSyM= + BEmyb6GQU41FuMWlfeTofvYtnbfHj9fQEAJ8wHVRBlc= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.abi.json hash2 - LEFS4hrvJ/Q7Qkd3GgYy4hyA/V143jNd8uK9IunfdCE= + S/g6fQJ1BzblBfE5OGPDcTLEIJZAT5IEfCF7mv2lOYk= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface hash2 - bm2pXoR3e4AtEFfvkhRltgcUqmmjhVCDFAC9q8NdPqM= + V0i9Q5A4/VItQUmwMT3aCcY1MIQbYZ4FWSjgdxcPxEM= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftdoc @@ -146,28 +146,28 @@ hash2 - bm2pXoR3e4AtEFfvkhRltgcUqmmjhVCDFAC9q8NdPqM= + V0i9Q5A4/VItQUmwMT3aCcY1MIQbYZ4FWSjgdxcPxEM= Modules/CanvasSVG.swiftmodule/arm64-apple-ios-simulator.swiftmodule hash2 - ySF/fe1r+lN5vh3xWDWAM9f2fEwwSabk42y5Ria0No0= + Bgjwx82a07IiYbtquJ9sGgES9myA3nao0ipEyhIrO7k= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.abi.json hash2 - LEFS4hrvJ/Q7Qkd3GgYy4hyA/V143jNd8uK9IunfdCE= + S/g6fQJ1BzblBfE5OGPDcTLEIJZAT5IEfCF7mv2lOYk= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface hash2 - iRbAuOa3oPtnn7oIQ6ntgYvRaA0FYhw0lntORxA8sDs= + 28DuCwWjdVP9iQTSjVCq23H9sqmZBVXZt+eiHY3E89U= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftdoc @@ -181,14 +181,14 @@ hash2 - iRbAuOa3oPtnn7oIQ6ntgYvRaA0FYhw0lntORxA8sDs= + 28DuCwWjdVP9iQTSjVCq23H9sqmZBVXZt+eiHY3E89U= Modules/CanvasSVG.swiftmodule/x86_64-apple-ios-simulator.swiftmodule hash2 - bQWpMhvm3lgGRCyq6tby27ESKF+f6JKjTgc3S9NW6AU= + Zoh2XrgvAayVkg75Dx/dR3BbFGqyKAyer6/az+ROoMk= Modules/module.modulemap diff --git a/packages/canvas-three/README.md b/packages/canvas-three/README.md index be9eca273..144f2bf16 100644 --- a/packages/canvas-three/README.md +++ b/packages/canvas-three/README.md @@ -9,14 +9,47 @@ npm i three @nativescript/canvas-three ## Usage ```js -import TNSTHREE from '@nativescript/canvas-three'; +import * as THREE from '@nativescript/canvas-three'; ``` ## Creating a Renderer -#### `TNSTHREE.Renderer({ gl: WebGLRenderingContext, width: number, height: number, pixelRatio: number, ...extras })` +#### Using WebGPU -Given a `gl (context)` from an +Add the following to the webpackconfig.js + +```js +const webpack = require('@nativescript/webpack'); +const { resolve } = require('path'); + +module.exports = (env) => { + .... + /// the path depends on the location of node_modules in this example it's in the root of the plugin repo in a simple project it would be './node_modules/three/build.three.webgpu.js' and not '../../node_modules/three/build.three.webgpu.js' + webpack.chainWebpack((config) => { + config.resolve.alias.set('three', resolve(__dirname, '..', '..', 'node_modules', 'three', 'build', 'three.webgpu.js')); + }); +``` + +```ts +const renderer = new THREE.WebGPURenderer({ canvas, antialias: false }); +renderer.setPixelRatio(window.devicePixelRatio); +renderer.setSize(canvas.clientWidth, canvas.clientHeight, false); +await renderer.init(); +// grab the webgpu context as it's needed to present/render to the screen this is currently needed for now until it's removed in the future +const context = canvas.getContext('webgpu'); +/// at the end of your render loop add the following +// context.presentSurface(); +// e.g + +function render() { + renderer.render(scene, camera); + context.presentSurface(); +} +``` + +#### + +Given a `gl (context)` from a [`Canvas`](https://github.com/nativescript/canvas), return a [`THREE.WebGLRenderer`](https://threejs.org/docs/#api/renderers/WebGLRenderer) that draws into it. @@ -32,31 +65,29 @@ init(); animate(); function init() { - const context = canvas.getContext('webgl'); - - const { drawingBufferWidth: width, drawingBufferHeight: height } = context; - camera = new THREE.PerspectiveCamera(70, width / height, 0.01, 10); - camera.position.z = 1; + camera = new THREE.PerspectiveCamera(70, canvas.clientWidth / canvas.clientHeight, 0.01, 10); + camera.position.z = 1; - scene = new THREE.Scene(); + scene = new THREE.Scene(); - geometry = new THREE.BoxGeometry(0.2, 0.2, 0.2); - material = new THREE.MeshNormalMaterial(); + geometry = new THREE.BoxGeometry(0.2, 0.2, 0.2); + material = new THREE.MeshNormalMaterial(); - mesh = new THREE.Mesh(geometry, material); - scene.add(mesh); + mesh = new THREE.Mesh(geometry, material); + scene.add(mesh); - renderer = new THREE.WebGLRenderer({ context }); - renderer.setSize(width, height); + const renderer = new THREE.WebGLRenderer({ canvas, antialias: false }); + renderer.setPixelRatio(window.devicePixelRatio); + renderer.setSize(canvas.clientWidth, canvas.clientHeight, false); } function animate() { - requestAnimationFrame(animate); + requestAnimationFrame(animate); - mesh.rotation.x += 0.01; - mesh.rotation.y += 0.02; + mesh.rotation.x += 0.01; + mesh.rotation.y += 0.02; - renderer.render(scene, camera); + renderer.render(scene, camera); } ``` diff --git a/packages/canvas-three/index.ts b/packages/canvas-three/index.ts index 3bba8c284..104aa230c 100644 --- a/packages/canvas-three/index.ts +++ b/packages/canvas-three/index.ts @@ -1,5 +1,5 @@ declare var global: any; import '@nativescript/canvas-polyfill'; -import * as THREE from './three.webgpu'; +import * as THREE from 'three'; (global as any).THREE = global.window.THREE = global.THREE || THREE; -export * from './three.webgpu'; +export * from 'three'; diff --git a/packages/canvas-three/package.json b/packages/canvas-three/package.json index 6cdf63822..863e2a6d4 100644 --- a/packages/canvas-three/package.json +++ b/packages/canvas-three/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/canvas-three", - "version": "2.0.0-webgpu.31", + "version": "2.0.0-webgpu.42", "description": "Utilities for using THREE.js on NativeScript", "main": "index", "typings": "index.d.ts", @@ -33,6 +33,7 @@ "readmeFilename": "README.md", "bootstrapper": "@nativescript/plugin-seed", "dependencies": { - "@nativescript/canvas-polyfill": "webgpu" + "@nativescript/canvas-polyfill": "webgpu", + "three": "~0.169.0" } } diff --git a/packages/canvas-three/three.webgpu.d.ts b/packages/canvas-three/three.webgpu.d.ts deleted file mode 100644 index 4c184c359..000000000 --- a/packages/canvas-three/three.webgpu.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './three/three.webgpu'; diff --git a/packages/canvas-three/three.webgpu.js b/packages/canvas-three/three.webgpu.js deleted file mode 100644 index 48a13413a..000000000 --- a/packages/canvas-three/three.webgpu.js +++ /dev/null @@ -1,63045 +0,0 @@ -/** - * @license - * Copyright 2010-2024 Three.js Authors - * SPDX-License-Identifier: MIT - */ -const REVISION = '168dev'; - -const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 }; -const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 }; -const CullFaceNone = 0; -const CullFaceBack = 1; -const CullFaceFront = 2; -const CullFaceFrontBack = 3; -const BasicShadowMap$1 = 0; -const PCFShadowMap$1 = 1; -const PCFSoftShadowMap$1 = 2; -const VSMShadowMap = 3; -const FrontSide = 0; -const BackSide = 1; -const DoubleSide = 2; -const NoBlending = 0; -const NormalBlending = 1; -const AdditiveBlending = 2; -const SubtractiveBlending = 3; -const MultiplyBlending = 4; -const CustomBlending = 5; -const AddEquation = 100; -const SubtractEquation = 101; -const ReverseSubtractEquation = 102; -const MinEquation = 103; -const MaxEquation = 104; -const ZeroFactor = 200; -const OneFactor = 201; -const SrcColorFactor = 202; -const OneMinusSrcColorFactor = 203; -const SrcAlphaFactor = 204; -const OneMinusSrcAlphaFactor = 205; -const DstAlphaFactor = 206; -const OneMinusDstAlphaFactor = 207; -const DstColorFactor = 208; -const OneMinusDstColorFactor = 209; -const SrcAlphaSaturateFactor = 210; -const ConstantColorFactor = 211; -const OneMinusConstantColorFactor = 212; -const ConstantAlphaFactor = 213; -const OneMinusConstantAlphaFactor = 214; -const NeverDepth = 0; -const AlwaysDepth = 1; -const LessDepth = 2; -const LessEqualDepth = 3; -const EqualDepth = 4; -const GreaterEqualDepth = 5; -const GreaterDepth = 6; -const NotEqualDepth = 7; -const MultiplyOperation = 0; -const MixOperation = 1; -const AddOperation = 2; -const NoToneMapping = 0; -const LinearToneMapping = 1; -const ReinhardToneMapping = 2; -const CineonToneMapping = 3; -const ACESFilmicToneMapping = 4; -const CustomToneMapping = 5; -const AgXToneMapping = 6; -const NeutralToneMapping = 7; -const AttachedBindMode = 'attached'; -const DetachedBindMode = 'detached'; - -const UVMapping = 300; -const CubeReflectionMapping = 301; -const CubeRefractionMapping = 302; -const EquirectangularReflectionMapping = 303; -const EquirectangularRefractionMapping = 304; -const CubeUVReflectionMapping = 306; -const RepeatWrapping = 1000; -const ClampToEdgeWrapping = 1001; -const MirroredRepeatWrapping = 1002; -const NearestFilter = 1003; -const NearestMipmapNearestFilter = 1004; -const NearestMipMapNearestFilter = 1004; -const NearestMipmapLinearFilter = 1005; -const NearestMipMapLinearFilter = 1005; -const LinearFilter = 1006; -const LinearMipmapNearestFilter = 1007; -const LinearMipMapNearestFilter = 1007; -const LinearMipmapLinearFilter = 1008; -const LinearMipMapLinearFilter = 1008; -const UnsignedByteType = 1009; -const ByteType = 1010; -const ShortType = 1011; -const UnsignedShortType = 1012; -const IntType = 1013; -const UnsignedIntType = 1014; -const FloatType = 1015; -const HalfFloatType = 1016; -const UnsignedShort4444Type = 1017; -const UnsignedShort5551Type = 1018; -const UnsignedInt248Type = 1020; -const UnsignedInt5999Type = 35902; -const AlphaFormat = 1021; -const RGBFormat = 1022; -const RGBAFormat = 1023; -const LuminanceFormat = 1024; -const LuminanceAlphaFormat = 1025; -const DepthFormat = 1026; -const DepthStencilFormat = 1027; -const RedFormat = 1028; -const RedIntegerFormat = 1029; -const RGFormat = 1030; -const RGIntegerFormat = 1031; -const RGBIntegerFormat = 1032; -const RGBAIntegerFormat = 1033; - -const RGB_S3TC_DXT1_Format = 33776; -const RGBA_S3TC_DXT1_Format = 33777; -const RGBA_S3TC_DXT3_Format = 33778; -const RGBA_S3TC_DXT5_Format = 33779; -const RGB_PVRTC_4BPPV1_Format = 35840; -const RGB_PVRTC_2BPPV1_Format = 35841; -const RGBA_PVRTC_4BPPV1_Format = 35842; -const RGBA_PVRTC_2BPPV1_Format = 35843; -const RGB_ETC1_Format = 36196; -const RGB_ETC2_Format = 37492; -const RGBA_ETC2_EAC_Format = 37496; -const RGBA_ASTC_4x4_Format = 37808; -const RGBA_ASTC_5x4_Format = 37809; -const RGBA_ASTC_5x5_Format = 37810; -const RGBA_ASTC_6x5_Format = 37811; -const RGBA_ASTC_6x6_Format = 37812; -const RGBA_ASTC_8x5_Format = 37813; -const RGBA_ASTC_8x6_Format = 37814; -const RGBA_ASTC_8x8_Format = 37815; -const RGBA_ASTC_10x5_Format = 37816; -const RGBA_ASTC_10x6_Format = 37817; -const RGBA_ASTC_10x8_Format = 37818; -const RGBA_ASTC_10x10_Format = 37819; -const RGBA_ASTC_12x10_Format = 37820; -const RGBA_ASTC_12x12_Format = 37821; -const RGBA_BPTC_Format = 36492; -const RGB_BPTC_SIGNED_Format = 36494; -const RGB_BPTC_UNSIGNED_Format = 36495; -const RED_RGTC1_Format = 36283; -const SIGNED_RED_RGTC1_Format = 36284; -const RED_GREEN_RGTC2_Format = 36285; -const SIGNED_RED_GREEN_RGTC2_Format = 36286; -const LoopOnce = 2200; -const LoopRepeat = 2201; -const LoopPingPong = 2202; -const InterpolateDiscrete = 2300; -const InterpolateLinear = 2301; -const InterpolateSmooth = 2302; -const ZeroCurvatureEnding = 2400; -const ZeroSlopeEnding = 2401; -const WrapAroundEnding = 2402; -const NormalAnimationBlendMode = 2500; -const AdditiveAnimationBlendMode = 2501; -const TrianglesDrawMode = 0; -const TriangleStripDrawMode = 1; -const TriangleFanDrawMode = 2; -const BasicDepthPacking = 3200; -const RGBADepthPacking = 3201; -const RGBDepthPacking = 3202; -const RGDepthPacking = 3203; -const TangentSpaceNormalMap = 0; -const ObjectSpaceNormalMap = 1; - -// Color space string identifiers, matching CSS Color Module Level 4 and WebGPU names where available. -const NoColorSpace = ''; -const SRGBColorSpace = 'srgb'; -const LinearSRGBColorSpace = 'srgb-linear'; -const DisplayP3ColorSpace = 'display-p3'; -const LinearDisplayP3ColorSpace = 'display-p3-linear'; - -const LinearTransfer = 'linear'; -const SRGBTransfer = 'srgb'; - -const Rec709Primaries = 'rec709'; -const P3Primaries = 'p3'; - -const ZeroStencilOp = 0; -const KeepStencilOp = 7680; -const ReplaceStencilOp = 7681; -const IncrementStencilOp = 7682; -const DecrementStencilOp = 7683; -const IncrementWrapStencilOp = 34055; -const DecrementWrapStencilOp = 34056; -const InvertStencilOp = 5386; - -const NeverStencilFunc = 512; -const LessStencilFunc = 513; -const EqualStencilFunc = 514; -const LessEqualStencilFunc = 515; -const GreaterStencilFunc = 516; -const NotEqualStencilFunc = 517; -const GreaterEqualStencilFunc = 518; -const AlwaysStencilFunc = 519; - -const NeverCompare = 512; -const LessCompare = 513; -const EqualCompare = 514; -const LessEqualCompare = 515; -const GreaterCompare = 516; -const NotEqualCompare = 517; -const GreaterEqualCompare = 518; -const AlwaysCompare = 519; - -const StaticDrawUsage = 35044; -const DynamicDrawUsage = 35048; -const StreamDrawUsage = 35040; -const StaticReadUsage = 35045; -const DynamicReadUsage = 35049; -const StreamReadUsage = 35041; -const StaticCopyUsage = 35046; -const DynamicCopyUsage = 35050; -const StreamCopyUsage = 35042; - -const GLSL1 = '100'; -const GLSL3 = '300 es'; - -const WebGLCoordinateSystem = 2000; -const WebGPUCoordinateSystem = 2001; - -/** - * https://github.com/mrdoob/eventdispatcher.js/ - */ - -class EventDispatcher { - addEventListener(type, listener) { - if (this._listeners === undefined) this._listeners = {}; - - const listeners = this._listeners; - - if (listeners[type] === undefined) { - listeners[type] = []; - } - - if (listeners[type].indexOf(listener) === -1) { - listeners[type].push(listener); - } - } - - hasEventListener(type, listener) { - if (this._listeners === undefined) return false; - - const listeners = this._listeners; - - return listeners[type] !== undefined && listeners[type].indexOf(listener) !== -1; - } - - removeEventListener(type, listener) { - if (this._listeners === undefined) return; - - const listeners = this._listeners; - const listenerArray = listeners[type]; - - if (listenerArray !== undefined) { - const index = listenerArray.indexOf(listener); - - if (index !== -1) { - listenerArray.splice(index, 1); - } - } - } - - dispatchEvent(event) { - if (this._listeners === undefined) return; - - const listeners = this._listeners; - const listenerArray = listeners[event.type]; - - if (listenerArray !== undefined) { - event.target = this; - - // Make a copy, in case listeners are removed while iterating. - const array = listenerArray.slice(0); - - for (let i = 0, l = array.length; i < l; i++) { - array[i].call(this, event); - } - - event.target = null; - } - } -} - -const _lut = [ - '00', - '01', - '02', - '03', - '04', - '05', - '06', - '07', - '08', - '09', - '0a', - '0b', - '0c', - '0d', - '0e', - '0f', - '10', - '11', - '12', - '13', - '14', - '15', - '16', - '17', - '18', - '19', - '1a', - '1b', - '1c', - '1d', - '1e', - '1f', - '20', - '21', - '22', - '23', - '24', - '25', - '26', - '27', - '28', - '29', - '2a', - '2b', - '2c', - '2d', - '2e', - '2f', - '30', - '31', - '32', - '33', - '34', - '35', - '36', - '37', - '38', - '39', - '3a', - '3b', - '3c', - '3d', - '3e', - '3f', - '40', - '41', - '42', - '43', - '44', - '45', - '46', - '47', - '48', - '49', - '4a', - '4b', - '4c', - '4d', - '4e', - '4f', - '50', - '51', - '52', - '53', - '54', - '55', - '56', - '57', - '58', - '59', - '5a', - '5b', - '5c', - '5d', - '5e', - '5f', - '60', - '61', - '62', - '63', - '64', - '65', - '66', - '67', - '68', - '69', - '6a', - '6b', - '6c', - '6d', - '6e', - '6f', - '70', - '71', - '72', - '73', - '74', - '75', - '76', - '77', - '78', - '79', - '7a', - '7b', - '7c', - '7d', - '7e', - '7f', - '80', - '81', - '82', - '83', - '84', - '85', - '86', - '87', - '88', - '89', - '8a', - '8b', - '8c', - '8d', - '8e', - '8f', - '90', - '91', - '92', - '93', - '94', - '95', - '96', - '97', - '98', - '99', - '9a', - '9b', - '9c', - '9d', - '9e', - '9f', - 'a0', - 'a1', - 'a2', - 'a3', - 'a4', - 'a5', - 'a6', - 'a7', - 'a8', - 'a9', - 'aa', - 'ab', - 'ac', - 'ad', - 'ae', - 'af', - 'b0', - 'b1', - 'b2', - 'b3', - 'b4', - 'b5', - 'b6', - 'b7', - 'b8', - 'b9', - 'ba', - 'bb', - 'bc', - 'bd', - 'be', - 'bf', - 'c0', - 'c1', - 'c2', - 'c3', - 'c4', - 'c5', - 'c6', - 'c7', - 'c8', - 'c9', - 'ca', - 'cb', - 'cc', - 'cd', - 'ce', - 'cf', - 'd0', - 'd1', - 'd2', - 'd3', - 'd4', - 'd5', - 'd6', - 'd7', - 'd8', - 'd9', - 'da', - 'db', - 'dc', - 'dd', - 'de', - 'df', - 'e0', - 'e1', - 'e2', - 'e3', - 'e4', - 'e5', - 'e6', - 'e7', - 'e8', - 'e9', - 'ea', - 'eb', - 'ec', - 'ed', - 'ee', - 'ef', - 'f0', - 'f1', - 'f2', - 'f3', - 'f4', - 'f5', - 'f6', - 'f7', - 'f8', - 'f9', - 'fa', - 'fb', - 'fc', - 'fd', - 'fe', - 'ff', -]; - -let _seed = 1234567; - -const DEG2RAD = Math.PI / 180; -const RAD2DEG = 180 / Math.PI; - -// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136 -function generateUUID() { - const d0 = (Math.random() * 0xffffffff) | 0; - const d1 = (Math.random() * 0xffffffff) | 0; - const d2 = (Math.random() * 0xffffffff) | 0; - const d3 = (Math.random() * 0xffffffff) | 0; - const uuid = _lut[d0 & 0xff] + _lut[(d0 >> 8) & 0xff] + _lut[(d0 >> 16) & 0xff] + _lut[(d0 >> 24) & 0xff] + '-' + _lut[d1 & 0xff] + _lut[(d1 >> 8) & 0xff] + '-' + _lut[((d1 >> 16) & 0x0f) | 0x40] + _lut[(d1 >> 24) & 0xff] + '-' + _lut[(d2 & 0x3f) | 0x80] + _lut[(d2 >> 8) & 0xff] + '-' + _lut[(d2 >> 16) & 0xff] + _lut[(d2 >> 24) & 0xff] + _lut[d3 & 0xff] + _lut[(d3 >> 8) & 0xff] + _lut[(d3 >> 16) & 0xff] + _lut[(d3 >> 24) & 0xff]; - - // .toLowerCase() here flattens concatenated strings to save heap memory space. - return uuid.toLowerCase(); -} - -function clamp$1(value, min, max) { - return Math.max(min, Math.min(max, value)); -} - -// compute euclidean modulo of m % n -// https://en.wikipedia.org/wiki/Modulo_operation -function euclideanModulo(n, m) { - return ((n % m) + m) % m; -} - -// Linear mapping from range to range -function mapLinear(x, a1, a2, b1, b2) { - return b1 + ((x - a1) * (b2 - b1)) / (a2 - a1); -} - -// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/ -function inverseLerp(x, y, value) { - if (x !== y) { - return (value - x) / (y - x); - } else { - return 0; - } -} - -// https://en.wikipedia.org/wiki/Linear_interpolation -function lerp(x, y, t) { - return (1 - t) * x + t * y; -} - -// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/ -function damp(x, y, lambda, dt) { - return lerp(x, y, 1 - Math.exp(-lambda * dt)); -} - -// https://www.desmos.com/calculator/vcsjnyz7x4 -function pingpong(x, length = 1) { - return length - Math.abs(euclideanModulo(x, length * 2) - length); -} - -// http://en.wikipedia.org/wiki/Smoothstep -function smoothstep$1(x, min, max) { - if (x <= min) return 0; - if (x >= max) return 1; - - x = (x - min) / (max - min); - - return x * x * (3 - 2 * x); -} - -function smootherstep(x, min, max) { - if (x <= min) return 0; - if (x >= max) return 1; - - x = (x - min) / (max - min); - - return x * x * x * (x * (x * 6 - 15) + 10); -} - -// Random integer from interval -function randInt(low, high) { - return low + Math.floor(Math.random() * (high - low + 1)); -} - -// Random float from interval -function randFloat(low, high) { - return low + Math.random() * (high - low); -} - -// Random float from <-range/2, range/2> interval -function randFloatSpread(range) { - return range * (0.5 - Math.random()); -} - -// Deterministic pseudo-random float in the interval [ 0, 1 ] -function seededRandom(s) { - if (s !== undefined) _seed = s; - - // Mulberry32 generator - - let t = (_seed += 0x6d2b79f5); - - t = Math.imul(t ^ (t >>> 15), t | 1); - - t ^= t + Math.imul(t ^ (t >>> 7), t | 61); - - return ((t ^ (t >>> 14)) >>> 0) / 4294967296; -} - -function degToRad(degrees) { - return degrees * DEG2RAD; -} - -function radToDeg(radians) { - return radians * RAD2DEG; -} - -function isPowerOfTwo(value) { - return (value & (value - 1)) === 0 && value !== 0; -} - -function ceilPowerOfTwo(value) { - return Math.pow(2, Math.ceil(Math.log(value) / Math.LN2)); -} - -function floorPowerOfTwo(value) { - return Math.pow(2, Math.floor(Math.log(value) / Math.LN2)); -} - -function setQuaternionFromProperEuler(q, a, b, c, order) { - // Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles - - // rotations are applied to the axes in the order specified by 'order' - // rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c' - // angles are in radians - - const cos = Math.cos; - const sin = Math.sin; - - const c2 = cos(b / 2); - const s2 = sin(b / 2); - - const c13 = cos((a + c) / 2); - const s13 = sin((a + c) / 2); - - const c1_3 = cos((a - c) / 2); - const s1_3 = sin((a - c) / 2); - - const c3_1 = cos((c - a) / 2); - const s3_1 = sin((c - a) / 2); - - switch (order) { - case 'XYX': - q.set(c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13); - break; - - case 'YZY': - q.set(s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13); - break; - - case 'ZXZ': - q.set(s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13); - break; - - case 'XZX': - q.set(c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13); - break; - - case 'YXY': - q.set(s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13); - break; - - case 'ZYZ': - q.set(s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13); - break; - - default: - console.warn('THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order); - } -} - -function denormalize(value, array) { - switch (array.constructor) { - case Float32Array: - return value; - - case Uint32Array: - return value / 4294967295.0; - - case Uint16Array: - return value / 65535.0; - - case Uint8Array: - return value / 255.0; - - case Int32Array: - return Math.max(value / 2147483647.0, -1.0); - - case Int16Array: - return Math.max(value / 32767.0, -1.0); - - case Int8Array: - return Math.max(value / 127.0, -1.0); - - default: - throw new Error('Invalid component type.'); - } -} - -function normalize$1(value, array) { - switch (array.constructor) { - case Float32Array: - return value; - - case Uint32Array: - return Math.round(value * 4294967295.0); - - case Uint16Array: - return Math.round(value * 65535.0); - - case Uint8Array: - return Math.round(value * 255.0); - - case Int32Array: - return Math.round(value * 2147483647.0); - - case Int16Array: - return Math.round(value * 32767.0); - - case Int8Array: - return Math.round(value * 127.0); - - default: - throw new Error('Invalid component type.'); - } -} - -const MathUtils = { - DEG2RAD: DEG2RAD, - RAD2DEG: RAD2DEG, - generateUUID: generateUUID, - clamp: clamp$1, - euclideanModulo: euclideanModulo, - mapLinear: mapLinear, - inverseLerp: inverseLerp, - lerp: lerp, - damp: damp, - pingpong: pingpong, - smoothstep: smoothstep$1, - smootherstep: smootherstep, - randInt: randInt, - randFloat: randFloat, - randFloatSpread: randFloatSpread, - seededRandom: seededRandom, - degToRad: degToRad, - radToDeg: radToDeg, - isPowerOfTwo: isPowerOfTwo, - ceilPowerOfTwo: ceilPowerOfTwo, - floorPowerOfTwo: floorPowerOfTwo, - setQuaternionFromProperEuler: setQuaternionFromProperEuler, - normalize: normalize$1, - denormalize: denormalize, -}; - -class Vector2 { - constructor(x = 0, y = 0) { - Vector2.prototype.isVector2 = true; - - this.x = x; - this.y = y; - } - - get width() { - return this.x; - } - - set width(value) { - this.x = value; - } - - get height() { - return this.y; - } - - set height(value) { - this.y = value; - } - - set(x, y) { - this.x = x; - this.y = y; - - return this; - } - - setScalar(scalar) { - this.x = scalar; - this.y = scalar; - - return this; - } - - setX(x) { - this.x = x; - - return this; - } - - setY(y) { - this.y = y; - - return this; - } - - setComponent(index, value) { - switch (index) { - case 0: - this.x = value; - break; - case 1: - this.y = value; - break; - default: - throw new Error('index is out of range: ' + index); - } - - return this; - } - - getComponent(index) { - switch (index) { - case 0: - return this.x; - case 1: - return this.y; - default: - throw new Error('index is out of range: ' + index); - } - } - - clone() { - return new this.constructor(this.x, this.y); - } - - copy(v) { - this.x = v.x; - this.y = v.y; - - return this; - } - - add(v) { - this.x += v.x; - this.y += v.y; - - return this; - } - - addScalar(s) { - this.x += s; - this.y += s; - - return this; - } - - addVectors(a, b) { - this.x = a.x + b.x; - this.y = a.y + b.y; - - return this; - } - - addScaledVector(v, s) { - this.x += v.x * s; - this.y += v.y * s; - - return this; - } - - sub(v) { - this.x -= v.x; - this.y -= v.y; - - return this; - } - - subScalar(s) { - this.x -= s; - this.y -= s; - - return this; - } - - subVectors(a, b) { - this.x = a.x - b.x; - this.y = a.y - b.y; - - return this; - } - - multiply(v) { - this.x *= v.x; - this.y *= v.y; - - return this; - } - - multiplyScalar(scalar) { - this.x *= scalar; - this.y *= scalar; - - return this; - } - - divide(v) { - this.x /= v.x; - this.y /= v.y; - - return this; - } - - divideScalar(scalar) { - return this.multiplyScalar(1 / scalar); - } - - applyMatrix3(m) { - const x = this.x, - y = this.y; - const e = m.elements; - - this.x = e[0] * x + e[3] * y + e[6]; - this.y = e[1] * x + e[4] * y + e[7]; - - return this; - } - - min(v) { - this.x = Math.min(this.x, v.x); - this.y = Math.min(this.y, v.y); - - return this; - } - - max(v) { - this.x = Math.max(this.x, v.x); - this.y = Math.max(this.y, v.y); - - return this; - } - - clamp(min, max) { - // assumes min < max, componentwise - - this.x = Math.max(min.x, Math.min(max.x, this.x)); - this.y = Math.max(min.y, Math.min(max.y, this.y)); - - return this; - } - - clampScalar(minVal, maxVal) { - this.x = Math.max(minVal, Math.min(maxVal, this.x)); - this.y = Math.max(minVal, Math.min(maxVal, this.y)); - - return this; - } - - clampLength(min, max) { - const length = this.length(); - - return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length))); - } - - floor() { - this.x = Math.floor(this.x); - this.y = Math.floor(this.y); - - return this; - } - - ceil() { - this.x = Math.ceil(this.x); - this.y = Math.ceil(this.y); - - return this; - } - - round() { - this.x = Math.round(this.x); - this.y = Math.round(this.y); - - return this; - } - - roundToZero() { - this.x = Math.trunc(this.x); - this.y = Math.trunc(this.y); - - return this; - } - - negate() { - this.x = -this.x; - this.y = -this.y; - - return this; - } - - dot(v) { - return this.x * v.x + this.y * v.y; - } - - cross(v) { - return this.x * v.y - this.y * v.x; - } - - lengthSq() { - return this.x * this.x + this.y * this.y; - } - - length() { - return Math.sqrt(this.x * this.x + this.y * this.y); - } - - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y); - } - - normalize() { - return this.divideScalar(this.length() || 1); - } - - angle() { - // computes the angle in radians with respect to the positive x-axis - - const angle = Math.atan2(-this.y, -this.x) + Math.PI; - - return angle; - } - - angleTo(v) { - const denominator = Math.sqrt(this.lengthSq() * v.lengthSq()); - - if (denominator === 0) return Math.PI / 2; - - const theta = this.dot(v) / denominator; - - // clamp, to handle numerical problems - - return Math.acos(clamp$1(theta, -1, 1)); - } - - distanceTo(v) { - return Math.sqrt(this.distanceToSquared(v)); - } - - distanceToSquared(v) { - const dx = this.x - v.x, - dy = this.y - v.y; - return dx * dx + dy * dy; - } - - manhattanDistanceTo(v) { - return Math.abs(this.x - v.x) + Math.abs(this.y - v.y); - } - - setLength(length) { - return this.normalize().multiplyScalar(length); - } - - lerp(v, alpha) { - this.x += (v.x - this.x) * alpha; - this.y += (v.y - this.y) * alpha; - - return this; - } - - lerpVectors(v1, v2, alpha) { - this.x = v1.x + (v2.x - v1.x) * alpha; - this.y = v1.y + (v2.y - v1.y) * alpha; - - return this; - } - - equals(v) { - return v.x === this.x && v.y === this.y; - } - - fromArray(array, offset = 0) { - this.x = array[offset]; - this.y = array[offset + 1]; - - return this; - } - - toArray(array = [], offset = 0) { - array[offset] = this.x; - array[offset + 1] = this.y; - - return array; - } - - fromBufferAttribute(attribute, index) { - this.x = attribute.getX(index); - this.y = attribute.getY(index); - - return this; - } - - rotateAround(center, angle) { - const c = Math.cos(angle), - s = Math.sin(angle); - - const x = this.x - center.x; - const y = this.y - center.y; - - this.x = x * c - y * s + center.x; - this.y = x * s + y * c + center.y; - - return this; - } - - random() { - this.x = Math.random(); - this.y = Math.random(); - - return this; - } - - *[Symbol.iterator]() { - yield this.x; - yield this.y; - } -} - -class Matrix3 { - constructor(n11, n12, n13, n21, n22, n23, n31, n32, n33) { - Matrix3.prototype.isMatrix3 = true; - - this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - - if (n11 !== undefined) { - this.set(n11, n12, n13, n21, n22, n23, n31, n32, n33); - } - } - - set(n11, n12, n13, n21, n22, n23, n31, n32, n33) { - const te = this.elements; - - te[0] = n11; - te[1] = n21; - te[2] = n31; - te[3] = n12; - te[4] = n22; - te[5] = n32; - te[6] = n13; - te[7] = n23; - te[8] = n33; - - return this; - } - - identity() { - this.set(1, 0, 0, 0, 1, 0, 0, 0, 1); - - return this; - } - - copy(m) { - const te = this.elements; - const me = m.elements; - - te[0] = me[0]; - te[1] = me[1]; - te[2] = me[2]; - te[3] = me[3]; - te[4] = me[4]; - te[5] = me[5]; - te[6] = me[6]; - te[7] = me[7]; - te[8] = me[8]; - - return this; - } - - extractBasis(xAxis, yAxis, zAxis) { - xAxis.setFromMatrix3Column(this, 0); - yAxis.setFromMatrix3Column(this, 1); - zAxis.setFromMatrix3Column(this, 2); - - return this; - } - - setFromMatrix4(m) { - const me = m.elements; - - this.set(me[0], me[4], me[8], me[1], me[5], me[9], me[2], me[6], me[10]); - - return this; - } - - multiply(m) { - return this.multiplyMatrices(this, m); - } - - premultiply(m) { - return this.multiplyMatrices(m, this); - } - - multiplyMatrices(a, b) { - const ae = a.elements; - const be = b.elements; - const te = this.elements; - - const a11 = ae[0], - a12 = ae[3], - a13 = ae[6]; - const a21 = ae[1], - a22 = ae[4], - a23 = ae[7]; - const a31 = ae[2], - a32 = ae[5], - a33 = ae[8]; - - const b11 = be[0], - b12 = be[3], - b13 = be[6]; - const b21 = be[1], - b22 = be[4], - b23 = be[7]; - const b31 = be[2], - b32 = be[5], - b33 = be[8]; - - te[0] = a11 * b11 + a12 * b21 + a13 * b31; - te[3] = a11 * b12 + a12 * b22 + a13 * b32; - te[6] = a11 * b13 + a12 * b23 + a13 * b33; - - te[1] = a21 * b11 + a22 * b21 + a23 * b31; - te[4] = a21 * b12 + a22 * b22 + a23 * b32; - te[7] = a21 * b13 + a22 * b23 + a23 * b33; - - te[2] = a31 * b11 + a32 * b21 + a33 * b31; - te[5] = a31 * b12 + a32 * b22 + a33 * b32; - te[8] = a31 * b13 + a32 * b23 + a33 * b33; - - return this; - } - - multiplyScalar(s) { - const te = this.elements; - - te[0] *= s; - te[3] *= s; - te[6] *= s; - te[1] *= s; - te[4] *= s; - te[7] *= s; - te[2] *= s; - te[5] *= s; - te[8] *= s; - - return this; - } - - determinant() { - const te = this.elements; - - const a = te[0], - b = te[1], - c = te[2], - d = te[3], - e = te[4], - f = te[5], - g = te[6], - h = te[7], - i = te[8]; - - return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g; - } - - invert() { - const te = this.elements, - n11 = te[0], - n21 = te[1], - n31 = te[2], - n12 = te[3], - n22 = te[4], - n32 = te[5], - n13 = te[6], - n23 = te[7], - n33 = te[8], - t11 = n33 * n22 - n32 * n23, - t12 = n32 * n13 - n33 * n12, - t13 = n23 * n12 - n22 * n13, - det = n11 * t11 + n21 * t12 + n31 * t13; - - if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); - - const detInv = 1 / det; - - te[0] = t11 * detInv; - te[1] = (n31 * n23 - n33 * n21) * detInv; - te[2] = (n32 * n21 - n31 * n22) * detInv; - - te[3] = t12 * detInv; - te[4] = (n33 * n11 - n31 * n13) * detInv; - te[5] = (n31 * n12 - n32 * n11) * detInv; - - te[6] = t13 * detInv; - te[7] = (n21 * n13 - n23 * n11) * detInv; - te[8] = (n22 * n11 - n21 * n12) * detInv; - - return this; - } - - transpose() { - let tmp; - const m = this.elements; - - tmp = m[1]; - m[1] = m[3]; - m[3] = tmp; - tmp = m[2]; - m[2] = m[6]; - m[6] = tmp; - tmp = m[5]; - m[5] = m[7]; - m[7] = tmp; - - return this; - } - - getNormalMatrix(matrix4) { - return this.setFromMatrix4(matrix4).invert().transpose(); - } - - transposeIntoArray(r) { - const m = this.elements; - - r[0] = m[0]; - r[1] = m[3]; - r[2] = m[6]; - r[3] = m[1]; - r[4] = m[4]; - r[5] = m[7]; - r[6] = m[2]; - r[7] = m[5]; - r[8] = m[8]; - - return this; - } - - setUvTransform(tx, ty, sx, sy, rotation, cx, cy) { - const c = Math.cos(rotation); - const s = Math.sin(rotation); - - this.set(sx * c, sx * s, -sx * (c * cx + s * cy) + cx + tx, -sy * s, sy * c, -sy * (-s * cx + c * cy) + cy + ty, 0, 0, 1); - - return this; - } - - // - - scale(sx, sy) { - this.premultiply(_m3.makeScale(sx, sy)); - - return this; - } - - rotate(theta) { - this.premultiply(_m3.makeRotation(-theta)); - - return this; - } - - translate(tx, ty) { - this.premultiply(_m3.makeTranslation(tx, ty)); - - return this; - } - - // for 2D Transforms - - makeTranslation(x, y) { - if (x.isVector2) { - this.set(1, 0, x.x, 0, 1, x.y, 0, 0, 1); - } else { - this.set(1, 0, x, 0, 1, y, 0, 0, 1); - } - - return this; - } - - makeRotation(theta) { - // counterclockwise - - const c = Math.cos(theta); - const s = Math.sin(theta); - - this.set(c, -s, 0, s, c, 0, 0, 0, 1); - - return this; - } - - makeScale(x, y) { - this.set(x, 0, 0, 0, y, 0, 0, 0, 1); - - return this; - } - - // - - equals(matrix) { - const te = this.elements; - const me = matrix.elements; - - for (let i = 0; i < 9; i++) { - if (te[i] !== me[i]) return false; - } - - return true; - } - - fromArray(array, offset = 0) { - for (let i = 0; i < 9; i++) { - this.elements[i] = array[i + offset]; - } - - return this; - } - - toArray(array = [], offset = 0) { - const te = this.elements; - - array[offset] = te[0]; - array[offset + 1] = te[1]; - array[offset + 2] = te[2]; - - array[offset + 3] = te[3]; - array[offset + 4] = te[4]; - array[offset + 5] = te[5]; - - array[offset + 6] = te[6]; - array[offset + 7] = te[7]; - array[offset + 8] = te[8]; - - return array; - } - - clone() { - return new this.constructor().fromArray(this.elements); - } -} - -const _m3 = /*@__PURE__*/ new Matrix3(); - -function arrayNeedsUint32$1(array) { - // assumes larger values usually on last - - for (let i = array.length - 1; i >= 0; --i) { - if (array[i] >= 65535) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565 - } - - return false; -} - -const TYPED_ARRAYS = { - Int8Array: Int8Array, - Uint8Array: Uint8Array, - Uint8ClampedArray: Uint8ClampedArray, - Int16Array: Int16Array, - Uint16Array: Uint16Array, - Int32Array: Int32Array, - Uint32Array: Uint32Array, - Float32Array: Float32Array, - Float64Array: Float64Array, -}; - -function getTypedArray(type, buffer) { - return new TYPED_ARRAYS[type](buffer); -} - -function createElementNS(name) { - return document.createElementNS('http://www.w3.org/1999/xhtml', name); -} - -function createCanvasElement() { - const canvas = createElementNS('canvas'); - canvas.style.display = 'block'; - return canvas; -} - -const _cache$2 = {}; - -function warnOnce(message) { - if (message in _cache$2) return; - - _cache$2[message] = true; - - console.warn(message); -} - -/** - * Matrices converting P3 <-> Rec. 709 primaries, without gamut mapping - * or clipping. Based on W3C specifications for sRGB and Display P3, - * and ICC specifications for the D50 connection space. Values in/out - * are _linear_ sRGB and _linear_ Display P3. - * - * Note that both sRGB and Display P3 use the sRGB transfer functions. - * - * Reference: - * - http://www.russellcottrell.com/photo/matrixCalculator.htm - */ - -const LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = /*@__PURE__*/ new Matrix3().set(0.8224621, 0.177538, 0.0, 0.0331941, 0.9668058, 0.0, 0.0170827, 0.0723974, 0.9105199); - -const LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = /*@__PURE__*/ new Matrix3().set(1.2249401, -0.2249404, 0.0, -0.0420569, 1.0420571, 0.0, -0.0196376, -0.0786361, 1.0982735); - -/** - * Defines supported color spaces by transfer function and primaries, - * and provides conversions to/from the Linear-sRGB reference space. - */ -const COLOR_SPACES = { - [LinearSRGBColorSpace]: { - transfer: LinearTransfer, - primaries: Rec709Primaries, - luminanceCoefficients: [0.2126, 0.7152, 0.0722], - toReference: (color) => color, - fromReference: (color) => color, - }, - [SRGBColorSpace]: { - transfer: SRGBTransfer, - primaries: Rec709Primaries, - luminanceCoefficients: [0.2126, 0.7152, 0.0722], - toReference: (color) => color.convertSRGBToLinear(), - fromReference: (color) => color.convertLinearToSRGB(), - }, - [LinearDisplayP3ColorSpace]: { - transfer: LinearTransfer, - primaries: P3Primaries, - luminanceCoefficients: [0.2289, 0.6917, 0.0793], - toReference: (color) => color.applyMatrix3(LINEAR_DISPLAY_P3_TO_LINEAR_SRGB), - fromReference: (color) => color.applyMatrix3(LINEAR_SRGB_TO_LINEAR_DISPLAY_P3), - }, - [DisplayP3ColorSpace]: { - transfer: SRGBTransfer, - primaries: P3Primaries, - luminanceCoefficients: [0.2289, 0.6917, 0.0793], - toReference: (color) => color.convertSRGBToLinear().applyMatrix3(LINEAR_DISPLAY_P3_TO_LINEAR_SRGB), - fromReference: (color) => color.applyMatrix3(LINEAR_SRGB_TO_LINEAR_DISPLAY_P3).convertLinearToSRGB(), - }, -}; - -const SUPPORTED_WORKING_COLOR_SPACES = new Set([LinearSRGBColorSpace, LinearDisplayP3ColorSpace]); - -const ColorManagement = { - enabled: true, - - _workingColorSpace: LinearSRGBColorSpace, - - get workingColorSpace() { - return this._workingColorSpace; - }, - - set workingColorSpace(colorSpace) { - if (!SUPPORTED_WORKING_COLOR_SPACES.has(colorSpace)) { - throw new Error(`Unsupported working color space, "${colorSpace}".`); - } - - this._workingColorSpace = colorSpace; - }, - - convert: function (color, sourceColorSpace, targetColorSpace) { - if (this.enabled === false || sourceColorSpace === targetColorSpace || !sourceColorSpace || !targetColorSpace) { - return color; - } - - const sourceToReference = COLOR_SPACES[sourceColorSpace].toReference; - const targetFromReference = COLOR_SPACES[targetColorSpace].fromReference; - - return targetFromReference(sourceToReference(color)); - }, - - fromWorkingColorSpace: function (color, targetColorSpace) { - return this.convert(color, this._workingColorSpace, targetColorSpace); - }, - - toWorkingColorSpace: function (color, sourceColorSpace) { - return this.convert(color, sourceColorSpace, this._workingColorSpace); - }, - - getPrimaries: function (colorSpace) { - return COLOR_SPACES[colorSpace].primaries; - }, - - getTransfer: function (colorSpace) { - if (colorSpace === NoColorSpace) return LinearTransfer; - - return COLOR_SPACES[colorSpace].transfer; - }, - - getLuminanceCoefficients: function (target, colorSpace = this._workingColorSpace) { - return target.fromArray(COLOR_SPACES[colorSpace].luminanceCoefficients); - }, -}; - -function SRGBToLinear(c) { - return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4); -} - -function LinearToSRGB(c) { - return c < 0.0031308 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055; -} - -let _canvas; - -class ImageUtils { - static getDataURL(image) { - if (/^data:/i.test(image.src)) { - return image.src; - } - - if (typeof HTMLCanvasElement === 'undefined') { - return image.src; - } - - let canvas; - - if (image instanceof HTMLCanvasElement) { - canvas = image; - } else { - if (_canvas === undefined) _canvas = createElementNS('canvas'); - - _canvas.width = image.width; - _canvas.height = image.height; - - const context = _canvas.getContext('2d'); - - if (image instanceof ImageData) { - context.putImageData(image, 0, 0); - } else { - context.drawImage(image, 0, 0, image.width, image.height); - } - - canvas = _canvas; - } - - if (canvas.width > 2048 || canvas.height > 2048) { - console.warn('THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image); - - return canvas.toDataURL('image/jpeg', 0.6); - } else { - return canvas.toDataURL('image/png'); - } - } - - static sRGBToLinear(image) { - if ((typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement) || (typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement) || (typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap)) { - const canvas = createElementNS('canvas'); - - canvas.width = image.width; - canvas.height = image.height; - - const context = canvas.getContext('2d'); - context.drawImage(image, 0, 0, image.width, image.height); - - const imageData = context.getImageData(0, 0, image.width, image.height); - const data = imageData.data; - - for (let i = 0; i < data.length; i++) { - data[i] = SRGBToLinear(data[i] / 255) * 255; - } - - context.putImageData(imageData, 0, 0); - - return canvas; - } else if (image.data) { - const data = image.data.slice(0); - - for (let i = 0; i < data.length; i++) { - if (data instanceof Uint8Array || data instanceof Uint8ClampedArray) { - data[i] = Math.floor(SRGBToLinear(data[i] / 255) * 255); - } else { - // assuming float - - data[i] = SRGBToLinear(data[i]); - } - } - - return { - data: data, - width: image.width, - height: image.height, - }; - } else { - console.warn('THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.'); - return image; - } - } -} - -let _sourceId = 0; - -class Source { - constructor(data = null) { - this.isSource = true; - - Object.defineProperty(this, 'id', { value: _sourceId++ }); - - this.uuid = generateUUID(); - - this.data = data; - this.dataReady = true; - - this.version = 0; - } - - set needsUpdate(value) { - if (value === true) this.version++; - } - - toJSON(meta) { - const isRootObject = meta === undefined || typeof meta === 'string'; - - if (!isRootObject && meta.images[this.uuid] !== undefined) { - return meta.images[this.uuid]; - } - - const output = { - uuid: this.uuid, - url: '', - }; - - const data = this.data; - - if (data !== null) { - let url; - - if (Array.isArray(data)) { - // cube texture - - url = []; - - for (let i = 0, l = data.length; i < l; i++) { - if (data[i].isDataTexture) { - url.push(serializeImage(data[i].image)); - } else { - url.push(serializeImage(data[i])); - } - } - } else { - // texture - - url = serializeImage(data); - } - - output.url = url; - } - - if (!isRootObject) { - meta.images[this.uuid] = output; - } - - return output; - } -} - -function serializeImage(image) { - if ((typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement) || (typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement) || (typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap)) { - // default images - - return ImageUtils.getDataURL(image); - } else { - if (image.data) { - // images of DataTexture - - return { - data: Array.from(image.data), - width: image.width, - height: image.height, - type: image.data.constructor.name, - }; - } else { - console.warn('THREE.Texture: Unable to serialize Texture.'); - return {}; - } - } -} - -let _textureId = 0; - -class Texture extends EventDispatcher { - constructor(image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace) { - super(); - - this.isTexture = true; - - Object.defineProperty(this, 'id', { value: _textureId++ }); - - this.uuid = generateUUID(); - - this.name = ''; - - this.source = new Source(image); - this.mipmaps = []; - - this.mapping = mapping; - this.channel = 0; - - this.wrapS = wrapS; - this.wrapT = wrapT; - - this.magFilter = magFilter; - this.minFilter = minFilter; - - this.anisotropy = anisotropy; - - this.format = format; - this.internalFormat = null; - this.type = type; - - this.offset = new Vector2(0, 0); - this.repeat = new Vector2(1, 1); - this.center = new Vector2(0, 0); - this.rotation = 0; - - this.matrixAutoUpdate = true; - this.matrix = new Matrix3(); - - this.generateMipmaps = true; - this.premultiplyAlpha = false; - this.flipY = true; - this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml) - - this.colorSpace = colorSpace; - - this.userData = {}; - - this.version = 0; - this.onUpdate = null; - - this.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not - this.pmremVersion = 0; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures) - } - - get image() { - return this.source.data; - } - - set image(value = null) { - this.source.data = value; - } - - updateMatrix() { - this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y); - } - - clone() { - return new this.constructor().copy(this); - } - - copy(source) { - this.name = source.name; - - this.source = source.source; - this.mipmaps = source.mipmaps.slice(0); - - this.mapping = source.mapping; - this.channel = source.channel; - - this.wrapS = source.wrapS; - this.wrapT = source.wrapT; - - this.magFilter = source.magFilter; - this.minFilter = source.minFilter; - - this.anisotropy = source.anisotropy; - - this.format = source.format; - this.internalFormat = source.internalFormat; - this.type = source.type; - - this.offset.copy(source.offset); - this.repeat.copy(source.repeat); - this.center.copy(source.center); - this.rotation = source.rotation; - - this.matrixAutoUpdate = source.matrixAutoUpdate; - this.matrix.copy(source.matrix); - - this.generateMipmaps = source.generateMipmaps; - this.premultiplyAlpha = source.premultiplyAlpha; - this.flipY = source.flipY; - this.unpackAlignment = source.unpackAlignment; - this.colorSpace = source.colorSpace; - - this.userData = JSON.parse(JSON.stringify(source.userData)); - - this.needsUpdate = true; - - return this; - } - - toJSON(meta) { - const isRootObject = meta === undefined || typeof meta === 'string'; - - if (!isRootObject && meta.textures[this.uuid] !== undefined) { - return meta.textures[this.uuid]; - } - - const output = { - metadata: { - version: 4.6, - type: 'Texture', - generator: 'Texture.toJSON', - }, - - uuid: this.uuid, - name: this.name, - - image: this.source.toJSON(meta).uuid, - - mapping: this.mapping, - channel: this.channel, - - repeat: [this.repeat.x, this.repeat.y], - offset: [this.offset.x, this.offset.y], - center: [this.center.x, this.center.y], - rotation: this.rotation, - - wrap: [this.wrapS, this.wrapT], - - format: this.format, - internalFormat: this.internalFormat, - type: this.type, - colorSpace: this.colorSpace, - - minFilter: this.minFilter, - magFilter: this.magFilter, - anisotropy: this.anisotropy, - - flipY: this.flipY, - - generateMipmaps: this.generateMipmaps, - premultiplyAlpha: this.premultiplyAlpha, - unpackAlignment: this.unpackAlignment, - }; - - if (Object.keys(this.userData).length > 0) output.userData = this.userData; - - if (!isRootObject) { - meta.textures[this.uuid] = output; - } - - return output; - } - - dispose() { - this.dispatchEvent({ type: 'dispose' }); - } - - transformUv(uv) { - if (this.mapping !== UVMapping) return uv; - - uv.applyMatrix3(this.matrix); - - if (uv.x < 0 || uv.x > 1) { - switch (this.wrapS) { - case RepeatWrapping: - uv.x = uv.x - Math.floor(uv.x); - break; - - case ClampToEdgeWrapping: - uv.x = uv.x < 0 ? 0 : 1; - break; - - case MirroredRepeatWrapping: - if (Math.abs(Math.floor(uv.x) % 2) === 1) { - uv.x = Math.ceil(uv.x) - uv.x; - } else { - uv.x = uv.x - Math.floor(uv.x); - } - - break; - } - } - - if (uv.y < 0 || uv.y > 1) { - switch (this.wrapT) { - case RepeatWrapping: - uv.y = uv.y - Math.floor(uv.y); - break; - - case ClampToEdgeWrapping: - uv.y = uv.y < 0 ? 0 : 1; - break; - - case MirroredRepeatWrapping: - if (Math.abs(Math.floor(uv.y) % 2) === 1) { - uv.y = Math.ceil(uv.y) - uv.y; - } else { - uv.y = uv.y - Math.floor(uv.y); - } - - break; - } - } - - if (this.flipY) { - uv.y = 1 - uv.y; - } - - return uv; - } - - set needsUpdate(value) { - if (value === true) { - this.version++; - this.source.needsUpdate = true; - } - } - - set needsPMREMUpdate(value) { - if (value === true) { - this.pmremVersion++; - } - } -} - -Texture.DEFAULT_IMAGE = null; -Texture.DEFAULT_MAPPING = UVMapping; -Texture.DEFAULT_ANISOTROPY = 1; - -class Vector4 { - constructor(x = 0, y = 0, z = 0, w = 1) { - Vector4.prototype.isVector4 = true; - - this.x = x; - this.y = y; - this.z = z; - this.w = w; - } - - get width() { - return this.z; - } - - set width(value) { - this.z = value; - } - - get height() { - return this.w; - } - - set height(value) { - this.w = value; - } - - set(x, y, z, w) { - this.x = x; - this.y = y; - this.z = z; - this.w = w; - - return this; - } - - setScalar(scalar) { - this.x = scalar; - this.y = scalar; - this.z = scalar; - this.w = scalar; - - return this; - } - - setX(x) { - this.x = x; - - return this; - } - - setY(y) { - this.y = y; - - return this; - } - - setZ(z) { - this.z = z; - - return this; - } - - setW(w) { - this.w = w; - - return this; - } - - setComponent(index, value) { - switch (index) { - case 0: - this.x = value; - break; - case 1: - this.y = value; - break; - case 2: - this.z = value; - break; - case 3: - this.w = value; - break; - default: - throw new Error('index is out of range: ' + index); - } - - return this; - } - - getComponent(index) { - switch (index) { - case 0: - return this.x; - case 1: - return this.y; - case 2: - return this.z; - case 3: - return this.w; - default: - throw new Error('index is out of range: ' + index); - } - } - - clone() { - return new this.constructor(this.x, this.y, this.z, this.w); - } - - copy(v) { - this.x = v.x; - this.y = v.y; - this.z = v.z; - this.w = v.w !== undefined ? v.w : 1; - - return this; - } - - add(v) { - this.x += v.x; - this.y += v.y; - this.z += v.z; - this.w += v.w; - - return this; - } - - addScalar(s) { - this.x += s; - this.y += s; - this.z += s; - this.w += s; - - return this; - } - - addVectors(a, b) { - this.x = a.x + b.x; - this.y = a.y + b.y; - this.z = a.z + b.z; - this.w = a.w + b.w; - - return this; - } - - addScaledVector(v, s) { - this.x += v.x * s; - this.y += v.y * s; - this.z += v.z * s; - this.w += v.w * s; - - return this; - } - - sub(v) { - this.x -= v.x; - this.y -= v.y; - this.z -= v.z; - this.w -= v.w; - - return this; - } - - subScalar(s) { - this.x -= s; - this.y -= s; - this.z -= s; - this.w -= s; - - return this; - } - - subVectors(a, b) { - this.x = a.x - b.x; - this.y = a.y - b.y; - this.z = a.z - b.z; - this.w = a.w - b.w; - - return this; - } - - multiply(v) { - this.x *= v.x; - this.y *= v.y; - this.z *= v.z; - this.w *= v.w; - - return this; - } - - multiplyScalar(scalar) { - this.x *= scalar; - this.y *= scalar; - this.z *= scalar; - this.w *= scalar; - - return this; - } - - applyMatrix4(m) { - const x = this.x, - y = this.y, - z = this.z, - w = this.w; - const e = m.elements; - - this.x = e[0] * x + e[4] * y + e[8] * z + e[12] * w; - this.y = e[1] * x + e[5] * y + e[9] * z + e[13] * w; - this.z = e[2] * x + e[6] * y + e[10] * z + e[14] * w; - this.w = e[3] * x + e[7] * y + e[11] * z + e[15] * w; - - return this; - } - - divideScalar(scalar) { - return this.multiplyScalar(1 / scalar); - } - - setAxisAngleFromQuaternion(q) { - // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm - - // q is assumed to be normalized - - this.w = 2 * Math.acos(q.w); - - const s = Math.sqrt(1 - q.w * q.w); - - if (s < 0.0001) { - this.x = 1; - this.y = 0; - this.z = 0; - } else { - this.x = q.x / s; - this.y = q.y / s; - this.z = q.z / s; - } - - return this; - } - - setAxisAngleFromRotationMatrix(m) { - // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm - - // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) - - let angle, x, y, z; // variables for result - const epsilon = 0.01, // margin to allow for rounding errors - epsilon2 = 0.1, // margin to distinguish between 0 and 180 degrees - te = m.elements, - m11 = te[0], - m12 = te[4], - m13 = te[8], - m21 = te[1], - m22 = te[5], - m23 = te[9], - m31 = te[2], - m32 = te[6], - m33 = te[10]; - - if (Math.abs(m12 - m21) < epsilon && Math.abs(m13 - m31) < epsilon && Math.abs(m23 - m32) < epsilon) { - // singularity found - // first check for identity matrix which must have +1 for all terms - // in leading diagonal and zero in other terms - - if (Math.abs(m12 + m21) < epsilon2 && Math.abs(m13 + m31) < epsilon2 && Math.abs(m23 + m32) < epsilon2 && Math.abs(m11 + m22 + m33 - 3) < epsilon2) { - // this singularity is identity matrix so angle = 0 - - this.set(1, 0, 0, 0); - - return this; // zero angle, arbitrary axis - } - - // otherwise this singularity is angle = 180 - - angle = Math.PI; - - const xx = (m11 + 1) / 2; - const yy = (m22 + 1) / 2; - const zz = (m33 + 1) / 2; - const xy = (m12 + m21) / 4; - const xz = (m13 + m31) / 4; - const yz = (m23 + m32) / 4; - - if (xx > yy && xx > zz) { - // m11 is the largest diagonal term - - if (xx < epsilon) { - x = 0; - y = 0.707106781; - z = 0.707106781; - } else { - x = Math.sqrt(xx); - y = xy / x; - z = xz / x; - } - } else if (yy > zz) { - // m22 is the largest diagonal term - - if (yy < epsilon) { - x = 0.707106781; - y = 0; - z = 0.707106781; - } else { - y = Math.sqrt(yy); - x = xy / y; - z = yz / y; - } - } else { - // m33 is the largest diagonal term so base result on this - - if (zz < epsilon) { - x = 0.707106781; - y = 0.707106781; - z = 0; - } else { - z = Math.sqrt(zz); - x = xz / z; - y = yz / z; - } - } - - this.set(x, y, z, angle); - - return this; // return 180 deg rotation - } - - // as we have reached here there are no singularities so we can handle normally - - let s = Math.sqrt((m32 - m23) * (m32 - m23) + (m13 - m31) * (m13 - m31) + (m21 - m12) * (m21 - m12)); // used to normalize - - if (Math.abs(s) < 0.001) s = 1; - - // prevent divide by zero, should not happen if matrix is orthogonal and should be - // caught by singularity test above, but I've left it in just in case - - this.x = (m32 - m23) / s; - this.y = (m13 - m31) / s; - this.z = (m21 - m12) / s; - this.w = Math.acos((m11 + m22 + m33 - 1) / 2); - - return this; - } - - setFromMatrixPosition(m) { - const e = m.elements; - - this.x = e[12]; - this.y = e[13]; - this.z = e[14]; - this.w = e[15]; - - return this; - } - - min(v) { - this.x = Math.min(this.x, v.x); - this.y = Math.min(this.y, v.y); - this.z = Math.min(this.z, v.z); - this.w = Math.min(this.w, v.w); - - return this; - } - - max(v) { - this.x = Math.max(this.x, v.x); - this.y = Math.max(this.y, v.y); - this.z = Math.max(this.z, v.z); - this.w = Math.max(this.w, v.w); - - return this; - } - - clamp(min, max) { - // assumes min < max, componentwise - - this.x = Math.max(min.x, Math.min(max.x, this.x)); - this.y = Math.max(min.y, Math.min(max.y, this.y)); - this.z = Math.max(min.z, Math.min(max.z, this.z)); - this.w = Math.max(min.w, Math.min(max.w, this.w)); - - return this; - } - - clampScalar(minVal, maxVal) { - this.x = Math.max(minVal, Math.min(maxVal, this.x)); - this.y = Math.max(minVal, Math.min(maxVal, this.y)); - this.z = Math.max(minVal, Math.min(maxVal, this.z)); - this.w = Math.max(minVal, Math.min(maxVal, this.w)); - - return this; - } - - clampLength(min, max) { - const length = this.length(); - - return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length))); - } - - floor() { - this.x = Math.floor(this.x); - this.y = Math.floor(this.y); - this.z = Math.floor(this.z); - this.w = Math.floor(this.w); - - return this; - } - - ceil() { - this.x = Math.ceil(this.x); - this.y = Math.ceil(this.y); - this.z = Math.ceil(this.z); - this.w = Math.ceil(this.w); - - return this; - } - - round() { - this.x = Math.round(this.x); - this.y = Math.round(this.y); - this.z = Math.round(this.z); - this.w = Math.round(this.w); - - return this; - } - - roundToZero() { - this.x = Math.trunc(this.x); - this.y = Math.trunc(this.y); - this.z = Math.trunc(this.z); - this.w = Math.trunc(this.w); - - return this; - } - - negate() { - this.x = -this.x; - this.y = -this.y; - this.z = -this.z; - this.w = -this.w; - - return this; - } - - dot(v) { - return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w; - } - - lengthSq() { - return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; - } - - length() { - return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); - } - - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w); - } - - normalize() { - return this.divideScalar(this.length() || 1); - } - - setLength(length) { - return this.normalize().multiplyScalar(length); - } - - lerp(v, alpha) { - this.x += (v.x - this.x) * alpha; - this.y += (v.y - this.y) * alpha; - this.z += (v.z - this.z) * alpha; - this.w += (v.w - this.w) * alpha; - - return this; - } - - lerpVectors(v1, v2, alpha) { - this.x = v1.x + (v2.x - v1.x) * alpha; - this.y = v1.y + (v2.y - v1.y) * alpha; - this.z = v1.z + (v2.z - v1.z) * alpha; - this.w = v1.w + (v2.w - v1.w) * alpha; - - return this; - } - - equals(v) { - return v.x === this.x && v.y === this.y && v.z === this.z && v.w === this.w; - } - - fromArray(array, offset = 0) { - this.x = array[offset]; - this.y = array[offset + 1]; - this.z = array[offset + 2]; - this.w = array[offset + 3]; - - return this; - } - - toArray(array = [], offset = 0) { - array[offset] = this.x; - array[offset + 1] = this.y; - array[offset + 2] = this.z; - array[offset + 3] = this.w; - - return array; - } - - fromBufferAttribute(attribute, index) { - this.x = attribute.getX(index); - this.y = attribute.getY(index); - this.z = attribute.getZ(index); - this.w = attribute.getW(index); - - return this; - } - - random() { - this.x = Math.random(); - this.y = Math.random(); - this.z = Math.random(); - this.w = Math.random(); - - return this; - } - - *[Symbol.iterator]() { - yield this.x; - yield this.y; - yield this.z; - yield this.w; - } -} - -/* - In options, we can specify: - * Texture parameters for an auto-generated target texture - * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers -*/ -class RenderTarget extends EventDispatcher { - constructor(width = 1, height = 1, options = {}) { - super(); - - this.isRenderTarget = true; - - this.width = width; - this.height = height; - this.depth = 1; - - this.scissor = new Vector4(0, 0, width, height); - this.scissorTest = false; - - this.viewport = new Vector4(0, 0, width, height); - - const image = { width: width, height: height, depth: 1 }; - - options = Object.assign( - { - generateMipmaps: false, - internalFormat: null, - minFilter: LinearFilter, - depthBuffer: true, - stencilBuffer: false, - resolveDepthBuffer: true, - resolveStencilBuffer: true, - depthTexture: null, - samples: 0, - count: 1, - }, - options - ); - - const texture = new Texture(image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace); - - texture.flipY = false; - texture.generateMipmaps = options.generateMipmaps; - texture.internalFormat = options.internalFormat; - - this.textures = []; - - const count = options.count; - for (let i = 0; i < count; i++) { - this.textures[i] = texture.clone(); - this.textures[i].isRenderTargetTexture = true; - } - - this.depthBuffer = options.depthBuffer; - this.stencilBuffer = options.stencilBuffer; - - this.resolveDepthBuffer = options.resolveDepthBuffer; - this.resolveStencilBuffer = options.resolveStencilBuffer; - - this.depthTexture = options.depthTexture; - - this.samples = options.samples; - } - - get texture() { - return this.textures[0]; - } - - set texture(value) { - this.textures[0] = value; - } - - setSize(width, height, depth = 1) { - if (this.width !== width || this.height !== height || this.depth !== depth) { - this.width = width; - this.height = height; - this.depth = depth; - - for (let i = 0, il = this.textures.length; i < il; i++) { - this.textures[i].image.width = width; - this.textures[i].image.height = height; - this.textures[i].image.depth = depth; - } - - this.dispose(); - } - - this.viewport.set(0, 0, width, height); - this.scissor.set(0, 0, width, height); - } - - clone() { - return new this.constructor().copy(this); - } - - copy(source) { - this.width = source.width; - this.height = source.height; - this.depth = source.depth; - - this.scissor.copy(source.scissor); - this.scissorTest = source.scissorTest; - - this.viewport.copy(source.viewport); - - this.textures.length = 0; - - for (let i = 0, il = source.textures.length; i < il; i++) { - this.textures[i] = source.textures[i].clone(); - this.textures[i].isRenderTargetTexture = true; - } - - // ensure image object is not shared, see #20328 - - const image = Object.assign({}, source.texture.image); - this.texture.source = new Source(image); - - this.depthBuffer = source.depthBuffer; - this.stencilBuffer = source.stencilBuffer; - - this.resolveDepthBuffer = source.resolveDepthBuffer; - this.resolveStencilBuffer = source.resolveStencilBuffer; - - if (source.depthTexture !== null) this.depthTexture = source.depthTexture.clone(); - - this.samples = source.samples; - - return this; - } - - dispose() { - this.dispatchEvent({ type: 'dispose' }); - } -} - -class WebGLRenderTarget extends RenderTarget { - constructor(width = 1, height = 1, options = {}) { - super(width, height, options); - - this.isWebGLRenderTarget = true; - } -} - -class DataArrayTexture extends Texture { - constructor(data = null, width = 1, height = 1, depth = 1) { - super(null); - - this.isDataArrayTexture = true; - - this.image = { data, width, height, depth }; - - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - - this.wrapR = ClampToEdgeWrapping; - - this.generateMipmaps = false; - this.flipY = false; - this.unpackAlignment = 1; - - this.layerUpdates = new Set(); - } - - addLayerUpdate(layerIndex) { - this.layerUpdates.add(layerIndex); - } - - clearLayerUpdates() { - this.layerUpdates.clear(); - } -} - -class WebGLArrayRenderTarget extends WebGLRenderTarget { - constructor(width = 1, height = 1, depth = 1, options = {}) { - super(width, height, options); - - this.isWebGLArrayRenderTarget = true; - - this.depth = depth; - - this.texture = new DataArrayTexture(null, width, height, depth); - - this.texture.isRenderTargetTexture = true; - } -} - -class Data3DTexture extends Texture { - constructor(data = null, width = 1, height = 1, depth = 1) { - // We're going to add .setXXX() methods for setting properties later. - // Users can still set in DataTexture3D directly. - // - // const texture = new THREE.DataTexture3D( data, width, height, depth ); - // texture.anisotropy = 16; - // - // See #14839 - - super(null); - - this.isData3DTexture = true; - - this.image = { data, width, height, depth }; - - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - - this.wrapR = ClampToEdgeWrapping; - - this.generateMipmaps = false; - this.flipY = false; - this.unpackAlignment = 1; - } -} - -class WebGL3DRenderTarget extends WebGLRenderTarget { - constructor(width = 1, height = 1, depth = 1, options = {}) { - super(width, height, options); - - this.isWebGL3DRenderTarget = true; - - this.depth = depth; - - this.texture = new Data3DTexture(null, width, height, depth); - - this.texture.isRenderTargetTexture = true; - } -} - -class Quaternion { - constructor(x = 0, y = 0, z = 0, w = 1) { - this.isQuaternion = true; - - this._x = x; - this._y = y; - this._z = z; - this._w = w; - } - - static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) { - // fuzz-free, array-based Quaternion SLERP operation - - let x0 = src0[srcOffset0 + 0], - y0 = src0[srcOffset0 + 1], - z0 = src0[srcOffset0 + 2], - w0 = src0[srcOffset0 + 3]; - - const x1 = src1[srcOffset1 + 0], - y1 = src1[srcOffset1 + 1], - z1 = src1[srcOffset1 + 2], - w1 = src1[srcOffset1 + 3]; - - if (t === 0) { - dst[dstOffset + 0] = x0; - dst[dstOffset + 1] = y0; - dst[dstOffset + 2] = z0; - dst[dstOffset + 3] = w0; - return; - } - - if (t === 1) { - dst[dstOffset + 0] = x1; - dst[dstOffset + 1] = y1; - dst[dstOffset + 2] = z1; - dst[dstOffset + 3] = w1; - return; - } - - if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) { - let s = 1 - t; - const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, - dir = cos >= 0 ? 1 : -1, - sqrSin = 1 - cos * cos; - - // Skip the Slerp for tiny steps to avoid numeric problems: - if (sqrSin > Number.EPSILON) { - const sin = Math.sqrt(sqrSin), - len = Math.atan2(sin, cos * dir); - - s = Math.sin(s * len) / sin; - t = Math.sin(t * len) / sin; - } - - const tDir = t * dir; - - x0 = x0 * s + x1 * tDir; - y0 = y0 * s + y1 * tDir; - z0 = z0 * s + z1 * tDir; - w0 = w0 * s + w1 * tDir; - - // Normalize in case we just did a lerp: - if (s === 1 - t) { - const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0); - - x0 *= f; - y0 *= f; - z0 *= f; - w0 *= f; - } - } - - dst[dstOffset] = x0; - dst[dstOffset + 1] = y0; - dst[dstOffset + 2] = z0; - dst[dstOffset + 3] = w0; - } - - static multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1) { - const x0 = src0[srcOffset0]; - const y0 = src0[srcOffset0 + 1]; - const z0 = src0[srcOffset0 + 2]; - const w0 = src0[srcOffset0 + 3]; - - const x1 = src1[srcOffset1]; - const y1 = src1[srcOffset1 + 1]; - const z1 = src1[srcOffset1 + 2]; - const w1 = src1[srcOffset1 + 3]; - - dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1; - dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1; - dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1; - dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1; - - return dst; - } - - get x() { - return this._x; - } - - set x(value) { - this._x = value; - this._onChangeCallback(); - } - - get y() { - return this._y; - } - - set y(value) { - this._y = value; - this._onChangeCallback(); - } - - get z() { - return this._z; - } - - set z(value) { - this._z = value; - this._onChangeCallback(); - } - - get w() { - return this._w; - } - - set w(value) { - this._w = value; - this._onChangeCallback(); - } - - set(x, y, z, w) { - this._x = x; - this._y = y; - this._z = z; - this._w = w; - - this._onChangeCallback(); - - return this; - } - - clone() { - return new this.constructor(this._x, this._y, this._z, this._w); - } - - copy(quaternion) { - this._x = quaternion.x; - this._y = quaternion.y; - this._z = quaternion.z; - this._w = quaternion.w; - - this._onChangeCallback(); - - return this; - } - - setFromEuler(euler, update = true) { - const x = euler._x, - y = euler._y, - z = euler._z, - order = euler._order; - - // http://www.mathworks.com/matlabcentral/fileexchange/ - // 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/ - // content/SpinCalc.m - - const cos = Math.cos; - const sin = Math.sin; - - const c1 = cos(x / 2); - const c2 = cos(y / 2); - const c3 = cos(z / 2); - - const s1 = sin(x / 2); - const s2 = sin(y / 2); - const s3 = sin(z / 2); - - switch (order) { - case 'XYZ': - this._x = s1 * c2 * c3 + c1 * s2 * s3; - this._y = c1 * s2 * c3 - s1 * c2 * s3; - this._z = c1 * c2 * s3 + s1 * s2 * c3; - this._w = c1 * c2 * c3 - s1 * s2 * s3; - break; - - case 'YXZ': - this._x = s1 * c2 * c3 + c1 * s2 * s3; - this._y = c1 * s2 * c3 - s1 * c2 * s3; - this._z = c1 * c2 * s3 - s1 * s2 * c3; - this._w = c1 * c2 * c3 + s1 * s2 * s3; - break; - - case 'ZXY': - this._x = s1 * c2 * c3 - c1 * s2 * s3; - this._y = c1 * s2 * c3 + s1 * c2 * s3; - this._z = c1 * c2 * s3 + s1 * s2 * c3; - this._w = c1 * c2 * c3 - s1 * s2 * s3; - break; - - case 'ZYX': - this._x = s1 * c2 * c3 - c1 * s2 * s3; - this._y = c1 * s2 * c3 + s1 * c2 * s3; - this._z = c1 * c2 * s3 - s1 * s2 * c3; - this._w = c1 * c2 * c3 + s1 * s2 * s3; - break; - - case 'YZX': - this._x = s1 * c2 * c3 + c1 * s2 * s3; - this._y = c1 * s2 * c3 + s1 * c2 * s3; - this._z = c1 * c2 * s3 - s1 * s2 * c3; - this._w = c1 * c2 * c3 - s1 * s2 * s3; - break; - - case 'XZY': - this._x = s1 * c2 * c3 - c1 * s2 * s3; - this._y = c1 * s2 * c3 - s1 * c2 * s3; - this._z = c1 * c2 * s3 + s1 * s2 * c3; - this._w = c1 * c2 * c3 + s1 * s2 * s3; - break; - - default: - console.warn('THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order); - } - - if (update === true) this._onChangeCallback(); - - return this; - } - - setFromAxisAngle(axis, angle) { - // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm - - // assumes axis is normalized - - const halfAngle = angle / 2, - s = Math.sin(halfAngle); - - this._x = axis.x * s; - this._y = axis.y * s; - this._z = axis.z * s; - this._w = Math.cos(halfAngle); - - this._onChangeCallback(); - - return this; - } - - setFromRotationMatrix(m) { - // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm - - // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) - - const te = m.elements, - m11 = te[0], - m12 = te[4], - m13 = te[8], - m21 = te[1], - m22 = te[5], - m23 = te[9], - m31 = te[2], - m32 = te[6], - m33 = te[10], - trace = m11 + m22 + m33; - - if (trace > 0) { - const s = 0.5 / Math.sqrt(trace + 1.0); - - this._w = 0.25 / s; - this._x = (m32 - m23) * s; - this._y = (m13 - m31) * s; - this._z = (m21 - m12) * s; - } else if (m11 > m22 && m11 > m33) { - const s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33); - - this._w = (m32 - m23) / s; - this._x = 0.25 * s; - this._y = (m12 + m21) / s; - this._z = (m13 + m31) / s; - } else if (m22 > m33) { - const s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33); - - this._w = (m13 - m31) / s; - this._x = (m12 + m21) / s; - this._y = 0.25 * s; - this._z = (m23 + m32) / s; - } else { - const s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22); - - this._w = (m21 - m12) / s; - this._x = (m13 + m31) / s; - this._y = (m23 + m32) / s; - this._z = 0.25 * s; - } - - this._onChangeCallback(); - - return this; - } - - setFromUnitVectors(vFrom, vTo) { - // assumes direction vectors vFrom and vTo are normalized - - let r = vFrom.dot(vTo) + 1; - - if (r < Number.EPSILON) { - // vFrom and vTo point in opposite directions - - r = 0; - - if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) { - this._x = -vFrom.y; - this._y = vFrom.x; - this._z = 0; - this._w = r; - } else { - this._x = 0; - this._y = -vFrom.z; - this._z = vFrom.y; - this._w = r; - } - } else { - // crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3 - - this._x = vFrom.y * vTo.z - vFrom.z * vTo.y; - this._y = vFrom.z * vTo.x - vFrom.x * vTo.z; - this._z = vFrom.x * vTo.y - vFrom.y * vTo.x; - this._w = r; - } - - return this.normalize(); - } - - angleTo(q) { - return 2 * Math.acos(Math.abs(clamp$1(this.dot(q), -1, 1))); - } - - rotateTowards(q, step) { - const angle = this.angleTo(q); - - if (angle === 0) return this; - - const t = Math.min(1, step / angle); - - this.slerp(q, t); - - return this; - } - - identity() { - return this.set(0, 0, 0, 1); - } - - invert() { - // quaternion is assumed to have unit length - - return this.conjugate(); - } - - conjugate() { - this._x *= -1; - this._y *= -1; - this._z *= -1; - - this._onChangeCallback(); - - return this; - } - - dot(v) { - return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w; - } - - lengthSq() { - return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w; - } - - length() { - return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w); - } - - normalize() { - let l = this.length(); - - if (l === 0) { - this._x = 0; - this._y = 0; - this._z = 0; - this._w = 1; - } else { - l = 1 / l; - - this._x = this._x * l; - this._y = this._y * l; - this._z = this._z * l; - this._w = this._w * l; - } - - this._onChangeCallback(); - - return this; - } - - multiply(q) { - return this.multiplyQuaternions(this, q); - } - - premultiply(q) { - return this.multiplyQuaternions(q, this); - } - - multiplyQuaternions(a, b) { - // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm - - const qax = a._x, - qay = a._y, - qaz = a._z, - qaw = a._w; - const qbx = b._x, - qby = b._y, - qbz = b._z, - qbw = b._w; - - this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; - this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; - this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; - this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; - - this._onChangeCallback(); - - return this; - } - - slerp(qb, t) { - if (t === 0) return this; - if (t === 1) return this.copy(qb); - - const x = this._x, - y = this._y, - z = this._z, - w = this._w; - - // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/ - - let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z; - - if (cosHalfTheta < 0) { - this._w = -qb._w; - this._x = -qb._x; - this._y = -qb._y; - this._z = -qb._z; - - cosHalfTheta = -cosHalfTheta; - } else { - this.copy(qb); - } - - if (cosHalfTheta >= 1.0) { - this._w = w; - this._x = x; - this._y = y; - this._z = z; - - return this; - } - - const sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta; - - if (sqrSinHalfTheta <= Number.EPSILON) { - const s = 1 - t; - this._w = s * w + t * this._w; - this._x = s * x + t * this._x; - this._y = s * y + t * this._y; - this._z = s * z + t * this._z; - - this.normalize(); // normalize calls _onChangeCallback() - - return this; - } - - const sinHalfTheta = Math.sqrt(sqrSinHalfTheta); - const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta); - const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta, - ratioB = Math.sin(t * halfTheta) / sinHalfTheta; - - this._w = w * ratioA + this._w * ratioB; - this._x = x * ratioA + this._x * ratioB; - this._y = y * ratioA + this._y * ratioB; - this._z = z * ratioA + this._z * ratioB; - - this._onChangeCallback(); - - return this; - } - - slerpQuaternions(qa, qb, t) { - return this.copy(qa).slerp(qb, t); - } - - random() { - // sets this quaternion to a uniform random unit quaternnion - - // Ken Shoemake - // Uniform random rotations - // D. Kirk, editor, Graphics Gems III, pages 124-132. Academic Press, New York, 1992. - - const theta1 = 2 * Math.PI * Math.random(); - const theta2 = 2 * Math.PI * Math.random(); - - const x0 = Math.random(); - const r1 = Math.sqrt(1 - x0); - const r2 = Math.sqrt(x0); - - return this.set(r1 * Math.sin(theta1), r1 * Math.cos(theta1), r2 * Math.sin(theta2), r2 * Math.cos(theta2)); - } - - equals(quaternion) { - return quaternion._x === this._x && quaternion._y === this._y && quaternion._z === this._z && quaternion._w === this._w; - } - - fromArray(array, offset = 0) { - this._x = array[offset]; - this._y = array[offset + 1]; - this._z = array[offset + 2]; - this._w = array[offset + 3]; - - this._onChangeCallback(); - - return this; - } - - toArray(array = [], offset = 0) { - array[offset] = this._x; - array[offset + 1] = this._y; - array[offset + 2] = this._z; - array[offset + 3] = this._w; - - return array; - } - - fromBufferAttribute(attribute, index) { - this._x = attribute.getX(index); - this._y = attribute.getY(index); - this._z = attribute.getZ(index); - this._w = attribute.getW(index); - - this._onChangeCallback(); - - return this; - } - - toJSON() { - return this.toArray(); - } - - _onChange(callback) { - this._onChangeCallback = callback; - - return this; - } - - _onChangeCallback() {} - - *[Symbol.iterator]() { - yield this._x; - yield this._y; - yield this._z; - yield this._w; - } -} - -class Vector3 { - constructor(x = 0, y = 0, z = 0) { - Vector3.prototype.isVector3 = true; - - this.x = x; - this.y = y; - this.z = z; - } - - set(x, y, z) { - if (z === undefined) z = this.z; // sprite.scale.set(x,y) - - this.x = x; - this.y = y; - this.z = z; - - return this; - } - - setScalar(scalar) { - this.x = scalar; - this.y = scalar; - this.z = scalar; - - return this; - } - - setX(x) { - this.x = x; - - return this; - } - - setY(y) { - this.y = y; - - return this; - } - - setZ(z) { - this.z = z; - - return this; - } - - setComponent(index, value) { - switch (index) { - case 0: - this.x = value; - break; - case 1: - this.y = value; - break; - case 2: - this.z = value; - break; - default: - throw new Error('index is out of range: ' + index); - } - - return this; - } - - getComponent(index) { - switch (index) { - case 0: - return this.x; - case 1: - return this.y; - case 2: - return this.z; - default: - throw new Error('index is out of range: ' + index); - } - } - - clone() { - return new this.constructor(this.x, this.y, this.z); - } - - copy(v) { - this.x = v.x; - this.y = v.y; - this.z = v.z; - - return this; - } - - add(v) { - this.x += v.x; - this.y += v.y; - this.z += v.z; - - return this; - } - - addScalar(s) { - this.x += s; - this.y += s; - this.z += s; - - return this; - } - - addVectors(a, b) { - this.x = a.x + b.x; - this.y = a.y + b.y; - this.z = a.z + b.z; - - return this; - } - - addScaledVector(v, s) { - this.x += v.x * s; - this.y += v.y * s; - this.z += v.z * s; - - return this; - } - - sub(v) { - this.x -= v.x; - this.y -= v.y; - this.z -= v.z; - - return this; - } - - subScalar(s) { - this.x -= s; - this.y -= s; - this.z -= s; - - return this; - } - - subVectors(a, b) { - this.x = a.x - b.x; - this.y = a.y - b.y; - this.z = a.z - b.z; - - return this; - } - - multiply(v) { - this.x *= v.x; - this.y *= v.y; - this.z *= v.z; - - return this; - } - - multiplyScalar(scalar) { - this.x *= scalar; - this.y *= scalar; - this.z *= scalar; - - return this; - } - - multiplyVectors(a, b) { - this.x = a.x * b.x; - this.y = a.y * b.y; - this.z = a.z * b.z; - - return this; - } - - applyEuler(euler) { - return this.applyQuaternion(_quaternion$4.setFromEuler(euler)); - } - - applyAxisAngle(axis, angle) { - return this.applyQuaternion(_quaternion$4.setFromAxisAngle(axis, angle)); - } - - applyMatrix3(m) { - const x = this.x, - y = this.y, - z = this.z; - const e = m.elements; - - this.x = e[0] * x + e[3] * y + e[6] * z; - this.y = e[1] * x + e[4] * y + e[7] * z; - this.z = e[2] * x + e[5] * y + e[8] * z; - - return this; - } - - applyNormalMatrix(m) { - return this.applyMatrix3(m).normalize(); - } - - applyMatrix4(m) { - const x = this.x, - y = this.y, - z = this.z; - const e = m.elements; - - const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]); - - this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w; - this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w; - this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w; - - return this; - } - - applyQuaternion(q) { - // quaternion q is assumed to have unit length - - const vx = this.x, - vy = this.y, - vz = this.z; - const qx = q.x, - qy = q.y, - qz = q.z, - qw = q.w; - - // t = 2 * cross( q.xyz, v ); - const tx = 2 * (qy * vz - qz * vy); - const ty = 2 * (qz * vx - qx * vz); - const tz = 2 * (qx * vy - qy * vx); - - // v + q.w * t + cross( q.xyz, t ); - this.x = vx + qw * tx + qy * tz - qz * ty; - this.y = vy + qw * ty + qz * tx - qx * tz; - this.z = vz + qw * tz + qx * ty - qy * tx; - - return this; - } - - project(camera) { - return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix); - } - - unproject(camera) { - return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld); - } - - transformDirection(m) { - // input: THREE.Matrix4 affine matrix - // vector interpreted as a direction - - const x = this.x, - y = this.y, - z = this.z; - const e = m.elements; - - this.x = e[0] * x + e[4] * y + e[8] * z; - this.y = e[1] * x + e[5] * y + e[9] * z; - this.z = e[2] * x + e[6] * y + e[10] * z; - - return this.normalize(); - } - - divide(v) { - this.x /= v.x; - this.y /= v.y; - this.z /= v.z; - - return this; - } - - divideScalar(scalar) { - return this.multiplyScalar(1 / scalar); - } - - min(v) { - this.x = Math.min(this.x, v.x); - this.y = Math.min(this.y, v.y); - this.z = Math.min(this.z, v.z); - - return this; - } - - max(v) { - this.x = Math.max(this.x, v.x); - this.y = Math.max(this.y, v.y); - this.z = Math.max(this.z, v.z); - - return this; - } - - clamp(min, max) { - // assumes min < max, componentwise - - this.x = Math.max(min.x, Math.min(max.x, this.x)); - this.y = Math.max(min.y, Math.min(max.y, this.y)); - this.z = Math.max(min.z, Math.min(max.z, this.z)); - - return this; - } - - clampScalar(minVal, maxVal) { - this.x = Math.max(minVal, Math.min(maxVal, this.x)); - this.y = Math.max(minVal, Math.min(maxVal, this.y)); - this.z = Math.max(minVal, Math.min(maxVal, this.z)); - - return this; - } - - clampLength(min, max) { - const length = this.length(); - - return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length))); - } - - floor() { - this.x = Math.floor(this.x); - this.y = Math.floor(this.y); - this.z = Math.floor(this.z); - - return this; - } - - ceil() { - this.x = Math.ceil(this.x); - this.y = Math.ceil(this.y); - this.z = Math.ceil(this.z); - - return this; - } - - round() { - this.x = Math.round(this.x); - this.y = Math.round(this.y); - this.z = Math.round(this.z); - - return this; - } - - roundToZero() { - this.x = Math.trunc(this.x); - this.y = Math.trunc(this.y); - this.z = Math.trunc(this.z); - - return this; - } - - negate() { - this.x = -this.x; - this.y = -this.y; - this.z = -this.z; - - return this; - } - - dot(v) { - return this.x * v.x + this.y * v.y + this.z * v.z; - } - - // TODO lengthSquared? - - lengthSq() { - return this.x * this.x + this.y * this.y + this.z * this.z; - } - - length() { - return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); - } - - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z); - } - - normalize() { - return this.divideScalar(this.length() || 1); - } - - setLength(length) { - return this.normalize().multiplyScalar(length); - } - - lerp(v, alpha) { - this.x += (v.x - this.x) * alpha; - this.y += (v.y - this.y) * alpha; - this.z += (v.z - this.z) * alpha; - - return this; - } - - lerpVectors(v1, v2, alpha) { - this.x = v1.x + (v2.x - v1.x) * alpha; - this.y = v1.y + (v2.y - v1.y) * alpha; - this.z = v1.z + (v2.z - v1.z) * alpha; - - return this; - } - - cross(v) { - return this.crossVectors(this, v); - } - - crossVectors(a, b) { - const ax = a.x, - ay = a.y, - az = a.z; - const bx = b.x, - by = b.y, - bz = b.z; - - this.x = ay * bz - az * by; - this.y = az * bx - ax * bz; - this.z = ax * by - ay * bx; - - return this; - } - - projectOnVector(v) { - const denominator = v.lengthSq(); - - if (denominator === 0) return this.set(0, 0, 0); - - const scalar = v.dot(this) / denominator; - - return this.copy(v).multiplyScalar(scalar); - } - - projectOnPlane(planeNormal) { - _vector$c.copy(this).projectOnVector(planeNormal); - - return this.sub(_vector$c); - } - - reflect(normal) { - // reflect incident vector off plane orthogonal to normal - // normal is assumed to have unit length - - return this.sub(_vector$c.copy(normal).multiplyScalar(2 * this.dot(normal))); - } - - angleTo(v) { - const denominator = Math.sqrt(this.lengthSq() * v.lengthSq()); - - if (denominator === 0) return Math.PI / 2; - - const theta = this.dot(v) / denominator; - - // clamp, to handle numerical problems - - return Math.acos(clamp$1(theta, -1, 1)); - } - - distanceTo(v) { - return Math.sqrt(this.distanceToSquared(v)); - } - - distanceToSquared(v) { - const dx = this.x - v.x, - dy = this.y - v.y, - dz = this.z - v.z; - - return dx * dx + dy * dy + dz * dz; - } - - manhattanDistanceTo(v) { - return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z); - } - - setFromSpherical(s) { - return this.setFromSphericalCoords(s.radius, s.phi, s.theta); - } - - setFromSphericalCoords(radius, phi, theta) { - const sinPhiRadius = Math.sin(phi) * radius; - - this.x = sinPhiRadius * Math.sin(theta); - this.y = Math.cos(phi) * radius; - this.z = sinPhiRadius * Math.cos(theta); - - return this; - } - - setFromCylindrical(c) { - return this.setFromCylindricalCoords(c.radius, c.theta, c.y); - } - - setFromCylindricalCoords(radius, theta, y) { - this.x = radius * Math.sin(theta); - this.y = y; - this.z = radius * Math.cos(theta); - - return this; - } - - setFromMatrixPosition(m) { - const e = m.elements; - - this.x = e[12]; - this.y = e[13]; - this.z = e[14]; - - return this; - } - - setFromMatrixScale(m) { - const sx = this.setFromMatrixColumn(m, 0).length(); - const sy = this.setFromMatrixColumn(m, 1).length(); - const sz = this.setFromMatrixColumn(m, 2).length(); - - this.x = sx; - this.y = sy; - this.z = sz; - - return this; - } - - setFromMatrixColumn(m, index) { - return this.fromArray(m.elements, index * 4); - } - - setFromMatrix3Column(m, index) { - return this.fromArray(m.elements, index * 3); - } - - setFromEuler(e) { - this.x = e._x; - this.y = e._y; - this.z = e._z; - - return this; - } - - setFromColor(c) { - this.x = c.r; - this.y = c.g; - this.z = c.b; - - return this; - } - - equals(v) { - return v.x === this.x && v.y === this.y && v.z === this.z; - } - - fromArray(array, offset = 0) { - this.x = array[offset]; - this.y = array[offset + 1]; - this.z = array[offset + 2]; - - return this; - } - - toArray(array = [], offset = 0) { - array[offset] = this.x; - array[offset + 1] = this.y; - array[offset + 2] = this.z; - - return array; - } - - fromBufferAttribute(attribute, index) { - this.x = attribute.getX(index); - this.y = attribute.getY(index); - this.z = attribute.getZ(index); - - return this; - } - - random() { - this.x = Math.random(); - this.y = Math.random(); - this.z = Math.random(); - - return this; - } - - randomDirection() { - // https://mathworld.wolfram.com/SpherePointPicking.html - - const theta = Math.random() * Math.PI * 2; - const u = Math.random() * 2 - 1; - const c = Math.sqrt(1 - u * u); - - this.x = c * Math.cos(theta); - this.y = u; - this.z = c * Math.sin(theta); - - return this; - } - - *[Symbol.iterator]() { - yield this.x; - yield this.y; - yield this.z; - } -} - -const _vector$c = /*@__PURE__*/ new Vector3(); -const _quaternion$4 = /*@__PURE__*/ new Quaternion(); - -class Box3 { - constructor(min = new Vector3(+Infinity, +Infinity, +Infinity), max = new Vector3(-Infinity, -Infinity, -Infinity)) { - this.isBox3 = true; - - this.min = min; - this.max = max; - } - - set(min, max) { - this.min.copy(min); - this.max.copy(max); - - return this; - } - - setFromArray(array) { - this.makeEmpty(); - - for (let i = 0, il = array.length; i < il; i += 3) { - this.expandByPoint(_vector$b.fromArray(array, i)); - } - - return this; - } - - setFromBufferAttribute(attribute) { - this.makeEmpty(); - - for (let i = 0, il = attribute.count; i < il; i++) { - this.expandByPoint(_vector$b.fromBufferAttribute(attribute, i)); - } - - return this; - } - - setFromPoints(points) { - this.makeEmpty(); - - for (let i = 0, il = points.length; i < il; i++) { - this.expandByPoint(points[i]); - } - - return this; - } - - setFromCenterAndSize(center, size) { - const halfSize = _vector$b.copy(size).multiplyScalar(0.5); - - this.min.copy(center).sub(halfSize); - this.max.copy(center).add(halfSize); - - return this; - } - - setFromObject(object, precise = false) { - this.makeEmpty(); - - return this.expandByObject(object, precise); - } - - clone() { - return new this.constructor().copy(this); - } - - copy(box) { - this.min.copy(box.min); - this.max.copy(box.max); - - return this; - } - - makeEmpty() { - this.min.x = this.min.y = this.min.z = +Infinity; - this.max.x = this.max.y = this.max.z = -Infinity; - - return this; - } - - isEmpty() { - // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes - - return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z; - } - - getCenter(target) { - return this.isEmpty() ? target.set(0, 0, 0) : target.addVectors(this.min, this.max).multiplyScalar(0.5); - } - - getSize(target) { - return this.isEmpty() ? target.set(0, 0, 0) : target.subVectors(this.max, this.min); - } - - expandByPoint(point) { - this.min.min(point); - this.max.max(point); - - return this; - } - - expandByVector(vector) { - this.min.sub(vector); - this.max.add(vector); - - return this; - } - - expandByScalar(scalar) { - this.min.addScalar(-scalar); - this.max.addScalar(scalar); - - return this; - } - - expandByObject(object, precise = false) { - // Computes the world-axis-aligned bounding box of an object (including its children), - // accounting for both the object's, and children's, world transforms - - object.updateWorldMatrix(false, false); - - const geometry = object.geometry; - - if (geometry !== undefined) { - const positionAttribute = geometry.getAttribute('position'); - - // precise AABB computation based on vertex data requires at least a position attribute. - // instancing isn't supported so far and uses the normal (conservative) code path. - - if (precise === true && positionAttribute !== undefined && object.isInstancedMesh !== true) { - for (let i = 0, l = positionAttribute.count; i < l; i++) { - if (object.isMesh === true) { - object.getVertexPosition(i, _vector$b); - } else { - _vector$b.fromBufferAttribute(positionAttribute, i); - } - - _vector$b.applyMatrix4(object.matrixWorld); - this.expandByPoint(_vector$b); - } - } else { - if (object.boundingBox !== undefined) { - // object-level bounding box - - if (object.boundingBox === null) { - object.computeBoundingBox(); - } - - _box$4.copy(object.boundingBox); - } else { - // geometry-level bounding box - - if (geometry.boundingBox === null) { - geometry.computeBoundingBox(); - } - - _box$4.copy(geometry.boundingBox); - } - - _box$4.applyMatrix4(object.matrixWorld); - - this.union(_box$4); - } - } - - const children = object.children; - - for (let i = 0, l = children.length; i < l; i++) { - this.expandByObject(children[i], precise); - } - - return this; - } - - containsPoint(point) { - return point.x >= this.min.x && point.x <= this.max.x && point.y >= this.min.y && point.y <= this.max.y && point.z >= this.min.z && point.z <= this.max.z; - } - - containsBox(box) { - return this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y && this.min.z <= box.min.z && box.max.z <= this.max.z; - } - - getParameter(point, target) { - // This can potentially have a divide by zero if the box - // has a size dimension of 0. - - return target.set((point.x - this.min.x) / (this.max.x - this.min.x), (point.y - this.min.y) / (this.max.y - this.min.y), (point.z - this.min.z) / (this.max.z - this.min.z)); - } - - intersectsBox(box) { - // using 6 splitting planes to rule out intersections. - return box.max.x >= this.min.x && box.min.x <= this.max.x && box.max.y >= this.min.y && box.min.y <= this.max.y && box.max.z >= this.min.z && box.min.z <= this.max.z; - } - - intersectsSphere(sphere) { - // Find the point on the AABB closest to the sphere center. - this.clampPoint(sphere.center, _vector$b); - - // If that point is inside the sphere, the AABB and sphere intersect. - return _vector$b.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius; - } - - intersectsPlane(plane) { - // We compute the minimum and maximum dot product values. If those values - // are on the same side (back or front) of the plane, then there is no intersection. - - let min, max; - - if (plane.normal.x > 0) { - min = plane.normal.x * this.min.x; - max = plane.normal.x * this.max.x; - } else { - min = plane.normal.x * this.max.x; - max = plane.normal.x * this.min.x; - } - - if (plane.normal.y > 0) { - min += plane.normal.y * this.min.y; - max += plane.normal.y * this.max.y; - } else { - min += plane.normal.y * this.max.y; - max += plane.normal.y * this.min.y; - } - - if (plane.normal.z > 0) { - min += plane.normal.z * this.min.z; - max += plane.normal.z * this.max.z; - } else { - min += plane.normal.z * this.max.z; - max += plane.normal.z * this.min.z; - } - - return min <= -plane.constant && max >= -plane.constant; - } - - intersectsTriangle(triangle) { - if (this.isEmpty()) { - return false; - } - - // compute box center and extents - this.getCenter(_center); - _extents.subVectors(this.max, _center); - - // translate triangle to aabb origin - _v0$2.subVectors(triangle.a, _center); - _v1$7.subVectors(triangle.b, _center); - _v2$4.subVectors(triangle.c, _center); - - // compute edge vectors for triangle - _f0.subVectors(_v1$7, _v0$2); - _f1.subVectors(_v2$4, _v1$7); - _f2.subVectors(_v0$2, _v2$4); - - // test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb - // make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation - // axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned) - let axes = [0, -_f0.z, _f0.y, 0, -_f1.z, _f1.y, 0, -_f2.z, _f2.y, _f0.z, 0, -_f0.x, _f1.z, 0, -_f1.x, _f2.z, 0, -_f2.x, -_f0.y, _f0.x, 0, -_f1.y, _f1.x, 0, -_f2.y, _f2.x, 0]; - if (!satForAxes(axes, _v0$2, _v1$7, _v2$4, _extents)) { - return false; - } - - // test 3 face normals from the aabb - axes = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - if (!satForAxes(axes, _v0$2, _v1$7, _v2$4, _extents)) { - return false; - } - - // finally testing the face normal of the triangle - // use already existing triangle edge vectors here - _triangleNormal.crossVectors(_f0, _f1); - axes = [_triangleNormal.x, _triangleNormal.y, _triangleNormal.z]; - - return satForAxes(axes, _v0$2, _v1$7, _v2$4, _extents); - } - - clampPoint(point, target) { - return target.copy(point).clamp(this.min, this.max); - } - - distanceToPoint(point) { - return this.clampPoint(point, _vector$b).distanceTo(point); - } - - getBoundingSphere(target) { - if (this.isEmpty()) { - target.makeEmpty(); - } else { - this.getCenter(target.center); - - target.radius = this.getSize(_vector$b).length() * 0.5; - } - - return target; - } - - intersect(box) { - this.min.max(box.min); - this.max.min(box.max); - - // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values. - if (this.isEmpty()) this.makeEmpty(); - - return this; - } - - union(box) { - this.min.min(box.min); - this.max.max(box.max); - - return this; - } - - applyMatrix4(matrix) { - // transform of empty box is an empty box. - if (this.isEmpty()) return this; - - // NOTE: I am using a binary pattern to specify all 2^3 combinations below - _points[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(matrix); // 000 - _points[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(matrix); // 001 - _points[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(matrix); // 010 - _points[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(matrix); // 011 - _points[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(matrix); // 100 - _points[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(matrix); // 101 - _points[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(matrix); // 110 - _points[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(matrix); // 111 - - this.setFromPoints(_points); - - return this; - } - - translate(offset) { - this.min.add(offset); - this.max.add(offset); - - return this; - } - - equals(box) { - return box.min.equals(this.min) && box.max.equals(this.max); - } -} - -const _points = [/*@__PURE__*/ new Vector3(), /*@__PURE__*/ new Vector3(), /*@__PURE__*/ new Vector3(), /*@__PURE__*/ new Vector3(), /*@__PURE__*/ new Vector3(), /*@__PURE__*/ new Vector3(), /*@__PURE__*/ new Vector3(), /*@__PURE__*/ new Vector3()]; - -const _vector$b = /*@__PURE__*/ new Vector3(); - -const _box$4 = /*@__PURE__*/ new Box3(); - -// triangle centered vertices - -const _v0$2 = /*@__PURE__*/ new Vector3(); -const _v1$7 = /*@__PURE__*/ new Vector3(); -const _v2$4 = /*@__PURE__*/ new Vector3(); - -// triangle edge vectors - -const _f0 = /*@__PURE__*/ new Vector3(); -const _f1 = /*@__PURE__*/ new Vector3(); -const _f2 = /*@__PURE__*/ new Vector3(); - -const _center = /*@__PURE__*/ new Vector3(); -const _extents = /*@__PURE__*/ new Vector3(); -const _triangleNormal = /*@__PURE__*/ new Vector3(); -const _testAxis = /*@__PURE__*/ new Vector3(); - -function satForAxes(axes, v0, v1, v2, extents) { - for (let i = 0, j = axes.length - 3; i <= j; i += 3) { - _testAxis.fromArray(axes, i); - // project the aabb onto the separating axis - const r = extents.x * Math.abs(_testAxis.x) + extents.y * Math.abs(_testAxis.y) + extents.z * Math.abs(_testAxis.z); - // project all 3 vertices of the triangle onto the separating axis - const p0 = v0.dot(_testAxis); - const p1 = v1.dot(_testAxis); - const p2 = v2.dot(_testAxis); - // actual test, basically see if either of the most extreme of the triangle points intersects r - if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) { - // points of the projected triangle are outside the projected half-length of the aabb - // the axis is separating and we can exit - return false; - } - } - - return true; -} - -const _box$3 = /*@__PURE__*/ new Box3(); -const _v1$6 = /*@__PURE__*/ new Vector3(); -const _v2$3 = /*@__PURE__*/ new Vector3(); - -class Sphere { - constructor(center = new Vector3(), radius = -1) { - this.isSphere = true; - - this.center = center; - this.radius = radius; - } - - set(center, radius) { - this.center.copy(center); - this.radius = radius; - - return this; - } - - setFromPoints(points, optionalCenter) { - const center = this.center; - - if (optionalCenter !== undefined) { - center.copy(optionalCenter); - } else { - _box$3.setFromPoints(points).getCenter(center); - } - - let maxRadiusSq = 0; - - for (let i = 0, il = points.length; i < il; i++) { - maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(points[i])); - } - - this.radius = Math.sqrt(maxRadiusSq); - - return this; - } - - copy(sphere) { - this.center.copy(sphere.center); - this.radius = sphere.radius; - - return this; - } - - isEmpty() { - return this.radius < 0; - } - - makeEmpty() { - this.center.set(0, 0, 0); - this.radius = -1; - - return this; - } - - containsPoint(point) { - return point.distanceToSquared(this.center) <= this.radius * this.radius; - } - - distanceToPoint(point) { - return point.distanceTo(this.center) - this.radius; - } - - intersectsSphere(sphere) { - const radiusSum = this.radius + sphere.radius; - - return sphere.center.distanceToSquared(this.center) <= radiusSum * radiusSum; - } - - intersectsBox(box) { - return box.intersectsSphere(this); - } - - intersectsPlane(plane) { - return Math.abs(plane.distanceToPoint(this.center)) <= this.radius; - } - - clampPoint(point, target) { - const deltaLengthSq = this.center.distanceToSquared(point); - - target.copy(point); - - if (deltaLengthSq > this.radius * this.radius) { - target.sub(this.center).normalize(); - target.multiplyScalar(this.radius).add(this.center); - } - - return target; - } - - getBoundingBox(target) { - if (this.isEmpty()) { - // Empty sphere produces empty bounding box - target.makeEmpty(); - return target; - } - - target.set(this.center, this.center); - target.expandByScalar(this.radius); - - return target; - } - - applyMatrix4(matrix) { - this.center.applyMatrix4(matrix); - this.radius = this.radius * matrix.getMaxScaleOnAxis(); - - return this; - } - - translate(offset) { - this.center.add(offset); - - return this; - } - - expandByPoint(point) { - if (this.isEmpty()) { - this.center.copy(point); - - this.radius = 0; - - return this; - } - - _v1$6.subVectors(point, this.center); - - const lengthSq = _v1$6.lengthSq(); - - if (lengthSq > this.radius * this.radius) { - // calculate the minimal sphere - - const length = Math.sqrt(lengthSq); - - const delta = (length - this.radius) * 0.5; - - this.center.addScaledVector(_v1$6, delta / length); - - this.radius += delta; - } - - return this; - } - - union(sphere) { - if (sphere.isEmpty()) { - return this; - } - - if (this.isEmpty()) { - this.copy(sphere); - - return this; - } - - if (this.center.equals(sphere.center) === true) { - this.radius = Math.max(this.radius, sphere.radius); - } else { - _v2$3.subVectors(sphere.center, this.center).setLength(sphere.radius); - - this.expandByPoint(_v1$6.copy(sphere.center).add(_v2$3)); - - this.expandByPoint(_v1$6.copy(sphere.center).sub(_v2$3)); - } - - return this; - } - - equals(sphere) { - return sphere.center.equals(this.center) && sphere.radius === this.radius; - } - - clone() { - return new this.constructor().copy(this); - } -} - -const _vector$a = /*@__PURE__*/ new Vector3(); -const _segCenter = /*@__PURE__*/ new Vector3(); -const _segDir = /*@__PURE__*/ new Vector3(); -const _diff = /*@__PURE__*/ new Vector3(); - -const _edge1 = /*@__PURE__*/ new Vector3(); -const _edge2 = /*@__PURE__*/ new Vector3(); -const _normal$2 = /*@__PURE__*/ new Vector3(); - -class Ray { - constructor(origin = new Vector3(), direction = new Vector3(0, 0, -1)) { - this.origin = origin; - this.direction = direction; - } - - set(origin, direction) { - this.origin.copy(origin); - this.direction.copy(direction); - - return this; - } - - copy(ray) { - this.origin.copy(ray.origin); - this.direction.copy(ray.direction); - - return this; - } - - at(t, target) { - return target.copy(this.origin).addScaledVector(this.direction, t); - } - - lookAt(v) { - this.direction.copy(v).sub(this.origin).normalize(); - - return this; - } - - recast(t) { - this.origin.copy(this.at(t, _vector$a)); - - return this; - } - - closestPointToPoint(point, target) { - target.subVectors(point, this.origin); - - const directionDistance = target.dot(this.direction); - - if (directionDistance < 0) { - return target.copy(this.origin); - } - - return target.copy(this.origin).addScaledVector(this.direction, directionDistance); - } - - distanceToPoint(point) { - return Math.sqrt(this.distanceSqToPoint(point)); - } - - distanceSqToPoint(point) { - const directionDistance = _vector$a.subVectors(point, this.origin).dot(this.direction); - - // point behind the ray - - if (directionDistance < 0) { - return this.origin.distanceToSquared(point); - } - - _vector$a.copy(this.origin).addScaledVector(this.direction, directionDistance); - - return _vector$a.distanceToSquared(point); - } - - distanceSqToSegment(v0, v1, optionalPointOnRay, optionalPointOnSegment) { - // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h - // It returns the min distance between the ray and the segment - // defined by v0 and v1 - // It can also set two optional targets : - // - The closest point on the ray - // - The closest point on the segment - - _segCenter.copy(v0).add(v1).multiplyScalar(0.5); - _segDir.copy(v1).sub(v0).normalize(); - _diff.copy(this.origin).sub(_segCenter); - - const segExtent = v0.distanceTo(v1) * 0.5; - const a01 = -this.direction.dot(_segDir); - const b0 = _diff.dot(this.direction); - const b1 = -_diff.dot(_segDir); - const c = _diff.lengthSq(); - const det = Math.abs(1 - a01 * a01); - let s0, s1, sqrDist, extDet; - - if (det > 0) { - // The ray and segment are not parallel. - - s0 = a01 * b1 - b0; - s1 = a01 * b0 - b1; - extDet = segExtent * det; - - if (s0 >= 0) { - if (s1 >= -extDet) { - if (s1 <= extDet) { - // region 0 - // Minimum at interior points of ray and segment. - - const invDet = 1 / det; - s0 *= invDet; - s1 *= invDet; - sqrDist = s0 * (s0 + a01 * s1 + 2 * b0) + s1 * (a01 * s0 + s1 + 2 * b1) + c; - } else { - // region 1 - - s1 = segExtent; - s0 = Math.max(0, -(a01 * s1 + b0)); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } - } else { - // region 5 - - s1 = -segExtent; - s0 = Math.max(0, -(a01 * s1 + b0)); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } - } else { - if (s1 <= -extDet) { - // region 4 - - s0 = Math.max(0, -(-a01 * segExtent + b0)); - s1 = s0 > 0 ? -segExtent : Math.min(Math.max(-segExtent, -b1), segExtent); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } else if (s1 <= extDet) { - // region 3 - - s0 = 0; - s1 = Math.min(Math.max(-segExtent, -b1), segExtent); - sqrDist = s1 * (s1 + 2 * b1) + c; - } else { - // region 2 - - s0 = Math.max(0, -(a01 * segExtent + b0)); - s1 = s0 > 0 ? segExtent : Math.min(Math.max(-segExtent, -b1), segExtent); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } - } - } else { - // Ray and segment are parallel. - - s1 = a01 > 0 ? -segExtent : segExtent; - s0 = Math.max(0, -(a01 * s1 + b0)); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } - - if (optionalPointOnRay) { - optionalPointOnRay.copy(this.origin).addScaledVector(this.direction, s0); - } - - if (optionalPointOnSegment) { - optionalPointOnSegment.copy(_segCenter).addScaledVector(_segDir, s1); - } - - return sqrDist; - } - - intersectSphere(sphere, target) { - _vector$a.subVectors(sphere.center, this.origin); - const tca = _vector$a.dot(this.direction); - const d2 = _vector$a.dot(_vector$a) - tca * tca; - const radius2 = sphere.radius * sphere.radius; - - if (d2 > radius2) return null; - - const thc = Math.sqrt(radius2 - d2); - - // t0 = first intersect point - entrance on front of sphere - const t0 = tca - thc; - - // t1 = second intersect point - exit point on back of sphere - const t1 = tca + thc; - - // test to see if t1 is behind the ray - if so, return null - if (t1 < 0) return null; - - // test to see if t0 is behind the ray: - // if it is, the ray is inside the sphere, so return the second exit point scaled by t1, - // in order to always return an intersect point that is in front of the ray. - if (t0 < 0) return this.at(t1, target); - - // else t0 is in front of the ray, so return the first collision point scaled by t0 - return this.at(t0, target); - } - - intersectsSphere(sphere) { - return this.distanceSqToPoint(sphere.center) <= sphere.radius * sphere.radius; - } - - distanceToPlane(plane) { - const denominator = plane.normal.dot(this.direction); - - if (denominator === 0) { - // line is coplanar, return origin - if (plane.distanceToPoint(this.origin) === 0) { - return 0; - } - - // Null is preferable to undefined since undefined means.... it is undefined - - return null; - } - - const t = -(this.origin.dot(plane.normal) + plane.constant) / denominator; - - // Return if the ray never intersects the plane - - return t >= 0 ? t : null; - } - - intersectPlane(plane, target) { - const t = this.distanceToPlane(plane); - - if (t === null) { - return null; - } - - return this.at(t, target); - } - - intersectsPlane(plane) { - // check if the ray lies on the plane first - - const distToPoint = plane.distanceToPoint(this.origin); - - if (distToPoint === 0) { - return true; - } - - const denominator = plane.normal.dot(this.direction); - - if (denominator * distToPoint < 0) { - return true; - } - - // ray origin is behind the plane (and is pointing behind it) - - return false; - } - - intersectBox(box, target) { - let tmin, tmax, tymin, tymax, tzmin, tzmax; - - const invdirx = 1 / this.direction.x, - invdiry = 1 / this.direction.y, - invdirz = 1 / this.direction.z; - - const origin = this.origin; - - if (invdirx >= 0) { - tmin = (box.min.x - origin.x) * invdirx; - tmax = (box.max.x - origin.x) * invdirx; - } else { - tmin = (box.max.x - origin.x) * invdirx; - tmax = (box.min.x - origin.x) * invdirx; - } - - if (invdiry >= 0) { - tymin = (box.min.y - origin.y) * invdiry; - tymax = (box.max.y - origin.y) * invdiry; - } else { - tymin = (box.max.y - origin.y) * invdiry; - tymax = (box.min.y - origin.y) * invdiry; - } - - if (tmin > tymax || tymin > tmax) return null; - - if (tymin > tmin || isNaN(tmin)) tmin = tymin; - - if (tymax < tmax || isNaN(tmax)) tmax = tymax; - - if (invdirz >= 0) { - tzmin = (box.min.z - origin.z) * invdirz; - tzmax = (box.max.z - origin.z) * invdirz; - } else { - tzmin = (box.max.z - origin.z) * invdirz; - tzmax = (box.min.z - origin.z) * invdirz; - } - - if (tmin > tzmax || tzmin > tmax) return null; - - if (tzmin > tmin || tmin !== tmin) tmin = tzmin; - - if (tzmax < tmax || tmax !== tmax) tmax = tzmax; - - //return point closest to the ray (positive side) - - if (tmax < 0) return null; - - return this.at(tmin >= 0 ? tmin : tmax, target); - } - - intersectsBox(box) { - return this.intersectBox(box, _vector$a) !== null; - } - - intersectTriangle(a, b, c, backfaceCulling, target) { - // Compute the offset origin, edges, and normal. - - // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h - - _edge1.subVectors(b, a); - _edge2.subVectors(c, a); - _normal$2.crossVectors(_edge1, _edge2); - - // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction, - // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by - // |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2)) - // |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q)) - // |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N) - let DdN = this.direction.dot(_normal$2); - let sign; - - if (DdN > 0) { - if (backfaceCulling) return null; - sign = 1; - } else if (DdN < 0) { - sign = -1; - DdN = -DdN; - } else { - return null; - } - - _diff.subVectors(this.origin, a); - const DdQxE2 = sign * this.direction.dot(_edge2.crossVectors(_diff, _edge2)); - - // b1 < 0, no intersection - if (DdQxE2 < 0) { - return null; - } - - const DdE1xQ = sign * this.direction.dot(_edge1.cross(_diff)); - - // b2 < 0, no intersection - if (DdE1xQ < 0) { - return null; - } - - // b1+b2 > 1, no intersection - if (DdQxE2 + DdE1xQ > DdN) { - return null; - } - - // Line intersects triangle, check if ray does. - const QdN = -sign * _diff.dot(_normal$2); - - // t < 0, no intersection - if (QdN < 0) { - return null; - } - - // Ray intersects triangle. - return this.at(QdN / DdN, target); - } - - applyMatrix4(matrix4) { - this.origin.applyMatrix4(matrix4); - this.direction.transformDirection(matrix4); - - return this; - } - - equals(ray) { - return ray.origin.equals(this.origin) && ray.direction.equals(this.direction); - } - - clone() { - return new this.constructor().copy(this); - } -} - -class Matrix4 { - constructor(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) { - Matrix4.prototype.isMatrix4 = true; - - this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; - - if (n11 !== undefined) { - this.set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44); - } - } - - set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) { - const te = this.elements; - - te[0] = n11; - te[4] = n12; - te[8] = n13; - te[12] = n14; - te[1] = n21; - te[5] = n22; - te[9] = n23; - te[13] = n24; - te[2] = n31; - te[6] = n32; - te[10] = n33; - te[14] = n34; - te[3] = n41; - te[7] = n42; - te[11] = n43; - te[15] = n44; - - return this; - } - - identity() { - this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - - return this; - } - - clone() { - return new Matrix4().fromArray(this.elements); - } - - copy(m) { - const te = this.elements; - const me = m.elements; - - te[0] = me[0]; - te[1] = me[1]; - te[2] = me[2]; - te[3] = me[3]; - te[4] = me[4]; - te[5] = me[5]; - te[6] = me[6]; - te[7] = me[7]; - te[8] = me[8]; - te[9] = me[9]; - te[10] = me[10]; - te[11] = me[11]; - te[12] = me[12]; - te[13] = me[13]; - te[14] = me[14]; - te[15] = me[15]; - - return this; - } - - copyPosition(m) { - const te = this.elements, - me = m.elements; - - te[12] = me[12]; - te[13] = me[13]; - te[14] = me[14]; - - return this; - } - - setFromMatrix3(m) { - const me = m.elements; - - this.set(me[0], me[3], me[6], 0, me[1], me[4], me[7], 0, me[2], me[5], me[8], 0, 0, 0, 0, 1); - - return this; - } - - extractBasis(xAxis, yAxis, zAxis) { - xAxis.setFromMatrixColumn(this, 0); - yAxis.setFromMatrixColumn(this, 1); - zAxis.setFromMatrixColumn(this, 2); - - return this; - } - - makeBasis(xAxis, yAxis, zAxis) { - this.set(xAxis.x, yAxis.x, zAxis.x, 0, xAxis.y, yAxis.y, zAxis.y, 0, xAxis.z, yAxis.z, zAxis.z, 0, 0, 0, 0, 1); - - return this; - } - - extractRotation(m) { - // this method does not support reflection matrices - - const te = this.elements; - const me = m.elements; - - const scaleX = 1 / _v1$5.setFromMatrixColumn(m, 0).length(); - const scaleY = 1 / _v1$5.setFromMatrixColumn(m, 1).length(); - const scaleZ = 1 / _v1$5.setFromMatrixColumn(m, 2).length(); - - te[0] = me[0] * scaleX; - te[1] = me[1] * scaleX; - te[2] = me[2] * scaleX; - te[3] = 0; - - te[4] = me[4] * scaleY; - te[5] = me[5] * scaleY; - te[6] = me[6] * scaleY; - te[7] = 0; - - te[8] = me[8] * scaleZ; - te[9] = me[9] * scaleZ; - te[10] = me[10] * scaleZ; - te[11] = 0; - - te[12] = 0; - te[13] = 0; - te[14] = 0; - te[15] = 1; - - return this; - } - - makeRotationFromEuler(euler) { - const te = this.elements; - - const x = euler.x, - y = euler.y, - z = euler.z; - const a = Math.cos(x), - b = Math.sin(x); - const c = Math.cos(y), - d = Math.sin(y); - const e = Math.cos(z), - f = Math.sin(z); - - if (euler.order === 'XYZ') { - const ae = a * e, - af = a * f, - be = b * e, - bf = b * f; - - te[0] = c * e; - te[4] = -c * f; - te[8] = d; - - te[1] = af + be * d; - te[5] = ae - bf * d; - te[9] = -b * c; - - te[2] = bf - ae * d; - te[6] = be + af * d; - te[10] = a * c; - } else if (euler.order === 'YXZ') { - const ce = c * e, - cf = c * f, - de = d * e, - df = d * f; - - te[0] = ce + df * b; - te[4] = de * b - cf; - te[8] = a * d; - - te[1] = a * f; - te[5] = a * e; - te[9] = -b; - - te[2] = cf * b - de; - te[6] = df + ce * b; - te[10] = a * c; - } else if (euler.order === 'ZXY') { - const ce = c * e, - cf = c * f, - de = d * e, - df = d * f; - - te[0] = ce - df * b; - te[4] = -a * f; - te[8] = de + cf * b; - - te[1] = cf + de * b; - te[5] = a * e; - te[9] = df - ce * b; - - te[2] = -a * d; - te[6] = b; - te[10] = a * c; - } else if (euler.order === 'ZYX') { - const ae = a * e, - af = a * f, - be = b * e, - bf = b * f; - - te[0] = c * e; - te[4] = be * d - af; - te[8] = ae * d + bf; - - te[1] = c * f; - te[5] = bf * d + ae; - te[9] = af * d - be; - - te[2] = -d; - te[6] = b * c; - te[10] = a * c; - } else if (euler.order === 'YZX') { - const ac = a * c, - ad = a * d, - bc = b * c, - bd = b * d; - - te[0] = c * e; - te[4] = bd - ac * f; - te[8] = bc * f + ad; - - te[1] = f; - te[5] = a * e; - te[9] = -b * e; - - te[2] = -d * e; - te[6] = ad * f + bc; - te[10] = ac - bd * f; - } else if (euler.order === 'XZY') { - const ac = a * c, - ad = a * d, - bc = b * c, - bd = b * d; - - te[0] = c * e; - te[4] = -f; - te[8] = d * e; - - te[1] = ac * f + bd; - te[5] = a * e; - te[9] = ad * f - bc; - - te[2] = bc * f - ad; - te[6] = b * e; - te[10] = bd * f + ac; - } - - // bottom row - te[3] = 0; - te[7] = 0; - te[11] = 0; - - // last column - te[12] = 0; - te[13] = 0; - te[14] = 0; - te[15] = 1; - - return this; - } - - makeRotationFromQuaternion(q) { - return this.compose(_zero, q, _one); - } - - lookAt(eye, target, up) { - const te = this.elements; - - _z.subVectors(eye, target); - - if (_z.lengthSq() === 0) { - // eye and target are in the same position - - _z.z = 1; - } - - _z.normalize(); - _x.crossVectors(up, _z); - - if (_x.lengthSq() === 0) { - // up and z are parallel - - if (Math.abs(up.z) === 1) { - _z.x += 0.0001; - } else { - _z.z += 0.0001; - } - - _z.normalize(); - _x.crossVectors(up, _z); - } - - _x.normalize(); - _y.crossVectors(_z, _x); - - te[0] = _x.x; - te[4] = _y.x; - te[8] = _z.x; - te[1] = _x.y; - te[5] = _y.y; - te[9] = _z.y; - te[2] = _x.z; - te[6] = _y.z; - te[10] = _z.z; - - return this; - } - - multiply(m) { - return this.multiplyMatrices(this, m); - } - - premultiply(m) { - return this.multiplyMatrices(m, this); - } - - multiplyMatrices(a, b) { - const ae = a.elements; - const be = b.elements; - const te = this.elements; - - const a11 = ae[0], - a12 = ae[4], - a13 = ae[8], - a14 = ae[12]; - const a21 = ae[1], - a22 = ae[5], - a23 = ae[9], - a24 = ae[13]; - const a31 = ae[2], - a32 = ae[6], - a33 = ae[10], - a34 = ae[14]; - const a41 = ae[3], - a42 = ae[7], - a43 = ae[11], - a44 = ae[15]; - - const b11 = be[0], - b12 = be[4], - b13 = be[8], - b14 = be[12]; - const b21 = be[1], - b22 = be[5], - b23 = be[9], - b24 = be[13]; - const b31 = be[2], - b32 = be[6], - b33 = be[10], - b34 = be[14]; - const b41 = be[3], - b42 = be[7], - b43 = be[11], - b44 = be[15]; - - te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; - te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; - te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; - te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; - - te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; - te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; - te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; - te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; - - te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; - te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42; - te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43; - te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44; - - te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41; - te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42; - te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43; - te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44; - - return this; - } - - multiplyScalar(s) { - const te = this.elements; - - te[0] *= s; - te[4] *= s; - te[8] *= s; - te[12] *= s; - te[1] *= s; - te[5] *= s; - te[9] *= s; - te[13] *= s; - te[2] *= s; - te[6] *= s; - te[10] *= s; - te[14] *= s; - te[3] *= s; - te[7] *= s; - te[11] *= s; - te[15] *= s; - - return this; - } - - determinant() { - const te = this.elements; - - const n11 = te[0], - n12 = te[4], - n13 = te[8], - n14 = te[12]; - const n21 = te[1], - n22 = te[5], - n23 = te[9], - n24 = te[13]; - const n31 = te[2], - n32 = te[6], - n33 = te[10], - n34 = te[14]; - const n41 = te[3], - n42 = te[7], - n43 = te[11], - n44 = te[15]; - - //TODO: make this more efficient - //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm ) - - return n41 * (+n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34) + n42 * (+n11 * n23 * n34 - n11 * n24 * n33 + n14 * n21 * n33 - n13 * n21 * n34 + n13 * n24 * n31 - n14 * n23 * n31) + n43 * (+n11 * n24 * n32 - n11 * n22 * n34 - n14 * n21 * n32 + n12 * n21 * n34 + n14 * n22 * n31 - n12 * n24 * n31) + n44 * (-n13 * n22 * n31 - n11 * n23 * n32 + n11 * n22 * n33 + n13 * n21 * n32 - n12 * n21 * n33 + n12 * n23 * n31); - } - - transpose() { - const te = this.elements; - let tmp; - - tmp = te[1]; - te[1] = te[4]; - te[4] = tmp; - tmp = te[2]; - te[2] = te[8]; - te[8] = tmp; - tmp = te[6]; - te[6] = te[9]; - te[9] = tmp; - - tmp = te[3]; - te[3] = te[12]; - te[12] = tmp; - tmp = te[7]; - te[7] = te[13]; - te[13] = tmp; - tmp = te[11]; - te[11] = te[14]; - te[14] = tmp; - - return this; - } - - setPosition(x, y, z) { - const te = this.elements; - - if (x.isVector3) { - te[12] = x.x; - te[13] = x.y; - te[14] = x.z; - } else { - te[12] = x; - te[13] = y; - te[14] = z; - } - - return this; - } - - invert() { - // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm - const te = this.elements, - n11 = te[0], - n21 = te[1], - n31 = te[2], - n41 = te[3], - n12 = te[4], - n22 = te[5], - n32 = te[6], - n42 = te[7], - n13 = te[8], - n23 = te[9], - n33 = te[10], - n43 = te[11], - n14 = te[12], - n24 = te[13], - n34 = te[14], - n44 = te[15], - t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44, - t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44, - t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44, - t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; - - const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; - - if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - - const detInv = 1 / det; - - te[0] = t11 * detInv; - te[1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * detInv; - te[2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * detInv; - te[3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * detInv; - - te[4] = t12 * detInv; - te[5] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * detInv; - te[6] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * detInv; - te[7] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * detInv; - - te[8] = t13 * detInv; - te[9] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * detInv; - te[10] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * detInv; - te[11] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * detInv; - - te[12] = t14 * detInv; - te[13] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * detInv; - te[14] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * detInv; - te[15] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * detInv; - - return this; - } - - scale(v) { - const te = this.elements; - const x = v.x, - y = v.y, - z = v.z; - - te[0] *= x; - te[4] *= y; - te[8] *= z; - te[1] *= x; - te[5] *= y; - te[9] *= z; - te[2] *= x; - te[6] *= y; - te[10] *= z; - te[3] *= x; - te[7] *= y; - te[11] *= z; - - return this; - } - - getMaxScaleOnAxis() { - const te = this.elements; - - const scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2]; - const scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6]; - const scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10]; - - return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq)); - } - - makeTranslation(x, y, z) { - if (x.isVector3) { - this.set(1, 0, 0, x.x, 0, 1, 0, x.y, 0, 0, 1, x.z, 0, 0, 0, 1); - } else { - this.set(1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1); - } - - return this; - } - - makeRotationX(theta) { - const c = Math.cos(theta), - s = Math.sin(theta); - - this.set(1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1); - - return this; - } - - makeRotationY(theta) { - const c = Math.cos(theta), - s = Math.sin(theta); - - this.set(c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1); - - return this; - } - - makeRotationZ(theta) { - const c = Math.cos(theta), - s = Math.sin(theta); - - this.set(c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - - return this; - } - - makeRotationAxis(axis, angle) { - // Based on http://www.gamedev.net/reference/articles/article1199.asp - - const c = Math.cos(angle); - const s = Math.sin(angle); - const t = 1 - c; - const x = axis.x, - y = axis.y, - z = axis.z; - const tx = t * x, - ty = t * y; - - this.set(tx * x + c, tx * y - s * z, tx * z + s * y, 0, tx * y + s * z, ty * y + c, ty * z - s * x, 0, tx * z - s * y, ty * z + s * x, t * z * z + c, 0, 0, 0, 0, 1); - - return this; - } - - makeScale(x, y, z) { - this.set(x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1); - - return this; - } - - makeShear(xy, xz, yx, yz, zx, zy) { - this.set(1, yx, zx, 0, xy, 1, zy, 0, xz, yz, 1, 0, 0, 0, 0, 1); - - return this; - } - - compose(position, quaternion, scale) { - const te = this.elements; - - const x = quaternion._x, - y = quaternion._y, - z = quaternion._z, - w = quaternion._w; - const x2 = x + x, - y2 = y + y, - z2 = z + z; - const xx = x * x2, - xy = x * y2, - xz = x * z2; - const yy = y * y2, - yz = y * z2, - zz = z * z2; - const wx = w * x2, - wy = w * y2, - wz = w * z2; - - const sx = scale.x, - sy = scale.y, - sz = scale.z; - - te[0] = (1 - (yy + zz)) * sx; - te[1] = (xy + wz) * sx; - te[2] = (xz - wy) * sx; - te[3] = 0; - - te[4] = (xy - wz) * sy; - te[5] = (1 - (xx + zz)) * sy; - te[6] = (yz + wx) * sy; - te[7] = 0; - - te[8] = (xz + wy) * sz; - te[9] = (yz - wx) * sz; - te[10] = (1 - (xx + yy)) * sz; - te[11] = 0; - - te[12] = position.x; - te[13] = position.y; - te[14] = position.z; - te[15] = 1; - - return this; - } - - decompose(position, quaternion, scale) { - const te = this.elements; - - let sx = _v1$5.set(te[0], te[1], te[2]).length(); - const sy = _v1$5.set(te[4], te[5], te[6]).length(); - const sz = _v1$5.set(te[8], te[9], te[10]).length(); - - // if determine is negative, we need to invert one scale - const det = this.determinant(); - if (det < 0) sx = -sx; - - position.x = te[12]; - position.y = te[13]; - position.z = te[14]; - - // scale the rotation part - _m1$2.copy(this); - - const invSX = 1 / sx; - const invSY = 1 / sy; - const invSZ = 1 / sz; - - _m1$2.elements[0] *= invSX; - _m1$2.elements[1] *= invSX; - _m1$2.elements[2] *= invSX; - - _m1$2.elements[4] *= invSY; - _m1$2.elements[5] *= invSY; - _m1$2.elements[6] *= invSY; - - _m1$2.elements[8] *= invSZ; - _m1$2.elements[9] *= invSZ; - _m1$2.elements[10] *= invSZ; - - quaternion.setFromRotationMatrix(_m1$2); - - scale.x = sx; - scale.y = sy; - scale.z = sz; - - return this; - } - - makePerspective(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) { - const te = this.elements; - const x = (2 * near) / (right - left); - const y = (2 * near) / (top - bottom); - - const a = (right + left) / (right - left); - const b = (top + bottom) / (top - bottom); - - let c, d; - - if (coordinateSystem === WebGLCoordinateSystem) { - c = -(far + near) / (far - near); - d = (-2 * far * near) / (far - near); - } else if (coordinateSystem === WebGPUCoordinateSystem) { - c = -far / (far - near); - d = (-far * near) / (far - near); - } else { - throw new Error('THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem); - } - - te[0] = x; - te[4] = 0; - te[8] = a; - te[12] = 0; - te[1] = 0; - te[5] = y; - te[9] = b; - te[13] = 0; - te[2] = 0; - te[6] = 0; - te[10] = c; - te[14] = d; - te[3] = 0; - te[7] = 0; - te[11] = -1; - te[15] = 0; - - return this; - } - - makeOrthographic(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) { - const te = this.elements; - const w = 1.0 / (right - left); - const h = 1.0 / (top - bottom); - const p = 1.0 / (far - near); - - const x = (right + left) * w; - const y = (top + bottom) * h; - - let z, zInv; - - if (coordinateSystem === WebGLCoordinateSystem) { - z = (far + near) * p; - zInv = -2 * p; - } else if (coordinateSystem === WebGPUCoordinateSystem) { - z = near * p; - zInv = -1 * p; - } else { - throw new Error('THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem); - } - - te[0] = 2 * w; - te[4] = 0; - te[8] = 0; - te[12] = -x; - te[1] = 0; - te[5] = 2 * h; - te[9] = 0; - te[13] = -y; - te[2] = 0; - te[6] = 0; - te[10] = zInv; - te[14] = -z; - te[3] = 0; - te[7] = 0; - te[11] = 0; - te[15] = 1; - - return this; - } - - equals(matrix) { - const te = this.elements; - const me = matrix.elements; - - for (let i = 0; i < 16; i++) { - if (te[i] !== me[i]) return false; - } - - return true; - } - - fromArray(array, offset = 0) { - for (let i = 0; i < 16; i++) { - this.elements[i] = array[i + offset]; - } - - return this; - } - - toArray(array = [], offset = 0) { - const te = this.elements; - - array[offset] = te[0]; - array[offset + 1] = te[1]; - array[offset + 2] = te[2]; - array[offset + 3] = te[3]; - - array[offset + 4] = te[4]; - array[offset + 5] = te[5]; - array[offset + 6] = te[6]; - array[offset + 7] = te[7]; - - array[offset + 8] = te[8]; - array[offset + 9] = te[9]; - array[offset + 10] = te[10]; - array[offset + 11] = te[11]; - - array[offset + 12] = te[12]; - array[offset + 13] = te[13]; - array[offset + 14] = te[14]; - array[offset + 15] = te[15]; - - return array; - } -} - -const _v1$5 = /*@__PURE__*/ new Vector3(); -const _m1$2 = /*@__PURE__*/ new Matrix4(); -const _zero = /*@__PURE__*/ new Vector3(0, 0, 0); -const _one = /*@__PURE__*/ new Vector3(1, 1, 1); -const _x = /*@__PURE__*/ new Vector3(); -const _y = /*@__PURE__*/ new Vector3(); -const _z = /*@__PURE__*/ new Vector3(); - -const _matrix$2 = /*@__PURE__*/ new Matrix4(); -const _quaternion$3 = /*@__PURE__*/ new Quaternion(); - -class Euler { - constructor(x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER) { - this.isEuler = true; - - this._x = x; - this._y = y; - this._z = z; - this._order = order; - } - - get x() { - return this._x; - } - - set x(value) { - this._x = value; - this._onChangeCallback(); - } - - get y() { - return this._y; - } - - set y(value) { - this._y = value; - this._onChangeCallback(); - } - - get z() { - return this._z; - } - - set z(value) { - this._z = value; - this._onChangeCallback(); - } - - get order() { - return this._order; - } - - set order(value) { - this._order = value; - this._onChangeCallback(); - } - - set(x, y, z, order = this._order) { - this._x = x; - this._y = y; - this._z = z; - this._order = order; - - this._onChangeCallback(); - - return this; - } - - clone() { - return new this.constructor(this._x, this._y, this._z, this._order); - } - - copy(euler) { - this._x = euler._x; - this._y = euler._y; - this._z = euler._z; - this._order = euler._order; - - this._onChangeCallback(); - - return this; - } - - setFromRotationMatrix(m, order = this._order, update = true) { - // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) - - const te = m.elements; - const m11 = te[0], - m12 = te[4], - m13 = te[8]; - const m21 = te[1], - m22 = te[5], - m23 = te[9]; - const m31 = te[2], - m32 = te[6], - m33 = te[10]; - - switch (order) { - case 'XYZ': - this._y = Math.asin(clamp$1(m13, -1, 1)); - - if (Math.abs(m13) < 0.9999999) { - this._x = Math.atan2(-m23, m33); - this._z = Math.atan2(-m12, m11); - } else { - this._x = Math.atan2(m32, m22); - this._z = 0; - } - - break; - - case 'YXZ': - this._x = Math.asin(-clamp$1(m23, -1, 1)); - - if (Math.abs(m23) < 0.9999999) { - this._y = Math.atan2(m13, m33); - this._z = Math.atan2(m21, m22); - } else { - this._y = Math.atan2(-m31, m11); - this._z = 0; - } - - break; - - case 'ZXY': - this._x = Math.asin(clamp$1(m32, -1, 1)); - - if (Math.abs(m32) < 0.9999999) { - this._y = Math.atan2(-m31, m33); - this._z = Math.atan2(-m12, m22); - } else { - this._y = 0; - this._z = Math.atan2(m21, m11); - } - - break; - - case 'ZYX': - this._y = Math.asin(-clamp$1(m31, -1, 1)); - - if (Math.abs(m31) < 0.9999999) { - this._x = Math.atan2(m32, m33); - this._z = Math.atan2(m21, m11); - } else { - this._x = 0; - this._z = Math.atan2(-m12, m22); - } - - break; - - case 'YZX': - this._z = Math.asin(clamp$1(m21, -1, 1)); - - if (Math.abs(m21) < 0.9999999) { - this._x = Math.atan2(-m23, m22); - this._y = Math.atan2(-m31, m11); - } else { - this._x = 0; - this._y = Math.atan2(m13, m33); - } - - break; - - case 'XZY': - this._z = Math.asin(-clamp$1(m12, -1, 1)); - - if (Math.abs(m12) < 0.9999999) { - this._x = Math.atan2(m32, m22); - this._y = Math.atan2(m13, m11); - } else { - this._x = Math.atan2(-m23, m33); - this._y = 0; - } - - break; - - default: - console.warn('THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order); - } - - this._order = order; - - if (update === true) this._onChangeCallback(); - - return this; - } - - setFromQuaternion(q, order, update) { - _matrix$2.makeRotationFromQuaternion(q); - - return this.setFromRotationMatrix(_matrix$2, order, update); - } - - setFromVector3(v, order = this._order) { - return this.set(v.x, v.y, v.z, order); - } - - reorder(newOrder) { - // WARNING: this discards revolution information -bhouston - - _quaternion$3.setFromEuler(this); - - return this.setFromQuaternion(_quaternion$3, newOrder); - } - - equals(euler) { - return euler._x === this._x && euler._y === this._y && euler._z === this._z && euler._order === this._order; - } - - fromArray(array) { - this._x = array[0]; - this._y = array[1]; - this._z = array[2]; - if (array[3] !== undefined) this._order = array[3]; - - this._onChangeCallback(); - - return this; - } - - toArray(array = [], offset = 0) { - array[offset] = this._x; - array[offset + 1] = this._y; - array[offset + 2] = this._z; - array[offset + 3] = this._order; - - return array; - } - - _onChange(callback) { - this._onChangeCallback = callback; - - return this; - } - - _onChangeCallback() {} - - *[Symbol.iterator]() { - yield this._x; - yield this._y; - yield this._z; - yield this._order; - } -} - -Euler.DEFAULT_ORDER = 'XYZ'; - -class Layers { - constructor() { - this.mask = 1 | 0; - } - - set(channel) { - this.mask = ((1 << channel) | 0) >>> 0; - } - - enable(channel) { - this.mask |= (1 << channel) | 0; - } - - enableAll() { - this.mask = 0xffffffff | 0; - } - - toggle(channel) { - this.mask ^= (1 << channel) | 0; - } - - disable(channel) { - this.mask &= ~((1 << channel) | 0); - } - - disableAll() { - this.mask = 0; - } - - test(layers) { - return (this.mask & layers.mask) !== 0; - } - - isEnabled(channel) { - return (this.mask & ((1 << channel) | 0)) !== 0; - } -} - -let _object3DId = 0; - -const _v1$4 = /*@__PURE__*/ new Vector3(); -const _q1 = /*@__PURE__*/ new Quaternion(); -const _m1$1 = /*@__PURE__*/ new Matrix4(); -const _target$1 = /*@__PURE__*/ new Vector3(); - -const _position$3 = /*@__PURE__*/ new Vector3(); -const _scale$2 = /*@__PURE__*/ new Vector3(); -const _quaternion$2 = /*@__PURE__*/ new Quaternion(); - -const _xAxis = /*@__PURE__*/ new Vector3(1, 0, 0); -const _yAxis = /*@__PURE__*/ new Vector3(0, 1, 0); -const _zAxis = /*@__PURE__*/ new Vector3(0, 0, 1); - -const _addedEvent = { type: 'added' }; -const _removedEvent = { type: 'removed' }; - -const _childaddedEvent = { type: 'childadded', child: null }; -const _childremovedEvent = { type: 'childremoved', child: null }; - -class Object3D extends EventDispatcher { - constructor() { - super(); - - this.isObject3D = true; - - Object.defineProperty(this, 'id', { value: _object3DId++ }); - - this.uuid = generateUUID(); - - this.name = ''; - this.type = 'Object3D'; - - this.parent = null; - this.children = []; - - this.up = Object3D.DEFAULT_UP.clone(); - - const position = new Vector3(); - const rotation = new Euler(); - const quaternion = new Quaternion(); - const scale = new Vector3(1, 1, 1); - - function onRotationChange() { - quaternion.setFromEuler(rotation, false); - } - - function onQuaternionChange() { - rotation.setFromQuaternion(quaternion, undefined, false); - } - - rotation._onChange(onRotationChange); - quaternion._onChange(onQuaternionChange); - - Object.defineProperties(this, { - position: { - configurable: true, - enumerable: true, - value: position, - }, - rotation: { - configurable: true, - enumerable: true, - value: rotation, - }, - quaternion: { - configurable: true, - enumerable: true, - value: quaternion, - }, - scale: { - configurable: true, - enumerable: true, - value: scale, - }, - modelViewMatrix: { - value: new Matrix4(), - }, - normalMatrix: { - value: new Matrix3(), - }, - }); - - this.matrix = new Matrix4(); - this.matrixWorld = new Matrix4(); - - this.matrixAutoUpdate = Object3D.DEFAULT_MATRIX_AUTO_UPDATE; - - this.matrixWorldAutoUpdate = Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; // checked by the renderer - this.matrixWorldNeedsUpdate = false; - - this.layers = new Layers(); - this.visible = true; - - this.castShadow = false; - this.receiveShadow = false; - - this.frustumCulled = true; - this.renderOrder = 0; - - this.animations = []; - - this.userData = {}; - } - - onBeforeShadow(/* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */) {} - - onAfterShadow(/* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */) {} - - onBeforeRender(/* renderer, scene, camera, geometry, material, group */) {} - - onAfterRender(/* renderer, scene, camera, geometry, material, group */) {} - - applyMatrix4(matrix) { - if (this.matrixAutoUpdate) this.updateMatrix(); - - this.matrix.premultiply(matrix); - - this.matrix.decompose(this.position, this.quaternion, this.scale); - } - - applyQuaternion(q) { - this.quaternion.premultiply(q); - - return this; - } - - setRotationFromAxisAngle(axis, angle) { - // assumes axis is normalized - - this.quaternion.setFromAxisAngle(axis, angle); - } - - setRotationFromEuler(euler) { - this.quaternion.setFromEuler(euler, true); - } - - setRotationFromMatrix(m) { - // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) - - this.quaternion.setFromRotationMatrix(m); - } - - setRotationFromQuaternion(q) { - // assumes q is normalized - - this.quaternion.copy(q); - } - - rotateOnAxis(axis, angle) { - // rotate object on axis in object space - // axis is assumed to be normalized - - _q1.setFromAxisAngle(axis, angle); - - this.quaternion.multiply(_q1); - - return this; - } - - rotateOnWorldAxis(axis, angle) { - // rotate object on axis in world space - // axis is assumed to be normalized - // method assumes no rotated parent - - _q1.setFromAxisAngle(axis, angle); - - this.quaternion.premultiply(_q1); - - return this; - } - - rotateX(angle) { - return this.rotateOnAxis(_xAxis, angle); - } - - rotateY(angle) { - return this.rotateOnAxis(_yAxis, angle); - } - - rotateZ(angle) { - return this.rotateOnAxis(_zAxis, angle); - } - - translateOnAxis(axis, distance) { - // translate object by distance along axis in object space - // axis is assumed to be normalized - - _v1$4.copy(axis).applyQuaternion(this.quaternion); - - this.position.add(_v1$4.multiplyScalar(distance)); - - return this; - } - - translateX(distance) { - return this.translateOnAxis(_xAxis, distance); - } - - translateY(distance) { - return this.translateOnAxis(_yAxis, distance); - } - - translateZ(distance) { - return this.translateOnAxis(_zAxis, distance); - } - - localToWorld(vector) { - this.updateWorldMatrix(true, false); - - return vector.applyMatrix4(this.matrixWorld); - } - - worldToLocal(vector) { - this.updateWorldMatrix(true, false); - - return vector.applyMatrix4(_m1$1.copy(this.matrixWorld).invert()); - } - - lookAt(x, y, z) { - // This method does not support objects having non-uniformly-scaled parent(s) - - if (x.isVector3) { - _target$1.copy(x); - } else { - _target$1.set(x, y, z); - } - - const parent = this.parent; - - this.updateWorldMatrix(true, false); - - _position$3.setFromMatrixPosition(this.matrixWorld); - - if (this.isCamera || this.isLight) { - _m1$1.lookAt(_position$3, _target$1, this.up); - } else { - _m1$1.lookAt(_target$1, _position$3, this.up); - } - - this.quaternion.setFromRotationMatrix(_m1$1); - - if (parent) { - _m1$1.extractRotation(parent.matrixWorld); - _q1.setFromRotationMatrix(_m1$1); - this.quaternion.premultiply(_q1.invert()); - } - } - - add(object) { - if (arguments.length > 1) { - for (let i = 0; i < arguments.length; i++) { - this.add(arguments[i]); - } - - return this; - } - - if (object === this) { - console.error("THREE.Object3D.add: object can't be added as a child of itself.", object); - return this; - } - - if (object && object.isObject3D) { - object.removeFromParent(); - object.parent = this; - this.children.push(object); - - object.dispatchEvent(_addedEvent); - - _childaddedEvent.child = object; - this.dispatchEvent(_childaddedEvent); - _childaddedEvent.child = null; - } else { - console.error('THREE.Object3D.add: object not an instance of THREE.Object3D.', object); - } - - return this; - } - - remove(object) { - if (arguments.length > 1) { - for (let i = 0; i < arguments.length; i++) { - this.remove(arguments[i]); - } - - return this; - } - - const index = this.children.indexOf(object); - - if (index !== -1) { - object.parent = null; - this.children.splice(index, 1); - - object.dispatchEvent(_removedEvent); - - _childremovedEvent.child = object; - this.dispatchEvent(_childremovedEvent); - _childremovedEvent.child = null; - } - - return this; - } - - removeFromParent() { - const parent = this.parent; - - if (parent !== null) { - parent.remove(this); - } - - return this; - } - - clear() { - return this.remove(...this.children); - } - - attach(object) { - // adds object as a child of this, while maintaining the object's world transform - - // Note: This method does not support scene graphs having non-uniformly-scaled nodes(s) - - this.updateWorldMatrix(true, false); - - _m1$1.copy(this.matrixWorld).invert(); - - if (object.parent !== null) { - object.parent.updateWorldMatrix(true, false); - - _m1$1.multiply(object.parent.matrixWorld); - } - - object.applyMatrix4(_m1$1); - - object.removeFromParent(); - object.parent = this; - this.children.push(object); - - object.updateWorldMatrix(false, true); - - object.dispatchEvent(_addedEvent); - - _childaddedEvent.child = object; - this.dispatchEvent(_childaddedEvent); - _childaddedEvent.child = null; - - return this; - } - - getObjectById(id) { - return this.getObjectByProperty('id', id); - } - - getObjectByName(name) { - return this.getObjectByProperty('name', name); - } - - getObjectByProperty(name, value) { - if (this[name] === value) return this; - - for (let i = 0, l = this.children.length; i < l; i++) { - const child = this.children[i]; - const object = child.getObjectByProperty(name, value); - - if (object !== undefined) { - return object; - } - } - - return undefined; - } - - getObjectsByProperty(name, value, result = []) { - if (this[name] === value) result.push(this); - - const children = this.children; - - for (let i = 0, l = children.length; i < l; i++) { - children[i].getObjectsByProperty(name, value, result); - } - - return result; - } - - getWorldPosition(target) { - this.updateWorldMatrix(true, false); - - return target.setFromMatrixPosition(this.matrixWorld); - } - - getWorldQuaternion(target) { - this.updateWorldMatrix(true, false); - - this.matrixWorld.decompose(_position$3, target, _scale$2); - - return target; - } - - getWorldScale(target) { - this.updateWorldMatrix(true, false); - - this.matrixWorld.decompose(_position$3, _quaternion$2, target); - - return target; - } - - getWorldDirection(target) { - this.updateWorldMatrix(true, false); - - const e = this.matrixWorld.elements; - - return target.set(e[8], e[9], e[10]).normalize(); - } - - raycast(/* raycaster, intersects */) {} - - traverse(callback) { - callback(this); - - const children = this.children; - - for (let i = 0, l = children.length; i < l; i++) { - children[i].traverse(callback); - } - } - - traverseVisible(callback) { - if (this.visible === false) return; - - callback(this); - - const children = this.children; - - for (let i = 0, l = children.length; i < l; i++) { - children[i].traverseVisible(callback); - } - } - - traverseAncestors(callback) { - const parent = this.parent; - - if (parent !== null) { - callback(parent); - - parent.traverseAncestors(callback); - } - } - - updateMatrix() { - this.matrix.compose(this.position, this.quaternion, this.scale); - - this.matrixWorldNeedsUpdate = true; - } - - updateMatrixWorld(force) { - if (this.matrixAutoUpdate) this.updateMatrix(); - - if (this.matrixWorldNeedsUpdate || force) { - if (this.matrixWorldAutoUpdate === true) { - if (this.parent === null) { - this.matrixWorld.copy(this.matrix); - } else { - this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); - } - } - - this.matrixWorldNeedsUpdate = false; - - force = true; - } - - // make sure descendants are updated if required - - const children = this.children; - - for (let i = 0, l = children.length; i < l; i++) { - const child = children[i]; - - child.updateMatrixWorld(force); - } - } - - updateWorldMatrix(updateParents, updateChildren) { - const parent = this.parent; - - if (updateParents === true && parent !== null) { - parent.updateWorldMatrix(true, false); - } - - if (this.matrixAutoUpdate) this.updateMatrix(); - - if (this.matrixWorldAutoUpdate === true) { - if (this.parent === null) { - this.matrixWorld.copy(this.matrix); - } else { - this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); - } - } - - // make sure descendants are updated - - if (updateChildren === true) { - const children = this.children; - - for (let i = 0, l = children.length; i < l; i++) { - const child = children[i]; - - child.updateWorldMatrix(false, true); - } - } - } - - toJSON(meta) { - // meta is a string when called from JSON.stringify - const isRootObject = meta === undefined || typeof meta === 'string'; - - const output = {}; - - // meta is a hash used to collect geometries, materials. - // not providing it implies that this is the root object - // being serialized. - if (isRootObject) { - // initialize meta obj - meta = { - geometries: {}, - materials: {}, - textures: {}, - images: {}, - shapes: {}, - skeletons: {}, - animations: {}, - nodes: {}, - }; - - output.metadata = { - version: 4.6, - type: 'Object', - generator: 'Object3D.toJSON', - }; - } - - // standard Object3D serialization - - const object = {}; - - object.uuid = this.uuid; - object.type = this.type; - - if (this.name !== '') object.name = this.name; - if (this.castShadow === true) object.castShadow = true; - if (this.receiveShadow === true) object.receiveShadow = true; - if (this.visible === false) object.visible = false; - if (this.frustumCulled === false) object.frustumCulled = false; - if (this.renderOrder !== 0) object.renderOrder = this.renderOrder; - if (Object.keys(this.userData).length > 0) object.userData = this.userData; - - object.layers = this.layers.mask; - object.matrix = this.matrix.toArray(); - object.up = this.up.toArray(); - - if (this.matrixAutoUpdate === false) object.matrixAutoUpdate = false; - - // object specific properties - - if (this.isInstancedMesh) { - object.type = 'InstancedMesh'; - object.count = this.count; - object.instanceMatrix = this.instanceMatrix.toJSON(); - if (this.instanceColor !== null) object.instanceColor = this.instanceColor.toJSON(); - } - - if (this.isBatchedMesh) { - object.type = 'BatchedMesh'; - object.perObjectFrustumCulled = this.perObjectFrustumCulled; - object.sortObjects = this.sortObjects; - - object.drawRanges = this._drawRanges; - object.reservedRanges = this._reservedRanges; - - object.visibility = this._visibility; - object.active = this._active; - object.bounds = this._bounds.map((bound) => ({ - boxInitialized: bound.boxInitialized, - boxMin: bound.box.min.toArray(), - boxMax: bound.box.max.toArray(), - - sphereInitialized: bound.sphereInitialized, - sphereRadius: bound.sphere.radius, - sphereCenter: bound.sphere.center.toArray(), - })); - - object.maxInstanceCount = this._maxInstanceCount; - object.maxVertexCount = this._maxVertexCount; - object.maxIndexCount = this._maxIndexCount; - - object.geometryInitialized = this._geometryInitialized; - object.geometryCount = this._geometryCount; - - object.matricesTexture = this._matricesTexture.toJSON(meta); - - if (this._colorsTexture !== null) object.colorsTexture = this._colorsTexture.toJSON(meta); - - if (this.boundingSphere !== null) { - object.boundingSphere = { - center: object.boundingSphere.center.toArray(), - radius: object.boundingSphere.radius, - }; - } - - if (this.boundingBox !== null) { - object.boundingBox = { - min: object.boundingBox.min.toArray(), - max: object.boundingBox.max.toArray(), - }; - } - } - - // - - function serialize(library, element) { - if (library[element.uuid] === undefined) { - library[element.uuid] = element.toJSON(meta); - } - - return element.uuid; - } - - if (this.isScene) { - if (this.background) { - if (this.background.isColor) { - object.background = this.background.toJSON(); - } else if (this.background.isTexture) { - object.background = this.background.toJSON(meta).uuid; - } - } - - if (this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true) { - object.environment = this.environment.toJSON(meta).uuid; - } - } else if (this.isMesh || this.isLine || this.isPoints) { - object.geometry = serialize(meta.geometries, this.geometry); - - const parameters = this.geometry.parameters; - - if (parameters !== undefined && parameters.shapes !== undefined) { - const shapes = parameters.shapes; - - if (Array.isArray(shapes)) { - for (let i = 0, l = shapes.length; i < l; i++) { - const shape = shapes[i]; - - serialize(meta.shapes, shape); - } - } else { - serialize(meta.shapes, shapes); - } - } - } - - if (this.isSkinnedMesh) { - object.bindMode = this.bindMode; - object.bindMatrix = this.bindMatrix.toArray(); - - if (this.skeleton !== undefined) { - serialize(meta.skeletons, this.skeleton); - - object.skeleton = this.skeleton.uuid; - } - } - - if (this.material !== undefined) { - if (Array.isArray(this.material)) { - const uuids = []; - - for (let i = 0, l = this.material.length; i < l; i++) { - uuids.push(serialize(meta.materials, this.material[i])); - } - - object.material = uuids; - } else { - object.material = serialize(meta.materials, this.material); - } - } - - // - - if (this.children.length > 0) { - object.children = []; - - for (let i = 0; i < this.children.length; i++) { - object.children.push(this.children[i].toJSON(meta).object); - } - } - - // - - if (this.animations.length > 0) { - object.animations = []; - - for (let i = 0; i < this.animations.length; i++) { - const animation = this.animations[i]; - - object.animations.push(serialize(meta.animations, animation)); - } - } - - if (isRootObject) { - const geometries = extractFromCache(meta.geometries); - const materials = extractFromCache(meta.materials); - const textures = extractFromCache(meta.textures); - const images = extractFromCache(meta.images); - const shapes = extractFromCache(meta.shapes); - const skeletons = extractFromCache(meta.skeletons); - const animations = extractFromCache(meta.animations); - const nodes = extractFromCache(meta.nodes); - - if (geometries.length > 0) output.geometries = geometries; - if (materials.length > 0) output.materials = materials; - if (textures.length > 0) output.textures = textures; - if (images.length > 0) output.images = images; - if (shapes.length > 0) output.shapes = shapes; - if (skeletons.length > 0) output.skeletons = skeletons; - if (animations.length > 0) output.animations = animations; - if (nodes.length > 0) output.nodes = nodes; - } - - output.object = object; - - return output; - - // extract data from the cache hash - // remove metadata on each item - // and return as array - function extractFromCache(cache) { - const values = []; - for (const key in cache) { - const data = cache[key]; - delete data.metadata; - values.push(data); - } - - return values; - } - } - - clone(recursive) { - return new this.constructor().copy(this, recursive); - } - - copy(source, recursive = true) { - this.name = source.name; - - this.up.copy(source.up); - - this.position.copy(source.position); - this.rotation.order = source.rotation.order; - this.quaternion.copy(source.quaternion); - this.scale.copy(source.scale); - - this.matrix.copy(source.matrix); - this.matrixWorld.copy(source.matrixWorld); - - this.matrixAutoUpdate = source.matrixAutoUpdate; - - this.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate; - this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate; - - this.layers.mask = source.layers.mask; - this.visible = source.visible; - - this.castShadow = source.castShadow; - this.receiveShadow = source.receiveShadow; - - this.frustumCulled = source.frustumCulled; - this.renderOrder = source.renderOrder; - - this.animations = source.animations.slice(); - - this.userData = JSON.parse(JSON.stringify(source.userData)); - - if (recursive === true) { - for (let i = 0; i < source.children.length; i++) { - const child = source.children[i]; - this.add(child.clone()); - } - } - - return this; - } -} - -Object3D.DEFAULT_UP = /*@__PURE__*/ new Vector3(0, 1, 0); -Object3D.DEFAULT_MATRIX_AUTO_UPDATE = true; -Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true; - -const _v0$1 = /*@__PURE__*/ new Vector3(); -const _v1$3 = /*@__PURE__*/ new Vector3(); -const _v2$2 = /*@__PURE__*/ new Vector3(); -const _v3$2 = /*@__PURE__*/ new Vector3(); - -const _vab = /*@__PURE__*/ new Vector3(); -const _vac = /*@__PURE__*/ new Vector3(); -const _vbc = /*@__PURE__*/ new Vector3(); -const _vap = /*@__PURE__*/ new Vector3(); -const _vbp = /*@__PURE__*/ new Vector3(); -const _vcp = /*@__PURE__*/ new Vector3(); - -class Triangle { - constructor(a = new Vector3(), b = new Vector3(), c = new Vector3()) { - this.a = a; - this.b = b; - this.c = c; - } - - static getNormal(a, b, c, target) { - target.subVectors(c, b); - _v0$1.subVectors(a, b); - target.cross(_v0$1); - - const targetLengthSq = target.lengthSq(); - if (targetLengthSq > 0) { - return target.multiplyScalar(1 / Math.sqrt(targetLengthSq)); - } - - return target.set(0, 0, 0); - } - - // static/instance method to calculate barycentric coordinates - // based on: http://www.blackpawn.com/texts/pointinpoly/default.html - static getBarycoord(point, a, b, c, target) { - _v0$1.subVectors(c, a); - _v1$3.subVectors(b, a); - _v2$2.subVectors(point, a); - - const dot00 = _v0$1.dot(_v0$1); - const dot01 = _v0$1.dot(_v1$3); - const dot02 = _v0$1.dot(_v2$2); - const dot11 = _v1$3.dot(_v1$3); - const dot12 = _v1$3.dot(_v2$2); - - const denom = dot00 * dot11 - dot01 * dot01; - - // collinear or singular triangle - if (denom === 0) { - target.set(0, 0, 0); - return null; - } - - const invDenom = 1 / denom; - const u = (dot11 * dot02 - dot01 * dot12) * invDenom; - const v = (dot00 * dot12 - dot01 * dot02) * invDenom; - - // barycentric coordinates must always sum to 1 - return target.set(1 - u - v, v, u); - } - - static containsPoint(point, a, b, c) { - // if the triangle is degenerate then we can't contain a point - if (this.getBarycoord(point, a, b, c, _v3$2) === null) { - return false; - } - - return _v3$2.x >= 0 && _v3$2.y >= 0 && _v3$2.x + _v3$2.y <= 1; - } - - static getInterpolation(point, p1, p2, p3, v1, v2, v3, target) { - if (this.getBarycoord(point, p1, p2, p3, _v3$2) === null) { - target.x = 0; - target.y = 0; - if ('z' in target) target.z = 0; - if ('w' in target) target.w = 0; - return null; - } - - target.setScalar(0); - target.addScaledVector(v1, _v3$2.x); - target.addScaledVector(v2, _v3$2.y); - target.addScaledVector(v3, _v3$2.z); - - return target; - } - - static isFrontFacing(a, b, c, direction) { - _v0$1.subVectors(c, b); - _v1$3.subVectors(a, b); - - // strictly front facing - return _v0$1.cross(_v1$3).dot(direction) < 0 ? true : false; - } - - set(a, b, c) { - this.a.copy(a); - this.b.copy(b); - this.c.copy(c); - - return this; - } - - setFromPointsAndIndices(points, i0, i1, i2) { - this.a.copy(points[i0]); - this.b.copy(points[i1]); - this.c.copy(points[i2]); - - return this; - } - - setFromAttributeAndIndices(attribute, i0, i1, i2) { - this.a.fromBufferAttribute(attribute, i0); - this.b.fromBufferAttribute(attribute, i1); - this.c.fromBufferAttribute(attribute, i2); - - return this; - } - - clone() { - return new this.constructor().copy(this); - } - - copy(triangle) { - this.a.copy(triangle.a); - this.b.copy(triangle.b); - this.c.copy(triangle.c); - - return this; - } - - getArea() { - _v0$1.subVectors(this.c, this.b); - _v1$3.subVectors(this.a, this.b); - - return _v0$1.cross(_v1$3).length() * 0.5; - } - - getMidpoint(target) { - return target - .addVectors(this.a, this.b) - .add(this.c) - .multiplyScalar(1 / 3); - } - - getNormal(target) { - return Triangle.getNormal(this.a, this.b, this.c, target); - } - - getPlane(target) { - return target.setFromCoplanarPoints(this.a, this.b, this.c); - } - - getBarycoord(point, target) { - return Triangle.getBarycoord(point, this.a, this.b, this.c, target); - } - - getInterpolation(point, v1, v2, v3, target) { - return Triangle.getInterpolation(point, this.a, this.b, this.c, v1, v2, v3, target); - } - - containsPoint(point) { - return Triangle.containsPoint(point, this.a, this.b, this.c); - } - - isFrontFacing(direction) { - return Triangle.isFrontFacing(this.a, this.b, this.c, direction); - } - - intersectsBox(box) { - return box.intersectsTriangle(this); - } - - closestPointToPoint(p, target) { - const a = this.a, - b = this.b, - c = this.c; - let v, w; - - // algorithm thanks to Real-Time Collision Detection by Christer Ericson, - // published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc., - // under the accompanying license; see chapter 5.1.5 for detailed explanation. - // basically, we're distinguishing which of the voronoi regions of the triangle - // the point lies in with the minimum amount of redundant computation. - - _vab.subVectors(b, a); - _vac.subVectors(c, a); - _vap.subVectors(p, a); - const d1 = _vab.dot(_vap); - const d2 = _vac.dot(_vap); - if (d1 <= 0 && d2 <= 0) { - // vertex region of A; barycentric coords (1, 0, 0) - return target.copy(a); - } - - _vbp.subVectors(p, b); - const d3 = _vab.dot(_vbp); - const d4 = _vac.dot(_vbp); - if (d3 >= 0 && d4 <= d3) { - // vertex region of B; barycentric coords (0, 1, 0) - return target.copy(b); - } - - const vc = d1 * d4 - d3 * d2; - if (vc <= 0 && d1 >= 0 && d3 <= 0) { - v = d1 / (d1 - d3); - // edge region of AB; barycentric coords (1-v, v, 0) - return target.copy(a).addScaledVector(_vab, v); - } - - _vcp.subVectors(p, c); - const d5 = _vab.dot(_vcp); - const d6 = _vac.dot(_vcp); - if (d6 >= 0 && d5 <= d6) { - // vertex region of C; barycentric coords (0, 0, 1) - return target.copy(c); - } - - const vb = d5 * d2 - d1 * d6; - if (vb <= 0 && d2 >= 0 && d6 <= 0) { - w = d2 / (d2 - d6); - // edge region of AC; barycentric coords (1-w, 0, w) - return target.copy(a).addScaledVector(_vac, w); - } - - const va = d3 * d6 - d5 * d4; - if (va <= 0 && d4 - d3 >= 0 && d5 - d6 >= 0) { - _vbc.subVectors(c, b); - w = (d4 - d3) / (d4 - d3 + (d5 - d6)); - // edge region of BC; barycentric coords (0, 1-w, w) - return target.copy(b).addScaledVector(_vbc, w); // edge region of BC - } - - // face region - const denom = 1 / (va + vb + vc); - // u = va * denom - v = vb * denom; - w = vc * denom; - - return target.copy(a).addScaledVector(_vab, v).addScaledVector(_vac, w); - } - - equals(triangle) { - return triangle.a.equals(this.a) && triangle.b.equals(this.b) && triangle.c.equals(this.c); - } -} - -const _colorKeywords = { - aliceblue: 0xf0f8ff, - antiquewhite: 0xfaebd7, - aqua: 0x00ffff, - aquamarine: 0x7fffd4, - azure: 0xf0ffff, - beige: 0xf5f5dc, - bisque: 0xffe4c4, - black: 0x000000, - blanchedalmond: 0xffebcd, - blue: 0x0000ff, - blueviolet: 0x8a2be2, - brown: 0xa52a2a, - burlywood: 0xdeb887, - cadetblue: 0x5f9ea0, - chartreuse: 0x7fff00, - chocolate: 0xd2691e, - coral: 0xff7f50, - cornflowerblue: 0x6495ed, - cornsilk: 0xfff8dc, - crimson: 0xdc143c, - cyan: 0x00ffff, - darkblue: 0x00008b, - darkcyan: 0x008b8b, - darkgoldenrod: 0xb8860b, - darkgray: 0xa9a9a9, - darkgreen: 0x006400, - darkgrey: 0xa9a9a9, - darkkhaki: 0xbdb76b, - darkmagenta: 0x8b008b, - darkolivegreen: 0x556b2f, - darkorange: 0xff8c00, - darkorchid: 0x9932cc, - darkred: 0x8b0000, - darksalmon: 0xe9967a, - darkseagreen: 0x8fbc8f, - darkslateblue: 0x483d8b, - darkslategray: 0x2f4f4f, - darkslategrey: 0x2f4f4f, - darkturquoise: 0x00ced1, - darkviolet: 0x9400d3, - deeppink: 0xff1493, - deepskyblue: 0x00bfff, - dimgray: 0x696969, - dimgrey: 0x696969, - dodgerblue: 0x1e90ff, - firebrick: 0xb22222, - floralwhite: 0xfffaf0, - forestgreen: 0x228b22, - fuchsia: 0xff00ff, - gainsboro: 0xdcdcdc, - ghostwhite: 0xf8f8ff, - gold: 0xffd700, - goldenrod: 0xdaa520, - gray: 0x808080, - green: 0x008000, - greenyellow: 0xadff2f, - grey: 0x808080, - honeydew: 0xf0fff0, - hotpink: 0xff69b4, - indianred: 0xcd5c5c, - indigo: 0x4b0082, - ivory: 0xfffff0, - khaki: 0xf0e68c, - lavender: 0xe6e6fa, - lavenderblush: 0xfff0f5, - lawngreen: 0x7cfc00, - lemonchiffon: 0xfffacd, - lightblue: 0xadd8e6, - lightcoral: 0xf08080, - lightcyan: 0xe0ffff, - lightgoldenrodyellow: 0xfafad2, - lightgray: 0xd3d3d3, - lightgreen: 0x90ee90, - lightgrey: 0xd3d3d3, - lightpink: 0xffb6c1, - lightsalmon: 0xffa07a, - lightseagreen: 0x20b2aa, - lightskyblue: 0x87cefa, - lightslategray: 0x778899, - lightslategrey: 0x778899, - lightsteelblue: 0xb0c4de, - lightyellow: 0xffffe0, - lime: 0x00ff00, - limegreen: 0x32cd32, - linen: 0xfaf0e6, - magenta: 0xff00ff, - maroon: 0x800000, - mediumaquamarine: 0x66cdaa, - mediumblue: 0x0000cd, - mediumorchid: 0xba55d3, - mediumpurple: 0x9370db, - mediumseagreen: 0x3cb371, - mediumslateblue: 0x7b68ee, - mediumspringgreen: 0x00fa9a, - mediumturquoise: 0x48d1cc, - mediumvioletred: 0xc71585, - midnightblue: 0x191970, - mintcream: 0xf5fffa, - mistyrose: 0xffe4e1, - moccasin: 0xffe4b5, - navajowhite: 0xffdead, - navy: 0x000080, - oldlace: 0xfdf5e6, - olive: 0x808000, - olivedrab: 0x6b8e23, - orange: 0xffa500, - orangered: 0xff4500, - orchid: 0xda70d6, - palegoldenrod: 0xeee8aa, - palegreen: 0x98fb98, - paleturquoise: 0xafeeee, - palevioletred: 0xdb7093, - papayawhip: 0xffefd5, - peachpuff: 0xffdab9, - peru: 0xcd853f, - pink: 0xffc0cb, - plum: 0xdda0dd, - powderblue: 0xb0e0e6, - purple: 0x800080, - rebeccapurple: 0x663399, - red: 0xff0000, - rosybrown: 0xbc8f8f, - royalblue: 0x4169e1, - saddlebrown: 0x8b4513, - salmon: 0xfa8072, - sandybrown: 0xf4a460, - seagreen: 0x2e8b57, - seashell: 0xfff5ee, - sienna: 0xa0522d, - silver: 0xc0c0c0, - skyblue: 0x87ceeb, - slateblue: 0x6a5acd, - slategray: 0x708090, - slategrey: 0x708090, - snow: 0xfffafa, - springgreen: 0x00ff7f, - steelblue: 0x4682b4, - tan: 0xd2b48c, - teal: 0x008080, - thistle: 0xd8bfd8, - tomato: 0xff6347, - turquoise: 0x40e0d0, - violet: 0xee82ee, - wheat: 0xf5deb3, - white: 0xffffff, - whitesmoke: 0xf5f5f5, - yellow: 0xffff00, - yellowgreen: 0x9acd32, -}; - -const _hslA = { h: 0, s: 0, l: 0 }; -const _hslB = { h: 0, s: 0, l: 0 }; - -function hue2rgb(p, q, t) { - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1 / 6) return p + (q - p) * 6 * t; - if (t < 1 / 2) return q; - if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t); - return p; -} - -class Color { - constructor(r, g, b) { - this.isColor = true; - - this.r = 1; - this.g = 1; - this.b = 1; - - return this.set(r, g, b); - } - - set(r, g, b) { - if (g === undefined && b === undefined) { - // r is THREE.Color, hex or string - - const value = r; - - if (value && value.isColor) { - this.copy(value); - } else if (typeof value === 'number') { - this.setHex(value); - } else if (typeof value === 'string') { - this.setStyle(value); - } - } else { - this.setRGB(r, g, b); - } - - return this; - } - - setScalar(scalar) { - this.r = scalar; - this.g = scalar; - this.b = scalar; - - return this; - } - - setHex(hex, colorSpace = SRGBColorSpace) { - hex = Math.floor(hex); - - this.r = ((hex >> 16) & 255) / 255; - this.g = ((hex >> 8) & 255) / 255; - this.b = (hex & 255) / 255; - - ColorManagement.toWorkingColorSpace(this, colorSpace); - - return this; - } - - setRGB(r, g, b, colorSpace = ColorManagement.workingColorSpace) { - this.r = r; - this.g = g; - this.b = b; - - ColorManagement.toWorkingColorSpace(this, colorSpace); - - return this; - } - - setHSL(h, s, l, colorSpace = ColorManagement.workingColorSpace) { - // h,s,l ranges are in 0.0 - 1.0 - h = euclideanModulo(h, 1); - s = clamp$1(s, 0, 1); - l = clamp$1(l, 0, 1); - - if (s === 0) { - this.r = this.g = this.b = l; - } else { - const p = l <= 0.5 ? l * (1 + s) : l + s - l * s; - const q = 2 * l - p; - - this.r = hue2rgb(q, p, h + 1 / 3); - this.g = hue2rgb(q, p, h); - this.b = hue2rgb(q, p, h - 1 / 3); - } - - ColorManagement.toWorkingColorSpace(this, colorSpace); - - return this; - } - - setStyle(style, colorSpace = SRGBColorSpace) { - function handleAlpha(string) { - if (string === undefined) return; - - if (parseFloat(string) < 1) { - console.warn('THREE.Color: Alpha component of ' + style + ' will be ignored.'); - } - } - - let m; - - if ((m = /^(\w+)\(([^\)]*)\)/.exec(style))) { - // rgb / hsl - - let color; - const name = m[1]; - const components = m[2]; - - switch (name) { - case 'rgb': - case 'rgba': - if ((color = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components))) { - // rgb(255,0,0) rgba(255,0,0,0.5) - - handleAlpha(color[4]); - - return this.setRGB(Math.min(255, parseInt(color[1], 10)) / 255, Math.min(255, parseInt(color[2], 10)) / 255, Math.min(255, parseInt(color[3], 10)) / 255, colorSpace); - } - - if ((color = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components))) { - // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5) - - handleAlpha(color[4]); - - return this.setRGB(Math.min(100, parseInt(color[1], 10)) / 100, Math.min(100, parseInt(color[2], 10)) / 100, Math.min(100, parseInt(color[3], 10)) / 100, colorSpace); - } - - break; - - case 'hsl': - case 'hsla': - if ((color = /^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components))) { - // hsl(120,50%,50%) hsla(120,50%,50%,0.5) - - handleAlpha(color[4]); - - return this.setHSL(parseFloat(color[1]) / 360, parseFloat(color[2]) / 100, parseFloat(color[3]) / 100, colorSpace); - } - - break; - - default: - console.warn('THREE.Color: Unknown color model ' + style); - } - } else if ((m = /^\#([A-Fa-f\d]+)$/.exec(style))) { - // hex color - - const hex = m[1]; - const size = hex.length; - - if (size === 3) { - // #ff0 - return this.setRGB(parseInt(hex.charAt(0), 16) / 15, parseInt(hex.charAt(1), 16) / 15, parseInt(hex.charAt(2), 16) / 15, colorSpace); - } else if (size === 6) { - // #ff0000 - return this.setHex(parseInt(hex, 16), colorSpace); - } else { - console.warn('THREE.Color: Invalid hex color ' + style); - } - } else if (style && style.length > 0) { - return this.setColorName(style, colorSpace); - } - - return this; - } - - setColorName(style, colorSpace = SRGBColorSpace) { - // color keywords - const hex = _colorKeywords[style.toLowerCase()]; - - if (hex !== undefined) { - // red - this.setHex(hex, colorSpace); - } else { - // unknown color - console.warn('THREE.Color: Unknown color ' + style); - } - - return this; - } - - clone() { - return new this.constructor(this.r, this.g, this.b); - } - - copy(color) { - this.r = color.r; - this.g = color.g; - this.b = color.b; - - return this; - } - - copySRGBToLinear(color) { - this.r = SRGBToLinear(color.r); - this.g = SRGBToLinear(color.g); - this.b = SRGBToLinear(color.b); - - return this; - } - - copyLinearToSRGB(color) { - this.r = LinearToSRGB(color.r); - this.g = LinearToSRGB(color.g); - this.b = LinearToSRGB(color.b); - - return this; - } - - convertSRGBToLinear() { - this.copySRGBToLinear(this); - - return this; - } - - convertLinearToSRGB() { - this.copyLinearToSRGB(this); - - return this; - } - - getHex(colorSpace = SRGBColorSpace) { - ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace); - - return Math.round(clamp$1(_color.r * 255, 0, 255)) * 65536 + Math.round(clamp$1(_color.g * 255, 0, 255)) * 256 + Math.round(clamp$1(_color.b * 255, 0, 255)); - } - - getHexString(colorSpace = SRGBColorSpace) { - return ('000000' + this.getHex(colorSpace).toString(16)).slice(-6); - } - - getHSL(target, colorSpace = ColorManagement.workingColorSpace) { - // h,s,l ranges are in 0.0 - 1.0 - - ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace); - - const r = _color.r, - g = _color.g, - b = _color.b; - - const max = Math.max(r, g, b); - const min = Math.min(r, g, b); - - let hue, saturation; - const lightness = (min + max) / 2.0; - - if (min === max) { - hue = 0; - saturation = 0; - } else { - const delta = max - min; - - saturation = lightness <= 0.5 ? delta / (max + min) : delta / (2 - max - min); - - switch (max) { - case r: - hue = (g - b) / delta + (g < b ? 6 : 0); - break; - case g: - hue = (b - r) / delta + 2; - break; - case b: - hue = (r - g) / delta + 4; - break; - } - - hue /= 6; - } - - target.h = hue; - target.s = saturation; - target.l = lightness; - - return target; - } - - getRGB(target, colorSpace = ColorManagement.workingColorSpace) { - ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace); - - target.r = _color.r; - target.g = _color.g; - target.b = _color.b; - - return target; - } - - getStyle(colorSpace = SRGBColorSpace) { - ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace); - - const r = _color.r, - g = _color.g, - b = _color.b; - - if (colorSpace !== SRGBColorSpace) { - // Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/). - return `color(${colorSpace} ${r.toFixed(3)} ${g.toFixed(3)} ${b.toFixed(3)})`; - } - - return `rgb(${Math.round(r * 255)},${Math.round(g * 255)},${Math.round(b * 255)})`; - } - - offsetHSL(h, s, l) { - this.getHSL(_hslA); - - return this.setHSL(_hslA.h + h, _hslA.s + s, _hslA.l + l); - } - - add(color) { - this.r += color.r; - this.g += color.g; - this.b += color.b; - - return this; - } - - addColors(color1, color2) { - this.r = color1.r + color2.r; - this.g = color1.g + color2.g; - this.b = color1.b + color2.b; - - return this; - } - - addScalar(s) { - this.r += s; - this.g += s; - this.b += s; - - return this; - } - - sub(color) { - this.r = Math.max(0, this.r - color.r); - this.g = Math.max(0, this.g - color.g); - this.b = Math.max(0, this.b - color.b); - - return this; - } - - multiply(color) { - this.r *= color.r; - this.g *= color.g; - this.b *= color.b; - - return this; - } - - multiplyScalar(s) { - this.r *= s; - this.g *= s; - this.b *= s; - - return this; - } - - lerp(color, alpha) { - this.r += (color.r - this.r) * alpha; - this.g += (color.g - this.g) * alpha; - this.b += (color.b - this.b) * alpha; - - return this; - } - - lerpColors(color1, color2, alpha) { - this.r = color1.r + (color2.r - color1.r) * alpha; - this.g = color1.g + (color2.g - color1.g) * alpha; - this.b = color1.b + (color2.b - color1.b) * alpha; - - return this; - } - - lerpHSL(color, alpha) { - this.getHSL(_hslA); - color.getHSL(_hslB); - - const h = lerp(_hslA.h, _hslB.h, alpha); - const s = lerp(_hslA.s, _hslB.s, alpha); - const l = lerp(_hslA.l, _hslB.l, alpha); - - this.setHSL(h, s, l); - - return this; - } - - setFromVector3(v) { - this.r = v.x; - this.g = v.y; - this.b = v.z; - - return this; - } - - applyMatrix3(m) { - const r = this.r, - g = this.g, - b = this.b; - const e = m.elements; - - this.r = e[0] * r + e[3] * g + e[6] * b; - this.g = e[1] * r + e[4] * g + e[7] * b; - this.b = e[2] * r + e[5] * g + e[8] * b; - - return this; - } - - equals(c) { - return c.r === this.r && c.g === this.g && c.b === this.b; - } - - fromArray(array, offset = 0) { - this.r = array[offset]; - this.g = array[offset + 1]; - this.b = array[offset + 2]; - - return this; - } - - toArray(array = [], offset = 0) { - array[offset] = this.r; - array[offset + 1] = this.g; - array[offset + 2] = this.b; - - return array; - } - - fromBufferAttribute(attribute, index) { - this.r = attribute.getX(index); - this.g = attribute.getY(index); - this.b = attribute.getZ(index); - - return this; - } - - toJSON() { - return this.getHex(); - } - - *[Symbol.iterator]() { - yield this.r; - yield this.g; - yield this.b; - } -} - -const _color = /*@__PURE__*/ new Color(); - -Color.NAMES = _colorKeywords; - -let _materialId = 0; - -class Material extends EventDispatcher { - constructor() { - super(); - - this.isMaterial = true; - - Object.defineProperty(this, 'id', { value: _materialId++ }); - - this.uuid = generateUUID(); - - this.name = ''; - this.type = 'Material'; - - this.blending = NormalBlending; - this.side = FrontSide; - this.vertexColors = false; - - this.opacity = 1; - this.transparent = false; - this.alphaHash = false; - - this.blendSrc = SrcAlphaFactor; - this.blendDst = OneMinusSrcAlphaFactor; - this.blendEquation = AddEquation; - this.blendSrcAlpha = null; - this.blendDstAlpha = null; - this.blendEquationAlpha = null; - this.blendColor = new Color(0, 0, 0); - this.blendAlpha = 0; - - this.depthFunc = LessEqualDepth; - this.depthTest = true; - this.depthWrite = true; - - this.stencilWriteMask = 0xff; - this.stencilFunc = AlwaysStencilFunc; - this.stencilRef = 0; - this.stencilFuncMask = 0xff; - this.stencilFail = KeepStencilOp; - this.stencilZFail = KeepStencilOp; - this.stencilZPass = KeepStencilOp; - this.stencilWrite = false; - - this.clippingPlanes = null; - this.clipIntersection = false; - this.clipShadows = false; - - this.shadowSide = null; - - this.colorWrite = true; - - this.precision = null; // override the renderer's default precision for this material - - this.polygonOffset = false; - this.polygonOffsetFactor = 0; - this.polygonOffsetUnits = 0; - - this.dithering = false; - - this.alphaToCoverage = false; - this.premultipliedAlpha = false; - this.forceSinglePass = false; - - this.visible = true; - - this.toneMapped = true; - - this.userData = {}; - - this.version = 0; - - this._alphaTest = 0; - } - - get alphaTest() { - return this._alphaTest; - } - - set alphaTest(value) { - if (this._alphaTest > 0 !== value > 0) { - this.version++; - } - - this._alphaTest = value; - } - - // onBeforeRender and onBeforeCompile only supported in WebGLRenderer - - onBeforeRender(/* renderer, scene, camera, geometry, object, group */) {} - - onBeforeCompile(/* shaderobject, renderer */) {} - - customProgramCacheKey() { - return this.onBeforeCompile.toString(); - } - - setValues(values) { - if (values === undefined) return; - - for (const key in values) { - const newValue = values[key]; - - if (newValue === undefined) { - console.warn(`THREE.Material: parameter '${key}' has value of undefined.`); - continue; - } - - const currentValue = this[key]; - - if (currentValue === undefined) { - console.warn(`THREE.Material: '${key}' is not a property of THREE.${this.type}.`); - continue; - } - - if (currentValue && currentValue.isColor) { - currentValue.set(newValue); - } else if (currentValue && currentValue.isVector3 && newValue && newValue.isVector3) { - currentValue.copy(newValue); - } else { - this[key] = newValue; - } - } - } - - toJSON(meta) { - const isRootObject = meta === undefined || typeof meta === 'string'; - - if (isRootObject) { - meta = { - textures: {}, - images: {}, - }; - } - - const data = { - metadata: { - version: 4.6, - type: 'Material', - generator: 'Material.toJSON', - }, - }; - - // standard Material serialization - data.uuid = this.uuid; - data.type = this.type; - - if (this.name !== '') data.name = this.name; - - if (this.color && this.color.isColor) data.color = this.color.getHex(); - - if (this.roughness !== undefined) data.roughness = this.roughness; - if (this.metalness !== undefined) data.metalness = this.metalness; - - if (this.sheen !== undefined) data.sheen = this.sheen; - if (this.sheenColor && this.sheenColor.isColor) data.sheenColor = this.sheenColor.getHex(); - if (this.sheenRoughness !== undefined) data.sheenRoughness = this.sheenRoughness; - if (this.emissive && this.emissive.isColor) data.emissive = this.emissive.getHex(); - if (this.emissiveIntensity !== undefined && this.emissiveIntensity !== 1) data.emissiveIntensity = this.emissiveIntensity; - - if (this.specular && this.specular.isColor) data.specular = this.specular.getHex(); - if (this.specularIntensity !== undefined) data.specularIntensity = this.specularIntensity; - if (this.specularColor && this.specularColor.isColor) data.specularColor = this.specularColor.getHex(); - if (this.shininess !== undefined) data.shininess = this.shininess; - if (this.clearcoat !== undefined) data.clearcoat = this.clearcoat; - if (this.clearcoatRoughness !== undefined) data.clearcoatRoughness = this.clearcoatRoughness; - - if (this.clearcoatMap && this.clearcoatMap.isTexture) { - data.clearcoatMap = this.clearcoatMap.toJSON(meta).uuid; - } - - if (this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture) { - data.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(meta).uuid; - } - - if (this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture) { - data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(meta).uuid; - data.clearcoatNormalScale = this.clearcoatNormalScale.toArray(); - } - - if (this.dispersion !== undefined) data.dispersion = this.dispersion; - - if (this.iridescence !== undefined) data.iridescence = this.iridescence; - if (this.iridescenceIOR !== undefined) data.iridescenceIOR = this.iridescenceIOR; - if (this.iridescenceThicknessRange !== undefined) data.iridescenceThicknessRange = this.iridescenceThicknessRange; - - if (this.iridescenceMap && this.iridescenceMap.isTexture) { - data.iridescenceMap = this.iridescenceMap.toJSON(meta).uuid; - } - - if (this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture) { - data.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON(meta).uuid; - } - - if (this.anisotropy !== undefined) data.anisotropy = this.anisotropy; - if (this.anisotropyRotation !== undefined) data.anisotropyRotation = this.anisotropyRotation; - - if (this.anisotropyMap && this.anisotropyMap.isTexture) { - data.anisotropyMap = this.anisotropyMap.toJSON(meta).uuid; - } - - if (this.map && this.map.isTexture) data.map = this.map.toJSON(meta).uuid; - if (this.matcap && this.matcap.isTexture) data.matcap = this.matcap.toJSON(meta).uuid; - if (this.alphaMap && this.alphaMap.isTexture) data.alphaMap = this.alphaMap.toJSON(meta).uuid; - - if (this.lightMap && this.lightMap.isTexture) { - data.lightMap = this.lightMap.toJSON(meta).uuid; - data.lightMapIntensity = this.lightMapIntensity; - } - - if (this.aoMap && this.aoMap.isTexture) { - data.aoMap = this.aoMap.toJSON(meta).uuid; - data.aoMapIntensity = this.aoMapIntensity; - } - - if (this.bumpMap && this.bumpMap.isTexture) { - data.bumpMap = this.bumpMap.toJSON(meta).uuid; - data.bumpScale = this.bumpScale; - } - - if (this.normalMap && this.normalMap.isTexture) { - data.normalMap = this.normalMap.toJSON(meta).uuid; - data.normalMapType = this.normalMapType; - data.normalScale = this.normalScale.toArray(); - } - - if (this.displacementMap && this.displacementMap.isTexture) { - data.displacementMap = this.displacementMap.toJSON(meta).uuid; - data.displacementScale = this.displacementScale; - data.displacementBias = this.displacementBias; - } - - if (this.roughnessMap && this.roughnessMap.isTexture) data.roughnessMap = this.roughnessMap.toJSON(meta).uuid; - if (this.metalnessMap && this.metalnessMap.isTexture) data.metalnessMap = this.metalnessMap.toJSON(meta).uuid; - - if (this.emissiveMap && this.emissiveMap.isTexture) data.emissiveMap = this.emissiveMap.toJSON(meta).uuid; - if (this.specularMap && this.specularMap.isTexture) data.specularMap = this.specularMap.toJSON(meta).uuid; - if (this.specularIntensityMap && this.specularIntensityMap.isTexture) data.specularIntensityMap = this.specularIntensityMap.toJSON(meta).uuid; - if (this.specularColorMap && this.specularColorMap.isTexture) data.specularColorMap = this.specularColorMap.toJSON(meta).uuid; - - if (this.envMap && this.envMap.isTexture) { - data.envMap = this.envMap.toJSON(meta).uuid; - - if (this.combine !== undefined) data.combine = this.combine; - } - - if (this.envMapRotation !== undefined) data.envMapRotation = this.envMapRotation.toArray(); - if (this.envMapIntensity !== undefined) data.envMapIntensity = this.envMapIntensity; - if (this.reflectivity !== undefined) data.reflectivity = this.reflectivity; - if (this.refractionRatio !== undefined) data.refractionRatio = this.refractionRatio; - - if (this.gradientMap && this.gradientMap.isTexture) { - data.gradientMap = this.gradientMap.toJSON(meta).uuid; - } - - if (this.transmission !== undefined) data.transmission = this.transmission; - if (this.transmissionMap && this.transmissionMap.isTexture) data.transmissionMap = this.transmissionMap.toJSON(meta).uuid; - if (this.thickness !== undefined) data.thickness = this.thickness; - if (this.thicknessMap && this.thicknessMap.isTexture) data.thicknessMap = this.thicknessMap.toJSON(meta).uuid; - if (this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity) data.attenuationDistance = this.attenuationDistance; - if (this.attenuationColor !== undefined) data.attenuationColor = this.attenuationColor.getHex(); - - if (this.size !== undefined) data.size = this.size; - if (this.shadowSide !== null) data.shadowSide = this.shadowSide; - if (this.sizeAttenuation !== undefined) data.sizeAttenuation = this.sizeAttenuation; - - if (this.blending !== NormalBlending) data.blending = this.blending; - if (this.side !== FrontSide) data.side = this.side; - if (this.vertexColors === true) data.vertexColors = true; - - if (this.opacity < 1) data.opacity = this.opacity; - if (this.transparent === true) data.transparent = true; - - if (this.blendSrc !== SrcAlphaFactor) data.blendSrc = this.blendSrc; - if (this.blendDst !== OneMinusSrcAlphaFactor) data.blendDst = this.blendDst; - if (this.blendEquation !== AddEquation) data.blendEquation = this.blendEquation; - if (this.blendSrcAlpha !== null) data.blendSrcAlpha = this.blendSrcAlpha; - if (this.blendDstAlpha !== null) data.blendDstAlpha = this.blendDstAlpha; - if (this.blendEquationAlpha !== null) data.blendEquationAlpha = this.blendEquationAlpha; - if (this.blendColor && this.blendColor.isColor) data.blendColor = this.blendColor.getHex(); - if (this.blendAlpha !== 0) data.blendAlpha = this.blendAlpha; - - if (this.depthFunc !== LessEqualDepth) data.depthFunc = this.depthFunc; - if (this.depthTest === false) data.depthTest = this.depthTest; - if (this.depthWrite === false) data.depthWrite = this.depthWrite; - if (this.colorWrite === false) data.colorWrite = this.colorWrite; - - if (this.stencilWriteMask !== 0xff) data.stencilWriteMask = this.stencilWriteMask; - if (this.stencilFunc !== AlwaysStencilFunc) data.stencilFunc = this.stencilFunc; - if (this.stencilRef !== 0) data.stencilRef = this.stencilRef; - if (this.stencilFuncMask !== 0xff) data.stencilFuncMask = this.stencilFuncMask; - if (this.stencilFail !== KeepStencilOp) data.stencilFail = this.stencilFail; - if (this.stencilZFail !== KeepStencilOp) data.stencilZFail = this.stencilZFail; - if (this.stencilZPass !== KeepStencilOp) data.stencilZPass = this.stencilZPass; - if (this.stencilWrite === true) data.stencilWrite = this.stencilWrite; - - // rotation (SpriteMaterial) - if (this.rotation !== undefined && this.rotation !== 0) data.rotation = this.rotation; - - if (this.polygonOffset === true) data.polygonOffset = true; - if (this.polygonOffsetFactor !== 0) data.polygonOffsetFactor = this.polygonOffsetFactor; - if (this.polygonOffsetUnits !== 0) data.polygonOffsetUnits = this.polygonOffsetUnits; - - if (this.linewidth !== undefined && this.linewidth !== 1) data.linewidth = this.linewidth; - if (this.dashSize !== undefined) data.dashSize = this.dashSize; - if (this.gapSize !== undefined) data.gapSize = this.gapSize; - if (this.scale !== undefined) data.scale = this.scale; - - if (this.dithering === true) data.dithering = true; - - if (this.alphaTest > 0) data.alphaTest = this.alphaTest; - if (this.alphaHash === true) data.alphaHash = true; - if (this.alphaToCoverage === true) data.alphaToCoverage = true; - if (this.premultipliedAlpha === true) data.premultipliedAlpha = true; - if (this.forceSinglePass === true) data.forceSinglePass = true; - - if (this.wireframe === true) data.wireframe = true; - if (this.wireframeLinewidth > 1) data.wireframeLinewidth = this.wireframeLinewidth; - if (this.wireframeLinecap !== 'round') data.wireframeLinecap = this.wireframeLinecap; - if (this.wireframeLinejoin !== 'round') data.wireframeLinejoin = this.wireframeLinejoin; - - if (this.flatShading === true) data.flatShading = true; - - if (this.visible === false) data.visible = false; - - if (this.toneMapped === false) data.toneMapped = false; - - if (this.fog === false) data.fog = false; - - if (Object.keys(this.userData).length > 0) data.userData = this.userData; - - // TODO: Copied from Object3D.toJSON - - function extractFromCache(cache) { - const values = []; - - for (const key in cache) { - const data = cache[key]; - delete data.metadata; - values.push(data); - } - - return values; - } - - if (isRootObject) { - const textures = extractFromCache(meta.textures); - const images = extractFromCache(meta.images); - - if (textures.length > 0) data.textures = textures; - if (images.length > 0) data.images = images; - } - - return data; - } - - clone() { - return new this.constructor().copy(this); - } - - copy(source) { - this.name = source.name; - - this.blending = source.blending; - this.side = source.side; - this.vertexColors = source.vertexColors; - - this.opacity = source.opacity; - this.transparent = source.transparent; - - this.blendSrc = source.blendSrc; - this.blendDst = source.blendDst; - this.blendEquation = source.blendEquation; - this.blendSrcAlpha = source.blendSrcAlpha; - this.blendDstAlpha = source.blendDstAlpha; - this.blendEquationAlpha = source.blendEquationAlpha; - this.blendColor.copy(source.blendColor); - this.blendAlpha = source.blendAlpha; - - this.depthFunc = source.depthFunc; - this.depthTest = source.depthTest; - this.depthWrite = source.depthWrite; - - this.stencilWriteMask = source.stencilWriteMask; - this.stencilFunc = source.stencilFunc; - this.stencilRef = source.stencilRef; - this.stencilFuncMask = source.stencilFuncMask; - this.stencilFail = source.stencilFail; - this.stencilZFail = source.stencilZFail; - this.stencilZPass = source.stencilZPass; - this.stencilWrite = source.stencilWrite; - - const srcPlanes = source.clippingPlanes; - let dstPlanes = null; - - if (srcPlanes !== null) { - const n = srcPlanes.length; - dstPlanes = new Array(n); - - for (let i = 0; i !== n; ++i) { - dstPlanes[i] = srcPlanes[i].clone(); - } - } - - this.clippingPlanes = dstPlanes; - this.clipIntersection = source.clipIntersection; - this.clipShadows = source.clipShadows; - - this.shadowSide = source.shadowSide; - - this.colorWrite = source.colorWrite; - - this.precision = source.precision; - - this.polygonOffset = source.polygonOffset; - this.polygonOffsetFactor = source.polygonOffsetFactor; - this.polygonOffsetUnits = source.polygonOffsetUnits; - - this.dithering = source.dithering; - - this.alphaTest = source.alphaTest; - this.alphaHash = source.alphaHash; - this.alphaToCoverage = source.alphaToCoverage; - this.premultipliedAlpha = source.premultipliedAlpha; - this.forceSinglePass = source.forceSinglePass; - - this.visible = source.visible; - - this.toneMapped = source.toneMapped; - - this.userData = JSON.parse(JSON.stringify(source.userData)); - - return this; - } - - dispose() { - this.dispatchEvent({ type: 'dispose' }); - } - - set needsUpdate(value) { - if (value === true) this.version++; - } - - onBuild(/* shaderobject, renderer */) { - console.warn('Material: onBuild() has been removed.'); // @deprecated, r166 - } -} - -class MeshBasicMaterial extends Material { - constructor(parameters) { - super(); - - this.isMeshBasicMaterial = true; - - this.type = 'MeshBasicMaterial'; - - this.color = new Color(0xffffff); // emissive - - this.map = null; - - this.lightMap = null; - this.lightMapIntensity = 1.0; - - this.aoMap = null; - this.aoMapIntensity = 1.0; - - this.specularMap = null; - - this.alphaMap = null; - - this.envMap = null; - this.envMapRotation = new Euler(); - this.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.fog = true; - - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - - this.color.copy(source.color); - - this.map = source.map; - - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - - this.specularMap = source.specularMap; - - this.alphaMap = source.alphaMap; - - this.envMap = source.envMap; - this.envMapRotation.copy(source.envMapRotation); - this.combine = source.combine; - this.reflectivity = source.reflectivity; - this.refractionRatio = source.refractionRatio; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - - this.fog = source.fog; - - return this; - } -} - -// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf - -const _tables = /*@__PURE__*/ _generateTables(); - -function _generateTables() { - // float32 to float16 helpers - - const buffer = new ArrayBuffer(4); - const floatView = new Float32Array(buffer); - const uint32View = new Uint32Array(buffer); - - const baseTable = new Uint32Array(512); - const shiftTable = new Uint32Array(512); - - for (let i = 0; i < 256; ++i) { - const e = i - 127; - - // very small number (0, -0) - - if (e < -27) { - baseTable[i] = 0x0000; - baseTable[i | 0x100] = 0x8000; - shiftTable[i] = 24; - shiftTable[i | 0x100] = 24; - - // small number (denorm) - } else if (e < -14) { - baseTable[i] = 0x0400 >> (-e - 14); - baseTable[i | 0x100] = (0x0400 >> (-e - 14)) | 0x8000; - shiftTable[i] = -e - 1; - shiftTable[i | 0x100] = -e - 1; - - // normal number - } else if (e <= 15) { - baseTable[i] = (e + 15) << 10; - baseTable[i | 0x100] = ((e + 15) << 10) | 0x8000; - shiftTable[i] = 13; - shiftTable[i | 0x100] = 13; - - // large number (Infinity, -Infinity) - } else if (e < 128) { - baseTable[i] = 0x7c00; - baseTable[i | 0x100] = 0xfc00; - shiftTable[i] = 24; - shiftTable[i | 0x100] = 24; - - // stay (NaN, Infinity, -Infinity) - } else { - baseTable[i] = 0x7c00; - baseTable[i | 0x100] = 0xfc00; - shiftTable[i] = 13; - shiftTable[i | 0x100] = 13; - } - } - - // float16 to float32 helpers - - const mantissaTable = new Uint32Array(2048); - const exponentTable = new Uint32Array(64); - const offsetTable = new Uint32Array(64); - - for (let i = 1; i < 1024; ++i) { - let m = i << 13; // zero pad mantissa bits - let e = 0; // zero exponent - - // normalized - while ((m & 0x00800000) === 0) { - m <<= 1; - e -= 0x00800000; // decrement exponent - } - - m &= ~0x00800000; // clear leading 1 bit - e += 0x38800000; // adjust bias - - mantissaTable[i] = m | e; - } - - for (let i = 1024; i < 2048; ++i) { - mantissaTable[i] = 0x38000000 + ((i - 1024) << 13); - } - - for (let i = 1; i < 31; ++i) { - exponentTable[i] = i << 23; - } - - exponentTable[31] = 0x47800000; - exponentTable[32] = 0x80000000; - - for (let i = 33; i < 63; ++i) { - exponentTable[i] = 0x80000000 + ((i - 32) << 23); - } - - exponentTable[63] = 0xc7800000; - - for (let i = 1; i < 64; ++i) { - if (i !== 32) { - offsetTable[i] = 1024; - } - } - - return { - floatView: floatView, - uint32View: uint32View, - baseTable: baseTable, - shiftTable: shiftTable, - mantissaTable: mantissaTable, - exponentTable: exponentTable, - offsetTable: offsetTable, - }; -} - -// float32 to float16 - -function toHalfFloat(val) { - if (Math.abs(val) > 65504) console.warn('THREE.DataUtils.toHalfFloat(): Value out of range.'); - - val = clamp$1(val, -65504, 65504); - - _tables.floatView[0] = val; - const f = _tables.uint32View[0]; - const e = (f >> 23) & 0x1ff; - return _tables.baseTable[e] + ((f & 0x007fffff) >> _tables.shiftTable[e]); -} - -// float16 to float32 - -function fromHalfFloat(val) { - const m = val >> 10; - _tables.uint32View[0] = _tables.mantissaTable[_tables.offsetTable[m] + (val & 0x3ff)] + _tables.exponentTable[m]; - return _tables.floatView[0]; -} - -const DataUtils = { - toHalfFloat: toHalfFloat, - fromHalfFloat: fromHalfFloat, -}; - -const _vector$9 = /*@__PURE__*/ new Vector3(); -const _vector2$1 = /*@__PURE__*/ new Vector2(); - -class BufferAttribute { - constructor(array, itemSize, normalized = false) { - if (Array.isArray(array)) { - throw new TypeError('THREE.BufferAttribute: array should be a Typed Array.'); - } - - this.isBufferAttribute = true; - - this.name = ''; - - this.array = array; - this.itemSize = itemSize; - this.count = array !== undefined ? array.length / itemSize : 0; - this.normalized = normalized; - - this.usage = StaticDrawUsage; - this._updateRange = { offset: 0, count: -1 }; - this.updateRanges = []; - this.gpuType = FloatType; - - this.version = 0; - } - - onUploadCallback() {} - - set needsUpdate(value) { - if (value === true) this.version++; - } - - get updateRange() { - warnOnce('THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead.'); // @deprecated, r159 - return this._updateRange; - } - - setUsage(value) { - this.usage = value; - - return this; - } - - addUpdateRange(start, count) { - this.updateRanges.push({ start, count }); - } - - clearUpdateRanges() { - this.updateRanges.length = 0; - } - - copy(source) { - this.name = source.name; - this.array = new source.array.constructor(source.array); - this.itemSize = source.itemSize; - this.count = source.count; - this.normalized = source.normalized; - - this.usage = source.usage; - this.gpuType = source.gpuType; - - return this; - } - - copyAt(index1, attribute, index2) { - index1 *= this.itemSize; - index2 *= attribute.itemSize; - - for (let i = 0, l = this.itemSize; i < l; i++) { - this.array[index1 + i] = attribute.array[index2 + i]; - } - - return this; - } - - copyArray(array) { - this.array.set(array); - - return this; - } - - applyMatrix3(m) { - if (this.itemSize === 2) { - for (let i = 0, l = this.count; i < l; i++) { - _vector2$1.fromBufferAttribute(this, i); - _vector2$1.applyMatrix3(m); - - this.setXY(i, _vector2$1.x, _vector2$1.y); - } - } else if (this.itemSize === 3) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$9.fromBufferAttribute(this, i); - _vector$9.applyMatrix3(m); - - this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); - } - } - - return this; - } - - applyMatrix4(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$9.fromBufferAttribute(this, i); - - _vector$9.applyMatrix4(m); - - this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); - } - - return this; - } - - applyNormalMatrix(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$9.fromBufferAttribute(this, i); - - _vector$9.applyNormalMatrix(m); - - this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); - } - - return this; - } - - transformDirection(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$9.fromBufferAttribute(this, i); - - _vector$9.transformDirection(m); - - this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); - } - - return this; - } - - set(value, offset = 0) { - // Matching BufferAttribute constructor, do not normalize the array. - this.array.set(value, offset); - - return this; - } - - getComponent(index, component) { - let value = this.array[index * this.itemSize + component]; - - if (this.normalized) value = denormalize(value, this.array); - - return value; - } - - setComponent(index, component, value) { - if (this.normalized) value = normalize$1(value, this.array); - - this.array[index * this.itemSize + component] = value; - - return this; - } - - getX(index) { - let x = this.array[index * this.itemSize]; - - if (this.normalized) x = denormalize(x, this.array); - - return x; - } - - setX(index, x) { - if (this.normalized) x = normalize$1(x, this.array); - - this.array[index * this.itemSize] = x; - - return this; - } - - getY(index) { - let y = this.array[index * this.itemSize + 1]; - - if (this.normalized) y = denormalize(y, this.array); - - return y; - } - - setY(index, y) { - if (this.normalized) y = normalize$1(y, this.array); - - this.array[index * this.itemSize + 1] = y; - - return this; - } - - getZ(index) { - let z = this.array[index * this.itemSize + 2]; - - if (this.normalized) z = denormalize(z, this.array); - - return z; - } - - setZ(index, z) { - if (this.normalized) z = normalize$1(z, this.array); - - this.array[index * this.itemSize + 2] = z; - - return this; - } - - getW(index) { - let w = this.array[index * this.itemSize + 3]; - - if (this.normalized) w = denormalize(w, this.array); - - return w; - } - - setW(index, w) { - if (this.normalized) w = normalize$1(w, this.array); - - this.array[index * this.itemSize + 3] = w; - - return this; - } - - setXY(index, x, y) { - index *= this.itemSize; - - if (this.normalized) { - x = normalize$1(x, this.array); - y = normalize$1(y, this.array); - } - - this.array[index + 0] = x; - this.array[index + 1] = y; - - return this; - } - - setXYZ(index, x, y, z) { - index *= this.itemSize; - - if (this.normalized) { - x = normalize$1(x, this.array); - y = normalize$1(y, this.array); - z = normalize$1(z, this.array); - } - - this.array[index + 0] = x; - this.array[index + 1] = y; - this.array[index + 2] = z; - - return this; - } - - setXYZW(index, x, y, z, w) { - index *= this.itemSize; - - if (this.normalized) { - x = normalize$1(x, this.array); - y = normalize$1(y, this.array); - z = normalize$1(z, this.array); - w = normalize$1(w, this.array); - } - - this.array[index + 0] = x; - this.array[index + 1] = y; - this.array[index + 2] = z; - this.array[index + 3] = w; - - return this; - } - - onUpload(callback) { - this.onUploadCallback = callback; - - return this; - } - - clone() { - return new this.constructor(this.array, this.itemSize).copy(this); - } - - toJSON() { - const data = { - itemSize: this.itemSize, - type: this.array.constructor.name, - array: Array.from(this.array), - normalized: this.normalized, - }; - - if (this.name !== '') data.name = this.name; - if (this.usage !== StaticDrawUsage) data.usage = this.usage; - - return data; - } -} - -// - -class Int8BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Int8Array(array), itemSize, normalized); - } -} - -class Uint8BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint8Array(array), itemSize, normalized); - } -} - -class Uint8ClampedBufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint8ClampedArray(array), itemSize, normalized); - } -} - -class Int16BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Int16Array(array), itemSize, normalized); - } -} - -class Uint16BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint16Array(array), itemSize, normalized); - } -} - -class Int32BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Int32Array(array), itemSize, normalized); - } -} - -class Uint32BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint32Array(array), itemSize, normalized); - } -} - -class Float16BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint16Array(array), itemSize, normalized); - - this.isFloat16BufferAttribute = true; - } - - getX(index) { - let x = fromHalfFloat(this.array[index * this.itemSize]); - - if (this.normalized) x = denormalize(x, this.array); - - return x; - } - - setX(index, x) { - if (this.normalized) x = normalize$1(x, this.array); - - this.array[index * this.itemSize] = toHalfFloat(x); - - return this; - } - - getY(index) { - let y = fromHalfFloat(this.array[index * this.itemSize + 1]); - - if (this.normalized) y = denormalize(y, this.array); - - return y; - } - - setY(index, y) { - if (this.normalized) y = normalize$1(y, this.array); - - this.array[index * this.itemSize + 1] = toHalfFloat(y); - - return this; - } - - getZ(index) { - let z = fromHalfFloat(this.array[index * this.itemSize + 2]); - - if (this.normalized) z = denormalize(z, this.array); - - return z; - } - - setZ(index, z) { - if (this.normalized) z = normalize$1(z, this.array); - - this.array[index * this.itemSize + 2] = toHalfFloat(z); - - return this; - } - - getW(index) { - let w = fromHalfFloat(this.array[index * this.itemSize + 3]); - - if (this.normalized) w = denormalize(w, this.array); - - return w; - } - - setW(index, w) { - if (this.normalized) w = normalize$1(w, this.array); - - this.array[index * this.itemSize + 3] = toHalfFloat(w); - - return this; - } - - setXY(index, x, y) { - index *= this.itemSize; - - if (this.normalized) { - x = normalize$1(x, this.array); - y = normalize$1(y, this.array); - } - - this.array[index + 0] = toHalfFloat(x); - this.array[index + 1] = toHalfFloat(y); - - return this; - } - - setXYZ(index, x, y, z) { - index *= this.itemSize; - - if (this.normalized) { - x = normalize$1(x, this.array); - y = normalize$1(y, this.array); - z = normalize$1(z, this.array); - } - - this.array[index + 0] = toHalfFloat(x); - this.array[index + 1] = toHalfFloat(y); - this.array[index + 2] = toHalfFloat(z); - - return this; - } - - setXYZW(index, x, y, z, w) { - index *= this.itemSize; - - if (this.normalized) { - x = normalize$1(x, this.array); - y = normalize$1(y, this.array); - z = normalize$1(z, this.array); - w = normalize$1(w, this.array); - } - - this.array[index + 0] = toHalfFloat(x); - this.array[index + 1] = toHalfFloat(y); - this.array[index + 2] = toHalfFloat(z); - this.array[index + 3] = toHalfFloat(w); - - return this; - } -} - -class Float32BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Float32Array(array), itemSize, normalized); - } -} - -let _id$9 = 0; - -const _m1 = /*@__PURE__*/ new Matrix4(); -const _obj = /*@__PURE__*/ new Object3D(); -const _offset = /*@__PURE__*/ new Vector3(); -const _box$2 = /*@__PURE__*/ new Box3(); -const _boxMorphTargets = /*@__PURE__*/ new Box3(); -const _vector$8 = /*@__PURE__*/ new Vector3(); - -class BufferGeometry extends EventDispatcher { - constructor() { - super(); - - this.isBufferGeometry = true; - - Object.defineProperty(this, 'id', { value: _id$9++ }); - - this.uuid = generateUUID(); - - this.name = ''; - this.type = 'BufferGeometry'; - - this.index = null; - this.attributes = {}; - - this.morphAttributes = {}; - this.morphTargetsRelative = false; - - this.groups = []; - - this.boundingBox = null; - this.boundingSphere = null; - - this.drawRange = { start: 0, count: Infinity }; - - this.userData = {}; - } - - getIndex() { - return this.index; - } - - setIndex(index) { - if (Array.isArray(index)) { - this.index = new (arrayNeedsUint32$1(index) ? Uint32BufferAttribute : Uint16BufferAttribute)(index, 1); - } else { - this.index = index; - } - - return this; - } - - getAttribute(name) { - return this.attributes[name]; - } - - setAttribute(name, attribute) { - this.attributes[name] = attribute; - - return this; - } - - deleteAttribute(name) { - delete this.attributes[name]; - - return this; - } - - hasAttribute(name) { - return this.attributes[name] !== undefined; - } - - addGroup(start, count, materialIndex = 0) { - this.groups.push({ - start: start, - count: count, - materialIndex: materialIndex, - }); - } - - clearGroups() { - this.groups = []; - } - - setDrawRange(start, count) { - this.drawRange.start = start; - this.drawRange.count = count; - } - - applyMatrix4(matrix) { - const position = this.attributes.position; - - if (position !== undefined) { - position.applyMatrix4(matrix); - - position.needsUpdate = true; - } - - const normal = this.attributes.normal; - - if (normal !== undefined) { - const normalMatrix = new Matrix3().getNormalMatrix(matrix); - - normal.applyNormalMatrix(normalMatrix); - - normal.needsUpdate = true; - } - - const tangent = this.attributes.tangent; - - if (tangent !== undefined) { - tangent.transformDirection(matrix); - - tangent.needsUpdate = true; - } - - if (this.boundingBox !== null) { - this.computeBoundingBox(); - } - - if (this.boundingSphere !== null) { - this.computeBoundingSphere(); - } - - return this; - } - - applyQuaternion(q) { - _m1.makeRotationFromQuaternion(q); - - this.applyMatrix4(_m1); - - return this; - } - - rotateX(angle) { - // rotate geometry around world x-axis - - _m1.makeRotationX(angle); - - this.applyMatrix4(_m1); - - return this; - } - - rotateY(angle) { - // rotate geometry around world y-axis - - _m1.makeRotationY(angle); - - this.applyMatrix4(_m1); - - return this; - } - - rotateZ(angle) { - // rotate geometry around world z-axis - - _m1.makeRotationZ(angle); - - this.applyMatrix4(_m1); - - return this; - } - - translate(x, y, z) { - // translate geometry - - _m1.makeTranslation(x, y, z); - - this.applyMatrix4(_m1); - - return this; - } - - scale(x, y, z) { - // scale geometry - - _m1.makeScale(x, y, z); - - this.applyMatrix4(_m1); - - return this; - } - - lookAt(vector) { - _obj.lookAt(vector); - - _obj.updateMatrix(); - - this.applyMatrix4(_obj.matrix); - - return this; - } - - center() { - this.computeBoundingBox(); - - this.boundingBox.getCenter(_offset).negate(); - - this.translate(_offset.x, _offset.y, _offset.z); - - return this; - } - - setFromPoints(points) { - const position = []; - - for (let i = 0, l = points.length; i < l; i++) { - const point = points[i]; - position.push(point.x, point.y, point.z || 0); - } - - this.setAttribute('position', new Float32BufferAttribute(position, 3)); - - return this; - } - - computeBoundingBox() { - if (this.boundingBox === null) { - this.boundingBox = new Box3(); - } - - const position = this.attributes.position; - const morphAttributesPosition = this.morphAttributes.position; - - if (position && position.isGLBufferAttribute) { - console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.', this); - - this.boundingBox.set(new Vector3(-Infinity, -Infinity, -Infinity), new Vector3(+Infinity, +Infinity, +Infinity)); - - return; - } - - if (position !== undefined) { - this.boundingBox.setFromBufferAttribute(position); - - // process morph attributes if present - - if (morphAttributesPosition) { - for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { - const morphAttribute = morphAttributesPosition[i]; - _box$2.setFromBufferAttribute(morphAttribute); - - if (this.morphTargetsRelative) { - _vector$8.addVectors(this.boundingBox.min, _box$2.min); - this.boundingBox.expandByPoint(_vector$8); - - _vector$8.addVectors(this.boundingBox.max, _box$2.max); - this.boundingBox.expandByPoint(_vector$8); - } else { - this.boundingBox.expandByPoint(_box$2.min); - this.boundingBox.expandByPoint(_box$2.max); - } - } - } - } else { - this.boundingBox.makeEmpty(); - } - - if (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) { - console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this); - } - } - - computeBoundingSphere() { - if (this.boundingSphere === null) { - this.boundingSphere = new Sphere(); - } - - const position = this.attributes.position; - const morphAttributesPosition = this.morphAttributes.position; - - if (position && position.isGLBufferAttribute) { - console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.', this); - - this.boundingSphere.set(new Vector3(), Infinity); - - return; - } - - if (position) { - // first, find the center of the bounding sphere - - const center = this.boundingSphere.center; - - _box$2.setFromBufferAttribute(position); - - // process morph attributes if present - - if (morphAttributesPosition) { - for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { - const morphAttribute = morphAttributesPosition[i]; - _boxMorphTargets.setFromBufferAttribute(morphAttribute); - - if (this.morphTargetsRelative) { - _vector$8.addVectors(_box$2.min, _boxMorphTargets.min); - _box$2.expandByPoint(_vector$8); - - _vector$8.addVectors(_box$2.max, _boxMorphTargets.max); - _box$2.expandByPoint(_vector$8); - } else { - _box$2.expandByPoint(_boxMorphTargets.min); - _box$2.expandByPoint(_boxMorphTargets.max); - } - } - } - - _box$2.getCenter(center); - - // second, try to find a boundingSphere with a radius smaller than the - // boundingSphere of the boundingBox: sqrt(3) smaller in the best case - - let maxRadiusSq = 0; - - for (let i = 0, il = position.count; i < il; i++) { - _vector$8.fromBufferAttribute(position, i); - - maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector$8)); - } - - // process morph attributes if present - - if (morphAttributesPosition) { - for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { - const morphAttribute = morphAttributesPosition[i]; - const morphTargetsRelative = this.morphTargetsRelative; - - for (let j = 0, jl = morphAttribute.count; j < jl; j++) { - _vector$8.fromBufferAttribute(morphAttribute, j); - - if (morphTargetsRelative) { - _offset.fromBufferAttribute(position, j); - _vector$8.add(_offset); - } - - maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector$8)); - } - } - } - - this.boundingSphere.radius = Math.sqrt(maxRadiusSq); - - if (isNaN(this.boundingSphere.radius)) { - console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this); - } - } - } - - computeTangents() { - const index = this.index; - const attributes = this.attributes; - - // based on http://www.terathon.com/code/tangent.html - // (per vertex tangents) - - if (index === null || attributes.position === undefined || attributes.normal === undefined || attributes.uv === undefined) { - console.error('THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)'); - return; - } - - const positionAttribute = attributes.position; - const normalAttribute = attributes.normal; - const uvAttribute = attributes.uv; - - if (this.hasAttribute('tangent') === false) { - this.setAttribute('tangent', new BufferAttribute(new Float32Array(4 * positionAttribute.count), 4)); - } - - const tangentAttribute = this.getAttribute('tangent'); - - const tan1 = [], - tan2 = []; - - for (let i = 0; i < positionAttribute.count; i++) { - tan1[i] = new Vector3(); - tan2[i] = new Vector3(); - } - - const vA = new Vector3(), - vB = new Vector3(), - vC = new Vector3(), - uvA = new Vector2(), - uvB = new Vector2(), - uvC = new Vector2(), - sdir = new Vector3(), - tdir = new Vector3(); - - function handleTriangle(a, b, c) { - vA.fromBufferAttribute(positionAttribute, a); - vB.fromBufferAttribute(positionAttribute, b); - vC.fromBufferAttribute(positionAttribute, c); - - uvA.fromBufferAttribute(uvAttribute, a); - uvB.fromBufferAttribute(uvAttribute, b); - uvC.fromBufferAttribute(uvAttribute, c); - - vB.sub(vA); - vC.sub(vA); - - uvB.sub(uvA); - uvC.sub(uvA); - - const r = 1.0 / (uvB.x * uvC.y - uvC.x * uvB.y); - - // silently ignore degenerate uv triangles having coincident or colinear vertices - - if (!isFinite(r)) return; - - sdir.copy(vB).multiplyScalar(uvC.y).addScaledVector(vC, -uvB.y).multiplyScalar(r); - tdir.copy(vC).multiplyScalar(uvB.x).addScaledVector(vB, -uvC.x).multiplyScalar(r); - - tan1[a].add(sdir); - tan1[b].add(sdir); - tan1[c].add(sdir); - - tan2[a].add(tdir); - tan2[b].add(tdir); - tan2[c].add(tdir); - } - - let groups = this.groups; - - if (groups.length === 0) { - groups = [ - { - start: 0, - count: index.count, - }, - ]; - } - - for (let i = 0, il = groups.length; i < il; ++i) { - const group = groups[i]; - - const start = group.start; - const count = group.count; - - for (let j = start, jl = start + count; j < jl; j += 3) { - handleTriangle(index.getX(j + 0), index.getX(j + 1), index.getX(j + 2)); - } - } - - const tmp = new Vector3(), - tmp2 = new Vector3(); - const n = new Vector3(), - n2 = new Vector3(); - - function handleVertex(v) { - n.fromBufferAttribute(normalAttribute, v); - n2.copy(n); - - const t = tan1[v]; - - // Gram-Schmidt orthogonalize - - tmp.copy(t); - tmp.sub(n.multiplyScalar(n.dot(t))).normalize(); - - // Calculate handedness - - tmp2.crossVectors(n2, t); - const test = tmp2.dot(tan2[v]); - const w = test < 0.0 ? -1.0 : 1.0; - - tangentAttribute.setXYZW(v, tmp.x, tmp.y, tmp.z, w); - } - - for (let i = 0, il = groups.length; i < il; ++i) { - const group = groups[i]; - - const start = group.start; - const count = group.count; - - for (let j = start, jl = start + count; j < jl; j += 3) { - handleVertex(index.getX(j + 0)); - handleVertex(index.getX(j + 1)); - handleVertex(index.getX(j + 2)); - } - } - } - - computeVertexNormals() { - const index = this.index; - const positionAttribute = this.getAttribute('position'); - - if (positionAttribute !== undefined) { - let normalAttribute = this.getAttribute('normal'); - - if (normalAttribute === undefined) { - normalAttribute = new BufferAttribute(new Float32Array(positionAttribute.count * 3), 3); - this.setAttribute('normal', normalAttribute); - } else { - // reset existing normals to zero - - for (let i = 0, il = normalAttribute.count; i < il; i++) { - normalAttribute.setXYZ(i, 0, 0, 0); - } - } - - const pA = new Vector3(), - pB = new Vector3(), - pC = new Vector3(); - const nA = new Vector3(), - nB = new Vector3(), - nC = new Vector3(); - const cb = new Vector3(), - ab = new Vector3(); - - // indexed elements - - if (index) { - for (let i = 0, il = index.count; i < il; i += 3) { - const vA = index.getX(i + 0); - const vB = index.getX(i + 1); - const vC = index.getX(i + 2); - - pA.fromBufferAttribute(positionAttribute, vA); - pB.fromBufferAttribute(positionAttribute, vB); - pC.fromBufferAttribute(positionAttribute, vC); - - cb.subVectors(pC, pB); - ab.subVectors(pA, pB); - cb.cross(ab); - - nA.fromBufferAttribute(normalAttribute, vA); - nB.fromBufferAttribute(normalAttribute, vB); - nC.fromBufferAttribute(normalAttribute, vC); - - nA.add(cb); - nB.add(cb); - nC.add(cb); - - normalAttribute.setXYZ(vA, nA.x, nA.y, nA.z); - normalAttribute.setXYZ(vB, nB.x, nB.y, nB.z); - normalAttribute.setXYZ(vC, nC.x, nC.y, nC.z); - } - } else { - // non-indexed elements (unconnected triangle soup) - - for (let i = 0, il = positionAttribute.count; i < il; i += 3) { - pA.fromBufferAttribute(positionAttribute, i + 0); - pB.fromBufferAttribute(positionAttribute, i + 1); - pC.fromBufferAttribute(positionAttribute, i + 2); - - cb.subVectors(pC, pB); - ab.subVectors(pA, pB); - cb.cross(ab); - - normalAttribute.setXYZ(i + 0, cb.x, cb.y, cb.z); - normalAttribute.setXYZ(i + 1, cb.x, cb.y, cb.z); - normalAttribute.setXYZ(i + 2, cb.x, cb.y, cb.z); - } - } - - this.normalizeNormals(); - - normalAttribute.needsUpdate = true; - } - } - - normalizeNormals() { - const normals = this.attributes.normal; - - for (let i = 0, il = normals.count; i < il; i++) { - _vector$8.fromBufferAttribute(normals, i); - - _vector$8.normalize(); - - normals.setXYZ(i, _vector$8.x, _vector$8.y, _vector$8.z); - } - } - - toNonIndexed() { - function convertBufferAttribute(attribute, indices) { - const array = attribute.array; - const itemSize = attribute.itemSize; - const normalized = attribute.normalized; - - const array2 = new array.constructor(indices.length * itemSize); - - let index = 0, - index2 = 0; - - for (let i = 0, l = indices.length; i < l; i++) { - if (attribute.isInterleavedBufferAttribute) { - index = indices[i] * attribute.data.stride + attribute.offset; - } else { - index = indices[i] * itemSize; - } - - for (let j = 0; j < itemSize; j++) { - array2[index2++] = array[index++]; - } - } - - return new BufferAttribute(array2, itemSize, normalized); - } - - // - - if (this.index === null) { - console.warn('THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.'); - return this; - } - - const geometry2 = new BufferGeometry(); - - const indices = this.index.array; - const attributes = this.attributes; - - // attributes - - for (const name in attributes) { - const attribute = attributes[name]; - - const newAttribute = convertBufferAttribute(attribute, indices); - - geometry2.setAttribute(name, newAttribute); - } - - // morph attributes - - const morphAttributes = this.morphAttributes; - - for (const name in morphAttributes) { - const morphArray = []; - const morphAttribute = morphAttributes[name]; // morphAttribute: array of Float32BufferAttributes - - for (let i = 0, il = morphAttribute.length; i < il; i++) { - const attribute = morphAttribute[i]; - - const newAttribute = convertBufferAttribute(attribute, indices); - - morphArray.push(newAttribute); - } - - geometry2.morphAttributes[name] = morphArray; - } - - geometry2.morphTargetsRelative = this.morphTargetsRelative; - - // groups - - const groups = this.groups; - - for (let i = 0, l = groups.length; i < l; i++) { - const group = groups[i]; - geometry2.addGroup(group.start, group.count, group.materialIndex); - } - - return geometry2; - } - - toJSON() { - const data = { - metadata: { - version: 4.6, - type: 'BufferGeometry', - generator: 'BufferGeometry.toJSON', - }, - }; - - // standard BufferGeometry serialization - - data.uuid = this.uuid; - data.type = this.type; - if (this.name !== '') data.name = this.name; - if (Object.keys(this.userData).length > 0) data.userData = this.userData; - - if (this.parameters !== undefined) { - const parameters = this.parameters; - - for (const key in parameters) { - if (parameters[key] !== undefined) data[key] = parameters[key]; - } - - return data; - } - - // for simplicity the code assumes attributes are not shared across geometries, see #15811 - - data.data = { attributes: {} }; - - const index = this.index; - - if (index !== null) { - data.data.index = { - type: index.array.constructor.name, - array: Array.prototype.slice.call(index.array), - }; - } - - const attributes = this.attributes; - - for (const key in attributes) { - const attribute = attributes[key]; - - data.data.attributes[key] = attribute.toJSON(data.data); - } - - const morphAttributes = {}; - let hasMorphAttributes = false; - - for (const key in this.morphAttributes) { - const attributeArray = this.morphAttributes[key]; - - const array = []; - - for (let i = 0, il = attributeArray.length; i < il; i++) { - const attribute = attributeArray[i]; - - array.push(attribute.toJSON(data.data)); - } - - if (array.length > 0) { - morphAttributes[key] = array; - - hasMorphAttributes = true; - } - } - - if (hasMorphAttributes) { - data.data.morphAttributes = morphAttributes; - data.data.morphTargetsRelative = this.morphTargetsRelative; - } - - const groups = this.groups; - - if (groups.length > 0) { - data.data.groups = JSON.parse(JSON.stringify(groups)); - } - - const boundingSphere = this.boundingSphere; - - if (boundingSphere !== null) { - data.data.boundingSphere = { - center: boundingSphere.center.toArray(), - radius: boundingSphere.radius, - }; - } - - return data; - } - - clone() { - return new this.constructor().copy(this); - } - - copy(source) { - // reset - - this.index = null; - this.attributes = {}; - this.morphAttributes = {}; - this.groups = []; - this.boundingBox = null; - this.boundingSphere = null; - - // used for storing cloned, shared data - - const data = {}; - - // name - - this.name = source.name; - - // index - - const index = source.index; - - if (index !== null) { - this.setIndex(index.clone(data)); - } - - // attributes - - const attributes = source.attributes; - - for (const name in attributes) { - const attribute = attributes[name]; - this.setAttribute(name, attribute.clone(data)); - } - - // morph attributes - - const morphAttributes = source.morphAttributes; - - for (const name in morphAttributes) { - const array = []; - const morphAttribute = morphAttributes[name]; // morphAttribute: array of Float32BufferAttributes - - for (let i = 0, l = morphAttribute.length; i < l; i++) { - array.push(morphAttribute[i].clone(data)); - } - - this.morphAttributes[name] = array; - } - - this.morphTargetsRelative = source.morphTargetsRelative; - - // groups - - const groups = source.groups; - - for (let i = 0, l = groups.length; i < l; i++) { - const group = groups[i]; - this.addGroup(group.start, group.count, group.materialIndex); - } - - // bounding box - - const boundingBox = source.boundingBox; - - if (boundingBox !== null) { - this.boundingBox = boundingBox.clone(); - } - - // bounding sphere - - const boundingSphere = source.boundingSphere; - - if (boundingSphere !== null) { - this.boundingSphere = boundingSphere.clone(); - } - - // draw range - - this.drawRange.start = source.drawRange.start; - this.drawRange.count = source.drawRange.count; - - // user data - - this.userData = source.userData; - - return this; - } - - dispose() { - this.dispatchEvent({ type: 'dispose' }); - } -} - -const _inverseMatrix$3 = /*@__PURE__*/ new Matrix4(); -const _ray$3 = /*@__PURE__*/ new Ray(); -const _sphere$6 = /*@__PURE__*/ new Sphere(); -const _sphereHitAt = /*@__PURE__*/ new Vector3(); - -const _vA$1 = /*@__PURE__*/ new Vector3(); -const _vB$1 = /*@__PURE__*/ new Vector3(); -const _vC$1 = /*@__PURE__*/ new Vector3(); - -const _tempA = /*@__PURE__*/ new Vector3(); -const _morphA = /*@__PURE__*/ new Vector3(); - -const _uvA$1 = /*@__PURE__*/ new Vector2(); -const _uvB$1 = /*@__PURE__*/ new Vector2(); -const _uvC$1 = /*@__PURE__*/ new Vector2(); - -const _normalA = /*@__PURE__*/ new Vector3(); -const _normalB = /*@__PURE__*/ new Vector3(); -const _normalC = /*@__PURE__*/ new Vector3(); - -const _intersectionPoint = /*@__PURE__*/ new Vector3(); -const _intersectionPointWorld = /*@__PURE__*/ new Vector3(); - -class Mesh extends Object3D { - constructor(geometry = new BufferGeometry(), material = new MeshBasicMaterial()) { - super(); - - this.isMesh = true; - - this.type = 'Mesh'; - - this.geometry = geometry; - this.material = material; - - this.updateMorphTargets(); - } - - copy(source, recursive) { - super.copy(source, recursive); - - if (source.morphTargetInfluences !== undefined) { - this.morphTargetInfluences = source.morphTargetInfluences.slice(); - } - - if (source.morphTargetDictionary !== undefined) { - this.morphTargetDictionary = Object.assign({}, source.morphTargetDictionary); - } - - this.material = Array.isArray(source.material) ? source.material.slice() : source.material; - this.geometry = source.geometry; - - return this; - } - - updateMorphTargets() { - const geometry = this.geometry; - - const morphAttributes = geometry.morphAttributes; - const keys = Object.keys(morphAttributes); - - if (keys.length > 0) { - const morphAttribute = morphAttributes[keys[0]]; - - if (morphAttribute !== undefined) { - this.morphTargetInfluences = []; - this.morphTargetDictionary = {}; - - for (let m = 0, ml = morphAttribute.length; m < ml; m++) { - const name = morphAttribute[m].name || String(m); - - this.morphTargetInfluences.push(0); - this.morphTargetDictionary[name] = m; - } - } - } - } - - getVertexPosition(index, target) { - const geometry = this.geometry; - const position = geometry.attributes.position; - const morphPosition = geometry.morphAttributes.position; - const morphTargetsRelative = geometry.morphTargetsRelative; - - target.fromBufferAttribute(position, index); - - const morphInfluences = this.morphTargetInfluences; - - if (morphPosition && morphInfluences) { - _morphA.set(0, 0, 0); - - for (let i = 0, il = morphPosition.length; i < il; i++) { - const influence = morphInfluences[i]; - const morphAttribute = morphPosition[i]; - - if (influence === 0) continue; - - _tempA.fromBufferAttribute(morphAttribute, index); - - if (morphTargetsRelative) { - _morphA.addScaledVector(_tempA, influence); - } else { - _morphA.addScaledVector(_tempA.sub(target), influence); - } - } - - target.add(_morphA); - } - - return target; - } - - raycast(raycaster, intersects) { - const geometry = this.geometry; - const material = this.material; - const matrixWorld = this.matrixWorld; - - if (material === undefined) return; - - // test with bounding sphere in world space - - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - - _sphere$6.copy(geometry.boundingSphere); - _sphere$6.applyMatrix4(matrixWorld); - - // check distance from ray origin to bounding sphere - - _ray$3.copy(raycaster.ray).recast(raycaster.near); - - if (_sphere$6.containsPoint(_ray$3.origin) === false) { - if (_ray$3.intersectSphere(_sphere$6, _sphereHitAt) === null) return; - - if (_ray$3.origin.distanceToSquared(_sphereHitAt) > (raycaster.far - raycaster.near) ** 2) return; - } - - // convert ray to local space of mesh - - _inverseMatrix$3.copy(matrixWorld).invert(); - _ray$3.copy(raycaster.ray).applyMatrix4(_inverseMatrix$3); - - // test with bounding box in local space - - if (geometry.boundingBox !== null) { - if (_ray$3.intersectsBox(geometry.boundingBox) === false) return; - } - - // test for intersections with geometry - - this._computeIntersections(raycaster, intersects, _ray$3); - } - - _computeIntersections(raycaster, intersects, rayLocalSpace) { - let intersection; - - const geometry = this.geometry; - const material = this.material; - - const index = geometry.index; - const position = geometry.attributes.position; - const uv = geometry.attributes.uv; - const uv1 = geometry.attributes.uv1; - const normal = geometry.attributes.normal; - const groups = geometry.groups; - const drawRange = geometry.drawRange; - - if (index !== null) { - // indexed buffer geometry - - if (Array.isArray(material)) { - for (let i = 0, il = groups.length; i < il; i++) { - const group = groups[i]; - const groupMaterial = material[group.materialIndex]; - - const start = Math.max(group.start, drawRange.start); - const end = Math.min(index.count, Math.min(group.start + group.count, drawRange.start + drawRange.count)); - - for (let j = start, jl = end; j < jl; j += 3) { - const a = index.getX(j); - const b = index.getX(j + 1); - const c = index.getX(j + 2); - - intersection = checkGeometryIntersection(this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); - - if (intersection) { - intersection.faceIndex = Math.floor(j / 3); // triangle number in indexed buffer semantics - intersection.face.materialIndex = group.materialIndex; - intersects.push(intersection); - } - } - } - } else { - const start = Math.max(0, drawRange.start); - const end = Math.min(index.count, drawRange.start + drawRange.count); - - for (let i = start, il = end; i < il; i += 3) { - const a = index.getX(i); - const b = index.getX(i + 1); - const c = index.getX(i + 2); - - intersection = checkGeometryIntersection(this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); - - if (intersection) { - intersection.faceIndex = Math.floor(i / 3); // triangle number in indexed buffer semantics - intersects.push(intersection); - } - } - } - } else if (position !== undefined) { - // non-indexed buffer geometry - - if (Array.isArray(material)) { - for (let i = 0, il = groups.length; i < il; i++) { - const group = groups[i]; - const groupMaterial = material[group.materialIndex]; - - const start = Math.max(group.start, drawRange.start); - const end = Math.min(position.count, Math.min(group.start + group.count, drawRange.start + drawRange.count)); - - for (let j = start, jl = end; j < jl; j += 3) { - const a = j; - const b = j + 1; - const c = j + 2; - - intersection = checkGeometryIntersection(this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); - - if (intersection) { - intersection.faceIndex = Math.floor(j / 3); // triangle number in non-indexed buffer semantics - intersection.face.materialIndex = group.materialIndex; - intersects.push(intersection); - } - } - } - } else { - const start = Math.max(0, drawRange.start); - const end = Math.min(position.count, drawRange.start + drawRange.count); - - for (let i = start, il = end; i < il; i += 3) { - const a = i; - const b = i + 1; - const c = i + 2; - - intersection = checkGeometryIntersection(this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); - - if (intersection) { - intersection.faceIndex = Math.floor(i / 3); // triangle number in non-indexed buffer semantics - intersects.push(intersection); - } - } - } - } - } -} - -function checkIntersection$1(object, material, raycaster, ray, pA, pB, pC, point) { - let intersect; - - if (material.side === BackSide) { - intersect = ray.intersectTriangle(pC, pB, pA, true, point); - } else { - intersect = ray.intersectTriangle(pA, pB, pC, material.side === FrontSide, point); - } - - if (intersect === null) return null; - - _intersectionPointWorld.copy(point); - _intersectionPointWorld.applyMatrix4(object.matrixWorld); - - const distance = raycaster.ray.origin.distanceTo(_intersectionPointWorld); - - if (distance < raycaster.near || distance > raycaster.far) return null; - - return { - distance: distance, - point: _intersectionPointWorld.clone(), - object: object, - }; -} - -function checkGeometryIntersection(object, material, raycaster, ray, uv, uv1, normal, a, b, c) { - object.getVertexPosition(a, _vA$1); - object.getVertexPosition(b, _vB$1); - object.getVertexPosition(c, _vC$1); - - const intersection = checkIntersection$1(object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint); - - if (intersection) { - if (uv) { - _uvA$1.fromBufferAttribute(uv, a); - _uvB$1.fromBufferAttribute(uv, b); - _uvC$1.fromBufferAttribute(uv, c); - - intersection.uv = Triangle.getInterpolation(_intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2()); - } - - if (uv1) { - _uvA$1.fromBufferAttribute(uv1, a); - _uvB$1.fromBufferAttribute(uv1, b); - _uvC$1.fromBufferAttribute(uv1, c); - - intersection.uv1 = Triangle.getInterpolation(_intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2()); - } - - if (normal) { - _normalA.fromBufferAttribute(normal, a); - _normalB.fromBufferAttribute(normal, b); - _normalC.fromBufferAttribute(normal, c); - - intersection.normal = Triangle.getInterpolation(_intersectionPoint, _vA$1, _vB$1, _vC$1, _normalA, _normalB, _normalC, new Vector3()); - - if (intersection.normal.dot(ray.direction) > 0) { - intersection.normal.multiplyScalar(-1); - } - } - - const face = { - a: a, - b: b, - c: c, - normal: new Vector3(), - materialIndex: 0, - }; - - Triangle.getNormal(_vA$1, _vB$1, _vC$1, face.normal); - - intersection.face = face; - } - - return intersection; -} - -class BoxGeometry extends BufferGeometry { - constructor(width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1) { - super(); - - this.type = 'BoxGeometry'; - - this.parameters = { - width: width, - height: height, - depth: depth, - widthSegments: widthSegments, - heightSegments: heightSegments, - depthSegments: depthSegments, - }; - - const scope = this; - - // segments - - widthSegments = Math.floor(widthSegments); - heightSegments = Math.floor(heightSegments); - depthSegments = Math.floor(depthSegments); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - let numberOfVertices = 0; - let groupStart = 0; - - // build each side of the box geometry - - buildPlane('z', 'y', 'x', -1, -1, depth, height, width, depthSegments, heightSegments, 0); // px - buildPlane('z', 'y', 'x', 1, -1, depth, height, -width, depthSegments, heightSegments, 1); // nx - buildPlane('x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2); // py - buildPlane('x', 'z', 'y', 1, -1, width, depth, -height, widthSegments, depthSegments, 3); // ny - buildPlane('x', 'y', 'z', 1, -1, width, height, depth, widthSegments, heightSegments, 4); // pz - buildPlane('x', 'y', 'z', -1, -1, width, height, -depth, widthSegments, heightSegments, 5); // nz - - // build geometry - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - - function buildPlane(u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex) { - const segmentWidth = width / gridX; - const segmentHeight = height / gridY; - - const widthHalf = width / 2; - const heightHalf = height / 2; - const depthHalf = depth / 2; - - const gridX1 = gridX + 1; - const gridY1 = gridY + 1; - - let vertexCounter = 0; - let groupCount = 0; - - const vector = new Vector3(); - - // generate vertices, normals and uvs - - for (let iy = 0; iy < gridY1; iy++) { - const y = iy * segmentHeight - heightHalf; - - for (let ix = 0; ix < gridX1; ix++) { - const x = ix * segmentWidth - widthHalf; - - // set values to correct vector component - - vector[u] = x * udir; - vector[v] = y * vdir; - vector[w] = depthHalf; - - // now apply vector to vertex buffer - - vertices.push(vector.x, vector.y, vector.z); - - // set values to correct vector component - - vector[u] = 0; - vector[v] = 0; - vector[w] = depth > 0 ? 1 : -1; - - // now apply vector to normal buffer - - normals.push(vector.x, vector.y, vector.z); - - // uvs - - uvs.push(ix / gridX); - uvs.push(1 - iy / gridY); - - // counters - - vertexCounter += 1; - } - } - - // indices - - // 1. you need three indices to draw a single face - // 2. a single segment consists of two faces - // 3. so we need to generate six (2*3) indices per segment - - for (let iy = 0; iy < gridY; iy++) { - for (let ix = 0; ix < gridX; ix++) { - const a = numberOfVertices + ix + gridX1 * iy; - const b = numberOfVertices + ix + gridX1 * (iy + 1); - const c = numberOfVertices + (ix + 1) + gridX1 * (iy + 1); - const d = numberOfVertices + (ix + 1) + gridX1 * iy; - - // faces - - indices.push(a, b, d); - indices.push(b, c, d); - - // increase counter - - groupCount += 6; - } - } - - // add a group to the geometry. this will ensure multi material support - - scope.addGroup(groupStart, groupCount, materialIndex); - - // calculate new start value for groups - - groupStart += groupCount; - - // update total number of vertices - - numberOfVertices += vertexCounter; - } - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } - - static fromJSON(data) { - return new BoxGeometry(data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments); - } -} - -/** - * Uniform Utilities - */ - -function cloneUniforms(src) { - const dst = {}; - - for (const u in src) { - dst[u] = {}; - - for (const p in src[u]) { - const property = src[u][p]; - - if (property && (property.isColor || property.isMatrix3 || property.isMatrix4 || property.isVector2 || property.isVector3 || property.isVector4 || property.isTexture || property.isQuaternion)) { - if (property.isRenderTargetTexture) { - console.warn('UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms().'); - dst[u][p] = null; - } else { - dst[u][p] = property.clone(); - } - } else if (Array.isArray(property)) { - dst[u][p] = property.slice(); - } else { - dst[u][p] = property; - } - } - } - - return dst; -} - -function cloneUniformsGroups(src) { - const dst = []; - - for (let u = 0; u < src.length; u++) { - dst.push(src[u].clone()); - } - - return dst; -} - -var default_vertex = /* glsl */ ` -void main() { - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); -} -`; - -var default_fragment = /* glsl */ ` -void main() { - gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 ); -} -`; - -class ShaderMaterial extends Material { - constructor(parameters) { - super(); - - this.isShaderMaterial = true; - - this.type = 'ShaderMaterial'; - - this.defines = {}; - this.uniforms = {}; - this.uniformsGroups = []; - - this.vertexShader = default_vertex; - this.fragmentShader = default_fragment; - - this.linewidth = 1; - - this.wireframe = false; - this.wireframeLinewidth = 1; - - this.fog = false; // set to use scene fog - this.lights = false; // set to use scene lights - this.clipping = false; // set to use user-defined clipping planes - - this.forceSinglePass = true; - - this.extensions = { - clipCullDistance: false, // set to use vertex shader clipping - multiDraw: false, // set to use vertex shader multi_draw / enable gl_DrawID - }; - - // When rendered geometry doesn't include these attributes but the material does, - // use these default values in WebGL. This avoids errors when buffer data is missing. - this.defaultAttributeValues = { - color: [1, 1, 1], - uv: [0, 0], - uv1: [0, 0], - }; - - this.index0AttributeName = undefined; - this.uniformsNeedUpdate = false; - - this.glslVersion = null; - - if (parameters !== undefined) { - this.setValues(parameters); - } - } - - copy(source) { - super.copy(source); - - this.fragmentShader = source.fragmentShader; - this.vertexShader = source.vertexShader; - - this.uniforms = cloneUniforms(source.uniforms); - this.uniformsGroups = cloneUniformsGroups(source.uniformsGroups); - - this.defines = Object.assign({}, source.defines); - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - - this.fog = source.fog; - this.lights = source.lights; - this.clipping = source.clipping; - - this.extensions = Object.assign({}, source.extensions); - - this.glslVersion = source.glslVersion; - - return this; - } - - toJSON(meta) { - const data = super.toJSON(meta); - - data.glslVersion = this.glslVersion; - data.uniforms = {}; - - for (const name in this.uniforms) { - const uniform = this.uniforms[name]; - const value = uniform.value; - - if (value && value.isTexture) { - data.uniforms[name] = { - type: 't', - value: value.toJSON(meta).uuid, - }; - } else if (value && value.isColor) { - data.uniforms[name] = { - type: 'c', - value: value.getHex(), - }; - } else if (value && value.isVector2) { - data.uniforms[name] = { - type: 'v2', - value: value.toArray(), - }; - } else if (value && value.isVector3) { - data.uniforms[name] = { - type: 'v3', - value: value.toArray(), - }; - } else if (value && value.isVector4) { - data.uniforms[name] = { - type: 'v4', - value: value.toArray(), - }; - } else if (value && value.isMatrix3) { - data.uniforms[name] = { - type: 'm3', - value: value.toArray(), - }; - } else if (value && value.isMatrix4) { - data.uniforms[name] = { - type: 'm4', - value: value.toArray(), - }; - } else { - data.uniforms[name] = { - value: value, - }; - - // note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far - } - } - - if (Object.keys(this.defines).length > 0) data.defines = this.defines; - - data.vertexShader = this.vertexShader; - data.fragmentShader = this.fragmentShader; - - data.lights = this.lights; - data.clipping = this.clipping; - - const extensions = {}; - - for (const key in this.extensions) { - if (this.extensions[key] === true) extensions[key] = true; - } - - if (Object.keys(extensions).length > 0) data.extensions = extensions; - - return data; - } -} - -class Camera extends Object3D { - constructor() { - super(); - - this.isCamera = true; - - this.type = 'Camera'; - - this.matrixWorldInverse = new Matrix4(); - - this.projectionMatrix = new Matrix4(); - this.projectionMatrixInverse = new Matrix4(); - - this.coordinateSystem = WebGLCoordinateSystem; - } - - copy(source, recursive) { - super.copy(source, recursive); - - this.matrixWorldInverse.copy(source.matrixWorldInverse); - - this.projectionMatrix.copy(source.projectionMatrix); - this.projectionMatrixInverse.copy(source.projectionMatrixInverse); - - this.coordinateSystem = source.coordinateSystem; - - return this; - } - - getWorldDirection(target) { - return super.getWorldDirection(target).negate(); - } - - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - - this.matrixWorldInverse.copy(this.matrixWorld).invert(); - } - - updateWorldMatrix(updateParents, updateChildren) { - super.updateWorldMatrix(updateParents, updateChildren); - - this.matrixWorldInverse.copy(this.matrixWorld).invert(); - } - - clone() { - return new this.constructor().copy(this); - } -} - -const _v3$1 = /*@__PURE__*/ new Vector3(); -const _minTarget = /*@__PURE__*/ new Vector2(); -const _maxTarget = /*@__PURE__*/ new Vector2(); - -class PerspectiveCamera extends Camera { - constructor(fov = 50, aspect = 1, near = 0.1, far = 2000) { - super(); - - this.isPerspectiveCamera = true; - - this.type = 'PerspectiveCamera'; - - this.fov = fov; - this.zoom = 1; - - this.near = near; - this.far = far; - this.focus = 10; - - this.aspect = aspect; - this.view = null; - - this.filmGauge = 35; // width of the film (default in millimeters) - this.filmOffset = 0; // horizontal film offset (same unit as gauge) - - this.updateProjectionMatrix(); - } - - copy(source, recursive) { - super.copy(source, recursive); - - this.fov = source.fov; - this.zoom = source.zoom; - - this.near = source.near; - this.far = source.far; - this.focus = source.focus; - - this.aspect = source.aspect; - this.view = source.view === null ? null : Object.assign({}, source.view); - - this.filmGauge = source.filmGauge; - this.filmOffset = source.filmOffset; - - return this; - } - - /** - * Sets the FOV by focal length in respect to the current .filmGauge. - * - * The default film gauge is 35, so that the focal length can be specified for - * a 35mm (full frame) camera. - * - * Values for focal length and film gauge must have the same unit. - */ - setFocalLength(focalLength) { - /** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */ - const vExtentSlope = (0.5 * this.getFilmHeight()) / focalLength; - - this.fov = RAD2DEG * 2 * Math.atan(vExtentSlope); - this.updateProjectionMatrix(); - } - - /** - * Calculates the focal length from the current .fov and .filmGauge. - */ - getFocalLength() { - const vExtentSlope = Math.tan(DEG2RAD * 0.5 * this.fov); - - return (0.5 * this.getFilmHeight()) / vExtentSlope; - } - - getEffectiveFOV() { - return RAD2DEG * 2 * Math.atan(Math.tan(DEG2RAD * 0.5 * this.fov) / this.zoom); - } - - getFilmWidth() { - // film not completely covered in portrait format (aspect < 1) - return this.filmGauge * Math.min(this.aspect, 1); - } - - getFilmHeight() { - // film not completely covered in landscape format (aspect > 1) - return this.filmGauge / Math.max(this.aspect, 1); - } - - /** - * Computes the 2D bounds of the camera's viewable rectangle at a given distance along the viewing direction. - * Sets minTarget and maxTarget to the coordinates of the lower-left and upper-right corners of the view rectangle. - */ - getViewBounds(distance, minTarget, maxTarget) { - _v3$1.set(-1, -1, 0.5).applyMatrix4(this.projectionMatrixInverse); - - minTarget.set(_v3$1.x, _v3$1.y).multiplyScalar(-distance / _v3$1.z); - - _v3$1.set(1, 1, 0.5).applyMatrix4(this.projectionMatrixInverse); - - maxTarget.set(_v3$1.x, _v3$1.y).multiplyScalar(-distance / _v3$1.z); - } - - /** - * Computes the width and height of the camera's viewable rectangle at a given distance along the viewing direction. - * Copies the result into the target Vector2, where x is width and y is height. - */ - getViewSize(distance, target) { - this.getViewBounds(distance, _minTarget, _maxTarget); - - return target.subVectors(_maxTarget, _minTarget); - } - - /** - * Sets an offset in a larger frustum. This is useful for multi-window or - * multi-monitor/multi-machine setups. - * - * For example, if you have 3x2 monitors and each monitor is 1920x1080 and - * the monitors are in grid like this - * - * +---+---+---+ - * | A | B | C | - * +---+---+---+ - * | D | E | F | - * +---+---+---+ - * - * then for each monitor you would call it like this - * - * const w = 1920; - * const h = 1080; - * const fullWidth = w * 3; - * const fullHeight = h * 2; - * - * --A-- - * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); - * --B-- - * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); - * --C-- - * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); - * --D-- - * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); - * --E-- - * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); - * --F-- - * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); - * - * Note there is no reason monitors have to be the same size or in a grid. - */ - setViewOffset(fullWidth, fullHeight, x, y, width, height) { - this.aspect = fullWidth / fullHeight; - - if (this.view === null) { - this.view = { - enabled: true, - fullWidth: 1, - fullHeight: 1, - offsetX: 0, - offsetY: 0, - width: 1, - height: 1, - }; - } - - this.view.enabled = true; - this.view.fullWidth = fullWidth; - this.view.fullHeight = fullHeight; - this.view.offsetX = x; - this.view.offsetY = y; - this.view.width = width; - this.view.height = height; - - this.updateProjectionMatrix(); - } - - clearViewOffset() { - if (this.view !== null) { - this.view.enabled = false; - } - - this.updateProjectionMatrix(); - } - - updateProjectionMatrix() { - const near = this.near; - let top = (near * Math.tan(DEG2RAD * 0.5 * this.fov)) / this.zoom; - let height = 2 * top; - let width = this.aspect * height; - let left = -0.5 * width; - const view = this.view; - - if (this.view !== null && this.view.enabled) { - const fullWidth = view.fullWidth, - fullHeight = view.fullHeight; - - left += (view.offsetX * width) / fullWidth; - top -= (view.offsetY * height) / fullHeight; - width *= view.width / fullWidth; - height *= view.height / fullHeight; - } - - const skew = this.filmOffset; - if (skew !== 0) left += (near * skew) / this.getFilmWidth(); - - this.projectionMatrix.makePerspective(left, left + width, top, top - height, near, this.far, this.coordinateSystem); - - this.projectionMatrixInverse.copy(this.projectionMatrix).invert(); - } - - toJSON(meta) { - const data = super.toJSON(meta); - - data.object.fov = this.fov; - data.object.zoom = this.zoom; - - data.object.near = this.near; - data.object.far = this.far; - data.object.focus = this.focus; - - data.object.aspect = this.aspect; - - if (this.view !== null) data.object.view = Object.assign({}, this.view); - - data.object.filmGauge = this.filmGauge; - data.object.filmOffset = this.filmOffset; - - return data; - } -} - -const fov = -90; // negative fov is not an error -const aspect = 1; - -class CubeCamera extends Object3D { - constructor(near, far, renderTarget) { - super(); - - this.type = 'CubeCamera'; - - this.renderTarget = renderTarget; - this.coordinateSystem = null; - this.activeMipmapLevel = 0; - - const cameraPX = new PerspectiveCamera(fov, aspect, near, far); - cameraPX.layers = this.layers; - this.add(cameraPX); - - const cameraNX = new PerspectiveCamera(fov, aspect, near, far); - cameraNX.layers = this.layers; - this.add(cameraNX); - - const cameraPY = new PerspectiveCamera(fov, aspect, near, far); - cameraPY.layers = this.layers; - this.add(cameraPY); - - const cameraNY = new PerspectiveCamera(fov, aspect, near, far); - cameraNY.layers = this.layers; - this.add(cameraNY); - - const cameraPZ = new PerspectiveCamera(fov, aspect, near, far); - cameraPZ.layers = this.layers; - this.add(cameraPZ); - - const cameraNZ = new PerspectiveCamera(fov, aspect, near, far); - cameraNZ.layers = this.layers; - this.add(cameraNZ); - } - - updateCoordinateSystem() { - const coordinateSystem = this.coordinateSystem; - - const cameras = this.children.concat(); - - const [cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ] = cameras; - - for (const camera of cameras) this.remove(camera); - - if (coordinateSystem === WebGLCoordinateSystem) { - cameraPX.up.set(0, 1, 0); - cameraPX.lookAt(1, 0, 0); - - cameraNX.up.set(0, 1, 0); - cameraNX.lookAt(-1, 0, 0); - - cameraPY.up.set(0, 0, -1); - cameraPY.lookAt(0, 1, 0); - - cameraNY.up.set(0, 0, 1); - cameraNY.lookAt(0, -1, 0); - - cameraPZ.up.set(0, 1, 0); - cameraPZ.lookAt(0, 0, 1); - - cameraNZ.up.set(0, 1, 0); - cameraNZ.lookAt(0, 0, -1); - } else if (coordinateSystem === WebGPUCoordinateSystem) { - cameraPX.up.set(0, -1, 0); - cameraPX.lookAt(-1, 0, 0); - - cameraNX.up.set(0, -1, 0); - cameraNX.lookAt(1, 0, 0); - - cameraPY.up.set(0, 0, 1); - cameraPY.lookAt(0, 1, 0); - - cameraNY.up.set(0, 0, -1); - cameraNY.lookAt(0, -1, 0); - - cameraPZ.up.set(0, -1, 0); - cameraPZ.lookAt(0, 0, 1); - - cameraNZ.up.set(0, -1, 0); - cameraNZ.lookAt(0, 0, -1); - } else { - throw new Error('THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: ' + coordinateSystem); - } - - for (const camera of cameras) { - this.add(camera); - - camera.updateMatrixWorld(); - } - } - - update(renderer, scene) { - if (this.parent === null) this.updateMatrixWorld(); - - const { renderTarget, activeMipmapLevel } = this; - - if (this.coordinateSystem !== renderer.coordinateSystem) { - this.coordinateSystem = renderer.coordinateSystem; - - this.updateCoordinateSystem(); - } - - const [cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ] = this.children; - - const currentRenderTarget = renderer.getRenderTarget(); - const currentActiveCubeFace = renderer.getActiveCubeFace(); - const currentActiveMipmapLevel = renderer.getActiveMipmapLevel(); - - const currentXrEnabled = renderer.xr.enabled; - - renderer.xr.enabled = false; - - const generateMipmaps = renderTarget.texture.generateMipmaps; - - renderTarget.texture.generateMipmaps = false; - - renderer.setRenderTarget(renderTarget, 0, activeMipmapLevel); - renderer.render(scene, cameraPX); - - renderer.setRenderTarget(renderTarget, 1, activeMipmapLevel); - renderer.render(scene, cameraNX); - - renderer.setRenderTarget(renderTarget, 2, activeMipmapLevel); - renderer.render(scene, cameraPY); - - renderer.setRenderTarget(renderTarget, 3, activeMipmapLevel); - renderer.render(scene, cameraNY); - - renderer.setRenderTarget(renderTarget, 4, activeMipmapLevel); - renderer.render(scene, cameraPZ); - - // mipmaps are generated during the last call of render() - // at this point, all sides of the cube render target are defined - - renderTarget.texture.generateMipmaps = generateMipmaps; - - renderer.setRenderTarget(renderTarget, 5, activeMipmapLevel); - renderer.render(scene, cameraNZ); - - renderer.setRenderTarget(currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel); - - renderer.xr.enabled = currentXrEnabled; - - renderTarget.texture.needsPMREMUpdate = true; - } -} - -class CubeTexture extends Texture { - constructor(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace) { - images = images !== undefined ? images : []; - mapping = mapping !== undefined ? mapping : CubeReflectionMapping; - - super(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace); - - this.isCubeTexture = true; - - this.flipY = false; - } - - get images() { - return this.image; - } - - set images(value) { - this.image = value; - } -} - -class WebGLCubeRenderTarget extends WebGLRenderTarget { - constructor(size = 1, options = {}) { - super(size, size, options); - - this.isWebGLCubeRenderTarget = true; - - const image = { width: size, height: size, depth: 1 }; - const images = [image, image, image, image, image, image]; - - this.texture = new CubeTexture(images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace); - - // By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js) - // in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words, - // in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly. - - // three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped - // and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture - // as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures). - - this.texture.isRenderTargetTexture = true; - - this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false; - this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter; - } - - fromEquirectangularTexture(renderer, texture) { - this.texture.type = texture.type; - this.texture.colorSpace = texture.colorSpace; - - this.texture.generateMipmaps = texture.generateMipmaps; - this.texture.minFilter = texture.minFilter; - this.texture.magFilter = texture.magFilter; - - const shader = { - uniforms: { - tEquirect: { value: null }, - }, - - vertexShader: /* glsl */ ` - - varying vec3 vWorldDirection; - - vec3 transformDirection( in vec3 dir, in mat4 matrix ) { - - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); - - } - - void main() { - - vWorldDirection = transformDirection( position, modelMatrix ); - - #include - #include - - } - `, - - fragmentShader: /* glsl */ ` - - uniform sampler2D tEquirect; - - varying vec3 vWorldDirection; - - #include - - void main() { - - vec3 direction = normalize( vWorldDirection ); - - vec2 sampleUV = equirectUv( direction ); - - gl_FragColor = texture2D( tEquirect, sampleUV ); - - } - `, - }; - - const geometry = new BoxGeometry(5, 5, 5); - - const material = new ShaderMaterial({ - name: 'CubemapFromEquirect', - - uniforms: cloneUniforms(shader.uniforms), - vertexShader: shader.vertexShader, - fragmentShader: shader.fragmentShader, - side: BackSide, - blending: NoBlending, - }); - - material.uniforms.tEquirect.value = texture; - - const mesh = new Mesh(geometry, material); - - const currentMinFilter = texture.minFilter; - - // Avoid blurred poles - if (texture.minFilter === LinearMipmapLinearFilter) texture.minFilter = LinearFilter; - - const camera = new CubeCamera(1, 10, this); - camera.update(renderer, mesh); - - texture.minFilter = currentMinFilter; - - mesh.geometry.dispose(); - mesh.material.dispose(); - - return this; - } - - clear(renderer, color, depth, stencil) { - const currentRenderTarget = renderer.getRenderTarget(); - - for (let i = 0; i < 6; i++) { - renderer.setRenderTarget(this, i); - - renderer.clear(color, depth, stencil); - } - - renderer.setRenderTarget(currentRenderTarget); - } -} - -class FogExp2 { - constructor(color, density = 0.00025) { - this.isFogExp2 = true; - - this.name = ''; - - this.color = new Color(color); - this.density = density; - } - - clone() { - return new FogExp2(this.color, this.density); - } - - toJSON(/* meta */) { - return { - type: 'FogExp2', - name: this.name, - color: this.color.getHex(), - density: this.density, - }; - } -} - -class Fog { - constructor(color, near = 1, far = 1000) { - this.isFog = true; - - this.name = ''; - - this.color = new Color(color); - - this.near = near; - this.far = far; - } - - clone() { - return new Fog(this.color, this.near, this.far); - } - - toJSON(/* meta */) { - return { - type: 'Fog', - name: this.name, - color: this.color.getHex(), - near: this.near, - far: this.far, - }; - } -} - -class Scene extends Object3D { - constructor() { - super(); - - this.isScene = true; - - this.type = 'Scene'; - - this.background = null; - this.environment = null; - this.fog = null; - - this.backgroundBlurriness = 0; - this.backgroundIntensity = 1; - this.backgroundRotation = new Euler(); - - this.environmentIntensity = 1; - this.environmentRotation = new Euler(); - - this.overrideMaterial = null; - - if (typeof __THREE_DEVTOOLS__ !== 'undefined') { - __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent('observe', { detail: this })); - } - } - - copy(source, recursive) { - super.copy(source, recursive); - - if (source.background !== null) this.background = source.background.clone(); - if (source.environment !== null) this.environment = source.environment.clone(); - if (source.fog !== null) this.fog = source.fog.clone(); - - this.backgroundBlurriness = source.backgroundBlurriness; - this.backgroundIntensity = source.backgroundIntensity; - this.backgroundRotation.copy(source.backgroundRotation); - - this.environmentIntensity = source.environmentIntensity; - this.environmentRotation.copy(source.environmentRotation); - - if (source.overrideMaterial !== null) this.overrideMaterial = source.overrideMaterial.clone(); - - this.matrixAutoUpdate = source.matrixAutoUpdate; - - return this; - } - - toJSON(meta) { - const data = super.toJSON(meta); - - if (this.fog !== null) data.object.fog = this.fog.toJSON(); - - if (this.backgroundBlurriness > 0) data.object.backgroundBlurriness = this.backgroundBlurriness; - if (this.backgroundIntensity !== 1) data.object.backgroundIntensity = this.backgroundIntensity; - data.object.backgroundRotation = this.backgroundRotation.toArray(); - - if (this.environmentIntensity !== 1) data.object.environmentIntensity = this.environmentIntensity; - data.object.environmentRotation = this.environmentRotation.toArray(); - - return data; - } -} - -class InterleavedBuffer { - constructor(array, stride) { - this.isInterleavedBuffer = true; - - this.array = array; - this.stride = stride; - this.count = array !== undefined ? array.length / stride : 0; - - this.usage = StaticDrawUsage; - this._updateRange = { offset: 0, count: -1 }; - this.updateRanges = []; - - this.version = 0; - - this.uuid = generateUUID(); - } - - onUploadCallback() {} - - set needsUpdate(value) { - if (value === true) this.version++; - } - - get updateRange() { - warnOnce('THREE.InterleavedBuffer: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead.'); // @deprecated, r159 - return this._updateRange; - } - - setUsage(value) { - this.usage = value; - - return this; - } - - addUpdateRange(start, count) { - this.updateRanges.push({ start, count }); - } - - clearUpdateRanges() { - this.updateRanges.length = 0; - } - - copy(source) { - this.array = new source.array.constructor(source.array); - this.count = source.count; - this.stride = source.stride; - this.usage = source.usage; - - return this; - } - - copyAt(index1, attribute, index2) { - index1 *= this.stride; - index2 *= attribute.stride; - - for (let i = 0, l = this.stride; i < l; i++) { - this.array[index1 + i] = attribute.array[index2 + i]; - } - - return this; - } - - set(value, offset = 0) { - this.array.set(value, offset); - - return this; - } - - clone(data) { - if (data.arrayBuffers === undefined) { - data.arrayBuffers = {}; - } - - if (this.array.buffer._uuid === undefined) { - this.array.buffer._uuid = generateUUID(); - } - - if (data.arrayBuffers[this.array.buffer._uuid] === undefined) { - data.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer; - } - - const array = new this.array.constructor(data.arrayBuffers[this.array.buffer._uuid]); - - const ib = new this.constructor(array, this.stride); - ib.setUsage(this.usage); - - return ib; - } - - onUpload(callback) { - this.onUploadCallback = callback; - - return this; - } - - toJSON(data) { - if (data.arrayBuffers === undefined) { - data.arrayBuffers = {}; - } - - // generate UUID for array buffer if necessary - - if (this.array.buffer._uuid === undefined) { - this.array.buffer._uuid = generateUUID(); - } - - if (data.arrayBuffers[this.array.buffer._uuid] === undefined) { - data.arrayBuffers[this.array.buffer._uuid] = Array.from(new Uint32Array(this.array.buffer)); - } - - // - - return { - uuid: this.uuid, - buffer: this.array.buffer._uuid, - type: this.array.constructor.name, - stride: this.stride, - }; - } -} - -const _vector$7 = /*@__PURE__*/ new Vector3(); - -class InterleavedBufferAttribute { - constructor(interleavedBuffer, itemSize, offset, normalized = false) { - this.isInterleavedBufferAttribute = true; - - this.name = ''; - - this.data = interleavedBuffer; - this.itemSize = itemSize; - this.offset = offset; - - this.normalized = normalized; - } - - get count() { - return this.data.count; - } - - get array() { - return this.data.array; - } - - set needsUpdate(value) { - this.data.needsUpdate = value; - } - - applyMatrix4(m) { - for (let i = 0, l = this.data.count; i < l; i++) { - _vector$7.fromBufferAttribute(this, i); - - _vector$7.applyMatrix4(m); - - this.setXYZ(i, _vector$7.x, _vector$7.y, _vector$7.z); - } - - return this; - } - - applyNormalMatrix(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$7.fromBufferAttribute(this, i); - - _vector$7.applyNormalMatrix(m); - - this.setXYZ(i, _vector$7.x, _vector$7.y, _vector$7.z); - } - - return this; - } - - transformDirection(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$7.fromBufferAttribute(this, i); - - _vector$7.transformDirection(m); - - this.setXYZ(i, _vector$7.x, _vector$7.y, _vector$7.z); - } - - return this; - } - - getComponent(index, component) { - let value = this.array[index * this.data.stride + this.offset + component]; - - if (this.normalized) value = denormalize(value, this.array); - - return value; - } - - setComponent(index, component, value) { - if (this.normalized) value = normalize$1(value, this.array); - - this.data.array[index * this.data.stride + this.offset + component] = value; - - return this; - } - - setX(index, x) { - if (this.normalized) x = normalize$1(x, this.array); - - this.data.array[index * this.data.stride + this.offset] = x; - - return this; - } - - setY(index, y) { - if (this.normalized) y = normalize$1(y, this.array); - - this.data.array[index * this.data.stride + this.offset + 1] = y; - - return this; - } - - setZ(index, z) { - if (this.normalized) z = normalize$1(z, this.array); - - this.data.array[index * this.data.stride + this.offset + 2] = z; - - return this; - } - - setW(index, w) { - if (this.normalized) w = normalize$1(w, this.array); - - this.data.array[index * this.data.stride + this.offset + 3] = w; - - return this; - } - - getX(index) { - let x = this.data.array[index * this.data.stride + this.offset]; - - if (this.normalized) x = denormalize(x, this.array); - - return x; - } - - getY(index) { - let y = this.data.array[index * this.data.stride + this.offset + 1]; - - if (this.normalized) y = denormalize(y, this.array); - - return y; - } - - getZ(index) { - let z = this.data.array[index * this.data.stride + this.offset + 2]; - - if (this.normalized) z = denormalize(z, this.array); - - return z; - } - - getW(index) { - let w = this.data.array[index * this.data.stride + this.offset + 3]; - - if (this.normalized) w = denormalize(w, this.array); - - return w; - } - - setXY(index, x, y) { - index = index * this.data.stride + this.offset; - - if (this.normalized) { - x = normalize$1(x, this.array); - y = normalize$1(y, this.array); - } - - this.data.array[index + 0] = x; - this.data.array[index + 1] = y; - - return this; - } - - setXYZ(index, x, y, z) { - index = index * this.data.stride + this.offset; - - if (this.normalized) { - x = normalize$1(x, this.array); - y = normalize$1(y, this.array); - z = normalize$1(z, this.array); - } - - this.data.array[index + 0] = x; - this.data.array[index + 1] = y; - this.data.array[index + 2] = z; - - return this; - } - - setXYZW(index, x, y, z, w) { - index = index * this.data.stride + this.offset; - - if (this.normalized) { - x = normalize$1(x, this.array); - y = normalize$1(y, this.array); - z = normalize$1(z, this.array); - w = normalize$1(w, this.array); - } - - this.data.array[index + 0] = x; - this.data.array[index + 1] = y; - this.data.array[index + 2] = z; - this.data.array[index + 3] = w; - - return this; - } - - clone(data) { - if (data === undefined) { - console.log('THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.'); - - const array = []; - - for (let i = 0; i < this.count; i++) { - const index = i * this.data.stride + this.offset; - - for (let j = 0; j < this.itemSize; j++) { - array.push(this.data.array[index + j]); - } - } - - return new BufferAttribute(new this.array.constructor(array), this.itemSize, this.normalized); - } else { - if (data.interleavedBuffers === undefined) { - data.interleavedBuffers = {}; - } - - if (data.interleavedBuffers[this.data.uuid] === undefined) { - data.interleavedBuffers[this.data.uuid] = this.data.clone(data); - } - - return new InterleavedBufferAttribute(data.interleavedBuffers[this.data.uuid], this.itemSize, this.offset, this.normalized); - } - } - - toJSON(data) { - if (data === undefined) { - console.log('THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.'); - - const array = []; - - for (let i = 0; i < this.count; i++) { - const index = i * this.data.stride + this.offset; - - for (let j = 0; j < this.itemSize; j++) { - array.push(this.data.array[index + j]); - } - } - - // de-interleave data and save it as an ordinary buffer attribute for now - - return { - itemSize: this.itemSize, - type: this.array.constructor.name, - array: array, - normalized: this.normalized, - }; - } else { - // save as true interleaved attribute - - if (data.interleavedBuffers === undefined) { - data.interleavedBuffers = {}; - } - - if (data.interleavedBuffers[this.data.uuid] === undefined) { - data.interleavedBuffers[this.data.uuid] = this.data.toJSON(data); - } - - return { - isInterleavedBufferAttribute: true, - itemSize: this.itemSize, - data: this.data.uuid, - offset: this.offset, - normalized: this.normalized, - }; - } - } -} - -class SpriteMaterial extends Material { - constructor(parameters) { - super(); - - this.isSpriteMaterial = true; - - this.type = 'SpriteMaterial'; - - this.color = new Color(0xffffff); - - this.map = null; - - this.alphaMap = null; - - this.rotation = 0; - - this.sizeAttenuation = true; - - this.transparent = true; - - this.fog = true; - - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - - this.color.copy(source.color); - - this.map = source.map; - - this.alphaMap = source.alphaMap; - - this.rotation = source.rotation; - - this.sizeAttenuation = source.sizeAttenuation; - - this.fog = source.fog; - - return this; - } -} - -let _geometry$1; - -const _intersectPoint = /*@__PURE__*/ new Vector3(); -const _worldScale = /*@__PURE__*/ new Vector3(); -const _mvPosition = /*@__PURE__*/ new Vector3(); - -const _alignedPosition = /*@__PURE__*/ new Vector2(); -const _rotatedPosition = /*@__PURE__*/ new Vector2(); -const _viewWorldMatrix = /*@__PURE__*/ new Matrix4(); - -const _vA = /*@__PURE__*/ new Vector3(); -const _vB = /*@__PURE__*/ new Vector3(); -const _vC = /*@__PURE__*/ new Vector3(); - -const _uvA = /*@__PURE__*/ new Vector2(); -const _uvB = /*@__PURE__*/ new Vector2(); -const _uvC = /*@__PURE__*/ new Vector2(); - -class Sprite extends Object3D { - constructor(material = new SpriteMaterial()) { - super(); - - this.isSprite = true; - - this.type = 'Sprite'; - - if (_geometry$1 === undefined) { - _geometry$1 = new BufferGeometry(); - - const float32Array = new Float32Array([-0.5, -0.5, 0, 0, 0, 0.5, -0.5, 0, 1, 0, 0.5, 0.5, 0, 1, 1, -0.5, 0.5, 0, 0, 1]); - - const interleavedBuffer = new InterleavedBuffer(float32Array, 5); - - _geometry$1.setIndex([0, 1, 2, 0, 2, 3]); - _geometry$1.setAttribute('position', new InterleavedBufferAttribute(interleavedBuffer, 3, 0, false)); - _geometry$1.setAttribute('uv', new InterleavedBufferAttribute(interleavedBuffer, 2, 3, false)); - } - - this.geometry = _geometry$1; - this.material = material; - - this.center = new Vector2(0.5, 0.5); - } - - raycast(raycaster, intersects) { - if (raycaster.camera === null) { - console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'); - } - - _worldScale.setFromMatrixScale(this.matrixWorld); - - _viewWorldMatrix.copy(raycaster.camera.matrixWorld); - this.modelViewMatrix.multiplyMatrices(raycaster.camera.matrixWorldInverse, this.matrixWorld); - - _mvPosition.setFromMatrixPosition(this.modelViewMatrix); - - if (raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false) { - _worldScale.multiplyScalar(-_mvPosition.z); - } - - const rotation = this.material.rotation; - let sin, cos; - - if (rotation !== 0) { - cos = Math.cos(rotation); - sin = Math.sin(rotation); - } - - const center = this.center; - - transformVertex(_vA.set(-0.5, -0.5, 0), _mvPosition, center, _worldScale, sin, cos); - transformVertex(_vB.set(0.5, -0.5, 0), _mvPosition, center, _worldScale, sin, cos); - transformVertex(_vC.set(0.5, 0.5, 0), _mvPosition, center, _worldScale, sin, cos); - - _uvA.set(0, 0); - _uvB.set(1, 0); - _uvC.set(1, 1); - - // check first triangle - let intersect = raycaster.ray.intersectTriangle(_vA, _vB, _vC, false, _intersectPoint); - - if (intersect === null) { - // check second triangle - transformVertex(_vB.set(-0.5, 0.5, 0), _mvPosition, center, _worldScale, sin, cos); - _uvB.set(0, 1); - - intersect = raycaster.ray.intersectTriangle(_vA, _vC, _vB, false, _intersectPoint); - if (intersect === null) { - return; - } - } - - const distance = raycaster.ray.origin.distanceTo(_intersectPoint); - - if (distance < raycaster.near || distance > raycaster.far) return; - - intersects.push({ - distance: distance, - point: _intersectPoint.clone(), - uv: Triangle.getInterpolation(_intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2()), - face: null, - object: this, - }); - } - - copy(source, recursive) { - super.copy(source, recursive); - - if (source.center !== undefined) this.center.copy(source.center); - - this.material = source.material; - - return this; - } -} - -function transformVertex(vertexPosition, mvPosition, center, scale, sin, cos) { - // compute position in camera space - _alignedPosition.subVectors(vertexPosition, center).addScalar(0.5).multiply(scale); - - // to check if rotation is not zero - if (sin !== undefined) { - _rotatedPosition.x = cos * _alignedPosition.x - sin * _alignedPosition.y; - _rotatedPosition.y = sin * _alignedPosition.x + cos * _alignedPosition.y; - } else { - _rotatedPosition.copy(_alignedPosition); - } - - vertexPosition.copy(mvPosition); - vertexPosition.x += _rotatedPosition.x; - vertexPosition.y += _rotatedPosition.y; - - // transform to world space - vertexPosition.applyMatrix4(_viewWorldMatrix); -} - -const _v1$2 = /*@__PURE__*/ new Vector3(); -const _v2$1 = /*@__PURE__*/ new Vector3(); - -class LOD extends Object3D { - constructor() { - super(); - - this._currentLevel = 0; - - this.type = 'LOD'; - - Object.defineProperties(this, { - levels: { - enumerable: true, - value: [], - }, - isLOD: { - value: true, - }, - }); - - this.autoUpdate = true; - } - - copy(source) { - super.copy(source, false); - - const levels = source.levels; - - for (let i = 0, l = levels.length; i < l; i++) { - const level = levels[i]; - - this.addLevel(level.object.clone(), level.distance, level.hysteresis); - } - - this.autoUpdate = source.autoUpdate; - - return this; - } - - addLevel(object, distance = 0, hysteresis = 0) { - distance = Math.abs(distance); - - const levels = this.levels; - - let l; - - for (l = 0; l < levels.length; l++) { - if (distance < levels[l].distance) { - break; - } - } - - levels.splice(l, 0, { distance: distance, hysteresis: hysteresis, object: object }); - - this.add(object); - - return this; - } - - getCurrentLevel() { - return this._currentLevel; - } - - getObjectForDistance(distance) { - const levels = this.levels; - - if (levels.length > 0) { - let i, l; - - for (i = 1, l = levels.length; i < l; i++) { - let levelDistance = levels[i].distance; - - if (levels[i].object.visible) { - levelDistance -= levelDistance * levels[i].hysteresis; - } - - if (distance < levelDistance) { - break; - } - } - - return levels[i - 1].object; - } - - return null; - } - - raycast(raycaster, intersects) { - const levels = this.levels; - - if (levels.length > 0) { - _v1$2.setFromMatrixPosition(this.matrixWorld); - - const distance = raycaster.ray.origin.distanceTo(_v1$2); - - this.getObjectForDistance(distance).raycast(raycaster, intersects); - } - } - - update(camera) { - const levels = this.levels; - - if (levels.length > 1) { - _v1$2.setFromMatrixPosition(camera.matrixWorld); - _v2$1.setFromMatrixPosition(this.matrixWorld); - - const distance = _v1$2.distanceTo(_v2$1) / camera.zoom; - - levels[0].object.visible = true; - - let i, l; - - for (i = 1, l = levels.length; i < l; i++) { - let levelDistance = levels[i].distance; - - if (levels[i].object.visible) { - levelDistance -= levelDistance * levels[i].hysteresis; - } - - if (distance >= levelDistance) { - levels[i - 1].object.visible = false; - levels[i].object.visible = true; - } else { - break; - } - } - - this._currentLevel = i - 1; - - for (; i < l; i++) { - levels[i].object.visible = false; - } - } - } - - toJSON(meta) { - const data = super.toJSON(meta); - - if (this.autoUpdate === false) data.object.autoUpdate = false; - - data.object.levels = []; - - const levels = this.levels; - - for (let i = 0, l = levels.length; i < l; i++) { - const level = levels[i]; - - data.object.levels.push({ - object: level.object.uuid, - distance: level.distance, - hysteresis: level.hysteresis, - }); - } - - return data; - } -} - -const _basePosition = /*@__PURE__*/ new Vector3(); - -const _skinIndex = /*@__PURE__*/ new Vector4(); -const _skinWeight = /*@__PURE__*/ new Vector4(); - -const _vector3$1 = /*@__PURE__*/ new Vector3(); -const _matrix4 = /*@__PURE__*/ new Matrix4(); -const _vertex = /*@__PURE__*/ new Vector3(); - -const _sphere$5 = /*@__PURE__*/ new Sphere(); -const _inverseMatrix$2 = /*@__PURE__*/ new Matrix4(); -const _ray$2 = /*@__PURE__*/ new Ray(); - -class SkinnedMesh extends Mesh { - constructor(geometry, material) { - super(geometry, material); - - this.isSkinnedMesh = true; - - this.type = 'SkinnedMesh'; - - this.bindMode = AttachedBindMode; - this.bindMatrix = new Matrix4(); - this.bindMatrixInverse = new Matrix4(); - - this.boundingBox = null; - this.boundingSphere = null; - } - - computeBoundingBox() { - const geometry = this.geometry; - - if (this.boundingBox === null) { - this.boundingBox = new Box3(); - } - - this.boundingBox.makeEmpty(); - - const positionAttribute = geometry.getAttribute('position'); - - for (let i = 0; i < positionAttribute.count; i++) { - this.getVertexPosition(i, _vertex); - this.boundingBox.expandByPoint(_vertex); - } - } - - computeBoundingSphere() { - const geometry = this.geometry; - - if (this.boundingSphere === null) { - this.boundingSphere = new Sphere(); - } - - this.boundingSphere.makeEmpty(); - - const positionAttribute = geometry.getAttribute('position'); - - for (let i = 0; i < positionAttribute.count; i++) { - this.getVertexPosition(i, _vertex); - this.boundingSphere.expandByPoint(_vertex); - } - } - - copy(source, recursive) { - super.copy(source, recursive); - - this.bindMode = source.bindMode; - this.bindMatrix.copy(source.bindMatrix); - this.bindMatrixInverse.copy(source.bindMatrixInverse); - - this.skeleton = source.skeleton; - - if (source.boundingBox !== null) this.boundingBox = source.boundingBox.clone(); - if (source.boundingSphere !== null) this.boundingSphere = source.boundingSphere.clone(); - - return this; - } - - raycast(raycaster, intersects) { - const material = this.material; - const matrixWorld = this.matrixWorld; - - if (material === undefined) return; - - // test with bounding sphere in world space - - if (this.boundingSphere === null) this.computeBoundingSphere(); - - _sphere$5.copy(this.boundingSphere); - _sphere$5.applyMatrix4(matrixWorld); - - if (raycaster.ray.intersectsSphere(_sphere$5) === false) return; - - // convert ray to local space of skinned mesh - - _inverseMatrix$2.copy(matrixWorld).invert(); - _ray$2.copy(raycaster.ray).applyMatrix4(_inverseMatrix$2); - - // test with bounding box in local space - - if (this.boundingBox !== null) { - if (_ray$2.intersectsBox(this.boundingBox) === false) return; - } - - // test for intersections with geometry - - this._computeIntersections(raycaster, intersects, _ray$2); - } - - getVertexPosition(index, target) { - super.getVertexPosition(index, target); - - this.applyBoneTransform(index, target); - - return target; - } - - bind(skeleton, bindMatrix) { - this.skeleton = skeleton; - - if (bindMatrix === undefined) { - this.updateMatrixWorld(true); - - this.skeleton.calculateInverses(); - - bindMatrix = this.matrixWorld; - } - - this.bindMatrix.copy(bindMatrix); - this.bindMatrixInverse.copy(bindMatrix).invert(); - } - - pose() { - this.skeleton.pose(); - } - - normalizeSkinWeights() { - const vector = new Vector4(); - - const skinWeight = this.geometry.attributes.skinWeight; - - for (let i = 0, l = skinWeight.count; i < l; i++) { - vector.fromBufferAttribute(skinWeight, i); - - const scale = 1.0 / vector.manhattanLength(); - - if (scale !== Infinity) { - vector.multiplyScalar(scale); - } else { - vector.set(1, 0, 0, 0); // do something reasonable - } - - skinWeight.setXYZW(i, vector.x, vector.y, vector.z, vector.w); - } - } - - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - - if (this.bindMode === AttachedBindMode) { - this.bindMatrixInverse.copy(this.matrixWorld).invert(); - } else if (this.bindMode === DetachedBindMode) { - this.bindMatrixInverse.copy(this.bindMatrix).invert(); - } else { - console.warn('THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode); - } - } - - applyBoneTransform(index, vector) { - const skeleton = this.skeleton; - const geometry = this.geometry; - - _skinIndex.fromBufferAttribute(geometry.attributes.skinIndex, index); - _skinWeight.fromBufferAttribute(geometry.attributes.skinWeight, index); - - _basePosition.copy(vector).applyMatrix4(this.bindMatrix); - - vector.set(0, 0, 0); - - for (let i = 0; i < 4; i++) { - const weight = _skinWeight.getComponent(i); - - if (weight !== 0) { - const boneIndex = _skinIndex.getComponent(i); - - _matrix4.multiplyMatrices(skeleton.bones[boneIndex].matrixWorld, skeleton.boneInverses[boneIndex]); - - vector.addScaledVector(_vector3$1.copy(_basePosition).applyMatrix4(_matrix4), weight); - } - } - - return vector.applyMatrix4(this.bindMatrixInverse); - } -} - -class Bone extends Object3D { - constructor() { - super(); - - this.isBone = true; - - this.type = 'Bone'; - } -} - -class DataTexture extends Texture { - constructor(data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, colorSpace) { - super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace); - - this.isDataTexture = true; - - this.image = { data: data, width: width, height: height }; - - this.generateMipmaps = false; - this.flipY = false; - this.unpackAlignment = 1; - } -} - -const _offsetMatrix = /*@__PURE__*/ new Matrix4(); -const _identityMatrix$1 = /*@__PURE__*/ new Matrix4(); - -class Skeleton { - constructor(bones = [], boneInverses = []) { - this.uuid = generateUUID(); - - this.bones = bones.slice(0); - this.boneInverses = boneInverses; - this.boneMatrices = null; - - this.boneTexture = null; - - this.init(); - } - - init() { - const bones = this.bones; - const boneInverses = this.boneInverses; - - this.boneMatrices = new Float32Array(bones.length * 16); - - // calculate inverse bone matrices if necessary - - if (boneInverses.length === 0) { - this.calculateInverses(); - } else { - // handle special case - - if (bones.length !== boneInverses.length) { - console.warn('THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.'); - - this.boneInverses = []; - - for (let i = 0, il = this.bones.length; i < il; i++) { - this.boneInverses.push(new Matrix4()); - } - } - } - } - - calculateInverses() { - this.boneInverses.length = 0; - - for (let i = 0, il = this.bones.length; i < il; i++) { - const inverse = new Matrix4(); - - if (this.bones[i]) { - inverse.copy(this.bones[i].matrixWorld).invert(); - } - - this.boneInverses.push(inverse); - } - } - - pose() { - // recover the bind-time world matrices - - for (let i = 0, il = this.bones.length; i < il; i++) { - const bone = this.bones[i]; - - if (bone) { - bone.matrixWorld.copy(this.boneInverses[i]).invert(); - } - } - - // compute the local matrices, positions, rotations and scales - - for (let i = 0, il = this.bones.length; i < il; i++) { - const bone = this.bones[i]; - - if (bone) { - if (bone.parent && bone.parent.isBone) { - bone.matrix.copy(bone.parent.matrixWorld).invert(); - bone.matrix.multiply(bone.matrixWorld); - } else { - bone.matrix.copy(bone.matrixWorld); - } - - bone.matrix.decompose(bone.position, bone.quaternion, bone.scale); - } - } - } - - update() { - const bones = this.bones; - const boneInverses = this.boneInverses; - const boneMatrices = this.boneMatrices; - const boneTexture = this.boneTexture; - - // flatten bone matrices to array - - for (let i = 0, il = bones.length; i < il; i++) { - // compute the offset between the current and the original transform - - const matrix = bones[i] ? bones[i].matrixWorld : _identityMatrix$1; - - _offsetMatrix.multiplyMatrices(matrix, boneInverses[i]); - _offsetMatrix.toArray(boneMatrices, i * 16); - } - - if (boneTexture !== null) { - boneTexture.needsUpdate = true; - } - } - - clone() { - return new Skeleton(this.bones, this.boneInverses); - } - - computeBoneTexture() { - // layout (1 matrix = 4 pixels) - // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) - // with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8) - // 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16) - // 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32) - // 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64) - - let size = Math.sqrt(this.bones.length * 4); // 4 pixels needed for 1 matrix - size = Math.ceil(size / 4) * 4; - size = Math.max(size, 4); - - const boneMatrices = new Float32Array(size * size * 4); // 4 floats per RGBA pixel - boneMatrices.set(this.boneMatrices); // copy current values - - const boneTexture = new DataTexture(boneMatrices, size, size, RGBAFormat, FloatType); - boneTexture.needsUpdate = true; - - this.boneMatrices = boneMatrices; - this.boneTexture = boneTexture; - - return this; - } - - getBoneByName(name) { - for (let i = 0, il = this.bones.length; i < il; i++) { - const bone = this.bones[i]; - - if (bone.name === name) { - return bone; - } - } - - return undefined; - } - - dispose() { - if (this.boneTexture !== null) { - this.boneTexture.dispose(); - - this.boneTexture = null; - } - } - - fromJSON(json, bones) { - this.uuid = json.uuid; - - for (let i = 0, l = json.bones.length; i < l; i++) { - const uuid = json.bones[i]; - let bone = bones[uuid]; - - if (bone === undefined) { - console.warn('THREE.Skeleton: No bone found with UUID:', uuid); - bone = new Bone(); - } - - this.bones.push(bone); - this.boneInverses.push(new Matrix4().fromArray(json.boneInverses[i])); - } - - this.init(); - - return this; - } - - toJSON() { - const data = { - metadata: { - version: 4.6, - type: 'Skeleton', - generator: 'Skeleton.toJSON', - }, - bones: [], - boneInverses: [], - }; - - data.uuid = this.uuid; - - const bones = this.bones; - const boneInverses = this.boneInverses; - - for (let i = 0, l = bones.length; i < l; i++) { - const bone = bones[i]; - data.bones.push(bone.uuid); - - const boneInverse = boneInverses[i]; - data.boneInverses.push(boneInverse.toArray()); - } - - return data; - } -} - -class InstancedBufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized, meshPerAttribute = 1) { - super(array, itemSize, normalized); - - this.isInstancedBufferAttribute = true; - - this.meshPerAttribute = meshPerAttribute; - } - - copy(source) { - super.copy(source); - - this.meshPerAttribute = source.meshPerAttribute; - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.meshPerAttribute = this.meshPerAttribute; - - data.isInstancedBufferAttribute = true; - - return data; - } -} - -const _instanceLocalMatrix = /*@__PURE__*/ new Matrix4(); -const _instanceWorldMatrix = /*@__PURE__*/ new Matrix4(); - -const _instanceIntersects = []; - -const _box3 = /*@__PURE__*/ new Box3(); -const _identity = /*@__PURE__*/ new Matrix4(); -const _mesh$1 = /*@__PURE__*/ new Mesh(); -const _sphere$4 = /*@__PURE__*/ new Sphere(); - -class InstancedMesh extends Mesh { - constructor(geometry, material, count) { - super(geometry, material); - - this.isInstancedMesh = true; - - this.instanceMatrix = new InstancedBufferAttribute(new Float32Array(count * 16), 16); - this.instanceColor = null; - this.morphTexture = null; - - this.count = count; - - this.boundingBox = null; - this.boundingSphere = null; - - for (let i = 0; i < count; i++) { - this.setMatrixAt(i, _identity); - } - } - - computeBoundingBox() { - const geometry = this.geometry; - const count = this.count; - - if (this.boundingBox === null) { - this.boundingBox = new Box3(); - } - - if (geometry.boundingBox === null) { - geometry.computeBoundingBox(); - } - - this.boundingBox.makeEmpty(); - - for (let i = 0; i < count; i++) { - this.getMatrixAt(i, _instanceLocalMatrix); - - _box3.copy(geometry.boundingBox).applyMatrix4(_instanceLocalMatrix); - - this.boundingBox.union(_box3); - } - } - - computeBoundingSphere() { - const geometry = this.geometry; - const count = this.count; - - if (this.boundingSphere === null) { - this.boundingSphere = new Sphere(); - } - - if (geometry.boundingSphere === null) { - geometry.computeBoundingSphere(); - } - - this.boundingSphere.makeEmpty(); - - for (let i = 0; i < count; i++) { - this.getMatrixAt(i, _instanceLocalMatrix); - - _sphere$4.copy(geometry.boundingSphere).applyMatrix4(_instanceLocalMatrix); - - this.boundingSphere.union(_sphere$4); - } - } - - copy(source, recursive) { - super.copy(source, recursive); - - this.instanceMatrix.copy(source.instanceMatrix); - - if (source.morphTexture !== null) this.morphTexture = source.morphTexture.clone(); - if (source.instanceColor !== null) this.instanceColor = source.instanceColor.clone(); - - this.count = source.count; - - if (source.boundingBox !== null) this.boundingBox = source.boundingBox.clone(); - if (source.boundingSphere !== null) this.boundingSphere = source.boundingSphere.clone(); - - return this; - } - - getColorAt(index, color) { - color.fromArray(this.instanceColor.array, index * 3); - } - - getMatrixAt(index, matrix) { - matrix.fromArray(this.instanceMatrix.array, index * 16); - } - - getMorphAt(index, object) { - const objectInfluences = object.morphTargetInfluences; - - const array = this.morphTexture.source.data.data; - - const len = objectInfluences.length + 1; // All influences + the baseInfluenceSum - - const dataIndex = index * len + 1; // Skip the baseInfluenceSum at the beginning - - for (let i = 0; i < objectInfluences.length; i++) { - objectInfluences[i] = array[dataIndex + i]; - } - } - - raycast(raycaster, intersects) { - const matrixWorld = this.matrixWorld; - const raycastTimes = this.count; - - _mesh$1.geometry = this.geometry; - _mesh$1.material = this.material; - - if (_mesh$1.material === undefined) return; - - // test with bounding sphere first - - if (this.boundingSphere === null) this.computeBoundingSphere(); - - _sphere$4.copy(this.boundingSphere); - _sphere$4.applyMatrix4(matrixWorld); - - if (raycaster.ray.intersectsSphere(_sphere$4) === false) return; - - // now test each instance - - for (let instanceId = 0; instanceId < raycastTimes; instanceId++) { - // calculate the world matrix for each instance - - this.getMatrixAt(instanceId, _instanceLocalMatrix); - - _instanceWorldMatrix.multiplyMatrices(matrixWorld, _instanceLocalMatrix); - - // the mesh represents this single instance - - _mesh$1.matrixWorld = _instanceWorldMatrix; - - _mesh$1.raycast(raycaster, _instanceIntersects); - - // process the result of raycast - - for (let i = 0, l = _instanceIntersects.length; i < l; i++) { - const intersect = _instanceIntersects[i]; - intersect.instanceId = instanceId; - intersect.object = this; - intersects.push(intersect); - } - - _instanceIntersects.length = 0; - } - } - - setColorAt(index, color) { - if (this.instanceColor === null) { - this.instanceColor = new InstancedBufferAttribute(new Float32Array(this.instanceMatrix.count * 3).fill(1), 3); - } - - color.toArray(this.instanceColor.array, index * 3); - } - - setMatrixAt(index, matrix) { - matrix.toArray(this.instanceMatrix.array, index * 16); - } - - setMorphAt(index, object) { - const objectInfluences = object.morphTargetInfluences; - - const len = objectInfluences.length + 1; // morphBaseInfluence + all influences - - if (this.morphTexture === null) { - this.morphTexture = new DataTexture(new Float32Array(len * this.count), len, this.count, RedFormat, FloatType); - } - - const array = this.morphTexture.source.data.data; - - let morphInfluencesSum = 0; - - for (let i = 0; i < objectInfluences.length; i++) { - morphInfluencesSum += objectInfluences[i]; - } - - const morphBaseInfluence = this.geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; - - const dataIndex = len * index; - - array[dataIndex] = morphBaseInfluence; - - array.set(objectInfluences, dataIndex + 1); - } - - updateMorphTargets() {} - - dispose() { - this.dispatchEvent({ type: 'dispose' }); - - if (this.morphTexture !== null) { - this.morphTexture.dispose(); - this.morphTexture = null; - } - - return this; - } -} - -const _vector1 = /*@__PURE__*/ new Vector3(); -const _vector2 = /*@__PURE__*/ new Vector3(); -const _normalMatrix = /*@__PURE__*/ new Matrix3(); - -class Plane { - constructor(normal = new Vector3(1, 0, 0), constant = 0) { - this.isPlane = true; - - // normal is assumed to be normalized - - this.normal = normal; - this.constant = constant; - } - - set(normal, constant) { - this.normal.copy(normal); - this.constant = constant; - - return this; - } - - setComponents(x, y, z, w) { - this.normal.set(x, y, z); - this.constant = w; - - return this; - } - - setFromNormalAndCoplanarPoint(normal, point) { - this.normal.copy(normal); - this.constant = -point.dot(this.normal); - - return this; - } - - setFromCoplanarPoints(a, b, c) { - const normal = _vector1.subVectors(c, b).cross(_vector2.subVectors(a, b)).normalize(); - - // Q: should an error be thrown if normal is zero (e.g. degenerate plane)? - - this.setFromNormalAndCoplanarPoint(normal, a); - - return this; - } - - copy(plane) { - this.normal.copy(plane.normal); - this.constant = plane.constant; - - return this; - } - - normalize() { - // Note: will lead to a divide by zero if the plane is invalid. - - const inverseNormalLength = 1.0 / this.normal.length(); - this.normal.multiplyScalar(inverseNormalLength); - this.constant *= inverseNormalLength; - - return this; - } - - negate() { - this.constant *= -1; - this.normal.negate(); - - return this; - } - - distanceToPoint(point) { - return this.normal.dot(point) + this.constant; - } - - distanceToSphere(sphere) { - return this.distanceToPoint(sphere.center) - sphere.radius; - } - - projectPoint(point, target) { - return target.copy(point).addScaledVector(this.normal, -this.distanceToPoint(point)); - } - - intersectLine(line, target) { - const direction = line.delta(_vector1); - - const denominator = this.normal.dot(direction); - - if (denominator === 0) { - // line is coplanar, return origin - if (this.distanceToPoint(line.start) === 0) { - return target.copy(line.start); - } - - // Unsure if this is the correct method to handle this case. - return null; - } - - const t = -(line.start.dot(this.normal) + this.constant) / denominator; - - if (t < 0 || t > 1) { - return null; - } - - return target.copy(line.start).addScaledVector(direction, t); - } - - intersectsLine(line) { - // Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it. - - const startSign = this.distanceToPoint(line.start); - const endSign = this.distanceToPoint(line.end); - - return (startSign < 0 && endSign > 0) || (endSign < 0 && startSign > 0); - } - - intersectsBox(box) { - return box.intersectsPlane(this); - } - - intersectsSphere(sphere) { - return sphere.intersectsPlane(this); - } - - coplanarPoint(target) { - return target.copy(this.normal).multiplyScalar(-this.constant); - } - - applyMatrix4(matrix, optionalNormalMatrix) { - const normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix(matrix); - - const referencePoint = this.coplanarPoint(_vector1).applyMatrix4(matrix); - - const normal = this.normal.applyMatrix3(normalMatrix).normalize(); - - this.constant = -referencePoint.dot(normal); - - return this; - } - - translate(offset) { - this.constant -= offset.dot(this.normal); - - return this; - } - - equals(plane) { - return plane.normal.equals(this.normal) && plane.constant === this.constant; - } - - clone() { - return new this.constructor().copy(this); - } -} - -const _sphere$3 = /*@__PURE__*/ new Sphere(); -const _vector$6 = /*@__PURE__*/ new Vector3(); - -class Frustum { - constructor(p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane()) { - this.planes = [p0, p1, p2, p3, p4, p5]; - } - - set(p0, p1, p2, p3, p4, p5) { - const planes = this.planes; - - planes[0].copy(p0); - planes[1].copy(p1); - planes[2].copy(p2); - planes[3].copy(p3); - planes[4].copy(p4); - planes[5].copy(p5); - - return this; - } - - copy(frustum) { - const planes = this.planes; - - for (let i = 0; i < 6; i++) { - planes[i].copy(frustum.planes[i]); - } - - return this; - } - - setFromProjectionMatrix(m, coordinateSystem = WebGLCoordinateSystem) { - const planes = this.planes; - const me = m.elements; - const me0 = me[0], - me1 = me[1], - me2 = me[2], - me3 = me[3]; - const me4 = me[4], - me5 = me[5], - me6 = me[6], - me7 = me[7]; - const me8 = me[8], - me9 = me[9], - me10 = me[10], - me11 = me[11]; - const me12 = me[12], - me13 = me[13], - me14 = me[14], - me15 = me[15]; - - planes[0].setComponents(me3 - me0, me7 - me4, me11 - me8, me15 - me12).normalize(); - planes[1].setComponents(me3 + me0, me7 + me4, me11 + me8, me15 + me12).normalize(); - planes[2].setComponents(me3 + me1, me7 + me5, me11 + me9, me15 + me13).normalize(); - planes[3].setComponents(me3 - me1, me7 - me5, me11 - me9, me15 - me13).normalize(); - planes[4].setComponents(me3 - me2, me7 - me6, me11 - me10, me15 - me14).normalize(); - - if (coordinateSystem === WebGLCoordinateSystem) { - planes[5].setComponents(me3 + me2, me7 + me6, me11 + me10, me15 + me14).normalize(); - } else if (coordinateSystem === WebGPUCoordinateSystem) { - planes[5].setComponents(me2, me6, me10, me14).normalize(); - } else { - throw new Error('THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: ' + coordinateSystem); - } - - return this; - } - - intersectsObject(object) { - if (object.boundingSphere !== undefined) { - if (object.boundingSphere === null) object.computeBoundingSphere(); - - _sphere$3.copy(object.boundingSphere).applyMatrix4(object.matrixWorld); - } else { - const geometry = object.geometry; - - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - - _sphere$3.copy(geometry.boundingSphere).applyMatrix4(object.matrixWorld); - } - - return this.intersectsSphere(_sphere$3); - } - - intersectsSprite(sprite) { - _sphere$3.center.set(0, 0, 0); - _sphere$3.radius = 0.7071067811865476; - _sphere$3.applyMatrix4(sprite.matrixWorld); - - return this.intersectsSphere(_sphere$3); - } - - intersectsSphere(sphere) { - const planes = this.planes; - const center = sphere.center; - const negRadius = -sphere.radius; - - for (let i = 0; i < 6; i++) { - const distance = planes[i].distanceToPoint(center); - - if (distance < negRadius) { - return false; - } - } - - return true; - } - - intersectsBox(box) { - const planes = this.planes; - - for (let i = 0; i < 6; i++) { - const plane = planes[i]; - - // corner at max distance - - _vector$6.x = plane.normal.x > 0 ? box.max.x : box.min.x; - _vector$6.y = plane.normal.y > 0 ? box.max.y : box.min.y; - _vector$6.z = plane.normal.z > 0 ? box.max.z : box.min.z; - - if (plane.distanceToPoint(_vector$6) < 0) { - return false; - } - } - - return true; - } - - containsPoint(point) { - const planes = this.planes; - - for (let i = 0; i < 6; i++) { - if (planes[i].distanceToPoint(point) < 0) { - return false; - } - } - - return true; - } - - clone() { - return new this.constructor().copy(this); - } -} - -function sortOpaque(a, b) { - return a.z - b.z; -} - -function sortTransparent(a, b) { - return b.z - a.z; -} - -class MultiDrawRenderList { - constructor() { - this.index = 0; - this.pool = []; - this.list = []; - } - - push(drawRange, z, index) { - const pool = this.pool; - const list = this.list; - if (this.index >= pool.length) { - pool.push({ - start: -1, - count: -1, - z: -1, - index: -1, - }); - } - - const item = pool[this.index]; - list.push(item); - this.index++; - - item.start = drawRange.start; - item.count = drawRange.count; - item.z = z; - item.index = index; - } - - reset() { - this.list.length = 0; - this.index = 0; - } -} - -const _matrix$1 = /*@__PURE__*/ new Matrix4(); -const _invMatrixWorld = /*@__PURE__*/ new Matrix4(); -const _identityMatrix = /*@__PURE__*/ new Matrix4(); -const _whiteColor = /*@__PURE__*/ new Color(1, 1, 1); -const _projScreenMatrix$3 = /*@__PURE__*/ new Matrix4(); -const _frustum$1 = /*@__PURE__*/ new Frustum(); -const _box$1 = /*@__PURE__*/ new Box3(); -const _sphere$2 = /*@__PURE__*/ new Sphere(); -const _vector$5 = /*@__PURE__*/ new Vector3(); -const _forward = /*@__PURE__*/ new Vector3(); -const _temp = /*@__PURE__*/ new Vector3(); -const _renderList = /*@__PURE__*/ new MultiDrawRenderList(); -const _mesh = /*@__PURE__*/ new Mesh(); -const _batchIntersects = []; - -// @TODO: SkinnedMesh support? -// @TODO: geometry.groups support? -// @TODO: geometry.drawRange support? -// @TODO: geometry.morphAttributes support? -// @TODO: Support uniform parameter per geometry -// @TODO: Add an "optimize" function to pack geometry and remove data gaps - -// copies data from attribute "src" into "target" starting at "targetOffset" -function copyAttributeData(src, target, targetOffset = 0) { - const itemSize = target.itemSize; - if (src.isInterleavedBufferAttribute || src.array.constructor !== target.array.constructor) { - // use the component getters and setters if the array data cannot - // be copied directly - const vertexCount = src.count; - for (let i = 0; i < vertexCount; i++) { - for (let c = 0; c < itemSize; c++) { - target.setComponent(i + targetOffset, c, src.getComponent(i, c)); - } - } - } else { - // faster copy approach using typed array set function - target.array.set(src.array, targetOffset * itemSize); - } - - target.needsUpdate = true; -} - -class BatchedMesh extends Mesh { - get maxInstanceCount() { - return this._maxInstanceCount; - } - - constructor(maxInstanceCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material) { - super(new BufferGeometry(), material); - - this.isBatchedMesh = true; - this.perObjectFrustumCulled = true; - this.sortObjects = true; - this.boundingBox = null; - this.boundingSphere = null; - this.customSort = null; - - // stores visible, active, and geometry id per object - this._drawInfo = []; - - // geometry information - this._drawRanges = []; - this._reservedRanges = []; - this._bounds = []; - - this._maxInstanceCount = maxInstanceCount; - this._maxVertexCount = maxVertexCount; - this._maxIndexCount = maxIndexCount; - - this._geometryInitialized = false; - this._geometryCount = 0; - this._multiDrawCounts = new Int32Array(maxInstanceCount); - this._multiDrawStarts = new Int32Array(maxInstanceCount); - this._multiDrawCount = 0; - this._multiDrawInstances = null; - this._visibilityChanged = true; - - // Local matrix per geometry by using data texture - this._matricesTexture = null; - this._indirectTexture = null; - this._colorsTexture = null; - - this._initMatricesTexture(); - this._initIndirectTexture(); - } - - _initMatricesTexture() { - // layout (1 matrix = 4 pixels) - // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) - // with 8x8 pixel texture max 16 matrices * 4 pixels = (8 * 8) - // 16x16 pixel texture max 64 matrices * 4 pixels = (16 * 16) - // 32x32 pixel texture max 256 matrices * 4 pixels = (32 * 32) - // 64x64 pixel texture max 1024 matrices * 4 pixels = (64 * 64) - - let size = Math.sqrt(this._maxInstanceCount * 4); // 4 pixels needed for 1 matrix - size = Math.ceil(size / 4) * 4; - size = Math.max(size, 4); - - const matricesArray = new Float32Array(size * size * 4); // 4 floats per RGBA pixel - const matricesTexture = new DataTexture(matricesArray, size, size, RGBAFormat, FloatType); - - this._matricesTexture = matricesTexture; - } - - _initIndirectTexture() { - let size = Math.sqrt(this._maxInstanceCount); - size = Math.ceil(size); - - const indirectArray = new Uint32Array(size * size); - const indirectTexture = new DataTexture(indirectArray, size, size, RedIntegerFormat, UnsignedIntType); - - this._indirectTexture = indirectTexture; - } - - _initColorsTexture() { - let size = Math.sqrt(this._maxInstanceCount); - size = Math.ceil(size); - - // 4 floats per RGBA pixel initialized to white - const colorsArray = new Float32Array(size * size * 4).fill(1); - const colorsTexture = new DataTexture(colorsArray, size, size, RGBAFormat, FloatType); - colorsTexture.colorSpace = ColorManagement.workingColorSpace; - - this._colorsTexture = colorsTexture; - } - - _initializeGeometry(reference) { - const geometry = this.geometry; - const maxVertexCount = this._maxVertexCount; - const maxIndexCount = this._maxIndexCount; - if (this._geometryInitialized === false) { - for (const attributeName in reference.attributes) { - const srcAttribute = reference.getAttribute(attributeName); - const { array, itemSize, normalized } = srcAttribute; - - const dstArray = new array.constructor(maxVertexCount * itemSize); - const dstAttribute = new BufferAttribute(dstArray, itemSize, normalized); - - geometry.setAttribute(attributeName, dstAttribute); - } - - if (reference.getIndex() !== null) { - // Reserve last u16 index for primitive restart. - const indexArray = maxVertexCount > 65535 ? new Uint32Array(maxIndexCount) : new Uint16Array(maxIndexCount); - - geometry.setIndex(new BufferAttribute(indexArray, 1)); - } - - this._geometryInitialized = true; - } - } - - // Make sure the geometry is compatible with the existing combined geometry attributes - _validateGeometry(geometry) { - // check to ensure the geometries are using consistent attributes and indices - const batchGeometry = this.geometry; - if (Boolean(geometry.getIndex()) !== Boolean(batchGeometry.getIndex())) { - throw new Error('BatchedMesh: All geometries must consistently have "index".'); - } - - for (const attributeName in batchGeometry.attributes) { - if (!geometry.hasAttribute(attributeName)) { - throw new Error(`BatchedMesh: Added geometry missing "${attributeName}". All geometries must have consistent attributes.`); - } - - const srcAttribute = geometry.getAttribute(attributeName); - const dstAttribute = batchGeometry.getAttribute(attributeName); - if (srcAttribute.itemSize !== dstAttribute.itemSize || srcAttribute.normalized !== dstAttribute.normalized) { - throw new Error('BatchedMesh: All attributes must have a consistent itemSize and normalized value.'); - } - } - } - - setCustomSort(func) { - this.customSort = func; - return this; - } - - computeBoundingBox() { - if (this.boundingBox === null) { - this.boundingBox = new Box3(); - } - - const geometryCount = this._geometryCount; - const boundingBox = this.boundingBox; - const drawInfo = this._drawInfo; - - boundingBox.makeEmpty(); - for (let i = 0; i < geometryCount; i++) { - if (drawInfo[i].active === false) continue; - - const geometryId = drawInfo[i].geometryIndex; - this.getMatrixAt(i, _matrix$1); - this.getBoundingBoxAt(geometryId, _box$1).applyMatrix4(_matrix$1); - boundingBox.union(_box$1); - } - } - - computeBoundingSphere() { - if (this.boundingSphere === null) { - this.boundingSphere = new Sphere(); - } - - const boundingSphere = this.boundingSphere; - const drawInfo = this._drawInfo; - - boundingSphere.makeEmpty(); - for (let i = 0, l = drawInfo.length; i < l; i++) { - if (drawInfo[i].active === false) continue; - - const geometryId = drawInfo[i].geometryIndex; - this.getMatrixAt(i, _matrix$1); - this.getBoundingSphereAt(geometryId, _sphere$2).applyMatrix4(_matrix$1); - boundingSphere.union(_sphere$2); - } - } - - addInstance(geometryId) { - // ensure we're not over geometry - if (this._drawInfo.length >= this._maxInstanceCount) { - throw new Error('BatchedMesh: Maximum item count reached.'); - } - - this._drawInfo.push({ - visible: true, - active: true, - geometryIndex: geometryId, - }); - - // initialize the matrix - const drawId = this._drawInfo.length - 1; - const matricesTexture = this._matricesTexture; - const matricesArray = matricesTexture.image.data; - _identityMatrix.toArray(matricesArray, drawId * 16); - matricesTexture.needsUpdate = true; - - const colorsTexture = this._colorsTexture; - if (colorsTexture) { - _whiteColor.toArray(colorsTexture.image.data, drawId * 4); - colorsTexture.needsUpdate = true; - } - - return drawId; - } - - addGeometry(geometry, vertexCount = -1, indexCount = -1) { - this._initializeGeometry(geometry); - - this._validateGeometry(geometry); - - // ensure we're not over geometry - if (this._drawInfo.length >= this._maxInstanceCount) { - throw new Error('BatchedMesh: Maximum item count reached.'); - } - - // get the necessary range fo the geometry - const reservedRange = { - vertexStart: -1, - vertexCount: -1, - indexStart: -1, - indexCount: -1, - }; - - let lastRange = null; - const reservedRanges = this._reservedRanges; - const drawRanges = this._drawRanges; - const bounds = this._bounds; - if (this._geometryCount !== 0) { - lastRange = reservedRanges[reservedRanges.length - 1]; - } - - if (vertexCount === -1) { - reservedRange.vertexCount = geometry.getAttribute('position').count; - } else { - reservedRange.vertexCount = vertexCount; - } - - if (lastRange === null) { - reservedRange.vertexStart = 0; - } else { - reservedRange.vertexStart = lastRange.vertexStart + lastRange.vertexCount; - } - - const index = geometry.getIndex(); - const hasIndex = index !== null; - if (hasIndex) { - if (indexCount === -1) { - reservedRange.indexCount = index.count; - } else { - reservedRange.indexCount = indexCount; - } - - if (lastRange === null) { - reservedRange.indexStart = 0; - } else { - reservedRange.indexStart = lastRange.indexStart + lastRange.indexCount; - } - } - - if ((reservedRange.indexStart !== -1 && reservedRange.indexStart + reservedRange.indexCount > this._maxIndexCount) || reservedRange.vertexStart + reservedRange.vertexCount > this._maxVertexCount) { - throw new Error('BatchedMesh: Reserved space request exceeds the maximum buffer size.'); - } - - // update id - const geometryId = this._geometryCount; - this._geometryCount++; - - // add the reserved range and draw range objects - reservedRanges.push(reservedRange); - drawRanges.push({ - start: hasIndex ? reservedRange.indexStart : reservedRange.vertexStart, - count: -1, - }); - bounds.push({ - boxInitialized: false, - box: new Box3(), - - sphereInitialized: false, - sphere: new Sphere(), - }); - - // update the geometry - this.setGeometryAt(geometryId, geometry); - - return geometryId; - } - - setGeometryAt(geometryId, geometry) { - if (geometryId >= this._geometryCount) { - throw new Error('BatchedMesh: Maximum geometry count reached.'); - } - - this._validateGeometry(geometry); - - const batchGeometry = this.geometry; - const hasIndex = batchGeometry.getIndex() !== null; - const dstIndex = batchGeometry.getIndex(); - const srcIndex = geometry.getIndex(); - const reservedRange = this._reservedRanges[geometryId]; - if ((hasIndex && srcIndex.count > reservedRange.indexCount) || geometry.attributes.position.count > reservedRange.vertexCount) { - throw new Error('BatchedMesh: Reserved space not large enough for provided geometry.'); - } - - // copy geometry over - const vertexStart = reservedRange.vertexStart; - const vertexCount = reservedRange.vertexCount; - for (const attributeName in batchGeometry.attributes) { - // copy attribute data - const srcAttribute = geometry.getAttribute(attributeName); - const dstAttribute = batchGeometry.getAttribute(attributeName); - copyAttributeData(srcAttribute, dstAttribute, vertexStart); - - // fill the rest in with zeroes - const itemSize = srcAttribute.itemSize; - for (let i = srcAttribute.count, l = vertexCount; i < l; i++) { - const index = vertexStart + i; - for (let c = 0; c < itemSize; c++) { - dstAttribute.setComponent(index, c, 0); - } - } - - dstAttribute.needsUpdate = true; - dstAttribute.addUpdateRange(vertexStart * itemSize, vertexCount * itemSize); - } - - // copy index - if (hasIndex) { - const indexStart = reservedRange.indexStart; - - // copy index data over - for (let i = 0; i < srcIndex.count; i++) { - dstIndex.setX(indexStart + i, vertexStart + srcIndex.getX(i)); - } - - // fill the rest in with zeroes - for (let i = srcIndex.count, l = reservedRange.indexCount; i < l; i++) { - dstIndex.setX(indexStart + i, vertexStart); - } - - dstIndex.needsUpdate = true; - dstIndex.addUpdateRange(indexStart, reservedRange.indexCount); - } - - // store the bounding boxes - const bound = this._bounds[geometryId]; - if (geometry.boundingBox !== null) { - bound.box.copy(geometry.boundingBox); - bound.boxInitialized = true; - } else { - bound.boxInitialized = false; - } - - if (geometry.boundingSphere !== null) { - bound.sphere.copy(geometry.boundingSphere); - bound.sphereInitialized = true; - } else { - bound.sphereInitialized = false; - } - - // set drawRange count - const drawRange = this._drawRanges[geometryId]; - const posAttr = geometry.getAttribute('position'); - drawRange.count = hasIndex ? srcIndex.count : posAttr.count; - this._visibilityChanged = true; - - return geometryId; - } - - /* - deleteGeometry( geometryId ) { - - // TODO: delete geometry and associated instances - - } - */ - - /* - deleteInstance( instanceId ) { - - // Note: User needs to call optimize() afterward to pack the data. - - const drawInfo = this._drawInfo; - if ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) { - - return this; - - } - - drawInfo[ instanceId ].active = false; - this._visibilityChanged = true; - - return this; - - } - */ - - // get bounding box and compute it if it doesn't exist - getBoundingBoxAt(geometryId, target) { - if (geometryId >= this._geometryCount) { - return null; - } - - // compute bounding box - const bound = this._bounds[geometryId]; - const box = bound.box; - const geometry = this.geometry; - if (bound.boxInitialized === false) { - box.makeEmpty(); - - const index = geometry.index; - const position = geometry.attributes.position; - const drawRange = this._drawRanges[geometryId]; - for (let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i++) { - let iv = i; - if (index) { - iv = index.getX(iv); - } - - box.expandByPoint(_vector$5.fromBufferAttribute(position, iv)); - } - - bound.boxInitialized = true; - } - - target.copy(box); - return target; - } - - // get bounding sphere and compute it if it doesn't exist - getBoundingSphereAt(geometryId, target) { - if (geometryId >= this._geometryCount) { - return null; - } - - // compute bounding sphere - const bound = this._bounds[geometryId]; - const sphere = bound.sphere; - const geometry = this.geometry; - if (bound.sphereInitialized === false) { - sphere.makeEmpty(); - - this.getBoundingBoxAt(geometryId, _box$1); - _box$1.getCenter(sphere.center); - - const index = geometry.index; - const position = geometry.attributes.position; - const drawRange = this._drawRanges[geometryId]; - - let maxRadiusSq = 0; - for (let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i++) { - let iv = i; - if (index) { - iv = index.getX(iv); - } - - _vector$5.fromBufferAttribute(position, iv); - maxRadiusSq = Math.max(maxRadiusSq, sphere.center.distanceToSquared(_vector$5)); - } - - sphere.radius = Math.sqrt(maxRadiusSq); - bound.sphereInitialized = true; - } - - target.copy(sphere); - return target; - } - - setMatrixAt(instanceId, matrix) { - // @TODO: Map geometryId to index of the arrays because - // optimize() can make geometryId mismatch the index - - const drawInfo = this._drawInfo; - const matricesTexture = this._matricesTexture; - const matricesArray = this._matricesTexture.image.data; - if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { - return this; - } - - matrix.toArray(matricesArray, instanceId * 16); - matricesTexture.needsUpdate = true; - - return this; - } - - getMatrixAt(instanceId, matrix) { - const drawInfo = this._drawInfo; - const matricesArray = this._matricesTexture.image.data; - if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { - return null; - } - - return matrix.fromArray(matricesArray, instanceId * 16); - } - - setColorAt(instanceId, color) { - if (this._colorsTexture === null) { - this._initColorsTexture(); - } - - // @TODO: Map id to index of the arrays because - // optimize() can make id mismatch the index - - const colorsTexture = this._colorsTexture; - const colorsArray = this._colorsTexture.image.data; - const drawInfo = this._drawInfo; - if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { - return this; - } - - color.toArray(colorsArray, instanceId * 4); - colorsTexture.needsUpdate = true; - - return this; - } - - getColorAt(instanceId, color) { - const colorsArray = this._colorsTexture.image.data; - const drawInfo = this._drawInfo; - if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { - return null; - } - - return color.fromArray(colorsArray, instanceId * 4); - } - - setVisibleAt(instanceId, value) { - // if the geometry is out of range, not active, or visibility state - // does not change then return early - const drawInfo = this._drawInfo; - if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false || drawInfo[instanceId].visible === value) { - return this; - } - - drawInfo[instanceId].visible = value; - this._visibilityChanged = true; - - return this; - } - - getVisibleAt(instanceId) { - // return early if the geometry is out of range or not active - const drawInfo = this._drawInfo; - if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { - return false; - } - - return drawInfo[instanceId].visible; - } - - raycast(raycaster, intersects) { - const drawInfo = this._drawInfo; - const drawRanges = this._drawRanges; - const matrixWorld = this.matrixWorld; - const batchGeometry = this.geometry; - - // iterate over each geometry - _mesh.material = this.material; - _mesh.geometry.index = batchGeometry.index; - _mesh.geometry.attributes = batchGeometry.attributes; - if (_mesh.geometry.boundingBox === null) { - _mesh.geometry.boundingBox = new Box3(); - } - - if (_mesh.geometry.boundingSphere === null) { - _mesh.geometry.boundingSphere = new Sphere(); - } - - for (let i = 0, l = drawInfo.length; i < l; i++) { - if (!drawInfo[i].visible || !drawInfo[i].active) { - continue; - } - - const geometryId = drawInfo[i].geometryIndex; - const drawRange = drawRanges[geometryId]; - _mesh.geometry.setDrawRange(drawRange.start, drawRange.count); - - // ge the intersects - this.getMatrixAt(i, _mesh.matrixWorld).premultiply(matrixWorld); - this.getBoundingBoxAt(geometryId, _mesh.geometry.boundingBox); - this.getBoundingSphereAt(geometryId, _mesh.geometry.boundingSphere); - _mesh.raycast(raycaster, _batchIntersects); - - // add batch id to the intersects - for (let j = 0, l = _batchIntersects.length; j < l; j++) { - const intersect = _batchIntersects[j]; - intersect.object = this; - intersect.batchId = i; - intersects.push(intersect); - } - - _batchIntersects.length = 0; - } - - _mesh.material = null; - _mesh.geometry.index = null; - _mesh.geometry.attributes = {}; - _mesh.geometry.setDrawRange(0, Infinity); - } - - copy(source) { - super.copy(source); - - this.geometry = source.geometry.clone(); - this.perObjectFrustumCulled = source.perObjectFrustumCulled; - this.sortObjects = source.sortObjects; - this.boundingBox = source.boundingBox !== null ? source.boundingBox.clone() : null; - this.boundingSphere = source.boundingSphere !== null ? source.boundingSphere.clone() : null; - - this._drawRanges = source._drawRanges.map((range) => ({ ...range })); - this._reservedRanges = source._reservedRanges.map((range) => ({ ...range })); - - this._drawInfo = source._drawInfo.map((inf) => ({ ...inf })); - this._bounds = source._bounds.map((bound) => ({ - boxInitialized: bound.boxInitialized, - box: bound.box.clone(), - - sphereInitialized: bound.sphereInitialized, - sphere: bound.sphere.clone(), - })); - - this._maxInstanceCount = source._maxInstanceCount; - this._maxVertexCount = source._maxVertexCount; - this._maxIndexCount = source._maxIndexCount; - - this._geometryInitialized = source._geometryInitialized; - this._geometryCount = source._geometryCount; - this._multiDrawCounts = source._multiDrawCounts.slice(); - this._multiDrawStarts = source._multiDrawStarts.slice(); - - this._matricesTexture = source._matricesTexture.clone(); - this._matricesTexture.image.data = this._matricesTexture.image.data.slice(); - - if (this._colorsTexture !== null) { - this._colorsTexture = source._colorsTexture.clone(); - this._colorsTexture.image.data = this._colorsTexture.image.data.slice(); - } - - return this; - } - - dispose() { - // Assuming the geometry is not shared with other meshes - this.geometry.dispose(); - - this._matricesTexture.dispose(); - this._matricesTexture = null; - - this._indirectTexture.dispose(); - this._indirectTexture = null; - - if (this._colorsTexture !== null) { - this._colorsTexture.dispose(); - this._colorsTexture = null; - } - - return this; - } - - onBeforeRender(renderer, scene, camera, geometry, material /*, _group*/) { - // if visibility has not changed and frustum culling and object sorting is not required - // then skip iterating over all items - if (!this._visibilityChanged && !this.perObjectFrustumCulled && !this.sortObjects) { - return; - } - - // the indexed version of the multi draw function requires specifying the start - // offset in bytes. - const index = geometry.getIndex(); - const bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT; - - const drawInfo = this._drawInfo; - const multiDrawStarts = this._multiDrawStarts; - const multiDrawCounts = this._multiDrawCounts; - const drawRanges = this._drawRanges; - const perObjectFrustumCulled = this.perObjectFrustumCulled; - const indirectTexture = this._indirectTexture; - const indirectArray = indirectTexture.image.data; - - // prepare the frustum in the local frame - if (perObjectFrustumCulled) { - _projScreenMatrix$3.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse).multiply(this.matrixWorld); - _frustum$1.setFromProjectionMatrix(_projScreenMatrix$3, renderer.coordinateSystem); - } - - let count = 0; - if (this.sortObjects) { - // get the camera position in the local frame - _invMatrixWorld.copy(this.matrixWorld).invert(); - _vector$5.setFromMatrixPosition(camera.matrixWorld).applyMatrix4(_invMatrixWorld); - _forward.set(0, 0, -1).transformDirection(camera.matrixWorld).transformDirection(_invMatrixWorld); - - for (let i = 0, l = drawInfo.length; i < l; i++) { - if (drawInfo[i].visible && drawInfo[i].active) { - const geometryId = drawInfo[i].geometryIndex; - - // get the bounds in world space - this.getMatrixAt(i, _matrix$1); - this.getBoundingSphereAt(geometryId, _sphere$2).applyMatrix4(_matrix$1); - - // determine whether the batched geometry is within the frustum - let culled = false; - if (perObjectFrustumCulled) { - culled = !_frustum$1.intersectsSphere(_sphere$2); - } - - if (!culled) { - // get the distance from camera used for sorting - const z = _temp.subVectors(_sphere$2.center, _vector$5).dot(_forward); - _renderList.push(drawRanges[geometryId], z, i); - } - } - } - - // Sort the draw ranges and prep for rendering - const list = _renderList.list; - const customSort = this.customSort; - if (customSort === null) { - list.sort(material.transparent ? sortTransparent : sortOpaque); - } else { - customSort.call(this, list, camera); - } - - for (let i = 0, l = list.length; i < l; i++) { - const item = list[i]; - multiDrawStarts[count] = item.start * bytesPerElement; - multiDrawCounts[count] = item.count; - indirectArray[count] = item.index; - count++; - } - - _renderList.reset(); - } else { - for (let i = 0, l = drawInfo.length; i < l; i++) { - if (drawInfo[i].visible && drawInfo[i].active) { - const geometryId = drawInfo[i].geometryIndex; - - // determine whether the batched geometry is within the frustum - let culled = false; - if (perObjectFrustumCulled) { - // get the bounds in world space - this.getMatrixAt(i, _matrix$1); - this.getBoundingSphereAt(geometryId, _sphere$2).applyMatrix4(_matrix$1); - culled = !_frustum$1.intersectsSphere(_sphere$2); - } - - if (!culled) { - const range = drawRanges[geometryId]; - multiDrawStarts[count] = range.start * bytesPerElement; - multiDrawCounts[count] = range.count; - indirectArray[count] = i; - count++; - } - } - } - } - - indirectTexture.needsUpdate = true; - this._multiDrawCount = count; - this._visibilityChanged = false; - } - - onBeforeShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial /* , group */) { - this.onBeforeRender(renderer, null, shadowCamera, geometry, depthMaterial); - } -} - -class LineBasicMaterial extends Material { - constructor(parameters) { - super(); - - this.isLineBasicMaterial = true; - - this.type = 'LineBasicMaterial'; - - this.color = new Color(0xffffff); - - this.map = null; - - this.linewidth = 1; - this.linecap = 'round'; - this.linejoin = 'round'; - - this.fog = true; - - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - - this.color.copy(source.color); - - this.map = source.map; - - this.linewidth = source.linewidth; - this.linecap = source.linecap; - this.linejoin = source.linejoin; - - this.fog = source.fog; - - return this; - } -} - -const _vStart = /*@__PURE__*/ new Vector3(); -const _vEnd = /*@__PURE__*/ new Vector3(); - -const _inverseMatrix$1 = /*@__PURE__*/ new Matrix4(); -const _ray$1 = /*@__PURE__*/ new Ray(); -const _sphere$1 = /*@__PURE__*/ new Sphere(); - -const _intersectPointOnRay = /*@__PURE__*/ new Vector3(); -const _intersectPointOnSegment = /*@__PURE__*/ new Vector3(); - -class Line extends Object3D { - constructor(geometry = new BufferGeometry(), material = new LineBasicMaterial()) { - super(); - - this.isLine = true; - - this.type = 'Line'; - - this.geometry = geometry; - this.material = material; - - this.updateMorphTargets(); - } - - copy(source, recursive) { - super.copy(source, recursive); - - this.material = Array.isArray(source.material) ? source.material.slice() : source.material; - this.geometry = source.geometry; - - return this; - } - - computeLineDistances() { - const geometry = this.geometry; - - // we assume non-indexed geometry - - if (geometry.index === null) { - const positionAttribute = geometry.attributes.position; - const lineDistances = [0]; - - for (let i = 1, l = positionAttribute.count; i < l; i++) { - _vStart.fromBufferAttribute(positionAttribute, i - 1); - _vEnd.fromBufferAttribute(positionAttribute, i); - - lineDistances[i] = lineDistances[i - 1]; - lineDistances[i] += _vStart.distanceTo(_vEnd); - } - - geometry.setAttribute('lineDistance', new Float32BufferAttribute(lineDistances, 1)); - } else { - console.warn('THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.'); - } - - return this; - } - - raycast(raycaster, intersects) { - const geometry = this.geometry; - const matrixWorld = this.matrixWorld; - const threshold = raycaster.params.Line.threshold; - const drawRange = geometry.drawRange; - - // Checking boundingSphere distance to ray - - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - - _sphere$1.copy(geometry.boundingSphere); - _sphere$1.applyMatrix4(matrixWorld); - _sphere$1.radius += threshold; - - if (raycaster.ray.intersectsSphere(_sphere$1) === false) return; - - // - - _inverseMatrix$1.copy(matrixWorld).invert(); - _ray$1.copy(raycaster.ray).applyMatrix4(_inverseMatrix$1); - - const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3); - const localThresholdSq = localThreshold * localThreshold; - - const step = this.isLineSegments ? 2 : 1; - - const index = geometry.index; - const attributes = geometry.attributes; - const positionAttribute = attributes.position; - - if (index !== null) { - const start = Math.max(0, drawRange.start); - const end = Math.min(index.count, drawRange.start + drawRange.count); - - for (let i = start, l = end - 1; i < l; i += step) { - const a = index.getX(i); - const b = index.getX(i + 1); - - const intersect = checkIntersection(this, raycaster, _ray$1, localThresholdSq, a, b); - - if (intersect) { - intersects.push(intersect); - } - } - - if (this.isLineLoop) { - const a = index.getX(end - 1); - const b = index.getX(start); - - const intersect = checkIntersection(this, raycaster, _ray$1, localThresholdSq, a, b); - - if (intersect) { - intersects.push(intersect); - } - } - } else { - const start = Math.max(0, drawRange.start); - const end = Math.min(positionAttribute.count, drawRange.start + drawRange.count); - - for (let i = start, l = end - 1; i < l; i += step) { - const intersect = checkIntersection(this, raycaster, _ray$1, localThresholdSq, i, i + 1); - - if (intersect) { - intersects.push(intersect); - } - } - - if (this.isLineLoop) { - const intersect = checkIntersection(this, raycaster, _ray$1, localThresholdSq, end - 1, start); - - if (intersect) { - intersects.push(intersect); - } - } - } - } - - updateMorphTargets() { - const geometry = this.geometry; - - const morphAttributes = geometry.morphAttributes; - const keys = Object.keys(morphAttributes); - - if (keys.length > 0) { - const morphAttribute = morphAttributes[keys[0]]; - - if (morphAttribute !== undefined) { - this.morphTargetInfluences = []; - this.morphTargetDictionary = {}; - - for (let m = 0, ml = morphAttribute.length; m < ml; m++) { - const name = morphAttribute[m].name || String(m); - - this.morphTargetInfluences.push(0); - this.morphTargetDictionary[name] = m; - } - } - } - } -} - -function checkIntersection(object, raycaster, ray, thresholdSq, a, b) { - const positionAttribute = object.geometry.attributes.position; - - _vStart.fromBufferAttribute(positionAttribute, a); - _vEnd.fromBufferAttribute(positionAttribute, b); - - const distSq = ray.distanceSqToSegment(_vStart, _vEnd, _intersectPointOnRay, _intersectPointOnSegment); - - if (distSq > thresholdSq) return; - - _intersectPointOnRay.applyMatrix4(object.matrixWorld); // Move back to world space for distance calculation - - const distance = raycaster.ray.origin.distanceTo(_intersectPointOnRay); - - if (distance < raycaster.near || distance > raycaster.far) return; - - return { - distance: distance, - // What do we want? intersection point on the ray or on the segment?? - // point: raycaster.ray.at( distance ), - point: _intersectPointOnSegment.clone().applyMatrix4(object.matrixWorld), - index: a, - face: null, - faceIndex: null, - object: object, - }; -} - -const _start = /*@__PURE__*/ new Vector3(); -const _end = /*@__PURE__*/ new Vector3(); - -class LineSegments extends Line { - constructor(geometry, material) { - super(geometry, material); - - this.isLineSegments = true; - - this.type = 'LineSegments'; - } - - computeLineDistances() { - const geometry = this.geometry; - - // we assume non-indexed geometry - - if (geometry.index === null) { - const positionAttribute = geometry.attributes.position; - const lineDistances = []; - - for (let i = 0, l = positionAttribute.count; i < l; i += 2) { - _start.fromBufferAttribute(positionAttribute, i); - _end.fromBufferAttribute(positionAttribute, i + 1); - - lineDistances[i] = i === 0 ? 0 : lineDistances[i - 1]; - lineDistances[i + 1] = lineDistances[i] + _start.distanceTo(_end); - } - - geometry.setAttribute('lineDistance', new Float32BufferAttribute(lineDistances, 1)); - } else { - console.warn('THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.'); - } - - return this; - } -} - -class LineLoop extends Line { - constructor(geometry, material) { - super(geometry, material); - - this.isLineLoop = true; - - this.type = 'LineLoop'; - } -} - -class PointsMaterial extends Material { - constructor(parameters) { - super(); - - this.isPointsMaterial = true; - - this.type = 'PointsMaterial'; - - this.color = new Color(0xffffff); - - this.map = null; - - this.alphaMap = null; - - this.size = 1; - this.sizeAttenuation = true; - - this.fog = true; - - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - - this.color.copy(source.color); - - this.map = source.map; - - this.alphaMap = source.alphaMap; - - this.size = source.size; - this.sizeAttenuation = source.sizeAttenuation; - - this.fog = source.fog; - - return this; - } -} - -const _inverseMatrix = /*@__PURE__*/ new Matrix4(); -const _ray = /*@__PURE__*/ new Ray(); -const _sphere = /*@__PURE__*/ new Sphere(); -const _position$2 = /*@__PURE__*/ new Vector3(); - -class Points extends Object3D { - constructor(geometry = new BufferGeometry(), material = new PointsMaterial()) { - super(); - - this.isPoints = true; - - this.type = 'Points'; - - this.geometry = geometry; - this.material = material; - - this.updateMorphTargets(); - } - - copy(source, recursive) { - super.copy(source, recursive); - - this.material = Array.isArray(source.material) ? source.material.slice() : source.material; - this.geometry = source.geometry; - - return this; - } - - raycast(raycaster, intersects) { - const geometry = this.geometry; - const matrixWorld = this.matrixWorld; - const threshold = raycaster.params.Points.threshold; - const drawRange = geometry.drawRange; - - // Checking boundingSphere distance to ray - - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - - _sphere.copy(geometry.boundingSphere); - _sphere.applyMatrix4(matrixWorld); - _sphere.radius += threshold; - - if (raycaster.ray.intersectsSphere(_sphere) === false) return; - - // - - _inverseMatrix.copy(matrixWorld).invert(); - _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix); - - const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3); - const localThresholdSq = localThreshold * localThreshold; - - const index = geometry.index; - const attributes = geometry.attributes; - const positionAttribute = attributes.position; - - if (index !== null) { - const start = Math.max(0, drawRange.start); - const end = Math.min(index.count, drawRange.start + drawRange.count); - - for (let i = start, il = end; i < il; i++) { - const a = index.getX(i); - - _position$2.fromBufferAttribute(positionAttribute, a); - - testPoint(_position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this); - } - } else { - const start = Math.max(0, drawRange.start); - const end = Math.min(positionAttribute.count, drawRange.start + drawRange.count); - - for (let i = start, l = end; i < l; i++) { - _position$2.fromBufferAttribute(positionAttribute, i); - - testPoint(_position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this); - } - } - } - - updateMorphTargets() { - const geometry = this.geometry; - - const morphAttributes = geometry.morphAttributes; - const keys = Object.keys(morphAttributes); - - if (keys.length > 0) { - const morphAttribute = morphAttributes[keys[0]]; - - if (morphAttribute !== undefined) { - this.morphTargetInfluences = []; - this.morphTargetDictionary = {}; - - for (let m = 0, ml = morphAttribute.length; m < ml; m++) { - const name = morphAttribute[m].name || String(m); - - this.morphTargetInfluences.push(0); - this.morphTargetDictionary[name] = m; - } - } - } - } -} - -function testPoint(point, index, localThresholdSq, matrixWorld, raycaster, intersects, object) { - const rayPointDistanceSq = _ray.distanceSqToPoint(point); - - if (rayPointDistanceSq < localThresholdSq) { - const intersectPoint = new Vector3(); - - _ray.closestPointToPoint(point, intersectPoint); - intersectPoint.applyMatrix4(matrixWorld); - - const distance = raycaster.ray.origin.distanceTo(intersectPoint); - - if (distance < raycaster.near || distance > raycaster.far) return; - - intersects.push({ - distance: distance, - distanceToRay: Math.sqrt(rayPointDistanceSq), - point: intersectPoint, - index: index, - face: null, - object: object, - }); - } -} - -class Group extends Object3D { - constructor() { - super(); - - this.isGroup = true; - - this.type = 'Group'; - } -} - -class VideoTexture extends Texture { - constructor(video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy) { - super(video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); - - this.isVideoTexture = true; - - this.minFilter = minFilter !== undefined ? minFilter : LinearFilter; - this.magFilter = magFilter !== undefined ? magFilter : LinearFilter; - - this.generateMipmaps = false; - - const scope = this; - - function updateVideo() { - scope.needsUpdate = true; - video.requestVideoFrameCallback(updateVideo); - } - - if ('requestVideoFrameCallback' in video) { - video.requestVideoFrameCallback(updateVideo); - } - } - - clone() { - return new this.constructor(this.image).copy(this); - } - - update() { - const video = this.image; - const hasVideoFrameCallback = 'requestVideoFrameCallback' in video; - - if (hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA) { - this.needsUpdate = true; - } - } -} - -class FramebufferTexture extends Texture { - constructor(width, height) { - super({ width, height }); - - this.isFramebufferTexture = true; - - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - - this.generateMipmaps = false; - - this.needsUpdate = true; - } -} - -class CompressedTexture extends Texture { - constructor(mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace) { - super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace); - - this.isCompressedTexture = true; - - this.image = { width: width, height: height }; - this.mipmaps = mipmaps; - - // no flipping for cube textures - // (also flipping doesn't work for compressed textures ) - - this.flipY = false; - - // can't generate mipmaps for compressed textures - // mips must be embedded in DDS files - - this.generateMipmaps = false; - } -} - -class CompressedArrayTexture extends CompressedTexture { - constructor(mipmaps, width, height, depth, format, type) { - super(mipmaps, width, height, format, type); - - this.isCompressedArrayTexture = true; - this.image.depth = depth; - this.wrapR = ClampToEdgeWrapping; - - this.layerUpdates = new Set(); - } - - addLayerUpdate(layerIndex) { - this.layerUpdates.add(layerIndex); - } - - clearLayerUpdates() { - this.layerUpdates.clear(); - } -} - -class CompressedCubeTexture extends CompressedTexture { - constructor(images, format, type) { - super(undefined, images[0].width, images[0].height, format, type, CubeReflectionMapping); - - this.isCompressedCubeTexture = true; - this.isCubeTexture = true; - - this.image = images; - } -} - -class CanvasTexture extends Texture { - constructor(canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy) { - super(canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); - - this.isCanvasTexture = true; - - this.needsUpdate = true; - } -} - -class DepthTexture extends Texture { - constructor(width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format = DepthFormat) { - if (format !== DepthFormat && format !== DepthStencilFormat) { - throw new Error('DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat'); - } - - if (type === undefined && format === DepthFormat) type = UnsignedIntType; - if (type === undefined && format === DepthStencilFormat) type = UnsignedInt248Type; - - super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); - - this.isDepthTexture = true; - - this.image = { width: width, height: height }; - - this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; - this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; - - this.flipY = false; - this.generateMipmaps = false; - - this.compareFunction = null; - } - - copy(source) { - super.copy(source); - - this.compareFunction = source.compareFunction; - - return this; - } - - toJSON(meta) { - const data = super.toJSON(meta); - - if (this.compareFunction !== null) data.compareFunction = this.compareFunction; - - return data; - } -} - -/** - * Extensible curve object. - * - * Some common of curve methods: - * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget ) - * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget ) - * .getPoints(), .getSpacedPoints() - * .getLength() - * .updateArcLengths() - * - * This following curves inherit from THREE.Curve: - * - * -- 2D curves -- - * THREE.ArcCurve - * THREE.CubicBezierCurve - * THREE.EllipseCurve - * THREE.LineCurve - * THREE.QuadraticBezierCurve - * THREE.SplineCurve - * - * -- 3D curves -- - * THREE.CatmullRomCurve3 - * THREE.CubicBezierCurve3 - * THREE.LineCurve3 - * THREE.QuadraticBezierCurve3 - * - * A series of curves can be represented as a THREE.CurvePath. - * - **/ - -class Curve { - constructor() { - this.type = 'Curve'; - - this.arcLengthDivisions = 200; - } - - // Virtual base class method to overwrite and implement in subclasses - // - t [0 .. 1] - - getPoint(/* t, optionalTarget */) { - console.warn('THREE.Curve: .getPoint() not implemented.'); - return null; - } - - // Get point at relative position in curve according to arc length - // - u [0 .. 1] - - getPointAt(u, optionalTarget) { - const t = this.getUtoTmapping(u); - return this.getPoint(t, optionalTarget); - } - - // Get sequence of points using getPoint( t ) - - getPoints(divisions = 5) { - const points = []; - - for (let d = 0; d <= divisions; d++) { - points.push(this.getPoint(d / divisions)); - } - - return points; - } - - // Get sequence of points using getPointAt( u ) - - getSpacedPoints(divisions = 5) { - const points = []; - - for (let d = 0; d <= divisions; d++) { - points.push(this.getPointAt(d / divisions)); - } - - return points; - } - - // Get total curve arc length - - getLength() { - const lengths = this.getLengths(); - return lengths[lengths.length - 1]; - } - - // Get list of cumulative segment lengths - - getLengths(divisions = this.arcLengthDivisions) { - if (this.cacheArcLengths && this.cacheArcLengths.length === divisions + 1 && !this.needsUpdate) { - return this.cacheArcLengths; - } - - this.needsUpdate = false; - - const cache = []; - let current, - last = this.getPoint(0); - let sum = 0; - - cache.push(0); - - for (let p = 1; p <= divisions; p++) { - current = this.getPoint(p / divisions); - sum += current.distanceTo(last); - cache.push(sum); - last = current; - } - - this.cacheArcLengths = cache; - - return cache; // { sums: cache, sum: sum }; Sum is in the last element. - } - - updateArcLengths() { - this.needsUpdate = true; - this.getLengths(); - } - - // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant - - getUtoTmapping(u, distance) { - const arcLengths = this.getLengths(); - - let i = 0; - const il = arcLengths.length; - - let targetArcLength; // The targeted u distance value to get - - if (distance) { - targetArcLength = distance; - } else { - targetArcLength = u * arcLengths[il - 1]; - } - - // binary search for the index with largest value smaller than target u distance - - let low = 0, - high = il - 1, - comparison; - - while (low <= high) { - i = Math.floor(low + (high - low) / 2); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats - - comparison = arcLengths[i] - targetArcLength; - - if (comparison < 0) { - low = i + 1; - } else if (comparison > 0) { - high = i - 1; - } else { - high = i; - break; - - // DONE - } - } - - i = high; - - if (arcLengths[i] === targetArcLength) { - return i / (il - 1); - } - - // we could get finer grain at lengths, or use simple interpolation between two points - - const lengthBefore = arcLengths[i]; - const lengthAfter = arcLengths[i + 1]; - - const segmentLength = lengthAfter - lengthBefore; - - // determine where we are between the 'before' and 'after' points - - const segmentFraction = (targetArcLength - lengthBefore) / segmentLength; - - // add that fractional amount to t - - const t = (i + segmentFraction) / (il - 1); - - return t; - } - - // Returns a unit vector tangent at t - // In case any sub curve does not implement its tangent derivation, - // 2 points a small delta apart will be used to find its gradient - // which seems to give a reasonable approximation - - getTangent(t, optionalTarget) { - const delta = 0.0001; - let t1 = t - delta; - let t2 = t + delta; - - // Capping in case of danger - - if (t1 < 0) t1 = 0; - if (t2 > 1) t2 = 1; - - const pt1 = this.getPoint(t1); - const pt2 = this.getPoint(t2); - - const tangent = optionalTarget || (pt1.isVector2 ? new Vector2() : new Vector3()); - - tangent.copy(pt2).sub(pt1).normalize(); - - return tangent; - } - - getTangentAt(u, optionalTarget) { - const t = this.getUtoTmapping(u); - return this.getTangent(t, optionalTarget); - } - - computeFrenetFrames(segments, closed) { - // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf - - const normal = new Vector3(); - - const tangents = []; - const normals = []; - const binormals = []; - - const vec = new Vector3(); - const mat = new Matrix4(); - - // compute the tangent vectors for each segment on the curve - - for (let i = 0; i <= segments; i++) { - const u = i / segments; - - tangents[i] = this.getTangentAt(u, new Vector3()); - } - - // select an initial normal vector perpendicular to the first tangent vector, - // and in the direction of the minimum tangent xyz component - - normals[0] = new Vector3(); - binormals[0] = new Vector3(); - let min = Number.MAX_VALUE; - const tx = Math.abs(tangents[0].x); - const ty = Math.abs(tangents[0].y); - const tz = Math.abs(tangents[0].z); - - if (tx <= min) { - min = tx; - normal.set(1, 0, 0); - } - - if (ty <= min) { - min = ty; - normal.set(0, 1, 0); - } - - if (tz <= min) { - normal.set(0, 0, 1); - } - - vec.crossVectors(tangents[0], normal).normalize(); - - normals[0].crossVectors(tangents[0], vec); - binormals[0].crossVectors(tangents[0], normals[0]); - - // compute the slowly-varying normal and binormal vectors for each segment on the curve - - for (let i = 1; i <= segments; i++) { - normals[i] = normals[i - 1].clone(); - - binormals[i] = binormals[i - 1].clone(); - - vec.crossVectors(tangents[i - 1], tangents[i]); - - if (vec.length() > Number.EPSILON) { - vec.normalize(); - - const theta = Math.acos(clamp$1(tangents[i - 1].dot(tangents[i]), -1, 1)); // clamp for floating pt errors - - normals[i].applyMatrix4(mat.makeRotationAxis(vec, theta)); - } - - binormals[i].crossVectors(tangents[i], normals[i]); - } - - // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same - - if (closed === true) { - let theta = Math.acos(clamp$1(normals[0].dot(normals[segments]), -1, 1)); - theta /= segments; - - if (tangents[0].dot(vec.crossVectors(normals[0], normals[segments])) > 0) { - theta = -theta; - } - - for (let i = 1; i <= segments; i++) { - // twist a little... - normals[i].applyMatrix4(mat.makeRotationAxis(tangents[i], theta * i)); - binormals[i].crossVectors(tangents[i], normals[i]); - } - } - - return { - tangents: tangents, - normals: normals, - binormals: binormals, - }; - } - - clone() { - return new this.constructor().copy(this); - } - - copy(source) { - this.arcLengthDivisions = source.arcLengthDivisions; - - return this; - } - - toJSON() { - const data = { - metadata: { - version: 4.6, - type: 'Curve', - generator: 'Curve.toJSON', - }, - }; - - data.arcLengthDivisions = this.arcLengthDivisions; - data.type = this.type; - - return data; - } - - fromJSON(json) { - this.arcLengthDivisions = json.arcLengthDivisions; - - return this; - } -} - -class EllipseCurve extends Curve { - constructor(aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0) { - super(); - - this.isEllipseCurve = true; - - this.type = 'EllipseCurve'; - - this.aX = aX; - this.aY = aY; - - this.xRadius = xRadius; - this.yRadius = yRadius; - - this.aStartAngle = aStartAngle; - this.aEndAngle = aEndAngle; - - this.aClockwise = aClockwise; - - this.aRotation = aRotation; - } - - getPoint(t, optionalTarget = new Vector2()) { - const point = optionalTarget; - - const twoPi = Math.PI * 2; - let deltaAngle = this.aEndAngle - this.aStartAngle; - const samePoints = Math.abs(deltaAngle) < Number.EPSILON; - - // ensures that deltaAngle is 0 .. 2 PI - while (deltaAngle < 0) deltaAngle += twoPi; - while (deltaAngle > twoPi) deltaAngle -= twoPi; - - if (deltaAngle < Number.EPSILON) { - if (samePoints) { - deltaAngle = 0; - } else { - deltaAngle = twoPi; - } - } - - if (this.aClockwise === true && !samePoints) { - if (deltaAngle === twoPi) { - deltaAngle = -twoPi; - } else { - deltaAngle = deltaAngle - twoPi; - } - } - - const angle = this.aStartAngle + t * deltaAngle; - let x = this.aX + this.xRadius * Math.cos(angle); - let y = this.aY + this.yRadius * Math.sin(angle); - - if (this.aRotation !== 0) { - const cos = Math.cos(this.aRotation); - const sin = Math.sin(this.aRotation); - - const tx = x - this.aX; - const ty = y - this.aY; - - // Rotate the point about the center of the ellipse. - x = tx * cos - ty * sin + this.aX; - y = tx * sin + ty * cos + this.aY; - } - - return point.set(x, y); - } - - copy(source) { - super.copy(source); - - this.aX = source.aX; - this.aY = source.aY; - - this.xRadius = source.xRadius; - this.yRadius = source.yRadius; - - this.aStartAngle = source.aStartAngle; - this.aEndAngle = source.aEndAngle; - - this.aClockwise = source.aClockwise; - - this.aRotation = source.aRotation; - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.aX = this.aX; - data.aY = this.aY; - - data.xRadius = this.xRadius; - data.yRadius = this.yRadius; - - data.aStartAngle = this.aStartAngle; - data.aEndAngle = this.aEndAngle; - - data.aClockwise = this.aClockwise; - - data.aRotation = this.aRotation; - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - - this.aX = json.aX; - this.aY = json.aY; - - this.xRadius = json.xRadius; - this.yRadius = json.yRadius; - - this.aStartAngle = json.aStartAngle; - this.aEndAngle = json.aEndAngle; - - this.aClockwise = json.aClockwise; - - this.aRotation = json.aRotation; - - return this; - } -} - -class ArcCurve extends EllipseCurve { - constructor(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { - super(aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise); - - this.isArcCurve = true; - - this.type = 'ArcCurve'; - } -} - -/** - * Centripetal CatmullRom Curve - which is useful for avoiding - * cusps and self-intersections in non-uniform catmull rom curves. - * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf - * - * curve.type accepts centripetal(default), chordal and catmullrom - * curve.tension is used for catmullrom which defaults to 0.5 - */ - -/* -Based on an optimized c++ solution in - - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/ - - http://ideone.com/NoEbVM - -This CubicPoly class could be used for reusing some variables and calculations, -but for three.js curve use, it could be possible inlined and flatten into a single function call -which can be placed in CurveUtils. -*/ - -function CubicPoly() { - let c0 = 0, - c1 = 0, - c2 = 0, - c3 = 0; - - /* - * Compute coefficients for a cubic polynomial - * p(s) = c0 + c1*s + c2*s^2 + c3*s^3 - * such that - * p(0) = x0, p(1) = x1 - * and - * p'(0) = t0, p'(1) = t1. - */ - function init(x0, x1, t0, t1) { - c0 = x0; - c1 = t0; - c2 = -3 * x0 + 3 * x1 - 2 * t0 - t1; - c3 = 2 * x0 - 2 * x1 + t0 + t1; - } - - return { - initCatmullRom: function (x0, x1, x2, x3, tension) { - init(x1, x2, tension * (x2 - x0), tension * (x3 - x1)); - }, - - initNonuniformCatmullRom: function (x0, x1, x2, x3, dt0, dt1, dt2) { - // compute tangents when parameterized in [t1,t2] - let t1 = (x1 - x0) / dt0 - (x2 - x0) / (dt0 + dt1) + (x2 - x1) / dt1; - let t2 = (x2 - x1) / dt1 - (x3 - x1) / (dt1 + dt2) + (x3 - x2) / dt2; - - // rescale tangents for parametrization in [0,1] - t1 *= dt1; - t2 *= dt1; - - init(x1, x2, t1, t2); - }, - - calc: function (t) { - const t2 = t * t; - const t3 = t2 * t; - return c0 + c1 * t + c2 * t2 + c3 * t3; - }, - }; -} - -// - -const tmp = /*@__PURE__*/ new Vector3(); -const px = /*@__PURE__*/ new CubicPoly(); -const py = /*@__PURE__*/ new CubicPoly(); -const pz = /*@__PURE__*/ new CubicPoly(); - -class CatmullRomCurve3 extends Curve { - constructor(points = [], closed = false, curveType = 'centripetal', tension = 0.5) { - super(); - - this.isCatmullRomCurve3 = true; - - this.type = 'CatmullRomCurve3'; - - this.points = points; - this.closed = closed; - this.curveType = curveType; - this.tension = tension; - } - - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - - const points = this.points; - const l = points.length; - - const p = (l - (this.closed ? 0 : 1)) * t; - let intPoint = Math.floor(p); - let weight = p - intPoint; - - if (this.closed) { - intPoint += intPoint > 0 ? 0 : (Math.floor(Math.abs(intPoint) / l) + 1) * l; - } else if (weight === 0 && intPoint === l - 1) { - intPoint = l - 2; - weight = 1; - } - - let p0, p3; // 4 points (p1 & p2 defined below) - - if (this.closed || intPoint > 0) { - p0 = points[(intPoint - 1) % l]; - } else { - // extrapolate first point - tmp.subVectors(points[0], points[1]).add(points[0]); - p0 = tmp; - } - - const p1 = points[intPoint % l]; - const p2 = points[(intPoint + 1) % l]; - - if (this.closed || intPoint + 2 < l) { - p3 = points[(intPoint + 2) % l]; - } else { - // extrapolate last point - tmp.subVectors(points[l - 1], points[l - 2]).add(points[l - 1]); - p3 = tmp; - } - - if (this.curveType === 'centripetal' || this.curveType === 'chordal') { - // init Centripetal / Chordal Catmull-Rom - const pow = this.curveType === 'chordal' ? 0.5 : 0.25; - let dt0 = Math.pow(p0.distanceToSquared(p1), pow); - let dt1 = Math.pow(p1.distanceToSquared(p2), pow); - let dt2 = Math.pow(p2.distanceToSquared(p3), pow); - - // safety check for repeated points - if (dt1 < 1e-4) dt1 = 1.0; - if (dt0 < 1e-4) dt0 = dt1; - if (dt2 < 1e-4) dt2 = dt1; - - px.initNonuniformCatmullRom(p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2); - py.initNonuniformCatmullRom(p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2); - pz.initNonuniformCatmullRom(p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2); - } else if (this.curveType === 'catmullrom') { - px.initCatmullRom(p0.x, p1.x, p2.x, p3.x, this.tension); - py.initCatmullRom(p0.y, p1.y, p2.y, p3.y, this.tension); - pz.initCatmullRom(p0.z, p1.z, p2.z, p3.z, this.tension); - } - - point.set(px.calc(weight), py.calc(weight), pz.calc(weight)); - - return point; - } - - copy(source) { - super.copy(source); - - this.points = []; - - for (let i = 0, l = source.points.length; i < l; i++) { - const point = source.points[i]; - - this.points.push(point.clone()); - } - - this.closed = source.closed; - this.curveType = source.curveType; - this.tension = source.tension; - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.points = []; - - for (let i = 0, l = this.points.length; i < l; i++) { - const point = this.points[i]; - data.points.push(point.toArray()); - } - - data.closed = this.closed; - data.curveType = this.curveType; - data.tension = this.tension; - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - - this.points = []; - - for (let i = 0, l = json.points.length; i < l; i++) { - const point = json.points[i]; - this.points.push(new Vector3().fromArray(point)); - } - - this.closed = json.closed; - this.curveType = json.curveType; - this.tension = json.tension; - - return this; - } -} - -/** - * Bezier Curves formulas obtained from - * https://en.wikipedia.org/wiki/B%C3%A9zier_curve - */ - -function CatmullRom(t, p0, p1, p2, p3) { - const v0 = (p2 - p0) * 0.5; - const v1 = (p3 - p1) * 0.5; - const t2 = t * t; - const t3 = t * t2; - return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1; -} - -// - -function QuadraticBezierP0(t, p) { - const k = 1 - t; - return k * k * p; -} - -function QuadraticBezierP1(t, p) { - return 2 * (1 - t) * t * p; -} - -function QuadraticBezierP2(t, p) { - return t * t * p; -} - -function QuadraticBezier(t, p0, p1, p2) { - return QuadraticBezierP0(t, p0) + QuadraticBezierP1(t, p1) + QuadraticBezierP2(t, p2); -} - -// - -function CubicBezierP0(t, p) { - const k = 1 - t; - return k * k * k * p; -} - -function CubicBezierP1(t, p) { - const k = 1 - t; - return 3 * k * k * t * p; -} - -function CubicBezierP2(t, p) { - return 3 * (1 - t) * t * t * p; -} - -function CubicBezierP3(t, p) { - return t * t * t * p; -} - -function CubicBezier(t, p0, p1, p2, p3) { - return CubicBezierP0(t, p0) + CubicBezierP1(t, p1) + CubicBezierP2(t, p2) + CubicBezierP3(t, p3); -} - -class CubicBezierCurve extends Curve { - constructor(v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2()) { - super(); - - this.isCubicBezierCurve = true; - - this.type = 'CubicBezierCurve'; - - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - this.v3 = v3; - } - - getPoint(t, optionalTarget = new Vector2()) { - const point = optionalTarget; - - const v0 = this.v0, - v1 = this.v1, - v2 = this.v2, - v3 = this.v3; - - point.set(CubicBezier(t, v0.x, v1.x, v2.x, v3.x), CubicBezier(t, v0.y, v1.y, v2.y, v3.y)); - - return point; - } - - copy(source) { - super.copy(source); - - this.v0.copy(source.v0); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - this.v3.copy(source.v3); - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - data.v3 = this.v3.toArray(); - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - - this.v0.fromArray(json.v0); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - this.v3.fromArray(json.v3); - - return this; - } -} - -class CubicBezierCurve3 extends Curve { - constructor(v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3()) { - super(); - - this.isCubicBezierCurve3 = true; - - this.type = 'CubicBezierCurve3'; - - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - this.v3 = v3; - } - - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - - const v0 = this.v0, - v1 = this.v1, - v2 = this.v2, - v3 = this.v3; - - point.set(CubicBezier(t, v0.x, v1.x, v2.x, v3.x), CubicBezier(t, v0.y, v1.y, v2.y, v3.y), CubicBezier(t, v0.z, v1.z, v2.z, v3.z)); - - return point; - } - - copy(source) { - super.copy(source); - - this.v0.copy(source.v0); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - this.v3.copy(source.v3); - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - data.v3 = this.v3.toArray(); - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - - this.v0.fromArray(json.v0); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - this.v3.fromArray(json.v3); - - return this; - } -} - -class LineCurve extends Curve { - constructor(v1 = new Vector2(), v2 = new Vector2()) { - super(); - - this.isLineCurve = true; - - this.type = 'LineCurve'; - - this.v1 = v1; - this.v2 = v2; - } - - getPoint(t, optionalTarget = new Vector2()) { - const point = optionalTarget; - - if (t === 1) { - point.copy(this.v2); - } else { - point.copy(this.v2).sub(this.v1); - point.multiplyScalar(t).add(this.v1); - } - - return point; - } - - // Line curve is linear, so we can overwrite default getPointAt - getPointAt(u, optionalTarget) { - return this.getPoint(u, optionalTarget); - } - - getTangent(t, optionalTarget = new Vector2()) { - return optionalTarget.subVectors(this.v2, this.v1).normalize(); - } - - getTangentAt(u, optionalTarget) { - return this.getTangent(u, optionalTarget); - } - - copy(source) { - super.copy(source); - - this.v1.copy(source.v1); - this.v2.copy(source.v2); - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - - return this; - } -} - -class LineCurve3 extends Curve { - constructor(v1 = new Vector3(), v2 = new Vector3()) { - super(); - - this.isLineCurve3 = true; - - this.type = 'LineCurve3'; - - this.v1 = v1; - this.v2 = v2; - } - - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - - if (t === 1) { - point.copy(this.v2); - } else { - point.copy(this.v2).sub(this.v1); - point.multiplyScalar(t).add(this.v1); - } - - return point; - } - - // Line curve is linear, so we can overwrite default getPointAt - getPointAt(u, optionalTarget) { - return this.getPoint(u, optionalTarget); - } - - getTangent(t, optionalTarget = new Vector3()) { - return optionalTarget.subVectors(this.v2, this.v1).normalize(); - } - - getTangentAt(u, optionalTarget) { - return this.getTangent(u, optionalTarget); - } - - copy(source) { - super.copy(source); - - this.v1.copy(source.v1); - this.v2.copy(source.v2); - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - - return this; - } -} - -class QuadraticBezierCurve extends Curve { - constructor(v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2()) { - super(); - - this.isQuadraticBezierCurve = true; - - this.type = 'QuadraticBezierCurve'; - - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - } - - getPoint(t, optionalTarget = new Vector2()) { - const point = optionalTarget; - - const v0 = this.v0, - v1 = this.v1, - v2 = this.v2; - - point.set(QuadraticBezier(t, v0.x, v1.x, v2.x), QuadraticBezier(t, v0.y, v1.y, v2.y)); - - return point; - } - - copy(source) { - super.copy(source); - - this.v0.copy(source.v0); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - - this.v0.fromArray(json.v0); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - - return this; - } -} - -class QuadraticBezierCurve3 extends Curve { - constructor(v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3()) { - super(); - - this.isQuadraticBezierCurve3 = true; - - this.type = 'QuadraticBezierCurve3'; - - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - } - - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - - const v0 = this.v0, - v1 = this.v1, - v2 = this.v2; - - point.set(QuadraticBezier(t, v0.x, v1.x, v2.x), QuadraticBezier(t, v0.y, v1.y, v2.y), QuadraticBezier(t, v0.z, v1.z, v2.z)); - - return point; - } - - copy(source) { - super.copy(source); - - this.v0.copy(source.v0); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - - this.v0.fromArray(json.v0); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - - return this; - } -} - -class SplineCurve extends Curve { - constructor(points = []) { - super(); - - this.isSplineCurve = true; - - this.type = 'SplineCurve'; - - this.points = points; - } - - getPoint(t, optionalTarget = new Vector2()) { - const point = optionalTarget; - - const points = this.points; - const p = (points.length - 1) * t; - - const intPoint = Math.floor(p); - const weight = p - intPoint; - - const p0 = points[intPoint === 0 ? intPoint : intPoint - 1]; - const p1 = points[intPoint]; - const p2 = points[intPoint > points.length - 2 ? points.length - 1 : intPoint + 1]; - const p3 = points[intPoint > points.length - 3 ? points.length - 1 : intPoint + 2]; - - point.set(CatmullRom(weight, p0.x, p1.x, p2.x, p3.x), CatmullRom(weight, p0.y, p1.y, p2.y, p3.y)); - - return point; - } - - copy(source) { - super.copy(source); - - this.points = []; - - for (let i = 0, l = source.points.length; i < l; i++) { - const point = source.points[i]; - - this.points.push(point.clone()); - } - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.points = []; - - for (let i = 0, l = this.points.length; i < l; i++) { - const point = this.points[i]; - data.points.push(point.toArray()); - } - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - - this.points = []; - - for (let i = 0, l = json.points.length; i < l; i++) { - const point = json.points[i]; - this.points.push(new Vector2().fromArray(point)); - } - - return this; - } -} - -var Curves = /*#__PURE__*/ Object.freeze({ - __proto__: null, - ArcCurve: ArcCurve, - CatmullRomCurve3: CatmullRomCurve3, - CubicBezierCurve: CubicBezierCurve, - CubicBezierCurve3: CubicBezierCurve3, - EllipseCurve: EllipseCurve, - LineCurve: LineCurve, - LineCurve3: LineCurve3, - QuadraticBezierCurve: QuadraticBezierCurve, - QuadraticBezierCurve3: QuadraticBezierCurve3, - SplineCurve: SplineCurve, -}); - -/************************************************************** - * Curved Path - a curve path is simply a array of connected - * curves, but retains the api of a curve - **************************************************************/ - -class CurvePath extends Curve { - constructor() { - super(); - - this.type = 'CurvePath'; - - this.curves = []; - this.autoClose = false; // Automatically closes the path - } - - add(curve) { - this.curves.push(curve); - } - - closePath() { - // Add a line curve if start and end of lines are not connected - const startPoint = this.curves[0].getPoint(0); - const endPoint = this.curves[this.curves.length - 1].getPoint(1); - - if (!startPoint.equals(endPoint)) { - const lineType = startPoint.isVector2 === true ? 'LineCurve' : 'LineCurve3'; - this.curves.push(new Curves[lineType](endPoint, startPoint)); - } - - return this; - } - - // To get accurate point with reference to - // entire path distance at time t, - // following has to be done: - - // 1. Length of each sub path have to be known - // 2. Locate and identify type of curve - // 3. Get t for the curve - // 4. Return curve.getPointAt(t') - - getPoint(t, optionalTarget) { - const d = t * this.getLength(); - const curveLengths = this.getCurveLengths(); - let i = 0; - - // To think about boundaries points. - - while (i < curveLengths.length) { - if (curveLengths[i] >= d) { - const diff = curveLengths[i] - d; - const curve = this.curves[i]; - - const segmentLength = curve.getLength(); - const u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; - - return curve.getPointAt(u, optionalTarget); - } - - i++; - } - - return null; - - // loop where sum != 0, sum > d , sum+1 1 && !points[points.length - 1].equals(points[0])) { - points.push(points[0]); - } - - return points; - } - - copy(source) { - super.copy(source); - - this.curves = []; - - for (let i = 0, l = source.curves.length; i < l; i++) { - const curve = source.curves[i]; - - this.curves.push(curve.clone()); - } - - this.autoClose = source.autoClose; - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.autoClose = this.autoClose; - data.curves = []; - - for (let i = 0, l = this.curves.length; i < l; i++) { - const curve = this.curves[i]; - data.curves.push(curve.toJSON()); - } - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - - this.autoClose = json.autoClose; - this.curves = []; - - for (let i = 0, l = json.curves.length; i < l; i++) { - const curve = json.curves[i]; - this.curves.push(new Curves[curve.type]().fromJSON(curve)); - } - - return this; - } -} - -class Path extends CurvePath { - constructor(points) { - super(); - - this.type = 'Path'; - - this.currentPoint = new Vector2(); - - if (points) { - this.setFromPoints(points); - } - } - - setFromPoints(points) { - this.moveTo(points[0].x, points[0].y); - - for (let i = 1, l = points.length; i < l; i++) { - this.lineTo(points[i].x, points[i].y); - } - - return this; - } - - moveTo(x, y) { - this.currentPoint.set(x, y); // TODO consider referencing vectors instead of copying? - - return this; - } - - lineTo(x, y) { - const curve = new LineCurve(this.currentPoint.clone(), new Vector2(x, y)); - this.curves.push(curve); - - this.currentPoint.set(x, y); - - return this; - } - - quadraticCurveTo(aCPx, aCPy, aX, aY) { - const curve = new QuadraticBezierCurve(this.currentPoint.clone(), new Vector2(aCPx, aCPy), new Vector2(aX, aY)); - - this.curves.push(curve); - - this.currentPoint.set(aX, aY); - - return this; - } - - bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) { - const curve = new CubicBezierCurve(this.currentPoint.clone(), new Vector2(aCP1x, aCP1y), new Vector2(aCP2x, aCP2y), new Vector2(aX, aY)); - - this.curves.push(curve); - - this.currentPoint.set(aX, aY); - - return this; - } - - splineThru(pts /*Array of Vector*/) { - const npts = [this.currentPoint.clone()].concat(pts); - - const curve = new SplineCurve(npts); - this.curves.push(curve); - - this.currentPoint.copy(pts[pts.length - 1]); - - return this; - } - - arc(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { - const x0 = this.currentPoint.x; - const y0 = this.currentPoint.y; - - this.absarc(aX + x0, aY + y0, aRadius, aStartAngle, aEndAngle, aClockwise); - - return this; - } - - absarc(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { - this.absellipse(aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise); - - return this; - } - - ellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) { - const x0 = this.currentPoint.x; - const y0 = this.currentPoint.y; - - this.absellipse(aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation); - - return this; - } - - absellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) { - const curve = new EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation); - - if (this.curves.length > 0) { - // if a previous curve is present, attempt to join - const firstPoint = curve.getPoint(0); - - if (!firstPoint.equals(this.currentPoint)) { - this.lineTo(firstPoint.x, firstPoint.y); - } - } - - this.curves.push(curve); - - const lastPoint = curve.getPoint(1); - this.currentPoint.copy(lastPoint); - - return this; - } - - copy(source) { - super.copy(source); - - this.currentPoint.copy(source.currentPoint); - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.currentPoint = this.currentPoint.toArray(); - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - - this.currentPoint.fromArray(json.currentPoint); - - return this; - } -} - -class LatheGeometry extends BufferGeometry { - constructor(points = [new Vector2(0, -0.5), new Vector2(0.5, 0), new Vector2(0, 0.5)], segments = 12, phiStart = 0, phiLength = Math.PI * 2) { - super(); - - this.type = 'LatheGeometry'; - - this.parameters = { - points: points, - segments: segments, - phiStart: phiStart, - phiLength: phiLength, - }; - - segments = Math.floor(segments); - - // clamp phiLength so it's in range of [ 0, 2PI ] - - phiLength = clamp$1(phiLength, 0, Math.PI * 2); - - // buffers - - const indices = []; - const vertices = []; - const uvs = []; - const initNormals = []; - const normals = []; - - // helper variables - - const inverseSegments = 1.0 / segments; - const vertex = new Vector3(); - const uv = new Vector2(); - const normal = new Vector3(); - const curNormal = new Vector3(); - const prevNormal = new Vector3(); - let dx = 0; - let dy = 0; - - // pre-compute normals for initial "meridian" - - for (let j = 0; j <= points.length - 1; j++) { - switch (j) { - case 0: // special handling for 1st vertex on path - dx = points[j + 1].x - points[j].x; - dy = points[j + 1].y - points[j].y; - - normal.x = dy * 1.0; - normal.y = -dx; - normal.z = dy * 0.0; - - prevNormal.copy(normal); - - normal.normalize(); - - initNormals.push(normal.x, normal.y, normal.z); - - break; - - case points.length - 1: // special handling for last Vertex on path - initNormals.push(prevNormal.x, prevNormal.y, prevNormal.z); - - break; - - default: // default handling for all vertices in between - dx = points[j + 1].x - points[j].x; - dy = points[j + 1].y - points[j].y; - - normal.x = dy * 1.0; - normal.y = -dx; - normal.z = dy * 0.0; - - curNormal.copy(normal); - - normal.x += prevNormal.x; - normal.y += prevNormal.y; - normal.z += prevNormal.z; - - normal.normalize(); - - initNormals.push(normal.x, normal.y, normal.z); - - prevNormal.copy(curNormal); - } - } - - // generate vertices, uvs and normals - - for (let i = 0; i <= segments; i++) { - const phi = phiStart + i * inverseSegments * phiLength; - - const sin = Math.sin(phi); - const cos = Math.cos(phi); - - for (let j = 0; j <= points.length - 1; j++) { - // vertex - - vertex.x = points[j].x * sin; - vertex.y = points[j].y; - vertex.z = points[j].x * cos; - - vertices.push(vertex.x, vertex.y, vertex.z); - - // uv - - uv.x = i / segments; - uv.y = j / (points.length - 1); - - uvs.push(uv.x, uv.y); - - // normal - - const x = initNormals[3 * j + 0] * sin; - const y = initNormals[3 * j + 1]; - const z = initNormals[3 * j + 0] * cos; - - normals.push(x, y, z); - } - } - - // indices - - for (let i = 0; i < segments; i++) { - for (let j = 0; j < points.length - 1; j++) { - const base = j + i * points.length; - - const a = base; - const b = base + points.length; - const c = base + points.length + 1; - const d = base + 1; - - // faces - - indices.push(a, b, d); - indices.push(c, d, b); - } - } - - // build geometry - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } - - static fromJSON(data) { - return new LatheGeometry(data.points, data.segments, data.phiStart, data.phiLength); - } -} - -class CapsuleGeometry extends LatheGeometry { - constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) { - const path = new Path(); - path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0); - path.absarc(0, length / 2, radius, 0, Math.PI * 0.5); - - super(path.getPoints(capSegments), radialSegments); - - this.type = 'CapsuleGeometry'; - - this.parameters = { - radius: radius, - length: length, - capSegments: capSegments, - radialSegments: radialSegments, - }; - } - - static fromJSON(data) { - return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments); - } -} - -class CircleGeometry extends BufferGeometry { - constructor(radius = 1, segments = 32, thetaStart = 0, thetaLength = Math.PI * 2) { - super(); - - this.type = 'CircleGeometry'; - - this.parameters = { - radius: radius, - segments: segments, - thetaStart: thetaStart, - thetaLength: thetaLength, - }; - - segments = Math.max(3, segments); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - const vertex = new Vector3(); - const uv = new Vector2(); - - // center point - - vertices.push(0, 0, 0); - normals.push(0, 0, 1); - uvs.push(0.5, 0.5); - - for (let s = 0, i = 3; s <= segments; s++, i += 3) { - const segment = thetaStart + (s / segments) * thetaLength; - - // vertex - - vertex.x = radius * Math.cos(segment); - vertex.y = radius * Math.sin(segment); - - vertices.push(vertex.x, vertex.y, vertex.z); - - // normal - - normals.push(0, 0, 1); - - // uvs - - uv.x = (vertices[i] / radius + 1) / 2; - uv.y = (vertices[i + 1] / radius + 1) / 2; - - uvs.push(uv.x, uv.y); - } - - // indices - - for (let i = 1; i <= segments; i++) { - indices.push(i, i + 1, 0); - } - - // build geometry - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } - - static fromJSON(data) { - return new CircleGeometry(data.radius, data.segments, data.thetaStart, data.thetaLength); - } -} - -class CylinderGeometry extends BufferGeometry { - constructor(radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2) { - super(); - - this.type = 'CylinderGeometry'; - - this.parameters = { - radiusTop: radiusTop, - radiusBottom: radiusBottom, - height: height, - radialSegments: radialSegments, - heightSegments: heightSegments, - openEnded: openEnded, - thetaStart: thetaStart, - thetaLength: thetaLength, - }; - - const scope = this; - - radialSegments = Math.floor(radialSegments); - heightSegments = Math.floor(heightSegments); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - let index = 0; - const indexArray = []; - const halfHeight = height / 2; - let groupStart = 0; - - // generate geometry - - generateTorso(); - - if (openEnded === false) { - if (radiusTop > 0) generateCap(true); - if (radiusBottom > 0) generateCap(false); - } - - // build geometry - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - - function generateTorso() { - const normal = new Vector3(); - const vertex = new Vector3(); - - let groupCount = 0; - - // this will be used to calculate the normal - const slope = (radiusBottom - radiusTop) / height; - - // generate vertices, normals and uvs - - for (let y = 0; y <= heightSegments; y++) { - const indexRow = []; - - const v = y / heightSegments; - - // calculate the radius of the current row - - const radius = v * (radiusBottom - radiusTop) + radiusTop; - - for (let x = 0; x <= radialSegments; x++) { - const u = x / radialSegments; - - const theta = u * thetaLength + thetaStart; - - const sinTheta = Math.sin(theta); - const cosTheta = Math.cos(theta); - - // vertex - - vertex.x = radius * sinTheta; - vertex.y = -v * height + halfHeight; - vertex.z = radius * cosTheta; - vertices.push(vertex.x, vertex.y, vertex.z); - - // normal - - normal.set(sinTheta, slope, cosTheta).normalize(); - normals.push(normal.x, normal.y, normal.z); - - // uv - - uvs.push(u, 1 - v); - - // save index of vertex in respective row - - indexRow.push(index++); - } - - // now save vertices of the row in our index array - - indexArray.push(indexRow); - } - - // generate indices - - for (let x = 0; x < radialSegments; x++) { - for (let y = 0; y < heightSegments; y++) { - // we use the index array to access the correct indices - - const a = indexArray[y][x]; - const b = indexArray[y + 1][x]; - const c = indexArray[y + 1][x + 1]; - const d = indexArray[y][x + 1]; - - // faces - - indices.push(a, b, d); - indices.push(b, c, d); - - // update group counter - - groupCount += 6; - } - } - - // add a group to the geometry. this will ensure multi material support - - scope.addGroup(groupStart, groupCount, 0); - - // calculate new start value for groups - - groupStart += groupCount; - } - - function generateCap(top) { - // save the index of the first center vertex - const centerIndexStart = index; - - const uv = new Vector2(); - const vertex = new Vector3(); - - let groupCount = 0; - - const radius = top === true ? radiusTop : radiusBottom; - const sign = top === true ? 1 : -1; - - // first we generate the center vertex data of the cap. - // because the geometry needs one set of uvs per face, - // we must generate a center vertex per face/segment - - for (let x = 1; x <= radialSegments; x++) { - // vertex - - vertices.push(0, halfHeight * sign, 0); - - // normal - - normals.push(0, sign, 0); - - // uv - - uvs.push(0.5, 0.5); - - // increase index - - index++; - } - - // save the index of the last center vertex - const centerIndexEnd = index; - - // now we generate the surrounding vertices, normals and uvs - - for (let x = 0; x <= radialSegments; x++) { - const u = x / radialSegments; - const theta = u * thetaLength + thetaStart; - - const cosTheta = Math.cos(theta); - const sinTheta = Math.sin(theta); - - // vertex - - vertex.x = radius * sinTheta; - vertex.y = halfHeight * sign; - vertex.z = radius * cosTheta; - vertices.push(vertex.x, vertex.y, vertex.z); - - // normal - - normals.push(0, sign, 0); - - // uv - - uv.x = cosTheta * 0.5 + 0.5; - uv.y = sinTheta * 0.5 * sign + 0.5; - uvs.push(uv.x, uv.y); - - // increase index - - index++; - } - - // generate indices - - for (let x = 0; x < radialSegments; x++) { - const c = centerIndexStart + x; - const i = centerIndexEnd + x; - - if (top === true) { - // face top - - indices.push(i, i + 1, c); - } else { - // face bottom - - indices.push(i + 1, i, c); - } - - groupCount += 3; - } - - // add a group to the geometry. this will ensure multi material support - - scope.addGroup(groupStart, groupCount, top === true ? 1 : 2); - - // calculate new start value for groups - - groupStart += groupCount; - } - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } - - static fromJSON(data) { - return new CylinderGeometry(data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength); - } -} - -class ConeGeometry extends CylinderGeometry { - constructor(radius = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2) { - super(0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength); - - this.type = 'ConeGeometry'; - - this.parameters = { - radius: radius, - height: height, - radialSegments: radialSegments, - heightSegments: heightSegments, - openEnded: openEnded, - thetaStart: thetaStart, - thetaLength: thetaLength, - }; - } - - static fromJSON(data) { - return new ConeGeometry(data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength); - } -} - -class PolyhedronGeometry extends BufferGeometry { - constructor(vertices = [], indices = [], radius = 1, detail = 0) { - super(); - - this.type = 'PolyhedronGeometry'; - - this.parameters = { - vertices: vertices, - indices: indices, - radius: radius, - detail: detail, - }; - - // default buffer data - - const vertexBuffer = []; - const uvBuffer = []; - - // the subdivision creates the vertex buffer data - - subdivide(detail); - - // all vertices should lie on a conceptual sphere with a given radius - - applyRadius(radius); - - // finally, create the uv data - - generateUVs(); - - // build non-indexed geometry - - this.setAttribute('position', new Float32BufferAttribute(vertexBuffer, 3)); - this.setAttribute('normal', new Float32BufferAttribute(vertexBuffer.slice(), 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvBuffer, 2)); - - if (detail === 0) { - this.computeVertexNormals(); // flat normals - } else { - this.normalizeNormals(); // smooth normals - } - - // helper functions - - function subdivide(detail) { - const a = new Vector3(); - const b = new Vector3(); - const c = new Vector3(); - - // iterate over all faces and apply a subdivision with the given detail value - - for (let i = 0; i < indices.length; i += 3) { - // get the vertices of the face - - getVertexByIndex(indices[i + 0], a); - getVertexByIndex(indices[i + 1], b); - getVertexByIndex(indices[i + 2], c); - - // perform subdivision - - subdivideFace(a, b, c, detail); - } - } - - function subdivideFace(a, b, c, detail) { - const cols = detail + 1; - - // we use this multidimensional array as a data structure for creating the subdivision - - const v = []; - - // construct all of the vertices for this subdivision - - for (let i = 0; i <= cols; i++) { - v[i] = []; - - const aj = a.clone().lerp(c, i / cols); - const bj = b.clone().lerp(c, i / cols); - - const rows = cols - i; - - for (let j = 0; j <= rows; j++) { - if (j === 0 && i === cols) { - v[i][j] = aj; - } else { - v[i][j] = aj.clone().lerp(bj, j / rows); - } - } - } - - // construct all of the faces - - for (let i = 0; i < cols; i++) { - for (let j = 0; j < 2 * (cols - i) - 1; j++) { - const k = Math.floor(j / 2); - - if (j % 2 === 0) { - pushVertex(v[i][k + 1]); - pushVertex(v[i + 1][k]); - pushVertex(v[i][k]); - } else { - pushVertex(v[i][k + 1]); - pushVertex(v[i + 1][k + 1]); - pushVertex(v[i + 1][k]); - } - } - } - } - - function applyRadius(radius) { - const vertex = new Vector3(); - - // iterate over the entire buffer and apply the radius to each vertex - - for (let i = 0; i < vertexBuffer.length; i += 3) { - vertex.x = vertexBuffer[i + 0]; - vertex.y = vertexBuffer[i + 1]; - vertex.z = vertexBuffer[i + 2]; - - vertex.normalize().multiplyScalar(radius); - - vertexBuffer[i + 0] = vertex.x; - vertexBuffer[i + 1] = vertex.y; - vertexBuffer[i + 2] = vertex.z; - } - } - - function generateUVs() { - const vertex = new Vector3(); - - for (let i = 0; i < vertexBuffer.length; i += 3) { - vertex.x = vertexBuffer[i + 0]; - vertex.y = vertexBuffer[i + 1]; - vertex.z = vertexBuffer[i + 2]; - - const u = azimuth(vertex) / 2 / Math.PI + 0.5; - const v = inclination(vertex) / Math.PI + 0.5; - uvBuffer.push(u, 1 - v); - } - - correctUVs(); - - correctSeam(); - } - - function correctSeam() { - // handle case when face straddles the seam, see #3269 - - for (let i = 0; i < uvBuffer.length; i += 6) { - // uv data of a single face - - const x0 = uvBuffer[i + 0]; - const x1 = uvBuffer[i + 2]; - const x2 = uvBuffer[i + 4]; - - const max = Math.max(x0, x1, x2); - const min = Math.min(x0, x1, x2); - - // 0.9 is somewhat arbitrary - - if (max > 0.9 && min < 0.1) { - if (x0 < 0.2) uvBuffer[i + 0] += 1; - if (x1 < 0.2) uvBuffer[i + 2] += 1; - if (x2 < 0.2) uvBuffer[i + 4] += 1; - } - } - } - - function pushVertex(vertex) { - vertexBuffer.push(vertex.x, vertex.y, vertex.z); - } - - function getVertexByIndex(index, vertex) { - const stride = index * 3; - - vertex.x = vertices[stride + 0]; - vertex.y = vertices[stride + 1]; - vertex.z = vertices[stride + 2]; - } - - function correctUVs() { - const a = new Vector3(); - const b = new Vector3(); - const c = new Vector3(); - - const centroid = new Vector3(); - - const uvA = new Vector2(); - const uvB = new Vector2(); - const uvC = new Vector2(); - - for (let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6) { - a.set(vertexBuffer[i + 0], vertexBuffer[i + 1], vertexBuffer[i + 2]); - b.set(vertexBuffer[i + 3], vertexBuffer[i + 4], vertexBuffer[i + 5]); - c.set(vertexBuffer[i + 6], vertexBuffer[i + 7], vertexBuffer[i + 8]); - - uvA.set(uvBuffer[j + 0], uvBuffer[j + 1]); - uvB.set(uvBuffer[j + 2], uvBuffer[j + 3]); - uvC.set(uvBuffer[j + 4], uvBuffer[j + 5]); - - centroid.copy(a).add(b).add(c).divideScalar(3); - - const azi = azimuth(centroid); - - correctUV(uvA, j + 0, a, azi); - correctUV(uvB, j + 2, b, azi); - correctUV(uvC, j + 4, c, azi); - } - } - - function correctUV(uv, stride, vector, azimuth) { - if (azimuth < 0 && uv.x === 1) { - uvBuffer[stride] = uv.x - 1; - } - - if (vector.x === 0 && vector.z === 0) { - uvBuffer[stride] = azimuth / 2 / Math.PI + 0.5; - } - } - - // Angle around the Y axis, counter-clockwise when looking from above. - - function azimuth(vector) { - return Math.atan2(vector.z, -vector.x); - } - - // Angle above the XZ plane. - - function inclination(vector) { - return Math.atan2(-vector.y, Math.sqrt(vector.x * vector.x + vector.z * vector.z)); - } - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } - - static fromJSON(data) { - return new PolyhedronGeometry(data.vertices, data.indices, data.radius, data.details); - } -} - -class DodecahedronGeometry extends PolyhedronGeometry { - constructor(radius = 1, detail = 0) { - const t = (1 + Math.sqrt(5)) / 2; - const r = 1 / t; - - const vertices = [ - // (±1, ±1, ±1) - -1, - -1, - -1, - -1, - -1, - 1, - -1, - 1, - -1, - -1, - 1, - 1, - 1, - -1, - -1, - 1, - -1, - 1, - 1, - 1, - -1, - 1, - 1, - 1, - - // (0, ±1/φ, ±φ) - 0, - -r, - -t, - 0, - -r, - t, - 0, - r, - -t, - 0, - r, - t, - - // (±1/φ, ±φ, 0) - -r, - -t, - 0, - -r, - t, - 0, - r, - -t, - 0, - r, - t, - 0, - - // (±φ, 0, ±1/φ) - -t, - 0, - -r, - t, - 0, - -r, - -t, - 0, - r, - t, - 0, - r, - ]; - - const indices = [3, 11, 7, 3, 7, 15, 3, 15, 13, 7, 19, 17, 7, 17, 6, 7, 6, 15, 17, 4, 8, 17, 8, 10, 17, 10, 6, 8, 0, 16, 8, 16, 2, 8, 2, 10, 0, 12, 1, 0, 1, 18, 0, 18, 16, 6, 10, 2, 6, 2, 13, 6, 13, 15, 2, 16, 18, 2, 18, 3, 2, 3, 13, 18, 1, 9, 18, 9, 11, 18, 11, 3, 4, 14, 12, 4, 12, 0, 4, 0, 8, 11, 9, 5, 11, 5, 19, 11, 19, 7, 19, 5, 14, 19, 14, 4, 19, 4, 17, 1, 12, 14, 1, 14, 5, 1, 5, 9]; - - super(vertices, indices, radius, detail); - - this.type = 'DodecahedronGeometry'; - - this.parameters = { - radius: radius, - detail: detail, - }; - } - - static fromJSON(data) { - return new DodecahedronGeometry(data.radius, data.detail); - } -} - -const _v0 = /*@__PURE__*/ new Vector3(); -const _v1$1 = /*@__PURE__*/ new Vector3(); -const _normal$1 = /*@__PURE__*/ new Vector3(); -const _triangle = /*@__PURE__*/ new Triangle(); - -class EdgesGeometry extends BufferGeometry { - constructor(geometry = null, thresholdAngle = 1) { - super(); - - this.type = 'EdgesGeometry'; - - this.parameters = { - geometry: geometry, - thresholdAngle: thresholdAngle, - }; - - if (geometry !== null) { - const precisionPoints = 4; - const precision = Math.pow(10, precisionPoints); - const thresholdDot = Math.cos(DEG2RAD * thresholdAngle); - - const indexAttr = geometry.getIndex(); - const positionAttr = geometry.getAttribute('position'); - const indexCount = indexAttr ? indexAttr.count : positionAttr.count; - - const indexArr = [0, 0, 0]; - const vertKeys = ['a', 'b', 'c']; - const hashes = new Array(3); - - const edgeData = {}; - const vertices = []; - for (let i = 0; i < indexCount; i += 3) { - if (indexAttr) { - indexArr[0] = indexAttr.getX(i); - indexArr[1] = indexAttr.getX(i + 1); - indexArr[2] = indexAttr.getX(i + 2); - } else { - indexArr[0] = i; - indexArr[1] = i + 1; - indexArr[2] = i + 2; - } - - const { a, b, c } = _triangle; - a.fromBufferAttribute(positionAttr, indexArr[0]); - b.fromBufferAttribute(positionAttr, indexArr[1]); - c.fromBufferAttribute(positionAttr, indexArr[2]); - _triangle.getNormal(_normal$1); - - // create hashes for the edge from the vertices - hashes[0] = `${Math.round(a.x * precision)},${Math.round(a.y * precision)},${Math.round(a.z * precision)}`; - hashes[1] = `${Math.round(b.x * precision)},${Math.round(b.y * precision)},${Math.round(b.z * precision)}`; - hashes[2] = `${Math.round(c.x * precision)},${Math.round(c.y * precision)},${Math.round(c.z * precision)}`; - - // skip degenerate triangles - if (hashes[0] === hashes[1] || hashes[1] === hashes[2] || hashes[2] === hashes[0]) { - continue; - } - - // iterate over every edge - for (let j = 0; j < 3; j++) { - // get the first and next vertex making up the edge - const jNext = (j + 1) % 3; - const vecHash0 = hashes[j]; - const vecHash1 = hashes[jNext]; - const v0 = _triangle[vertKeys[j]]; - const v1 = _triangle[vertKeys[jNext]]; - - const hash = `${vecHash0}_${vecHash1}`; - const reverseHash = `${vecHash1}_${vecHash0}`; - - if (reverseHash in edgeData && edgeData[reverseHash]) { - // if we found a sibling edge add it into the vertex array if - // it meets the angle threshold and delete the edge from the map. - if (_normal$1.dot(edgeData[reverseHash].normal) <= thresholdDot) { - vertices.push(v0.x, v0.y, v0.z); - vertices.push(v1.x, v1.y, v1.z); - } - - edgeData[reverseHash] = null; - } else if (!(hash in edgeData)) { - // if we've already got an edge here then skip adding a new one - edgeData[hash] = { - index0: indexArr[j], - index1: indexArr[jNext], - normal: _normal$1.clone(), - }; - } - } - } - - // iterate over all remaining, unmatched edges and add them to the vertex array - for (const key in edgeData) { - if (edgeData[key]) { - const { index0, index1 } = edgeData[key]; - _v0.fromBufferAttribute(positionAttr, index0); - _v1$1.fromBufferAttribute(positionAttr, index1); - - vertices.push(_v0.x, _v0.y, _v0.z); - vertices.push(_v1$1.x, _v1$1.y, _v1$1.z); - } - } - - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - } - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } -} - -class Shape extends Path { - constructor(points) { - super(points); - - this.uuid = generateUUID(); - - this.type = 'Shape'; - - this.holes = []; - } - - getPointsHoles(divisions) { - const holesPts = []; - - for (let i = 0, l = this.holes.length; i < l; i++) { - holesPts[i] = this.holes[i].getPoints(divisions); - } - - return holesPts; - } - - // get points of shape and holes (keypoints based on segments parameter) - - extractPoints(divisions) { - return { - shape: this.getPoints(divisions), - holes: this.getPointsHoles(divisions), - }; - } - - copy(source) { - super.copy(source); - - this.holes = []; - - for (let i = 0, l = source.holes.length; i < l; i++) { - const hole = source.holes[i]; - - this.holes.push(hole.clone()); - } - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.uuid = this.uuid; - data.holes = []; - - for (let i = 0, l = this.holes.length; i < l; i++) { - const hole = this.holes[i]; - data.holes.push(hole.toJSON()); - } - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - - this.uuid = json.uuid; - this.holes = []; - - for (let i = 0, l = json.holes.length; i < l; i++) { - const hole = json.holes[i]; - this.holes.push(new Path().fromJSON(hole)); - } - - return this; - } -} - -/** - * Port from https://github.com/mapbox/earcut (v2.2.4) - */ - -const Earcut = { - triangulate: function (data, holeIndices, dim = 2) { - const hasHoles = holeIndices && holeIndices.length; - const outerLen = hasHoles ? holeIndices[0] * dim : data.length; - let outerNode = linkedList(data, 0, outerLen, dim, true); - const triangles = []; - - if (!outerNode || outerNode.next === outerNode.prev) return triangles; - - let minX, minY, maxX, maxY, x, y, invSize; - - if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim); - - // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox - if (data.length > 80 * dim) { - minX = maxX = data[0]; - minY = maxY = data[1]; - - for (let i = dim; i < outerLen; i += dim) { - x = data[i]; - y = data[i + 1]; - if (x < minX) minX = x; - if (y < minY) minY = y; - if (x > maxX) maxX = x; - if (y > maxY) maxY = y; - } - - // minX, minY and invSize are later used to transform coords into integers for z-order calculation - invSize = Math.max(maxX - minX, maxY - minY); - invSize = invSize !== 0 ? 32767 / invSize : 0; - } - - earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0); - - return triangles; - }, -}; - -// create a circular doubly linked list from polygon points in the specified winding order -function linkedList(data, start, end, dim, clockwise) { - let i, last; - - if (clockwise === signedArea(data, start, end, dim) > 0) { - for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last); - } else { - for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last); - } - - if (last && equals$1(last, last.next)) { - removeNode(last); - last = last.next; - } - - return last; -} - -// eliminate colinear or duplicate points -function filterPoints(start, end) { - if (!start) return start; - if (!end) end = start; - - let p = start, - again; - do { - again = false; - - if (!p.steiner && (equals$1(p, p.next) || area(p.prev, p, p.next) === 0)) { - removeNode(p); - p = end = p.prev; - if (p === p.next) break; - again = true; - } else { - p = p.next; - } - } while (again || p !== end); - - return end; -} - -// main ear slicing loop which triangulates a polygon (given as a linked list) -function earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) { - if (!ear) return; - - // interlink polygon nodes in z-order - if (!pass && invSize) indexCurve(ear, minX, minY, invSize); - - let stop = ear, - prev, - next; - - // iterate through ears, slicing them one by one - while (ear.prev !== ear.next) { - prev = ear.prev; - next = ear.next; - - if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) { - // cut off the triangle - triangles.push((prev.i / dim) | 0); - triangles.push((ear.i / dim) | 0); - triangles.push((next.i / dim) | 0); - - removeNode(ear); - - // skipping the next vertex leads to less sliver triangles - ear = next.next; - stop = next.next; - - continue; - } - - ear = next; - - // if we looped through the whole remaining polygon and can't find any more ears - if (ear === stop) { - // try filtering points and slicing again - if (!pass) { - earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1); - - // if this didn't work, try curing all small self-intersections locally - } else if (pass === 1) { - ear = cureLocalIntersections(filterPoints(ear), triangles, dim); - earcutLinked(ear, triangles, dim, minX, minY, invSize, 2); - - // as a last resort, try splitting the remaining polygon into two - } else if (pass === 2) { - splitEarcut(ear, triangles, dim, minX, minY, invSize); - } - - break; - } - } -} - -// check whether a polygon node forms a valid ear with adjacent nodes -function isEar(ear) { - const a = ear.prev, - b = ear, - c = ear.next; - - if (area(a, b, c) >= 0) return false; // reflex, can't be an ear - - // now make sure we don't have other points inside the potential ear - const ax = a.x, - bx = b.x, - cx = c.x, - ay = a.y, - by = b.y, - cy = c.y; - - // triangle bbox; min & max are calculated like this for speed - const x0 = ax < bx ? (ax < cx ? ax : cx) : bx < cx ? bx : cx, - y0 = ay < by ? (ay < cy ? ay : cy) : by < cy ? by : cy, - x1 = ax > bx ? (ax > cx ? ax : cx) : bx > cx ? bx : cx, - y1 = ay > by ? (ay > cy ? ay : cy) : by > cy ? by : cy; - - let p = c.next; - while (p !== a) { - if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; - p = p.next; - } - - return true; -} - -function isEarHashed(ear, minX, minY, invSize) { - const a = ear.prev, - b = ear, - c = ear.next; - - if (area(a, b, c) >= 0) return false; // reflex, can't be an ear - - const ax = a.x, - bx = b.x, - cx = c.x, - ay = a.y, - by = b.y, - cy = c.y; - - // triangle bbox; min & max are calculated like this for speed - const x0 = ax < bx ? (ax < cx ? ax : cx) : bx < cx ? bx : cx, - y0 = ay < by ? (ay < cy ? ay : cy) : by < cy ? by : cy, - x1 = ax > bx ? (ax > cx ? ax : cx) : bx > cx ? bx : cx, - y1 = ay > by ? (ay > cy ? ay : cy) : by > cy ? by : cy; - - // z-order range for the current triangle bbox; - const minZ = zOrder(x0, y0, minX, minY, invSize), - maxZ = zOrder(x1, y1, minX, minY, invSize); - - let p = ear.prevZ, - n = ear.nextZ; - - // look for points inside the triangle in both directions - while (p && p.z >= minZ && n && n.z <= maxZ) { - if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; - p = p.prevZ; - - if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false; - n = n.nextZ; - } - - // look for remaining points in decreasing z-order - while (p && p.z >= minZ) { - if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; - p = p.prevZ; - } - - // look for remaining points in increasing z-order - while (n && n.z <= maxZ) { - if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false; - n = n.nextZ; - } - - return true; -} - -// go through all polygon nodes and cure small local self-intersections -function cureLocalIntersections(start, triangles, dim) { - let p = start; - do { - const a = p.prev, - b = p.next.next; - - if (!equals$1(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) { - triangles.push((a.i / dim) | 0); - triangles.push((p.i / dim) | 0); - triangles.push((b.i / dim) | 0); - - // remove two nodes involved - removeNode(p); - removeNode(p.next); - - p = start = b; - } - - p = p.next; - } while (p !== start); - - return filterPoints(p); -} - -// try splitting polygon into two and triangulate them independently -function splitEarcut(start, triangles, dim, minX, minY, invSize) { - // look for a valid diagonal that divides the polygon into two - let a = start; - do { - let b = a.next.next; - while (b !== a.prev) { - if (a.i !== b.i && isValidDiagonal(a, b)) { - // split the polygon in two by the diagonal - let c = splitPolygon(a, b); - - // filter colinear points around the cuts - a = filterPoints(a, a.next); - c = filterPoints(c, c.next); - - // run earcut on each half - earcutLinked(a, triangles, dim, minX, minY, invSize, 0); - earcutLinked(c, triangles, dim, minX, minY, invSize, 0); - return; - } - - b = b.next; - } - - a = a.next; - } while (a !== start); -} - -// link every hole into the outer loop, producing a single-ring polygon without holes -function eliminateHoles(data, holeIndices, outerNode, dim) { - const queue = []; - let i, len, start, end, list; - - for (i = 0, len = holeIndices.length; i < len; i++) { - start = holeIndices[i] * dim; - end = i < len - 1 ? holeIndices[i + 1] * dim : data.length; - list = linkedList(data, start, end, dim, false); - if (list === list.next) list.steiner = true; - queue.push(getLeftmost(list)); - } - - queue.sort(compareX); - - // process holes from left to right - for (i = 0; i < queue.length; i++) { - outerNode = eliminateHole(queue[i], outerNode); - } - - return outerNode; -} - -function compareX(a, b) { - return a.x - b.x; -} - -// find a bridge between vertices that connects hole with an outer ring and link it -function eliminateHole(hole, outerNode) { - const bridge = findHoleBridge(hole, outerNode); - if (!bridge) { - return outerNode; - } - - const bridgeReverse = splitPolygon(bridge, hole); - - // filter collinear points around the cuts - filterPoints(bridgeReverse, bridgeReverse.next); - return filterPoints(bridge, bridge.next); -} - -// David Eberly's algorithm for finding a bridge between hole and outer polygon -function findHoleBridge(hole, outerNode) { - let p = outerNode, - qx = -Infinity, - m; - - const hx = hole.x, - hy = hole.y; - - // find a segment intersected by a ray from the hole's leftmost point to the left; - // segment's endpoint with lesser x will be potential connection point - do { - if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) { - const x = p.x + ((hy - p.y) * (p.next.x - p.x)) / (p.next.y - p.y); - if (x <= hx && x > qx) { - qx = x; - m = p.x < p.next.x ? p : p.next; - if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint - } - } - - p = p.next; - } while (p !== outerNode); - - if (!m) return null; - - // look for points inside the triangle of hole point, segment intersection and endpoint; - // if there are no points found, we have a valid connection; - // otherwise choose the point of the minimum angle with the ray as connection point - - const stop = m, - mx = m.x, - my = m.y; - let tanMin = Infinity, - tan; - - p = m; - - do { - if (hx >= p.x && p.x >= mx && hx !== p.x && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) { - tan = Math.abs(hy - p.y) / (hx - p.x); // tangential - - if (locallyInside(p, hole) && (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) { - m = p; - tanMin = tan; - } - } - - p = p.next; - } while (p !== stop); - - return m; -} - -// whether sector in vertex m contains sector in vertex p in the same coordinates -function sectorContainsSector(m, p) { - return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0; -} - -// interlink polygon nodes in z-order -function indexCurve(start, minX, minY, invSize) { - let p = start; - do { - if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize); - p.prevZ = p.prev; - p.nextZ = p.next; - p = p.next; - } while (p !== start); - - p.prevZ.nextZ = null; - p.prevZ = null; - - sortLinked(p); -} - -// Simon Tatham's linked list merge sort algorithm -// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html -function sortLinked(list) { - let i, - p, - q, - e, - tail, - numMerges, - pSize, - qSize, - inSize = 1; - - do { - p = list; - list = null; - tail = null; - numMerges = 0; - - while (p) { - numMerges++; - q = p; - pSize = 0; - for (i = 0; i < inSize; i++) { - pSize++; - q = q.nextZ; - if (!q) break; - } - - qSize = inSize; - - while (pSize > 0 || (qSize > 0 && q)) { - if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) { - e = p; - p = p.nextZ; - pSize--; - } else { - e = q; - q = q.nextZ; - qSize--; - } - - if (tail) tail.nextZ = e; - else list = e; - - e.prevZ = tail; - tail = e; - } - - p = q; - } - - tail.nextZ = null; - inSize *= 2; - } while (numMerges > 1); - - return list; -} - -// z-order of a point given coords and inverse of the longer side of data bbox -function zOrder(x, y, minX, minY, invSize) { - // coords are transformed into non-negative 15-bit integer range - x = ((x - minX) * invSize) | 0; - y = ((y - minY) * invSize) | 0; - - x = (x | (x << 8)) & 0x00ff00ff; - x = (x | (x << 4)) & 0x0f0f0f0f; - x = (x | (x << 2)) & 0x33333333; - x = (x | (x << 1)) & 0x55555555; - - y = (y | (y << 8)) & 0x00ff00ff; - y = (y | (y << 4)) & 0x0f0f0f0f; - y = (y | (y << 2)) & 0x33333333; - y = (y | (y << 1)) & 0x55555555; - - return x | (y << 1); -} - -// find the leftmost node of a polygon ring -function getLeftmost(start) { - let p = start, - leftmost = start; - do { - if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p; - p = p.next; - } while (p !== start); - - return leftmost; -} - -// check if a point lies within a convex triangle -function pointInTriangle(ax, ay, bx, by, cx, cy, px, py) { - return (cx - px) * (ay - py) >= (ax - px) * (cy - py) && (ax - px) * (by - py) >= (bx - px) * (ay - py) && (bx - px) * (cy - py) >= (cx - px) * (by - py); -} - -// check if a diagonal between two polygon nodes is valid (lies in polygon interior) -function isValidDiagonal(a, b) { - return ( - a.next.i !== b.i && - a.prev.i !== b.i && - !intersectsPolygon(a, b) && // dones't intersect other edges - ((locallyInside(a, b) && - locallyInside(b, a) && - middleInside(a, b) && // locally visible - (area(a.prev, a, b.prev) || area(a, b.prev, b))) || // does not create opposite-facing sectors - (equals$1(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0)) - ); // special zero-length case -} - -// signed area of a triangle -function area(p, q, r) { - return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); -} - -// check if two points are equal -function equals$1(p1, p2) { - return p1.x === p2.x && p1.y === p2.y; -} - -// check if two segments intersect -function intersects(p1, q1, p2, q2) { - const o1 = sign$1(area(p1, q1, p2)); - const o2 = sign$1(area(p1, q1, q2)); - const o3 = sign$1(area(p2, q2, p1)); - const o4 = sign$1(area(p2, q2, q1)); - - if (o1 !== o2 && o3 !== o4) return true; // general case - - if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1 - if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1 - if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2 - if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2 - - return false; -} - -// for collinear points p, q, r, check if point q lies on segment pr -function onSegment(p, q, r) { - return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y); -} - -function sign$1(num) { - return num > 0 ? 1 : num < 0 ? -1 : 0; -} - -// check if a polygon diagonal intersects any polygon segments -function intersectsPolygon(a, b) { - let p = a; - do { - if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && intersects(p, p.next, a, b)) return true; - p = p.next; - } while (p !== a); - - return false; -} - -// check if a polygon diagonal is locally inside the polygon -function locallyInside(a, b) { - return area(a.prev, a, a.next) < 0 ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0; -} - -// check if the middle point of a polygon diagonal is inside the polygon -function middleInside(a, b) { - let p = a, - inside = false; - const px = (a.x + b.x) / 2, - py = (a.y + b.y) / 2; - do { - if (p.y > py !== p.next.y > py && p.next.y !== p.y && px < ((p.next.x - p.x) * (py - p.y)) / (p.next.y - p.y) + p.x) inside = !inside; - p = p.next; - } while (p !== a); - - return inside; -} - -// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two; -// if one belongs to the outer ring and another to a hole, it merges it into a single ring -function splitPolygon(a, b) { - const a2 = new Node$1(a.i, a.x, a.y), - b2 = new Node$1(b.i, b.x, b.y), - an = a.next, - bp = b.prev; - - a.next = b; - b.prev = a; - - a2.next = an; - an.prev = a2; - - b2.next = a2; - a2.prev = b2; - - bp.next = b2; - b2.prev = bp; - - return b2; -} - -// create a node and optionally link it with previous one (in a circular doubly linked list) -function insertNode(i, x, y, last) { - const p = new Node$1(i, x, y); - - if (!last) { - p.prev = p; - p.next = p; - } else { - p.next = last.next; - p.prev = last; - last.next.prev = p; - last.next = p; - } - - return p; -} - -function removeNode(p) { - p.next.prev = p.prev; - p.prev.next = p.next; - - if (p.prevZ) p.prevZ.nextZ = p.nextZ; - if (p.nextZ) p.nextZ.prevZ = p.prevZ; -} - -function Node$1(i, x, y) { - // vertex index in coordinates array - this.i = i; - - // vertex coordinates - this.x = x; - this.y = y; - - // previous and next vertex nodes in a polygon ring - this.prev = null; - this.next = null; - - // z-order curve value - this.z = 0; - - // previous and next nodes in z-order - this.prevZ = null; - this.nextZ = null; - - // indicates whether this is a steiner point - this.steiner = false; -} - -function signedArea(data, start, end, dim) { - let sum = 0; - for (let i = start, j = end - dim; i < end; i += dim) { - sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]); - j = i; - } - - return sum; -} - -class ShapeUtils { - // calculate area of the contour polygon - - static area(contour) { - const n = contour.length; - let a = 0.0; - - for (let p = n - 1, q = 0; q < n; p = q++) { - a += contour[p].x * contour[q].y - contour[q].x * contour[p].y; - } - - return a * 0.5; - } - - static isClockWise(pts) { - return ShapeUtils.area(pts) < 0; - } - - static triangulateShape(contour, holes) { - const vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ] - const holeIndices = []; // array of hole indices - const faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ] - - removeDupEndPts(contour); - addContour(vertices, contour); - - // - - let holeIndex = contour.length; - - holes.forEach(removeDupEndPts); - - for (let i = 0; i < holes.length; i++) { - holeIndices.push(holeIndex); - holeIndex += holes[i].length; - addContour(vertices, holes[i]); - } - - // - - const triangles = Earcut.triangulate(vertices, holeIndices); - - // - - for (let i = 0; i < triangles.length; i += 3) { - faces.push(triangles.slice(i, i + 3)); - } - - return faces; - } -} - -function removeDupEndPts(points) { - const l = points.length; - - if (l > 2 && points[l - 1].equals(points[0])) { - points.pop(); - } -} - -function addContour(vertices, contour) { - for (let i = 0; i < contour.length; i++) { - vertices.push(contour[i].x); - vertices.push(contour[i].y); - } -} - -/** - * Creates extruded geometry from a path shape. - * - * parameters = { - * - * curveSegments: , // number of points on the curves - * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too - * depth: , // Depth to extrude the shape - * - * bevelEnabled: , // turn on bevel - * bevelThickness: , // how deep into the original shape bevel goes - * bevelSize: , // how far from shape outline (including bevelOffset) is bevel - * bevelOffset: , // how far from shape outline does bevel start - * bevelSegments: , // number of bevel layers - * - * extrudePath: // curve to extrude shape along - * - * UVGenerator: // object that provides UV generator functions - * - * } - */ - -class ExtrudeGeometry extends BufferGeometry { - constructor(shapes = new Shape([new Vector2(0.5, 0.5), new Vector2(-0.5, 0.5), new Vector2(-0.5, -0.5), new Vector2(0.5, -0.5)]), options = {}) { - super(); - - this.type = 'ExtrudeGeometry'; - - this.parameters = { - shapes: shapes, - options: options, - }; - - shapes = Array.isArray(shapes) ? shapes : [shapes]; - - const scope = this; - - const verticesArray = []; - const uvArray = []; - - for (let i = 0, l = shapes.length; i < l; i++) { - const shape = shapes[i]; - addShape(shape); - } - - // build geometry - - this.setAttribute('position', new Float32BufferAttribute(verticesArray, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvArray, 2)); - - this.computeVertexNormals(); - - // functions - - function addShape(shape) { - const placeholder = []; - - // options - - const curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12; - const steps = options.steps !== undefined ? options.steps : 1; - const depth = options.depth !== undefined ? options.depth : 1; - - let bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; - let bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 0.2; - let bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 0.1; - let bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0; - let bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3; - - const extrudePath = options.extrudePath; - - const uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator; - - // - - let extrudePts, - extrudeByPath = false; - let splineTube, binormal, normal, position2; - - if (extrudePath) { - extrudePts = extrudePath.getSpacedPoints(steps); - - extrudeByPath = true; - bevelEnabled = false; // bevels not supported for path extrusion - - // SETUP TNB variables - - // TODO1 - have a .isClosed in spline? - - splineTube = extrudePath.computeFrenetFrames(steps, false); - - // console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length); - - binormal = new Vector3(); - normal = new Vector3(); - position2 = new Vector3(); - } - - // Safeguards if bevels are not enabled - - if (!bevelEnabled) { - bevelSegments = 0; - bevelThickness = 0; - bevelSize = 0; - bevelOffset = 0; - } - - // Variables initialization - - const shapePoints = shape.extractPoints(curveSegments); - - let vertices = shapePoints.shape; - const holes = shapePoints.holes; - - const reverse = !ShapeUtils.isClockWise(vertices); - - if (reverse) { - vertices = vertices.reverse(); - - // Maybe we should also check if holes are in the opposite direction, just to be safe ... - - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - - if (ShapeUtils.isClockWise(ahole)) { - holes[h] = ahole.reverse(); - } - } - } - - const faces = ShapeUtils.triangulateShape(vertices, holes); - - /* Vertices */ - - const contour = vertices; // vertices has all points but contour has only points of circumference - - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - - vertices = vertices.concat(ahole); - } - - function scalePt2(pt, vec, size) { - if (!vec) console.error('THREE.ExtrudeGeometry: vec does not exist'); - - return pt.clone().addScaledVector(vec, size); - } - - const vlen = vertices.length, - flen = faces.length; - - // Find directions for point movement - - function getBevelVec(inPt, inPrev, inNext) { - // computes for inPt the corresponding point inPt' on a new contour - // shifted by 1 unit (length of normalized vector) to the left - // if we walk along contour clockwise, this new contour is outside the old one - // - // inPt' is the intersection of the two lines parallel to the two - // adjacent edges of inPt at a distance of 1 unit on the left side. - - let v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt - - // good reading for geometry algorithms (here: line-line intersection) - // http://geomalgorithms.com/a05-_intersect-1.html - - const v_prev_x = inPt.x - inPrev.x, - v_prev_y = inPt.y - inPrev.y; - const v_next_x = inNext.x - inPt.x, - v_next_y = inNext.y - inPt.y; - - const v_prev_lensq = v_prev_x * v_prev_x + v_prev_y * v_prev_y; - - // check for collinear edges - const collinear0 = v_prev_x * v_next_y - v_prev_y * v_next_x; - - if (Math.abs(collinear0) > Number.EPSILON) { - // not collinear - - // length of vectors for normalizing - - const v_prev_len = Math.sqrt(v_prev_lensq); - const v_next_len = Math.sqrt(v_next_x * v_next_x + v_next_y * v_next_y); - - // shift adjacent points by unit vectors to the left - - const ptPrevShift_x = inPrev.x - v_prev_y / v_prev_len; - const ptPrevShift_y = inPrev.y + v_prev_x / v_prev_len; - - const ptNextShift_x = inNext.x - v_next_y / v_next_len; - const ptNextShift_y = inNext.y + v_next_x / v_next_len; - - // scaling factor for v_prev to intersection point - - const sf = ((ptNextShift_x - ptPrevShift_x) * v_next_y - (ptNextShift_y - ptPrevShift_y) * v_next_x) / (v_prev_x * v_next_y - v_prev_y * v_next_x); - - // vector from inPt to intersection point - - v_trans_x = ptPrevShift_x + v_prev_x * sf - inPt.x; - v_trans_y = ptPrevShift_y + v_prev_y * sf - inPt.y; - - // Don't normalize!, otherwise sharp corners become ugly - // but prevent crazy spikes - const v_trans_lensq = v_trans_x * v_trans_x + v_trans_y * v_trans_y; - if (v_trans_lensq <= 2) { - return new Vector2(v_trans_x, v_trans_y); - } else { - shrink_by = Math.sqrt(v_trans_lensq / 2); - } - } else { - // handle special case of collinear edges - - let direction_eq = false; // assumes: opposite - - if (v_prev_x > Number.EPSILON) { - if (v_next_x > Number.EPSILON) { - direction_eq = true; - } - } else { - if (v_prev_x < -Number.EPSILON) { - if (v_next_x < -Number.EPSILON) { - direction_eq = true; - } - } else { - if (Math.sign(v_prev_y) === Math.sign(v_next_y)) { - direction_eq = true; - } - } - } - - if (direction_eq) { - // console.log("Warning: lines are a straight sequence"); - v_trans_x = -v_prev_y; - v_trans_y = v_prev_x; - shrink_by = Math.sqrt(v_prev_lensq); - } else { - // console.log("Warning: lines are a straight spike"); - v_trans_x = v_prev_x; - v_trans_y = v_prev_y; - shrink_by = Math.sqrt(v_prev_lensq / 2); - } - } - - return new Vector2(v_trans_x / shrink_by, v_trans_y / shrink_by); - } - - const contourMovements = []; - - for (let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i++, j++, k++) { - if (j === il) j = 0; - if (k === il) k = 0; - - // (j)---(i)---(k) - // console.log('i,j,k', i, j , k) - - contourMovements[i] = getBevelVec(contour[i], contour[j], contour[k]); - } - - const holesMovements = []; - let oneHoleMovements, - verticesMovements = contourMovements.concat(); - - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - - oneHoleMovements = []; - - for (let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i++, j++, k++) { - if (j === il) j = 0; - if (k === il) k = 0; - - // (j)---(i)---(k) - oneHoleMovements[i] = getBevelVec(ahole[i], ahole[j], ahole[k]); - } - - holesMovements.push(oneHoleMovements); - verticesMovements = verticesMovements.concat(oneHoleMovements); - } - - // Loop bevelSegments, 1 for the front, 1 for the back - - for (let b = 0; b < bevelSegments; b++) { - //for ( b = bevelSegments; b > 0; b -- ) { - - const t = b / bevelSegments; - const z = bevelThickness * Math.cos((t * Math.PI) / 2); - const bs = bevelSize * Math.sin((t * Math.PI) / 2) + bevelOffset; - - // contract shape - - for (let i = 0, il = contour.length; i < il; i++) { - const vert = scalePt2(contour[i], contourMovements[i], bs); - - v(vert.x, vert.y, -z); - } - - // expand holes - - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - oneHoleMovements = holesMovements[h]; - - for (let i = 0, il = ahole.length; i < il; i++) { - const vert = scalePt2(ahole[i], oneHoleMovements[i], bs); - - v(vert.x, vert.y, -z); - } - } - } - - const bs = bevelSize + bevelOffset; - - // Back facing vertices - - for (let i = 0; i < vlen; i++) { - const vert = bevelEnabled ? scalePt2(vertices[i], verticesMovements[i], bs) : vertices[i]; - - if (!extrudeByPath) { - v(vert.x, vert.y, 0); - } else { - // v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x ); - - normal.copy(splineTube.normals[0]).multiplyScalar(vert.x); - binormal.copy(splineTube.binormals[0]).multiplyScalar(vert.y); - - position2.copy(extrudePts[0]).add(normal).add(binormal); - - v(position2.x, position2.y, position2.z); - } - } - - // Add stepped vertices... - // Including front facing vertices - - for (let s = 1; s <= steps; s++) { - for (let i = 0; i < vlen; i++) { - const vert = bevelEnabled ? scalePt2(vertices[i], verticesMovements[i], bs) : vertices[i]; - - if (!extrudeByPath) { - v(vert.x, vert.y, (depth / steps) * s); - } else { - // v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x ); - - normal.copy(splineTube.normals[s]).multiplyScalar(vert.x); - binormal.copy(splineTube.binormals[s]).multiplyScalar(vert.y); - - position2.copy(extrudePts[s]).add(normal).add(binormal); - - v(position2.x, position2.y, position2.z); - } - } - } - - // Add bevel segments planes - - //for ( b = 1; b <= bevelSegments; b ++ ) { - for (let b = bevelSegments - 1; b >= 0; b--) { - const t = b / bevelSegments; - const z = bevelThickness * Math.cos((t * Math.PI) / 2); - const bs = bevelSize * Math.sin((t * Math.PI) / 2) + bevelOffset; - - // contract shape - - for (let i = 0, il = contour.length; i < il; i++) { - const vert = scalePt2(contour[i], contourMovements[i], bs); - v(vert.x, vert.y, depth + z); - } - - // expand holes - - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - oneHoleMovements = holesMovements[h]; - - for (let i = 0, il = ahole.length; i < il; i++) { - const vert = scalePt2(ahole[i], oneHoleMovements[i], bs); - - if (!extrudeByPath) { - v(vert.x, vert.y, depth + z); - } else { - v(vert.x, vert.y + extrudePts[steps - 1].y, extrudePts[steps - 1].x + z); - } - } - } - } - - /* Faces */ - - // Top and bottom faces - - buildLidFaces(); - - // Sides faces - - buildSideFaces(); - - ///// Internal functions - - function buildLidFaces() { - const start = verticesArray.length / 3; - - if (bevelEnabled) { - let layer = 0; // steps + 1 - let offset = vlen * layer; - - // Bottom faces - - for (let i = 0; i < flen; i++) { - const face = faces[i]; - f3(face[2] + offset, face[1] + offset, face[0] + offset); - } - - layer = steps + bevelSegments * 2; - offset = vlen * layer; - - // Top faces - - for (let i = 0; i < flen; i++) { - const face = faces[i]; - f3(face[0] + offset, face[1] + offset, face[2] + offset); - } - } else { - // Bottom faces - - for (let i = 0; i < flen; i++) { - const face = faces[i]; - f3(face[2], face[1], face[0]); - } - - // Top faces - - for (let i = 0; i < flen; i++) { - const face = faces[i]; - f3(face[0] + vlen * steps, face[1] + vlen * steps, face[2] + vlen * steps); - } - } - - scope.addGroup(start, verticesArray.length / 3 - start, 0); - } - - // Create faces for the z-sides of the shape - - function buildSideFaces() { - const start = verticesArray.length / 3; - let layeroffset = 0; - sidewalls(contour, layeroffset); - layeroffset += contour.length; - - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - sidewalls(ahole, layeroffset); - - //, true - layeroffset += ahole.length; - } - - scope.addGroup(start, verticesArray.length / 3 - start, 1); - } - - function sidewalls(contour, layeroffset) { - let i = contour.length; - - while (--i >= 0) { - const j = i; - let k = i - 1; - if (k < 0) k = contour.length - 1; - - //console.log('b', i,j, i-1, k,vertices.length); - - for (let s = 0, sl = steps + bevelSegments * 2; s < sl; s++) { - const slen1 = vlen * s; - const slen2 = vlen * (s + 1); - - const a = layeroffset + j + slen1, - b = layeroffset + k + slen1, - c = layeroffset + k + slen2, - d = layeroffset + j + slen2; - - f4(a, b, c, d); - } - } - } - - function v(x, y, z) { - placeholder.push(x); - placeholder.push(y); - placeholder.push(z); - } - - function f3(a, b, c) { - addVertex(a); - addVertex(b); - addVertex(c); - - const nextIndex = verticesArray.length / 3; - const uvs = uvgen.generateTopUV(scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1); - - addUV(uvs[0]); - addUV(uvs[1]); - addUV(uvs[2]); - } - - function f4(a, b, c, d) { - addVertex(a); - addVertex(b); - addVertex(d); - - addVertex(b); - addVertex(c); - addVertex(d); - - const nextIndex = verticesArray.length / 3; - const uvs = uvgen.generateSideWallUV(scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1); - - addUV(uvs[0]); - addUV(uvs[1]); - addUV(uvs[3]); - - addUV(uvs[1]); - addUV(uvs[2]); - addUV(uvs[3]); - } - - function addVertex(index) { - verticesArray.push(placeholder[index * 3 + 0]); - verticesArray.push(placeholder[index * 3 + 1]); - verticesArray.push(placeholder[index * 3 + 2]); - } - - function addUV(vector2) { - uvArray.push(vector2.x); - uvArray.push(vector2.y); - } - } - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } - - toJSON() { - const data = super.toJSON(); - - const shapes = this.parameters.shapes; - const options = this.parameters.options; - - return toJSON$1(shapes, options, data); - } - - static fromJSON(data, shapes) { - const geometryShapes = []; - - for (let j = 0, jl = data.shapes.length; j < jl; j++) { - const shape = shapes[data.shapes[j]]; - - geometryShapes.push(shape); - } - - const extrudePath = data.options.extrudePath; - - if (extrudePath !== undefined) { - data.options.extrudePath = new Curves[extrudePath.type]().fromJSON(extrudePath); - } - - return new ExtrudeGeometry(geometryShapes, data.options); - } -} - -const WorldUVGenerator = { - generateTopUV: function (geometry, vertices, indexA, indexB, indexC) { - const a_x = vertices[indexA * 3]; - const a_y = vertices[indexA * 3 + 1]; - const b_x = vertices[indexB * 3]; - const b_y = vertices[indexB * 3 + 1]; - const c_x = vertices[indexC * 3]; - const c_y = vertices[indexC * 3 + 1]; - - return [new Vector2(a_x, a_y), new Vector2(b_x, b_y), new Vector2(c_x, c_y)]; - }, - - generateSideWallUV: function (geometry, vertices, indexA, indexB, indexC, indexD) { - const a_x = vertices[indexA * 3]; - const a_y = vertices[indexA * 3 + 1]; - const a_z = vertices[indexA * 3 + 2]; - const b_x = vertices[indexB * 3]; - const b_y = vertices[indexB * 3 + 1]; - const b_z = vertices[indexB * 3 + 2]; - const c_x = vertices[indexC * 3]; - const c_y = vertices[indexC * 3 + 1]; - const c_z = vertices[indexC * 3 + 2]; - const d_x = vertices[indexD * 3]; - const d_y = vertices[indexD * 3 + 1]; - const d_z = vertices[indexD * 3 + 2]; - - if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) { - return [new Vector2(a_x, 1 - a_z), new Vector2(b_x, 1 - b_z), new Vector2(c_x, 1 - c_z), new Vector2(d_x, 1 - d_z)]; - } else { - return [new Vector2(a_y, 1 - a_z), new Vector2(b_y, 1 - b_z), new Vector2(c_y, 1 - c_z), new Vector2(d_y, 1 - d_z)]; - } - }, -}; - -function toJSON$1(shapes, options, data) { - data.shapes = []; - - if (Array.isArray(shapes)) { - for (let i = 0, l = shapes.length; i < l; i++) { - const shape = shapes[i]; - - data.shapes.push(shape.uuid); - } - } else { - data.shapes.push(shapes.uuid); - } - - data.options = Object.assign({}, options); - - if (options.extrudePath !== undefined) data.options.extrudePath = options.extrudePath.toJSON(); - - return data; -} - -class IcosahedronGeometry extends PolyhedronGeometry { - constructor(radius = 1, detail = 0) { - const t = (1 + Math.sqrt(5)) / 2; - - const vertices = [-1, t, 0, 1, t, 0, -1, -t, 0, 1, -t, 0, 0, -1, t, 0, 1, t, 0, -1, -t, 0, 1, -t, t, 0, -1, t, 0, 1, -t, 0, -1, -t, 0, 1]; - - const indices = [0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1]; - - super(vertices, indices, radius, detail); - - this.type = 'IcosahedronGeometry'; - - this.parameters = { - radius: radius, - detail: detail, - }; - } - - static fromJSON(data) { - return new IcosahedronGeometry(data.radius, data.detail); - } -} - -class OctahedronGeometry extends PolyhedronGeometry { - constructor(radius = 1, detail = 0) { - const vertices = [1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1]; - - const indices = [0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2]; - - super(vertices, indices, radius, detail); - - this.type = 'OctahedronGeometry'; - - this.parameters = { - radius: radius, - detail: detail, - }; - } - - static fromJSON(data) { - return new OctahedronGeometry(data.radius, data.detail); - } -} - -class PlaneGeometry extends BufferGeometry { - constructor(width = 1, height = 1, widthSegments = 1, heightSegments = 1) { - super(); - - this.type = 'PlaneGeometry'; - - this.parameters = { - width: width, - height: height, - widthSegments: widthSegments, - heightSegments: heightSegments, - }; - - const width_half = width / 2; - const height_half = height / 2; - - const gridX = Math.floor(widthSegments); - const gridY = Math.floor(heightSegments); - - const gridX1 = gridX + 1; - const gridY1 = gridY + 1; - - const segment_width = width / gridX; - const segment_height = height / gridY; - - // - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - for (let iy = 0; iy < gridY1; iy++) { - const y = iy * segment_height - height_half; - - for (let ix = 0; ix < gridX1; ix++) { - const x = ix * segment_width - width_half; - - vertices.push(x, -y, 0); - - normals.push(0, 0, 1); - - uvs.push(ix / gridX); - uvs.push(1 - iy / gridY); - } - } - - for (let iy = 0; iy < gridY; iy++) { - for (let ix = 0; ix < gridX; ix++) { - const a = ix + gridX1 * iy; - const b = ix + gridX1 * (iy + 1); - const c = ix + 1 + gridX1 * (iy + 1); - const d = ix + 1 + gridX1 * iy; - - indices.push(a, b, d); - indices.push(b, c, d); - } - } - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } - - static fromJSON(data) { - return new PlaneGeometry(data.width, data.height, data.widthSegments, data.heightSegments); - } -} - -class RingGeometry extends BufferGeometry { - constructor(innerRadius = 0.5, outerRadius = 1, thetaSegments = 32, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2) { - super(); - - this.type = 'RingGeometry'; - - this.parameters = { - innerRadius: innerRadius, - outerRadius: outerRadius, - thetaSegments: thetaSegments, - phiSegments: phiSegments, - thetaStart: thetaStart, - thetaLength: thetaLength, - }; - - thetaSegments = Math.max(3, thetaSegments); - phiSegments = Math.max(1, phiSegments); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // some helper variables - - let radius = innerRadius; - const radiusStep = (outerRadius - innerRadius) / phiSegments; - const vertex = new Vector3(); - const uv = new Vector2(); - - // generate vertices, normals and uvs - - for (let j = 0; j <= phiSegments; j++) { - for (let i = 0; i <= thetaSegments; i++) { - // values are generate from the inside of the ring to the outside - - const segment = thetaStart + (i / thetaSegments) * thetaLength; - - // vertex - - vertex.x = radius * Math.cos(segment); - vertex.y = radius * Math.sin(segment); - - vertices.push(vertex.x, vertex.y, vertex.z); - - // normal - - normals.push(0, 0, 1); - - // uv - - uv.x = (vertex.x / outerRadius + 1) / 2; - uv.y = (vertex.y / outerRadius + 1) / 2; - - uvs.push(uv.x, uv.y); - } - - // increase the radius for next row of vertices - - radius += radiusStep; - } - - // indices - - for (let j = 0; j < phiSegments; j++) { - const thetaSegmentLevel = j * (thetaSegments + 1); - - for (let i = 0; i < thetaSegments; i++) { - const segment = i + thetaSegmentLevel; - - const a = segment; - const b = segment + thetaSegments + 1; - const c = segment + thetaSegments + 2; - const d = segment + 1; - - // faces - - indices.push(a, b, d); - indices.push(b, c, d); - } - } - - // build geometry - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } - - static fromJSON(data) { - return new RingGeometry(data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength); - } -} - -class ShapeGeometry extends BufferGeometry { - constructor(shapes = new Shape([new Vector2(0, 0.5), new Vector2(-0.5, -0.5), new Vector2(0.5, -0.5)]), curveSegments = 12) { - super(); - - this.type = 'ShapeGeometry'; - - this.parameters = { - shapes: shapes, - curveSegments: curveSegments, - }; - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - let groupStart = 0; - let groupCount = 0; - - // allow single and array values for "shapes" parameter - - if (Array.isArray(shapes) === false) { - addShape(shapes); - } else { - for (let i = 0; i < shapes.length; i++) { - addShape(shapes[i]); - - this.addGroup(groupStart, groupCount, i); // enables MultiMaterial support - - groupStart += groupCount; - groupCount = 0; - } - } - - // build geometry - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - - // helper functions - - function addShape(shape) { - const indexOffset = vertices.length / 3; - const points = shape.extractPoints(curveSegments); - - let shapeVertices = points.shape; - const shapeHoles = points.holes; - - // check direction of vertices - - if (ShapeUtils.isClockWise(shapeVertices) === false) { - shapeVertices = shapeVertices.reverse(); - } - - for (let i = 0, l = shapeHoles.length; i < l; i++) { - const shapeHole = shapeHoles[i]; - - if (ShapeUtils.isClockWise(shapeHole) === true) { - shapeHoles[i] = shapeHole.reverse(); - } - } - - const faces = ShapeUtils.triangulateShape(shapeVertices, shapeHoles); - - // join vertices of inner and outer paths to a single array - - for (let i = 0, l = shapeHoles.length; i < l; i++) { - const shapeHole = shapeHoles[i]; - shapeVertices = shapeVertices.concat(shapeHole); - } - - // vertices, normals, uvs - - for (let i = 0, l = shapeVertices.length; i < l; i++) { - const vertex = shapeVertices[i]; - - vertices.push(vertex.x, vertex.y, 0); - normals.push(0, 0, 1); - uvs.push(vertex.x, vertex.y); // world uvs - } - - // indices - - for (let i = 0, l = faces.length; i < l; i++) { - const face = faces[i]; - - const a = face[0] + indexOffset; - const b = face[1] + indexOffset; - const c = face[2] + indexOffset; - - indices.push(a, b, c); - groupCount += 3; - } - } - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } - - toJSON() { - const data = super.toJSON(); - - const shapes = this.parameters.shapes; - - return toJSON(shapes, data); - } - - static fromJSON(data, shapes) { - const geometryShapes = []; - - for (let j = 0, jl = data.shapes.length; j < jl; j++) { - const shape = shapes[data.shapes[j]]; - - geometryShapes.push(shape); - } - - return new ShapeGeometry(geometryShapes, data.curveSegments); - } -} - -function toJSON(shapes, data) { - data.shapes = []; - - if (Array.isArray(shapes)) { - for (let i = 0, l = shapes.length; i < l; i++) { - const shape = shapes[i]; - - data.shapes.push(shape.uuid); - } - } else { - data.shapes.push(shapes.uuid); - } - - return data; -} - -class SphereGeometry extends BufferGeometry { - constructor(radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI) { - super(); - - this.type = 'SphereGeometry'; - - this.parameters = { - radius: radius, - widthSegments: widthSegments, - heightSegments: heightSegments, - phiStart: phiStart, - phiLength: phiLength, - thetaStart: thetaStart, - thetaLength: thetaLength, - }; - - widthSegments = Math.max(3, Math.floor(widthSegments)); - heightSegments = Math.max(2, Math.floor(heightSegments)); - - const thetaEnd = Math.min(thetaStart + thetaLength, Math.PI); - - let index = 0; - const grid = []; - - const vertex = new Vector3(); - const normal = new Vector3(); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // generate vertices, normals and uvs - - for (let iy = 0; iy <= heightSegments; iy++) { - const verticesRow = []; - - const v = iy / heightSegments; - - // special case for the poles - - let uOffset = 0; - - if (iy === 0 && thetaStart === 0) { - uOffset = 0.5 / widthSegments; - } else if (iy === heightSegments && thetaEnd === Math.PI) { - uOffset = -0.5 / widthSegments; - } - - for (let ix = 0; ix <= widthSegments; ix++) { - const u = ix / widthSegments; - - // vertex - - vertex.x = -radius * Math.cos(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength); - vertex.y = radius * Math.cos(thetaStart + v * thetaLength); - vertex.z = radius * Math.sin(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength); - - vertices.push(vertex.x, vertex.y, vertex.z); - - // normal - - normal.copy(vertex).normalize(); - normals.push(normal.x, normal.y, normal.z); - - // uv - - uvs.push(u + uOffset, 1 - v); - - verticesRow.push(index++); - } - - grid.push(verticesRow); - } - - // indices - - for (let iy = 0; iy < heightSegments; iy++) { - for (let ix = 0; ix < widthSegments; ix++) { - const a = grid[iy][ix + 1]; - const b = grid[iy][ix]; - const c = grid[iy + 1][ix]; - const d = grid[iy + 1][ix + 1]; - - if (iy !== 0 || thetaStart > 0) indices.push(a, b, d); - if (iy !== heightSegments - 1 || thetaEnd < Math.PI) indices.push(b, c, d); - } - } - - // build geometry - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } - - static fromJSON(data) { - return new SphereGeometry(data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength); - } -} - -class TetrahedronGeometry extends PolyhedronGeometry { - constructor(radius = 1, detail = 0) { - const vertices = [1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1]; - - const indices = [2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1]; - - super(vertices, indices, radius, detail); - - this.type = 'TetrahedronGeometry'; - - this.parameters = { - radius: radius, - detail: detail, - }; - } - - static fromJSON(data) { - return new TetrahedronGeometry(data.radius, data.detail); - } -} - -class TorusGeometry extends BufferGeometry { - constructor(radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2) { - super(); - - this.type = 'TorusGeometry'; - - this.parameters = { - radius: radius, - tube: tube, - radialSegments: radialSegments, - tubularSegments: tubularSegments, - arc: arc, - }; - - radialSegments = Math.floor(radialSegments); - tubularSegments = Math.floor(tubularSegments); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - const center = new Vector3(); - const vertex = new Vector3(); - const normal = new Vector3(); - - // generate vertices, normals and uvs - - for (let j = 0; j <= radialSegments; j++) { - for (let i = 0; i <= tubularSegments; i++) { - const u = (i / tubularSegments) * arc; - const v = (j / radialSegments) * Math.PI * 2; - - // vertex - - vertex.x = (radius + tube * Math.cos(v)) * Math.cos(u); - vertex.y = (radius + tube * Math.cos(v)) * Math.sin(u); - vertex.z = tube * Math.sin(v); - - vertices.push(vertex.x, vertex.y, vertex.z); - - // normal - - center.x = radius * Math.cos(u); - center.y = radius * Math.sin(u); - normal.subVectors(vertex, center).normalize(); - - normals.push(normal.x, normal.y, normal.z); - - // uv - - uvs.push(i / tubularSegments); - uvs.push(j / radialSegments); - } - } - - // generate indices - - for (let j = 1; j <= radialSegments; j++) { - for (let i = 1; i <= tubularSegments; i++) { - // indices - - const a = (tubularSegments + 1) * j + i - 1; - const b = (tubularSegments + 1) * (j - 1) + i - 1; - const c = (tubularSegments + 1) * (j - 1) + i; - const d = (tubularSegments + 1) * j + i; - - // faces - - indices.push(a, b, d); - indices.push(b, c, d); - } - } - - // build geometry - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } - - static fromJSON(data) { - return new TorusGeometry(data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc); - } -} - -class TorusKnotGeometry extends BufferGeometry { - constructor(radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3) { - super(); - - this.type = 'TorusKnotGeometry'; - - this.parameters = { - radius: radius, - tube: tube, - tubularSegments: tubularSegments, - radialSegments: radialSegments, - p: p, - q: q, - }; - - tubularSegments = Math.floor(tubularSegments); - radialSegments = Math.floor(radialSegments); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - const vertex = new Vector3(); - const normal = new Vector3(); - - const P1 = new Vector3(); - const P2 = new Vector3(); - - const B = new Vector3(); - const T = new Vector3(); - const N = new Vector3(); - - // generate vertices, normals and uvs - - for (let i = 0; i <= tubularSegments; ++i) { - // the radian "u" is used to calculate the position on the torus curve of the current tubular segment - - const u = (i / tubularSegments) * p * Math.PI * 2; - - // now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead. - // these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions - - calculatePositionOnCurve(u, p, q, radius, P1); - calculatePositionOnCurve(u + 0.01, p, q, radius, P2); - - // calculate orthonormal basis - - T.subVectors(P2, P1); - N.addVectors(P2, P1); - B.crossVectors(T, N); - N.crossVectors(B, T); - - // normalize B, N. T can be ignored, we don't use it - - B.normalize(); - N.normalize(); - - for (let j = 0; j <= radialSegments; ++j) { - // now calculate the vertices. they are nothing more than an extrusion of the torus curve. - // because we extrude a shape in the xy-plane, there is no need to calculate a z-value. - - const v = (j / radialSegments) * Math.PI * 2; - const cx = -tube * Math.cos(v); - const cy = tube * Math.sin(v); - - // now calculate the final vertex position. - // first we orient the extrusion with our basis vectors, then we add it to the current position on the curve - - vertex.x = P1.x + (cx * N.x + cy * B.x); - vertex.y = P1.y + (cx * N.y + cy * B.y); - vertex.z = P1.z + (cx * N.z + cy * B.z); - - vertices.push(vertex.x, vertex.y, vertex.z); - - // normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal) - - normal.subVectors(vertex, P1).normalize(); - - normals.push(normal.x, normal.y, normal.z); - - // uv - - uvs.push(i / tubularSegments); - uvs.push(j / radialSegments); - } - } - - // generate indices - - for (let j = 1; j <= tubularSegments; j++) { - for (let i = 1; i <= radialSegments; i++) { - // indices - - const a = (radialSegments + 1) * (j - 1) + (i - 1); - const b = (radialSegments + 1) * j + (i - 1); - const c = (radialSegments + 1) * j + i; - const d = (radialSegments + 1) * (j - 1) + i; - - // faces - - indices.push(a, b, d); - indices.push(b, c, d); - } - } - - // build geometry - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - - // this function calculates the current position on the torus curve - - function calculatePositionOnCurve(u, p, q, radius, position) { - const cu = Math.cos(u); - const su = Math.sin(u); - const quOverP = (q / p) * u; - const cs = Math.cos(quOverP); - - position.x = radius * (2 + cs) * 0.5 * cu; - position.y = radius * (2 + cs) * su * 0.5; - position.z = radius * Math.sin(quOverP) * 0.5; - } - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } - - static fromJSON(data) { - return new TorusKnotGeometry(data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q); - } -} - -class TubeGeometry extends BufferGeometry { - constructor(path = new QuadraticBezierCurve3(new Vector3(-1, -1, 0), new Vector3(-1, 1, 0), new Vector3(1, 1, 0)), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false) { - super(); - - this.type = 'TubeGeometry'; - - this.parameters = { - path: path, - tubularSegments: tubularSegments, - radius: radius, - radialSegments: radialSegments, - closed: closed, - }; - - const frames = path.computeFrenetFrames(tubularSegments, closed); - - // expose internals - - this.tangents = frames.tangents; - this.normals = frames.normals; - this.binormals = frames.binormals; - - // helper variables - - const vertex = new Vector3(); - const normal = new Vector3(); - const uv = new Vector2(); - let P = new Vector3(); - - // buffer - - const vertices = []; - const normals = []; - const uvs = []; - const indices = []; - - // create buffer data - - generateBufferData(); - - // build geometry - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - - // functions - - function generateBufferData() { - for (let i = 0; i < tubularSegments; i++) { - generateSegment(i); - } - - // if the geometry is not closed, generate the last row of vertices and normals - // at the regular position on the given path - // - // if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ) - - generateSegment(closed === false ? tubularSegments : 0); - - // uvs are generated in a separate function. - // this makes it easy compute correct values for closed geometries - - generateUVs(); - - // finally create faces - - generateIndices(); - } - - function generateSegment(i) { - // we use getPointAt to sample evenly distributed points from the given path - - P = path.getPointAt(i / tubularSegments, P); - - // retrieve corresponding normal and binormal - - const N = frames.normals[i]; - const B = frames.binormals[i]; - - // generate normals and vertices for the current segment - - for (let j = 0; j <= radialSegments; j++) { - const v = (j / radialSegments) * Math.PI * 2; - - const sin = Math.sin(v); - const cos = -Math.cos(v); - - // normal - - normal.x = cos * N.x + sin * B.x; - normal.y = cos * N.y + sin * B.y; - normal.z = cos * N.z + sin * B.z; - normal.normalize(); - - normals.push(normal.x, normal.y, normal.z); - - // vertex - - vertex.x = P.x + radius * normal.x; - vertex.y = P.y + radius * normal.y; - vertex.z = P.z + radius * normal.z; - - vertices.push(vertex.x, vertex.y, vertex.z); - } - } - - function generateIndices() { - for (let j = 1; j <= tubularSegments; j++) { - for (let i = 1; i <= radialSegments; i++) { - const a = (radialSegments + 1) * (j - 1) + (i - 1); - const b = (radialSegments + 1) * j + (i - 1); - const c = (radialSegments + 1) * j + i; - const d = (radialSegments + 1) * (j - 1) + i; - - // faces - - indices.push(a, b, d); - indices.push(b, c, d); - } - } - } - - function generateUVs() { - for (let i = 0; i <= tubularSegments; i++) { - for (let j = 0; j <= radialSegments; j++) { - uv.x = i / tubularSegments; - uv.y = j / radialSegments; - - uvs.push(uv.x, uv.y); - } - } - } - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.path = this.parameters.path.toJSON(); - - return data; - } - - static fromJSON(data) { - // This only works for built-in curves (e.g. CatmullRomCurve3). - // User defined curves or instances of CurvePath will not be deserialized. - return new TubeGeometry(new Curves[data.path.type]().fromJSON(data.path), data.tubularSegments, data.radius, data.radialSegments, data.closed); - } -} - -class WireframeGeometry extends BufferGeometry { - constructor(geometry = null) { - super(); - - this.type = 'WireframeGeometry'; - - this.parameters = { - geometry: geometry, - }; - - if (geometry !== null) { - // buffer - - const vertices = []; - const edges = new Set(); - - // helper variables - - const start = new Vector3(); - const end = new Vector3(); - - if (geometry.index !== null) { - // indexed BufferGeometry - - const position = geometry.attributes.position; - const indices = geometry.index; - let groups = geometry.groups; - - if (groups.length === 0) { - groups = [{ start: 0, count: indices.count, materialIndex: 0 }]; - } - - // create a data structure that contains all edges without duplicates - - for (let o = 0, ol = groups.length; o < ol; ++o) { - const group = groups[o]; - - const groupStart = group.start; - const groupCount = group.count; - - for (let i = groupStart, l = groupStart + groupCount; i < l; i += 3) { - for (let j = 0; j < 3; j++) { - const index1 = indices.getX(i + j); - const index2 = indices.getX(i + ((j + 1) % 3)); - - start.fromBufferAttribute(position, index1); - end.fromBufferAttribute(position, index2); - - if (isUniqueEdge(start, end, edges) === true) { - vertices.push(start.x, start.y, start.z); - vertices.push(end.x, end.y, end.z); - } - } - } - } - } else { - // non-indexed BufferGeometry - - const position = geometry.attributes.position; - - for (let i = 0, l = position.count / 3; i < l; i++) { - for (let j = 0; j < 3; j++) { - // three edges per triangle, an edge is represented as (index1, index2) - // e.g. the first triangle has the following edges: (0,1),(1,2),(2,0) - - const index1 = 3 * i + j; - const index2 = 3 * i + ((j + 1) % 3); - - start.fromBufferAttribute(position, index1); - end.fromBufferAttribute(position, index2); - - if (isUniqueEdge(start, end, edges) === true) { - vertices.push(start.x, start.y, start.z); - vertices.push(end.x, end.y, end.z); - } - } - } - } - - // build geometry - - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - } - } - - copy(source) { - super.copy(source); - - this.parameters = Object.assign({}, source.parameters); - - return this; - } -} - -function isUniqueEdge(start, end, edges) { - const hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`; - const hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge - - if (edges.has(hash1) === true || edges.has(hash2) === true) { - return false; - } else { - edges.add(hash1); - edges.add(hash2); - return true; - } -} - -var Geometries$1 = /*#__PURE__*/ Object.freeze({ - __proto__: null, - BoxGeometry: BoxGeometry, - CapsuleGeometry: CapsuleGeometry, - CircleGeometry: CircleGeometry, - ConeGeometry: ConeGeometry, - CylinderGeometry: CylinderGeometry, - DodecahedronGeometry: DodecahedronGeometry, - EdgesGeometry: EdgesGeometry, - ExtrudeGeometry: ExtrudeGeometry, - IcosahedronGeometry: IcosahedronGeometry, - LatheGeometry: LatheGeometry, - OctahedronGeometry: OctahedronGeometry, - PlaneGeometry: PlaneGeometry, - PolyhedronGeometry: PolyhedronGeometry, - RingGeometry: RingGeometry, - ShapeGeometry: ShapeGeometry, - SphereGeometry: SphereGeometry, - TetrahedronGeometry: TetrahedronGeometry, - TorusGeometry: TorusGeometry, - TorusKnotGeometry: TorusKnotGeometry, - TubeGeometry: TubeGeometry, - WireframeGeometry: WireframeGeometry, -}); - -class ShadowMaterial extends Material { - constructor(parameters) { - super(); - - this.isShadowMaterial = true; - - this.type = 'ShadowMaterial'; - - this.color = new Color(0x000000); - this.transparent = true; - - this.fog = true; - - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - - this.color.copy(source.color); - - this.fog = source.fog; - - return this; - } -} - -class RawShaderMaterial extends ShaderMaterial { - constructor(parameters) { - super(parameters); - - this.isRawShaderMaterial = true; - - this.type = 'RawShaderMaterial'; - } -} - -class MeshStandardMaterial extends Material { - constructor(parameters) { - super(); - - this.isMeshStandardMaterial = true; - - this.defines = { STANDARD: '' }; - - this.type = 'MeshStandardMaterial'; - - this.color = new Color(0xffffff); // diffuse - this.roughness = 1.0; - this.metalness = 0.0; - - this.map = null; - - this.lightMap = null; - this.lightMapIntensity = 1.0; - - this.aoMap = null; - this.aoMapIntensity = 1.0; - - this.emissive = new Color(0x000000); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.roughnessMap = null; - - this.metalnessMap = null; - - this.alphaMap = null; - - this.envMap = null; - this.envMapRotation = new Euler(); - this.envMapIntensity = 1.0; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.flatShading = false; - - this.fog = true; - - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - - this.defines = { STANDARD: '' }; - - this.color.copy(source.color); - this.roughness = source.roughness; - this.metalness = source.metalness; - - this.map = source.map; - - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - - this.emissive.copy(source.emissive); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.roughnessMap = source.roughnessMap; - - this.metalnessMap = source.metalnessMap; - - this.alphaMap = source.alphaMap; - - this.envMap = source.envMap; - this.envMapRotation.copy(source.envMapRotation); - this.envMapIntensity = source.envMapIntensity; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - - this.flatShading = source.flatShading; - - this.fog = source.fog; - - return this; - } -} - -class MeshPhysicalMaterial extends MeshStandardMaterial { - constructor(parameters) { - super(); - - this.isMeshPhysicalMaterial = true; - - this.defines = { - STANDARD: '', - PHYSICAL: '', - }; - - this.type = 'MeshPhysicalMaterial'; - - this.anisotropyRotation = 0; - this.anisotropyMap = null; - - this.clearcoatMap = null; - this.clearcoatRoughness = 0.0; - this.clearcoatRoughnessMap = null; - this.clearcoatNormalScale = new Vector2(1, 1); - this.clearcoatNormalMap = null; - - this.ior = 1.5; - - Object.defineProperty(this, 'reflectivity', { - get: function () { - return clamp$1((2.5 * (this.ior - 1)) / (this.ior + 1), 0, 1); - }, - set: function (reflectivity) { - this.ior = (1 + 0.4 * reflectivity) / (1 - 0.4 * reflectivity); - }, - }); - - this.iridescenceMap = null; - this.iridescenceIOR = 1.3; - this.iridescenceThicknessRange = [100, 400]; - this.iridescenceThicknessMap = null; - - this.sheenColor = new Color(0x000000); - this.sheenColorMap = null; - this.sheenRoughness = 1.0; - this.sheenRoughnessMap = null; - - this.transmissionMap = null; - - this.thickness = 0; - this.thicknessMap = null; - this.attenuationDistance = Infinity; - this.attenuationColor = new Color(1, 1, 1); - - this.specularIntensity = 1.0; - this.specularIntensityMap = null; - this.specularColor = new Color(1, 1, 1); - this.specularColorMap = null; - - this._anisotropy = 0; - this._clearcoat = 0; - this._dispersion = 0; - this._iridescence = 0; - this._sheen = 0.0; - this._transmission = 0; - - this.setValues(parameters); - } - - get anisotropy() { - return this._anisotropy; - } - - set anisotropy(value) { - if (this._anisotropy > 0 !== value > 0) { - this.version++; - } - - this._anisotropy = value; - } - - get clearcoat() { - return this._clearcoat; - } - - set clearcoat(value) { - if (this._clearcoat > 0 !== value > 0) { - this.version++; - } - - this._clearcoat = value; - } - - get iridescence() { - return this._iridescence; - } - - set iridescence(value) { - if (this._iridescence > 0 !== value > 0) { - this.version++; - } - - this._iridescence = value; - } - - get dispersion() { - return this._dispersion; - } - - set dispersion(value) { - if (this._dispersion > 0 !== value > 0) { - this.version++; - } - - this._dispersion = value; - } - - get sheen() { - return this._sheen; - } - - set sheen(value) { - if (this._sheen > 0 !== value > 0) { - this.version++; - } - - this._sheen = value; - } - - get transmission() { - return this._transmission; - } - - set transmission(value) { - if (this._transmission > 0 !== value > 0) { - this.version++; - } - - this._transmission = value; - } - - copy(source) { - super.copy(source); - - this.defines = { - STANDARD: '', - PHYSICAL: '', - }; - - this.anisotropy = source.anisotropy; - this.anisotropyRotation = source.anisotropyRotation; - this.anisotropyMap = source.anisotropyMap; - - this.clearcoat = source.clearcoat; - this.clearcoatMap = source.clearcoatMap; - this.clearcoatRoughness = source.clearcoatRoughness; - this.clearcoatRoughnessMap = source.clearcoatRoughnessMap; - this.clearcoatNormalMap = source.clearcoatNormalMap; - this.clearcoatNormalScale.copy(source.clearcoatNormalScale); - - this.dispersion = source.dispersion; - this.ior = source.ior; - - this.iridescence = source.iridescence; - this.iridescenceMap = source.iridescenceMap; - this.iridescenceIOR = source.iridescenceIOR; - this.iridescenceThicknessRange = [...source.iridescenceThicknessRange]; - this.iridescenceThicknessMap = source.iridescenceThicknessMap; - - this.sheen = source.sheen; - this.sheenColor.copy(source.sheenColor); - this.sheenColorMap = source.sheenColorMap; - this.sheenRoughness = source.sheenRoughness; - this.sheenRoughnessMap = source.sheenRoughnessMap; - - this.transmission = source.transmission; - this.transmissionMap = source.transmissionMap; - - this.thickness = source.thickness; - this.thicknessMap = source.thicknessMap; - this.attenuationDistance = source.attenuationDistance; - this.attenuationColor.copy(source.attenuationColor); - - this.specularIntensity = source.specularIntensity; - this.specularIntensityMap = source.specularIntensityMap; - this.specularColor.copy(source.specularColor); - this.specularColorMap = source.specularColorMap; - - return this; - } -} - -class MeshPhongMaterial extends Material { - constructor(parameters) { - super(); - - this.isMeshPhongMaterial = true; - - this.type = 'MeshPhongMaterial'; - - this.color = new Color(0xffffff); // diffuse - this.specular = new Color(0x111111); - this.shininess = 30; - - this.map = null; - - this.lightMap = null; - this.lightMapIntensity = 1.0; - - this.aoMap = null; - this.aoMapIntensity = 1.0; - - this.emissive = new Color(0x000000); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.specularMap = null; - - this.alphaMap = null; - - this.envMap = null; - this.envMapRotation = new Euler(); - this.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.flatShading = false; - - this.fog = true; - - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - - this.color.copy(source.color); - this.specular.copy(source.specular); - this.shininess = source.shininess; - - this.map = source.map; - - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - - this.emissive.copy(source.emissive); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.specularMap = source.specularMap; - - this.alphaMap = source.alphaMap; - - this.envMap = source.envMap; - this.envMapRotation.copy(source.envMapRotation); - this.combine = source.combine; - this.reflectivity = source.reflectivity; - this.refractionRatio = source.refractionRatio; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - - this.flatShading = source.flatShading; - - this.fog = source.fog; - - return this; - } -} - -class MeshToonMaterial extends Material { - constructor(parameters) { - super(); - - this.isMeshToonMaterial = true; - - this.defines = { TOON: '' }; - - this.type = 'MeshToonMaterial'; - - this.color = new Color(0xffffff); - - this.map = null; - this.gradientMap = null; - - this.lightMap = null; - this.lightMapIntensity = 1.0; - - this.aoMap = null; - this.aoMapIntensity = 1.0; - - this.emissive = new Color(0x000000); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.alphaMap = null; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.fog = true; - - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - - this.color.copy(source.color); - - this.map = source.map; - this.gradientMap = source.gradientMap; - - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - - this.emissive.copy(source.emissive); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.alphaMap = source.alphaMap; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - - this.fog = source.fog; - - return this; - } -} - -class MeshNormalMaterial extends Material { - constructor(parameters) { - super(); - - this.isMeshNormalMaterial = true; - - this.type = 'MeshNormalMaterial'; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.wireframe = false; - this.wireframeLinewidth = 1; - - this.flatShading = false; - - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - - this.flatShading = source.flatShading; - - return this; - } -} - -class MeshLambertMaterial extends Material { - constructor(parameters) { - super(); - - this.isMeshLambertMaterial = true; - - this.type = 'MeshLambertMaterial'; - - this.color = new Color(0xffffff); // diffuse - - this.map = null; - - this.lightMap = null; - this.lightMapIntensity = 1.0; - - this.aoMap = null; - this.aoMapIntensity = 1.0; - - this.emissive = new Color(0x000000); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.specularMap = null; - - this.alphaMap = null; - - this.envMap = null; - this.envMapRotation = new Euler(); - this.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.flatShading = false; - - this.fog = true; - - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - - this.color.copy(source.color); - - this.map = source.map; - - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - - this.emissive.copy(source.emissive); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.specularMap = source.specularMap; - - this.alphaMap = source.alphaMap; - - this.envMap = source.envMap; - this.envMapRotation.copy(source.envMapRotation); - this.combine = source.combine; - this.reflectivity = source.reflectivity; - this.refractionRatio = source.refractionRatio; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - - this.flatShading = source.flatShading; - - this.fog = source.fog; - - return this; - } -} - -class MeshDepthMaterial extends Material { - constructor(parameters) { - super(); - - this.isMeshDepthMaterial = true; - - this.type = 'MeshDepthMaterial'; - - this.depthPacking = BasicDepthPacking; - - this.map = null; - - this.alphaMap = null; - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.wireframe = false; - this.wireframeLinewidth = 1; - - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - - this.depthPacking = source.depthPacking; - - this.map = source.map; - - this.alphaMap = source.alphaMap; - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - - return this; - } -} - -class MeshDistanceMaterial extends Material { - constructor(parameters) { - super(); - - this.isMeshDistanceMaterial = true; - - this.type = 'MeshDistanceMaterial'; - - this.map = null; - - this.alphaMap = null; - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - - this.map = source.map; - - this.alphaMap = source.alphaMap; - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - return this; - } -} - -class MeshMatcapMaterial extends Material { - constructor(parameters) { - super(); - - this.isMeshMatcapMaterial = true; - - this.defines = { MATCAP: '' }; - - this.type = 'MeshMatcapMaterial'; - - this.color = new Color(0xffffff); // diffuse - - this.matcap = null; - - this.map = null; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.alphaMap = null; - - this.flatShading = false; - - this.fog = true; - - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - - this.defines = { MATCAP: '' }; - - this.color.copy(source.color); - - this.matcap = source.matcap; - - this.map = source.map; - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.alphaMap = source.alphaMap; - - this.flatShading = source.flatShading; - - this.fog = source.fog; - - return this; - } -} - -class LineDashedMaterial extends LineBasicMaterial { - constructor(parameters) { - super(); - - this.isLineDashedMaterial = true; - - this.type = 'LineDashedMaterial'; - - this.scale = 1; - this.dashSize = 3; - this.gapSize = 1; - - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - - this.scale = source.scale; - this.dashSize = source.dashSize; - this.gapSize = source.gapSize; - - return this; - } -} - -// converts an array to a specific type -function convertArray(array, type, forceClone) { - if ( - !array || // let 'undefined' and 'null' pass - (!forceClone && array.constructor === type) - ) - return array; - - if (typeof type.BYTES_PER_ELEMENT === 'number') { - return new type(array); // create typed array - } - - return Array.prototype.slice.call(array); // create Array -} - -function isTypedArray(object) { - return ArrayBuffer.isView(object) && !(object instanceof DataView); -} - -// returns an array by which times and values can be sorted -function getKeyframeOrder(times) { - function compareTime(i, j) { - return times[i] - times[j]; - } - - const n = times.length; - const result = new Array(n); - for (let i = 0; i !== n; ++i) result[i] = i; - - result.sort(compareTime); - - return result; -} - -// uses the array previously returned by 'getKeyframeOrder' to sort data -function sortedArray(values, stride, order) { - const nValues = values.length; - const result = new values.constructor(nValues); - - for (let i = 0, dstOffset = 0; dstOffset !== nValues; ++i) { - const srcOffset = order[i] * stride; - - for (let j = 0; j !== stride; ++j) { - result[dstOffset++] = values[srcOffset + j]; - } - } - - return result; -} - -// function for parsing AOS keyframe formats -function flattenJSON(jsonKeys, times, values, valuePropertyName) { - let i = 1, - key = jsonKeys[0]; - - while (key !== undefined && key[valuePropertyName] === undefined) { - key = jsonKeys[i++]; - } - - if (key === undefined) return; // no data - - let value = key[valuePropertyName]; - if (value === undefined) return; // no data - - if (Array.isArray(value)) { - do { - value = key[valuePropertyName]; - - if (value !== undefined) { - times.push(key.time); - values.push.apply(values, value); // push all elements - } - - key = jsonKeys[i++]; - } while (key !== undefined); - } else if (value.toArray !== undefined) { - // ...assume THREE.Math-ish - - do { - value = key[valuePropertyName]; - - if (value !== undefined) { - times.push(key.time); - value.toArray(values, values.length); - } - - key = jsonKeys[i++]; - } while (key !== undefined); - } else { - // otherwise push as-is - - do { - value = key[valuePropertyName]; - - if (value !== undefined) { - times.push(key.time); - values.push(value); - } - - key = jsonKeys[i++]; - } while (key !== undefined); - } -} - -function subclip(sourceClip, name, startFrame, endFrame, fps = 30) { - const clip = sourceClip.clone(); - - clip.name = name; - - const tracks = []; - - for (let i = 0; i < clip.tracks.length; ++i) { - const track = clip.tracks[i]; - const valueSize = track.getValueSize(); - - const times = []; - const values = []; - - for (let j = 0; j < track.times.length; ++j) { - const frame = track.times[j] * fps; - - if (frame < startFrame || frame >= endFrame) continue; - - times.push(track.times[j]); - - for (let k = 0; k < valueSize; ++k) { - values.push(track.values[j * valueSize + k]); - } - } - - if (times.length === 0) continue; - - track.times = convertArray(times, track.times.constructor); - track.values = convertArray(values, track.values.constructor); - - tracks.push(track); - } - - clip.tracks = tracks; - - // find minimum .times value across all tracks in the trimmed clip - - let minStartTime = Infinity; - - for (let i = 0; i < clip.tracks.length; ++i) { - if (minStartTime > clip.tracks[i].times[0]) { - minStartTime = clip.tracks[i].times[0]; - } - } - - // shift all tracks such that clip begins at t=0 - - for (let i = 0; i < clip.tracks.length; ++i) { - clip.tracks[i].shift(-1 * minStartTime); - } - - clip.resetDuration(); - - return clip; -} - -function makeClipAdditive(targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30) { - if (fps <= 0) fps = 30; - - const numTracks = referenceClip.tracks.length; - const referenceTime = referenceFrame / fps; - - // Make each track's values relative to the values at the reference frame - for (let i = 0; i < numTracks; ++i) { - const referenceTrack = referenceClip.tracks[i]; - const referenceTrackType = referenceTrack.ValueTypeName; - - // Skip this track if it's non-numeric - if (referenceTrackType === 'bool' || referenceTrackType === 'string') continue; - - // Find the track in the target clip whose name and type matches the reference track - const targetTrack = targetClip.tracks.find(function (track) { - return track.name === referenceTrack.name && track.ValueTypeName === referenceTrackType; - }); - - if (targetTrack === undefined) continue; - - let referenceOffset = 0; - const referenceValueSize = referenceTrack.getValueSize(); - - if (referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) { - referenceOffset = referenceValueSize / 3; - } - - let targetOffset = 0; - const targetValueSize = targetTrack.getValueSize(); - - if (targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) { - targetOffset = targetValueSize / 3; - } - - const lastIndex = referenceTrack.times.length - 1; - let referenceValue; - - // Find the value to subtract out of the track - if (referenceTime <= referenceTrack.times[0]) { - // Reference frame is earlier than the first keyframe, so just use the first keyframe - const startIndex = referenceOffset; - const endIndex = referenceValueSize - referenceOffset; - referenceValue = referenceTrack.values.slice(startIndex, endIndex); - } else if (referenceTime >= referenceTrack.times[lastIndex]) { - // Reference frame is after the last keyframe, so just use the last keyframe - const startIndex = lastIndex * referenceValueSize + referenceOffset; - const endIndex = startIndex + referenceValueSize - referenceOffset; - referenceValue = referenceTrack.values.slice(startIndex, endIndex); - } else { - // Interpolate to the reference value - const interpolant = referenceTrack.createInterpolant(); - const startIndex = referenceOffset; - const endIndex = referenceValueSize - referenceOffset; - interpolant.evaluate(referenceTime); - referenceValue = interpolant.resultBuffer.slice(startIndex, endIndex); - } - - // Conjugate the quaternion - if (referenceTrackType === 'quaternion') { - const referenceQuat = new Quaternion().fromArray(referenceValue).normalize().conjugate(); - referenceQuat.toArray(referenceValue); - } - - // Subtract the reference value from all of the track values - - const numTimes = targetTrack.times.length; - for (let j = 0; j < numTimes; ++j) { - const valueStart = j * targetValueSize + targetOffset; - - if (referenceTrackType === 'quaternion') { - // Multiply the conjugate for quaternion track types - Quaternion.multiplyQuaternionsFlat(targetTrack.values, valueStart, referenceValue, 0, targetTrack.values, valueStart); - } else { - const valueEnd = targetValueSize - targetOffset * 2; - - // Subtract each value for all other numeric track types - for (let k = 0; k < valueEnd; ++k) { - targetTrack.values[valueStart + k] -= referenceValue[k]; - } - } - } - } - - targetClip.blendMode = AdditiveAnimationBlendMode; - - return targetClip; -} - -const AnimationUtils = { - convertArray: convertArray, - isTypedArray: isTypedArray, - getKeyframeOrder: getKeyframeOrder, - sortedArray: sortedArray, - flattenJSON: flattenJSON, - subclip: subclip, - makeClipAdditive: makeClipAdditive, -}; - -/** - * Abstract base class of interpolants over parametric samples. - * - * The parameter domain is one dimensional, typically the time or a path - * along a curve defined by the data. - * - * The sample values can have any dimensionality and derived classes may - * apply special interpretations to the data. - * - * This class provides the interval seek in a Template Method, deferring - * the actual interpolation to derived classes. - * - * Time complexity is O(1) for linear access crossing at most two points - * and O(log N) for random access, where N is the number of positions. - * - * References: - * - * http://www.oodesign.com/template-method-pattern.html - * - */ - -class Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - this.parameterPositions = parameterPositions; - this._cachedIndex = 0; - - this.resultBuffer = resultBuffer !== undefined ? resultBuffer : new sampleValues.constructor(sampleSize); - this.sampleValues = sampleValues; - this.valueSize = sampleSize; - - this.settings = null; - this.DefaultSettings_ = {}; - } - - evaluate(t) { - const pp = this.parameterPositions; - let i1 = this._cachedIndex, - t1 = pp[i1], - t0 = pp[i1 - 1]; - - validate_interval: { - seek: { - let right; - - linear_scan: { - //- See http://jsperf.com/comparison-to-undefined/3 - //- slower code: - //- - //- if ( t >= t1 || t1 === undefined ) { - forward_scan: if (!(t < t1)) { - for (let giveUpAt = i1 + 2; ; ) { - if (t1 === undefined) { - if (t < t0) break forward_scan; - - // after end - - i1 = pp.length; - this._cachedIndex = i1; - return this.copySampleValue_(i1 - 1); - } - - if (i1 === giveUpAt) break; // this loop - - t0 = t1; - t1 = pp[++i1]; - - if (t < t1) { - // we have arrived at the sought interval - break seek; - } - } - - // prepare binary search on the right side of the index - right = pp.length; - break linear_scan; - } - - //- slower code: - //- if ( t < t0 || t0 === undefined ) { - if (!(t >= t0)) { - // looping? - - const t1global = pp[1]; - - if (t < t1global) { - i1 = 2; // + 1, using the scan for the details - t0 = t1global; - } - - // linear reverse scan - - for (let giveUpAt = i1 - 2; ; ) { - if (t0 === undefined) { - // before start - - this._cachedIndex = 0; - return this.copySampleValue_(0); - } - - if (i1 === giveUpAt) break; // this loop - - t1 = t0; - t0 = pp[--i1 - 1]; - - if (t >= t0) { - // we have arrived at the sought interval - break seek; - } - } - - // prepare binary search on the left side of the index - right = i1; - i1 = 0; - break linear_scan; - } - - // the interval is valid - - break validate_interval; - } // linear scan - - // binary search - - while (i1 < right) { - const mid = (i1 + right) >>> 1; - - if (t < pp[mid]) { - right = mid; - } else { - i1 = mid + 1; - } - } - - t1 = pp[i1]; - t0 = pp[i1 - 1]; - - // check boundary cases, again - - if (t0 === undefined) { - this._cachedIndex = 0; - return this.copySampleValue_(0); - } - - if (t1 === undefined) { - i1 = pp.length; - this._cachedIndex = i1; - return this.copySampleValue_(i1 - 1); - } - } // seek - - this._cachedIndex = i1; - - this.intervalChanged_(i1, t0, t1); - } // validate_interval - - return this.interpolate_(i1, t0, t, t1); - } - - getSettings_() { - return this.settings || this.DefaultSettings_; - } - - copySampleValue_(index) { - // copies a sample value to the result buffer - - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - offset = index * stride; - - for (let i = 0; i !== stride; ++i) { - result[i] = values[offset + i]; - } - - return result; - } - - // Template methods for derived classes: - - interpolate_(/* i1, t0, t, t1 */) { - throw new Error('call to abstract method'); - // implementations shall return this.resultBuffer - } - - intervalChanged_(/* i1, t0, t1 */) { - // empty - } -} - -/** - * Fast and simple cubic spline interpolant. - * - * It was derived from a Hermitian construction setting the first derivative - * at each sample position to the linear slope between neighboring positions - * over their parameter interval. - */ - -class CubicInterpolant extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - - this._weightPrev = -0; - this._offsetPrev = -0; - this._weightNext = -0; - this._offsetNext = -0; - - this.DefaultSettings_ = { - endingStart: ZeroCurvatureEnding, - endingEnd: ZeroCurvatureEnding, - }; - } - - intervalChanged_(i1, t0, t1) { - const pp = this.parameterPositions; - let iPrev = i1 - 2, - iNext = i1 + 1, - tPrev = pp[iPrev], - tNext = pp[iNext]; - - if (tPrev === undefined) { - switch (this.getSettings_().endingStart) { - case ZeroSlopeEnding: - // f'(t0) = 0 - iPrev = i1; - tPrev = 2 * t0 - t1; - - break; - - case WrapAroundEnding: - // use the other end of the curve - iPrev = pp.length - 2; - tPrev = t0 + pp[iPrev] - pp[iPrev + 1]; - - break; - - default: // ZeroCurvatureEnding - // f''(t0) = 0 a.k.a. Natural Spline - iPrev = i1; - tPrev = t1; - } - } - - if (tNext === undefined) { - switch (this.getSettings_().endingEnd) { - case ZeroSlopeEnding: - // f'(tN) = 0 - iNext = i1; - tNext = 2 * t1 - t0; - - break; - - case WrapAroundEnding: - // use the other end of the curve - iNext = 1; - tNext = t1 + pp[1] - pp[0]; - - break; - - default: // ZeroCurvatureEnding - // f''(tN) = 0, a.k.a. Natural Spline - iNext = i1 - 1; - tNext = t0; - } - } - - const halfDt = (t1 - t0) * 0.5, - stride = this.valueSize; - - this._weightPrev = halfDt / (t0 - tPrev); - this._weightNext = halfDt / (tNext - t1); - this._offsetPrev = iPrev * stride; - this._offsetNext = iNext * stride; - } - - interpolate_(i1, t0, t, t1) { - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - o1 = i1 * stride, - o0 = o1 - stride, - oP = this._offsetPrev, - oN = this._offsetNext, - wP = this._weightPrev, - wN = this._weightNext, - p = (t - t0) / (t1 - t0), - pp = p * p, - ppp = pp * p; - - // evaluate polynomials - - const sP = -wP * ppp + 2 * wP * pp - wP * p; - const s0 = (1 + wP) * ppp + (-1.5 - 2 * wP) * pp + (-0.5 + wP) * p + 1; - const s1 = (-1 - wN) * ppp + (1.5 + wN) * pp + 0.5 * p; - const sN = wN * ppp - wN * pp; - - // combine data linearly - - for (let i = 0; i !== stride; ++i) { - result[i] = sP * values[oP + i] + s0 * values[o0 + i] + s1 * values[o1 + i] + sN * values[oN + i]; - } - - return result; - } -} - -class LinearInterpolant extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - } - - interpolate_(i1, t0, t, t1) { - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - offset1 = i1 * stride, - offset0 = offset1 - stride, - weight1 = (t - t0) / (t1 - t0), - weight0 = 1 - weight1; - - for (let i = 0; i !== stride; ++i) { - result[i] = values[offset0 + i] * weight0 + values[offset1 + i] * weight1; - } - - return result; - } -} - -/** - * - * Interpolant that evaluates to the sample value at the position preceding - * the parameter. - */ - -class DiscreteInterpolant extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - } - - interpolate_(i1 /*, t0, t, t1 */) { - return this.copySampleValue_(i1 - 1); - } -} - -class KeyframeTrack { - constructor(name, times, values, interpolation) { - if (name === undefined) throw new Error('THREE.KeyframeTrack: track name is undefined'); - if (times === undefined || times.length === 0) throw new Error('THREE.KeyframeTrack: no keyframes in track named ' + name); - - this.name = name; - - this.times = convertArray(times, this.TimeBufferType); - this.values = convertArray(values, this.ValueBufferType); - - this.setInterpolation(interpolation || this.DefaultInterpolation); - } - - // Serialization (in static context, because of constructor invocation - // and automatic invocation of .toJSON): - - static toJSON(track) { - const trackType = track.constructor; - - let json; - - // derived classes can define a static toJSON method - if (trackType.toJSON !== this.toJSON) { - json = trackType.toJSON(track); - } else { - // by default, we assume the data can be serialized as-is - json = { - name: track.name, - times: convertArray(track.times, Array), - values: convertArray(track.values, Array), - }; - - const interpolation = track.getInterpolation(); - - if (interpolation !== track.DefaultInterpolation) { - json.interpolation = interpolation; - } - } - - json.type = track.ValueTypeName; // mandatory - - return json; - } - - InterpolantFactoryMethodDiscrete(result) { - return new DiscreteInterpolant(this.times, this.values, this.getValueSize(), result); - } - - InterpolantFactoryMethodLinear(result) { - return new LinearInterpolant(this.times, this.values, this.getValueSize(), result); - } - - InterpolantFactoryMethodSmooth(result) { - return new CubicInterpolant(this.times, this.values, this.getValueSize(), result); - } - - setInterpolation(interpolation) { - let factoryMethod; - - switch (interpolation) { - case InterpolateDiscrete: - factoryMethod = this.InterpolantFactoryMethodDiscrete; - - break; - - case InterpolateLinear: - factoryMethod = this.InterpolantFactoryMethodLinear; - - break; - - case InterpolateSmooth: - factoryMethod = this.InterpolantFactoryMethodSmooth; - - break; - } - - if (factoryMethod === undefined) { - const message = 'unsupported interpolation for ' + this.ValueTypeName + ' keyframe track named ' + this.name; - - if (this.createInterpolant === undefined) { - // fall back to default, unless the default itself is messed up - if (interpolation !== this.DefaultInterpolation) { - this.setInterpolation(this.DefaultInterpolation); - } else { - throw new Error(message); // fatal, in this case - } - } - - console.warn('THREE.KeyframeTrack:', message); - return this; - } - - this.createInterpolant = factoryMethod; - - return this; - } - - getInterpolation() { - switch (this.createInterpolant) { - case this.InterpolantFactoryMethodDiscrete: - return InterpolateDiscrete; - - case this.InterpolantFactoryMethodLinear: - return InterpolateLinear; - - case this.InterpolantFactoryMethodSmooth: - return InterpolateSmooth; - } - } - - getValueSize() { - return this.values.length / this.times.length; - } - - // move all keyframes either forwards or backwards in time - shift(timeOffset) { - if (timeOffset !== 0.0) { - const times = this.times; - - for (let i = 0, n = times.length; i !== n; ++i) { - times[i] += timeOffset; - } - } - - return this; - } - - // scale all keyframe times by a factor (useful for frame <-> seconds conversions) - scale(timeScale) { - if (timeScale !== 1.0) { - const times = this.times; - - for (let i = 0, n = times.length; i !== n; ++i) { - times[i] *= timeScale; - } - } - - return this; - } - - // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. - // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values - trim(startTime, endTime) { - const times = this.times, - nKeys = times.length; - - let from = 0, - to = nKeys - 1; - - while (from !== nKeys && times[from] < startTime) { - ++from; - } - - while (to !== -1 && times[to] > endTime) { - --to; - } - - ++to; // inclusive -> exclusive bound - - if (from !== 0 || to !== nKeys) { - // empty tracks are forbidden, so keep at least one keyframe - if (from >= to) { - to = Math.max(to, 1); - from = to - 1; - } - - const stride = this.getValueSize(); - this.times = times.slice(from, to); - this.values = this.values.slice(from * stride, to * stride); - } - - return this; - } - - // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable - validate() { - let valid = true; - - const valueSize = this.getValueSize(); - if (valueSize - Math.floor(valueSize) !== 0) { - console.error('THREE.KeyframeTrack: Invalid value size in track.', this); - valid = false; - } - - const times = this.times, - values = this.values, - nKeys = times.length; - - if (nKeys === 0) { - console.error('THREE.KeyframeTrack: Track is empty.', this); - valid = false; - } - - let prevTime = null; - - for (let i = 0; i !== nKeys; i++) { - const currTime = times[i]; - - if (typeof currTime === 'number' && isNaN(currTime)) { - console.error('THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime); - valid = false; - break; - } - - if (prevTime !== null && prevTime > currTime) { - console.error('THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime); - valid = false; - break; - } - - prevTime = currTime; - } - - if (values !== undefined) { - if (isTypedArray(values)) { - for (let i = 0, n = values.length; i !== n; ++i) { - const value = values[i]; - - if (isNaN(value)) { - console.error('THREE.KeyframeTrack: Value is not a valid number.', this, i, value); - valid = false; - break; - } - } - } - } - - return valid; - } - - // removes equivalent sequential keys as common in morph target sequences - // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) - optimize() { - // times or values may be shared with other tracks, so overwriting is unsafe - const times = this.times.slice(), - values = this.values.slice(), - stride = this.getValueSize(), - smoothInterpolation = this.getInterpolation() === InterpolateSmooth, - lastIndex = times.length - 1; - - let writeIndex = 1; - - for (let i = 1; i < lastIndex; ++i) { - let keep = false; - - const time = times[i]; - const timeNext = times[i + 1]; - - // remove adjacent keyframes scheduled at the same time - - if (time !== timeNext && (i !== 1 || time !== times[0])) { - if (!smoothInterpolation) { - // remove unnecessary keyframes same as their neighbors - - const offset = i * stride, - offsetP = offset - stride, - offsetN = offset + stride; - - for (let j = 0; j !== stride; ++j) { - const value = values[offset + j]; - - if (value !== values[offsetP + j] || value !== values[offsetN + j]) { - keep = true; - break; - } - } - } else { - keep = true; - } - } - - // in-place compaction - - if (keep) { - if (i !== writeIndex) { - times[writeIndex] = times[i]; - - const readOffset = i * stride, - writeOffset = writeIndex * stride; - - for (let j = 0; j !== stride; ++j) { - values[writeOffset + j] = values[readOffset + j]; - } - } - - ++writeIndex; - } - } - - // flush last keyframe (compaction looks ahead) - - if (lastIndex > 0) { - times[writeIndex] = times[lastIndex]; - - for (let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++j) { - values[writeOffset + j] = values[readOffset + j]; - } - - ++writeIndex; - } - - if (writeIndex !== times.length) { - this.times = times.slice(0, writeIndex); - this.values = values.slice(0, writeIndex * stride); - } else { - this.times = times; - this.values = values; - } - - return this; - } - - clone() { - const times = this.times.slice(); - const values = this.values.slice(); - - const TypedKeyframeTrack = this.constructor; - const track = new TypedKeyframeTrack(this.name, times, values); - - // Interpolant argument to constructor is not saved, so copy the factory method directly. - track.createInterpolant = this.createInterpolant; - - return track; - } -} - -KeyframeTrack.prototype.TimeBufferType = Float32Array; -KeyframeTrack.prototype.ValueBufferType = Float32Array; -KeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear; - -/** - * A Track of Boolean keyframe values. - */ -class BooleanKeyframeTrack extends KeyframeTrack { - // No interpolation parameter because only InterpolateDiscrete is valid. - constructor(name, times, values) { - super(name, times, values); - } -} - -BooleanKeyframeTrack.prototype.ValueTypeName = 'bool'; -BooleanKeyframeTrack.prototype.ValueBufferType = Array; -BooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete; -BooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined; -BooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined; - -/** - * A Track of keyframe values that represent color. - */ -class ColorKeyframeTrack extends KeyframeTrack {} - -ColorKeyframeTrack.prototype.ValueTypeName = 'color'; - -/** - * A Track of numeric keyframe values. - */ -class NumberKeyframeTrack extends KeyframeTrack {} - -NumberKeyframeTrack.prototype.ValueTypeName = 'number'; - -/** - * Spherical linear unit quaternion interpolant. - */ - -class QuaternionLinearInterpolant extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - } - - interpolate_(i1, t0, t, t1) { - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - alpha = (t - t0) / (t1 - t0); - - let offset = i1 * stride; - - for (let end = offset + stride; offset !== end; offset += 4) { - Quaternion.slerpFlat(result, 0, values, offset - stride, values, offset, alpha); - } - - return result; - } -} - -/** - * A Track of quaternion keyframe values. - */ -class QuaternionKeyframeTrack extends KeyframeTrack { - InterpolantFactoryMethodLinear(result) { - return new QuaternionLinearInterpolant(this.times, this.values, this.getValueSize(), result); - } -} - -QuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion'; -// ValueBufferType is inherited -// DefaultInterpolation is inherited; -QuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined; - -/** - * A Track that interpolates Strings - */ -class StringKeyframeTrack extends KeyframeTrack { - // No interpolation parameter because only InterpolateDiscrete is valid. - constructor(name, times, values) { - super(name, times, values); - } -} - -StringKeyframeTrack.prototype.ValueTypeName = 'string'; -StringKeyframeTrack.prototype.ValueBufferType = Array; -StringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete; -StringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined; -StringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined; - -/** - * A Track of vectored keyframe values. - */ -class VectorKeyframeTrack extends KeyframeTrack {} - -VectorKeyframeTrack.prototype.ValueTypeName = 'vector'; - -class AnimationClip { - constructor(name = '', duration = -1, tracks = [], blendMode = NormalAnimationBlendMode) { - this.name = name; - this.tracks = tracks; - this.duration = duration; - this.blendMode = blendMode; - - this.uuid = generateUUID(); - - // this means it should figure out its duration by scanning the tracks - if (this.duration < 0) { - this.resetDuration(); - } - } - - static parse(json) { - const tracks = [], - jsonTracks = json.tracks, - frameTime = 1.0 / (json.fps || 1.0); - - for (let i = 0, n = jsonTracks.length; i !== n; ++i) { - tracks.push(parseKeyframeTrack(jsonTracks[i]).scale(frameTime)); - } - - const clip = new this(json.name, json.duration, tracks, json.blendMode); - clip.uuid = json.uuid; - - return clip; - } - - static toJSON(clip) { - const tracks = [], - clipTracks = clip.tracks; - - const json = { - name: clip.name, - duration: clip.duration, - tracks: tracks, - uuid: clip.uuid, - blendMode: clip.blendMode, - }; - - for (let i = 0, n = clipTracks.length; i !== n; ++i) { - tracks.push(KeyframeTrack.toJSON(clipTracks[i])); - } - - return json; - } - - static CreateFromMorphTargetSequence(name, morphTargetSequence, fps, noLoop) { - const numMorphTargets = morphTargetSequence.length; - const tracks = []; - - for (let i = 0; i < numMorphTargets; i++) { - let times = []; - let values = []; - - times.push((i + numMorphTargets - 1) % numMorphTargets, i, (i + 1) % numMorphTargets); - - values.push(0, 1, 0); - - const order = getKeyframeOrder(times); - times = sortedArray(times, 1, order); - values = sortedArray(values, 1, order); - - // if there is a key at the first frame, duplicate it as the - // last frame as well for perfect loop. - if (!noLoop && times[0] === 0) { - times.push(numMorphTargets); - values.push(values[0]); - } - - tracks.push(new NumberKeyframeTrack('.morphTargetInfluences[' + morphTargetSequence[i].name + ']', times, values).scale(1.0 / fps)); - } - - return new this(name, -1, tracks); - } - - static findByName(objectOrClipArray, name) { - let clipArray = objectOrClipArray; - - if (!Array.isArray(objectOrClipArray)) { - const o = objectOrClipArray; - clipArray = (o.geometry && o.geometry.animations) || o.animations; - } - - for (let i = 0; i < clipArray.length; i++) { - if (clipArray[i].name === name) { - return clipArray[i]; - } - } - - return null; - } - - static CreateClipsFromMorphTargetSequences(morphTargets, fps, noLoop) { - const animationToMorphTargets = {}; - - // tested with https://regex101.com/ on trick sequences - // such flamingo_flyA_003, flamingo_run1_003, crdeath0059 - const pattern = /^([\w-]*?)([\d]+)$/; - - // sort morph target names into animation groups based - // patterns like Walk_001, Walk_002, Run_001, Run_002 - for (let i = 0, il = morphTargets.length; i < il; i++) { - const morphTarget = morphTargets[i]; - const parts = morphTarget.name.match(pattern); - - if (parts && parts.length > 1) { - const name = parts[1]; - - let animationMorphTargets = animationToMorphTargets[name]; - - if (!animationMorphTargets) { - animationToMorphTargets[name] = animationMorphTargets = []; - } - - animationMorphTargets.push(morphTarget); - } - } - - const clips = []; - - for (const name in animationToMorphTargets) { - clips.push(this.CreateFromMorphTargetSequence(name, animationToMorphTargets[name], fps, noLoop)); - } - - return clips; - } - - // parse the animation.hierarchy format - static parseAnimation(animation, bones) { - if (!animation) { - console.error('THREE.AnimationClip: No animation in JSONLoader data.'); - return null; - } - - const addNonemptyTrack = function (trackType, trackName, animationKeys, propertyName, destTracks) { - // only return track if there are actually keys. - if (animationKeys.length !== 0) { - const times = []; - const values = []; - - flattenJSON(animationKeys, times, values, propertyName); - - // empty keys are filtered out, so check again - if (times.length !== 0) { - destTracks.push(new trackType(trackName, times, values)); - } - } - }; - - const tracks = []; - - const clipName = animation.name || 'default'; - const fps = animation.fps || 30; - const blendMode = animation.blendMode; - - // automatic length determination in AnimationClip. - let duration = animation.length || -1; - - const hierarchyTracks = animation.hierarchy || []; - - for (let h = 0; h < hierarchyTracks.length; h++) { - const animationKeys = hierarchyTracks[h].keys; - - // skip empty tracks - if (!animationKeys || animationKeys.length === 0) continue; - - // process morph targets - if (animationKeys[0].morphTargets) { - // figure out all morph targets used in this track - const morphTargetNames = {}; - - let k; - - for (k = 0; k < animationKeys.length; k++) { - if (animationKeys[k].morphTargets) { - for (let m = 0; m < animationKeys[k].morphTargets.length; m++) { - morphTargetNames[animationKeys[k].morphTargets[m]] = -1; - } - } - } - - // create a track for each morph target with all zero - // morphTargetInfluences except for the keys in which - // the morphTarget is named. - for (const morphTargetName in morphTargetNames) { - const times = []; - const values = []; - - for (let m = 0; m !== animationKeys[k].morphTargets.length; ++m) { - const animationKey = animationKeys[k]; - - times.push(animationKey.time); - values.push(animationKey.morphTarget === morphTargetName ? 1 : 0); - } - - tracks.push(new NumberKeyframeTrack('.morphTargetInfluence[' + morphTargetName + ']', times, values)); - } - - duration = morphTargetNames.length * fps; - } else { - // ...assume skeletal animation - - const boneName = '.bones[' + bones[h].name + ']'; - - addNonemptyTrack(VectorKeyframeTrack, boneName + '.position', animationKeys, 'pos', tracks); - - addNonemptyTrack(QuaternionKeyframeTrack, boneName + '.quaternion', animationKeys, 'rot', tracks); - - addNonemptyTrack(VectorKeyframeTrack, boneName + '.scale', animationKeys, 'scl', tracks); - } - } - - if (tracks.length === 0) { - return null; - } - - const clip = new this(clipName, duration, tracks, blendMode); - - return clip; - } - - resetDuration() { - const tracks = this.tracks; - let duration = 0; - - for (let i = 0, n = tracks.length; i !== n; ++i) { - const track = this.tracks[i]; - - duration = Math.max(duration, track.times[track.times.length - 1]); - } - - this.duration = duration; - - return this; - } - - trim() { - for (let i = 0; i < this.tracks.length; i++) { - this.tracks[i].trim(0, this.duration); - } - - return this; - } - - validate() { - let valid = true; - - for (let i = 0; i < this.tracks.length; i++) { - valid = valid && this.tracks[i].validate(); - } - - return valid; - } - - optimize() { - for (let i = 0; i < this.tracks.length; i++) { - this.tracks[i].optimize(); - } - - return this; - } - - clone() { - const tracks = []; - - for (let i = 0; i < this.tracks.length; i++) { - tracks.push(this.tracks[i].clone()); - } - - return new this.constructor(this.name, this.duration, tracks, this.blendMode); - } - - toJSON() { - return this.constructor.toJSON(this); - } -} - -function getTrackTypeForValueTypeName(typeName) { - switch (typeName.toLowerCase()) { - case 'scalar': - case 'double': - case 'float': - case 'number': - case 'integer': - return NumberKeyframeTrack; - - case 'vector': - case 'vector2': - case 'vector3': - case 'vector4': - return VectorKeyframeTrack; - - case 'color': - return ColorKeyframeTrack; - - case 'quaternion': - return QuaternionKeyframeTrack; - - case 'bool': - case 'boolean': - return BooleanKeyframeTrack; - - case 'string': - return StringKeyframeTrack; - } - - throw new Error('THREE.KeyframeTrack: Unsupported typeName: ' + typeName); -} - -function parseKeyframeTrack(json) { - if (json.type === undefined) { - throw new Error('THREE.KeyframeTrack: track type undefined, can not parse'); - } - - const trackType = getTrackTypeForValueTypeName(json.type); - - if (json.times === undefined) { - const times = [], - values = []; - - flattenJSON(json.keys, times, values, 'value'); - - json.times = times; - json.values = values; - } - - // derived classes can define a static parse method - if (trackType.parse !== undefined) { - return trackType.parse(json); - } else { - // by default, we assume a constructor compatible with the base - return new trackType(json.name, json.times, json.values, json.interpolation); - } -} - -const Cache = { - enabled: false, - - files: {}, - - add: function (key, file) { - if (this.enabled === false) return; - - // console.log( 'THREE.Cache', 'Adding key:', key ); - - this.files[key] = file; - }, - - get: function (key) { - if (this.enabled === false) return; - - // console.log( 'THREE.Cache', 'Checking key:', key ); - - return this.files[key]; - }, - - remove: function (key) { - delete this.files[key]; - }, - - clear: function () { - this.files = {}; - }, -}; - -class LoadingManager { - constructor(onLoad, onProgress, onError) { - const scope = this; - - let isLoading = false; - let itemsLoaded = 0; - let itemsTotal = 0; - let urlModifier = undefined; - const handlers = []; - - // Refer to #5689 for the reason why we don't set .onStart - // in the constructor - - this.onStart = undefined; - this.onLoad = onLoad; - this.onProgress = onProgress; - this.onError = onError; - - this.itemStart = function (url) { - itemsTotal++; - - if (isLoading === false) { - if (scope.onStart !== undefined) { - scope.onStart(url, itemsLoaded, itemsTotal); - } - } - - isLoading = true; - }; - - this.itemEnd = function (url) { - itemsLoaded++; - - if (scope.onProgress !== undefined) { - scope.onProgress(url, itemsLoaded, itemsTotal); - } - - if (itemsLoaded === itemsTotal) { - isLoading = false; - - if (scope.onLoad !== undefined) { - scope.onLoad(); - } - } - }; - - this.itemError = function (url) { - if (scope.onError !== undefined) { - scope.onError(url); - } - }; - - this.resolveURL = function (url) { - if (urlModifier) { - return urlModifier(url); - } - - return url; - }; - - this.setURLModifier = function (transform) { - urlModifier = transform; - - return this; - }; - - this.addHandler = function (regex, loader) { - handlers.push(regex, loader); - - return this; - }; - - this.removeHandler = function (regex) { - const index = handlers.indexOf(regex); - - if (index !== -1) { - handlers.splice(index, 2); - } - - return this; - }; - - this.getHandler = function (file) { - for (let i = 0, l = handlers.length; i < l; i += 2) { - const regex = handlers[i]; - const loader = handlers[i + 1]; - - if (regex.global) regex.lastIndex = 0; // see #17920 - - if (regex.test(file)) { - return loader; - } - } - - return null; - }; - } -} - -const DefaultLoadingManager = /*@__PURE__*/ new LoadingManager(); - -class Loader { - constructor(manager) { - this.manager = manager !== undefined ? manager : DefaultLoadingManager; - - this.crossOrigin = 'anonymous'; - this.withCredentials = false; - this.path = ''; - this.resourcePath = ''; - this.requestHeader = {}; - } - - load(/* url, onLoad, onProgress, onError */) {} - - loadAsync(url, onProgress) { - const scope = this; - - return new Promise(function (resolve, reject) { - scope.load(url, resolve, onProgress, reject); - }); - } - - parse(/* data */) {} - - setCrossOrigin(crossOrigin) { - this.crossOrigin = crossOrigin; - return this; - } - - setWithCredentials(value) { - this.withCredentials = value; - return this; - } - - setPath(path) { - this.path = path; - return this; - } - - setResourcePath(resourcePath) { - this.resourcePath = resourcePath; - return this; - } - - setRequestHeader(requestHeader) { - this.requestHeader = requestHeader; - return this; - } -} - -Loader.DEFAULT_MATERIAL_NAME = '__DEFAULT'; - -const loading = {}; - -class HttpError extends Error { - constructor(message, response) { - super(message); - this.response = response; - } -} - -class FileLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - if (url === undefined) url = ''; - - if (this.path !== undefined) url = this.path + url; - - url = this.manager.resolveURL(url); - - const cached = Cache.get(url); - - if (cached !== undefined) { - this.manager.itemStart(url); - - setTimeout(() => { - if (onLoad) onLoad(cached); - - this.manager.itemEnd(url); - }, 0); - - return cached; - } - - // Check if request is duplicate - - if (loading[url] !== undefined) { - loading[url].push({ - onLoad: onLoad, - onProgress: onProgress, - onError: onError, - }); - - return; - } - - // Initialise array for duplicate requests - loading[url] = []; - - loading[url].push({ - onLoad: onLoad, - onProgress: onProgress, - onError: onError, - }); - - // create request - const req = new Request(url, { - headers: new Headers(this.requestHeader), - credentials: this.withCredentials ? 'include' : 'same-origin', - // An abort controller could be added within a future PR - }); - - // record states ( avoid data race ) - const mimeType = this.mimeType; - const responseType = this.responseType; - - // start the fetch - fetch(req) - .then((response) => { - if (response.status === 200 || response.status === 0) { - // Some browsers return HTTP Status 0 when using non-http protocol - // e.g. 'file://' or 'data://'. Handle as success. - - if (response.status === 0) { - console.warn('THREE.FileLoader: HTTP Status 0 received.'); - } - - // Workaround: Checking if response.body === undefined for Alipay browser #23548 - - if (typeof ReadableStream === 'undefined' || response.body === undefined || response.body.getReader === undefined) { - return response; - } - - const callbacks = loading[url]; - const reader = response.body.getReader(); - - // Nginx needs X-File-Size check - // https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content - const contentLength = response.headers.get('X-File-Size') || response.headers.get('Content-Length'); - const total = contentLength ? parseInt(contentLength) : 0; - const lengthComputable = total !== 0; - let loaded = 0; - - // periodically read data into the new stream tracking while download progress - const stream = new ReadableStream({ - start(controller) { - readData(); - - function readData() { - reader.read().then( - ({ done, value }) => { - if (done) { - controller.close(); - } else { - loaded += value.byteLength; - - const event = new ProgressEvent('progress', { lengthComputable, loaded, total }); - for (let i = 0, il = callbacks.length; i < il; i++) { - const callback = callbacks[i]; - if (callback.onProgress) callback.onProgress(event); - } - - controller.enqueue(value); - readData(); - } - }, - (e) => { - controller.error(e); - } - ); - } - }, - }); - - return new Response(stream); - } else { - throw new HttpError(`fetch for "${response.url}" responded with ${response.status}: ${response.statusText}`, response); - } - }) - .then((response) => { - switch (responseType) { - case 'arraybuffer': - return response.arrayBuffer(); - - case 'blob': - return response.blob(); - - case 'document': - return response.text().then((text) => { - const parser = new DOMParser(); - return parser.parseFromString(text, mimeType); - }); - - case 'json': - return response.json(); - - default: - if (mimeType === undefined) { - return response.text(); - } else { - // sniff encoding - const re = /charset="?([^;"\s]*)"?/i; - const exec = re.exec(mimeType); - const label = exec && exec[1] ? exec[1].toLowerCase() : undefined; - const decoder = new TextDecoder(label); - return response.arrayBuffer().then((ab) => decoder.decode(ab)); - } - } - }) - .then((data) => { - // Add to cache only on HTTP success, so that we do not cache - // error response bodies as proper responses to requests. - Cache.add(url, data); - - const callbacks = loading[url]; - delete loading[url]; - - for (let i = 0, il = callbacks.length; i < il; i++) { - const callback = callbacks[i]; - if (callback.onLoad) callback.onLoad(data); - } - }) - .catch((err) => { - // Abort errors and other errors are handled the same - - const callbacks = loading[url]; - - if (callbacks === undefined) { - // When onLoad was called and url was deleted in `loading` - this.manager.itemError(url); - throw err; - } - - delete loading[url]; - - for (let i = 0, il = callbacks.length; i < il; i++) { - const callback = callbacks[i]; - if (callback.onError) callback.onError(err); - } - - this.manager.itemError(url); - }) - .finally(() => { - this.manager.itemEnd(url); - }); - - this.manager.itemStart(url); - } - - setResponseType(value) { - this.responseType = value; - return this; - } - - setMimeType(value) { - this.mimeType = value; - return this; - } -} - -class AnimationLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - const scope = this; - - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load( - url, - function (text) { - try { - onLoad(scope.parse(JSON.parse(text))); - } catch (e) { - if (onError) { - onError(e); - } else { - console.error(e); - } - - scope.manager.itemError(url); - } - }, - onProgress, - onError - ); - } - - parse(json) { - const animations = []; - - for (let i = 0; i < json.length; i++) { - const clip = AnimationClip.parse(json[i]); - - animations.push(clip); - } - - return animations; - } -} - -/** - * Abstract Base class to block based textures loader (dds, pvr, ...) - * - * Sub classes have to implement the parse() method which will be used in load(). - */ - -class CompressedTextureLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - const scope = this; - - const images = []; - - const texture = new CompressedTexture(); - - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType('arraybuffer'); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(scope.withCredentials); - - let loaded = 0; - - function loadTexture(i) { - loader.load( - url[i], - function (buffer) { - const texDatas = scope.parse(buffer, true); - - images[i] = { - width: texDatas.width, - height: texDatas.height, - format: texDatas.format, - mipmaps: texDatas.mipmaps, - }; - - loaded += 1; - - if (loaded === 6) { - if (texDatas.mipmapCount === 1) texture.minFilter = LinearFilter; - - texture.image = images; - texture.format = texDatas.format; - texture.needsUpdate = true; - - if (onLoad) onLoad(texture); - } - }, - onProgress, - onError - ); - } - - if (Array.isArray(url)) { - for (let i = 0, il = url.length; i < il; ++i) { - loadTexture(i); - } - } else { - // compressed cubemap texture stored in a single DDS file - - loader.load( - url, - function (buffer) { - const texDatas = scope.parse(buffer, true); - - if (texDatas.isCubemap) { - const faces = texDatas.mipmaps.length / texDatas.mipmapCount; - - for (let f = 0; f < faces; f++) { - images[f] = { mipmaps: [] }; - - for (let i = 0; i < texDatas.mipmapCount; i++) { - images[f].mipmaps.push(texDatas.mipmaps[f * texDatas.mipmapCount + i]); - images[f].format = texDatas.format; - images[f].width = texDatas.width; - images[f].height = texDatas.height; - } - } - - texture.image = images; - } else { - texture.image.width = texDatas.width; - texture.image.height = texDatas.height; - texture.mipmaps = texDatas.mipmaps; - } - - if (texDatas.mipmapCount === 1) { - texture.minFilter = LinearFilter; - } - - texture.format = texDatas.format; - texture.needsUpdate = true; - - if (onLoad) onLoad(texture); - }, - onProgress, - onError - ); - } - - return texture; - } -} - -class ImageLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - if (this.path !== undefined) url = this.path + url; - - url = this.manager.resolveURL(url); - - const scope = this; - - const cached = Cache.get(url); - - if (cached !== undefined) { - scope.manager.itemStart(url); - - setTimeout(function () { - if (onLoad) onLoad(cached); - - scope.manager.itemEnd(url); - }, 0); - - return cached; - } - - const image = createElementNS('img'); - - function onImageLoad() { - removeEventListeners(); - - Cache.add(url, this); - - if (onLoad) onLoad(this); - - scope.manager.itemEnd(url); - } - - function onImageError(event) { - removeEventListeners(); - - if (onError) onError(event); - - scope.manager.itemError(url); - scope.manager.itemEnd(url); - } - - function removeEventListeners() { - image.removeEventListener('load', onImageLoad, false); - image.removeEventListener('error', onImageError, false); - } - - image.addEventListener('load', onImageLoad, false); - image.addEventListener('error', onImageError, false); - - if (url.slice(0, 5) !== 'data:') { - if (this.crossOrigin !== undefined) image.crossOrigin = this.crossOrigin; - } - - scope.manager.itemStart(url); - - image.src = url; - - return image; - } -} - -class CubeTextureLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(urls, onLoad, onProgress, onError) { - const texture = new CubeTexture(); - texture.colorSpace = SRGBColorSpace; - - const loader = new ImageLoader(this.manager); - loader.setCrossOrigin(this.crossOrigin); - loader.setPath(this.path); - - let loaded = 0; - - function loadTexture(i) { - loader.load( - urls[i], - function (image) { - texture.images[i] = image; - - loaded++; - - if (loaded === 6) { - texture.needsUpdate = true; - - if (onLoad) onLoad(texture); - } - }, - undefined, - onError - ); - } - - for (let i = 0; i < urls.length; ++i) { - loadTexture(i); - } - - return texture; - } -} - -/** - * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...) - * - * Sub classes have to implement the parse() method which will be used in load(). - */ - -class DataTextureLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - const scope = this; - - const texture = new DataTexture(); - - const loader = new FileLoader(this.manager); - loader.setResponseType('arraybuffer'); - loader.setRequestHeader(this.requestHeader); - loader.setPath(this.path); - loader.setWithCredentials(scope.withCredentials); - loader.load( - url, - function (buffer) { - let texData; - - try { - texData = scope.parse(buffer); - } catch (error) { - if (onError !== undefined) { - onError(error); - } else { - console.error(error); - return; - } - } - - if (texData.image !== undefined) { - texture.image = texData.image; - } else if (texData.data !== undefined) { - texture.image.width = texData.width; - texture.image.height = texData.height; - texture.image.data = texData.data; - } - - texture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping; - texture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping; - - texture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter; - texture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter; - - texture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1; - - if (texData.colorSpace !== undefined) { - texture.colorSpace = texData.colorSpace; - } - - if (texData.flipY !== undefined) { - texture.flipY = texData.flipY; - } - - if (texData.format !== undefined) { - texture.format = texData.format; - } - - if (texData.type !== undefined) { - texture.type = texData.type; - } - - if (texData.mipmaps !== undefined) { - texture.mipmaps = texData.mipmaps; - texture.minFilter = LinearMipmapLinearFilter; // presumably... - } - - if (texData.mipmapCount === 1) { - texture.minFilter = LinearFilter; - } - - if (texData.generateMipmaps !== undefined) { - texture.generateMipmaps = texData.generateMipmaps; - } - - texture.needsUpdate = true; - - if (onLoad) onLoad(texture, texData); - }, - onProgress, - onError - ); - - return texture; - } -} - -class TextureLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - const texture = new Texture(); - - const loader = new ImageLoader(this.manager); - loader.setCrossOrigin(this.crossOrigin); - loader.setPath(this.path); - - loader.load( - url, - function (image) { - texture.image = image; - texture.needsUpdate = true; - - if (onLoad !== undefined) { - onLoad(texture); - } - }, - onProgress, - onError - ); - - return texture; - } -} - -class Light extends Object3D { - constructor(color, intensity = 1) { - super(); - - this.isLight = true; - - this.type = 'Light'; - - this.color = new Color(color); - this.intensity = intensity; - } - - dispose() { - // Empty here in base class; some subclasses override. - } - - copy(source, recursive) { - super.copy(source, recursive); - - this.color.copy(source.color); - this.intensity = source.intensity; - - return this; - } - - toJSON(meta) { - const data = super.toJSON(meta); - - data.object.color = this.color.getHex(); - data.object.intensity = this.intensity; - - if (this.groundColor !== undefined) data.object.groundColor = this.groundColor.getHex(); - - if (this.distance !== undefined) data.object.distance = this.distance; - if (this.angle !== undefined) data.object.angle = this.angle; - if (this.decay !== undefined) data.object.decay = this.decay; - if (this.penumbra !== undefined) data.object.penumbra = this.penumbra; - - if (this.shadow !== undefined) data.object.shadow = this.shadow.toJSON(); - if (this.target !== undefined) data.object.target = this.target.uuid; - - return data; - } -} - -class HemisphereLight extends Light { - constructor(skyColor, groundColor, intensity) { - super(skyColor, intensity); - - this.isHemisphereLight = true; - - this.type = 'HemisphereLight'; - - this.position.copy(Object3D.DEFAULT_UP); - this.updateMatrix(); - - this.groundColor = new Color(groundColor); - } - - copy(source, recursive) { - super.copy(source, recursive); - - this.groundColor.copy(source.groundColor); - - return this; - } -} - -const _projScreenMatrix$2 = /*@__PURE__*/ new Matrix4(); -const _lightPositionWorld$1 = /*@__PURE__*/ new Vector3(); -const _lookTarget$1 = /*@__PURE__*/ new Vector3(); - -class LightShadow { - constructor(camera) { - this.camera = camera; - - this.intensity = 1; - - this.bias = 0; - this.normalBias = 0; - this.radius = 1; - this.blurSamples = 8; - - this.mapSize = new Vector2(512, 512); - - this.map = null; - this.mapPass = null; - this.matrix = new Matrix4(); - - this.autoUpdate = true; - this.needsUpdate = false; - - this._frustum = new Frustum(); - this._frameExtents = new Vector2(1, 1); - - this._viewportCount = 1; - - this._viewports = [new Vector4(0, 0, 1, 1)]; - } - - getViewportCount() { - return this._viewportCount; - } - - getFrustum() { - return this._frustum; - } - - updateMatrices(light) { - const shadowCamera = this.camera; - const shadowMatrix = this.matrix; - - _lightPositionWorld$1.setFromMatrixPosition(light.matrixWorld); - shadowCamera.position.copy(_lightPositionWorld$1); - - _lookTarget$1.setFromMatrixPosition(light.target.matrixWorld); - shadowCamera.lookAt(_lookTarget$1); - shadowCamera.updateMatrixWorld(); - - _projScreenMatrix$2.multiplyMatrices(shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse); - this._frustum.setFromProjectionMatrix(_projScreenMatrix$2); - - shadowMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0); - - shadowMatrix.multiply(_projScreenMatrix$2); - } - - getViewport(viewportIndex) { - return this._viewports[viewportIndex]; - } - - getFrameExtents() { - return this._frameExtents; - } - - dispose() { - if (this.map) { - this.map.dispose(); - } - - if (this.mapPass) { - this.mapPass.dispose(); - } - } - - copy(source) { - this.camera = source.camera.clone(); - - this.intensity = source.intensity; - - this.bias = source.bias; - this.radius = source.radius; - - this.mapSize.copy(source.mapSize); - - return this; - } - - clone() { - return new this.constructor().copy(this); - } - - toJSON() { - const object = {}; - - if (this.intensity !== 1) object.intensity = this.intensity; - if (this.bias !== 0) object.bias = this.bias; - if (this.normalBias !== 0) object.normalBias = this.normalBias; - if (this.radius !== 1) object.radius = this.radius; - if (this.mapSize.x !== 512 || this.mapSize.y !== 512) object.mapSize = this.mapSize.toArray(); - - object.camera = this.camera.toJSON(false).object; - delete object.camera.matrix; - - return object; - } -} - -class SpotLightShadow extends LightShadow { - constructor() { - super(new PerspectiveCamera(50, 1, 0.5, 500)); - - this.isSpotLightShadow = true; - - this.focus = 1; - } - - updateMatrices(light) { - const camera = this.camera; - - const fov = RAD2DEG * 2 * light.angle * this.focus; - const aspect = this.mapSize.width / this.mapSize.height; - const far = light.distance || camera.far; - - if (fov !== camera.fov || aspect !== camera.aspect || far !== camera.far) { - camera.fov = fov; - camera.aspect = aspect; - camera.far = far; - camera.updateProjectionMatrix(); - } - - super.updateMatrices(light); - } - - copy(source) { - super.copy(source); - - this.focus = source.focus; - - return this; - } -} - -class SpotLight extends Light { - constructor(color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2) { - super(color, intensity); - - this.isSpotLight = true; - - this.type = 'SpotLight'; - - this.position.copy(Object3D.DEFAULT_UP); - this.updateMatrix(); - - this.target = new Object3D(); - - this.distance = distance; - this.angle = angle; - this.penumbra = penumbra; - this.decay = decay; - - this.map = null; - - this.shadow = new SpotLightShadow(); - } - - get power() { - // compute the light's luminous power (in lumens) from its intensity (in candela) - // by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd) - return this.intensity * Math.PI; - } - - set power(power) { - // set the light's intensity (in candela) from the desired luminous power (in lumens) - this.intensity = power / Math.PI; - } - - dispose() { - this.shadow.dispose(); - } - - copy(source, recursive) { - super.copy(source, recursive); - - this.distance = source.distance; - this.angle = source.angle; - this.penumbra = source.penumbra; - this.decay = source.decay; - - this.target = source.target.clone(); - - this.shadow = source.shadow.clone(); - - return this; - } -} - -const _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4(); -const _lightPositionWorld = /*@__PURE__*/ new Vector3(); -const _lookTarget = /*@__PURE__*/ new Vector3(); - -class PointLightShadow extends LightShadow { - constructor() { - super(new PerspectiveCamera(90, 1, 0.5, 500)); - - this.isPointLightShadow = true; - - this._frameExtents = new Vector2(4, 2); - - this._viewportCount = 6; - - this._viewports = [ - // These viewports map a cube-map onto a 2D texture with the - // following orientation: - // - // xzXZ - // y Y - // - // X - Positive x direction - // x - Negative x direction - // Y - Positive y direction - // y - Negative y direction - // Z - Positive z direction - // z - Negative z direction - - // positive X - new Vector4(2, 1, 1, 1), - // negative X - new Vector4(0, 1, 1, 1), - // positive Z - new Vector4(3, 1, 1, 1), - // negative Z - new Vector4(1, 1, 1, 1), - // positive Y - new Vector4(3, 0, 1, 1), - // negative Y - new Vector4(1, 0, 1, 1), - ]; - - this._cubeDirections = [new Vector3(1, 0, 0), new Vector3(-1, 0, 0), new Vector3(0, 0, 1), new Vector3(0, 0, -1), new Vector3(0, 1, 0), new Vector3(0, -1, 0)]; - - this._cubeUps = [new Vector3(0, 1, 0), new Vector3(0, 1, 0), new Vector3(0, 1, 0), new Vector3(0, 1, 0), new Vector3(0, 0, 1), new Vector3(0, 0, -1)]; - } - - updateMatrices(light, viewportIndex = 0) { - const camera = this.camera; - const shadowMatrix = this.matrix; - - const far = light.distance || camera.far; - - if (far !== camera.far) { - camera.far = far; - camera.updateProjectionMatrix(); - } - - _lightPositionWorld.setFromMatrixPosition(light.matrixWorld); - camera.position.copy(_lightPositionWorld); - - _lookTarget.copy(camera.position); - _lookTarget.add(this._cubeDirections[viewportIndex]); - camera.up.copy(this._cubeUps[viewportIndex]); - camera.lookAt(_lookTarget); - camera.updateMatrixWorld(); - - shadowMatrix.makeTranslation(-_lightPositionWorld.x, -_lightPositionWorld.y, -_lightPositionWorld.z); - - _projScreenMatrix$1.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); - this._frustum.setFromProjectionMatrix(_projScreenMatrix$1); - } -} - -class PointLight extends Light { - constructor(color, intensity, distance = 0, decay = 2) { - super(color, intensity); - - this.isPointLight = true; - - this.type = 'PointLight'; - - this.distance = distance; - this.decay = decay; - - this.shadow = new PointLightShadow(); - } - - get power() { - // compute the light's luminous power (in lumens) from its intensity (in candela) - // for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd) - return this.intensity * 4 * Math.PI; - } - - set power(power) { - // set the light's intensity (in candela) from the desired luminous power (in lumens) - this.intensity = power / (4 * Math.PI); - } - - dispose() { - this.shadow.dispose(); - } - - copy(source, recursive) { - super.copy(source, recursive); - - this.distance = source.distance; - this.decay = source.decay; - - this.shadow = source.shadow.clone(); - - return this; - } -} - -class OrthographicCamera extends Camera { - constructor(left = -1, right = 1, top = 1, bottom = -1, near = 0.1, far = 2000) { - super(); - - this.isOrthographicCamera = true; - - this.type = 'OrthographicCamera'; - - this.zoom = 1; - this.view = null; - - this.left = left; - this.right = right; - this.top = top; - this.bottom = bottom; - - this.near = near; - this.far = far; - - this.updateProjectionMatrix(); - } - - copy(source, recursive) { - super.copy(source, recursive); - - this.left = source.left; - this.right = source.right; - this.top = source.top; - this.bottom = source.bottom; - this.near = source.near; - this.far = source.far; - - this.zoom = source.zoom; - this.view = source.view === null ? null : Object.assign({}, source.view); - - return this; - } - - setViewOffset(fullWidth, fullHeight, x, y, width, height) { - if (this.view === null) { - this.view = { - enabled: true, - fullWidth: 1, - fullHeight: 1, - offsetX: 0, - offsetY: 0, - width: 1, - height: 1, - }; - } - - this.view.enabled = true; - this.view.fullWidth = fullWidth; - this.view.fullHeight = fullHeight; - this.view.offsetX = x; - this.view.offsetY = y; - this.view.width = width; - this.view.height = height; - - this.updateProjectionMatrix(); - } - - clearViewOffset() { - if (this.view !== null) { - this.view.enabled = false; - } - - this.updateProjectionMatrix(); - } - - updateProjectionMatrix() { - const dx = (this.right - this.left) / (2 * this.zoom); - const dy = (this.top - this.bottom) / (2 * this.zoom); - const cx = (this.right + this.left) / 2; - const cy = (this.top + this.bottom) / 2; - - let left = cx - dx; - let right = cx + dx; - let top = cy + dy; - let bottom = cy - dy; - - if (this.view !== null && this.view.enabled) { - const scaleW = (this.right - this.left) / this.view.fullWidth / this.zoom; - const scaleH = (this.top - this.bottom) / this.view.fullHeight / this.zoom; - - left += scaleW * this.view.offsetX; - right = left + scaleW * this.view.width; - top -= scaleH * this.view.offsetY; - bottom = top - scaleH * this.view.height; - } - - this.projectionMatrix.makeOrthographic(left, right, top, bottom, this.near, this.far, this.coordinateSystem); - - this.projectionMatrixInverse.copy(this.projectionMatrix).invert(); - } - - toJSON(meta) { - const data = super.toJSON(meta); - - data.object.zoom = this.zoom; - data.object.left = this.left; - data.object.right = this.right; - data.object.top = this.top; - data.object.bottom = this.bottom; - data.object.near = this.near; - data.object.far = this.far; - - if (this.view !== null) data.object.view = Object.assign({}, this.view); - - return data; - } -} - -class DirectionalLightShadow extends LightShadow { - constructor() { - super(new OrthographicCamera(-5, 5, 5, -5, 0.5, 500)); - - this.isDirectionalLightShadow = true; - } -} - -class DirectionalLight extends Light { - constructor(color, intensity) { - super(color, intensity); - - this.isDirectionalLight = true; - - this.type = 'DirectionalLight'; - - this.position.copy(Object3D.DEFAULT_UP); - this.updateMatrix(); - - this.target = new Object3D(); - - this.shadow = new DirectionalLightShadow(); - } - - dispose() { - this.shadow.dispose(); - } - - copy(source) { - super.copy(source); - - this.target = source.target.clone(); - this.shadow = source.shadow.clone(); - - return this; - } -} - -class AmbientLight extends Light { - constructor(color, intensity) { - super(color, intensity); - - this.isAmbientLight = true; - - this.type = 'AmbientLight'; - } -} - -class RectAreaLight extends Light { - constructor(color, intensity, width = 10, height = 10) { - super(color, intensity); - - this.isRectAreaLight = true; - - this.type = 'RectAreaLight'; - - this.width = width; - this.height = height; - } - - get power() { - // compute the light's luminous power (in lumens) from its intensity (in nits) - return this.intensity * this.width * this.height * Math.PI; - } - - set power(power) { - // set the light's intensity (in nits) from the desired luminous power (in lumens) - this.intensity = power / (this.width * this.height * Math.PI); - } - - copy(source) { - super.copy(source); - - this.width = source.width; - this.height = source.height; - - return this; - } - - toJSON(meta) { - const data = super.toJSON(meta); - - data.object.width = this.width; - data.object.height = this.height; - - return data; - } -} - -/** - * Primary reference: - * https://graphics.stanford.edu/papers/envmap/envmap.pdf - * - * Secondary reference: - * https://www.ppsloan.org/publications/StupidSH36.pdf - */ - -// 3-band SH defined by 9 coefficients - -class SphericalHarmonics3 { - constructor() { - this.isSphericalHarmonics3 = true; - - this.coefficients = []; - - for (let i = 0; i < 9; i++) { - this.coefficients.push(new Vector3()); - } - } - - set(coefficients) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].copy(coefficients[i]); - } - - return this; - } - - zero() { - for (let i = 0; i < 9; i++) { - this.coefficients[i].set(0, 0, 0); - } - - return this; - } - - // get the radiance in the direction of the normal - // target is a Vector3 - getAt(normal, target) { - // normal is assumed to be unit length - - const x = normal.x, - y = normal.y, - z = normal.z; - - const coeff = this.coefficients; - - // band 0 - target.copy(coeff[0]).multiplyScalar(0.282095); - - // band 1 - target.addScaledVector(coeff[1], 0.488603 * y); - target.addScaledVector(coeff[2], 0.488603 * z); - target.addScaledVector(coeff[3], 0.488603 * x); - - // band 2 - target.addScaledVector(coeff[4], 1.092548 * (x * y)); - target.addScaledVector(coeff[5], 1.092548 * (y * z)); - target.addScaledVector(coeff[6], 0.315392 * (3.0 * z * z - 1.0)); - target.addScaledVector(coeff[7], 1.092548 * (x * z)); - target.addScaledVector(coeff[8], 0.546274 * (x * x - y * y)); - - return target; - } - - // get the irradiance (radiance convolved with cosine lobe) in the direction of the normal - // target is a Vector3 - // https://graphics.stanford.edu/papers/envmap/envmap.pdf - getIrradianceAt(normal, target) { - // normal is assumed to be unit length - - const x = normal.x, - y = normal.y, - z = normal.z; - - const coeff = this.coefficients; - - // band 0 - target.copy(coeff[0]).multiplyScalar(0.886227); // π * 0.282095 - - // band 1 - target.addScaledVector(coeff[1], 2.0 * 0.511664 * y); // ( 2 * π / 3 ) * 0.488603 - target.addScaledVector(coeff[2], 2.0 * 0.511664 * z); - target.addScaledVector(coeff[3], 2.0 * 0.511664 * x); - - // band 2 - target.addScaledVector(coeff[4], 2.0 * 0.429043 * x * y); // ( π / 4 ) * 1.092548 - target.addScaledVector(coeff[5], 2.0 * 0.429043 * y * z); - target.addScaledVector(coeff[6], 0.743125 * z * z - 0.247708); // ( π / 4 ) * 0.315392 * 3 - target.addScaledVector(coeff[7], 2.0 * 0.429043 * x * z); - target.addScaledVector(coeff[8], 0.429043 * (x * x - y * y)); // ( π / 4 ) * 0.546274 - - return target; - } - - add(sh) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].add(sh.coefficients[i]); - } - - return this; - } - - addScaledSH(sh, s) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].addScaledVector(sh.coefficients[i], s); - } - - return this; - } - - scale(s) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].multiplyScalar(s); - } - - return this; - } - - lerp(sh, alpha) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].lerp(sh.coefficients[i], alpha); - } - - return this; - } - - equals(sh) { - for (let i = 0; i < 9; i++) { - if (!this.coefficients[i].equals(sh.coefficients[i])) { - return false; - } - } - - return true; - } - - copy(sh) { - return this.set(sh.coefficients); - } - - clone() { - return new this.constructor().copy(this); - } - - fromArray(array, offset = 0) { - const coefficients = this.coefficients; - - for (let i = 0; i < 9; i++) { - coefficients[i].fromArray(array, offset + i * 3); - } - - return this; - } - - toArray(array = [], offset = 0) { - const coefficients = this.coefficients; - - for (let i = 0; i < 9; i++) { - coefficients[i].toArray(array, offset + i * 3); - } - - return array; - } - - // evaluate the basis functions - // shBasis is an Array[ 9 ] - static getBasisAt(normal, shBasis) { - // normal is assumed to be unit length - - const x = normal.x, - y = normal.y, - z = normal.z; - - // band 0 - shBasis[0] = 0.282095; - - // band 1 - shBasis[1] = 0.488603 * y; - shBasis[2] = 0.488603 * z; - shBasis[3] = 0.488603 * x; - - // band 2 - shBasis[4] = 1.092548 * x * y; - shBasis[5] = 1.092548 * y * z; - shBasis[6] = 0.315392 * (3 * z * z - 1); - shBasis[7] = 1.092548 * x * z; - shBasis[8] = 0.546274 * (x * x - y * y); - } -} - -class LightProbe extends Light { - constructor(sh = new SphericalHarmonics3(), intensity = 1) { - super(undefined, intensity); - - this.isLightProbe = true; - - this.sh = sh; - } - - copy(source) { - super.copy(source); - - this.sh.copy(source.sh); - - return this; - } - - fromJSON(json) { - this.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON(); - this.sh.fromArray(json.sh); - - return this; - } - - toJSON(meta) { - const data = super.toJSON(meta); - - data.object.sh = this.sh.toArray(); - - return data; - } -} - -class MaterialLoader extends Loader { - constructor(manager) { - super(manager); - this.textures = {}; - } - - load(url, onLoad, onProgress, onError) { - const scope = this; - - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load( - url, - function (text) { - try { - onLoad(scope.parse(JSON.parse(text))); - } catch (e) { - if (onError) { - onError(e); - } else { - console.error(e); - } - - scope.manager.itemError(url); - } - }, - onProgress, - onError - ); - } - - parse(json) { - const textures = this.textures; - - function getTexture(name) { - if (textures[name] === undefined) { - console.warn('THREE.MaterialLoader: Undefined texture', name); - } - - return textures[name]; - } - - const material = MaterialLoader.createMaterialFromType(json.type); - - if (json.uuid !== undefined) material.uuid = json.uuid; - if (json.name !== undefined) material.name = json.name; - if (json.color !== undefined && material.color !== undefined) material.color.setHex(json.color); - if (json.roughness !== undefined) material.roughness = json.roughness; - if (json.metalness !== undefined) material.metalness = json.metalness; - if (json.sheen !== undefined) material.sheen = json.sheen; - if (json.sheenColor !== undefined) material.sheenColor = new Color().setHex(json.sheenColor); - if (json.sheenRoughness !== undefined) material.sheenRoughness = json.sheenRoughness; - if (json.emissive !== undefined && material.emissive !== undefined) material.emissive.setHex(json.emissive); - if (json.specular !== undefined && material.specular !== undefined) material.specular.setHex(json.specular); - if (json.specularIntensity !== undefined) material.specularIntensity = json.specularIntensity; - if (json.specularColor !== undefined && material.specularColor !== undefined) material.specularColor.setHex(json.specularColor); - if (json.shininess !== undefined) material.shininess = json.shininess; - if (json.clearcoat !== undefined) material.clearcoat = json.clearcoat; - if (json.clearcoatRoughness !== undefined) material.clearcoatRoughness = json.clearcoatRoughness; - if (json.dispersion !== undefined) material.dispersion = json.dispersion; - if (json.iridescence !== undefined) material.iridescence = json.iridescence; - if (json.iridescenceIOR !== undefined) material.iridescenceIOR = json.iridescenceIOR; - if (json.iridescenceThicknessRange !== undefined) material.iridescenceThicknessRange = json.iridescenceThicknessRange; - if (json.transmission !== undefined) material.transmission = json.transmission; - if (json.thickness !== undefined) material.thickness = json.thickness; - if (json.attenuationDistance !== undefined) material.attenuationDistance = json.attenuationDistance; - if (json.attenuationColor !== undefined && material.attenuationColor !== undefined) material.attenuationColor.setHex(json.attenuationColor); - if (json.anisotropy !== undefined) material.anisotropy = json.anisotropy; - if (json.anisotropyRotation !== undefined) material.anisotropyRotation = json.anisotropyRotation; - if (json.fog !== undefined) material.fog = json.fog; - if (json.flatShading !== undefined) material.flatShading = json.flatShading; - if (json.blending !== undefined) material.blending = json.blending; - if (json.combine !== undefined) material.combine = json.combine; - if (json.side !== undefined) material.side = json.side; - if (json.shadowSide !== undefined) material.shadowSide = json.shadowSide; - if (json.opacity !== undefined) material.opacity = json.opacity; - if (json.transparent !== undefined) material.transparent = json.transparent; - if (json.alphaTest !== undefined) material.alphaTest = json.alphaTest; - if (json.alphaHash !== undefined) material.alphaHash = json.alphaHash; - if (json.depthFunc !== undefined) material.depthFunc = json.depthFunc; - if (json.depthTest !== undefined) material.depthTest = json.depthTest; - if (json.depthWrite !== undefined) material.depthWrite = json.depthWrite; - if (json.colorWrite !== undefined) material.colorWrite = json.colorWrite; - if (json.blendSrc !== undefined) material.blendSrc = json.blendSrc; - if (json.blendDst !== undefined) material.blendDst = json.blendDst; - if (json.blendEquation !== undefined) material.blendEquation = json.blendEquation; - if (json.blendSrcAlpha !== undefined) material.blendSrcAlpha = json.blendSrcAlpha; - if (json.blendDstAlpha !== undefined) material.blendDstAlpha = json.blendDstAlpha; - if (json.blendEquationAlpha !== undefined) material.blendEquationAlpha = json.blendEquationAlpha; - if (json.blendColor !== undefined && material.blendColor !== undefined) material.blendColor.setHex(json.blendColor); - if (json.blendAlpha !== undefined) material.blendAlpha = json.blendAlpha; - if (json.stencilWriteMask !== undefined) material.stencilWriteMask = json.stencilWriteMask; - if (json.stencilFunc !== undefined) material.stencilFunc = json.stencilFunc; - if (json.stencilRef !== undefined) material.stencilRef = json.stencilRef; - if (json.stencilFuncMask !== undefined) material.stencilFuncMask = json.stencilFuncMask; - if (json.stencilFail !== undefined) material.stencilFail = json.stencilFail; - if (json.stencilZFail !== undefined) material.stencilZFail = json.stencilZFail; - if (json.stencilZPass !== undefined) material.stencilZPass = json.stencilZPass; - if (json.stencilWrite !== undefined) material.stencilWrite = json.stencilWrite; - - if (json.wireframe !== undefined) material.wireframe = json.wireframe; - if (json.wireframeLinewidth !== undefined) material.wireframeLinewidth = json.wireframeLinewidth; - if (json.wireframeLinecap !== undefined) material.wireframeLinecap = json.wireframeLinecap; - if (json.wireframeLinejoin !== undefined) material.wireframeLinejoin = json.wireframeLinejoin; - - if (json.rotation !== undefined) material.rotation = json.rotation; - - if (json.linewidth !== undefined) material.linewidth = json.linewidth; - if (json.dashSize !== undefined) material.dashSize = json.dashSize; - if (json.gapSize !== undefined) material.gapSize = json.gapSize; - if (json.scale !== undefined) material.scale = json.scale; - - if (json.polygonOffset !== undefined) material.polygonOffset = json.polygonOffset; - if (json.polygonOffsetFactor !== undefined) material.polygonOffsetFactor = json.polygonOffsetFactor; - if (json.polygonOffsetUnits !== undefined) material.polygonOffsetUnits = json.polygonOffsetUnits; - - if (json.dithering !== undefined) material.dithering = json.dithering; - - if (json.alphaToCoverage !== undefined) material.alphaToCoverage = json.alphaToCoverage; - if (json.premultipliedAlpha !== undefined) material.premultipliedAlpha = json.premultipliedAlpha; - if (json.forceSinglePass !== undefined) material.forceSinglePass = json.forceSinglePass; - - if (json.visible !== undefined) material.visible = json.visible; - - if (json.toneMapped !== undefined) material.toneMapped = json.toneMapped; - - if (json.userData !== undefined) material.userData = json.userData; - - if (json.vertexColors !== undefined) { - if (typeof json.vertexColors === 'number') { - material.vertexColors = json.vertexColors > 0 ? true : false; - } else { - material.vertexColors = json.vertexColors; - } - } - - // Shader Material - - if (json.uniforms !== undefined) { - for (const name in json.uniforms) { - const uniform = json.uniforms[name]; - - material.uniforms[name] = {}; - - switch (uniform.type) { - case 't': - material.uniforms[name].value = getTexture(uniform.value); - break; - - case 'c': - material.uniforms[name].value = new Color().setHex(uniform.value); - break; - - case 'v2': - material.uniforms[name].value = new Vector2().fromArray(uniform.value); - break; - - case 'v3': - material.uniforms[name].value = new Vector3().fromArray(uniform.value); - break; - - case 'v4': - material.uniforms[name].value = new Vector4().fromArray(uniform.value); - break; - - case 'm3': - material.uniforms[name].value = new Matrix3().fromArray(uniform.value); - break; - - case 'm4': - material.uniforms[name].value = new Matrix4().fromArray(uniform.value); - break; - - default: - material.uniforms[name].value = uniform.value; - } - } - } - - if (json.defines !== undefined) material.defines = json.defines; - if (json.vertexShader !== undefined) material.vertexShader = json.vertexShader; - if (json.fragmentShader !== undefined) material.fragmentShader = json.fragmentShader; - if (json.glslVersion !== undefined) material.glslVersion = json.glslVersion; - - if (json.extensions !== undefined) { - for (const key in json.extensions) { - material.extensions[key] = json.extensions[key]; - } - } - - if (json.lights !== undefined) material.lights = json.lights; - if (json.clipping !== undefined) material.clipping = json.clipping; - - // for PointsMaterial - - if (json.size !== undefined) material.size = json.size; - if (json.sizeAttenuation !== undefined) material.sizeAttenuation = json.sizeAttenuation; - - // maps - - if (json.map !== undefined) material.map = getTexture(json.map); - if (json.matcap !== undefined) material.matcap = getTexture(json.matcap); - - if (json.alphaMap !== undefined) material.alphaMap = getTexture(json.alphaMap); - - if (json.bumpMap !== undefined) material.bumpMap = getTexture(json.bumpMap); - if (json.bumpScale !== undefined) material.bumpScale = json.bumpScale; - - if (json.normalMap !== undefined) material.normalMap = getTexture(json.normalMap); - if (json.normalMapType !== undefined) material.normalMapType = json.normalMapType; - if (json.normalScale !== undefined) { - let normalScale = json.normalScale; - - if (Array.isArray(normalScale) === false) { - // Blender exporter used to export a scalar. See #7459 - - normalScale = [normalScale, normalScale]; - } - - material.normalScale = new Vector2().fromArray(normalScale); - } - - if (json.displacementMap !== undefined) material.displacementMap = getTexture(json.displacementMap); - if (json.displacementScale !== undefined) material.displacementScale = json.displacementScale; - if (json.displacementBias !== undefined) material.displacementBias = json.displacementBias; - - if (json.roughnessMap !== undefined) material.roughnessMap = getTexture(json.roughnessMap); - if (json.metalnessMap !== undefined) material.metalnessMap = getTexture(json.metalnessMap); - - if (json.emissiveMap !== undefined) material.emissiveMap = getTexture(json.emissiveMap); - if (json.emissiveIntensity !== undefined) material.emissiveIntensity = json.emissiveIntensity; - - if (json.specularMap !== undefined) material.specularMap = getTexture(json.specularMap); - if (json.specularIntensityMap !== undefined) material.specularIntensityMap = getTexture(json.specularIntensityMap); - if (json.specularColorMap !== undefined) material.specularColorMap = getTexture(json.specularColorMap); - - if (json.envMap !== undefined) material.envMap = getTexture(json.envMap); - if (json.envMapRotation !== undefined) material.envMapRotation.fromArray(json.envMapRotation); - if (json.envMapIntensity !== undefined) material.envMapIntensity = json.envMapIntensity; - - if (json.reflectivity !== undefined) material.reflectivity = json.reflectivity; - if (json.refractionRatio !== undefined) material.refractionRatio = json.refractionRatio; - - if (json.lightMap !== undefined) material.lightMap = getTexture(json.lightMap); - if (json.lightMapIntensity !== undefined) material.lightMapIntensity = json.lightMapIntensity; - - if (json.aoMap !== undefined) material.aoMap = getTexture(json.aoMap); - if (json.aoMapIntensity !== undefined) material.aoMapIntensity = json.aoMapIntensity; - - if (json.gradientMap !== undefined) material.gradientMap = getTexture(json.gradientMap); - - if (json.clearcoatMap !== undefined) material.clearcoatMap = getTexture(json.clearcoatMap); - if (json.clearcoatRoughnessMap !== undefined) material.clearcoatRoughnessMap = getTexture(json.clearcoatRoughnessMap); - if (json.clearcoatNormalMap !== undefined) material.clearcoatNormalMap = getTexture(json.clearcoatNormalMap); - if (json.clearcoatNormalScale !== undefined) material.clearcoatNormalScale = new Vector2().fromArray(json.clearcoatNormalScale); - - if (json.iridescenceMap !== undefined) material.iridescenceMap = getTexture(json.iridescenceMap); - if (json.iridescenceThicknessMap !== undefined) material.iridescenceThicknessMap = getTexture(json.iridescenceThicknessMap); - - if (json.transmissionMap !== undefined) material.transmissionMap = getTexture(json.transmissionMap); - if (json.thicknessMap !== undefined) material.thicknessMap = getTexture(json.thicknessMap); - - if (json.anisotropyMap !== undefined) material.anisotropyMap = getTexture(json.anisotropyMap); - - if (json.sheenColorMap !== undefined) material.sheenColorMap = getTexture(json.sheenColorMap); - if (json.sheenRoughnessMap !== undefined) material.sheenRoughnessMap = getTexture(json.sheenRoughnessMap); - - return material; - } - - setTextures(value) { - this.textures = value; - return this; - } - - static createMaterialFromType(type) { - const materialLib = { - ShadowMaterial, - SpriteMaterial, - RawShaderMaterial, - ShaderMaterial, - PointsMaterial, - MeshPhysicalMaterial, - MeshStandardMaterial, - MeshPhongMaterial, - MeshToonMaterial, - MeshNormalMaterial, - MeshLambertMaterial, - MeshDepthMaterial, - MeshDistanceMaterial, - MeshBasicMaterial, - MeshMatcapMaterial, - LineDashedMaterial, - LineBasicMaterial, - Material, - }; - - return new materialLib[type](); - } -} - -class LoaderUtils { - static decodeText(array) { - // @deprecated, r165 - - console.warn('THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead.'); - - if (typeof TextDecoder !== 'undefined') { - return new TextDecoder().decode(array); - } - - // Avoid the String.fromCharCode.apply(null, array) shortcut, which - // throws a "maximum call stack size exceeded" error for large arrays. - - let s = ''; - - for (let i = 0, il = array.length; i < il; i++) { - // Implicitly assumes little-endian. - s += String.fromCharCode(array[i]); - } - - try { - // merges multi-byte utf-8 characters. - - return decodeURIComponent(escape(s)); - } catch (e) { - // see #16358 - - return s; - } - } - - static extractUrlBase(url) { - const index = url.lastIndexOf('/'); - - if (index === -1) return './'; - - return url.slice(0, index + 1); - } - - static resolveURL(url, path) { - // Invalid URL - if (typeof url !== 'string' || url === '') return ''; - - // Host Relative URL - if (/^https?:\/\//i.test(path) && /^\//.test(url)) { - path = path.replace(/(^https?:\/\/[^\/]+).*/i, '$1'); - } - - // Absolute URL http://,https://,// - if (/^(https?:)?\/\//i.test(url)) return url; - - // Data URI - if (/^data:.*,.*$/i.test(url)) return url; - - // Blob URL - if (/^blob:.*$/i.test(url)) return url; - - // Relative URL - return path + url; - } -} - -class InstancedBufferGeometry extends BufferGeometry { - constructor() { - super(); - - this.isInstancedBufferGeometry = true; - - this.type = 'InstancedBufferGeometry'; - this.instanceCount = Infinity; - } - - copy(source) { - super.copy(source); - - this.instanceCount = source.instanceCount; - - return this; - } - - toJSON() { - const data = super.toJSON(); - - data.instanceCount = this.instanceCount; - - data.isInstancedBufferGeometry = true; - - return data; - } -} - -class BufferGeometryLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - const scope = this; - - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load( - url, - function (text) { - try { - onLoad(scope.parse(JSON.parse(text))); - } catch (e) { - if (onError) { - onError(e); - } else { - console.error(e); - } - - scope.manager.itemError(url); - } - }, - onProgress, - onError - ); - } - - parse(json) { - const interleavedBufferMap = {}; - const arrayBufferMap = {}; - - function getInterleavedBuffer(json, uuid) { - if (interleavedBufferMap[uuid] !== undefined) return interleavedBufferMap[uuid]; - - const interleavedBuffers = json.interleavedBuffers; - const interleavedBuffer = interleavedBuffers[uuid]; - - const buffer = getArrayBuffer(json, interleavedBuffer.buffer); - - const array = getTypedArray(interleavedBuffer.type, buffer); - const ib = new InterleavedBuffer(array, interleavedBuffer.stride); - ib.uuid = interleavedBuffer.uuid; - - interleavedBufferMap[uuid] = ib; - - return ib; - } - - function getArrayBuffer(json, uuid) { - if (arrayBufferMap[uuid] !== undefined) return arrayBufferMap[uuid]; - - const arrayBuffers = json.arrayBuffers; - const arrayBuffer = arrayBuffers[uuid]; - - const ab = new Uint32Array(arrayBuffer).buffer; - - arrayBufferMap[uuid] = ab; - - return ab; - } - - const geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry(); - - const index = json.data.index; - - if (index !== undefined) { - const typedArray = getTypedArray(index.type, index.array); - geometry.setIndex(new BufferAttribute(typedArray, 1)); - } - - const attributes = json.data.attributes; - - for (const key in attributes) { - const attribute = attributes[key]; - let bufferAttribute; - - if (attribute.isInterleavedBufferAttribute) { - const interleavedBuffer = getInterleavedBuffer(json.data, attribute.data); - bufferAttribute = new InterleavedBufferAttribute(interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized); - } else { - const typedArray = getTypedArray(attribute.type, attribute.array); - const bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute; - bufferAttribute = new bufferAttributeConstr(typedArray, attribute.itemSize, attribute.normalized); - } - - if (attribute.name !== undefined) bufferAttribute.name = attribute.name; - if (attribute.usage !== undefined) bufferAttribute.setUsage(attribute.usage); - - geometry.setAttribute(key, bufferAttribute); - } - - const morphAttributes = json.data.morphAttributes; - - if (morphAttributes) { - for (const key in morphAttributes) { - const attributeArray = morphAttributes[key]; - - const array = []; - - for (let i = 0, il = attributeArray.length; i < il; i++) { - const attribute = attributeArray[i]; - let bufferAttribute; - - if (attribute.isInterleavedBufferAttribute) { - const interleavedBuffer = getInterleavedBuffer(json.data, attribute.data); - bufferAttribute = new InterleavedBufferAttribute(interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized); - } else { - const typedArray = getTypedArray(attribute.type, attribute.array); - bufferAttribute = new BufferAttribute(typedArray, attribute.itemSize, attribute.normalized); - } - - if (attribute.name !== undefined) bufferAttribute.name = attribute.name; - array.push(bufferAttribute); - } - - geometry.morphAttributes[key] = array; - } - } - - const morphTargetsRelative = json.data.morphTargetsRelative; - - if (morphTargetsRelative) { - geometry.morphTargetsRelative = true; - } - - const groups = json.data.groups || json.data.drawcalls || json.data.offsets; - - if (groups !== undefined) { - for (let i = 0, n = groups.length; i !== n; ++i) { - const group = groups[i]; - - geometry.addGroup(group.start, group.count, group.materialIndex); - } - } - - const boundingSphere = json.data.boundingSphere; - - if (boundingSphere !== undefined) { - const center = new Vector3(); - - if (boundingSphere.center !== undefined) { - center.fromArray(boundingSphere.center); - } - - geometry.boundingSphere = new Sphere(center, boundingSphere.radius); - } - - if (json.name) geometry.name = json.name; - if (json.userData) geometry.userData = json.userData; - - return geometry; - } -} - -class ObjectLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - const scope = this; - - const path = this.path === '' ? LoaderUtils.extractUrlBase(url) : this.path; - this.resourcePath = this.resourcePath || path; - - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load( - url, - function (text) { - let json = null; - - try { - json = JSON.parse(text); - } catch (error) { - if (onError !== undefined) onError(error); - - console.error("THREE:ObjectLoader: Can't parse " + url + '.', error.message); - - return; - } - - const metadata = json.metadata; - - if (metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry') { - if (onError !== undefined) onError(new Error("THREE.ObjectLoader: Can't load " + url)); - - console.error("THREE.ObjectLoader: Can't load " + url); - return; - } - - scope.parse(json, onLoad); - }, - onProgress, - onError - ); - } - - async loadAsync(url, onProgress) { - const scope = this; - - const path = this.path === '' ? LoaderUtils.extractUrlBase(url) : this.path; - this.resourcePath = this.resourcePath || path; - - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - - const text = await loader.loadAsync(url, onProgress); - - const json = JSON.parse(text); - - const metadata = json.metadata; - - if (metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry') { - throw new Error("THREE.ObjectLoader: Can't load " + url); - } - - return await scope.parseAsync(json); - } - - parse(json, onLoad) { - const animations = this.parseAnimations(json.animations); - const shapes = this.parseShapes(json.shapes); - const geometries = this.parseGeometries(json.geometries, shapes); - - const images = this.parseImages(json.images, function () { - if (onLoad !== undefined) onLoad(object); - }); - - const textures = this.parseTextures(json.textures, images); - const materials = this.parseMaterials(json.materials, textures); - - const object = this.parseObject(json.object, geometries, materials, textures, animations); - const skeletons = this.parseSkeletons(json.skeletons, object); - - this.bindSkeletons(object, skeletons); - this.bindLightTargets(object); - - // - - if (onLoad !== undefined) { - let hasImages = false; - - for (const uuid in images) { - if (images[uuid].data instanceof HTMLImageElement) { - hasImages = true; - break; - } - } - - if (hasImages === false) onLoad(object); - } - - return object; - } - - async parseAsync(json) { - const animations = this.parseAnimations(json.animations); - const shapes = this.parseShapes(json.shapes); - const geometries = this.parseGeometries(json.geometries, shapes); - - const images = await this.parseImagesAsync(json.images); - - const textures = this.parseTextures(json.textures, images); - const materials = this.parseMaterials(json.materials, textures); - - const object = this.parseObject(json.object, geometries, materials, textures, animations); - const skeletons = this.parseSkeletons(json.skeletons, object); - - this.bindSkeletons(object, skeletons); - this.bindLightTargets(object); - - return object; - } - - parseShapes(json) { - const shapes = {}; - - if (json !== undefined) { - for (let i = 0, l = json.length; i < l; i++) { - const shape = new Shape().fromJSON(json[i]); - - shapes[shape.uuid] = shape; - } - } - - return shapes; - } - - parseSkeletons(json, object) { - const skeletons = {}; - const bones = {}; - - // generate bone lookup table - - object.traverse(function (child) { - if (child.isBone) bones[child.uuid] = child; - }); - - // create skeletons - - if (json !== undefined) { - for (let i = 0, l = json.length; i < l; i++) { - const skeleton = new Skeleton().fromJSON(json[i], bones); - - skeletons[skeleton.uuid] = skeleton; - } - } - - return skeletons; - } - - parseGeometries(json, shapes) { - const geometries = {}; - - if (json !== undefined) { - const bufferGeometryLoader = new BufferGeometryLoader(); - - for (let i = 0, l = json.length; i < l; i++) { - let geometry; - const data = json[i]; - - switch (data.type) { - case 'BufferGeometry': - case 'InstancedBufferGeometry': - geometry = bufferGeometryLoader.parse(data); - break; - - default: - if (data.type in Geometries$1) { - geometry = Geometries$1[data.type].fromJSON(data, shapes); - } else { - console.warn(`THREE.ObjectLoader: Unsupported geometry type "${data.type}"`); - } - } - - geometry.uuid = data.uuid; - - if (data.name !== undefined) geometry.name = data.name; - if (data.userData !== undefined) geometry.userData = data.userData; - - geometries[data.uuid] = geometry; - } - } - - return geometries; - } - - parseMaterials(json, textures) { - const cache = {}; // MultiMaterial - const materials = {}; - - if (json !== undefined) { - const loader = new MaterialLoader(); - loader.setTextures(textures); - - for (let i = 0, l = json.length; i < l; i++) { - const data = json[i]; - - if (cache[data.uuid] === undefined) { - cache[data.uuid] = loader.parse(data); - } - - materials[data.uuid] = cache[data.uuid]; - } - } - - return materials; - } - - parseAnimations(json) { - const animations = {}; - - if (json !== undefined) { - for (let i = 0; i < json.length; i++) { - const data = json[i]; - - const clip = AnimationClip.parse(data); - - animations[clip.uuid] = clip; - } - } - - return animations; - } - - parseImages(json, onLoad) { - const scope = this; - const images = {}; - - let loader; - - function loadImage(url) { - scope.manager.itemStart(url); - - return loader.load( - url, - function () { - scope.manager.itemEnd(url); - }, - undefined, - function () { - scope.manager.itemError(url); - scope.manager.itemEnd(url); - } - ); - } - - function deserializeImage(image) { - if (typeof image === 'string') { - const url = image; - - const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(url) ? url : scope.resourcePath + url; - - return loadImage(path); - } else { - if (image.data) { - return { - data: getTypedArray(image.type, image.data), - width: image.width, - height: image.height, - }; - } else { - return null; - } - } - } - - if (json !== undefined && json.length > 0) { - const manager = new LoadingManager(onLoad); - - loader = new ImageLoader(manager); - loader.setCrossOrigin(this.crossOrigin); - - for (let i = 0, il = json.length; i < il; i++) { - const image = json[i]; - const url = image.url; - - if (Array.isArray(url)) { - // load array of images e.g CubeTexture - - const imageArray = []; - - for (let j = 0, jl = url.length; j < jl; j++) { - const currentUrl = url[j]; - - const deserializedImage = deserializeImage(currentUrl); - - if (deserializedImage !== null) { - if (deserializedImage instanceof HTMLImageElement) { - imageArray.push(deserializedImage); - } else { - // special case: handle array of data textures for cube textures - - imageArray.push(new DataTexture(deserializedImage.data, deserializedImage.width, deserializedImage.height)); - } - } - } - - images[image.uuid] = new Source(imageArray); - } else { - // load single image - - const deserializedImage = deserializeImage(image.url); - images[image.uuid] = new Source(deserializedImage); - } - } - } - - return images; - } - - async parseImagesAsync(json) { - const scope = this; - const images = {}; - - let loader; - - async function deserializeImage(image) { - if (typeof image === 'string') { - const url = image; - - const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(url) ? url : scope.resourcePath + url; - - return await loader.loadAsync(path); - } else { - if (image.data) { - return { - data: getTypedArray(image.type, image.data), - width: image.width, - height: image.height, - }; - } else { - return null; - } - } - } - - if (json !== undefined && json.length > 0) { - loader = new ImageLoader(this.manager); - loader.setCrossOrigin(this.crossOrigin); - - for (let i = 0, il = json.length; i < il; i++) { - const image = json[i]; - const url = image.url; - - if (Array.isArray(url)) { - // load array of images e.g CubeTexture - - const imageArray = []; - - for (let j = 0, jl = url.length; j < jl; j++) { - const currentUrl = url[j]; - - const deserializedImage = await deserializeImage(currentUrl); - - if (deserializedImage !== null) { - if (deserializedImage instanceof HTMLImageElement) { - imageArray.push(deserializedImage); - } else { - // special case: handle array of data textures for cube textures - - imageArray.push(new DataTexture(deserializedImage.data, deserializedImage.width, deserializedImage.height)); - } - } - } - - images[image.uuid] = new Source(imageArray); - } else { - // load single image - - const deserializedImage = await deserializeImage(image.url); - images[image.uuid] = new Source(deserializedImage); - } - } - } - - return images; - } - - parseTextures(json, images) { - function parseConstant(value, type) { - if (typeof value === 'number') return value; - - console.warn('THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value); - - return type[value]; - } - - const textures = {}; - - if (json !== undefined) { - for (let i = 0, l = json.length; i < l; i++) { - const data = json[i]; - - if (data.image === undefined) { - console.warn('THREE.ObjectLoader: No "image" specified for', data.uuid); - } - - if (images[data.image] === undefined) { - console.warn('THREE.ObjectLoader: Undefined image', data.image); - } - - const source = images[data.image]; - const image = source.data; - - let texture; - - if (Array.isArray(image)) { - texture = new CubeTexture(); - - if (image.length === 6) texture.needsUpdate = true; - } else { - if (image && image.data) { - texture = new DataTexture(); - } else { - texture = new Texture(); - } - - if (image) texture.needsUpdate = true; // textures can have undefined image data - } - - texture.source = source; - - texture.uuid = data.uuid; - - if (data.name !== undefined) texture.name = data.name; - - if (data.mapping !== undefined) texture.mapping = parseConstant(data.mapping, TEXTURE_MAPPING); - if (data.channel !== undefined) texture.channel = data.channel; - - if (data.offset !== undefined) texture.offset.fromArray(data.offset); - if (data.repeat !== undefined) texture.repeat.fromArray(data.repeat); - if (data.center !== undefined) texture.center.fromArray(data.center); - if (data.rotation !== undefined) texture.rotation = data.rotation; - - if (data.wrap !== undefined) { - texture.wrapS = parseConstant(data.wrap[0], TEXTURE_WRAPPING); - texture.wrapT = parseConstant(data.wrap[1], TEXTURE_WRAPPING); - } - - if (data.format !== undefined) texture.format = data.format; - if (data.internalFormat !== undefined) texture.internalFormat = data.internalFormat; - if (data.type !== undefined) texture.type = data.type; - if (data.colorSpace !== undefined) texture.colorSpace = data.colorSpace; - - if (data.minFilter !== undefined) texture.minFilter = parseConstant(data.minFilter, TEXTURE_FILTER); - if (data.magFilter !== undefined) texture.magFilter = parseConstant(data.magFilter, TEXTURE_FILTER); - if (data.anisotropy !== undefined) texture.anisotropy = data.anisotropy; - - if (data.flipY !== undefined) texture.flipY = data.flipY; - - if (data.generateMipmaps !== undefined) texture.generateMipmaps = data.generateMipmaps; - if (data.premultiplyAlpha !== undefined) texture.premultiplyAlpha = data.premultiplyAlpha; - if (data.unpackAlignment !== undefined) texture.unpackAlignment = data.unpackAlignment; - if (data.compareFunction !== undefined) texture.compareFunction = data.compareFunction; - - if (data.userData !== undefined) texture.userData = data.userData; - - textures[data.uuid] = texture; - } - } - - return textures; - } - - parseObject(data, geometries, materials, textures, animations) { - let object; - - function getGeometry(name) { - if (geometries[name] === undefined) { - console.warn('THREE.ObjectLoader: Undefined geometry', name); - } - - return geometries[name]; - } - - function getMaterial(name) { - if (name === undefined) return undefined; - - if (Array.isArray(name)) { - const array = []; - - for (let i = 0, l = name.length; i < l; i++) { - const uuid = name[i]; - - if (materials[uuid] === undefined) { - console.warn('THREE.ObjectLoader: Undefined material', uuid); - } - - array.push(materials[uuid]); - } - - return array; - } - - if (materials[name] === undefined) { - console.warn('THREE.ObjectLoader: Undefined material', name); - } - - return materials[name]; - } - - function getTexture(uuid) { - if (textures[uuid] === undefined) { - console.warn('THREE.ObjectLoader: Undefined texture', uuid); - } - - return textures[uuid]; - } - - let geometry, material; - - switch (data.type) { - case 'Scene': - object = new Scene(); - - if (data.background !== undefined) { - if (Number.isInteger(data.background)) { - object.background = new Color(data.background); - } else { - object.background = getTexture(data.background); - } - } - - if (data.environment !== undefined) { - object.environment = getTexture(data.environment); - } - - if (data.fog !== undefined) { - if (data.fog.type === 'Fog') { - object.fog = new Fog(data.fog.color, data.fog.near, data.fog.far); - } else if (data.fog.type === 'FogExp2') { - object.fog = new FogExp2(data.fog.color, data.fog.density); - } - - if (data.fog.name !== '') { - object.fog.name = data.fog.name; - } - } - - if (data.backgroundBlurriness !== undefined) object.backgroundBlurriness = data.backgroundBlurriness; - if (data.backgroundIntensity !== undefined) object.backgroundIntensity = data.backgroundIntensity; - if (data.backgroundRotation !== undefined) object.backgroundRotation.fromArray(data.backgroundRotation); - - if (data.environmentIntensity !== undefined) object.environmentIntensity = data.environmentIntensity; - if (data.environmentRotation !== undefined) object.environmentRotation.fromArray(data.environmentRotation); - - break; - - case 'PerspectiveCamera': - object = new PerspectiveCamera(data.fov, data.aspect, data.near, data.far); - - if (data.focus !== undefined) object.focus = data.focus; - if (data.zoom !== undefined) object.zoom = data.zoom; - if (data.filmGauge !== undefined) object.filmGauge = data.filmGauge; - if (data.filmOffset !== undefined) object.filmOffset = data.filmOffset; - if (data.view !== undefined) object.view = Object.assign({}, data.view); - - break; - - case 'OrthographicCamera': - object = new OrthographicCamera(data.left, data.right, data.top, data.bottom, data.near, data.far); - - if (data.zoom !== undefined) object.zoom = data.zoom; - if (data.view !== undefined) object.view = Object.assign({}, data.view); - - break; - - case 'AmbientLight': - object = new AmbientLight(data.color, data.intensity); - - break; - - case 'DirectionalLight': - object = new DirectionalLight(data.color, data.intensity); - object.target = data.target || ''; - - break; - - case 'PointLight': - object = new PointLight(data.color, data.intensity, data.distance, data.decay); - - break; - - case 'RectAreaLight': - object = new RectAreaLight(data.color, data.intensity, data.width, data.height); - - break; - - case 'SpotLight': - object = new SpotLight(data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay); - object.target = data.target || ''; - - break; - - case 'HemisphereLight': - object = new HemisphereLight(data.color, data.groundColor, data.intensity); - - break; - - case 'LightProbe': - object = new LightProbe().fromJSON(data); - - break; - - case 'SkinnedMesh': - geometry = getGeometry(data.geometry); - material = getMaterial(data.material); - - object = new SkinnedMesh(geometry, material); - - if (data.bindMode !== undefined) object.bindMode = data.bindMode; - if (data.bindMatrix !== undefined) object.bindMatrix.fromArray(data.bindMatrix); - if (data.skeleton !== undefined) object.skeleton = data.skeleton; - - break; - - case 'Mesh': - geometry = getGeometry(data.geometry); - material = getMaterial(data.material); - - object = new Mesh(geometry, material); - - break; - - case 'InstancedMesh': - geometry = getGeometry(data.geometry); - material = getMaterial(data.material); - const count = data.count; - const instanceMatrix = data.instanceMatrix; - const instanceColor = data.instanceColor; - - object = new InstancedMesh(geometry, material, count); - object.instanceMatrix = new InstancedBufferAttribute(new Float32Array(instanceMatrix.array), 16); - if (instanceColor !== undefined) object.instanceColor = new InstancedBufferAttribute(new Float32Array(instanceColor.array), instanceColor.itemSize); - - break; - - case 'BatchedMesh': - geometry = getGeometry(data.geometry); - material = getMaterial(data.material); - - object = new BatchedMesh(data.maxInstanceCount, data.maxVertexCount, data.maxIndexCount, material); - object.geometry = geometry; - object.perObjectFrustumCulled = data.perObjectFrustumCulled; - object.sortObjects = data.sortObjects; - - object._drawRanges = data.drawRanges; - object._reservedRanges = data.reservedRanges; - - object._visibility = data.visibility; - object._active = data.active; - object._bounds = data.bounds.map((bound) => { - const box = new Box3(); - box.min.fromArray(bound.boxMin); - box.max.fromArray(bound.boxMax); - - const sphere = new Sphere(); - sphere.radius = bound.sphereRadius; - sphere.center.fromArray(bound.sphereCenter); - - return { - boxInitialized: bound.boxInitialized, - box: box, - - sphereInitialized: bound.sphereInitialized, - sphere: sphere, - }; - }); - - object._maxInstanceCount = data.maxInstanceCount; - object._maxVertexCount = data.maxVertexCount; - object._maxIndexCount = data.maxIndexCount; - - object._geometryInitialized = data.geometryInitialized; - object._geometryCount = data.geometryCount; - - object._matricesTexture = getTexture(data.matricesTexture.uuid); - if (data.colorsTexture !== undefined) object._colorsTexture = getTexture(data.colorsTexture.uuid); - - break; - - case 'LOD': - object = new LOD(); - - break; - - case 'Line': - object = new Line(getGeometry(data.geometry), getMaterial(data.material)); - - break; - - case 'LineLoop': - object = new LineLoop(getGeometry(data.geometry), getMaterial(data.material)); - - break; - - case 'LineSegments': - object = new LineSegments(getGeometry(data.geometry), getMaterial(data.material)); - - break; - - case 'PointCloud': - case 'Points': - object = new Points(getGeometry(data.geometry), getMaterial(data.material)); - - break; - - case 'Sprite': - object = new Sprite(getMaterial(data.material)); - - break; - - case 'Group': - object = new Group(); - - break; - - case 'Bone': - object = new Bone(); - - break; - - default: - object = new Object3D(); - } - - object.uuid = data.uuid; - - if (data.name !== undefined) object.name = data.name; - - if (data.matrix !== undefined) { - object.matrix.fromArray(data.matrix); - - if (data.matrixAutoUpdate !== undefined) object.matrixAutoUpdate = data.matrixAutoUpdate; - if (object.matrixAutoUpdate) object.matrix.decompose(object.position, object.quaternion, object.scale); - } else { - if (data.position !== undefined) object.position.fromArray(data.position); - if (data.rotation !== undefined) object.rotation.fromArray(data.rotation); - if (data.quaternion !== undefined) object.quaternion.fromArray(data.quaternion); - if (data.scale !== undefined) object.scale.fromArray(data.scale); - } - - if (data.up !== undefined) object.up.fromArray(data.up); - - if (data.castShadow !== undefined) object.castShadow = data.castShadow; - if (data.receiveShadow !== undefined) object.receiveShadow = data.receiveShadow; - - if (data.shadow) { - if (data.shadow.intensity !== undefined) object.shadow.intensity = data.shadow.intensity; - if (data.shadow.bias !== undefined) object.shadow.bias = data.shadow.bias; - if (data.shadow.normalBias !== undefined) object.shadow.normalBias = data.shadow.normalBias; - if (data.shadow.radius !== undefined) object.shadow.radius = data.shadow.radius; - if (data.shadow.mapSize !== undefined) object.shadow.mapSize.fromArray(data.shadow.mapSize); - if (data.shadow.camera !== undefined) object.shadow.camera = this.parseObject(data.shadow.camera); - } - - if (data.visible !== undefined) object.visible = data.visible; - if (data.frustumCulled !== undefined) object.frustumCulled = data.frustumCulled; - if (data.renderOrder !== undefined) object.renderOrder = data.renderOrder; - if (data.userData !== undefined) object.userData = data.userData; - if (data.layers !== undefined) object.layers.mask = data.layers; - - if (data.children !== undefined) { - const children = data.children; - - for (let i = 0; i < children.length; i++) { - object.add(this.parseObject(children[i], geometries, materials, textures, animations)); - } - } - - if (data.animations !== undefined) { - const objectAnimations = data.animations; - - for (let i = 0; i < objectAnimations.length; i++) { - const uuid = objectAnimations[i]; - - object.animations.push(animations[uuid]); - } - } - - if (data.type === 'LOD') { - if (data.autoUpdate !== undefined) object.autoUpdate = data.autoUpdate; - - const levels = data.levels; - - for (let l = 0; l < levels.length; l++) { - const level = levels[l]; - const child = object.getObjectByProperty('uuid', level.object); - - if (child !== undefined) { - object.addLevel(child, level.distance, level.hysteresis); - } - } - } - - return object; - } - - bindSkeletons(object, skeletons) { - if (Object.keys(skeletons).length === 0) return; - - object.traverse(function (child) { - if (child.isSkinnedMesh === true && child.skeleton !== undefined) { - const skeleton = skeletons[child.skeleton]; - - if (skeleton === undefined) { - console.warn('THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton); - } else { - child.bind(skeleton, child.bindMatrix); - } - } - }); - } - - bindLightTargets(object) { - object.traverse(function (child) { - if (child.isDirectionalLight || child.isSpotLight) { - const uuid = child.target; - - const target = object.getObjectByProperty('uuid', uuid); - - if (target !== undefined) { - child.target = target; - } else { - child.target = new Object3D(); - } - } - }); - } -} - -const TEXTURE_MAPPING = { - UVMapping: UVMapping, - CubeReflectionMapping: CubeReflectionMapping, - CubeRefractionMapping: CubeRefractionMapping, - EquirectangularReflectionMapping: EquirectangularReflectionMapping, - EquirectangularRefractionMapping: EquirectangularRefractionMapping, - CubeUVReflectionMapping: CubeUVReflectionMapping, -}; - -const TEXTURE_WRAPPING = { - RepeatWrapping: RepeatWrapping, - ClampToEdgeWrapping: ClampToEdgeWrapping, - MirroredRepeatWrapping: MirroredRepeatWrapping, -}; - -const TEXTURE_FILTER = { - NearestFilter: NearestFilter, - NearestMipmapNearestFilter: NearestMipmapNearestFilter, - NearestMipmapLinearFilter: NearestMipmapLinearFilter, - LinearFilter: LinearFilter, - LinearMipmapNearestFilter: LinearMipmapNearestFilter, - LinearMipmapLinearFilter: LinearMipmapLinearFilter, -}; - -class ImageBitmapLoader extends Loader { - constructor(manager) { - super(manager); - - this.isImageBitmapLoader = true; - - if (typeof createImageBitmap === 'undefined') { - console.warn('THREE.ImageBitmapLoader: createImageBitmap() not supported.'); - } - - if (typeof fetch === 'undefined') { - console.warn('THREE.ImageBitmapLoader: fetch() not supported.'); - } - - this.options = { premultiplyAlpha: 'none' }; - } - - setOptions(options) { - this.options = options; - - return this; - } - - load(url, onLoad, onProgress, onError) { - if (url === undefined) url = ''; - - if (this.path !== undefined) url = this.path + url; - - url = this.manager.resolveURL(url); - - const scope = this; - - const cached = Cache.get(url); - - if (cached !== undefined) { - scope.manager.itemStart(url); - - // If cached is a promise, wait for it to resolve - if (cached.then) { - cached - .then((imageBitmap) => { - if (onLoad) onLoad(imageBitmap); - - scope.manager.itemEnd(url); - }) - .catch((e) => { - if (onError) onError(e); - }); - return; - } - - // If cached is not a promise (i.e., it's already an imageBitmap) - setTimeout(function () { - if (onLoad) onLoad(cached); - - scope.manager.itemEnd(url); - }, 0); - - return cached; - } - - const fetchOptions = {}; - fetchOptions.credentials = this.crossOrigin === 'anonymous' ? 'same-origin' : 'include'; - fetchOptions.headers = this.requestHeader; - - const promise = fetch(url, fetchOptions) - .then(function (res) { - return res.blob(); - }) - .then(function (blob) { - return createImageBitmap(blob, Object.assign(scope.options, { colorSpaceConversion: 'none' })); - }) - .then(function (imageBitmap) { - Cache.add(url, imageBitmap); - - if (onLoad) onLoad(imageBitmap); - - scope.manager.itemEnd(url); - - return imageBitmap; - }) - .catch(function (e) { - if (onError) onError(e); - - Cache.remove(url); - - scope.manager.itemError(url); - scope.manager.itemEnd(url); - }); - - Cache.add(url, promise); - scope.manager.itemStart(url); - } -} - -let _context; - -class AudioContext { - static getContext() { - if (_context === undefined) { - _context = new (window.AudioContext || window.webkitAudioContext)(); - } - - return _context; - } - - static setContext(value) { - _context = value; - } -} - -class AudioLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - const scope = this; - - const loader = new FileLoader(this.manager); - loader.setResponseType('arraybuffer'); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load( - url, - function (buffer) { - try { - // Create a copy of the buffer. The `decodeAudioData` method - // detaches the buffer when complete, preventing reuse. - const bufferCopy = buffer.slice(0); - - const context = AudioContext.getContext(); - context - .decodeAudioData(bufferCopy, function (audioBuffer) { - onLoad(audioBuffer); - }) - .catch(handleError); - } catch (e) { - handleError(e); - } - }, - onProgress, - onError - ); - - function handleError(e) { - if (onError) { - onError(e); - } else { - console.error(e); - } - - scope.manager.itemError(url); - } - } -} - -const _eyeRight = /*@__PURE__*/ new Matrix4(); -const _eyeLeft = /*@__PURE__*/ new Matrix4(); -const _projectionMatrix = /*@__PURE__*/ new Matrix4(); - -class StereoCamera { - constructor() { - this.type = 'StereoCamera'; - - this.aspect = 1; - - this.eyeSep = 0.064; - - this.cameraL = new PerspectiveCamera(); - this.cameraL.layers.enable(1); - this.cameraL.matrixAutoUpdate = false; - - this.cameraR = new PerspectiveCamera(); - this.cameraR.layers.enable(2); - this.cameraR.matrixAutoUpdate = false; - - this._cache = { - focus: null, - fov: null, - aspect: null, - near: null, - far: null, - zoom: null, - eyeSep: null, - }; - } - - update(camera) { - const cache = this._cache; - - const needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov || cache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near || cache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep; - - if (needsUpdate) { - cache.focus = camera.focus; - cache.fov = camera.fov; - cache.aspect = camera.aspect * this.aspect; - cache.near = camera.near; - cache.far = camera.far; - cache.zoom = camera.zoom; - cache.eyeSep = this.eyeSep; - - // Off-axis stereoscopic effect based on - // http://paulbourke.net/stereographics/stereorender/ - - _projectionMatrix.copy(camera.projectionMatrix); - const eyeSepHalf = cache.eyeSep / 2; - const eyeSepOnProjection = (eyeSepHalf * cache.near) / cache.focus; - const ymax = (cache.near * Math.tan(DEG2RAD * cache.fov * 0.5)) / cache.zoom; - let xmin, xmax; - - // translate xOffset - - _eyeLeft.elements[12] = -eyeSepHalf; - _eyeRight.elements[12] = eyeSepHalf; - - // for left eye - - xmin = -ymax * cache.aspect + eyeSepOnProjection; - xmax = ymax * cache.aspect + eyeSepOnProjection; - - _projectionMatrix.elements[0] = (2 * cache.near) / (xmax - xmin); - _projectionMatrix.elements[8] = (xmax + xmin) / (xmax - xmin); - - this.cameraL.projectionMatrix.copy(_projectionMatrix); - - // for right eye - - xmin = -ymax * cache.aspect - eyeSepOnProjection; - xmax = ymax * cache.aspect - eyeSepOnProjection; - - _projectionMatrix.elements[0] = (2 * cache.near) / (xmax - xmin); - _projectionMatrix.elements[8] = (xmax + xmin) / (xmax - xmin); - - this.cameraR.projectionMatrix.copy(_projectionMatrix); - } - - this.cameraL.matrixWorld.copy(camera.matrixWorld).multiply(_eyeLeft); - this.cameraR.matrixWorld.copy(camera.matrixWorld).multiply(_eyeRight); - } -} - -class ArrayCamera extends PerspectiveCamera { - constructor(array = []) { - super(); - - this.isArrayCamera = true; - - this.cameras = array; - } -} - -class Clock { - constructor(autoStart = true) { - this.autoStart = autoStart; - - this.startTime = 0; - this.oldTime = 0; - this.elapsedTime = 0; - - this.running = false; - } - - start() { - this.startTime = now(); - - this.oldTime = this.startTime; - this.elapsedTime = 0; - this.running = true; - } - - stop() { - this.getElapsedTime(); - this.running = false; - this.autoStart = false; - } - - getElapsedTime() { - this.getDelta(); - return this.elapsedTime; - } - - getDelta() { - let diff = 0; - - if (this.autoStart && !this.running) { - this.start(); - return 0; - } - - if (this.running) { - const newTime = now(); - - diff = (newTime - this.oldTime) / 1000; - this.oldTime = newTime; - - this.elapsedTime += diff; - } - - return diff; - } -} - -function now() { - return (typeof performance === 'undefined' ? Date : performance).now(); // see #10732 -} - -const _position$1 = /*@__PURE__*/ new Vector3(); -const _quaternion$1 = /*@__PURE__*/ new Quaternion(); -const _scale$1 = /*@__PURE__*/ new Vector3(); -const _orientation$1 = /*@__PURE__*/ new Vector3(); - -class AudioListener extends Object3D { - constructor() { - super(); - - this.type = 'AudioListener'; - - this.context = AudioContext.getContext(); - - this.gain = this.context.createGain(); - this.gain.connect(this.context.destination); - - this.filter = null; - - this.timeDelta = 0; - - // private - - this._clock = new Clock(); - } - - getInput() { - return this.gain; - } - - removeFilter() { - if (this.filter !== null) { - this.gain.disconnect(this.filter); - this.filter.disconnect(this.context.destination); - this.gain.connect(this.context.destination); - this.filter = null; - } - - return this; - } - - getFilter() { - return this.filter; - } - - setFilter(value) { - if (this.filter !== null) { - this.gain.disconnect(this.filter); - this.filter.disconnect(this.context.destination); - } else { - this.gain.disconnect(this.context.destination); - } - - this.filter = value; - this.gain.connect(this.filter); - this.filter.connect(this.context.destination); - - return this; - } - - getMasterVolume() { - return this.gain.gain.value; - } - - setMasterVolume(value) { - this.gain.gain.setTargetAtTime(value, this.context.currentTime, 0.01); - - return this; - } - - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - - const listener = this.context.listener; - const up = this.up; - - this.timeDelta = this._clock.getDelta(); - - this.matrixWorld.decompose(_position$1, _quaternion$1, _scale$1); - - _orientation$1.set(0, 0, -1).applyQuaternion(_quaternion$1); - - if (listener.positionX) { - // code path for Chrome (see #14393) - - const endTime = this.context.currentTime + this.timeDelta; - - listener.positionX.linearRampToValueAtTime(_position$1.x, endTime); - listener.positionY.linearRampToValueAtTime(_position$1.y, endTime); - listener.positionZ.linearRampToValueAtTime(_position$1.z, endTime); - listener.forwardX.linearRampToValueAtTime(_orientation$1.x, endTime); - listener.forwardY.linearRampToValueAtTime(_orientation$1.y, endTime); - listener.forwardZ.linearRampToValueAtTime(_orientation$1.z, endTime); - listener.upX.linearRampToValueAtTime(up.x, endTime); - listener.upY.linearRampToValueAtTime(up.y, endTime); - listener.upZ.linearRampToValueAtTime(up.z, endTime); - } else { - listener.setPosition(_position$1.x, _position$1.y, _position$1.z); - listener.setOrientation(_orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z); - } - } -} - -class Audio extends Object3D { - constructor(listener) { - super(); - - this.type = 'Audio'; - - this.listener = listener; - this.context = listener.context; - - this.gain = this.context.createGain(); - this.gain.connect(listener.getInput()); - - this.autoplay = false; - - this.buffer = null; - this.detune = 0; - this.loop = false; - this.loopStart = 0; - this.loopEnd = 0; - this.offset = 0; - this.duration = undefined; - this.playbackRate = 1; - this.isPlaying = false; - this.hasPlaybackControl = true; - this.source = null; - this.sourceType = 'empty'; - - this._startedAt = 0; - this._progress = 0; - this._connected = false; - - this.filters = []; - } - - getOutput() { - return this.gain; - } - - setNodeSource(audioNode) { - this.hasPlaybackControl = false; - this.sourceType = 'audioNode'; - this.source = audioNode; - this.connect(); - - return this; - } - - setMediaElementSource(mediaElement) { - this.hasPlaybackControl = false; - this.sourceType = 'mediaNode'; - this.source = this.context.createMediaElementSource(mediaElement); - this.connect(); - - return this; - } - - setMediaStreamSource(mediaStream) { - this.hasPlaybackControl = false; - this.sourceType = 'mediaStreamNode'; - this.source = this.context.createMediaStreamSource(mediaStream); - this.connect(); - - return this; - } - - setBuffer(audioBuffer) { - this.buffer = audioBuffer; - this.sourceType = 'buffer'; - - if (this.autoplay) this.play(); - - return this; - } - - play(delay = 0) { - if (this.isPlaying === true) { - console.warn('THREE.Audio: Audio is already playing.'); - return; - } - - if (this.hasPlaybackControl === false) { - console.warn('THREE.Audio: this Audio has no playback control.'); - return; - } - - this._startedAt = this.context.currentTime + delay; - - const source = this.context.createBufferSource(); - source.buffer = this.buffer; - source.loop = this.loop; - source.loopStart = this.loopStart; - source.loopEnd = this.loopEnd; - source.onended = this.onEnded.bind(this); - source.start(this._startedAt, this._progress + this.offset, this.duration); - - this.isPlaying = true; - - this.source = source; - - this.setDetune(this.detune); - this.setPlaybackRate(this.playbackRate); - - return this.connect(); - } - - pause() { - if (this.hasPlaybackControl === false) { - console.warn('THREE.Audio: this Audio has no playback control.'); - return; - } - - if (this.isPlaying === true) { - // update current progress - - this._progress += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate; - - if (this.loop === true) { - // ensure _progress does not exceed duration with looped audios - - this._progress = this._progress % (this.duration || this.buffer.duration); - } - - this.source.stop(); - this.source.onended = null; - - this.isPlaying = false; - } - - return this; - } - - stop() { - if (this.hasPlaybackControl === false) { - console.warn('THREE.Audio: this Audio has no playback control.'); - return; - } - - this._progress = 0; - - if (this.source !== null) { - this.source.stop(); - this.source.onended = null; - } - - this.isPlaying = false; - - return this; - } - - connect() { - if (this.filters.length > 0) { - this.source.connect(this.filters[0]); - - for (let i = 1, l = this.filters.length; i < l; i++) { - this.filters[i - 1].connect(this.filters[i]); - } - - this.filters[this.filters.length - 1].connect(this.getOutput()); - } else { - this.source.connect(this.getOutput()); - } - - this._connected = true; - - return this; - } - - disconnect() { - if (this._connected === false) { - return; - } - - if (this.filters.length > 0) { - this.source.disconnect(this.filters[0]); - - for (let i = 1, l = this.filters.length; i < l; i++) { - this.filters[i - 1].disconnect(this.filters[i]); - } - - this.filters[this.filters.length - 1].disconnect(this.getOutput()); - } else { - this.source.disconnect(this.getOutput()); - } - - this._connected = false; - - return this; - } - - getFilters() { - return this.filters; - } - - setFilters(value) { - if (!value) value = []; - - if (this._connected === true) { - this.disconnect(); - this.filters = value.slice(); - this.connect(); - } else { - this.filters = value.slice(); - } - - return this; - } - - setDetune(value) { - this.detune = value; - - if (this.isPlaying === true && this.source.detune !== undefined) { - this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, 0.01); - } - - return this; - } - - getDetune() { - return this.detune; - } - - getFilter() { - return this.getFilters()[0]; - } - - setFilter(filter) { - return this.setFilters(filter ? [filter] : []); - } - - setPlaybackRate(value) { - if (this.hasPlaybackControl === false) { - console.warn('THREE.Audio: this Audio has no playback control.'); - return; - } - - this.playbackRate = value; - - if (this.isPlaying === true) { - this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, 0.01); - } - - return this; - } - - getPlaybackRate() { - return this.playbackRate; - } - - onEnded() { - this.isPlaying = false; - } - - getLoop() { - if (this.hasPlaybackControl === false) { - console.warn('THREE.Audio: this Audio has no playback control.'); - return false; - } - - return this.loop; - } - - setLoop(value) { - if (this.hasPlaybackControl === false) { - console.warn('THREE.Audio: this Audio has no playback control.'); - return; - } - - this.loop = value; - - if (this.isPlaying === true) { - this.source.loop = this.loop; - } - - return this; - } - - setLoopStart(value) { - this.loopStart = value; - - return this; - } - - setLoopEnd(value) { - this.loopEnd = value; - - return this; - } - - getVolume() { - return this.gain.gain.value; - } - - setVolume(value) { - this.gain.gain.setTargetAtTime(value, this.context.currentTime, 0.01); - - return this; - } -} - -const _position = /*@__PURE__*/ new Vector3(); -const _quaternion = /*@__PURE__*/ new Quaternion(); -const _scale = /*@__PURE__*/ new Vector3(); -const _orientation = /*@__PURE__*/ new Vector3(); - -class PositionalAudio extends Audio { - constructor(listener) { - super(listener); - - this.panner = this.context.createPanner(); - this.panner.panningModel = 'HRTF'; - this.panner.connect(this.gain); - } - - connect() { - super.connect(); - - this.panner.connect(this.gain); - } - - disconnect() { - super.disconnect(); - - this.panner.disconnect(this.gain); - } - - getOutput() { - return this.panner; - } - - getRefDistance() { - return this.panner.refDistance; - } - - setRefDistance(value) { - this.panner.refDistance = value; - - return this; - } - - getRolloffFactor() { - return this.panner.rolloffFactor; - } - - setRolloffFactor(value) { - this.panner.rolloffFactor = value; - - return this; - } - - getDistanceModel() { - return this.panner.distanceModel; - } - - setDistanceModel(value) { - this.panner.distanceModel = value; - - return this; - } - - getMaxDistance() { - return this.panner.maxDistance; - } - - setMaxDistance(value) { - this.panner.maxDistance = value; - - return this; - } - - setDirectionalCone(coneInnerAngle, coneOuterAngle, coneOuterGain) { - this.panner.coneInnerAngle = coneInnerAngle; - this.panner.coneOuterAngle = coneOuterAngle; - this.panner.coneOuterGain = coneOuterGain; - - return this; - } - - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - - if (this.hasPlaybackControl === true && this.isPlaying === false) return; - - this.matrixWorld.decompose(_position, _quaternion, _scale); - - _orientation.set(0, 0, 1).applyQuaternion(_quaternion); - - const panner = this.panner; - - if (panner.positionX) { - // code path for Chrome and Firefox (see #14393) - - const endTime = this.context.currentTime + this.listener.timeDelta; - - panner.positionX.linearRampToValueAtTime(_position.x, endTime); - panner.positionY.linearRampToValueAtTime(_position.y, endTime); - panner.positionZ.linearRampToValueAtTime(_position.z, endTime); - panner.orientationX.linearRampToValueAtTime(_orientation.x, endTime); - panner.orientationY.linearRampToValueAtTime(_orientation.y, endTime); - panner.orientationZ.linearRampToValueAtTime(_orientation.z, endTime); - } else { - panner.setPosition(_position.x, _position.y, _position.z); - panner.setOrientation(_orientation.x, _orientation.y, _orientation.z); - } - } -} - -class AudioAnalyser { - constructor(audio, fftSize = 2048) { - this.analyser = audio.context.createAnalyser(); - this.analyser.fftSize = fftSize; - - this.data = new Uint8Array(this.analyser.frequencyBinCount); - - audio.getOutput().connect(this.analyser); - } - - getFrequencyData() { - this.analyser.getByteFrequencyData(this.data); - - return this.data; - } - - getAverageFrequency() { - let value = 0; - const data = this.getFrequencyData(); - - for (let i = 0; i < data.length; i++) { - value += data[i]; - } - - return value / data.length; - } -} - -class PropertyMixer { - constructor(binding, typeName, valueSize) { - this.binding = binding; - this.valueSize = valueSize; - - let mixFunction, mixFunctionAdditive, setIdentity; - - // buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ] - // - // interpolators can use .buffer as their .result - // the data then goes to 'incoming' - // - // 'accu0' and 'accu1' are used frame-interleaved for - // the cumulative result and are compared to detect - // changes - // - // 'orig' stores the original state of the property - // - // 'add' is used for additive cumulative results - // - // 'work' is optional and is only present for quaternion types. It is used - // to store intermediate quaternion multiplication results - - switch (typeName) { - case 'quaternion': - mixFunction = this._slerp; - mixFunctionAdditive = this._slerpAdditive; - setIdentity = this._setAdditiveIdentityQuaternion; - - this.buffer = new Float64Array(valueSize * 6); - this._workIndex = 5; - break; - - case 'string': - case 'bool': - mixFunction = this._select; - - // Use the regular mix function and for additive on these types, - // additive is not relevant for non-numeric types - mixFunctionAdditive = this._select; - - setIdentity = this._setAdditiveIdentityOther; - - this.buffer = new Array(valueSize * 5); - break; - - default: - mixFunction = this._lerp; - mixFunctionAdditive = this._lerpAdditive; - setIdentity = this._setAdditiveIdentityNumeric; - - this.buffer = new Float64Array(valueSize * 5); - } - - this._mixBufferRegion = mixFunction; - this._mixBufferRegionAdditive = mixFunctionAdditive; - this._setIdentity = setIdentity; - this._origIndex = 3; - this._addIndex = 4; - - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - - this.useCount = 0; - this.referenceCount = 0; - } - - // accumulate data in the 'incoming' region into 'accu' - accumulate(accuIndex, weight) { - // note: happily accumulating nothing when weight = 0, the caller knows - // the weight and shouldn't have made the call in the first place - - const buffer = this.buffer, - stride = this.valueSize, - offset = accuIndex * stride + stride; - - let currentWeight = this.cumulativeWeight; - - if (currentWeight === 0) { - // accuN := incoming * weight - - for (let i = 0; i !== stride; ++i) { - buffer[offset + i] = buffer[i]; - } - - currentWeight = weight; - } else { - // accuN := accuN + incoming * weight - - currentWeight += weight; - const mix = weight / currentWeight; - this._mixBufferRegion(buffer, offset, 0, mix, stride); - } - - this.cumulativeWeight = currentWeight; - } - - // accumulate data in the 'incoming' region into 'add' - accumulateAdditive(weight) { - const buffer = this.buffer, - stride = this.valueSize, - offset = stride * this._addIndex; - - if (this.cumulativeWeightAdditive === 0) { - // add = identity - - this._setIdentity(); - } - - // add := add + incoming * weight - - this._mixBufferRegionAdditive(buffer, offset, 0, weight, stride); - this.cumulativeWeightAdditive += weight; - } - - // apply the state of 'accu' to the binding when accus differ - apply(accuIndex) { - const stride = this.valueSize, - buffer = this.buffer, - offset = accuIndex * stride + stride, - weight = this.cumulativeWeight, - weightAdditive = this.cumulativeWeightAdditive, - binding = this.binding; - - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - - if (weight < 1) { - // accuN := accuN + original * ( 1 - cumulativeWeight ) - - const originalValueOffset = stride * this._origIndex; - - this._mixBufferRegion(buffer, offset, originalValueOffset, 1 - weight, stride); - } - - if (weightAdditive > 0) { - // accuN := accuN + additive accuN - - this._mixBufferRegionAdditive(buffer, offset, this._addIndex * stride, 1, stride); - } - - for (let i = stride, e = stride + stride; i !== e; ++i) { - if (buffer[i] !== buffer[i + stride]) { - // value has changed -> update scene graph - - binding.setValue(buffer, offset); - break; - } - } - } - - // remember the state of the bound property and copy it to both accus - saveOriginalState() { - const binding = this.binding; - - const buffer = this.buffer, - stride = this.valueSize, - originalValueOffset = stride * this._origIndex; - - binding.getValue(buffer, originalValueOffset); - - // accu[0..1] := orig -- initially detect changes against the original - for (let i = stride, e = originalValueOffset; i !== e; ++i) { - buffer[i] = buffer[originalValueOffset + (i % stride)]; - } - - // Add to identity for additive - this._setIdentity(); - - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - } - - // apply the state previously taken via 'saveOriginalState' to the binding - restoreOriginalState() { - const originalValueOffset = this.valueSize * 3; - this.binding.setValue(this.buffer, originalValueOffset); - } - - _setAdditiveIdentityNumeric() { - const startIndex = this._addIndex * this.valueSize; - const endIndex = startIndex + this.valueSize; - - for (let i = startIndex; i < endIndex; i++) { - this.buffer[i] = 0; - } - } - - _setAdditiveIdentityQuaternion() { - this._setAdditiveIdentityNumeric(); - this.buffer[this._addIndex * this.valueSize + 3] = 1; - } - - _setAdditiveIdentityOther() { - const startIndex = this._origIndex * this.valueSize; - const targetIndex = this._addIndex * this.valueSize; - - for (let i = 0; i < this.valueSize; i++) { - this.buffer[targetIndex + i] = this.buffer[startIndex + i]; - } - } - - // mix functions - - _select(buffer, dstOffset, srcOffset, t, stride) { - if (t >= 0.5) { - for (let i = 0; i !== stride; ++i) { - buffer[dstOffset + i] = buffer[srcOffset + i]; - } - } - } - - _slerp(buffer, dstOffset, srcOffset, t) { - Quaternion.slerpFlat(buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t); - } - - _slerpAdditive(buffer, dstOffset, srcOffset, t, stride) { - const workOffset = this._workIndex * stride; - - // Store result in intermediate buffer offset - Quaternion.multiplyQuaternionsFlat(buffer, workOffset, buffer, dstOffset, buffer, srcOffset); - - // Slerp to the intermediate result - Quaternion.slerpFlat(buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t); - } - - _lerp(buffer, dstOffset, srcOffset, t, stride) { - const s = 1 - t; - - for (let i = 0; i !== stride; ++i) { - const j = dstOffset + i; - - buffer[j] = buffer[j] * s + buffer[srcOffset + i] * t; - } - } - - _lerpAdditive(buffer, dstOffset, srcOffset, t, stride) { - for (let i = 0; i !== stride; ++i) { - const j = dstOffset + i; - - buffer[j] = buffer[j] + buffer[srcOffset + i] * t; - } - } -} - -// Characters [].:/ are reserved for track binding syntax. -const _RESERVED_CHARS_RE = '\\[\\]\\.:\\/'; -const _reservedRe = new RegExp('[' + _RESERVED_CHARS_RE + ']', 'g'); - -// Attempts to allow node names from any language. ES5's `\w` regexp matches -// only latin characters, and the unicode \p{L} is not yet supported. So -// instead, we exclude reserved characters and match everything else. -const _wordChar = '[^' + _RESERVED_CHARS_RE + ']'; -const _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace('\\.', '') + ']'; - -// Parent directories, delimited by '/' or ':'. Currently unused, but must -// be matched to parse the rest of the track name. -const _directoryRe = /*@__PURE__*/ /((?:WC+[\/:])*)/.source.replace('WC', _wordChar); - -// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'. -const _nodeRe = /*@__PURE__*/ /(WCOD+)?/.source.replace('WCOD', _wordCharOrDot); - -// Object on target node, and accessor. May not contain reserved -// characters. Accessor may contain any character except closing bracket. -const _objectRe = /*@__PURE__*/ /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace('WC', _wordChar); - -// Property and accessor. May not contain reserved characters. Accessor may -// contain any non-bracket characters. -const _propertyRe = /*@__PURE__*/ /\.(WC+)(?:\[(.+)\])?/.source.replace('WC', _wordChar); - -const _trackRe = new RegExp('' + '^' + _directoryRe + _nodeRe + _objectRe + _propertyRe + '$'); - -const _supportedObjectNames = ['material', 'materials', 'bones', 'map']; - -class Composite { - constructor(targetGroup, path, optionalParsedPath) { - const parsedPath = optionalParsedPath || PropertyBinding.parseTrackName(path); - - this._targetGroup = targetGroup; - this._bindings = targetGroup.subscribe_(path, parsedPath); - } - - getValue(array, offset) { - this.bind(); // bind all binding - - const firstValidIndex = this._targetGroup.nCachedObjects_, - binding = this._bindings[firstValidIndex]; - - // and only call .getValue on the first - if (binding !== undefined) binding.getValue(array, offset); - } - - setValue(array, offset) { - const bindings = this._bindings; - - for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { - bindings[i].setValue(array, offset); - } - } - - bind() { - const bindings = this._bindings; - - for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { - bindings[i].bind(); - } - } - - unbind() { - const bindings = this._bindings; - - for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { - bindings[i].unbind(); - } - } -} - -// Note: This class uses a State pattern on a per-method basis: -// 'bind' sets 'this.getValue' / 'setValue' and shadows the -// prototype version of these methods with one that represents -// the bound state. When the property is not found, the methods -// become no-ops. -class PropertyBinding { - constructor(rootNode, path, parsedPath) { - this.path = path; - this.parsedPath = parsedPath || PropertyBinding.parseTrackName(path); - - this.node = PropertyBinding.findNode(rootNode, this.parsedPath.nodeName); - - this.rootNode = rootNode; - - // initial state of these methods that calls 'bind' - this.getValue = this._getValue_unbound; - this.setValue = this._setValue_unbound; - } - - static create(root, path, parsedPath) { - if (!(root && root.isAnimationObjectGroup)) { - return new PropertyBinding(root, path, parsedPath); - } else { - return new PropertyBinding.Composite(root, path, parsedPath); - } - } - - /** - * Replaces spaces with underscores and removes unsupported characters from - * node names, to ensure compatibility with parseTrackName(). - * - * @param {string} name Node name to be sanitized. - * @return {string} - */ - static sanitizeNodeName(name) { - return name.replace(/\s/g, '_').replace(_reservedRe, ''); - } - - static parseTrackName(trackName) { - const matches = _trackRe.exec(trackName); - - if (matches === null) { - throw new Error('PropertyBinding: Cannot parse trackName: ' + trackName); - } - - const results = { - // directoryName: matches[ 1 ], // (tschw) currently unused - nodeName: matches[2], - objectName: matches[3], - objectIndex: matches[4], - propertyName: matches[5], // required - propertyIndex: matches[6], - }; - - const lastDot = results.nodeName && results.nodeName.lastIndexOf('.'); - - if (lastDot !== undefined && lastDot !== -1) { - const objectName = results.nodeName.substring(lastDot + 1); - - // Object names must be checked against an allowlist. Otherwise, there - // is no way to parse 'foo.bar.baz': 'baz' must be a property, but - // 'bar' could be the objectName, or part of a nodeName (which can - // include '.' characters). - if (_supportedObjectNames.indexOf(objectName) !== -1) { - results.nodeName = results.nodeName.substring(0, lastDot); - results.objectName = objectName; - } - } - - if (results.propertyName === null || results.propertyName.length === 0) { - throw new Error('PropertyBinding: can not parse propertyName from trackName: ' + trackName); - } - - return results; - } - - static findNode(root, nodeName) { - if (nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === -1 || nodeName === root.name || nodeName === root.uuid) { - return root; - } - - // search into skeleton bones. - if (root.skeleton) { - const bone = root.skeleton.getBoneByName(nodeName); - - if (bone !== undefined) { - return bone; - } - } - - // search into node subtree. - if (root.children) { - const searchNodeSubtree = function (children) { - for (let i = 0; i < children.length; i++) { - const childNode = children[i]; - - if (childNode.name === nodeName || childNode.uuid === nodeName) { - return childNode; - } - - const result = searchNodeSubtree(childNode.children); - - if (result) return result; - } - - return null; - }; - - const subTreeNode = searchNodeSubtree(root.children); - - if (subTreeNode) { - return subTreeNode; - } - } - - return null; - } - - // these are used to "bind" a nonexistent property - _getValue_unavailable() {} - _setValue_unavailable() {} - - // Getters - - _getValue_direct(buffer, offset) { - buffer[offset] = this.targetObject[this.propertyName]; - } - - _getValue_array(buffer, offset) { - const source = this.resolvedProperty; - - for (let i = 0, n = source.length; i !== n; ++i) { - buffer[offset++] = source[i]; - } - } - - _getValue_arrayElement(buffer, offset) { - buffer[offset] = this.resolvedProperty[this.propertyIndex]; - } - - _getValue_toArray(buffer, offset) { - this.resolvedProperty.toArray(buffer, offset); - } - - // Direct - - _setValue_direct(buffer, offset) { - this.targetObject[this.propertyName] = buffer[offset]; - } - - _setValue_direct_setNeedsUpdate(buffer, offset) { - this.targetObject[this.propertyName] = buffer[offset]; - this.targetObject.needsUpdate = true; - } - - _setValue_direct_setMatrixWorldNeedsUpdate(buffer, offset) { - this.targetObject[this.propertyName] = buffer[offset]; - this.targetObject.matrixWorldNeedsUpdate = true; - } - - // EntireArray - - _setValue_array(buffer, offset) { - const dest = this.resolvedProperty; - - for (let i = 0, n = dest.length; i !== n; ++i) { - dest[i] = buffer[offset++]; - } - } - - _setValue_array_setNeedsUpdate(buffer, offset) { - const dest = this.resolvedProperty; - - for (let i = 0, n = dest.length; i !== n; ++i) { - dest[i] = buffer[offset++]; - } - - this.targetObject.needsUpdate = true; - } - - _setValue_array_setMatrixWorldNeedsUpdate(buffer, offset) { - const dest = this.resolvedProperty; - - for (let i = 0, n = dest.length; i !== n; ++i) { - dest[i] = buffer[offset++]; - } - - this.targetObject.matrixWorldNeedsUpdate = true; - } - - // ArrayElement - - _setValue_arrayElement(buffer, offset) { - this.resolvedProperty[this.propertyIndex] = buffer[offset]; - } - - _setValue_arrayElement_setNeedsUpdate(buffer, offset) { - this.resolvedProperty[this.propertyIndex] = buffer[offset]; - this.targetObject.needsUpdate = true; - } - - _setValue_arrayElement_setMatrixWorldNeedsUpdate(buffer, offset) { - this.resolvedProperty[this.propertyIndex] = buffer[offset]; - this.targetObject.matrixWorldNeedsUpdate = true; - } - - // HasToFromArray - - _setValue_fromArray(buffer, offset) { - this.resolvedProperty.fromArray(buffer, offset); - } - - _setValue_fromArray_setNeedsUpdate(buffer, offset) { - this.resolvedProperty.fromArray(buffer, offset); - this.targetObject.needsUpdate = true; - } - - _setValue_fromArray_setMatrixWorldNeedsUpdate(buffer, offset) { - this.resolvedProperty.fromArray(buffer, offset); - this.targetObject.matrixWorldNeedsUpdate = true; - } - - _getValue_unbound(targetArray, offset) { - this.bind(); - this.getValue(targetArray, offset); - } - - _setValue_unbound(sourceArray, offset) { - this.bind(); - this.setValue(sourceArray, offset); - } - - // create getter / setter pair for a property in the scene graph - bind() { - let targetObject = this.node; - const parsedPath = this.parsedPath; - - const objectName = parsedPath.objectName; - const propertyName = parsedPath.propertyName; - let propertyIndex = parsedPath.propertyIndex; - - if (!targetObject) { - targetObject = PropertyBinding.findNode(this.rootNode, parsedPath.nodeName); - - this.node = targetObject; - } - - // set fail state so we can just 'return' on error - this.getValue = this._getValue_unavailable; - this.setValue = this._setValue_unavailable; - - // ensure there is a value node - if (!targetObject) { - console.warn('THREE.PropertyBinding: No target node found for track: ' + this.path + '.'); - return; - } - - if (objectName) { - let objectIndex = parsedPath.objectIndex; - - // special cases were we need to reach deeper into the hierarchy to get the face materials.... - switch (objectName) { - case 'materials': - if (!targetObject.material) { - console.error('THREE.PropertyBinding: Can not bind to material as node does not have a material.', this); - return; - } - - if (!targetObject.material.materials) { - console.error('THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this); - return; - } - - targetObject = targetObject.material.materials; - - break; - - case 'bones': - if (!targetObject.skeleton) { - console.error('THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this); - return; - } - - // potential future optimization: skip this if propertyIndex is already an integer - // and convert the integer string to a true integer. - - targetObject = targetObject.skeleton.bones; - - // support resolving morphTarget names into indices. - for (let i = 0; i < targetObject.length; i++) { - if (targetObject[i].name === objectIndex) { - objectIndex = i; - break; - } - } - - break; - - case 'map': - if ('map' in targetObject) { - targetObject = targetObject.map; - break; - } - - if (!targetObject.material) { - console.error('THREE.PropertyBinding: Can not bind to material as node does not have a material.', this); - return; - } - - if (!targetObject.material.map) { - console.error('THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.', this); - return; - } - - targetObject = targetObject.material.map; - break; - - default: - if (targetObject[objectName] === undefined) { - console.error('THREE.PropertyBinding: Can not bind to objectName of node undefined.', this); - return; - } - - targetObject = targetObject[objectName]; - } - - if (objectIndex !== undefined) { - if (targetObject[objectIndex] === undefined) { - console.error('THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject); - return; - } - - targetObject = targetObject[objectIndex]; - } - } - - // resolve property - const nodeProperty = targetObject[propertyName]; - - if (nodeProperty === undefined) { - const nodeName = parsedPath.nodeName; - - console.error('THREE.PropertyBinding: Trying to update property for track: ' + nodeName + '.' + propertyName + " but it wasn't found.", targetObject); - return; - } - - // determine versioning scheme - let versioning = this.Versioning.None; - - this.targetObject = targetObject; - - if (targetObject.needsUpdate !== undefined) { - // material - - versioning = this.Versioning.NeedsUpdate; - } else if (targetObject.matrixWorldNeedsUpdate !== undefined) { - // node transform - - versioning = this.Versioning.MatrixWorldNeedsUpdate; - } - - // determine how the property gets bound - let bindingType = this.BindingType.Direct; - - if (propertyIndex !== undefined) { - // access a sub element of the property array (only primitives are supported right now) - - if (propertyName === 'morphTargetInfluences') { - // potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer. - - // support resolving morphTarget names into indices. - if (!targetObject.geometry) { - console.error('THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this); - return; - } - - if (!targetObject.geometry.morphAttributes) { - console.error('THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this); - return; - } - - if (targetObject.morphTargetDictionary[propertyIndex] !== undefined) { - propertyIndex = targetObject.morphTargetDictionary[propertyIndex]; - } - } - - bindingType = this.BindingType.ArrayElement; - - this.resolvedProperty = nodeProperty; - this.propertyIndex = propertyIndex; - } else if (nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined) { - // must use copy for Object3D.Euler/Quaternion - - bindingType = this.BindingType.HasFromToArray; - - this.resolvedProperty = nodeProperty; - } else if (Array.isArray(nodeProperty)) { - bindingType = this.BindingType.EntireArray; - - this.resolvedProperty = nodeProperty; - } else { - this.propertyName = propertyName; - } - - // select getter / setter - this.getValue = this.GetterByBindingType[bindingType]; - this.setValue = this.SetterByBindingTypeAndVersioning[bindingType][versioning]; - } - - unbind() { - this.node = null; - - // back to the prototype version of getValue / setValue - // note: avoiding to mutate the shape of 'this' via 'delete' - this.getValue = this._getValue_unbound; - this.setValue = this._setValue_unbound; - } -} - -PropertyBinding.Composite = Composite; - -PropertyBinding.prototype.BindingType = { - Direct: 0, - EntireArray: 1, - ArrayElement: 2, - HasFromToArray: 3, -}; - -PropertyBinding.prototype.Versioning = { - None: 0, - NeedsUpdate: 1, - MatrixWorldNeedsUpdate: 2, -}; - -PropertyBinding.prototype.GetterByBindingType = [PropertyBinding.prototype._getValue_direct, PropertyBinding.prototype._getValue_array, PropertyBinding.prototype._getValue_arrayElement, PropertyBinding.prototype._getValue_toArray]; - -PropertyBinding.prototype.SetterByBindingTypeAndVersioning = [ - [ - // Direct - PropertyBinding.prototype._setValue_direct, - PropertyBinding.prototype._setValue_direct_setNeedsUpdate, - PropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate, - ], - [ - // EntireArray - - PropertyBinding.prototype._setValue_array, - PropertyBinding.prototype._setValue_array_setNeedsUpdate, - PropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate, - ], - [ - // ArrayElement - PropertyBinding.prototype._setValue_arrayElement, - PropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate, - PropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate, - ], - [ - // HasToFromArray - PropertyBinding.prototype._setValue_fromArray, - PropertyBinding.prototype._setValue_fromArray_setNeedsUpdate, - PropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate, - ], -]; - -/** - * - * A group of objects that receives a shared animation state. - * - * Usage: - * - * - Add objects you would otherwise pass as 'root' to the - * constructor or the .clipAction method of AnimationMixer. - * - * - Instead pass this object as 'root'. - * - * - You can also add and remove objects later when the mixer - * is running. - * - * Note: - * - * Objects of this class appear as one object to the mixer, - * so cache control of the individual objects must be done - * on the group. - * - * Limitation: - * - * - The animated properties must be compatible among the - * all objects in the group. - * - * - A single property can either be controlled through a - * target group or directly, but not both. - */ - -class AnimationObjectGroup { - constructor() { - this.isAnimationObjectGroup = true; - - this.uuid = generateUUID(); - - // cached objects followed by the active ones - this._objects = Array.prototype.slice.call(arguments); - - this.nCachedObjects_ = 0; // threshold - // note: read by PropertyBinding.Composite - - const indices = {}; - this._indicesByUUID = indices; // for bookkeeping - - for (let i = 0, n = arguments.length; i !== n; ++i) { - indices[arguments[i].uuid] = i; - } - - this._paths = []; // inside: string - this._parsedPaths = []; // inside: { we don't care, here } - this._bindings = []; // inside: Array< PropertyBinding > - this._bindingsIndicesByPath = {}; // inside: indices in these arrays - - const scope = this; - - this.stats = { - objects: { - get total() { - return scope._objects.length; - }, - get inUse() { - return this.total - scope.nCachedObjects_; - }, - }, - get bindingsPerObject() { - return scope._bindings.length; - }, - }; - } - - add() { - const objects = this._objects, - indicesByUUID = this._indicesByUUID, - paths = this._paths, - parsedPaths = this._parsedPaths, - bindings = this._bindings, - nBindings = bindings.length; - - let knownObject = undefined, - nObjects = objects.length, - nCachedObjects = this.nCachedObjects_; - - for (let i = 0, n = arguments.length; i !== n; ++i) { - const object = arguments[i], - uuid = object.uuid; - let index = indicesByUUID[uuid]; - - if (index === undefined) { - // unknown object -> add it to the ACTIVE region - - index = nObjects++; - indicesByUUID[uuid] = index; - objects.push(object); - - // accounting is done, now do the same for all bindings - - for (let j = 0, m = nBindings; j !== m; ++j) { - bindings[j].push(new PropertyBinding(object, paths[j], parsedPaths[j])); - } - } else if (index < nCachedObjects) { - knownObject = objects[index]; - - // move existing object to the ACTIVE region - - const firstActiveIndex = --nCachedObjects, - lastCachedObject = objects[firstActiveIndex]; - - indicesByUUID[lastCachedObject.uuid] = index; - objects[index] = lastCachedObject; - - indicesByUUID[uuid] = firstActiveIndex; - objects[firstActiveIndex] = object; - - // accounting is done, now do the same for all bindings - - for (let j = 0, m = nBindings; j !== m; ++j) { - const bindingsForPath = bindings[j], - lastCached = bindingsForPath[firstActiveIndex]; - - let binding = bindingsForPath[index]; - - bindingsForPath[index] = lastCached; - - if (binding === undefined) { - // since we do not bother to create new bindings - // for objects that are cached, the binding may - // or may not exist - - binding = new PropertyBinding(object, paths[j], parsedPaths[j]); - } - - bindingsForPath[firstActiveIndex] = binding; - } - } else if (objects[index] !== knownObject) { - console.error('THREE.AnimationObjectGroup: Different objects with the same UUID ' + 'detected. Clean the caches or recreate your infrastructure when reloading scenes.'); - } // else the object is already where we want it to be - } // for arguments - - this.nCachedObjects_ = nCachedObjects; - } - - remove() { - const objects = this._objects, - indicesByUUID = this._indicesByUUID, - bindings = this._bindings, - nBindings = bindings.length; - - let nCachedObjects = this.nCachedObjects_; - - for (let i = 0, n = arguments.length; i !== n; ++i) { - const object = arguments[i], - uuid = object.uuid, - index = indicesByUUID[uuid]; - - if (index !== undefined && index >= nCachedObjects) { - // move existing object into the CACHED region - - const lastCachedIndex = nCachedObjects++, - firstActiveObject = objects[lastCachedIndex]; - - indicesByUUID[firstActiveObject.uuid] = index; - objects[index] = firstActiveObject; - - indicesByUUID[uuid] = lastCachedIndex; - objects[lastCachedIndex] = object; - - // accounting is done, now do the same for all bindings - - for (let j = 0, m = nBindings; j !== m; ++j) { - const bindingsForPath = bindings[j], - firstActive = bindingsForPath[lastCachedIndex], - binding = bindingsForPath[index]; - - bindingsForPath[index] = firstActive; - bindingsForPath[lastCachedIndex] = binding; - } - } - } // for arguments - - this.nCachedObjects_ = nCachedObjects; - } - - // remove & forget - uncache() { - const objects = this._objects, - indicesByUUID = this._indicesByUUID, - bindings = this._bindings, - nBindings = bindings.length; - - let nCachedObjects = this.nCachedObjects_, - nObjects = objects.length; - - for (let i = 0, n = arguments.length; i !== n; ++i) { - const object = arguments[i], - uuid = object.uuid, - index = indicesByUUID[uuid]; - - if (index !== undefined) { - delete indicesByUUID[uuid]; - - if (index < nCachedObjects) { - // object is cached, shrink the CACHED region - - const firstActiveIndex = --nCachedObjects, - lastCachedObject = objects[firstActiveIndex], - lastIndex = --nObjects, - lastObject = objects[lastIndex]; - - // last cached object takes this object's place - indicesByUUID[lastCachedObject.uuid] = index; - objects[index] = lastCachedObject; - - // last object goes to the activated slot and pop - indicesByUUID[lastObject.uuid] = firstActiveIndex; - objects[firstActiveIndex] = lastObject; - objects.pop(); - - // accounting is done, now do the same for all bindings - - for (let j = 0, m = nBindings; j !== m; ++j) { - const bindingsForPath = bindings[j], - lastCached = bindingsForPath[firstActiveIndex], - last = bindingsForPath[lastIndex]; - - bindingsForPath[index] = lastCached; - bindingsForPath[firstActiveIndex] = last; - bindingsForPath.pop(); - } - } else { - // object is active, just swap with the last and pop - - const lastIndex = --nObjects, - lastObject = objects[lastIndex]; - - if (lastIndex > 0) { - indicesByUUID[lastObject.uuid] = index; - } - - objects[index] = lastObject; - objects.pop(); - - // accounting is done, now do the same for all bindings - - for (let j = 0, m = nBindings; j !== m; ++j) { - const bindingsForPath = bindings[j]; - - bindingsForPath[index] = bindingsForPath[lastIndex]; - bindingsForPath.pop(); - } - } // cached or active - } // if object is known - } // for arguments - - this.nCachedObjects_ = nCachedObjects; - } - - // Internal interface used by befriended PropertyBinding.Composite: - - subscribe_(path, parsedPath) { - // returns an array of bindings for the given path that is changed - // according to the contained objects in the group - - const indicesByPath = this._bindingsIndicesByPath; - let index = indicesByPath[path]; - const bindings = this._bindings; - - if (index !== undefined) return bindings[index]; - - const paths = this._paths, - parsedPaths = this._parsedPaths, - objects = this._objects, - nObjects = objects.length, - nCachedObjects = this.nCachedObjects_, - bindingsForPath = new Array(nObjects); - - index = bindings.length; - - indicesByPath[path] = index; - - paths.push(path); - parsedPaths.push(parsedPath); - bindings.push(bindingsForPath); - - for (let i = nCachedObjects, n = objects.length; i !== n; ++i) { - const object = objects[i]; - bindingsForPath[i] = new PropertyBinding(object, path, parsedPath); - } - - return bindingsForPath; - } - - unsubscribe_(path) { - // tells the group to forget about a property path and no longer - // update the array previously obtained with 'subscribe_' - - const indicesByPath = this._bindingsIndicesByPath, - index = indicesByPath[path]; - - if (index !== undefined) { - const paths = this._paths, - parsedPaths = this._parsedPaths, - bindings = this._bindings, - lastBindingsIndex = bindings.length - 1, - lastBindings = bindings[lastBindingsIndex], - lastBindingsPath = path[lastBindingsIndex]; - - indicesByPath[lastBindingsPath] = index; - - bindings[index] = lastBindings; - bindings.pop(); - - parsedPaths[index] = parsedPaths[lastBindingsIndex]; - parsedPaths.pop(); - - paths[index] = paths[lastBindingsIndex]; - paths.pop(); - } - } -} - -class AnimationAction { - constructor(mixer, clip, localRoot = null, blendMode = clip.blendMode) { - this._mixer = mixer; - this._clip = clip; - this._localRoot = localRoot; - this.blendMode = blendMode; - - const tracks = clip.tracks, - nTracks = tracks.length, - interpolants = new Array(nTracks); - - const interpolantSettings = { - endingStart: ZeroCurvatureEnding, - endingEnd: ZeroCurvatureEnding, - }; - - for (let i = 0; i !== nTracks; ++i) { - const interpolant = tracks[i].createInterpolant(null); - interpolants[i] = interpolant; - interpolant.settings = interpolantSettings; - } - - this._interpolantSettings = interpolantSettings; - - this._interpolants = interpolants; // bound by the mixer - - // inside: PropertyMixer (managed by the mixer) - this._propertyBindings = new Array(nTracks); - - this._cacheIndex = null; // for the memory manager - this._byClipCacheIndex = null; // for the memory manager - - this._timeScaleInterpolant = null; - this._weightInterpolant = null; - - this.loop = LoopRepeat; - this._loopCount = -1; - - // global mixer time when the action is to be started - // it's set back to 'null' upon start of the action - this._startTime = null; - - // scaled local time of the action - // gets clamped or wrapped to 0..clip.duration according to loop - this.time = 0; - - this.timeScale = 1; - this._effectiveTimeScale = 1; - - this.weight = 1; - this._effectiveWeight = 1; - - this.repetitions = Infinity; // no. of repetitions when looping - - this.paused = false; // true -> zero effective time scale - this.enabled = true; // false -> zero effective weight - - this.clampWhenFinished = false; // keep feeding the last frame? - - this.zeroSlopeAtStart = true; // for smooth interpolation w/o separate - this.zeroSlopeAtEnd = true; // clips for start, loop and end - } - - // State & Scheduling - - play() { - this._mixer._activateAction(this); - - return this; - } - - stop() { - this._mixer._deactivateAction(this); - - return this.reset(); - } - - reset() { - this.paused = false; - this.enabled = true; - - this.time = 0; // restart clip - this._loopCount = -1; // forget previous loops - this._startTime = null; // forget scheduling - - return this.stopFading().stopWarping(); - } - - isRunning() { - return this.enabled && !this.paused && this.timeScale !== 0 && this._startTime === null && this._mixer._isActiveAction(this); - } - - // return true when play has been called - isScheduled() { - return this._mixer._isActiveAction(this); - } - - startAt(time) { - this._startTime = time; - - return this; - } - - setLoop(mode, repetitions) { - this.loop = mode; - this.repetitions = repetitions; - - return this; - } - - // Weight - - // set the weight stopping any scheduled fading - // although .enabled = false yields an effective weight of zero, this - // method does *not* change .enabled, because it would be confusing - setEffectiveWeight(weight) { - this.weight = weight; - - // note: same logic as when updated at runtime - this._effectiveWeight = this.enabled ? weight : 0; - - return this.stopFading(); - } - - // return the weight considering fading and .enabled - getEffectiveWeight() { - return this._effectiveWeight; - } - - fadeIn(duration) { - return this._scheduleFading(duration, 0, 1); - } - - fadeOut(duration) { - return this._scheduleFading(duration, 1, 0); - } - - crossFadeFrom(fadeOutAction, duration, warp) { - fadeOutAction.fadeOut(duration); - this.fadeIn(duration); - - if (warp) { - const fadeInDuration = this._clip.duration, - fadeOutDuration = fadeOutAction._clip.duration, - startEndRatio = fadeOutDuration / fadeInDuration, - endStartRatio = fadeInDuration / fadeOutDuration; - - fadeOutAction.warp(1.0, startEndRatio, duration); - this.warp(endStartRatio, 1.0, duration); - } - - return this; - } - - crossFadeTo(fadeInAction, duration, warp) { - return fadeInAction.crossFadeFrom(this, duration, warp); - } - - stopFading() { - const weightInterpolant = this._weightInterpolant; - - if (weightInterpolant !== null) { - this._weightInterpolant = null; - this._mixer._takeBackControlInterpolant(weightInterpolant); - } - - return this; - } - - // Time Scale Control - - // set the time scale stopping any scheduled warping - // although .paused = true yields an effective time scale of zero, this - // method does *not* change .paused, because it would be confusing - setEffectiveTimeScale(timeScale) { - this.timeScale = timeScale; - this._effectiveTimeScale = this.paused ? 0 : timeScale; - - return this.stopWarping(); - } - - // return the time scale considering warping and .paused - getEffectiveTimeScale() { - return this._effectiveTimeScale; - } - - setDuration(duration) { - this.timeScale = this._clip.duration / duration; - - return this.stopWarping(); - } - - syncWith(action) { - this.time = action.time; - this.timeScale = action.timeScale; - - return this.stopWarping(); - } - - halt(duration) { - return this.warp(this._effectiveTimeScale, 0, duration); - } - - warp(startTimeScale, endTimeScale, duration) { - const mixer = this._mixer, - now = mixer.time, - timeScale = this.timeScale; - - let interpolant = this._timeScaleInterpolant; - - if (interpolant === null) { - interpolant = mixer._lendControlInterpolant(); - this._timeScaleInterpolant = interpolant; - } - - const times = interpolant.parameterPositions, - values = interpolant.sampleValues; - - times[0] = now; - times[1] = now + duration; - - values[0] = startTimeScale / timeScale; - values[1] = endTimeScale / timeScale; - - return this; - } - - stopWarping() { - const timeScaleInterpolant = this._timeScaleInterpolant; - - if (timeScaleInterpolant !== null) { - this._timeScaleInterpolant = null; - this._mixer._takeBackControlInterpolant(timeScaleInterpolant); - } - - return this; - } - - // Object Accessors - - getMixer() { - return this._mixer; - } - - getClip() { - return this._clip; - } - - getRoot() { - return this._localRoot || this._mixer._root; - } - - // Interna - - _update(time, deltaTime, timeDirection, accuIndex) { - // called by the mixer - - if (!this.enabled) { - // call ._updateWeight() to update ._effectiveWeight - - this._updateWeight(time); - return; - } - - const startTime = this._startTime; - - if (startTime !== null) { - // check for scheduled start of action - - const timeRunning = (time - startTime) * timeDirection; - if (timeRunning < 0 || timeDirection === 0) { - deltaTime = 0; - } else { - this._startTime = null; // unschedule - deltaTime = timeDirection * timeRunning; - } - } - - // apply time scale and advance time - - deltaTime *= this._updateTimeScale(time); - const clipTime = this._updateTime(deltaTime); - - // note: _updateTime may disable the action resulting in - // an effective weight of 0 - - const weight = this._updateWeight(time); - - if (weight > 0) { - const interpolants = this._interpolants; - const propertyMixers = this._propertyBindings; - - switch (this.blendMode) { - case AdditiveAnimationBlendMode: - for (let j = 0, m = interpolants.length; j !== m; ++j) { - interpolants[j].evaluate(clipTime); - propertyMixers[j].accumulateAdditive(weight); - } - - break; - - case NormalAnimationBlendMode: - default: - for (let j = 0, m = interpolants.length; j !== m; ++j) { - interpolants[j].evaluate(clipTime); - propertyMixers[j].accumulate(accuIndex, weight); - } - } - } - } - - _updateWeight(time) { - let weight = 0; - - if (this.enabled) { - weight = this.weight; - const interpolant = this._weightInterpolant; - - if (interpolant !== null) { - const interpolantValue = interpolant.evaluate(time)[0]; - - weight *= interpolantValue; - - if (time > interpolant.parameterPositions[1]) { - this.stopFading(); - - if (interpolantValue === 0) { - // faded out, disable - this.enabled = false; - } - } - } - } - - this._effectiveWeight = weight; - return weight; - } - - _updateTimeScale(time) { - let timeScale = 0; - - if (!this.paused) { - timeScale = this.timeScale; - - const interpolant = this._timeScaleInterpolant; - - if (interpolant !== null) { - const interpolantValue = interpolant.evaluate(time)[0]; - - timeScale *= interpolantValue; - - if (time > interpolant.parameterPositions[1]) { - this.stopWarping(); - - if (timeScale === 0) { - // motion has halted, pause - this.paused = true; - } else { - // warp done - apply final time scale - this.timeScale = timeScale; - } - } - } - } - - this._effectiveTimeScale = timeScale; - return timeScale; - } - - _updateTime(deltaTime) { - const duration = this._clip.duration; - const loop = this.loop; - - let time = this.time + deltaTime; - let loopCount = this._loopCount; - - const pingPong = loop === LoopPingPong; - - if (deltaTime === 0) { - if (loopCount === -1) return time; - - return pingPong && (loopCount & 1) === 1 ? duration - time : time; - } - - if (loop === LoopOnce) { - if (loopCount === -1) { - // just started - - this._loopCount = 0; - this._setEndings(true, true, false); - } - - handle_stop: { - if (time >= duration) { - time = duration; - } else if (time < 0) { - time = 0; - } else { - this.time = time; - - break handle_stop; - } - - if (this.clampWhenFinished) this.paused = true; - else this.enabled = false; - - this.time = time; - - this._mixer.dispatchEvent({ - type: 'finished', - action: this, - direction: deltaTime < 0 ? -1 : 1, - }); - } - } else { - // repetitive Repeat or PingPong - - if (loopCount === -1) { - // just started - - if (deltaTime >= 0) { - loopCount = 0; - - this._setEndings(true, this.repetitions === 0, pingPong); - } else { - // when looping in reverse direction, the initial - // transition through zero counts as a repetition, - // so leave loopCount at -1 - - this._setEndings(this.repetitions === 0, true, pingPong); - } - } - - if (time >= duration || time < 0) { - // wrap around - - const loopDelta = Math.floor(time / duration); // signed - time -= duration * loopDelta; - - loopCount += Math.abs(loopDelta); - - const pending = this.repetitions - loopCount; - - if (pending <= 0) { - // have to stop (switch state, clamp time, fire event) - - if (this.clampWhenFinished) this.paused = true; - else this.enabled = false; - - time = deltaTime > 0 ? duration : 0; - - this.time = time; - - this._mixer.dispatchEvent({ - type: 'finished', - action: this, - direction: deltaTime > 0 ? 1 : -1, - }); - } else { - // keep running - - if (pending === 1) { - // entering the last round - - const atStart = deltaTime < 0; - this._setEndings(atStart, !atStart, pingPong); - } else { - this._setEndings(false, false, pingPong); - } - - this._loopCount = loopCount; - - this.time = time; - - this._mixer.dispatchEvent({ - type: 'loop', - action: this, - loopDelta: loopDelta, - }); - } - } else { - this.time = time; - } - - if (pingPong && (loopCount & 1) === 1) { - // invert time for the "pong round" - - return duration - time; - } - } - - return time; - } - - _setEndings(atStart, atEnd, pingPong) { - const settings = this._interpolantSettings; - - if (pingPong) { - settings.endingStart = ZeroSlopeEnding; - settings.endingEnd = ZeroSlopeEnding; - } else { - // assuming for LoopOnce atStart == atEnd == true - - if (atStart) { - settings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding; - } else { - settings.endingStart = WrapAroundEnding; - } - - if (atEnd) { - settings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding; - } else { - settings.endingEnd = WrapAroundEnding; - } - } - } - - _scheduleFading(duration, weightNow, weightThen) { - const mixer = this._mixer, - now = mixer.time; - let interpolant = this._weightInterpolant; - - if (interpolant === null) { - interpolant = mixer._lendControlInterpolant(); - this._weightInterpolant = interpolant; - } - - const times = interpolant.parameterPositions, - values = interpolant.sampleValues; - - times[0] = now; - values[0] = weightNow; - times[1] = now + duration; - values[1] = weightThen; - - return this; - } -} - -const _controlInterpolantsResultBuffer = new Float32Array(1); - -class AnimationMixer extends EventDispatcher { - constructor(root) { - super(); - - this._root = root; - this._initMemoryManager(); - this._accuIndex = 0; - this.time = 0; - this.timeScale = 1.0; - } - - _bindAction(action, prototypeAction) { - const root = action._localRoot || this._root, - tracks = action._clip.tracks, - nTracks = tracks.length, - bindings = action._propertyBindings, - interpolants = action._interpolants, - rootUuid = root.uuid, - bindingsByRoot = this._bindingsByRootAndName; - - let bindingsByName = bindingsByRoot[rootUuid]; - - if (bindingsByName === undefined) { - bindingsByName = {}; - bindingsByRoot[rootUuid] = bindingsByName; - } - - for (let i = 0; i !== nTracks; ++i) { - const track = tracks[i], - trackName = track.name; - - let binding = bindingsByName[trackName]; - - if (binding !== undefined) { - ++binding.referenceCount; - bindings[i] = binding; - } else { - binding = bindings[i]; - - if (binding !== undefined) { - // existing binding, make sure the cache knows - - if (binding._cacheIndex === null) { - ++binding.referenceCount; - this._addInactiveBinding(binding, rootUuid, trackName); - } - - continue; - } - - const path = prototypeAction && prototypeAction._propertyBindings[i].binding.parsedPath; - - binding = new PropertyMixer(PropertyBinding.create(root, trackName, path), track.ValueTypeName, track.getValueSize()); - - ++binding.referenceCount; - this._addInactiveBinding(binding, rootUuid, trackName); - - bindings[i] = binding; - } - - interpolants[i].resultBuffer = binding.buffer; - } - } - - _activateAction(action) { - if (!this._isActiveAction(action)) { - if (action._cacheIndex === null) { - // this action has been forgotten by the cache, but the user - // appears to be still using it -> rebind - - const rootUuid = (action._localRoot || this._root).uuid, - clipUuid = action._clip.uuid, - actionsForClip = this._actionsByClip[clipUuid]; - - this._bindAction(action, actionsForClip && actionsForClip.knownActions[0]); - - this._addInactiveAction(action, clipUuid, rootUuid); - } - - const bindings = action._propertyBindings; - - // increment reference counts / sort out state - for (let i = 0, n = bindings.length; i !== n; ++i) { - const binding = bindings[i]; - - if (binding.useCount++ === 0) { - this._lendBinding(binding); - binding.saveOriginalState(); - } - } - - this._lendAction(action); - } - } - - _deactivateAction(action) { - if (this._isActiveAction(action)) { - const bindings = action._propertyBindings; - - // decrement reference counts / sort out state - for (let i = 0, n = bindings.length; i !== n; ++i) { - const binding = bindings[i]; - - if (--binding.useCount === 0) { - binding.restoreOriginalState(); - this._takeBackBinding(binding); - } - } - - this._takeBackAction(action); - } - } - - // Memory manager - - _initMemoryManager() { - this._actions = []; // 'nActiveActions' followed by inactive ones - this._nActiveActions = 0; - - this._actionsByClip = {}; - // inside: - // { - // knownActions: Array< AnimationAction > - used as prototypes - // actionByRoot: AnimationAction - lookup - // } - - this._bindings = []; // 'nActiveBindings' followed by inactive ones - this._nActiveBindings = 0; - - this._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer > - - this._controlInterpolants = []; // same game as above - this._nActiveControlInterpolants = 0; - - const scope = this; - - this.stats = { - actions: { - get total() { - return scope._actions.length; - }, - get inUse() { - return scope._nActiveActions; - }, - }, - bindings: { - get total() { - return scope._bindings.length; - }, - get inUse() { - return scope._nActiveBindings; - }, - }, - controlInterpolants: { - get total() { - return scope._controlInterpolants.length; - }, - get inUse() { - return scope._nActiveControlInterpolants; - }, - }, - }; - } - - // Memory management for AnimationAction objects - - _isActiveAction(action) { - const index = action._cacheIndex; - return index !== null && index < this._nActiveActions; - } - - _addInactiveAction(action, clipUuid, rootUuid) { - const actions = this._actions, - actionsByClip = this._actionsByClip; - - let actionsForClip = actionsByClip[clipUuid]; - - if (actionsForClip === undefined) { - actionsForClip = { - knownActions: [action], - actionByRoot: {}, - }; - - action._byClipCacheIndex = 0; - - actionsByClip[clipUuid] = actionsForClip; - } else { - const knownActions = actionsForClip.knownActions; - - action._byClipCacheIndex = knownActions.length; - knownActions.push(action); - } - - action._cacheIndex = actions.length; - actions.push(action); - - actionsForClip.actionByRoot[rootUuid] = action; - } - - _removeInactiveAction(action) { - const actions = this._actions, - lastInactiveAction = actions[actions.length - 1], - cacheIndex = action._cacheIndex; - - lastInactiveAction._cacheIndex = cacheIndex; - actions[cacheIndex] = lastInactiveAction; - actions.pop(); - - action._cacheIndex = null; - - const clipUuid = action._clip.uuid, - actionsByClip = this._actionsByClip, - actionsForClip = actionsByClip[clipUuid], - knownActionsForClip = actionsForClip.knownActions, - lastKnownAction = knownActionsForClip[knownActionsForClip.length - 1], - byClipCacheIndex = action._byClipCacheIndex; - - lastKnownAction._byClipCacheIndex = byClipCacheIndex; - knownActionsForClip[byClipCacheIndex] = lastKnownAction; - knownActionsForClip.pop(); - - action._byClipCacheIndex = null; - - const actionByRoot = actionsForClip.actionByRoot, - rootUuid = (action._localRoot || this._root).uuid; - - delete actionByRoot[rootUuid]; - - if (knownActionsForClip.length === 0) { - delete actionsByClip[clipUuid]; - } - - this._removeInactiveBindingsForAction(action); - } - - _removeInactiveBindingsForAction(action) { - const bindings = action._propertyBindings; - - for (let i = 0, n = bindings.length; i !== n; ++i) { - const binding = bindings[i]; - - if (--binding.referenceCount === 0) { - this._removeInactiveBinding(binding); - } - } - } - - _lendAction(action) { - // [ active actions | inactive actions ] - // [ active actions >| inactive actions ] - // s a - // <-swap-> - // a s - - const actions = this._actions, - prevIndex = action._cacheIndex, - lastActiveIndex = this._nActiveActions++, - firstInactiveAction = actions[lastActiveIndex]; - - action._cacheIndex = lastActiveIndex; - actions[lastActiveIndex] = action; - - firstInactiveAction._cacheIndex = prevIndex; - actions[prevIndex] = firstInactiveAction; - } - - _takeBackAction(action) { - // [ active actions | inactive actions ] - // [ active actions |< inactive actions ] - // a s - // <-swap-> - // s a - - const actions = this._actions, - prevIndex = action._cacheIndex, - firstInactiveIndex = --this._nActiveActions, - lastActiveAction = actions[firstInactiveIndex]; - - action._cacheIndex = firstInactiveIndex; - actions[firstInactiveIndex] = action; - - lastActiveAction._cacheIndex = prevIndex; - actions[prevIndex] = lastActiveAction; - } - - // Memory management for PropertyMixer objects - - _addInactiveBinding(binding, rootUuid, trackName) { - const bindingsByRoot = this._bindingsByRootAndName, - bindings = this._bindings; - - let bindingByName = bindingsByRoot[rootUuid]; - - if (bindingByName === undefined) { - bindingByName = {}; - bindingsByRoot[rootUuid] = bindingByName; - } - - bindingByName[trackName] = binding; - - binding._cacheIndex = bindings.length; - bindings.push(binding); - } - - _removeInactiveBinding(binding) { - const bindings = this._bindings, - propBinding = binding.binding, - rootUuid = propBinding.rootNode.uuid, - trackName = propBinding.path, - bindingsByRoot = this._bindingsByRootAndName, - bindingByName = bindingsByRoot[rootUuid], - lastInactiveBinding = bindings[bindings.length - 1], - cacheIndex = binding._cacheIndex; - - lastInactiveBinding._cacheIndex = cacheIndex; - bindings[cacheIndex] = lastInactiveBinding; - bindings.pop(); - - delete bindingByName[trackName]; - - if (Object.keys(bindingByName).length === 0) { - delete bindingsByRoot[rootUuid]; - } - } - - _lendBinding(binding) { - const bindings = this._bindings, - prevIndex = binding._cacheIndex, - lastActiveIndex = this._nActiveBindings++, - firstInactiveBinding = bindings[lastActiveIndex]; - - binding._cacheIndex = lastActiveIndex; - bindings[lastActiveIndex] = binding; - - firstInactiveBinding._cacheIndex = prevIndex; - bindings[prevIndex] = firstInactiveBinding; - } - - _takeBackBinding(binding) { - const bindings = this._bindings, - prevIndex = binding._cacheIndex, - firstInactiveIndex = --this._nActiveBindings, - lastActiveBinding = bindings[firstInactiveIndex]; - - binding._cacheIndex = firstInactiveIndex; - bindings[firstInactiveIndex] = binding; - - lastActiveBinding._cacheIndex = prevIndex; - bindings[prevIndex] = lastActiveBinding; - } - - // Memory management of Interpolants for weight and time scale - - _lendControlInterpolant() { - const interpolants = this._controlInterpolants, - lastActiveIndex = this._nActiveControlInterpolants++; - - let interpolant = interpolants[lastActiveIndex]; - - if (interpolant === undefined) { - interpolant = new LinearInterpolant(new Float32Array(2), new Float32Array(2), 1, _controlInterpolantsResultBuffer); - - interpolant.__cacheIndex = lastActiveIndex; - interpolants[lastActiveIndex] = interpolant; - } - - return interpolant; - } - - _takeBackControlInterpolant(interpolant) { - const interpolants = this._controlInterpolants, - prevIndex = interpolant.__cacheIndex, - firstInactiveIndex = --this._nActiveControlInterpolants, - lastActiveInterpolant = interpolants[firstInactiveIndex]; - - interpolant.__cacheIndex = firstInactiveIndex; - interpolants[firstInactiveIndex] = interpolant; - - lastActiveInterpolant.__cacheIndex = prevIndex; - interpolants[prevIndex] = lastActiveInterpolant; - } - - // return an action for a clip optionally using a custom root target - // object (this method allocates a lot of dynamic memory in case a - // previously unknown clip/root combination is specified) - clipAction(clip, optionalRoot, blendMode) { - const root = optionalRoot || this._root, - rootUuid = root.uuid; - - let clipObject = typeof clip === 'string' ? AnimationClip.findByName(root, clip) : clip; - - const clipUuid = clipObject !== null ? clipObject.uuid : clip; - - const actionsForClip = this._actionsByClip[clipUuid]; - let prototypeAction = null; - - if (blendMode === undefined) { - if (clipObject !== null) { - blendMode = clipObject.blendMode; - } else { - blendMode = NormalAnimationBlendMode; - } - } - - if (actionsForClip !== undefined) { - const existingAction = actionsForClip.actionByRoot[rootUuid]; - - if (existingAction !== undefined && existingAction.blendMode === blendMode) { - return existingAction; - } - - // we know the clip, so we don't have to parse all - // the bindings again but can just copy - prototypeAction = actionsForClip.knownActions[0]; - - // also, take the clip from the prototype action - if (clipObject === null) clipObject = prototypeAction._clip; - } - - // clip must be known when specified via string - if (clipObject === null) return null; - - // allocate all resources required to run it - const newAction = new AnimationAction(this, clipObject, optionalRoot, blendMode); - - this._bindAction(newAction, prototypeAction); - - // and make the action known to the memory manager - this._addInactiveAction(newAction, clipUuid, rootUuid); - - return newAction; - } - - // get an existing action - existingAction(clip, optionalRoot) { - const root = optionalRoot || this._root, - rootUuid = root.uuid, - clipObject = typeof clip === 'string' ? AnimationClip.findByName(root, clip) : clip, - clipUuid = clipObject ? clipObject.uuid : clip, - actionsForClip = this._actionsByClip[clipUuid]; - - if (actionsForClip !== undefined) { - return actionsForClip.actionByRoot[rootUuid] || null; - } - - return null; - } - - // deactivates all previously scheduled actions - stopAllAction() { - const actions = this._actions, - nActions = this._nActiveActions; - - for (let i = nActions - 1; i >= 0; --i) { - actions[i].stop(); - } - - return this; - } - - // advance the time and update apply the animation - update(deltaTime) { - deltaTime *= this.timeScale; - - const actions = this._actions, - nActions = this._nActiveActions, - time = (this.time += deltaTime), - timeDirection = Math.sign(deltaTime), - accuIndex = (this._accuIndex ^= 1); - - // run active actions - - for (let i = 0; i !== nActions; ++i) { - const action = actions[i]; - - action._update(time, deltaTime, timeDirection, accuIndex); - } - - // update scene graph - - const bindings = this._bindings, - nBindings = this._nActiveBindings; - - for (let i = 0; i !== nBindings; ++i) { - bindings[i].apply(accuIndex); - } - - return this; - } - - // Allows you to seek to a specific time in an animation. - setTime(timeInSeconds) { - this.time = 0; // Zero out time attribute for AnimationMixer object; - for (let i = 0; i < this._actions.length; i++) { - this._actions[i].time = 0; // Zero out time attribute for all associated AnimationAction objects. - } - - return this.update(timeInSeconds); // Update used to set exact time. Returns "this" AnimationMixer object. - } - - // return this mixer's root target object - getRoot() { - return this._root; - } - - // free all resources specific to a particular clip - uncacheClip(clip) { - const actions = this._actions, - clipUuid = clip.uuid, - actionsByClip = this._actionsByClip, - actionsForClip = actionsByClip[clipUuid]; - - if (actionsForClip !== undefined) { - // note: just calling _removeInactiveAction would mess up the - // iteration state and also require updating the state we can - // just throw away - - const actionsToRemove = actionsForClip.knownActions; - - for (let i = 0, n = actionsToRemove.length; i !== n; ++i) { - const action = actionsToRemove[i]; - - this._deactivateAction(action); - - const cacheIndex = action._cacheIndex, - lastInactiveAction = actions[actions.length - 1]; - - action._cacheIndex = null; - action._byClipCacheIndex = null; - - lastInactiveAction._cacheIndex = cacheIndex; - actions[cacheIndex] = lastInactiveAction; - actions.pop(); - - this._removeInactiveBindingsForAction(action); - } - - delete actionsByClip[clipUuid]; - } - } - - // free all resources specific to a particular root target object - uncacheRoot(root) { - const rootUuid = root.uuid, - actionsByClip = this._actionsByClip; - - for (const clipUuid in actionsByClip) { - const actionByRoot = actionsByClip[clipUuid].actionByRoot, - action = actionByRoot[rootUuid]; - - if (action !== undefined) { - this._deactivateAction(action); - this._removeInactiveAction(action); - } - } - - const bindingsByRoot = this._bindingsByRootAndName, - bindingByName = bindingsByRoot[rootUuid]; - - if (bindingByName !== undefined) { - for (const trackName in bindingByName) { - const binding = bindingByName[trackName]; - binding.restoreOriginalState(); - this._removeInactiveBinding(binding); - } - } - } - - // remove a targeted clip from the cache - uncacheAction(clip, optionalRoot) { - const action = this.existingAction(clip, optionalRoot); - - if (action !== null) { - this._deactivateAction(action); - this._removeInactiveAction(action); - } - } -} - -let Uniform$1 = class Uniform { - constructor(value) { - this.value = value; - } - - clone() { - return new Uniform(this.value.clone === undefined ? this.value : this.value.clone()); - } -}; - -let _id$8 = 0; - -let UniformsGroup$1 = class UniformsGroup extends EventDispatcher { - constructor() { - super(); - - this.isUniformsGroup = true; - - Object.defineProperty(this, 'id', { value: _id$8++ }); - - this.name = ''; - - this.usage = StaticDrawUsage; - this.uniforms = []; - } - - add(uniform) { - this.uniforms.push(uniform); - - return this; - } - - remove(uniform) { - const index = this.uniforms.indexOf(uniform); - - if (index !== -1) this.uniforms.splice(index, 1); - - return this; - } - - setName(name) { - this.name = name; - - return this; - } - - setUsage(value) { - this.usage = value; - - return this; - } - - dispose() { - this.dispatchEvent({ type: 'dispose' }); - - return this; - } - - copy(source) { - this.name = source.name; - this.usage = source.usage; - - const uniformsSource = source.uniforms; - - this.uniforms.length = 0; - - for (let i = 0, l = uniformsSource.length; i < l; i++) { - const uniforms = Array.isArray(uniformsSource[i]) ? uniformsSource[i] : [uniformsSource[i]]; - - for (let j = 0; j < uniforms.length; j++) { - this.uniforms.push(uniforms[j].clone()); - } - } - - return this; - } - - clone() { - return new this.constructor().copy(this); - } -}; - -class InstancedInterleavedBuffer extends InterleavedBuffer { - constructor(array, stride, meshPerAttribute = 1) { - super(array, stride); - - this.isInstancedInterleavedBuffer = true; - - this.meshPerAttribute = meshPerAttribute; - } - - copy(source) { - super.copy(source); - - this.meshPerAttribute = source.meshPerAttribute; - - return this; - } - - clone(data) { - const ib = super.clone(data); - - ib.meshPerAttribute = this.meshPerAttribute; - - return ib; - } - - toJSON(data) { - const json = super.toJSON(data); - - json.isInstancedInterleavedBuffer = true; - json.meshPerAttribute = this.meshPerAttribute; - - return json; - } -} - -class GLBufferAttribute { - constructor(buffer, type, itemSize, elementSize, count) { - this.isGLBufferAttribute = true; - - this.name = ''; - - this.buffer = buffer; - this.type = type; - this.itemSize = itemSize; - this.elementSize = elementSize; - this.count = count; - - this.version = 0; - } - - set needsUpdate(value) { - if (value === true) this.version++; - } - - setBuffer(buffer) { - this.buffer = buffer; - - return this; - } - - setType(type, elementSize) { - this.type = type; - this.elementSize = elementSize; - - return this; - } - - setItemSize(itemSize) { - this.itemSize = itemSize; - - return this; - } - - setCount(count) { - this.count = count; - - return this; - } -} - -const _matrix = /*@__PURE__*/ new Matrix4(); - -class Raycaster { - constructor(origin, direction, near = 0, far = Infinity) { - this.ray = new Ray(origin, direction); - // direction is assumed to be normalized (for accurate distance calculations) - - this.near = near; - this.far = far; - this.camera = null; - this.layers = new Layers(); - - this.params = { - Mesh: {}, - Line: { threshold: 1 }, - LOD: {}, - Points: { threshold: 1 }, - Sprite: {}, - }; - } - - set(origin, direction) { - // direction is assumed to be normalized (for accurate distance calculations) - - this.ray.set(origin, direction); - } - - setFromCamera(coords, camera) { - if (camera.isPerspectiveCamera) { - this.ray.origin.setFromMatrixPosition(camera.matrixWorld); - this.ray.direction.set(coords.x, coords.y, 0.5).unproject(camera).sub(this.ray.origin).normalize(); - this.camera = camera; - } else if (camera.isOrthographicCamera) { - this.ray.origin.set(coords.x, coords.y, (camera.near + camera.far) / (camera.near - camera.far)).unproject(camera); // set origin in plane of camera - this.ray.direction.set(0, 0, -1).transformDirection(camera.matrixWorld); - this.camera = camera; - } else { - console.error('THREE.Raycaster: Unsupported camera type: ' + camera.type); - } - } - - setFromXRController(controller) { - _matrix.identity().extractRotation(controller.matrixWorld); - - this.ray.origin.setFromMatrixPosition(controller.matrixWorld); - this.ray.direction.set(0, 0, -1).applyMatrix4(_matrix); - - return this; - } - - intersectObject(object, recursive = true, intersects = []) { - intersect(object, this, intersects, recursive); - - intersects.sort(ascSort); - - return intersects; - } - - intersectObjects(objects, recursive = true, intersects = []) { - for (let i = 0, l = objects.length; i < l; i++) { - intersect(objects[i], this, intersects, recursive); - } - - intersects.sort(ascSort); - - return intersects; - } -} - -function ascSort(a, b) { - return a.distance - b.distance; -} - -function intersect(object, raycaster, intersects, recursive) { - let propagate = true; - - if (object.layers.test(raycaster.layers)) { - const result = object.raycast(raycaster, intersects); - - if (result === false) propagate = false; - } - - if (propagate === true && recursive === true) { - const children = object.children; - - for (let i = 0, l = children.length; i < l; i++) { - intersect(children[i], raycaster, intersects, true); - } - } -} - -/** - * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system - * - * phi (the polar angle) is measured from the positive y-axis. The positive y-axis is up. - * theta (the azimuthal angle) is measured from the positive z-axis. - */ -class Spherical { - constructor(radius = 1, phi = 0, theta = 0) { - this.radius = radius; - this.phi = phi; // polar angle - this.theta = theta; // azimuthal angle - - return this; - } - - set(radius, phi, theta) { - this.radius = radius; - this.phi = phi; - this.theta = theta; - - return this; - } - - copy(other) { - this.radius = other.radius; - this.phi = other.phi; - this.theta = other.theta; - - return this; - } - - // restrict phi to be between EPS and PI-EPS - makeSafe() { - const EPS = 0.000001; - this.phi = Math.max(EPS, Math.min(Math.PI - EPS, this.phi)); - - return this; - } - - setFromVector3(v) { - return this.setFromCartesianCoords(v.x, v.y, v.z); - } - - setFromCartesianCoords(x, y, z) { - this.radius = Math.sqrt(x * x + y * y + z * z); - - if (this.radius === 0) { - this.theta = 0; - this.phi = 0; - } else { - this.theta = Math.atan2(x, z); - this.phi = Math.acos(clamp$1(y / this.radius, -1, 1)); - } - - return this; - } - - clone() { - return new this.constructor().copy(this); - } -} - -/** - * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system - */ - -class Cylindrical { - constructor(radius = 1, theta = 0, y = 0) { - this.radius = radius; // distance from the origin to a point in the x-z plane - this.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis - this.y = y; // height above the x-z plane - - return this; - } - - set(radius, theta, y) { - this.radius = radius; - this.theta = theta; - this.y = y; - - return this; - } - - copy(other) { - this.radius = other.radius; - this.theta = other.theta; - this.y = other.y; - - return this; - } - - setFromVector3(v) { - return this.setFromCartesianCoords(v.x, v.y, v.z); - } - - setFromCartesianCoords(x, y, z) { - this.radius = Math.sqrt(x * x + z * z); - this.theta = Math.atan2(x, z); - this.y = y; - - return this; - } - - clone() { - return new this.constructor().copy(this); - } -} - -class Matrix2 { - constructor(n11, n12, n21, n22) { - Matrix2.prototype.isMatrix2 = true; - - this.elements = [1, 0, 0, 1]; - - if (n11 !== undefined) { - this.set(n11, n12, n21, n22); - } - } - - identity() { - this.set(1, 0, 0, 1); - - return this; - } - - fromArray(array, offset = 0) { - for (let i = 0; i < 4; i++) { - this.elements[i] = array[i + offset]; - } - - return this; - } - - set(n11, n12, n21, n22) { - const te = this.elements; - - te[0] = n11; - te[2] = n12; - te[1] = n21; - te[3] = n22; - - return this; - } -} - -const _vector$4 = /*@__PURE__*/ new Vector2(); - -class Box2 { - constructor(min = new Vector2(+Infinity, +Infinity), max = new Vector2(-Infinity, -Infinity)) { - this.isBox2 = true; - - this.min = min; - this.max = max; - } - - set(min, max) { - this.min.copy(min); - this.max.copy(max); - - return this; - } - - setFromPoints(points) { - this.makeEmpty(); - - for (let i = 0, il = points.length; i < il; i++) { - this.expandByPoint(points[i]); - } - - return this; - } - - setFromCenterAndSize(center, size) { - const halfSize = _vector$4.copy(size).multiplyScalar(0.5); - this.min.copy(center).sub(halfSize); - this.max.copy(center).add(halfSize); - - return this; - } - - clone() { - return new this.constructor().copy(this); - } - - copy(box) { - this.min.copy(box.min); - this.max.copy(box.max); - - return this; - } - - makeEmpty() { - this.min.x = this.min.y = +Infinity; - this.max.x = this.max.y = -Infinity; - - return this; - } - - isEmpty() { - // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes - - return this.max.x < this.min.x || this.max.y < this.min.y; - } - - getCenter(target) { - return this.isEmpty() ? target.set(0, 0) : target.addVectors(this.min, this.max).multiplyScalar(0.5); - } - - getSize(target) { - return this.isEmpty() ? target.set(0, 0) : target.subVectors(this.max, this.min); - } - - expandByPoint(point) { - this.min.min(point); - this.max.max(point); - - return this; - } - - expandByVector(vector) { - this.min.sub(vector); - this.max.add(vector); - - return this; - } - - expandByScalar(scalar) { - this.min.addScalar(-scalar); - this.max.addScalar(scalar); - - return this; - } - - containsPoint(point) { - return point.x >= this.min.x && point.x <= this.max.x && point.y >= this.min.y && point.y <= this.max.y; - } - - containsBox(box) { - return this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y; - } - - getParameter(point, target) { - // This can potentially have a divide by zero if the box - // has a size dimension of 0. - - return target.set((point.x - this.min.x) / (this.max.x - this.min.x), (point.y - this.min.y) / (this.max.y - this.min.y)); - } - - intersectsBox(box) { - // using 4 splitting planes to rule out intersections - - return box.max.x >= this.min.x && box.min.x <= this.max.x && box.max.y >= this.min.y && box.min.y <= this.max.y; - } - - clampPoint(point, target) { - return target.copy(point).clamp(this.min, this.max); - } - - distanceToPoint(point) { - return this.clampPoint(point, _vector$4).distanceTo(point); - } - - intersect(box) { - this.min.max(box.min); - this.max.min(box.max); - - if (this.isEmpty()) this.makeEmpty(); - - return this; - } - - union(box) { - this.min.min(box.min); - this.max.max(box.max); - - return this; - } - - translate(offset) { - this.min.add(offset); - this.max.add(offset); - - return this; - } - - equals(box) { - return box.min.equals(this.min) && box.max.equals(this.max); - } -} - -const _startP = /*@__PURE__*/ new Vector3(); -const _startEnd = /*@__PURE__*/ new Vector3(); - -class Line3 { - constructor(start = new Vector3(), end = new Vector3()) { - this.start = start; - this.end = end; - } - - set(start, end) { - this.start.copy(start); - this.end.copy(end); - - return this; - } - - copy(line) { - this.start.copy(line.start); - this.end.copy(line.end); - - return this; - } - - getCenter(target) { - return target.addVectors(this.start, this.end).multiplyScalar(0.5); - } - - delta(target) { - return target.subVectors(this.end, this.start); - } - - distanceSq() { - return this.start.distanceToSquared(this.end); - } - - distance() { - return this.start.distanceTo(this.end); - } - - at(t, target) { - return this.delta(target).multiplyScalar(t).add(this.start); - } - - closestPointToPointParameter(point, clampToLine) { - _startP.subVectors(point, this.start); - _startEnd.subVectors(this.end, this.start); - - const startEnd2 = _startEnd.dot(_startEnd); - const startEnd_startP = _startEnd.dot(_startP); - - let t = startEnd_startP / startEnd2; - - if (clampToLine) { - t = clamp$1(t, 0, 1); - } - - return t; - } - - closestPointToPoint(point, clampToLine, target) { - const t = this.closestPointToPointParameter(point, clampToLine); - - return this.delta(target).multiplyScalar(t).add(this.start); - } - - applyMatrix4(matrix) { - this.start.applyMatrix4(matrix); - this.end.applyMatrix4(matrix); - - return this; - } - - equals(line) { - return line.start.equals(this.start) && line.end.equals(this.end); - } - - clone() { - return new this.constructor().copy(this); - } -} - -const _vector$3 = /*@__PURE__*/ new Vector3(); - -class SpotLightHelper extends Object3D { - constructor(light, color) { - super(); - - this.light = light; - - this.matrixAutoUpdate = false; - - this.color = color; - - this.type = 'SpotLightHelper'; - - const geometry = new BufferGeometry(); - - const positions = [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, -1, 1]; - - for (let i = 0, j = 1, l = 32; i < l; i++, j++) { - const p1 = (i / l) * Math.PI * 2; - const p2 = (j / l) * Math.PI * 2; - - positions.push(Math.cos(p1), Math.sin(p1), 1, Math.cos(p2), Math.sin(p2), 1); - } - - geometry.setAttribute('position', new Float32BufferAttribute(positions, 3)); - - const material = new LineBasicMaterial({ fog: false, toneMapped: false }); - - this.cone = new LineSegments(geometry, material); - this.add(this.cone); - - this.update(); - } - - dispose() { - this.cone.geometry.dispose(); - this.cone.material.dispose(); - } - - update() { - this.light.updateWorldMatrix(true, false); - this.light.target.updateWorldMatrix(true, false); - - // update the local matrix based on the parent and light target transforms - if (this.parent) { - this.parent.updateWorldMatrix(true); - - this.matrix.copy(this.parent.matrixWorld).invert().multiply(this.light.matrixWorld); - } else { - this.matrix.copy(this.light.matrixWorld); - } - - this.matrixWorld.copy(this.light.matrixWorld); - - const coneLength = this.light.distance ? this.light.distance : 1000; - const coneWidth = coneLength * Math.tan(this.light.angle); - - this.cone.scale.set(coneWidth, coneWidth, coneLength); - - _vector$3.setFromMatrixPosition(this.light.target.matrixWorld); - - this.cone.lookAt(_vector$3); - - if (this.color !== undefined) { - this.cone.material.color.set(this.color); - } else { - this.cone.material.color.copy(this.light.color); - } - } -} - -const _vector$2 = /*@__PURE__*/ new Vector3(); -const _boneMatrix = /*@__PURE__*/ new Matrix4(); -const _matrixWorldInv = /*@__PURE__*/ new Matrix4(); - -class SkeletonHelper extends LineSegments { - constructor(object) { - const bones = getBoneList(object); - - const geometry = new BufferGeometry(); - - const vertices = []; - const colors = []; - - const color1 = new Color(0, 0, 1); - const color2 = new Color(0, 1, 0); - - for (let i = 0; i < bones.length; i++) { - const bone = bones[i]; - - if (bone.parent && bone.parent.isBone) { - vertices.push(0, 0, 0); - vertices.push(0, 0, 0); - colors.push(color1.r, color1.g, color1.b); - colors.push(color2.r, color2.g, color2.b); - } - } - - geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute('color', new Float32BufferAttribute(colors, 3)); - - const material = new LineBasicMaterial({ vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true }); - - super(geometry, material); - - this.isSkeletonHelper = true; - - this.type = 'SkeletonHelper'; - - this.root = object; - this.bones = bones; - - this.matrix = object.matrixWorld; - this.matrixAutoUpdate = false; - } - - updateMatrixWorld(force) { - const bones = this.bones; - - const geometry = this.geometry; - const position = geometry.getAttribute('position'); - - _matrixWorldInv.copy(this.root.matrixWorld).invert(); - - for (let i = 0, j = 0; i < bones.length; i++) { - const bone = bones[i]; - - if (bone.parent && bone.parent.isBone) { - _boneMatrix.multiplyMatrices(_matrixWorldInv, bone.matrixWorld); - _vector$2.setFromMatrixPosition(_boneMatrix); - position.setXYZ(j, _vector$2.x, _vector$2.y, _vector$2.z); - - _boneMatrix.multiplyMatrices(_matrixWorldInv, bone.parent.matrixWorld); - _vector$2.setFromMatrixPosition(_boneMatrix); - position.setXYZ(j + 1, _vector$2.x, _vector$2.y, _vector$2.z); - - j += 2; - } - } - - geometry.getAttribute('position').needsUpdate = true; - - super.updateMatrixWorld(force); - } - - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -} - -function getBoneList(object) { - const boneList = []; - - if (object.isBone === true) { - boneList.push(object); - } - - for (let i = 0; i < object.children.length; i++) { - boneList.push.apply(boneList, getBoneList(object.children[i])); - } - - return boneList; -} - -class PointLightHelper extends Mesh { - constructor(light, sphereSize, color) { - const geometry = new SphereGeometry(sphereSize, 4, 2); - const material = new MeshBasicMaterial({ wireframe: true, fog: false, toneMapped: false }); - - super(geometry, material); - - this.light = light; - - this.color = color; - - this.type = 'PointLightHelper'; - - this.matrix = this.light.matrixWorld; - this.matrixAutoUpdate = false; - - this.update(); - - /* - // TODO: delete this comment? - const distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 ); - const distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } ); - - this.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial ); - this.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial ); - - const d = light.distance; - - if ( d === 0.0 ) { - - this.lightDistance.visible = false; - - } else { - - this.lightDistance.scale.set( d, d, d ); - - } - - this.add( this.lightDistance ); - */ - } - - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } - - update() { - this.light.updateWorldMatrix(true, false); - - if (this.color !== undefined) { - this.material.color.set(this.color); - } else { - this.material.color.copy(this.light.color); - } - - /* - const d = this.light.distance; - - if ( d === 0.0 ) { - - this.lightDistance.visible = false; - - } else { - - this.lightDistance.visible = true; - this.lightDistance.scale.set( d, d, d ); - - } - */ - } -} - -const _vector$1 = /*@__PURE__*/ new Vector3(); -const _color1 = /*@__PURE__*/ new Color(); -const _color2 = /*@__PURE__*/ new Color(); - -class HemisphereLightHelper extends Object3D { - constructor(light, size, color) { - super(); - - this.light = light; - - this.matrix = light.matrixWorld; - this.matrixAutoUpdate = false; - - this.color = color; - - this.type = 'HemisphereLightHelper'; - - const geometry = new OctahedronGeometry(size); - geometry.rotateY(Math.PI * 0.5); - - this.material = new MeshBasicMaterial({ wireframe: true, fog: false, toneMapped: false }); - if (this.color === undefined) this.material.vertexColors = true; - - const position = geometry.getAttribute('position'); - const colors = new Float32Array(position.count * 3); - - geometry.setAttribute('color', new BufferAttribute(colors, 3)); - - this.add(new Mesh(geometry, this.material)); - - this.update(); - } - - dispose() { - this.children[0].geometry.dispose(); - this.children[0].material.dispose(); - } - - update() { - const mesh = this.children[0]; - - if (this.color !== undefined) { - this.material.color.set(this.color); - } else { - const colors = mesh.geometry.getAttribute('color'); - - _color1.copy(this.light.color); - _color2.copy(this.light.groundColor); - - for (let i = 0, l = colors.count; i < l; i++) { - const color = i < l / 2 ? _color1 : _color2; - - colors.setXYZ(i, color.r, color.g, color.b); - } - - colors.needsUpdate = true; - } - - this.light.updateWorldMatrix(true, false); - - mesh.lookAt(_vector$1.setFromMatrixPosition(this.light.matrixWorld).negate()); - } -} - -class GridHelper extends LineSegments { - constructor(size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888) { - color1 = new Color(color1); - color2 = new Color(color2); - - const center = divisions / 2; - const step = size / divisions; - const halfSize = size / 2; - - const vertices = [], - colors = []; - - for (let i = 0, j = 0, k = -halfSize; i <= divisions; i++, k += step) { - vertices.push(-halfSize, 0, k, halfSize, 0, k); - vertices.push(k, 0, -halfSize, k, 0, halfSize); - - const color = i === center ? color1 : color2; - - color.toArray(colors, j); - j += 3; - color.toArray(colors, j); - j += 3; - color.toArray(colors, j); - j += 3; - color.toArray(colors, j); - j += 3; - } - - const geometry = new BufferGeometry(); - geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute('color', new Float32BufferAttribute(colors, 3)); - - const material = new LineBasicMaterial({ vertexColors: true, toneMapped: false }); - - super(geometry, material); - - this.type = 'GridHelper'; - } - - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -} - -class PolarGridHelper extends LineSegments { - constructor(radius = 10, sectors = 16, rings = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888) { - color1 = new Color(color1); - color2 = new Color(color2); - - const vertices = []; - const colors = []; - - // create the sectors - - if (sectors > 1) { - for (let i = 0; i < sectors; i++) { - const v = (i / sectors) * (Math.PI * 2); - - const x = Math.sin(v) * radius; - const z = Math.cos(v) * radius; - - vertices.push(0, 0, 0); - vertices.push(x, 0, z); - - const color = i & 1 ? color1 : color2; - - colors.push(color.r, color.g, color.b); - colors.push(color.r, color.g, color.b); - } - } - - // create the rings - - for (let i = 0; i < rings; i++) { - const color = i & 1 ? color1 : color2; - - const r = radius - (radius / rings) * i; - - for (let j = 0; j < divisions; j++) { - // first vertex - - let v = (j / divisions) * (Math.PI * 2); - - let x = Math.sin(v) * r; - let z = Math.cos(v) * r; - - vertices.push(x, 0, z); - colors.push(color.r, color.g, color.b); - - // second vertex - - v = ((j + 1) / divisions) * (Math.PI * 2); - - x = Math.sin(v) * r; - z = Math.cos(v) * r; - - vertices.push(x, 0, z); - colors.push(color.r, color.g, color.b); - } - } - - const geometry = new BufferGeometry(); - geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute('color', new Float32BufferAttribute(colors, 3)); - - const material = new LineBasicMaterial({ vertexColors: true, toneMapped: false }); - - super(geometry, material); - - this.type = 'PolarGridHelper'; - } - - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -} - -const _v1 = /*@__PURE__*/ new Vector3(); -const _v2 = /*@__PURE__*/ new Vector3(); -const _v3 = /*@__PURE__*/ new Vector3(); - -class DirectionalLightHelper extends Object3D { - constructor(light, size, color) { - super(); - - this.light = light; - - this.matrix = light.matrixWorld; - this.matrixAutoUpdate = false; - - this.color = color; - - this.type = 'DirectionalLightHelper'; - - if (size === undefined) size = 1; - - let geometry = new BufferGeometry(); - geometry.setAttribute('position', new Float32BufferAttribute([-size, size, 0, size, size, 0, size, -size, 0, -size, -size, 0, -size, size, 0], 3)); - - const material = new LineBasicMaterial({ fog: false, toneMapped: false }); - - this.lightPlane = new Line(geometry, material); - this.add(this.lightPlane); - - geometry = new BufferGeometry(); - geometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 0, 0, 1], 3)); - - this.targetLine = new Line(geometry, material); - this.add(this.targetLine); - - this.update(); - } - - dispose() { - this.lightPlane.geometry.dispose(); - this.lightPlane.material.dispose(); - this.targetLine.geometry.dispose(); - this.targetLine.material.dispose(); - } - - update() { - this.light.updateWorldMatrix(true, false); - this.light.target.updateWorldMatrix(true, false); - - _v1.setFromMatrixPosition(this.light.matrixWorld); - _v2.setFromMatrixPosition(this.light.target.matrixWorld); - _v3.subVectors(_v2, _v1); - - this.lightPlane.lookAt(_v2); - - if (this.color !== undefined) { - this.lightPlane.material.color.set(this.color); - this.targetLine.material.color.set(this.color); - } else { - this.lightPlane.material.color.copy(this.light.color); - this.targetLine.material.color.copy(this.light.color); - } - - this.targetLine.lookAt(_v2); - this.targetLine.scale.z = _v3.length(); - } -} - -const _vector = /*@__PURE__*/ new Vector3(); -const _camera$1 = /*@__PURE__*/ new Camera(); - -/** - * - shows frustum, line of sight and up of the camera - * - suitable for fast updates - * - based on frustum visualization in lightgl.js shadowmap example - * https://github.com/evanw/lightgl.js/blob/master/tests/shadowmap.html - */ - -class CameraHelper extends LineSegments { - constructor(camera) { - const geometry = new BufferGeometry(); - const material = new LineBasicMaterial({ color: 0xffffff, vertexColors: true, toneMapped: false }); - - const vertices = []; - const colors = []; - - const pointMap = {}; - - // near - - addLine('n1', 'n2'); - addLine('n2', 'n4'); - addLine('n4', 'n3'); - addLine('n3', 'n1'); - - // far - - addLine('f1', 'f2'); - addLine('f2', 'f4'); - addLine('f4', 'f3'); - addLine('f3', 'f1'); - - // sides - - addLine('n1', 'f1'); - addLine('n2', 'f2'); - addLine('n3', 'f3'); - addLine('n4', 'f4'); - - // cone - - addLine('p', 'n1'); - addLine('p', 'n2'); - addLine('p', 'n3'); - addLine('p', 'n4'); - - // up - - addLine('u1', 'u2'); - addLine('u2', 'u3'); - addLine('u3', 'u1'); - - // target - - addLine('c', 't'); - addLine('p', 'c'); - - // cross - - addLine('cn1', 'cn2'); - addLine('cn3', 'cn4'); - - addLine('cf1', 'cf2'); - addLine('cf3', 'cf4'); - - function addLine(a, b) { - addPoint(a); - addPoint(b); - } - - function addPoint(id) { - vertices.push(0, 0, 0); - colors.push(0, 0, 0); - - if (pointMap[id] === undefined) { - pointMap[id] = []; - } - - pointMap[id].push(vertices.length / 3 - 1); - } - - geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute('color', new Float32BufferAttribute(colors, 3)); - - super(geometry, material); - - this.type = 'CameraHelper'; - - this.camera = camera; - if (this.camera.updateProjectionMatrix) this.camera.updateProjectionMatrix(); - - this.matrix = camera.matrixWorld; - this.matrixAutoUpdate = false; - - this.pointMap = pointMap; - - this.update(); - - // colors - - const colorFrustum = new Color(0xffaa00); - const colorCone = new Color(0xff0000); - const colorUp = new Color(0x00aaff); - const colorTarget = new Color(0xffffff); - const colorCross = new Color(0x333333); - - this.setColors(colorFrustum, colorCone, colorUp, colorTarget, colorCross); - } - - setColors(frustum, cone, up, target, cross) { - const geometry = this.geometry; - - const colorAttribute = geometry.getAttribute('color'); - - // near - - colorAttribute.setXYZ(0, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(1, frustum.r, frustum.g, frustum.b); // n1, n2 - colorAttribute.setXYZ(2, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(3, frustum.r, frustum.g, frustum.b); // n2, n4 - colorAttribute.setXYZ(4, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(5, frustum.r, frustum.g, frustum.b); // n4, n3 - colorAttribute.setXYZ(6, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(7, frustum.r, frustum.g, frustum.b); // n3, n1 - - // far - - colorAttribute.setXYZ(8, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(9, frustum.r, frustum.g, frustum.b); // f1, f2 - colorAttribute.setXYZ(10, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(11, frustum.r, frustum.g, frustum.b); // f2, f4 - colorAttribute.setXYZ(12, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(13, frustum.r, frustum.g, frustum.b); // f4, f3 - colorAttribute.setXYZ(14, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(15, frustum.r, frustum.g, frustum.b); // f3, f1 - - // sides - - colorAttribute.setXYZ(16, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(17, frustum.r, frustum.g, frustum.b); // n1, f1 - colorAttribute.setXYZ(18, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(19, frustum.r, frustum.g, frustum.b); // n2, f2 - colorAttribute.setXYZ(20, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(21, frustum.r, frustum.g, frustum.b); // n3, f3 - colorAttribute.setXYZ(22, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(23, frustum.r, frustum.g, frustum.b); // n4, f4 - - // cone - - colorAttribute.setXYZ(24, cone.r, cone.g, cone.b); - colorAttribute.setXYZ(25, cone.r, cone.g, cone.b); // p, n1 - colorAttribute.setXYZ(26, cone.r, cone.g, cone.b); - colorAttribute.setXYZ(27, cone.r, cone.g, cone.b); // p, n2 - colorAttribute.setXYZ(28, cone.r, cone.g, cone.b); - colorAttribute.setXYZ(29, cone.r, cone.g, cone.b); // p, n3 - colorAttribute.setXYZ(30, cone.r, cone.g, cone.b); - colorAttribute.setXYZ(31, cone.r, cone.g, cone.b); // p, n4 - - // up - - colorAttribute.setXYZ(32, up.r, up.g, up.b); - colorAttribute.setXYZ(33, up.r, up.g, up.b); // u1, u2 - colorAttribute.setXYZ(34, up.r, up.g, up.b); - colorAttribute.setXYZ(35, up.r, up.g, up.b); // u2, u3 - colorAttribute.setXYZ(36, up.r, up.g, up.b); - colorAttribute.setXYZ(37, up.r, up.g, up.b); // u3, u1 - - // target - - colorAttribute.setXYZ(38, target.r, target.g, target.b); - colorAttribute.setXYZ(39, target.r, target.g, target.b); // c, t - colorAttribute.setXYZ(40, cross.r, cross.g, cross.b); - colorAttribute.setXYZ(41, cross.r, cross.g, cross.b); // p, c - - // cross - - colorAttribute.setXYZ(42, cross.r, cross.g, cross.b); - colorAttribute.setXYZ(43, cross.r, cross.g, cross.b); // cn1, cn2 - colorAttribute.setXYZ(44, cross.r, cross.g, cross.b); - colorAttribute.setXYZ(45, cross.r, cross.g, cross.b); // cn3, cn4 - - colorAttribute.setXYZ(46, cross.r, cross.g, cross.b); - colorAttribute.setXYZ(47, cross.r, cross.g, cross.b); // cf1, cf2 - colorAttribute.setXYZ(48, cross.r, cross.g, cross.b); - colorAttribute.setXYZ(49, cross.r, cross.g, cross.b); // cf3, cf4 - - colorAttribute.needsUpdate = true; - } - - update() { - const geometry = this.geometry; - const pointMap = this.pointMap; - - const w = 1, - h = 1; - - // we need just camera projection matrix inverse - // world matrix must be identity - - _camera$1.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse); - - // center / target - - setPoint('c', pointMap, geometry, _camera$1, 0, 0, -1); - setPoint('t', pointMap, geometry, _camera$1, 0, 0, 1); - - // near - - setPoint('n1', pointMap, geometry, _camera$1, -w, -h, -1); - setPoint('n2', pointMap, geometry, _camera$1, w, -h, -1); - setPoint('n3', pointMap, geometry, _camera$1, -w, h, -1); - setPoint('n4', pointMap, geometry, _camera$1, w, h, -1); - - // far - - setPoint('f1', pointMap, geometry, _camera$1, -w, -h, 1); - setPoint('f2', pointMap, geometry, _camera$1, w, -h, 1); - setPoint('f3', pointMap, geometry, _camera$1, -w, h, 1); - setPoint('f4', pointMap, geometry, _camera$1, w, h, 1); - - // up - - setPoint('u1', pointMap, geometry, _camera$1, w * 0.7, h * 1.1, -1); - setPoint('u2', pointMap, geometry, _camera$1, -w * 0.7, h * 1.1, -1); - setPoint('u3', pointMap, geometry, _camera$1, 0, h * 2, -1); - - // cross - - setPoint('cf1', pointMap, geometry, _camera$1, -w, 0, 1); - setPoint('cf2', pointMap, geometry, _camera$1, w, 0, 1); - setPoint('cf3', pointMap, geometry, _camera$1, 0, -h, 1); - setPoint('cf4', pointMap, geometry, _camera$1, 0, h, 1); - - setPoint('cn1', pointMap, geometry, _camera$1, -w, 0, -1); - setPoint('cn2', pointMap, geometry, _camera$1, w, 0, -1); - setPoint('cn3', pointMap, geometry, _camera$1, 0, -h, -1); - setPoint('cn4', pointMap, geometry, _camera$1, 0, h, -1); - - geometry.getAttribute('position').needsUpdate = true; - } - - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -} - -function setPoint(point, pointMap, geometry, camera, x, y, z) { - _vector.set(x, y, z).unproject(camera); - - const points = pointMap[point]; - - if (points !== undefined) { - const position = geometry.getAttribute('position'); - - for (let i = 0, l = points.length; i < l; i++) { - position.setXYZ(points[i], _vector.x, _vector.y, _vector.z); - } - } -} - -const _box = /*@__PURE__*/ new Box3(); - -class BoxHelper extends LineSegments { - constructor(object, color = 0xffff00) { - const indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]); - const positions = new Float32Array(8 * 3); - - const geometry = new BufferGeometry(); - geometry.setIndex(new BufferAttribute(indices, 1)); - geometry.setAttribute('position', new BufferAttribute(positions, 3)); - - super(geometry, new LineBasicMaterial({ color: color, toneMapped: false })); - - this.object = object; - this.type = 'BoxHelper'; - - this.matrixAutoUpdate = false; - - this.update(); - } - - update(object) { - if (object !== undefined) { - console.warn('THREE.BoxHelper: .update() has no longer arguments.'); - } - - if (this.object !== undefined) { - _box.setFromObject(this.object); - } - - if (_box.isEmpty()) return; - - const min = _box.min; - const max = _box.max; - - /* - 5____4 - 1/___0/| - | 6__|_7 - 2/___3/ - - 0: max.x, max.y, max.z - 1: min.x, max.y, max.z - 2: min.x, min.y, max.z - 3: max.x, min.y, max.z - 4: max.x, max.y, min.z - 5: min.x, max.y, min.z - 6: min.x, min.y, min.z - 7: max.x, min.y, min.z - */ - - const position = this.geometry.attributes.position; - const array = position.array; - - array[0] = max.x; - array[1] = max.y; - array[2] = max.z; - array[3] = min.x; - array[4] = max.y; - array[5] = max.z; - array[6] = min.x; - array[7] = min.y; - array[8] = max.z; - array[9] = max.x; - array[10] = min.y; - array[11] = max.z; - array[12] = max.x; - array[13] = max.y; - array[14] = min.z; - array[15] = min.x; - array[16] = max.y; - array[17] = min.z; - array[18] = min.x; - array[19] = min.y; - array[20] = min.z; - array[21] = max.x; - array[22] = min.y; - array[23] = min.z; - - position.needsUpdate = true; - - this.geometry.computeBoundingSphere(); - } - - setFromObject(object) { - this.object = object; - this.update(); - - return this; - } - - copy(source, recursive) { - super.copy(source, recursive); - - this.object = source.object; - - return this; - } - - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -} - -class Box3Helper extends LineSegments { - constructor(box, color = 0xffff00) { - const indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]); - - const positions = [1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1]; - - const geometry = new BufferGeometry(); - - geometry.setIndex(new BufferAttribute(indices, 1)); - - geometry.setAttribute('position', new Float32BufferAttribute(positions, 3)); - - super(geometry, new LineBasicMaterial({ color: color, toneMapped: false })); - - this.box = box; - - this.type = 'Box3Helper'; - - this.geometry.computeBoundingSphere(); - } - - updateMatrixWorld(force) { - const box = this.box; - - if (box.isEmpty()) return; - - box.getCenter(this.position); - - box.getSize(this.scale); - - this.scale.multiplyScalar(0.5); - - super.updateMatrixWorld(force); - } - - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -} - -class PlaneHelper extends Line { - constructor(plane, size = 1, hex = 0xffff00) { - const color = hex; - - const positions = [1, -1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0]; - - const geometry = new BufferGeometry(); - geometry.setAttribute('position', new Float32BufferAttribute(positions, 3)); - geometry.computeBoundingSphere(); - - super(geometry, new LineBasicMaterial({ color: color, toneMapped: false })); - - this.type = 'PlaneHelper'; - - this.plane = plane; - - this.size = size; - - const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0]; - - const geometry2 = new BufferGeometry(); - geometry2.setAttribute('position', new Float32BufferAttribute(positions2, 3)); - geometry2.computeBoundingSphere(); - - this.add(new Mesh(geometry2, new MeshBasicMaterial({ color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false }))); - } - - updateMatrixWorld(force) { - this.position.set(0, 0, 0); - - this.scale.set(0.5 * this.size, 0.5 * this.size, 1); - - this.lookAt(this.plane.normal); - - this.translateZ(-this.plane.constant); - - super.updateMatrixWorld(force); - } - - dispose() { - this.geometry.dispose(); - this.material.dispose(); - this.children[0].geometry.dispose(); - this.children[0].material.dispose(); - } -} - -const _axis = /*@__PURE__*/ new Vector3(); -let _lineGeometry, _coneGeometry; - -class ArrowHelper extends Object3D { - // dir is assumed to be normalized - - constructor(dir = new Vector3(0, 0, 1), origin = new Vector3(0, 0, 0), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2) { - super(); - - this.type = 'ArrowHelper'; - - if (_lineGeometry === undefined) { - _lineGeometry = new BufferGeometry(); - _lineGeometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 0, 1, 0], 3)); - - _coneGeometry = new CylinderGeometry(0, 0.5, 1, 5, 1); - _coneGeometry.translate(0, -0.5, 0); - } - - this.position.copy(origin); - - this.line = new Line(_lineGeometry, new LineBasicMaterial({ color: color, toneMapped: false })); - this.line.matrixAutoUpdate = false; - this.add(this.line); - - this.cone = new Mesh(_coneGeometry, new MeshBasicMaterial({ color: color, toneMapped: false })); - this.cone.matrixAutoUpdate = false; - this.add(this.cone); - - this.setDirection(dir); - this.setLength(length, headLength, headWidth); - } - - setDirection(dir) { - // dir is assumed to be normalized - - if (dir.y > 0.99999) { - this.quaternion.set(0, 0, 0, 1); - } else if (dir.y < -0.99999) { - this.quaternion.set(1, 0, 0, 0); - } else { - _axis.set(dir.z, 0, -dir.x).normalize(); - - const radians = Math.acos(dir.y); - - this.quaternion.setFromAxisAngle(_axis, radians); - } - } - - setLength(length, headLength = length * 0.2, headWidth = headLength * 0.2) { - this.line.scale.set(1, Math.max(0.0001, length - headLength), 1); // see #17458 - this.line.updateMatrix(); - - this.cone.scale.set(headWidth, headLength, headWidth); - this.cone.position.y = length; - this.cone.updateMatrix(); - } - - setColor(color) { - this.line.material.color.set(color); - this.cone.material.color.set(color); - } - - copy(source) { - super.copy(source, false); - - this.line.copy(source.line); - this.cone.copy(source.cone); - - return this; - } - - dispose() { - this.line.geometry.dispose(); - this.line.material.dispose(); - this.cone.geometry.dispose(); - this.cone.material.dispose(); - } -} - -class AxesHelper extends LineSegments { - constructor(size = 1) { - const vertices = [0, 0, 0, size, 0, 0, 0, 0, 0, 0, size, 0, 0, 0, 0, 0, 0, size]; - - const colors = [1, 0, 0, 1, 0.6, 0, 0, 1, 0, 0.6, 1, 0, 0, 0, 1, 0, 0.6, 1]; - - const geometry = new BufferGeometry(); - geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute('color', new Float32BufferAttribute(colors, 3)); - - const material = new LineBasicMaterial({ vertexColors: true, toneMapped: false }); - - super(geometry, material); - - this.type = 'AxesHelper'; - } - - setColors(xAxisColor, yAxisColor, zAxisColor) { - const color = new Color(); - const array = this.geometry.attributes.color.array; - - color.set(xAxisColor); - color.toArray(array, 0); - color.toArray(array, 3); - - color.set(yAxisColor); - color.toArray(array, 6); - color.toArray(array, 9); - - color.set(zAxisColor); - color.toArray(array, 12); - color.toArray(array, 15); - - this.geometry.attributes.color.needsUpdate = true; - - return this; - } - - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -} - -class ShapePath { - constructor() { - this.type = 'ShapePath'; - - this.color = new Color(); - - this.subPaths = []; - this.currentPath = null; - } - - moveTo(x, y) { - this.currentPath = new Path(); - this.subPaths.push(this.currentPath); - this.currentPath.moveTo(x, y); - - return this; - } - - lineTo(x, y) { - this.currentPath.lineTo(x, y); - - return this; - } - - quadraticCurveTo(aCPx, aCPy, aX, aY) { - this.currentPath.quadraticCurveTo(aCPx, aCPy, aX, aY); - - return this; - } - - bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) { - this.currentPath.bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY); - - return this; - } - - splineThru(pts) { - this.currentPath.splineThru(pts); - - return this; - } - - toShapes(isCCW) { - function toShapesNoHoles(inSubpaths) { - const shapes = []; - - for (let i = 0, l = inSubpaths.length; i < l; i++) { - const tmpPath = inSubpaths[i]; - - const tmpShape = new Shape(); - tmpShape.curves = tmpPath.curves; - - shapes.push(tmpShape); - } - - return shapes; - } - - function isPointInsidePolygon(inPt, inPolygon) { - const polyLen = inPolygon.length; - - // inPt on polygon contour => immediate success or - // toggling of inside/outside at every single! intersection point of an edge - // with the horizontal line through inPt, left of inPt - // not counting lowerY endpoints of edges and whole edges on that line - let inside = false; - for (let p = polyLen - 1, q = 0; q < polyLen; p = q++) { - let edgeLowPt = inPolygon[p]; - let edgeHighPt = inPolygon[q]; - - let edgeDx = edgeHighPt.x - edgeLowPt.x; - let edgeDy = edgeHighPt.y - edgeLowPt.y; - - if (Math.abs(edgeDy) > Number.EPSILON) { - // not parallel - if (edgeDy < 0) { - edgeLowPt = inPolygon[q]; - edgeDx = -edgeDx; - edgeHighPt = inPolygon[p]; - edgeDy = -edgeDy; - } - - if (inPt.y < edgeLowPt.y || inPt.y > edgeHighPt.y) continue; - - if (inPt.y === edgeLowPt.y) { - if (inPt.x === edgeLowPt.x) return true; // inPt is on contour ? - // continue; // no intersection or edgeLowPt => doesn't count !!! - } else { - const perpEdge = edgeDy * (inPt.x - edgeLowPt.x) - edgeDx * (inPt.y - edgeLowPt.y); - if (perpEdge === 0) return true; // inPt is on contour ? - if (perpEdge < 0) continue; - inside = !inside; // true intersection left of inPt - } - } else { - // parallel or collinear - if (inPt.y !== edgeLowPt.y) continue; // parallel - // edge lies on the same horizontal line as inPt - if ((edgeHighPt.x <= inPt.x && inPt.x <= edgeLowPt.x) || (edgeLowPt.x <= inPt.x && inPt.x <= edgeHighPt.x)) return true; // inPt: Point on contour ! - // continue; - } - } - - return inside; - } - - const isClockWise = ShapeUtils.isClockWise; - - const subPaths = this.subPaths; - if (subPaths.length === 0) return []; - - let solid, tmpPath, tmpShape; - const shapes = []; - - if (subPaths.length === 1) { - tmpPath = subPaths[0]; - tmpShape = new Shape(); - tmpShape.curves = tmpPath.curves; - shapes.push(tmpShape); - return shapes; - } - - let holesFirst = !isClockWise(subPaths[0].getPoints()); - holesFirst = isCCW ? !holesFirst : holesFirst; - - // console.log("Holes first", holesFirst); - - const betterShapeHoles = []; - const newShapes = []; - let newShapeHoles = []; - let mainIdx = 0; - let tmpPoints; - - newShapes[mainIdx] = undefined; - newShapeHoles[mainIdx] = []; - - for (let i = 0, l = subPaths.length; i < l; i++) { - tmpPath = subPaths[i]; - tmpPoints = tmpPath.getPoints(); - solid = isClockWise(tmpPoints); - solid = isCCW ? !solid : solid; - - if (solid) { - if (!holesFirst && newShapes[mainIdx]) mainIdx++; - - newShapes[mainIdx] = { s: new Shape(), p: tmpPoints }; - newShapes[mainIdx].s.curves = tmpPath.curves; - - if (holesFirst) mainIdx++; - newShapeHoles[mainIdx] = []; - - //console.log('cw', i); - } else { - newShapeHoles[mainIdx].push({ h: tmpPath, p: tmpPoints[0] }); - - //console.log('ccw', i); - } - } - - // only Holes? -> probably all Shapes with wrong orientation - if (!newShapes[0]) return toShapesNoHoles(subPaths); - - if (newShapes.length > 1) { - let ambiguous = false; - let toChange = 0; - - for (let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx++) { - betterShapeHoles[sIdx] = []; - } - - for (let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx++) { - const sho = newShapeHoles[sIdx]; - - for (let hIdx = 0; hIdx < sho.length; hIdx++) { - const ho = sho[hIdx]; - let hole_unassigned = true; - - for (let s2Idx = 0; s2Idx < newShapes.length; s2Idx++) { - if (isPointInsidePolygon(ho.p, newShapes[s2Idx].p)) { - if (sIdx !== s2Idx) toChange++; - - if (hole_unassigned) { - hole_unassigned = false; - betterShapeHoles[s2Idx].push(ho); - } else { - ambiguous = true; - } - } - } - - if (hole_unassigned) { - betterShapeHoles[sIdx].push(ho); - } - } - } - - if (toChange > 0 && ambiguous === false) { - newShapeHoles = betterShapeHoles; - } - } - - let tmpHoles; - - for (let i = 0, il = newShapes.length; i < il; i++) { - tmpShape = newShapes[i].s; - shapes.push(tmpShape); - tmpHoles = newShapeHoles[i]; - - for (let j = 0, jl = tmpHoles.length; j < jl; j++) { - tmpShape.holes.push(tmpHoles[j].h); - } - } - - //console.log("shape", shapes); - - return shapes; - } -} - -class Controls extends EventDispatcher { - constructor(object, domElement) { - super(); - - this.object = object; - this.domElement = domElement; - - this.enabled = true; - - this.state = -1; - - this.keys = {}; - this.mouseButtons = { LEFT: null, MIDDLE: null, RIGHT: null }; - this.touches = { ONE: null, TWO: null }; - } - - connect() {} - - disconnect() {} - - dispose() {} - - update(/* delta */) {} -} - -class WebGLMultipleRenderTargets extends WebGLRenderTarget { - // @deprecated, r162 - - constructor(width = 1, height = 1, count = 1, options = {}) { - console.warn('THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the "count" parameter to enable MRT.'); - - super(width, height, { ...options, count }); - - this.isWebGLMultipleRenderTargets = true; - } - - get texture() { - return this.textures; - } -} - -class Animation { - constructor(nodes, info) { - this.nodes = nodes; - this.info = info; - - this.animationLoop = null; - this.requestId = null; - - this._init(); - } - - _init() { - const update = (time, frame) => { - this.requestId = self.requestAnimationFrame(update); - - if (this.info.autoReset === true) this.info.reset(); - - this.nodes.nodeFrame.update(); - - this.info.frame = this.nodes.nodeFrame.frameId; - - if (this.animationLoop !== null) this.animationLoop(time, frame); - }; - - update(); - } - - dispose() { - self.cancelAnimationFrame(this.requestId); - this.requestId = null; - } - - setAnimationLoop(callback) { - this.animationLoop = callback; - } -} - -class ChainMap { - constructor() { - this.weakMap = new WeakMap(); - } - - get(keys) { - let map = this.weakMap; - - for (let i = 0; i < keys.length; i++) { - map = map.get(keys[i]); - - if (map === undefined) return undefined; - } - - return map.get(keys[keys.length - 1]); - } - - set(keys, value) { - let map = this.weakMap; - - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - - if (map.has(key) === false) map.set(key, new WeakMap()); - - map = map.get(key); - } - - return map.set(keys[keys.length - 1], value); - } - - delete(keys) { - let map = this.weakMap; - - for (let i = 0; i < keys.length; i++) { - map = map.get(keys[i]); - - if (map === undefined) return false; - } - - return map.delete(keys[keys.length - 1]); - } -} - -const _plane = /*@__PURE__*/ new Plane(); - -let _clippingContextVersion = 0; - -class ClippingContext { - constructor() { - this.version = ++_clippingContextVersion; - - this.globalClippingCount = 0; - - this.localClippingCount = 0; - this.localClippingEnabled = false; - this.localClipIntersection = false; - - this.planes = []; - - this.parentVersion = 0; - this.viewNormalMatrix = new Matrix3(); - } - - projectPlanes(source, offset) { - const l = source.length; - const planes = this.planes; - - for (let i = 0; i < l; i++) { - _plane.copy(source[i]).applyMatrix4(this.viewMatrix, this.viewNormalMatrix); - - const v = planes[offset + i]; - const normal = _plane.normal; - - v.x = -normal.x; - v.y = -normal.y; - v.z = -normal.z; - v.w = _plane.constant; - } - } - - updateGlobal(renderer, camera) { - const rendererClippingPlanes = renderer.clippingPlanes; - this.viewMatrix = camera.matrixWorldInverse; - - this.viewNormalMatrix.getNormalMatrix(this.viewMatrix); - - let update = false; - - if (Array.isArray(rendererClippingPlanes) && rendererClippingPlanes.length !== 0) { - const l = rendererClippingPlanes.length; - - if (l !== this.globalClippingCount) { - const planes = []; - - for (let i = 0; i < l; i++) { - planes.push(new Vector4()); - } - - this.globalClippingCount = l; - this.planes = planes; - - update = true; - } - - this.projectPlanes(rendererClippingPlanes, 0); - } else if (this.globalClippingCount !== 0) { - this.globalClippingCount = 0; - this.planes = []; - update = true; - } - - if (renderer.localClippingEnabled !== this.localClippingEnabled) { - this.localClippingEnabled = renderer.localClippingEnabled; - update = true; - } - - if (update) this.version = _clippingContextVersion++; - } - - update(parent, material) { - let update = false; - - if (this !== parent && parent.version !== this.parentVersion) { - this.globalClippingCount = material.isShadowNodeMaterial ? 0 : parent.globalClippingCount; - this.localClippingEnabled = parent.localClippingEnabled; - this.planes = Array.from(parent.planes); - this.parentVersion = parent.version; - this.viewMatrix = parent.viewMatrix; - this.viewNormalMatrix = parent.viewNormalMatrix; - - update = true; - } - - if (this.localClippingEnabled) { - const localClippingPlanes = material.clippingPlanes; - - if (Array.isArray(localClippingPlanes) && localClippingPlanes.length !== 0) { - const l = localClippingPlanes.length; - const planes = this.planes; - const offset = this.globalClippingCount; - - if (update || l !== this.localClippingCount) { - planes.length = offset + l; - - for (let i = 0; i < l; i++) { - planes[offset + i] = new Vector4(); - } - - this.localClippingCount = l; - update = true; - } - - this.projectPlanes(localClippingPlanes, offset); - } else if (this.localClippingCount !== 0) { - this.localClippingCount = 0; - update = true; - } - - if (this.localClipIntersection !== material.clipIntersection) { - this.localClipIntersection = material.clipIntersection; - update = true; - } - } - - if (update) this.version = _clippingContextVersion++; - } -} - -let _id$7 = 0; - -function getKeys(obj) { - const keys = Object.keys(obj); - - let proto = Object.getPrototypeOf(obj); - - while (proto) { - const descriptors = Object.getOwnPropertyDescriptors(proto); - - for (const key in descriptors) { - if (descriptors[key] !== undefined) { - const descriptor = descriptors[key]; - - if (descriptor && typeof descriptor.get === 'function') { - keys.push(key); - } - } - } - - proto = Object.getPrototypeOf(proto); - } - - return keys; -} - -class RenderObject { - constructor(nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext) { - this._nodes = nodes; - this._geometries = geometries; - - this.id = _id$7++; - - this.renderer = renderer; - this.object = object; - this.material = material; - this.scene = scene; - this.camera = camera; - this.lightsNode = lightsNode; - this.context = renderContext; - - this.geometry = object.geometry; - this.version = material.version; - - this.drawRange = null; - - this.attributes = null; - this.pipeline = null; - this.vertexBuffers = null; - - this.updateClipping(renderContext.clippingContext); - - this.clippingContextVersion = this.clippingContext.version; - - this.initialNodesCacheKey = this.getDynamicCacheKey(); - this.initialCacheKey = this.getCacheKey(); - - this._nodeBuilderState = null; - this._bindings = null; - - this.onDispose = null; - - this.isRenderObject = true; - - this.onMaterialDispose = () => { - this.dispose(); - }; - - this.material.addEventListener('dispose', this.onMaterialDispose); - } - - updateClipping(parent) { - const material = this.material; - - let clippingContext = this.clippingContext; - - if (Array.isArray(material.clippingPlanes)) { - if (clippingContext === parent || !clippingContext) { - clippingContext = new ClippingContext(); - this.clippingContext = clippingContext; - } - - clippingContext.update(parent, material); - } else if (this.clippingContext !== parent) { - this.clippingContext = parent; - } - } - - get clippingNeedsUpdate() { - if (this.clippingContext.version === this.clippingContextVersion) return false; - - this.clippingContextVersion = this.clippingContext.version; - - return true; - } - - getNodeBuilderState() { - return this._nodeBuilderState || (this._nodeBuilderState = this._nodes.getForRender(this)); - } - - getBindings() { - return this._bindings || (this._bindings = this.getNodeBuilderState().createBindings()); - } - - getIndex() { - return this._geometries.getIndex(this); - } - - getChainArray() { - return [this.object, this.material, this.context, this.lightsNode]; - } - - getAttributes() { - if (this.attributes !== null) return this.attributes; - - const nodeAttributes = this.getNodeBuilderState().nodeAttributes; - const geometry = this.geometry; - - const attributes = []; - const vertexBuffers = new Set(); - - for (const nodeAttribute of nodeAttributes) { - const attribute = nodeAttribute.node && nodeAttribute.node.attribute ? nodeAttribute.node.attribute : geometry.getAttribute(nodeAttribute.name); - - if (attribute === undefined) continue; - - attributes.push(attribute); - - const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute; - vertexBuffers.add(bufferAttribute); - } - - this.attributes = attributes; - this.vertexBuffers = Array.from(vertexBuffers.values()); - - return attributes; - } - - getVertexBuffers() { - if (this.vertexBuffers === null) this.getAttributes(); - - return this.vertexBuffers; - } - - getMaterialCacheKey() { - const { object, material } = this; - - let cacheKey = material.customProgramCacheKey(); - - for (const property of getKeys(material)) { - if (/^(is[A-Z]|_)|^(visible|version|uuid|name|opacity|userData)$/.test(property)) continue; - - const value = material[property]; - - let valueKey; - - if (value !== null) { - // some material values require a formatting - - const type = typeof value; - - if (type === 'number') { - valueKey = value !== 0 ? '1' : '0'; // Convert to on/off, important for clearcoat, transmission, etc - } else if (type === 'object') { - valueKey = '{'; - - if (value.isTexture) { - valueKey += value.mapping; - } - - valueKey += '}'; - } else { - valueKey = String(value); - } - } else { - valueKey = String(value); - } - - cacheKey += /*property + ':' +*/ valueKey + ','; - } - - cacheKey += this.clippingContextVersion + ','; - - if (object.skeleton) { - cacheKey += object.skeleton.bones.length + ','; - } - - if (object.morphTargetInfluences) { - cacheKey += object.morphTargetInfluences.length + ','; - } - - if (object.isBatchedMesh) { - cacheKey += object._matricesTexture.uuid + ','; - - if (object._colorsTexture !== null) { - cacheKey += object._colorsTexture.uuid + ','; - } - } - - if (object.count > 1) { - cacheKey += object.count + ',' + object.uuid + ','; - } - - return cacheKey; - } - - get needsUpdate() { - return this.initialNodesCacheKey !== this.getDynamicCacheKey() || this.clippingNeedsUpdate; - } - - getDynamicCacheKey() { - // Environment Nodes Cache Key - - return this.object.receiveShadow + ',' + this._nodes.getCacheKey(this.scene, this.lightsNode); - } - - getCacheKey() { - return this.getMaterialCacheKey() + ',' + this.getDynamicCacheKey(); - } - - dispose() { - this.material.removeEventListener('dispose', this.onMaterialDispose); - - this.onDispose(); - } -} - -class RenderObjects { - constructor(renderer, nodes, geometries, pipelines, bindings, info) { - this.renderer = renderer; - this.nodes = nodes; - this.geometries = geometries; - this.pipelines = pipelines; - this.bindings = bindings; - this.info = info; - - this.chainMaps = {}; - } - - get(object, material, scene, camera, lightsNode, renderContext, passId) { - const chainMap = this.getChainMap(passId); - const chainArray = [object, material, renderContext, lightsNode]; - - let renderObject = chainMap.get(chainArray); - - if (renderObject === undefined) { - renderObject = this.createRenderObject(this.nodes, this.geometries, this.renderer, object, material, scene, camera, lightsNode, renderContext, passId); - - chainMap.set(chainArray, renderObject); - } else { - renderObject.updateClipping(renderContext.clippingContext); - - if (renderObject.version !== material.version || renderObject.needsUpdate) { - if (renderObject.initialCacheKey !== renderObject.getCacheKey()) { - renderObject.dispose(); - - renderObject = this.get(object, material, scene, camera, lightsNode, renderContext, passId); - } else { - renderObject.version = material.version; - } - } - } - - return renderObject; - } - - getChainMap(passId = 'default') { - return this.chainMaps[passId] || (this.chainMaps[passId] = new ChainMap()); - } - - dispose() { - this.chainMaps = {}; - } - - createRenderObject(nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext, passId) { - const chainMap = this.getChainMap(passId); - - const renderObject = new RenderObject(nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext); - - renderObject.onDispose = () => { - this.pipelines.delete(renderObject); - this.bindings.delete(renderObject); - this.nodes.delete(renderObject); - - chainMap.delete(renderObject.getChainArray()); - }; - - return renderObject; - } -} - -class DataMap { - constructor() { - this.data = new WeakMap(); - } - - get(object) { - let map = this.data.get(object); - - if (map === undefined) { - map = {}; - this.data.set(object, map); - } - - return map; - } - - delete(object) { - let map; - - if (this.data.has(object)) { - map = this.data.get(object); - - this.data.delete(object); - } - - return map; - } - - has(object) { - return this.data.has(object); - } - - dispose() { - this.data = new WeakMap(); - } -} - -const AttributeType = { - VERTEX: 1, - INDEX: 2, - STORAGE: 4, -}; - -// size of a chunk in bytes (STD140 layout) - -const GPU_CHUNK_BYTES = 16; - -// @TODO: Move to src/constants.js - -const BlendColorFactor = 211; -const OneMinusBlendColorFactor = 212; - -class Attributes extends DataMap { - constructor(backend) { - super(); - - this.backend = backend; - } - - delete(attribute) { - const attributeData = super.delete(attribute); - - if (attributeData !== undefined) { - this.backend.destroyAttribute(attribute); - } - - return attributeData; - } - - update(attribute, type) { - const data = this.get(attribute); - - if (data.version === undefined) { - if (type === AttributeType.VERTEX) { - this.backend.createAttribute(attribute); - } else if (type === AttributeType.INDEX) { - this.backend.createIndexAttribute(attribute); - } else if (type === AttributeType.STORAGE) { - this.backend.createStorageAttribute(attribute); - } - - data.version = this._getBufferAttribute(attribute).version; - } else { - const bufferAttribute = this._getBufferAttribute(attribute); - - if (data.version < bufferAttribute.version || bufferAttribute.usage === DynamicDrawUsage) { - this.backend.updateAttribute(attribute); - - data.version = bufferAttribute.version; - } - } - } - - _getBufferAttribute(attribute) { - if (attribute.isInterleavedBufferAttribute) attribute = attribute.data; - - return attribute; - } -} - -function arrayNeedsUint32(array) { - // assumes larger values usually on last - - for (let i = array.length - 1; i >= 0; --i) { - if (array[i] >= 65535) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565 - } - - return false; -} - -function getWireframeVersion(geometry) { - return geometry.index !== null ? geometry.index.version : geometry.attributes.position.version; -} - -function getWireframeIndex(geometry) { - const indices = []; - - const geometryIndex = geometry.index; - const geometryPosition = geometry.attributes.position; - - if (geometryIndex !== null) { - const array = geometryIndex.array; - - for (let i = 0, l = array.length; i < l; i += 3) { - const a = array[i + 0]; - const b = array[i + 1]; - const c = array[i + 2]; - - indices.push(a, b, b, c, c, a); - } - } else { - const array = geometryPosition.array; - - for (let i = 0, l = array.length / 3 - 1; i < l; i += 3) { - const a = i + 0; - const b = i + 1; - const c = i + 2; - - indices.push(a, b, b, c, c, a); - } - } - - const attribute = new (arrayNeedsUint32(indices) ? Uint32BufferAttribute : Uint16BufferAttribute)(indices, 1); - attribute.version = getWireframeVersion(geometry); - - return attribute; -} - -class Geometries extends DataMap { - constructor(attributes, info) { - super(); - - this.attributes = attributes; - this.info = info; - - this.wireframes = new WeakMap(); - - this.attributeCall = new WeakMap(); - } - - has(renderObject) { - const geometry = renderObject.geometry; - - return super.has(geometry) && this.get(geometry).initialized === true; - } - - updateForRender(renderObject) { - if (this.has(renderObject) === false) this.initGeometry(renderObject); - - this.updateAttributes(renderObject); - } - - initGeometry(renderObject) { - const geometry = renderObject.geometry; - const geometryData = this.get(geometry); - - geometryData.initialized = true; - - this.info.memory.geometries++; - - const onDispose = () => { - this.info.memory.geometries--; - - const index = geometry.index; - const geometryAttributes = renderObject.getAttributes(); - - if (index !== null) { - this.attributes.delete(index); - } - - for (const geometryAttribute of geometryAttributes) { - this.attributes.delete(geometryAttribute); - } - - const wireframeAttribute = this.wireframes.get(geometry); - - if (wireframeAttribute !== undefined) { - this.attributes.delete(wireframeAttribute); - } - - geometry.removeEventListener('dispose', onDispose); - }; - - geometry.addEventListener('dispose', onDispose); - } - - updateAttributes(renderObject) { - const attributes = renderObject.getAttributes(); - - for (const attribute of attributes) { - if (attribute.isStorageBufferAttribute || attribute.isStorageInstancedBufferAttribute) { - this.updateAttribute(attribute, AttributeType.STORAGE); - } else { - this.updateAttribute(attribute, AttributeType.VERTEX); - } - } - - const index = this.getIndex(renderObject); - - if (index !== null) { - this.updateAttribute(index, AttributeType.INDEX); - } - } - - updateAttribute(attribute, type) { - const callId = this.info.render.calls; - - if (!attribute.isInterleavedBufferAttribute) { - if (this.attributeCall.get(attribute) !== callId) { - this.attributes.update(attribute, type); - - this.attributeCall.set(attribute, callId); - } - } else { - if (this.attributeCall.get(attribute) === undefined) { - this.attributes.update(attribute, type); - - this.attributeCall.set(attribute, callId); - } else if (this.attributeCall.get(attribute.data) !== callId) { - this.attributes.update(attribute, type); - - this.attributeCall.set(attribute.data, callId); - - this.attributeCall.set(attribute, callId); - } - } - } - - getIndex(renderObject) { - const { geometry, material } = renderObject; - - let index = geometry.index; - - if (material.wireframe === true) { - const wireframes = this.wireframes; - - let wireframeAttribute = wireframes.get(geometry); - - if (wireframeAttribute === undefined) { - wireframeAttribute = getWireframeIndex(geometry); - - wireframes.set(geometry, wireframeAttribute); - } else if (wireframeAttribute.version !== getWireframeVersion(geometry)) { - this.attributes.delete(wireframeAttribute); - - wireframeAttribute = getWireframeIndex(geometry); - - wireframes.set(geometry, wireframeAttribute); - } - - index = wireframeAttribute; - } - - return index; - } -} - -class Info { - constructor() { - this.autoReset = true; - - this.frame = 0; - this.calls = 0; - - this.render = { - calls: 0, - frameCalls: 0, - drawCalls: 0, - triangles: 0, - points: 0, - lines: 0, - timestamp: 0, - previousFrameCalls: 0, - timestampCalls: 0, - }; - - this.compute = { - calls: 0, - frameCalls: 0, - timestamp: 0, - previousFrameCalls: 0, - timestampCalls: 0, - }; - - this.memory = { - geometries: 0, - textures: 0, - }; - } - - update(object, count, instanceCount) { - this.render.drawCalls++; - - if (object.isMesh || object.isSprite) { - this.render.triangles += instanceCount * (count / 3); - } else if (object.isPoints) { - this.render.points += instanceCount * count; - } else if (object.isLineSegments) { - this.render.lines += instanceCount * (count / 2); - } else if (object.isLine) { - this.render.lines += instanceCount * (count - 1); - } else { - console.error('THREE.WebGPUInfo: Unknown object type.'); - } - } - - updateTimestamp(type, time) { - if (this[type].timestampCalls === 0) { - this[type].timestamp = 0; - } - - this[type].timestamp += time; - - this[type].timestampCalls++; - - if (this[type].timestampCalls >= this[type].previousFrameCalls) { - this[type].timestampCalls = 0; - } - } - - reset() { - const previousRenderFrameCalls = this.render.frameCalls; - this.render.previousFrameCalls = previousRenderFrameCalls; - - const previousComputeFrameCalls = this.compute.frameCalls; - this.compute.previousFrameCalls = previousComputeFrameCalls; - - this.render.drawCalls = 0; - this.render.frameCalls = 0; - this.compute.frameCalls = 0; - - this.render.triangles = 0; - this.render.points = 0; - this.render.lines = 0; - } - - dispose() { - this.reset(); - - this.calls = 0; - - this.render.calls = 0; - this.compute.calls = 0; - - this.render.timestamp = 0; - this.compute.timestamp = 0; - this.memory.geometries = 0; - this.memory.textures = 0; - } -} - -class Pipeline { - constructor(cacheKey) { - this.cacheKey = cacheKey; - - this.usedTimes = 0; - } -} - -class RenderPipeline extends Pipeline { - constructor(cacheKey, vertexProgram, fragmentProgram) { - super(cacheKey); - - this.vertexProgram = vertexProgram; - this.fragmentProgram = fragmentProgram; - } -} - -class ComputePipeline extends Pipeline { - constructor(cacheKey, computeProgram) { - super(cacheKey); - - this.computeProgram = computeProgram; - - this.isComputePipeline = true; - } -} - -let _id$6 = 0; - -class ProgrammableStage { - constructor(code, type, transforms = null, attributes = null) { - this.id = _id$6++; - - this.code = code; - this.stage = type; - this.transforms = transforms; - this.attributes = attributes; - - this.usedTimes = 0; - } -} - -class Pipelines extends DataMap { - constructor(backend, nodes) { - super(); - - this.backend = backend; - this.nodes = nodes; - - this.bindings = null; // set by the bindings - - this.caches = new Map(); - this.programs = { - vertex: new Map(), - fragment: new Map(), - compute: new Map(), - }; - } - - getForCompute(computeNode, bindings) { - const { backend } = this; - - const data = this.get(computeNode); - - if (this._needsComputeUpdate(computeNode)) { - const previousPipeline = data.pipeline; - - if (previousPipeline) { - previousPipeline.usedTimes--; - previousPipeline.computeProgram.usedTimes--; - } - - // get shader - - const nodeBuilderState = this.nodes.getForCompute(computeNode); - - // programmable stage - - let stageCompute = this.programs.compute.get(nodeBuilderState.computeShader); - - if (stageCompute === undefined) { - if (previousPipeline && previousPipeline.computeProgram.usedTimes === 0) this._releaseProgram(previousPipeline.computeProgram); - - stageCompute = new ProgrammableStage(nodeBuilderState.computeShader, 'compute', nodeBuilderState.transforms, nodeBuilderState.nodeAttributes); - this.programs.compute.set(nodeBuilderState.computeShader, stageCompute); - - backend.createProgram(stageCompute); - } - - // determine compute pipeline - - const cacheKey = this._getComputeCacheKey(computeNode, stageCompute); - - let pipeline = this.caches.get(cacheKey); - - if (pipeline === undefined) { - if (previousPipeline && previousPipeline.usedTimes === 0) this._releasePipeline(previousPipeline); - - pipeline = this._getComputePipeline(computeNode, stageCompute, cacheKey, bindings); - } - - // keep track of all used times - - pipeline.usedTimes++; - stageCompute.usedTimes++; - - // - - data.version = computeNode.version; - data.pipeline = pipeline; - } - - return data.pipeline; - } - - getForRender(renderObject, promises = null) { - const { backend } = this; - - const data = this.get(renderObject); - - if (this._needsRenderUpdate(renderObject)) { - const previousPipeline = data.pipeline; - - if (previousPipeline) { - previousPipeline.usedTimes--; - previousPipeline.vertexProgram.usedTimes--; - previousPipeline.fragmentProgram.usedTimes--; - } - - // get shader - - const nodeBuilderState = renderObject.getNodeBuilderState(); - - // programmable stages - - let stageVertex = this.programs.vertex.get(nodeBuilderState.vertexShader); - - if (stageVertex === undefined) { - if (previousPipeline && previousPipeline.vertexProgram.usedTimes === 0) this._releaseProgram(previousPipeline.vertexProgram); - - stageVertex = new ProgrammableStage(nodeBuilderState.vertexShader, 'vertex'); - this.programs.vertex.set(nodeBuilderState.vertexShader, stageVertex); - - backend.createProgram(stageVertex); - } - - let stageFragment = this.programs.fragment.get(nodeBuilderState.fragmentShader); - - if (stageFragment === undefined) { - if (previousPipeline && previousPipeline.fragmentProgram.usedTimes === 0) this._releaseProgram(previousPipeline.fragmentProgram); - - stageFragment = new ProgrammableStage(nodeBuilderState.fragmentShader, 'fragment'); - this.programs.fragment.set(nodeBuilderState.fragmentShader, stageFragment); - - backend.createProgram(stageFragment); - } - - // determine render pipeline - - const cacheKey = this._getRenderCacheKey(renderObject, stageVertex, stageFragment); - - let pipeline = this.caches.get(cacheKey); - - if (pipeline === undefined) { - if (previousPipeline && previousPipeline.usedTimes === 0) this._releasePipeline(previousPipeline); - - pipeline = this._getRenderPipeline(renderObject, stageVertex, stageFragment, cacheKey, promises); - } else { - renderObject.pipeline = pipeline; - } - - // keep track of all used times - - pipeline.usedTimes++; - stageVertex.usedTimes++; - stageFragment.usedTimes++; - - // - - data.pipeline = pipeline; - } - - return data.pipeline; - } - - delete(object) { - const pipeline = this.get(object).pipeline; - - if (pipeline) { - // pipeline - - pipeline.usedTimes--; - - if (pipeline.usedTimes === 0) this._releasePipeline(pipeline); - - // programs - - if (pipeline.isComputePipeline) { - pipeline.computeProgram.usedTimes--; - - if (pipeline.computeProgram.usedTimes === 0) this._releaseProgram(pipeline.computeProgram); - } else { - pipeline.fragmentProgram.usedTimes--; - pipeline.vertexProgram.usedTimes--; - - if (pipeline.vertexProgram.usedTimes === 0) this._releaseProgram(pipeline.vertexProgram); - if (pipeline.fragmentProgram.usedTimes === 0) this._releaseProgram(pipeline.fragmentProgram); - } - } - - return super.delete(object); - } - - dispose() { - super.dispose(); - - this.caches = new Map(); - this.programs = { - vertex: new Map(), - fragment: new Map(), - compute: new Map(), - }; - } - - updateForRender(renderObject) { - this.getForRender(renderObject); - } - - _getComputePipeline(computeNode, stageCompute, cacheKey, bindings) { - // check for existing pipeline - - cacheKey = cacheKey || this._getComputeCacheKey(computeNode, stageCompute); - - let pipeline = this.caches.get(cacheKey); - - if (pipeline === undefined) { - pipeline = new ComputePipeline(cacheKey, stageCompute); - - this.caches.set(cacheKey, pipeline); - - this.backend.createComputePipeline(pipeline, bindings); - } - - return pipeline; - } - - _getRenderPipeline(renderObject, stageVertex, stageFragment, cacheKey, promises) { - // check for existing pipeline - - cacheKey = cacheKey || this._getRenderCacheKey(renderObject, stageVertex, stageFragment); - - let pipeline = this.caches.get(cacheKey); - - if (pipeline === undefined) { - pipeline = new RenderPipeline(cacheKey, stageVertex, stageFragment); - - this.caches.set(cacheKey, pipeline); - - renderObject.pipeline = pipeline; - - this.backend.createRenderPipeline(renderObject, promises); - } - - return pipeline; - } - - _getComputeCacheKey(computeNode, stageCompute) { - return computeNode.id + ',' + stageCompute.id; - } - - _getRenderCacheKey(renderObject, stageVertex, stageFragment) { - return stageVertex.id + ',' + stageFragment.id + ',' + this.backend.getRenderCacheKey(renderObject); - } - - _releasePipeline(pipeline) { - this.caches.delete(pipeline.cacheKey); - } - - _releaseProgram(program) { - const code = program.code; - const stage = program.stage; - - this.programs[stage].delete(code); - } - - _needsComputeUpdate(computeNode) { - const data = this.get(computeNode); - - return data.pipeline === undefined || data.version !== computeNode.version; - } - - _needsRenderUpdate(renderObject) { - const data = this.get(renderObject); - - return data.pipeline === undefined || this.backend.needsRenderUpdate(renderObject); - } -} - -class Bindings extends DataMap { - constructor(backend, nodes, textures, attributes, pipelines, info) { - super(); - - this.backend = backend; - this.textures = textures; - this.pipelines = pipelines; - this.attributes = attributes; - this.nodes = nodes; - this.info = info; - - this.pipelines.bindings = this; // assign bindings to pipelines - } - - getForRender(renderObject) { - const bindings = renderObject.getBindings(); - - for (const bindGroup of bindings) { - const groupData = this.get(bindGroup); - - if (groupData.bindGroup === undefined) { - // each object defines an array of bindings (ubos, textures, samplers etc.) - - this._init(bindGroup); - - this.backend.createBindings(bindGroup, bindings); - - groupData.bindGroup = bindGroup; - } - } - - return bindings; - } - - getForCompute(computeNode) { - const bindings = this.nodes.getForCompute(computeNode).bindings; - - for (const bindGroup of bindings) { - const groupData = this.get(bindGroup); - - if (groupData.bindGroup === undefined) { - this._init(bindGroup); - - this.backend.createBindings(bindGroup, bindings); - - groupData.bindGroup = bindGroup; - } - } - - return bindings; - } - - updateForCompute(computeNode) { - this._updateBindings(this.getForCompute(computeNode)); - } - - updateForRender(renderObject) { - this._updateBindings(this.getForRender(renderObject)); - } - - _updateBindings(bindings) { - for (const bindGroup of bindings) { - this._update(bindGroup, bindings); - } - } - - _init(bindGroup) { - for (const binding of bindGroup.bindings) { - if (binding.isSampledTexture) { - this.textures.updateTexture(binding.texture); - } else if (binding.isStorageBuffer) { - const attribute = binding.attribute; - - this.attributes.update(attribute, AttributeType.STORAGE); - } - } - } - - _update(bindGroup, bindings) { - const { backend } = this; - - let needsBindingsUpdate = false; - - // iterate over all bindings and check if buffer updates or a new binding group is required - - for (const binding of bindGroup.bindings) { - if (binding.isNodeUniformsGroup) { - const updated = this.nodes.updateGroup(binding); - - if (!updated) continue; - } - - if (binding.isUniformBuffer) { - const updated = binding.update(); - - if (updated) { - backend.updateBinding(binding); - } - } else if (binding.isSampler) { - binding.update(); - } else if (binding.isSampledTexture) { - if (binding.needsBindingsUpdate(this.textures.get(binding.texture).generation)) needsBindingsUpdate = true; - - const updated = binding.update(); - - const texture = binding.texture; - - if (updated) { - this.textures.updateTexture(texture); - } - - const textureData = backend.get(texture); - - if (backend.isWebGPUBackend === true && textureData.texture === undefined && textureData.externalTexture === undefined) { - // TODO: Remove this once we found why updated === false isn't bound to a texture in the WebGPU backend - console.error('Bindings._update: binding should be available:', binding, updated, texture, binding.textureNode.value, needsBindingsUpdate); - - this.textures.updateTexture(texture); - needsBindingsUpdate = true; - } - - if (texture.isStorageTexture === true) { - const textureData = this.get(texture); - - if (binding.store === true) { - textureData.needsMipmap = true; - } else if (texture.generateMipmaps === true && this.textures.needsMipmaps(texture) && textureData.needsMipmap === true) { - this.backend.generateMipmaps(texture); - - textureData.needsMipmap = false; - } - } - } - } - - if (needsBindingsUpdate === true) { - this.backend.updateBindings(bindGroup, bindings); - } - } -} - -const NodeShaderStage = { - VERTEX: 'vertex', - FRAGMENT: 'fragment', -}; - -const NodeUpdateType = { - NONE: 'none', - FRAME: 'frame', - RENDER: 'render', - OBJECT: 'object', -}; - -const NodeType = { - BOOLEAN: 'bool', - INTEGER: 'int', - FLOAT: 'float', - VECTOR2: 'vec2', - VECTOR3: 'vec3', - VECTOR4: 'vec4', - MATRIX2: 'mat2', - MATRIX3: 'mat3', - MATRIX4: 'mat4', -}; - -const defaultShaderStages = ['fragment', 'vertex']; -const defaultBuildStages = ['setup', 'analyze', 'generate']; -const shaderStages = [...defaultShaderStages, 'compute']; -const vectorComponents = ['x', 'y', 'z', 'w']; - -function getCacheKey$1(object, force = false) { - let cacheKey = '{'; - - if (object.isNode === true) { - cacheKey += object.id; - } - - for (const { property, childNode } of getNodeChildren(object)) { - cacheKey += ',' + property.slice(0, -4) + ':' + childNode.getCacheKey(force); - } - - cacheKey += '}'; - - return cacheKey; -} - -function* getNodeChildren(node, toJSON = false) { - for (const property in node) { - // Ignore private properties. - if (property.startsWith('_') === true) continue; - - const object = node[property]; - - if (Array.isArray(object) === true) { - for (let i = 0; i < object.length; i++) { - const child = object[i]; - - if (child && (child.isNode === true || (toJSON && typeof child.toJSON === 'function'))) { - yield { property, index: i, childNode: child }; - } - } - } else if (object && object.isNode === true) { - yield { property, childNode: object }; - } else if (typeof object === 'object') { - for (const subProperty in object) { - const child = object[subProperty]; - - if (child && (child.isNode === true || (toJSON && typeof child.toJSON === 'function'))) { - yield { property, index: subProperty, childNode: child }; - } - } - } - } -} - -function getValueType(value) { - if (value === undefined || value === null) return null; - - const typeOf = typeof value; - - if (value.isNode === true) { - return 'node'; - } else if (typeOf === 'number') { - return 'float'; - } else if (typeOf === 'boolean') { - return 'bool'; - } else if (typeOf === 'string') { - return 'string'; - } else if (typeOf === 'function') { - return 'shader'; - } else if (value.isVector2 === true) { - return 'vec2'; - } else if (value.isVector3 === true) { - return 'vec3'; - } else if (value.isVector4 === true) { - return 'vec4'; - } else if (value.isMatrix3 === true) { - return 'mat3'; - } else if (value.isMatrix4 === true) { - return 'mat4'; - } else if (value.isColor === true) { - return 'color'; - } else if (value instanceof ArrayBuffer) { - return 'ArrayBuffer'; - } - - return null; -} - -function getValueFromType(type, ...params) { - const last4 = type ? type.slice(-4) : undefined; - - if (params.length === 1) { - // ensure same behaviour as in NodeBuilder.format() - - if (last4 === 'vec2') params = [params[0], params[0]]; - else if (last4 === 'vec3') params = [params[0], params[0], params[0]]; - else if (last4 === 'vec4') params = [params[0], params[0], params[0], params[0]]; - } - - if (type === 'color') { - return new Color(...params); - } else if (last4 === 'vec2') { - return new Vector2(...params); - } else if (last4 === 'vec3') { - return new Vector3(...params); - } else if (last4 === 'vec4') { - return new Vector4(...params); - } else if (last4 === 'mat3') { - return new Matrix3(...params); - } else if (last4 === 'mat4') { - return new Matrix4(...params); - } else if (type === 'bool') { - return params[0] || false; - } else if (type === 'float' || type === 'int' || type === 'uint') { - return params[0] || 0; - } else if (type === 'string') { - return params[0] || ''; - } else if (type === 'ArrayBuffer') { - return base64ToArrayBuffer(params[0]); - } - - return null; -} - -function arrayBufferToBase64(arrayBuffer) { - let chars = ''; - - const array = new Uint8Array(arrayBuffer); - - for (let i = 0; i < array.length; i++) { - chars += String.fromCharCode(array[i]); - } - - return btoa(chars); -} - -function base64ToArrayBuffer(base64) { - return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0)).buffer; -} - -var NodeUtils = /*#__PURE__*/ Object.freeze({ - __proto__: null, - arrayBufferToBase64: arrayBufferToBase64, - base64ToArrayBuffer: base64ToArrayBuffer, - getCacheKey: getCacheKey$1, - getNodeChildren: getNodeChildren, - getValueFromType: getValueFromType, - getValueType: getValueType, -}); - -const NodeClasses = new Map(); - -let _nodeId = 0; - -class Node extends EventDispatcher { - constructor(nodeType = null) { - super(); - - this.nodeType = nodeType; - - this.updateType = NodeUpdateType.NONE; - this.updateBeforeType = NodeUpdateType.NONE; - this.updateAfterType = NodeUpdateType.NONE; - - this.uuid = MathUtils.generateUUID(); - - this.version = 0; - - this._cacheKey = null; - this._cacheKeyVersion = 0; - - this.global = false; - - this.isNode = true; - - Object.defineProperty(this, 'id', { value: _nodeId++ }); - } - - set needsUpdate(value) { - if (value === true) { - this.version++; - } - } - - get type() { - return this.constructor.type; - } - - onUpdate(callback, updateType) { - this.updateType = updateType; - this.update = callback.bind(this.getSelf()); - - return this; - } - - onFrameUpdate(callback) { - return this.onUpdate(callback, NodeUpdateType.FRAME); - } - - onRenderUpdate(callback) { - return this.onUpdate(callback, NodeUpdateType.RENDER); - } - - onObjectUpdate(callback) { - return this.onUpdate(callback, NodeUpdateType.OBJECT); - } - - onReference(callback) { - this.updateReference = callback.bind(this.getSelf()); - - return this; - } - - getSelf() { - // Returns non-node object. - - return this.self || this; - } - - updateReference(/*state*/) { - return this; - } - - isGlobal(/*builder*/) { - return this.global; - } - - *getChildren() { - for (const { childNode } of getNodeChildren(this)) { - yield childNode; - } - } - - dispose() { - this.dispatchEvent({ type: 'dispose' }); - } - - traverse(callback) { - callback(this); - - for (const childNode of this.getChildren()) { - childNode.traverse(callback); - } - } - - getCacheKey(force = false) { - force = force || this.version !== this._cacheKeyVersion; - - if (force === true || this._cacheKey === null) { - this._cacheKey = getCacheKey$1(this, force); - this._cacheKeyVersion = this.version; - } - - return this._cacheKey; - } - - getHash(/*builder*/) { - return this.uuid; - } - - getUpdateType() { - return this.updateType; - } - - getUpdateBeforeType() { - return this.updateBeforeType; - } - - getUpdateAfterType() { - return this.updateAfterType; - } - - getElementType(builder) { - const type = this.getNodeType(builder); - const elementType = builder.getElementType(type); - - return elementType; - } - - getNodeType(builder) { - const nodeProperties = builder.getNodeProperties(this); - - if (nodeProperties.outputNode) { - return nodeProperties.outputNode.getNodeType(builder); - } - - return this.nodeType; - } - - getShared(builder) { - const hash = this.getHash(builder); - const nodeFromHash = builder.getNodeFromHash(hash); - - return nodeFromHash || this; - } - - setup(builder) { - const nodeProperties = builder.getNodeProperties(this); - - let index = 0; - - for (const childNode of this.getChildren()) { - nodeProperties['node' + index++] = childNode; - } - - // return a outputNode if exists - return null; - } - - increaseUsage(builder) { - const nodeData = builder.getDataFromNode(this); - nodeData.usageCount = nodeData.usageCount === undefined ? 1 : nodeData.usageCount + 1; - - return nodeData.usageCount; - } - - analyze(builder) { - const usageCount = this.increaseUsage(builder); - - if (usageCount === 1) { - // node flow children - - const nodeProperties = builder.getNodeProperties(this); - - for (const childNode of Object.values(nodeProperties)) { - if (childNode && childNode.isNode === true) { - childNode.build(builder); - } - } - } - } - - generate(builder, output) { - const { outputNode } = builder.getNodeProperties(this); - - if (outputNode && outputNode.isNode === true) { - return outputNode.build(builder, output); - } - } - - updateBefore(/*frame*/) { - console.warn('Abstract function.'); - } - - updateAfter(/*frame*/) { - console.warn('Abstract function.'); - } - - update(/*frame*/) { - console.warn('Abstract function.'); - } - - build(builder, output = null) { - const refNode = this.getShared(builder); - - if (this !== refNode) { - return refNode.build(builder, output); - } - - builder.addNode(this); - builder.addChain(this); - - /* Build stages expected results: - - "setup" -> Node - - "analyze" -> null - - "generate" -> String - */ - let result = null; - - const buildStage = builder.getBuildStage(); - - if (buildStage === 'setup') { - this.updateReference(builder); - - const properties = builder.getNodeProperties(this); - - if (properties.initialized !== true) { - const stackNodesBeforeSetup = builder.stack.nodes.length; - - properties.initialized = true; - properties.outputNode = this.setup(builder); - - if (properties.outputNode !== null && builder.stack.nodes.length !== stackNodesBeforeSetup) { - properties.outputNode = builder.stack; - } - - for (const childNode of Object.values(properties)) { - if (childNode && childNode.isNode === true) { - childNode.build(builder); - } - } - } - } else if (buildStage === 'analyze') { - this.analyze(builder); - } else if (buildStage === 'generate') { - const isGenerateOnce = this.generate.length === 1; - - if (isGenerateOnce) { - const type = this.getNodeType(builder); - const nodeData = builder.getDataFromNode(this); - - result = nodeData.snippet; - - if (result === undefined) { - result = this.generate(builder) || ''; - - nodeData.snippet = result; - } - - result = builder.format(result, type, output); - } else { - result = this.generate(builder, output) || ''; - } - } - - builder.removeChain(this); - - return result; - } - - getSerializeChildren() { - return getNodeChildren(this); - } - - serialize(json) { - const nodeChildren = this.getSerializeChildren(); - - const inputNodes = {}; - - for (const { property, index, childNode } of nodeChildren) { - if (index !== undefined) { - if (inputNodes[property] === undefined) { - inputNodes[property] = Number.isInteger(index) ? [] : {}; - } - - inputNodes[property][index] = childNode.toJSON(json.meta).uuid; - } else { - inputNodes[property] = childNode.toJSON(json.meta).uuid; - } - } - - if (Object.keys(inputNodes).length > 0) { - json.inputNodes = inputNodes; - } - } - - deserialize(json) { - if (json.inputNodes !== undefined) { - const nodes = json.meta.nodes; - - for (const property in json.inputNodes) { - if (Array.isArray(json.inputNodes[property])) { - const inputArray = []; - - for (const uuid of json.inputNodes[property]) { - inputArray.push(nodes[uuid]); - } - - this[property] = inputArray; - } else if (typeof json.inputNodes[property] === 'object') { - const inputObject = {}; - - for (const subProperty in json.inputNodes[property]) { - const uuid = json.inputNodes[property][subProperty]; - - inputObject[subProperty] = nodes[uuid]; - } - - this[property] = inputObject; - } else { - const uuid = json.inputNodes[property]; - - this[property] = nodes[uuid]; - } - } - } - } - - toJSON(meta) { - const { uuid, type } = this; - const isRoot = meta === undefined || typeof meta === 'string'; - - if (isRoot) { - meta = { - textures: {}, - images: {}, - nodes: {}, - }; - } - - // serialize - - let data = meta.nodes[uuid]; - - if (data === undefined) { - data = { - uuid, - type, - meta, - metadata: { - version: 4.6, - type: 'Node', - generator: 'Node.toJSON', - }, - }; - - if (isRoot !== true) meta.nodes[data.uuid] = data; - - this.serialize(data); - - delete data.meta; - } - - // TODO: Copied from Object3D.toJSON - - function extractFromCache(cache) { - const values = []; - - for (const key in cache) { - const data = cache[key]; - delete data.metadata; - values.push(data); - } - - return values; - } - - if (isRoot) { - const textures = extractFromCache(meta.textures); - const images = extractFromCache(meta.images); - const nodes = extractFromCache(meta.nodes); - - if (textures.length > 0) data.textures = textures; - if (images.length > 0) data.images = images; - if (nodes.length > 0) data.nodes = nodes; - } - - return data; - } -} - -function addNodeClass(type, nodeClass) { - if (typeof nodeClass !== 'function' || !type) throw new Error(`Node class ${type} is not a class`); - if (NodeClasses.has(type)) { - console.warn(`Redefinition of node class ${type}`); - return; - } - - NodeClasses.set(type, nodeClass); - nodeClass.type = type; -} - -function createNodeFromType(type) { - const Class = NodeClasses.get(type); - - if (Class !== undefined) { - return new Class(); - } -} - -class TempNode extends Node { - constructor(type) { - super(type); - - this.isTempNode = true; - } - - hasDependencies(builder) { - return builder.getDataFromNode(this).usageCount > 1; - } - - build(builder, output) { - const buildStage = builder.getBuildStage(); - - if (buildStage === 'generate') { - const type = builder.getVectorType(this.getNodeType(builder, output)); - const nodeData = builder.getDataFromNode(this); - - if (nodeData.propertyName !== undefined) { - return builder.format(nodeData.propertyName, type, output); - } else if (type !== 'void' && output !== 'void' && this.hasDependencies(builder)) { - const snippet = super.build(builder, type); - - const nodeVar = builder.getVarFromNode(this, null, type); - const propertyName = builder.getPropertyName(nodeVar); - - builder.addLineFlowCode(`${propertyName} = ${snippet}`); - - nodeData.snippet = snippet; - nodeData.propertyName = propertyName; - - return builder.format(nodeData.propertyName, type, output); - } - } - - return super.build(builder, output); - } -} - -addNodeClass('TempNode', TempNode); - -class ArrayElementNode extends Node { - // @TODO: If extending from TempNode it breaks webgpu_compute - - constructor(node, indexNode) { - super(); - - this.node = node; - this.indexNode = indexNode; - - this.isArrayElementNode = true; - } - - getNodeType(builder) { - return this.node.getElementType(builder); - } - - generate(builder) { - const nodeSnippet = this.node.build(builder); - const indexSnippet = this.indexNode.build(builder, 'uint'); - - return `${nodeSnippet}[ ${indexSnippet} ]`; - } -} - -addNodeClass('ArrayElementNode', ArrayElementNode); - -class ConvertNode extends Node { - constructor(node, convertTo) { - super(); - - this.node = node; - this.convertTo = convertTo; - } - - getNodeType(builder) { - const requestType = this.node.getNodeType(builder); - - let convertTo = null; - - for (const overloadingType of this.convertTo.split('|')) { - if (convertTo === null || builder.getTypeLength(requestType) === builder.getTypeLength(overloadingType)) { - convertTo = overloadingType; - } - } - - return convertTo; - } - - serialize(data) { - super.serialize(data); - - data.convertTo = this.convertTo; - } - - deserialize(data) { - super.deserialize(data); - - this.convertTo = data.convertTo; - } - - generate(builder, output) { - const node = this.node; - const type = this.getNodeType(builder); - - const snippet = node.build(builder, type); - - return builder.format(snippet, type, output); - } -} - -addNodeClass('ConvertNode', ConvertNode); - -class JoinNode extends TempNode { - constructor(nodes = [], nodeType = null) { - super(nodeType); - - this.nodes = nodes; - } - - getNodeType(builder) { - if (this.nodeType !== null) { - return builder.getVectorType(this.nodeType); - } - - return builder.getTypeFromLength(this.nodes.reduce((count, cur) => count + builder.getTypeLength(cur.getNodeType(builder)), 0)); - } - - generate(builder, output) { - const type = this.getNodeType(builder); - const nodes = this.nodes; - - const primitiveType = builder.getComponentType(type); - - const snippetValues = []; - - for (const input of nodes) { - let inputSnippet = input.build(builder); - - const inputPrimitiveType = builder.getComponentType(input.getNodeType(builder)); - - if (inputPrimitiveType !== primitiveType) { - inputSnippet = builder.format(inputSnippet, inputPrimitiveType, primitiveType); - } - - snippetValues.push(inputSnippet); - } - - const snippet = `${builder.getType(type)}( ${snippetValues.join(', ')} )`; - - return builder.format(snippet, type, output); - } -} - -addNodeClass('JoinNode', JoinNode); - -const stringVectorComponents = vectorComponents.join(''); - -class SplitNode extends Node { - constructor(node, components = 'x') { - super(); - - this.node = node; - this.components = components; - - this.isSplitNode = true; - } - - getVectorLength() { - let vectorLength = this.components.length; - - for (const c of this.components) { - vectorLength = Math.max(vectorComponents.indexOf(c) + 1, vectorLength); - } - - return vectorLength; - } - - getComponentType(builder) { - return builder.getComponentType(this.node.getNodeType(builder)); - } - - getNodeType(builder) { - return builder.getTypeFromLength(this.components.length, this.getComponentType(builder)); - } - - generate(builder, output) { - const node = this.node; - const nodeTypeLength = builder.getTypeLength(node.getNodeType(builder)); - - let snippet = null; - - if (nodeTypeLength > 1) { - let type = null; - - const componentsLength = this.getVectorLength(); - - if (componentsLength >= nodeTypeLength) { - // needed expand the input node - - type = builder.getTypeFromLength(this.getVectorLength(), this.getComponentType(builder)); - } - - const nodeSnippet = node.build(builder, type); - - if (this.components.length === nodeTypeLength && this.components === stringVectorComponents.slice(0, this.components.length)) { - // unnecessary swizzle - - snippet = builder.format(nodeSnippet, type, output); - } else { - snippet = builder.format(`${nodeSnippet}.${this.components}`, this.getNodeType(builder), output); - } - } else { - // ignore .components if .node returns float/integer - - snippet = node.build(builder, output); - } - - return snippet; - } - - serialize(data) { - super.serialize(data); - - data.components = this.components; - } - - deserialize(data) { - super.deserialize(data); - - this.components = data.components; - } -} - -addNodeClass('SplitNode', SplitNode); - -class SetNode extends TempNode { - constructor(sourceNode, components, targetNode) { - super(); - - this.sourceNode = sourceNode; - this.components = components; - this.targetNode = targetNode; - } - - getNodeType(builder) { - return this.sourceNode.getNodeType(builder); - } - - generate(builder) { - const { sourceNode, components, targetNode } = this; - - const sourceType = this.getNodeType(builder); - const targetType = builder.getTypeFromLength(components.length); - - const targetSnippet = targetNode.build(builder, targetType); - const sourceSnippet = sourceNode.build(builder, sourceType); - - const length = builder.getTypeLength(sourceType); - const snippetValues = []; - - for (let i = 0; i < length; i++) { - const component = vectorComponents[i]; - - if (component === components[0]) { - snippetValues.push(targetSnippet); - - i += components.length - 1; - } else { - snippetValues.push(sourceSnippet + '.' + component); - } - } - - return `${builder.getType(sourceType)}( ${snippetValues.join(', ')} )`; - } -} - -addNodeClass('SetNode', SetNode); - -class FlipNode extends TempNode { - constructor(sourceNode, components) { - super(); - - this.sourceNode = sourceNode; - this.components = components; - } - - getNodeType(builder) { - return this.sourceNode.getNodeType(builder); - } - - generate(builder) { - const { components, sourceNode } = this; - - const sourceType = this.getNodeType(builder); - const sourceSnippet = sourceNode.build(builder); - - const sourceCache = builder.getVarFromNode(this); - const sourceProperty = builder.getPropertyName(sourceCache); - - builder.addLineFlowCode(sourceProperty + ' = ' + sourceSnippet); - - const length = builder.getTypeLength(sourceType); - const snippetValues = []; - - let componentIndex = 0; - - for (let i = 0; i < length; i++) { - const component = vectorComponents[i]; - - if (component === components[componentIndex]) { - snippetValues.push('1.0 - ' + (sourceProperty + '.' + component)); - - componentIndex++; - } else { - snippetValues.push(sourceProperty + '.' + component); - } - } - - return `${builder.getType(sourceType)}( ${snippetValues.join(', ')} )`; - } -} - -class InputNode extends Node { - constructor(value, nodeType = null) { - super(nodeType); - - this.isInputNode = true; - - this.value = value; - this.precision = null; - } - - getNodeType(/*builder*/) { - if (this.nodeType === null) { - return getValueType(this.value); - } - - return this.nodeType; - } - - getInputType(builder) { - return this.getNodeType(builder); - } - - setPrecision(precision) { - this.precision = precision; - - return this; - } - - serialize(data) { - super.serialize(data); - - data.value = this.value; - - if (this.value && this.value.toArray) data.value = this.value.toArray(); - - data.valueType = getValueType(this.value); - data.nodeType = this.nodeType; - - if (data.valueType === 'ArrayBuffer') data.value = arrayBufferToBase64(data.value); - - data.precision = this.precision; - } - - deserialize(data) { - super.deserialize(data); - - this.nodeType = data.nodeType; - this.value = Array.isArray(data.value) ? getValueFromType(data.valueType, ...data.value) : data.value; - - this.precision = data.precision || null; - - if (this.value && this.value.fromArray) this.value = this.value.fromArray(data.value); - } - - generate(/*builder, output*/) { - console.warn('Abstract function.'); - } -} - -addNodeClass('InputNode', InputNode); - -class ConstNode extends InputNode { - constructor(value, nodeType = null) { - super(value, nodeType); - - this.isConstNode = true; - } - - generateConst(builder) { - return builder.generateConst(this.getNodeType(builder), this.value); - } - - generate(builder, output) { - const type = this.getNodeType(builder); - // textureLoad - if (type === 'float' && ['int', 'uint'].includes(output)) { - return `${Math.round(parseFloat(this.generateConst(builder)))}`; - } - - return builder.format(this.generateConst(builder), type, output); - } -} - -addNodeClass('ConstNode', ConstNode); - -// - -let currentStack = null; - -const NodeElements = new Map(); // @TODO: Currently only a few nodes are added, probably also add others - -function addNodeElement(name, nodeElement) { - if (NodeElements.has(name)) { - console.warn(`Redefinition of node element ${name}`); - return; - } - - if (typeof nodeElement !== 'function') throw new Error(`Node element ${name} is not a function`); - - NodeElements.set(name, nodeElement); -} - -const parseSwizzle = (props) => props.replace(/r|s/g, 'x').replace(/g|t/g, 'y').replace(/b|p/g, 'z').replace(/a|q/g, 'w'); -const parseSwizzleAndSort = (props) => parseSwizzle(props).split('').sort().join(''); - -const shaderNodeHandler = { - setup(NodeClosure, params) { - const inputs = params.shift(); - - return NodeClosure(nodeObjects(inputs), ...params); - }, - - get(node, prop, nodeObj) { - if (typeof prop === 'string' && node[prop] === undefined) { - if (node.isStackNode !== true && prop === 'assign') { - return (...params) => { - currentStack.assign(nodeObj, ...params); - - return nodeObj; - }; - } else if (NodeElements.has(prop)) { - const nodeElement = NodeElements.get(prop); - - return node.isStackNode ? (...params) => nodeObj.add(nodeElement(...params)) : (...params) => nodeElement(nodeObj, ...params); - } else if (prop === 'self') { - return node; - } else if (prop.endsWith('Assign') && NodeElements.has(prop.slice(0, prop.length - 'Assign'.length))) { - const nodeElement = NodeElements.get(prop.slice(0, prop.length - 'Assign'.length)); - - return node.isStackNode ? (...params) => nodeObj.assign(params[0], nodeElement(...params)) : (...params) => nodeObj.assign(nodeElement(nodeObj, ...params)); - } else if (/^[xyzwrgbastpq]{1,4}$/.test(prop) === true) { - // accessing properties ( swizzle ) - - prop = parseSwizzle(prop); - - return nodeObject(new SplitNode(nodeObj, prop)); - } else if (/^set[XYZWRGBASTPQ]{1,4}$/.test(prop) === true) { - // set properties ( swizzle ) and sort to xyzw sequence - - prop = parseSwizzleAndSort(prop.slice(3).toLowerCase()); - - return (value) => nodeObject(new SetNode(node, prop, value)); - } else if (/^flip[XYZWRGBASTPQ]{1,4}$/.test(prop) === true) { - // set properties ( swizzle ) and sort to xyzw sequence - - prop = parseSwizzleAndSort(prop.slice(4).toLowerCase()); - - return () => nodeObject(new FlipNode(nodeObject(node), prop)); - } else if (prop === 'width' || prop === 'height' || prop === 'depth') { - // accessing property - - if (prop === 'width') prop = 'x'; - else if (prop === 'height') prop = 'y'; - else if (prop === 'depth') prop = 'z'; - - return nodeObject(new SplitNode(node, prop)); - } else if (/^\d+$/.test(prop) === true) { - // accessing array - - return nodeObject(new ArrayElementNode(nodeObj, new ConstNode(Number(prop), 'uint'))); - } - } - - return Reflect.get(node, prop, nodeObj); - }, - - set(node, prop, value, nodeObj) { - if (typeof prop === 'string' && node[prop] === undefined) { - // setting properties - - if (/^[xyzwrgbastpq]{1,4}$/.test(prop) === true || prop === 'width' || prop === 'height' || prop === 'depth' || /^\d+$/.test(prop) === true) { - nodeObj[prop].assign(value); - - return true; - } - } - - return Reflect.set(node, prop, value, nodeObj); - }, -}; - -const nodeObjectsCacheMap = new WeakMap(); -const nodeBuilderFunctionsCacheMap = new WeakMap(); - -const ShaderNodeObject = function (obj, altType = null) { - const type = getValueType(obj); - - if (type === 'node') { - let nodeObject = nodeObjectsCacheMap.get(obj); - - if (nodeObject === undefined) { - nodeObject = new Proxy(obj, shaderNodeHandler); - - nodeObjectsCacheMap.set(obj, nodeObject); - nodeObjectsCacheMap.set(nodeObject, nodeObject); - } - - return nodeObject; - } else if ((altType === null && (type === 'float' || type === 'boolean')) || (type && type !== 'shader' && type !== 'string')) { - return nodeObject(getConstNode(obj, altType)); - } else if (type === 'shader') { - return Fn(obj); - } - - return obj; -}; - -const ShaderNodeObjects = function (objects, altType = null) { - for (const name in objects) { - objects[name] = nodeObject(objects[name], altType); - } - - return objects; -}; - -const ShaderNodeArray = function (array, altType = null) { - const len = array.length; - - for (let i = 0; i < len; i++) { - array[i] = nodeObject(array[i], altType); - } - - return array; -}; - -const ShaderNodeProxy = function (NodeClass, scope = null, factor = null, settings = null) { - const assignNode = (node) => nodeObject(settings !== null ? Object.assign(node, settings) : node); - - if (scope === null) { - return (...params) => { - return assignNode(new NodeClass(...nodeArray(params))); - }; - } else if (factor !== null) { - factor = nodeObject(factor); - - return (...params) => { - return assignNode(new NodeClass(scope, ...nodeArray(params), factor)); - }; - } else { - return (...params) => { - return assignNode(new NodeClass(scope, ...nodeArray(params))); - }; - } -}; - -const ShaderNodeImmutable = function (NodeClass, ...params) { - return nodeObject(new NodeClass(...nodeArray(params))); -}; - -class ShaderCallNodeInternal extends Node { - constructor(shaderNode, inputNodes) { - super(); - - this.shaderNode = shaderNode; - this.inputNodes = inputNodes; - } - - getNodeType(builder) { - return this.shaderNode.nodeType || this.getOutputNode(builder).getNodeType(builder); - } - - call(builder) { - const { shaderNode, inputNodes } = this; - - const properties = builder.getNodeProperties(shaderNode); - if (properties.onceOutput) return properties.onceOutput; - - // - - let result = null; - - if (shaderNode.layout) { - let functionNodesCacheMap = nodeBuilderFunctionsCacheMap.get(builder.constructor); - - if (functionNodesCacheMap === undefined) { - functionNodesCacheMap = new WeakMap(); - - nodeBuilderFunctionsCacheMap.set(builder.constructor, functionNodesCacheMap); - } - - let functionNode = functionNodesCacheMap.get(shaderNode); - - if (functionNode === undefined) { - functionNode = nodeObject(builder.buildFunctionNode(shaderNode)); - - functionNodesCacheMap.set(shaderNode, functionNode); - } - - if (builder.currentFunctionNode !== null) { - builder.currentFunctionNode.includes.push(functionNode); - } - - result = nodeObject(functionNode.call(inputNodes)); - } else { - const jsFunc = shaderNode.jsFunc; - const outputNode = inputNodes !== null ? jsFunc(inputNodes, builder) : jsFunc(builder); - - result = nodeObject(outputNode); - } - - if (shaderNode.once) { - properties.onceOutput = result; - } - - return result; - } - - getOutputNode(builder) { - const properties = builder.getNodeProperties(this); - - if (properties.outputNode === null) { - properties.outputNode = this.setupOutput(builder); - } - - return properties.outputNode; - } - - setup(builder) { - return this.getOutputNode(builder); - } - - setupOutput(builder) { - builder.addStack(); - - builder.stack.outputNode = this.call(builder); - - return builder.removeStack(); - } - - generate(builder, output) { - const outputNode = this.getOutputNode(builder); - - return outputNode.build(builder, output); - } -} - -class ShaderNodeInternal extends Node { - constructor(jsFunc, nodeType) { - super(nodeType); - - this.jsFunc = jsFunc; - this.layout = null; - - this.global = true; - - this.once = false; - } - - setLayout(layout) { - this.layout = layout; - - return this; - } - - call(inputs = null) { - nodeObjects(inputs); - - return nodeObject(new ShaderCallNodeInternal(this, inputs)); - } - - setup() { - return this.call(); - } -} - -const bools = [false, true]; -const uints = [0, 1, 2, 3]; -const ints = [-1, -2]; -const floats = [0.5, 1.5, 1 / 3, 1e-6, 1e6, Math.PI, Math.PI * 2, 1 / Math.PI, 2 / Math.PI, 1 / (Math.PI * 2), Math.PI / 2]; - -const boolsCacheMap = new Map(); -for (const bool of bools) boolsCacheMap.set(bool, new ConstNode(bool)); - -const uintsCacheMap = new Map(); -for (const uint of uints) uintsCacheMap.set(uint, new ConstNode(uint, 'uint')); - -const intsCacheMap = new Map([...uintsCacheMap].map((el) => new ConstNode(el.value, 'int'))); -for (const int of ints) intsCacheMap.set(int, new ConstNode(int, 'int')); - -const floatsCacheMap = new Map([...intsCacheMap].map((el) => new ConstNode(el.value))); -for (const float of floats) floatsCacheMap.set(float, new ConstNode(float)); -for (const float of floats) floatsCacheMap.set(-float, new ConstNode(-float)); - -const cacheMaps = { bool: boolsCacheMap, uint: uintsCacheMap, ints: intsCacheMap, float: floatsCacheMap }; - -const constNodesCacheMap = new Map([...boolsCacheMap, ...floatsCacheMap]); - -const getConstNode = (value, type) => { - if (constNodesCacheMap.has(value)) { - return constNodesCacheMap.get(value); - } else if (value.isNode === true) { - return value; - } else { - return new ConstNode(value, type); - } -}; - -const safeGetNodeType = (node) => { - try { - return node.getNodeType(); - } catch (_) { - return undefined; - } -}; - -const ConvertType = function (type, cacheMap = null) { - return (...params) => { - if (params.length === 0 || (!['bool', 'float', 'int', 'uint'].includes(type) && params.every((param) => typeof param !== 'object'))) { - params = [getValueFromType(type, ...params)]; - } - - if (params.length === 1 && cacheMap !== null && cacheMap.has(params[0])) { - return nodeObject(cacheMap.get(params[0])); - } - - if (params.length === 1) { - const node = getConstNode(params[0], type); - if (safeGetNodeType(node) === type) return nodeObject(node); - return nodeObject(new ConvertNode(node, type)); - } - - const nodes = params.map((param) => getConstNode(param)); - return nodeObject(new JoinNode(nodes, type)); - }; -}; - -// exports - -const defined = (v) => (typeof v === 'object' && v !== null ? v.value : v); // TODO: remove boolean conversion and defined function - -// utils - -const getConstNodeType = (value) => (value !== undefined && value !== null ? value.nodeType || value.convertTo || (typeof value === 'string' ? value : null) : null); - -// shader node base - -function ShaderNode(jsFunc, nodeType) { - return new Proxy(new ShaderNodeInternal(jsFunc, nodeType), shaderNodeHandler); -} - -const nodeObject = (val, altType = null) => /* new */ ShaderNodeObject(val, altType); -const nodeObjects = (val, altType = null) => new ShaderNodeObjects(val, altType); -const nodeArray = (val, altType = null) => new ShaderNodeArray(val, altType); -const nodeProxy = (...params) => new ShaderNodeProxy(...params); -const nodeImmutable = (...params) => new ShaderNodeImmutable(...params); - -const Fn = (jsFunc, nodeType) => { - const shaderNode = new ShaderNode(jsFunc, nodeType); - - const fn = (...params) => { - let inputs; - - nodeObjects(params); - - if (params[0] && params[0].isNode) { - inputs = [...params]; - } else { - inputs = params[0]; - } - - return shaderNode.call(inputs); - }; - - fn.shaderNode = shaderNode; - - fn.setLayout = (layout) => { - shaderNode.setLayout(layout); - - return fn; - }; - - fn.once = () => { - shaderNode.once = true; - - return fn; - }; - - return fn; -}; - -const tslFn = (...params) => { - // @deprecated, r168 - - console.warn('TSL.ShaderNode: tslFn() has been renamed to Fn().'); - return Fn(...params); -}; - -addNodeClass('ShaderNode', ShaderNode); - -// - -addNodeElement('toGlobal', (node) => { - node.global = true; - - return node; -}); - -// - -const setCurrentStack = (stack) => { - currentStack = stack; -}; - -const getCurrentStack = () => currentStack; - -const If = (...params) => currentStack.If(...params); - -function append(node) { - if (currentStack) currentStack.add(node); - - return node; -} - -addNodeElement('append', append); - -// types -// @TODO: Maybe export from ConstNode.js? - -const color = new ConvertType('color'); - -const float = new ConvertType('float', cacheMaps.float); -const int = new ConvertType('int', cacheMaps.ints); -const uint = new ConvertType('uint', cacheMaps.uint); -const bool = new ConvertType('bool', cacheMaps.bool); - -const vec2 = new ConvertType('vec2'); -const ivec2 = new ConvertType('ivec2'); -const uvec2 = new ConvertType('uvec2'); -const bvec2 = new ConvertType('bvec2'); - -const vec3 = new ConvertType('vec3'); -const ivec3 = new ConvertType('ivec3'); -const uvec3 = new ConvertType('uvec3'); -const bvec3 = new ConvertType('bvec3'); - -const vec4 = new ConvertType('vec4'); -const ivec4 = new ConvertType('ivec4'); -const uvec4 = new ConvertType('uvec4'); -const bvec4 = new ConvertType('bvec4'); - -const mat2 = new ConvertType('mat2'); -const imat2 = new ConvertType('imat2'); -const umat2 = new ConvertType('umat2'); -const bmat2 = new ConvertType('bmat2'); - -const mat3 = new ConvertType('mat3'); -const imat3 = new ConvertType('imat3'); -const umat3 = new ConvertType('umat3'); -const bmat3 = new ConvertType('bmat3'); - -const mat4 = new ConvertType('mat4'); -const imat4 = new ConvertType('imat4'); -const umat4 = new ConvertType('umat4'); -const bmat4 = new ConvertType('bmat4'); - -const string = (value = '') => nodeObject(new ConstNode(value, 'string')); -const arrayBuffer = (value) => nodeObject(new ConstNode(value, 'ArrayBuffer')); - -addNodeElement('toColor', color); -addNodeElement('toFloat', float); -addNodeElement('toInt', int); -addNodeElement('toUint', uint); -addNodeElement('toBool', bool); -addNodeElement('toVec2', vec2); -addNodeElement('toIvec2', ivec2); -addNodeElement('toUvec2', uvec2); -addNodeElement('toBvec2', bvec2); -addNodeElement('toVec3', vec3); -addNodeElement('toIvec3', ivec3); -addNodeElement('toUvec3', uvec3); -addNodeElement('toBvec3', bvec3); -addNodeElement('toVec4', vec4); -addNodeElement('toIvec4', ivec4); -addNodeElement('toUvec4', uvec4); -addNodeElement('toBvec4', bvec4); -addNodeElement('toMat2', mat2); -addNodeElement('toImat2', imat2); -addNodeElement('toUmat2', umat2); -addNodeElement('toBmat2', bmat2); -addNodeElement('toMat3', mat3); -addNodeElement('toImat3', imat3); -addNodeElement('toUmat3', umat3); -addNodeElement('toBmat3', bmat3); -addNodeElement('toMat4', mat4); -addNodeElement('toImat4', imat4); -addNodeElement('toUmat4', umat4); -addNodeElement('toBmat4', bmat4); - -// basic nodes -// HACK - we cannot export them from the corresponding files because of the cyclic dependency -const element = nodeProxy(ArrayElementNode); -const convert = (node, types) => nodeObject(new ConvertNode(nodeObject(node), types)); -const split = (node, channels) => nodeObject(new SplitNode(nodeObject(node), channels)); - -addNodeElement('element', element); -addNodeElement('convert', convert); - -class AssignNode extends TempNode { - constructor(targetNode, sourceNode) { - super(); - - this.targetNode = targetNode; - this.sourceNode = sourceNode; - } - - hasDependencies() { - return false; - } - - getNodeType(builder, output) { - return output !== 'void' ? this.targetNode.getNodeType(builder) : 'void'; - } - - needsSplitAssign(builder) { - const { targetNode } = this; - - if (builder.isAvailable('swizzleAssign') === false && targetNode.isSplitNode && targetNode.components.length > 1) { - const targetLength = builder.getTypeLength(targetNode.node.getNodeType(builder)); - const assignDiferentVector = vectorComponents.join('').slice(0, targetLength) !== targetNode.components; - - return assignDiferentVector; - } - - return false; - } - - generate(builder, output) { - const { targetNode, sourceNode } = this; - - const needsSplitAssign = this.needsSplitAssign(builder); - - const targetType = targetNode.getNodeType(builder); - - const target = targetNode.context({ assign: true }).build(builder); - const source = sourceNode.build(builder, targetType); - - const sourceType = sourceNode.getNodeType(builder); - - const nodeData = builder.getDataFromNode(this); - - // - - let snippet; - - if (nodeData.initialized === true) { - if (output !== 'void') { - snippet = target; - } - } else if (needsSplitAssign) { - const sourceVar = builder.getVarFromNode(this, null, targetType); - const sourceProperty = builder.getPropertyName(sourceVar); - - builder.addLineFlowCode(`${sourceProperty} = ${source}`); - - const targetRoot = targetNode.node.context({ assign: true }).build(builder); - - for (let i = 0; i < targetNode.components.length; i++) { - const component = targetNode.components[i]; - - builder.addLineFlowCode(`${targetRoot}.${component} = ${sourceProperty}[ ${i} ]`); - } - - if (output !== 'void') { - snippet = target; - } - } else { - snippet = `${target} = ${source}`; - - if (output === 'void' || sourceType === 'void') { - builder.addLineFlowCode(snippet); - - if (output !== 'void') { - snippet = target; - } - } - } - - nodeData.initialized = true; - - return builder.format(snippet, targetType, output); - } -} - -const assign = nodeProxy(AssignNode); - -addNodeClass('AssignNode', AssignNode); - -addNodeElement('assign', assign); - -class VaryingNode extends Node { - constructor(node, name = null) { - super(); - - this.node = node; - this.name = name; - - this.isVaryingNode = true; - } - - isGlobal() { - return true; - } - - getHash(builder) { - return this.name || super.getHash(builder); - } - - getNodeType(builder) { - // VaryingNode is auto type - - return this.node.getNodeType(builder); - } - - setupVarying(builder) { - const properties = builder.getNodeProperties(this); - - let varying = properties.varying; - - if (varying === undefined) { - const name = this.name; - const type = this.getNodeType(builder); - - properties.varying = varying = builder.getVaryingFromNode(this, name, type); - properties.node = this.node; - } - - // this property can be used to check if the varying can be optimized for a variable - varying.needsInterpolation || (varying.needsInterpolation = builder.shaderStage === 'fragment'); - - return varying; - } - - setup(builder) { - this.setupVarying(builder); - } - - analyze(builder) { - this.setupVarying(builder); - - return this.node.analyze(builder); - } - - generate(builder) { - const properties = builder.getNodeProperties(this); - const varying = this.setupVarying(builder); - - if (properties.propertyName === undefined) { - const type = this.getNodeType(builder); - const propertyName = builder.getPropertyName(varying, NodeShaderStage.VERTEX); - - // force node run in vertex stage - builder.flowNodeFromShaderStage(NodeShaderStage.VERTEX, this.node, type, propertyName); - - properties.propertyName = propertyName; - } - - return builder.getPropertyName(varying); - } -} - -const varying = nodeProxy(VaryingNode); - -addNodeElement('varying', varying); - -addNodeClass('VaryingNode', VaryingNode); - -class AttributeNode extends Node { - constructor(attributeName, nodeType = null) { - super(nodeType); - - this.global = true; - - this._attributeName = attributeName; - } - - getHash(builder) { - return this.getAttributeName(builder); - } - - getNodeType(builder) { - let nodeType = this.nodeType; - - if (nodeType === null) { - const attributeName = this.getAttributeName(builder); - - if (builder.hasGeometryAttribute(attributeName)) { - const attribute = builder.geometry.getAttribute(attributeName); - - nodeType = builder.getTypeFromAttribute(attribute); - } else { - nodeType = 'float'; - } - } - - return nodeType; - } - - setAttributeName(attributeName) { - this._attributeName = attributeName; - - return this; - } - - getAttributeName(/*builder*/) { - return this._attributeName; - } - - generate(builder) { - const attributeName = this.getAttributeName(builder); - const nodeType = this.getNodeType(builder); - const geometryAttribute = builder.hasGeometryAttribute(attributeName); - - if (geometryAttribute === true) { - const attribute = builder.geometry.getAttribute(attributeName); - const attributeType = builder.getTypeFromAttribute(attribute); - - const nodeAttribute = builder.getAttribute(attributeName, attributeType); - - if (builder.shaderStage === 'vertex') { - return builder.format(nodeAttribute.name, attributeType, nodeType); - } else { - const nodeVarying = varying(this); - - return nodeVarying.build(builder, nodeType); - } - } else { - console.warn(`AttributeNode: Vertex attribute "${attributeName}" not found on geometry.`); - - return builder.generateConst(nodeType); - } - } - - serialize(data) { - super.serialize(data); - - data.global = this.global; - data._attributeName = this._attributeName; - } - - deserialize(data) { - super.deserialize(data); - - this.global = data.global; - this._attributeName = data._attributeName; - } -} - -const attribute = (name, nodeType) => nodeObject(new AttributeNode(name, nodeType)); - -addNodeClass('AttributeNode', AttributeNode); - -class BypassNode extends Node { - constructor(returnNode, callNode) { - super(); - - this.isBypassNode = true; - - this.outputNode = returnNode; - this.callNode = callNode; - } - - getNodeType(builder) { - return this.outputNode.getNodeType(builder); - } - - generate(builder) { - const snippet = this.callNode.build(builder, 'void'); - - if (snippet !== '') { - builder.addLineFlowCode(snippet); - } - - return this.outputNode.build(builder); - } -} - -const bypass = nodeProxy(BypassNode); - -addNodeElement('bypass', bypass); - -addNodeClass('BypassNode', BypassNode); - -class CacheNode extends Node { - constructor(node, parent = true) { - super(); - - this.node = node; - this.parent = parent; - - this.isCacheNode = true; - } - - getNodeType(builder) { - return this.node.getNodeType(builder); - } - - build(builder, ...params) { - const previousCache = builder.getCache(); - const cache = builder.getCacheFromNode(this, parent); - - builder.setCache(cache); - - const data = this.node.build(builder, ...params); - - builder.setCache(previousCache); - - return data; - } -} - -const cache = (node, ...params) => nodeObject(new CacheNode(nodeObject(node), ...params)); - -addNodeElement('cache', cache); - -addNodeClass('CacheNode', CacheNode); - -class ContextNode extends Node { - constructor(node, value = {}) { - super(); - - this.isContextNode = true; - - this.node = node; - this.value = value; - } - - getNodeType(builder) { - return this.node.getNodeType(builder); - } - - analyze(builder) { - this.node.build(builder); - } - - setup(builder) { - const previousContext = builder.getContext(); - - builder.setContext({ ...builder.context, ...this.value }); - - const node = this.node.build(builder); - - builder.setContext(previousContext); - - return node; - } - - generate(builder, output) { - const previousContext = builder.getContext(); - - builder.setContext({ ...builder.context, ...this.value }); - - const snippet = this.node.build(builder, output); - - builder.setContext(previousContext); - - return snippet; - } -} - -const context = nodeProxy(ContextNode); -const label = (node, name) => context(node, { label: name }); - -addNodeElement('context', context); -addNodeElement('label', label); - -addNodeClass('ContextNode', ContextNode); - -class IndexNode extends Node { - constructor(scope) { - super('uint'); - - this.scope = scope; - - this.isInstanceIndexNode = true; - } - - generate(builder) { - const nodeType = this.getNodeType(builder); - const scope = this.scope; - - let propertyName; - - if (scope === IndexNode.VERTEX) { - propertyName = builder.getVertexIndex(); - } else if (scope === IndexNode.INSTANCE) { - propertyName = builder.getInstanceIndex(); - } else if (scope === IndexNode.DRAW) { - propertyName = builder.getDrawIndex(); - } else { - throw new Error('THREE.IndexNode: Unknown scope: ' + scope); - } - - let output; - - if (builder.shaderStage === 'vertex' || builder.shaderStage === 'compute') { - output = propertyName; - } else { - const nodeVarying = varying(this); - - output = nodeVarying.build(builder, nodeType); - } - - return output; - } -} - -IndexNode.VERTEX = 'vertex'; -IndexNode.INSTANCE = 'instance'; -IndexNode.DRAW = 'draw'; - -const vertexIndex = nodeImmutable(IndexNode, IndexNode.VERTEX); -const instanceIndex = nodeImmutable(IndexNode, IndexNode.INSTANCE); -const drawIndex = nodeImmutable(IndexNode, IndexNode.DRAW); - -addNodeClass('IndexNode', IndexNode); - -class LightingModel { - start(/*input, stack, builder*/) {} - - finish(/*input, stack, builder*/) {} - - direct(/*input, stack, builder*/) {} - - directRectArea(/*input, stack, builder*/) {} - - indirect(/*input, stack, builder*/) {} - - ambientOcclusion(/*input, stack, builder*/) {} -} - -class VarNode extends Node { - constructor(node, name = null) { - super(); - - this.node = node; - this.name = name; - - this.global = true; - - this.isVarNode = true; - } - - getHash(builder) { - return this.name || super.getHash(builder); - } - - getNodeType(builder) { - return this.node.getNodeType(builder); - } - - generate(builder) { - const { node, name } = this; - - const nodeVar = builder.getVarFromNode(this, name, builder.getVectorType(this.getNodeType(builder))); - - const propertyName = builder.getPropertyName(nodeVar); - - const snippet = node.build(builder, nodeVar.type); - - builder.addLineFlowCode(`${propertyName} = ${snippet}`); - - return propertyName; - } -} - -const temp = nodeProxy(VarNode); - -addNodeElement('temp', temp); // @TODO: Will be removed in the future -addNodeElement('toVar', (...params) => temp(...params).append()); - -addNodeClass('VarNode', VarNode); - -class NodeAttribute { - constructor(name, type, node = null) { - this.isNodeAttribute = true; - - this.name = name; - this.type = type; - this.node = node; - } -} - -class NodeUniform { - constructor(name, type, node) { - this.isNodeUniform = true; - - this.name = name; - this.type = type; - this.node = node.getSelf(); - } - - get value() { - return this.node.value; - } - - set value(val) { - this.node.value = val; - } - - get id() { - return this.node.id; - } - - get groupNode() { - return this.node.groupNode; - } -} - -class NodeVar { - constructor(name, type) { - this.isNodeVar = true; - - this.name = name; - this.type = type; - } -} - -class NodeVarying extends NodeVar { - constructor(name, type) { - super(name, type); - - this.needsInterpolation = false; - - this.isNodeVarying = true; - } -} - -class NodeCode { - constructor(name, type, code = '') { - this.name = name; - this.type = type; - this.code = code; - - Object.defineProperty(this, 'isNodeCode', { value: true }); - } -} - -let id$1 = 0; - -class NodeCache { - constructor(parent = null) { - this.id = id$1++; - this.nodesData = new WeakMap(); - - this.parent = parent; - } - - getData(node) { - let data = this.nodesData.get(node); - - if (data === undefined && this.parent !== null) { - data = this.parent.getData(node); - } - - return data; - } - - setData(node, data) { - this.nodesData.set(node, data); - } -} - -class PropertyNode extends Node { - constructor(nodeType, name = null, varying = false) { - super(nodeType); - - this.name = name; - this.varying = varying; - - this.isPropertyNode = true; - } - - getHash(builder) { - return this.name || super.getHash(builder); - } - - isGlobal(/*builder*/) { - return true; - } - - generate(builder) { - let nodeVar; - - if (this.varying === true) { - nodeVar = builder.getVaryingFromNode(this, this.name); - nodeVar.needsInterpolation = true; - } else { - nodeVar = builder.getVarFromNode(this, this.name); - } - - return builder.getPropertyName(nodeVar); - } -} - -const property = (type, name) => nodeObject(new PropertyNode(type, name)); -const varyingProperty = (type, name) => nodeObject(new PropertyNode(type, name, true)); - -const diffuseColor = nodeImmutable(PropertyNode, 'vec4', 'DiffuseColor'); -const emissive = nodeImmutable(PropertyNode, 'vec3', 'EmissiveColor'); -const roughness = nodeImmutable(PropertyNode, 'float', 'Roughness'); -const metalness = nodeImmutable(PropertyNode, 'float', 'Metalness'); -const clearcoat = nodeImmutable(PropertyNode, 'float', 'Clearcoat'); -const clearcoatRoughness = nodeImmutable(PropertyNode, 'float', 'ClearcoatRoughness'); -const sheen = nodeImmutable(PropertyNode, 'vec3', 'Sheen'); -const sheenRoughness = nodeImmutable(PropertyNode, 'float', 'SheenRoughness'); -const iridescence = nodeImmutable(PropertyNode, 'float', 'Iridescence'); -const iridescenceIOR = nodeImmutable(PropertyNode, 'float', 'IridescenceIOR'); -const iridescenceThickness = nodeImmutable(PropertyNode, 'float', 'IridescenceThickness'); -const alphaT = nodeImmutable(PropertyNode, 'float', 'AlphaT'); -const anisotropy = nodeImmutable(PropertyNode, 'float', 'Anisotropy'); -const anisotropyT = nodeImmutable(PropertyNode, 'vec3', 'AnisotropyT'); -const anisotropyB = nodeImmutable(PropertyNode, 'vec3', 'AnisotropyB'); -const specularColor = nodeImmutable(PropertyNode, 'color', 'SpecularColor'); -const specularF90 = nodeImmutable(PropertyNode, 'float', 'SpecularF90'); -const shininess = nodeImmutable(PropertyNode, 'float', 'Shininess'); -const output = nodeImmutable(PropertyNode, 'vec4', 'Output'); -const dashSize = nodeImmutable(PropertyNode, 'float', 'dashSize'); -const gapSize = nodeImmutable(PropertyNode, 'float', 'gapSize'); -const pointWidth = nodeImmutable(PropertyNode, 'float', 'pointWidth'); -const ior = nodeImmutable(PropertyNode, 'float', 'IOR'); -const transmission = nodeImmutable(PropertyNode, 'float', 'Transmission'); -const thickness = nodeImmutable(PropertyNode, 'float', 'Thickness'); -const attenuationDistance = nodeImmutable(PropertyNode, 'float', 'AttenuationDistance'); -const attenuationColor = nodeImmutable(PropertyNode, 'color', 'AttenuationColor'); -const dispersion = nodeImmutable(PropertyNode, 'float', 'Dispersion'); - -addNodeClass('PropertyNode', PropertyNode); - -class ParameterNode extends PropertyNode { - constructor(nodeType, name = null) { - super(nodeType, name); - - this.isParameterNode = true; - } - - getHash() { - return this.uuid; - } - - generate() { - return this.name; - } -} - -const parameter = (type, name) => nodeObject(new ParameterNode(type, name)); - -addNodeClass('ParameterNode', ParameterNode); - -class CodeNode extends Node { - constructor(code = '', includes = [], language = '') { - super('code'); - - this.isCodeNode = true; - - this.code = code; - this.language = language; - - this.includes = includes; - } - - isGlobal() { - return true; - } - - setIncludes(includes) { - this.includes = includes; - - return this; - } - - getIncludes(/*builder*/) { - return this.includes; - } - - generate(builder) { - const includes = this.getIncludes(builder); - - for (const include of includes) { - include.build(builder); - } - - const nodeCode = builder.getCodeFromNode(this, this.getNodeType(builder)); - nodeCode.code = this.code; - - return nodeCode.code; - } - - serialize(data) { - super.serialize(data); - - data.code = this.code; - data.language = this.language; - } - - deserialize(data) { - super.deserialize(data); - - this.code = data.code; - this.language = data.language; - } -} - -const code = nodeProxy(CodeNode); - -const js = (src, includes) => code(src, includes, 'js'); -const wgsl = (src, includes) => code(src, includes, 'wgsl'); -const glsl = (src, includes) => code(src, includes, 'glsl'); - -addNodeClass('CodeNode', CodeNode); - -class FunctionNode extends CodeNode { - constructor(code = '', includes = [], language = '') { - super(code, includes, language); - } - - getNodeType(builder) { - return this.getNodeFunction(builder).type; - } - - getInputs(builder) { - return this.getNodeFunction(builder).inputs; - } - - getNodeFunction(builder) { - const nodeData = builder.getDataFromNode(this); - - let nodeFunction = nodeData.nodeFunction; - - if (nodeFunction === undefined) { - nodeFunction = builder.parser.parseFunction(this.code); - - nodeData.nodeFunction = nodeFunction; - } - - return nodeFunction; - } - - generate(builder, output) { - super.generate(builder); - - const nodeFunction = this.getNodeFunction(builder); - - const name = nodeFunction.name; - const type = nodeFunction.type; - - const nodeCode = builder.getCodeFromNode(this, type); - - if (name !== '') { - // use a custom property name - - nodeCode.name = name; - } - - const propertyName = builder.getPropertyName(nodeCode); - - const code = this.getNodeFunction(builder).getCode(propertyName); - - nodeCode.code = code + '\n'; - - if (output === 'property') { - return propertyName; - } else { - return builder.format(`${propertyName}()`, type, output); - } - } -} - -const nativeFn = (code, includes = [], language = '') => { - for (let i = 0; i < includes.length; i++) { - const include = includes[i]; - - // TSL Function: glslFn, wgslFn - - if (typeof include === 'function') { - includes[i] = include.functionNode; - } - } - - const functionNode = nodeObject(new FunctionNode(code, includes, language)); - - const fn = (...params) => functionNode.call(...params); - fn.functionNode = functionNode; - - return fn; -}; - -const glslFn = (code, includes) => nativeFn(code, includes, 'glsl'); -const wgslFn = (code, includes) => nativeFn(code, includes, 'wgsl'); - -addNodeClass('FunctionNode', FunctionNode); - -class UniformGroupNode extends Node { - constructor(name, shared = false) { - super('string'); - - this.name = name; - this.version = 0; - - this.shared = shared; - - this.isUniformGroup = true; - } - - set needsUpdate(value) { - if (value === true) this.version++; - } - - serialize(data) { - super.serialize(data); - - data.name = this.name; - data.version = this.version; - data.shared = this.shared; - } - - deserialize(data) { - super.deserialize(data); - - this.name = data.name; - this.version = data.version; - this.shared = data.shared; - } -} - -const uniformGroup = (name) => new UniformGroupNode(name); -const sharedUniformGroup = (name) => new UniformGroupNode(name, true); - -const frameGroup = sharedUniformGroup('frame'); -const renderGroup = sharedUniformGroup('render'); -const objectGroup = uniformGroup('object'); - -addNodeClass('UniformGroupNode', UniformGroupNode); - -class UniformNode extends InputNode { - constructor(value, nodeType = null) { - super(value, nodeType); - - this.isUniformNode = true; - - this.name = ''; - this.groupNode = objectGroup; - } - - label(name) { - this.name = name; - - return this; - } - - setGroup(group) { - this.groupNode = group; - - return this; - } - - getGroup() { - return this.groupNode; - } - - getUniformHash(builder) { - return this.getHash(builder); - } - - onUpdate(callback, updateType) { - const self = this.getSelf(); - - callback = callback.bind(self); - - return super.onUpdate((frame) => { - const value = callback(frame, self); - - if (value !== undefined) { - this.value = value; - } - }, updateType); - } - - generate(builder, output) { - const type = this.getNodeType(builder); - - const hash = this.getUniformHash(builder); - - let sharedNode = builder.getNodeFromHash(hash); - - if (sharedNode === undefined) { - builder.setHashNode(this, hash); - - sharedNode = this; - } - - const sharedNodeType = sharedNode.getInputType(builder); - - const nodeUniform = builder.getUniformFromNode(sharedNode, sharedNodeType, builder.shaderStage, this.name || builder.context.label); - const propertyName = builder.getPropertyName(nodeUniform); - - if (builder.context.label !== undefined) delete builder.context.label; - - return builder.format(propertyName, type, output); - } -} - -const uniform = (arg1, arg2) => { - const nodeType = getConstNodeType(arg2 || arg1); - - // @TODO: get ConstNode from .traverse() in the future - const value = arg1 && arg1.isNode === true ? (arg1.node && arg1.node.value) || arg1.value : arg1; - - return nodeObject(new UniformNode(value, nodeType)); -}; - -addNodeClass('UniformNode', UniformNode); - -const uv = (index) => attribute('uv' + (index > 0 ? index : ''), 'vec2'); - -class TextureSizeNode extends Node { - constructor(textureNode, levelNode = null) { - super('uvec2'); - - this.isTextureSizeNode = true; - - this.textureNode = textureNode; - this.levelNode = levelNode; - } - - generate(builder, output) { - const textureProperty = this.textureNode.build(builder, 'property'); - const levelNode = this.levelNode.build(builder, 'int'); - - return builder.format(`${builder.getMethod('textureDimensions')}( ${textureProperty}, ${levelNode} )`, this.getNodeType(builder), output); - } -} - -const textureSize = nodeProxy(TextureSizeNode); - -addNodeElement('textureSize', textureSize); - -addNodeClass('TextureSizeNode', TextureSizeNode); - -class OperatorNode extends TempNode { - constructor(op, aNode, bNode, ...params) { - super(); - - if (params.length > 0) { - let finalOp = new OperatorNode(op, aNode, bNode); - - for (let i = 0; i < params.length - 1; i++) { - finalOp = new OperatorNode(op, finalOp, params[i]); - } - - aNode = finalOp; - bNode = params[params.length - 1]; - } - - this.op = op; - this.aNode = aNode; - this.bNode = bNode; - } - - getNodeType(builder, output) { - const op = this.op; - - const aNode = this.aNode; - const bNode = this.bNode; - - const typeA = aNode.getNodeType(builder); - const typeB = typeof bNode !== 'undefined' ? bNode.getNodeType(builder) : null; - - if (typeA === 'void' || typeB === 'void') { - return 'void'; - } else if (op === '%') { - return typeA; - } else if (op === '~' || op === '&' || op === '|' || op === '^' || op === '>>' || op === '<<') { - return builder.getIntegerType(typeA); - } else if (op === '!' || op === '==' || op === '&&' || op === '||' || op === '^^') { - return 'bool'; - } else if (op === '<' || op === '>' || op === '<=' || op === '>=') { - const typeLength = output ? builder.getTypeLength(output) : Math.max(builder.getTypeLength(typeA), builder.getTypeLength(typeB)); - - return typeLength > 1 ? `bvec${typeLength}` : 'bool'; - } else { - if (typeA === 'float' && builder.isMatrix(typeB)) { - return typeB; - } else if (builder.isMatrix(typeA) && builder.isVector(typeB)) { - // matrix x vector - - return builder.getVectorFromMatrix(typeA); - } else if (builder.isVector(typeA) && builder.isMatrix(typeB)) { - // vector x matrix - - return builder.getVectorFromMatrix(typeB); - } else if (builder.getTypeLength(typeB) > builder.getTypeLength(typeA)) { - // anytype x anytype: use the greater length vector - - return typeB; - } - - return typeA; - } - } - - generate(builder, output) { - const op = this.op; - - const aNode = this.aNode; - const bNode = this.bNode; - - const type = this.getNodeType(builder, output); - - let typeA = null; - let typeB = null; - - if (type !== 'void') { - typeA = aNode.getNodeType(builder); - typeB = typeof bNode !== 'undefined' ? bNode.getNodeType(builder) : null; - - if (op === '<' || op === '>' || op === '<=' || op === '>=' || op === '==') { - if (builder.isVector(typeA)) { - typeB = typeA; - } else if (typeA !== typeB) { - typeA = typeB = 'float'; - } - } else if (op === '>>' || op === '<<') { - typeA = type; - typeB = builder.changeComponentType(typeB, 'uint'); - } else if (builder.isMatrix(typeA) && builder.isVector(typeB)) { - // matrix x vector - - typeB = builder.getVectorFromMatrix(typeA); - } else if (builder.isVector(typeA) && builder.isMatrix(typeB)) { - // vector x matrix - - typeA = builder.getVectorFromMatrix(typeB); - } else { - // anytype x anytype - - typeA = typeB = type; - } - } else { - typeA = typeB = type; - } - - const a = aNode.build(builder, typeA); - const b = typeof bNode !== 'undefined' ? bNode.build(builder, typeB) : null; - - const outputLength = builder.getTypeLength(output); - const fnOpSnippet = builder.getFunctionOperator(op); - - if (output !== 'void') { - if (op === '<' && outputLength > 1) { - if (builder.useComparisonMethod) { - return builder.format(`${builder.getMethod('lessThan', output)}( ${a}, ${b} )`, type, output); - } else { - return builder.format(`( ${a} < ${b} )`, type, output); - } - } else if (op === '<=' && outputLength > 1) { - if (builder.useComparisonMethod) { - return builder.format(`${builder.getMethod('lessThanEqual', output)}( ${a}, ${b} )`, type, output); - } else { - return builder.format(`( ${a} <= ${b} )`, type, output); - } - } else if (op === '>' && outputLength > 1) { - if (builder.useComparisonMethod) { - return builder.format(`${builder.getMethod('greaterThan', output)}( ${a}, ${b} )`, type, output); - } else { - return builder.format(`( ${a} > ${b} )`, type, output); - } - } else if (op === '>=' && outputLength > 1) { - if (builder.useComparisonMethod) { - return builder.format(`${builder.getMethod('greaterThanEqual', output)}( ${a}, ${b} )`, type, output); - } else { - return builder.format(`( ${a} >= ${b} )`, type, output); - } - } else if (op === '!' || op === '~') { - return builder.format(`(${op}${a})`, typeA, output); - } else if (fnOpSnippet) { - return builder.format(`${fnOpSnippet}( ${a}, ${b} )`, type, output); - } else { - return builder.format(`( ${a} ${op} ${b} )`, type, output); - } - } else if (typeA !== 'void') { - if (fnOpSnippet) { - return builder.format(`${fnOpSnippet}( ${a}, ${b} )`, type, output); - } else { - return builder.format(`${a} ${op} ${b}`, type, output); - } - } - } - - serialize(data) { - super.serialize(data); - - data.op = this.op; - } - - deserialize(data) { - super.deserialize(data); - - this.op = data.op; - } -} - -const add = nodeProxy(OperatorNode, '+'); -const sub = nodeProxy(OperatorNode, '-'); -const mul = nodeProxy(OperatorNode, '*'); -const div = nodeProxy(OperatorNode, '/'); -const modInt = nodeProxy(OperatorNode, '%'); -const equal = nodeProxy(OperatorNode, '=='); -const notEqual = nodeProxy(OperatorNode, '!='); -const lessThan = nodeProxy(OperatorNode, '<'); -const greaterThan = nodeProxy(OperatorNode, '>'); -const lessThanEqual = nodeProxy(OperatorNode, '<='); -const greaterThanEqual = nodeProxy(OperatorNode, '>='); -const and = nodeProxy(OperatorNode, '&&'); -const or = nodeProxy(OperatorNode, '||'); -const not = nodeProxy(OperatorNode, '!'); -const xor = nodeProxy(OperatorNode, '^^'); -const bitAnd = nodeProxy(OperatorNode, '&'); -const bitNot = nodeProxy(OperatorNode, '~'); -const bitOr = nodeProxy(OperatorNode, '|'); -const bitXor = nodeProxy(OperatorNode, '^'); -const shiftLeft = nodeProxy(OperatorNode, '<<'); -const shiftRight = nodeProxy(OperatorNode, '>>'); - -addNodeElement('add', add); -addNodeElement('sub', sub); -addNodeElement('mul', mul); -addNodeElement('div', div); -addNodeElement('modInt', modInt); -addNodeElement('equal', equal); -addNodeElement('notEqual', notEqual); -addNodeElement('lessThan', lessThan); -addNodeElement('greaterThan', greaterThan); -addNodeElement('lessThanEqual', lessThanEqual); -addNodeElement('greaterThanEqual', greaterThanEqual); -addNodeElement('and', and); -addNodeElement('or', or); -addNodeElement('not', not); -addNodeElement('xor', xor); -addNodeElement('bitAnd', bitAnd); -addNodeElement('bitNot', bitNot); -addNodeElement('bitOr', bitOr); -addNodeElement('bitXor', bitXor); -addNodeElement('shiftLeft', shiftLeft); -addNodeElement('shiftRight', shiftRight); - -const remainder = (...params) => { - // @deprecated, r168 - - console.warn('TSL.OperatorNode: .remainder() has been renamed to .modInt().'); - return modInt(...params); -}; - -addNodeElement('remainder', remainder); - -addNodeClass('OperatorNode', OperatorNode); - -class MathNode extends TempNode { - constructor(method, aNode, bNode = null, cNode = null) { - super(); - - this.method = method; - - this.aNode = aNode; - this.bNode = bNode; - this.cNode = cNode; - } - - getInputType(builder) { - const aType = this.aNode.getNodeType(builder); - const bType = this.bNode ? this.bNode.getNodeType(builder) : null; - const cType = this.cNode ? this.cNode.getNodeType(builder) : null; - - const aLen = builder.isMatrix(aType) ? 0 : builder.getTypeLength(aType); - const bLen = builder.isMatrix(bType) ? 0 : builder.getTypeLength(bType); - const cLen = builder.isMatrix(cType) ? 0 : builder.getTypeLength(cType); - - if (aLen > bLen && aLen > cLen) { - return aType; - } else if (bLen > cLen) { - return bType; - } else if (cLen > aLen) { - return cType; - } - - return aType; - } - - getNodeType(builder) { - const method = this.method; - - if (method === MathNode.LENGTH || method === MathNode.DISTANCE || method === MathNode.DOT) { - return 'float'; - } else if (method === MathNode.CROSS) { - return 'vec3'; - } else if (method === MathNode.ALL) { - return 'bool'; - } else if (method === MathNode.EQUALS) { - return builder.changeComponentType(this.aNode.getNodeType(builder), 'bool'); - } else if (method === MathNode.MOD) { - return this.aNode.getNodeType(builder); - } else { - return this.getInputType(builder); - } - } - - generate(builder, output) { - const method = this.method; - - const type = this.getNodeType(builder); - const inputType = this.getInputType(builder); - - const a = this.aNode; - const b = this.bNode; - const c = this.cNode; - - const isWebGL = builder.renderer.isWebGLRenderer === true; - - if (method === MathNode.TRANSFORM_DIRECTION) { - // dir can be either a direction vector or a normal vector - // upper-left 3x3 of matrix is assumed to be orthogonal - - let tA = a; - let tB = b; - - if (builder.isMatrix(tA.getNodeType(builder))) { - tB = vec4(vec3(tB), 0.0); - } else { - tA = vec4(vec3(tA), 0.0); - } - - const mulNode = mul(tA, tB).xyz; - - return normalize(mulNode).build(builder, output); - } else if (method === MathNode.NEGATE) { - return builder.format('( - ' + a.build(builder, inputType) + ' )', type, output); - } else if (method === MathNode.ONE_MINUS) { - return sub(1.0, a).build(builder, output); - } else if (method === MathNode.RECIPROCAL) { - return div(1.0, a).build(builder, output); - } else if (method === MathNode.DIFFERENCE) { - return abs(sub(a, b)).build(builder, output); - } else { - const params = []; - - if (method === MathNode.CROSS || method === MathNode.MOD) { - params.push(a.build(builder, type), b.build(builder, type)); - } else if (isWebGL && method === MathNode.STEP) { - params.push(a.build(builder, builder.getTypeLength(a.getNodeType(builder)) === 1 ? 'float' : inputType), b.build(builder, inputType)); - } else if ((isWebGL && (method === MathNode.MIN || method === MathNode.MAX)) || method === MathNode.MOD) { - params.push(a.build(builder, inputType), b.build(builder, builder.getTypeLength(b.getNodeType(builder)) === 1 ? 'float' : inputType)); - } else if (method === MathNode.REFRACT) { - params.push(a.build(builder, inputType), b.build(builder, inputType), c.build(builder, 'float')); - } else if (method === MathNode.MIX) { - params.push(a.build(builder, inputType), b.build(builder, inputType), c.build(builder, builder.getTypeLength(c.getNodeType(builder)) === 1 ? 'float' : inputType)); - } else { - params.push(a.build(builder, inputType)); - if (b !== null) params.push(b.build(builder, inputType)); - if (c !== null) params.push(c.build(builder, inputType)); - } - - return builder.format(`${builder.getMethod(method, type)}( ${params.join(', ')} )`, type, output); - } - } - - serialize(data) { - super.serialize(data); - - data.method = this.method; - } - - deserialize(data) { - super.deserialize(data); - - this.method = data.method; - } -} - -// 1 input - -MathNode.ALL = 'all'; -MathNode.ANY = 'any'; -MathNode.EQUALS = 'equals'; - -MathNode.RADIANS = 'radians'; -MathNode.DEGREES = 'degrees'; -MathNode.EXP = 'exp'; -MathNode.EXP2 = 'exp2'; -MathNode.LOG = 'log'; -MathNode.LOG2 = 'log2'; -MathNode.SQRT = 'sqrt'; -MathNode.INVERSE_SQRT = 'inversesqrt'; -MathNode.FLOOR = 'floor'; -MathNode.CEIL = 'ceil'; -MathNode.NORMALIZE = 'normalize'; -MathNode.FRACT = 'fract'; -MathNode.SIN = 'sin'; -MathNode.COS = 'cos'; -MathNode.TAN = 'tan'; -MathNode.ASIN = 'asin'; -MathNode.ACOS = 'acos'; -MathNode.ATAN = 'atan'; -MathNode.ABS = 'abs'; -MathNode.SIGN = 'sign'; -MathNode.LENGTH = 'length'; -MathNode.NEGATE = 'negate'; -MathNode.ONE_MINUS = 'oneMinus'; -MathNode.DFDX = 'dFdx'; -MathNode.DFDY = 'dFdy'; -MathNode.ROUND = 'round'; -MathNode.RECIPROCAL = 'reciprocal'; -MathNode.TRUNC = 'trunc'; -MathNode.FWIDTH = 'fwidth'; -MathNode.BITCAST = 'bitcast'; -MathNode.TRANSPOSE = 'transpose'; - -// 2 inputs - -MathNode.ATAN2 = 'atan2'; -MathNode.MIN = 'min'; -MathNode.MAX = 'max'; -MathNode.MOD = 'mod'; -MathNode.STEP = 'step'; -MathNode.REFLECT = 'reflect'; -MathNode.DISTANCE = 'distance'; -MathNode.DIFFERENCE = 'difference'; -MathNode.DOT = 'dot'; -MathNode.CROSS = 'cross'; -MathNode.POW = 'pow'; -MathNode.TRANSFORM_DIRECTION = 'transformDirection'; - -// 3 inputs - -MathNode.MIX = 'mix'; -MathNode.CLAMP = 'clamp'; -MathNode.REFRACT = 'refract'; -MathNode.SMOOTHSTEP = 'smoothstep'; -MathNode.FACEFORWARD = 'faceforward'; - -const EPSILON = float(1e-6); -const INFINITY = float(1e6); -const PI = float(Math.PI); -const PI2 = float(Math.PI * 2); - -const all = nodeProxy(MathNode, MathNode.ALL); -const any = nodeProxy(MathNode, MathNode.ANY); -const equals = nodeProxy(MathNode, MathNode.EQUALS); - -const radians = nodeProxy(MathNode, MathNode.RADIANS); -const degrees = nodeProxy(MathNode, MathNode.DEGREES); -const exp = nodeProxy(MathNode, MathNode.EXP); -const exp2 = nodeProxy(MathNode, MathNode.EXP2); -const log = nodeProxy(MathNode, MathNode.LOG); -const log2 = nodeProxy(MathNode, MathNode.LOG2); -const sqrt = nodeProxy(MathNode, MathNode.SQRT); -const inverseSqrt = nodeProxy(MathNode, MathNode.INVERSE_SQRT); -const floor = nodeProxy(MathNode, MathNode.FLOOR); -const ceil = nodeProxy(MathNode, MathNode.CEIL); -const normalize = nodeProxy(MathNode, MathNode.NORMALIZE); -const fract = nodeProxy(MathNode, MathNode.FRACT); -const sin = nodeProxy(MathNode, MathNode.SIN); -const cos = nodeProxy(MathNode, MathNode.COS); -const tan = nodeProxy(MathNode, MathNode.TAN); -const asin = nodeProxy(MathNode, MathNode.ASIN); -const acos = nodeProxy(MathNode, MathNode.ACOS); -const atan = nodeProxy(MathNode, MathNode.ATAN); -const abs = nodeProxy(MathNode, MathNode.ABS); -const sign = nodeProxy(MathNode, MathNode.SIGN); -const length = nodeProxy(MathNode, MathNode.LENGTH); -const negate = nodeProxy(MathNode, MathNode.NEGATE); -const oneMinus = nodeProxy(MathNode, MathNode.ONE_MINUS); -const dFdx = nodeProxy(MathNode, MathNode.DFDX); -const dFdy = nodeProxy(MathNode, MathNode.DFDY); -const round = nodeProxy(MathNode, MathNode.ROUND); -const reciprocal = nodeProxy(MathNode, MathNode.RECIPROCAL); -const trunc = nodeProxy(MathNode, MathNode.TRUNC); -const fwidth = nodeProxy(MathNode, MathNode.FWIDTH); -const bitcast = nodeProxy(MathNode, MathNode.BITCAST); -const transpose = nodeProxy(MathNode, MathNode.TRANSPOSE); - -const atan2 = nodeProxy(MathNode, MathNode.ATAN2); -const min$1 = nodeProxy(MathNode, MathNode.MIN); -const max$1 = nodeProxy(MathNode, MathNode.MAX); -const mod = nodeProxy(MathNode, MathNode.MOD); -const step = nodeProxy(MathNode, MathNode.STEP); -const reflect = nodeProxy(MathNode, MathNode.REFLECT); -const distance = nodeProxy(MathNode, MathNode.DISTANCE); -const difference = nodeProxy(MathNode, MathNode.DIFFERENCE); -const dot = nodeProxy(MathNode, MathNode.DOT); -const cross = nodeProxy(MathNode, MathNode.CROSS); -const pow = nodeProxy(MathNode, MathNode.POW); -const pow2 = nodeProxy(MathNode, MathNode.POW, 2); -const pow3 = nodeProxy(MathNode, MathNode.POW, 3); -const pow4 = nodeProxy(MathNode, MathNode.POW, 4); -const transformDirection = nodeProxy(MathNode, MathNode.TRANSFORM_DIRECTION); - -const cbrt = (a) => mul(sign(a), pow(abs(a), 1.0 / 3.0)); -const lengthSq = (a) => dot(a, a); -const mix = nodeProxy(MathNode, MathNode.MIX); -const clamp = (value, low = 0, high = 1) => nodeObject(new MathNode(MathNode.CLAMP, nodeObject(value), nodeObject(low), nodeObject(high))); -const saturate = (value) => clamp(value); -const refract = nodeProxy(MathNode, MathNode.REFRACT); -const smoothstep = nodeProxy(MathNode, MathNode.SMOOTHSTEP); -const faceForward = nodeProxy(MathNode, MathNode.FACEFORWARD); - -const rand = Fn(([uv]) => { - const a = 12.9898, - b = 78.233, - c = 43758.5453; - const dt = dot(uv.xy, vec2(a, b)), - sn = mod(dt, PI); - - return fract(sin(sn).mul(c)); -}); - -const mixElement = (t, e1, e2) => mix(e1, e2, t); -const smoothstepElement = (x, low, high) => smoothstep(low, high, x); - -addNodeElement('all', all); -addNodeElement('any', any); -addNodeElement('equals', equals); - -addNodeElement('radians', radians); -addNodeElement('degrees', degrees); -addNodeElement('exp', exp); -addNodeElement('exp2', exp2); -addNodeElement('log', log); -addNodeElement('log2', log2); -addNodeElement('sqrt', sqrt); -addNodeElement('inverseSqrt', inverseSqrt); -addNodeElement('floor', floor); -addNodeElement('ceil', ceil); -addNodeElement('normalize', normalize); -addNodeElement('fract', fract); -addNodeElement('sin', sin); -addNodeElement('cos', cos); -addNodeElement('tan', tan); -addNodeElement('asin', asin); -addNodeElement('acos', acos); -addNodeElement('atan', atan); -addNodeElement('abs', abs); -addNodeElement('sign', sign); -addNodeElement('length', length); -addNodeElement('lengthSq', lengthSq); -addNodeElement('negate', negate); -addNodeElement('oneMinus', oneMinus); -addNodeElement('dFdx', dFdx); -addNodeElement('dFdy', dFdy); -addNodeElement('round', round); -addNodeElement('reciprocal', reciprocal); -addNodeElement('trunc', trunc); -addNodeElement('fwidth', fwidth); -addNodeElement('atan2', atan2); -addNodeElement('min', min$1); -addNodeElement('max', max$1); -addNodeElement('mod', mod); -addNodeElement('step', step); -addNodeElement('reflect', reflect); -addNodeElement('distance', distance); -addNodeElement('dot', dot); -addNodeElement('cross', cross); -addNodeElement('pow', pow); -addNodeElement('pow2', pow2); -addNodeElement('pow3', pow3); -addNodeElement('pow4', pow4); -addNodeElement('transformDirection', transformDirection); -addNodeElement('mix', mixElement); -addNodeElement('clamp', clamp); -addNodeElement('refract', refract); -addNodeElement('smoothstep', smoothstepElement); -addNodeElement('faceForward', faceForward); -addNodeElement('difference', difference); -addNodeElement('saturate', saturate); -addNodeElement('cbrt', cbrt); -addNodeElement('transpose', transpose); -addNodeElement('rand', rand); - -addNodeClass('MathNode', MathNode); - -const sRGBToLinearShader = Fn((inputs) => { - const { value } = inputs; - const { rgb } = value; - - const a = rgb.mul(0.9478672986).add(0.0521327014).pow(2.4); - const b = rgb.mul(0.0773993808); - const factor = rgb.lessThanEqual(0.04045); - - const rgbResult = mix(a, b, factor); - - return vec4(rgbResult, value.a); -}); - -const LinearTosRGBShader = Fn((inputs) => { - const { value } = inputs; - const { rgb } = value; - - const a = rgb.pow(0.41666).mul(1.055).sub(0.055); - const b = rgb.mul(12.92); - const factor = rgb.lessThanEqual(0.0031308); - - const rgbResult = mix(a, b, factor); - - return vec4(rgbResult, value.a); -}); - -const getColorSpaceMethod = (colorSpace) => { - let method = null; - - if (colorSpace === LinearSRGBColorSpace) { - method = 'Linear'; - } else if (colorSpace === SRGBColorSpace) { - method = 'sRGB'; - } - - return method; -}; - -const getMethod = (source, target) => { - return getColorSpaceMethod(source) + 'To' + getColorSpaceMethod(target); -}; - -class ColorSpaceNode extends TempNode { - constructor(method, node) { - super('vec4'); - - this.method = method; - this.node = node; - } - - setup() { - const { method, node } = this; - - if (method === ColorSpaceNode.LINEAR_TO_LINEAR) return node; - - return Methods[method]({ value: node }); - } -} - -ColorSpaceNode.LINEAR_TO_LINEAR = 'LinearToLinear'; -ColorSpaceNode.LINEAR_TO_sRGB = 'LinearTosRGB'; -ColorSpaceNode.sRGB_TO_LINEAR = 'sRGBToLinear'; - -const Methods = { - [ColorSpaceNode.LINEAR_TO_sRGB]: LinearTosRGBShader, - [ColorSpaceNode.sRGB_TO_LINEAR]: sRGBToLinearShader, -}; - -const linearToColorSpace = (node, colorSpace) => nodeObject(new ColorSpaceNode(getMethod(LinearSRGBColorSpace, colorSpace), nodeObject(node))); -const colorSpaceToLinear = (node, colorSpace) => nodeObject(new ColorSpaceNode(getMethod(colorSpace, LinearSRGBColorSpace), nodeObject(node))); - -const linearTosRGB = nodeProxy(ColorSpaceNode, ColorSpaceNode.LINEAR_TO_sRGB); -const sRGBToLinear = nodeProxy(ColorSpaceNode, ColorSpaceNode.sRGB_TO_LINEAR); - -addNodeElement('linearTosRGB', linearTosRGB); -addNodeElement('sRGBToLinear', sRGBToLinear); -addNodeElement('linearToColorSpace', linearToColorSpace); -addNodeElement('colorSpaceToLinear', colorSpaceToLinear); - -addNodeClass('ColorSpaceNode', ColorSpaceNode); - -class ExpressionNode extends Node { - constructor(snippet = '', nodeType = 'void') { - super(nodeType); - - this.snippet = snippet; - } - - generate(builder, output) { - const type = this.getNodeType(builder); - const snippet = this.snippet; - - if (type === 'void') { - builder.addLineFlowCode(snippet); - } else { - return builder.format(`( ${snippet} )`, type, output); - } - } -} - -const expression = nodeProxy(ExpressionNode); - -addNodeClass('ExpressionNode', ExpressionNode); - -class MaxMipLevelNode extends UniformNode { - constructor(textureNode) { - super(0); - - this._textureNode = textureNode; - - this.updateType = NodeUpdateType.FRAME; - } - - get textureNode() { - return this._textureNode; - } - - get texture() { - return this._textureNode.value; - } - - update() { - const texture = this.texture; - const images = texture.images; - const image = images && images.length > 0 ? (images[0] && images[0].image) || images[0] : texture.image; - - if (image && image.width !== undefined) { - const { width, height } = image; - - this.value = Math.log2(Math.max(width, height)); - } - } -} - -const maxMipLevel = nodeProxy(MaxMipLevelNode); - -addNodeClass('MaxMipLevelNode', MaxMipLevelNode); - -class TextureNode extends UniformNode { - constructor(value, uvNode = null, levelNode = null, biasNode = null) { - super(value); - - this.isTextureNode = true; - - this.uvNode = uvNode; - this.levelNode = levelNode; - this.biasNode = biasNode; - this.compareNode = null; - this.depthNode = null; - this.gradNode = null; - - this.sampler = true; - this.updateMatrix = false; - this.updateType = NodeUpdateType.NONE; - - this.referenceNode = null; - - this._value = value; - this._matrixUniform = null; - - this.setUpdateMatrix(uvNode === null); - } - - set value(value) { - if (this.referenceNode) { - this.referenceNode.value = value; - } else { - this._value = value; - } - } - - get value() { - return this.referenceNode ? this.referenceNode.value : this._value; - } - - getUniformHash(/*builder*/) { - return this.value.uuid; - } - - getNodeType(/*builder*/) { - if (this.value.isDepthTexture === true) return 'float'; - - if (this.value.type === UnsignedIntType) { - return 'uvec4'; - } else if (this.value.type === IntType) { - return 'ivec4'; - } - - return 'vec4'; - } - - getInputType(/*builder*/) { - return 'texture'; - } - - getDefaultUV() { - return uv(this.value.channel); - } - - updateReference(/*state*/) { - return this.value; - } - - getTransformedUV(uvNode) { - if (this._matrixUniform === null) this._matrixUniform = uniform(this.value.matrix); - - return this._matrixUniform.mul(vec3(uvNode, 1)).xy; - } - - setUpdateMatrix(value) { - this.updateMatrix = value; - this.updateType = value ? NodeUpdateType.FRAME : NodeUpdateType.NONE; - - return this; - } - - setupUV(builder, uvNode) { - const texture = this.value; - - if (builder.isFlipY() && (texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true || texture.isDepthTexture === true)) { - uvNode = uvNode.setY(uvNode.y.oneMinus()); - } - - return uvNode; - } - - setup(builder) { - const properties = builder.getNodeProperties(this); - properties.referenceNode = this.referenceNode; - - // - - let uvNode = this.uvNode; - - if ((uvNode === null || builder.context.forceUVContext === true) && builder.context.getUV) { - uvNode = builder.context.getUV(this); - } - - if (!uvNode) uvNode = this.getDefaultUV(); - - if (this.updateMatrix === true) { - uvNode = this.getTransformedUV(uvNode); - } - - uvNode = this.setupUV(builder, uvNode); - - // - - let levelNode = this.levelNode; - - if (levelNode === null && builder.context.getTextureLevel) { - levelNode = builder.context.getTextureLevel(this); - } - - // - - properties.uvNode = uvNode; - properties.levelNode = levelNode; - properties.biasNode = this.biasNode; - properties.compareNode = this.compareNode; - properties.gradNode = this.gradNode; - properties.depthNode = this.depthNode; - } - - generateUV(builder, uvNode) { - return uvNode.build(builder, this.sampler === true ? 'vec2' : 'ivec2'); - } - - generateSnippet(builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet) { - const texture = this.value; - - let snippet; - - if (levelSnippet) { - snippet = builder.generateTextureLevel(texture, textureProperty, uvSnippet, levelSnippet, depthSnippet); - } else if (biasSnippet) { - snippet = builder.generateTextureBias(texture, textureProperty, uvSnippet, biasSnippet, depthSnippet); - } else if (gradSnippet) { - snippet = builder.generateTextureGrad(texture, textureProperty, uvSnippet, gradSnippet, depthSnippet); - } else if (compareSnippet) { - snippet = builder.generateTextureCompare(texture, textureProperty, uvSnippet, compareSnippet, depthSnippet); - } else if (this.sampler === false) { - snippet = builder.generateTextureLoad(texture, textureProperty, uvSnippet, depthSnippet); - } else { - snippet = builder.generateTexture(texture, textureProperty, uvSnippet, depthSnippet); - } - - return snippet; - } - - generate(builder, output) { - const properties = builder.getNodeProperties(this); - - const texture = this.value; - - if (!texture || texture.isTexture !== true) { - throw new Error('TextureNode: Need a three.js texture.'); - } - - const textureProperty = super.generate(builder, 'property'); - - if (output === 'sampler') { - return textureProperty + '_sampler'; - } else if (builder.isReference(output)) { - return textureProperty; - } else { - const nodeData = builder.getDataFromNode(this); - - let propertyName = nodeData.propertyName; - - if (propertyName === undefined) { - const { uvNode, levelNode, biasNode, compareNode, depthNode, gradNode } = properties; - - const uvSnippet = this.generateUV(builder, uvNode); - const levelSnippet = levelNode ? levelNode.build(builder, 'float') : null; - const biasSnippet = biasNode ? biasNode.build(builder, 'float') : null; - const depthSnippet = depthNode ? depthNode.build(builder, 'int') : null; - const compareSnippet = compareNode ? compareNode.build(builder, 'float') : null; - const gradSnippet = gradNode ? [gradNode[0].build(builder, 'vec2'), gradNode[1].build(builder, 'vec2')] : null; - - const nodeVar = builder.getVarFromNode(this); - - propertyName = builder.getPropertyName(nodeVar); - - const snippet = this.generateSnippet(builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet); - - builder.addLineFlowCode(`${propertyName} = ${snippet}`); - - nodeData.snippet = snippet; - nodeData.propertyName = propertyName; - } - - let snippet = propertyName; - const nodeType = this.getNodeType(builder); - - if (builder.needsColorSpaceToLinear(texture)) { - snippet = colorSpaceToLinear(expression(snippet, nodeType), texture.colorSpace).setup(builder).build(builder, nodeType); - } - - return builder.format(snippet, nodeType, output); - } - } - - setSampler(value) { - this.sampler = value; - - return this; - } - - getSampler() { - return this.sampler; - } - - // @TODO: Move to TSL - - uv(uvNode) { - const textureNode = this.clone(); - textureNode.uvNode = nodeObject(uvNode); - textureNode.referenceNode = this.getSelf(); - - return nodeObject(textureNode); - } - - blur(amountNode) { - const textureNode = this.clone(); - textureNode.biasNode = nodeObject(amountNode).mul(maxMipLevel(textureNode)); - textureNode.referenceNode = this.getSelf(); - - return nodeObject(textureNode); - } - - level(levelNode) { - const textureNode = this.clone(); - textureNode.levelNode = nodeObject(levelNode); - textureNode.referenceNode = this.getSelf(); - - return nodeObject(textureNode); - } - - size(levelNode) { - return textureSize(this, levelNode); - } - - bias(biasNode) { - const textureNode = this.clone(); - textureNode.biasNode = nodeObject(biasNode); - textureNode.referenceNode = this.getSelf(); - - return nodeObject(textureNode); - } - - compare(compareNode) { - const textureNode = this.clone(); - textureNode.compareNode = nodeObject(compareNode); - textureNode.referenceNode = this.getSelf(); - - return nodeObject(textureNode); - } - - grad(gradNodeX, gradNodeY) { - const textureNode = this.clone(); - textureNode.gradNode = [nodeObject(gradNodeX), nodeObject(gradNodeY)]; - textureNode.referenceNode = this.getSelf(); - - return nodeObject(textureNode); - } - - depth(depthNode) { - const textureNode = this.clone(); - textureNode.depthNode = nodeObject(depthNode); - textureNode.referenceNode = this.getSelf(); - - return nodeObject(textureNode); - } - - // -- - - serialize(data) { - super.serialize(data); - - data.value = this.value.toJSON(data.meta).uuid; - data.sampler = this.sampler; - data.updateMatrix = this.updateMatrix; - data.updateType = this.updateType; - } - - deserialize(data) { - super.deserialize(data); - - this.value = data.meta.textures[data.value]; - this.sampler = data.sampler; - this.updateMatrix = data.updateMatrix; - this.updateType = data.updateType; - } - - update() { - const texture = this.value; - const matrixUniform = this._matrixUniform; - - if (matrixUniform !== null) matrixUniform.value = texture.matrix; - - if (texture.matrixAutoUpdate === true) { - texture.updateMatrix(); - } - } - - clone() { - const newNode = new this.constructor(this.value, this.uvNode, this.levelNode, this.biasNode); - newNode.sampler = this.sampler; - - return newNode; - } -} - -const texture = nodeProxy(TextureNode); -const textureLoad = (...params) => texture(...params).setSampler(false); - -//export const textureLevel = ( value, uv, level ) => texture( value, uv ).level( level ); - -const sampler = (aTexture) => (aTexture.isNode === true ? aTexture : texture(aTexture)).convert('sampler'); - -addNodeElement('texture', texture); -//addNodeElement( 'textureLevel', textureLevel ); - -addNodeClass('TextureNode', TextureNode); - -const cameraGroup = /*#__PURE__*/ sharedUniformGroup('camera').onRenderUpdate(() => { - cameraGroup.needsUpdate = true; -}); - -const cameraNear = /*#__PURE__*/ uniform('float') - .label('cameraNear') - .setGroup(cameraGroup) - .onRenderUpdate(({ camera }) => camera.near); -const cameraFar = /*#__PURE__*/ uniform('float') - .label('cameraFar') - .setGroup(cameraGroup) - .onRenderUpdate(({ camera }) => camera.far); -const cameraLogDepth = /*#__PURE__*/ uniform('float') - .label('cameraLogDepth') - .setGroup(cameraGroup) - .onRenderUpdate(({ camera }) => 2.0 / (Math.log(camera.far + 1.0) / Math.LN2)); -const cameraProjectionMatrix = /*#__PURE__*/ uniform('mat4') - .label('cameraProjectionMatrix') - .setGroup(cameraGroup) - .onRenderUpdate(({ camera }) => camera.projectionMatrix); -const cameraProjectionMatrixInverse = /*#__PURE__*/ uniform('mat4') - .label('cameraProjectionMatrixInverse') - .setGroup(cameraGroup) - .onRenderUpdate(({ camera }) => camera.projectionMatrixInverse); -const cameraViewMatrix = /*#__PURE__*/ uniform('mat4') - .label('cameraViewMatrix') - .setGroup(cameraGroup) - .onRenderUpdate(({ camera }) => camera.matrixWorldInverse); -const cameraWorldMatrix = /*#__PURE__*/ uniform('mat4') - .label('cameraWorldMatrix') - .setGroup(cameraGroup) - .onRenderUpdate(({ camera }) => camera.matrixWorld); -const cameraNormalMatrix = /*#__PURE__*/ uniform('mat3') - .label('cameraNormalMatrix') - .setGroup(cameraGroup) - .onRenderUpdate(({ camera }) => camera.normalMatrix); -const cameraPosition = /*#__PURE__*/ uniform(new Vector3()) - .label('cameraPosition') - .setGroup(cameraGroup) - .onRenderUpdate(({ camera }, self) => self.value.setFromMatrixPosition(camera.matrixWorld)); - -class Object3DNode extends Node { - constructor(scope = Object3DNode.VIEW_MATRIX, object3d = null) { - super(); - - this.scope = scope; - this.object3d = object3d; - - this.updateType = NodeUpdateType.OBJECT; - - this._uniformNode = new UniformNode(null); - } - - getNodeType() { - const scope = this.scope; - - if (scope === Object3DNode.WORLD_MATRIX || scope === Object3DNode.VIEW_MATRIX) { - return 'mat4'; - } else if (scope === Object3DNode.NORMAL_MATRIX) { - return 'mat3'; - } else if (scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE) { - return 'vec3'; - } - } - - update(frame) { - const object = this.object3d; - const uniformNode = this._uniformNode; - const scope = this.scope; - - if (scope === Object3DNode.VIEW_MATRIX) { - uniformNode.value = object.modelViewMatrix; - } else if (scope === Object3DNode.NORMAL_MATRIX) { - uniformNode.value = object.normalMatrix; - } else if (scope === Object3DNode.WORLD_MATRIX) { - uniformNode.value = object.matrixWorld; - } else if (scope === Object3DNode.POSITION) { - uniformNode.value = uniformNode.value || new Vector3(); - - uniformNode.value.setFromMatrixPosition(object.matrixWorld); - } else if (scope === Object3DNode.SCALE) { - uniformNode.value = uniformNode.value || new Vector3(); - - uniformNode.value.setFromMatrixScale(object.matrixWorld); - } else if (scope === Object3DNode.DIRECTION) { - uniformNode.value = uniformNode.value || new Vector3(); - - object.getWorldDirection(uniformNode.value); - } else if (scope === Object3DNode.VIEW_POSITION) { - const camera = frame.camera; - - uniformNode.value = uniformNode.value || new Vector3(); - uniformNode.value.setFromMatrixPosition(object.matrixWorld); - - uniformNode.value.applyMatrix4(camera.matrixWorldInverse); - } - } - - generate(builder) { - const scope = this.scope; - - if (scope === Object3DNode.WORLD_MATRIX || scope === Object3DNode.VIEW_MATRIX) { - this._uniformNode.nodeType = 'mat4'; - } else if (scope === Object3DNode.NORMAL_MATRIX) { - this._uniformNode.nodeType = 'mat3'; - } else if (scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE) { - this._uniformNode.nodeType = 'vec3'; - } - - return this._uniformNode.build(builder); - } - - serialize(data) { - super.serialize(data); - - data.scope = this.scope; - } - - deserialize(data) { - super.deserialize(data); - - this.scope = data.scope; - } -} - -Object3DNode.VIEW_MATRIX = 'viewMatrix'; -Object3DNode.NORMAL_MATRIX = 'normalMatrix'; -Object3DNode.WORLD_MATRIX = 'worldMatrix'; -Object3DNode.POSITION = 'position'; -Object3DNode.SCALE = 'scale'; -Object3DNode.VIEW_POSITION = 'viewPosition'; -Object3DNode.DIRECTION = 'direction'; - -const objectDirection = nodeProxy(Object3DNode, Object3DNode.DIRECTION); -const objectViewMatrix = nodeProxy(Object3DNode, Object3DNode.VIEW_MATRIX); -const objectNormalMatrix = nodeProxy(Object3DNode, Object3DNode.NORMAL_MATRIX); -const objectWorldMatrix = nodeProxy(Object3DNode, Object3DNode.WORLD_MATRIX); -const objectPosition = nodeProxy(Object3DNode, Object3DNode.POSITION); -const objectScale = nodeProxy(Object3DNode, Object3DNode.SCALE); -const objectViewPosition = nodeProxy(Object3DNode, Object3DNode.VIEW_POSITION); - -addNodeClass('Object3DNode', Object3DNode); - -class ModelNode extends Object3DNode { - constructor(scope = ModelNode.VIEW_MATRIX) { - super(scope); - } - - update(frame) { - this.object3d = frame.object; - - super.update(frame); - } -} - -const modelDirection = nodeImmutable(ModelNode, ModelNode.DIRECTION); -const modelViewMatrix = nodeImmutable(ModelNode, ModelNode.VIEW_MATRIX).label('modelViewMatrix').temp('ModelViewMatrix'); -const modelNormalMatrix = nodeImmutable(ModelNode, ModelNode.NORMAL_MATRIX); -const modelWorldMatrix = nodeImmutable(ModelNode, ModelNode.WORLD_MATRIX); -const modelPosition = nodeImmutable(ModelNode, ModelNode.POSITION); -const modelScale = nodeImmutable(ModelNode, ModelNode.SCALE); -const modelViewPosition = nodeImmutable(ModelNode, ModelNode.VIEW_POSITION); -const modelWorldMatrixInverse = uniform(new Matrix4()).onObjectUpdate(({ object }, self) => self.value.copy(object.matrixWorld).invert()); - -addNodeClass('ModelNode', ModelNode); - -const positionGeometry = /*#__PURE__*/ attribute('position', 'vec3'); -const positionLocal = /*#__PURE__*/ positionGeometry.varying('positionLocal'); -const positionPrevious = /*#__PURE__*/ positionGeometry.varying('positionPrevious'); -const positionWorld = /*#__PURE__*/ varying(modelWorldMatrix.mul(positionLocal).xyz, 'v_positionWorld'); -const positionWorldDirection = /*#__PURE__*/ varying(positionLocal.transformDirection(modelWorldMatrix), 'v_positionWorldDirection').normalize().toVar('positionWorldDirection'); -const positionView = /*#__PURE__*/ varying(modelViewMatrix.mul(positionLocal).xyz, 'v_positionView'); -const positionViewDirection = /*#__PURE__*/ varying(positionView.negate(), 'v_positionViewDirection').normalize().toVar('positionViewDirection'); - -class FrontFacingNode extends Node { - constructor() { - super('bool'); - - this.isFrontFacingNode = true; - } - - generate(builder) { - const { renderer, material } = builder; - - if (renderer.coordinateSystem === WebGLCoordinateSystem) { - if (material.side === BackSide) { - return 'false'; - } - } - - return builder.getFrontFacing(); - } -} - -const frontFacing = nodeImmutable(FrontFacingNode); -const faceDirection = float(frontFacing).mul(2.0).sub(1.0); - -addNodeClass('FrontFacingNode', FrontFacingNode); - -const normalGeometry = /*#__PURE__*/ attribute('normal', 'vec3'); - -const normalLocal = /*#__PURE__*/ Fn((builder) => { - if (builder.geometry.hasAttribute('normal') === false) { - console.warn('TSL.NormalNode: Vertex attribute "normal" not found on geometry.'); - - return vec3(0, 1, 0); - } - - return normalGeometry; -}, 'vec3') - .once()() - .toVar('normalLocal'); - -const normalFlat = /*#__PURE__*/ positionView.dFdx().cross(positionView.dFdy()).normalize().toVar('normalFlat'); - -let normalViewVarying = null; - -const normalView = /*#__PURE__*/ Fn((builder) => { - let node; - - if (builder.material.flatShading === true) { - node = normalFlat; - } else { - node = normalViewVarying || (normalViewVarying = varying(modelNormalMatrix.mul(normalLocal), 'v_normalView').normalize()); - } - - return node; -}, 'vec3') - .once()() - .toVar('normalView'); - -const normalWorld = /*#__PURE__*/ varying(normalView.transformDirection(cameraViewMatrix), 'v_normalWorld').normalize().toVar('normalWorld'); - -const transformedNormalView = /*#__PURE__*/ Fn((builder) => { - return builder.context.setupNormal(); -}, 'vec3') - .once()() - .mul(faceDirection) - .toVar('transformedNormalView'); - -const transformedNormalWorld = /*#__PURE__*/ transformedNormalView.transformDirection(cameraViewMatrix).normalize().toVar('transformedNormalWorld'); - -const transformedClearcoatNormalView = /*#__PURE__*/ Fn((builder) => { - return builder.context.setupClearcoatNormal(); -}, 'vec3') - .once()() - .mul(faceDirection) - .toVar('transformedClearcoatNormalView'); - -const materialRefractionRatio = /*@__PURE__*/ uniform(0) - .onReference(({ material }) => material) - .onRenderUpdate(({ material }) => material.refractionRatio); - -const reflectView = /*#__PURE__*/ positionViewDirection.negate().reflect(transformedNormalView); -const refractView = /*#__PURE__*/ positionViewDirection.negate().refract(transformedNormalView, materialRefractionRatio); - -const reflectVector = /*#__PURE__*/ reflectView.transformDirection(cameraViewMatrix).toVar('reflectVector'); -const refractVector = /*#__PURE__*/ refractView.transformDirection(cameraViewMatrix).toVar('reflectVector'); - -class CubeTextureNode extends TextureNode { - constructor(value, uvNode = null, levelNode = null, biasNode = null) { - super(value, uvNode, levelNode, biasNode); - - this.isCubeTextureNode = true; - } - - getInputType(/*builder*/) { - return 'cubeTexture'; - } - - getDefaultUV() { - const texture = this.value; - - if (texture.mapping === CubeReflectionMapping) { - return reflectVector; - } else if (texture.mapping === CubeRefractionMapping) { - return refractVector; - } else { - console.error('THREE.CubeTextureNode: Mapping "%s" not supported.', texture.mapping); - - return vec3(0, 0, 0); - } - } - - setUpdateMatrix(/*updateMatrix*/) {} // Ignore .updateMatrix for CubeTextureNode - - setupUV(builder, uvNode) { - const texture = this.value; - - if (builder.renderer.coordinateSystem === WebGPUCoordinateSystem || !texture.isRenderTargetTexture) { - return vec3(uvNode.x.negate(), uvNode.yz); - } else { - return uvNode; - } - } - - generateUV(builder, cubeUV) { - return cubeUV.build(builder, 'vec3'); - } -} - -const cubeTexture = nodeProxy(CubeTextureNode); - -addNodeElement('cubeTexture', cubeTexture); - -addNodeClass('CubeTextureNode', CubeTextureNode); - -class BufferNode extends UniformNode { - constructor(value, bufferType, bufferCount = 0) { - super(value, bufferType); - - this.isBufferNode = true; - - this.bufferType = bufferType; - this.bufferCount = bufferCount; - } - - getElementType(builder) { - return this.getNodeType(builder); - } - - getInputType(/*builder*/) { - return 'buffer'; - } -} - -const buffer = (value, type, count) => nodeObject(new BufferNode(value, type, count)); - -addNodeClass('BufferNode', BufferNode); - -class UniformArrayElementNode extends ArrayElementNode { - constructor(arrayBuffer, indexNode) { - super(arrayBuffer, indexNode); - - this.isArrayBufferElementNode = true; - } - - getNodeType(builder) { - return this.node.getElementType(builder); - } - - generate(builder) { - const snippet = super.generate(builder); - const type = this.getNodeType(); - - return builder.format(snippet, 'vec4', type); - } -} - -class UniformArrayNode extends BufferNode { - constructor(value, elementType = null) { - super(null, 'vec4'); - - this.array = value; - this.elementType = elementType; - - this._elementType = null; - this._elementLength = 0; - - this.updateType = NodeUpdateType.RENDER; - - this.isArrayBufferNode = true; - } - - getElementType() { - return this.elementType || this._elementType; - } - - getElementLength() { - return this._elementLength; - } - - update(/*frame*/) { - const { array, value } = this; - - const elementLength = this.getElementLength(); - const elementType = this.getElementType(); - - if (elementLength === 1) { - for (let i = 0; i < array.length; i++) { - const index = i * 4; - - value[index] = array[i]; - } - } else if (elementType === 'color') { - for (let i = 0; i < array.length; i++) { - const index = i * 4; - const vector = array[i]; - - value[index] = vector.r; - value[index + 1] = vector.g; - value[index + 2] = vector.b || 0; - //value[ index + 3 ] = vector.a || 0; - } - } else { - for (let i = 0; i < array.length; i++) { - const index = i * 4; - const vector = array[i]; - - value[index] = vector.x; - value[index + 1] = vector.y; - value[index + 2] = vector.z || 0; - value[index + 3] = vector.w || 0; - } - } - } - - setup(builder) { - const length = this.array.length; - - this._elementType = this.elementType === null ? getValueType(this.array[0]) : this.elementType; - this._elementLength = builder.getTypeLength(this._elementType); - - let arrayType = Float32Array; - - if (this._elementType.charAt(0) === 'i') arrayType = Int32Array; - else if (this._elementType.charAt(0) === 'u') arrayType = Uint32Array; - - this.value = new arrayType(length * 4); - this.bufferCount = length; - this.bufferType = builder.changeComponentType('vec4', builder.getComponentType(this._elementType)); - - return super.setup(builder); - } - - element(indexNode) { - return nodeObject(new UniformArrayElementNode(this, nodeObject(indexNode))); - } -} - -const uniformArray = (values, nodeType) => nodeObject(new UniformArrayNode(values, nodeType)); - -addNodeClass('UniformArrayNode', UniformArrayNode); - -class ReferenceElementNode extends ArrayElementNode { - constructor(referenceNode, indexNode) { - super(referenceNode, indexNode); - - this.referenceNode = referenceNode; - - this.isReferenceElementNode = true; - } - - getNodeType() { - return this.referenceNode.uniformType; - } - - generate(builder) { - const snippet = super.generate(builder); - const arrayType = this.referenceNode.getNodeType(); - const elementType = this.getNodeType(); - - return builder.format(snippet, arrayType, elementType); - } -} - -class ReferenceNode extends Node { - constructor(property, uniformType, object = null, count = null) { - super(); - - this.property = property; - this.uniformType = uniformType; - this.object = object; - this.count = count; - - this.properties = property.split('.'); - this.reference = object; - this.node = null; - - this.updateType = NodeUpdateType.OBJECT; - } - - element(indexNode) { - return nodeObject(new ReferenceElementNode(this, nodeObject(indexNode))); - } - - setNodeType(uniformType) { - let node = null; - - if (this.count !== null) { - node = buffer(null, uniformType, this.count); - } else if (Array.isArray(this.getValueFromReference())) { - node = uniformArray(null, uniformType); - } else if (uniformType === 'texture') { - node = texture(null); - } else if (uniformType === 'cubeTexture') { - node = cubeTexture(null); - } else { - node = uniform(null, uniformType); - } - - this.node = node.getSelf(); - } - - getNodeType(builder) { - if (this.node === null) { - this.updateValue(); - } - - return this.node.getNodeType(builder); - } - - getValueFromReference(object = this.reference) { - const { properties } = this; - - let value = object[properties[0]]; - - for (let i = 1; i < properties.length; i++) { - value = value[properties[i]]; - } - - return value; - } - - updateReference(state) { - this.reference = this.object !== null ? this.object : state.object; - - return this.reference; - } - - setup() { - this.updateValue(); - - return this.node; - } - - update(/*frame*/) { - this.updateValue(); - } - - updateValue() { - if (this.node === null) this.setNodeType(this.uniformType); - - const value = this.getValueFromReference(); - - if (Array.isArray(value)) { - this.node.array = value; - } else { - this.node.value = value; - } - } -} - -const reference = (name, type, object) => nodeObject(new ReferenceNode(name, type, object)); -const referenceBuffer = (name, type, count, object) => nodeObject(new ReferenceNode(name, type, object, count)); - -addNodeClass('ReferenceNode', ReferenceNode); - -class MaterialReferenceNode extends ReferenceNode { - constructor(property, inputType, material = null) { - super(property, inputType, material); - - this.material = material; - - //this.updateType = NodeUpdateType.RENDER; - - this.isMaterialReferenceNode = true; - } - - /*setNodeType( node ) { - - super.setNodeType( node ); - - this.node.groupNode = renderGroup; - - }*/ - - updateReference(state) { - this.reference = this.material !== null ? this.material : state.material; - - return this.reference; - } -} - -const materialReference = (name, type, material) => nodeObject(new MaterialReferenceNode(name, type, material)); - -addNodeClass('MaterialReferenceNode', MaterialReferenceNode); - -const _propertyCache = new Map(); - -class MaterialNode extends Node { - constructor(scope) { - super(); - - this.scope = scope; - } - - getCache(property, type) { - let node = _propertyCache.get(property); - - if (node === undefined) { - node = materialReference(property, type); - - _propertyCache.set(property, node); - } - - return node; - } - - getFloat(property) { - return this.getCache(property, 'float'); - } - - getColor(property) { - return this.getCache(property, 'color'); - } - - getTexture(property) { - return this.getCache(property === 'map' ? 'map' : property + 'Map', 'texture'); - } - - setup(builder) { - const material = builder.context.material; - const scope = this.scope; - - let node = null; - - if (scope === MaterialNode.COLOR) { - const colorNode = material.color !== undefined ? this.getColor(scope) : vec3(); - - if (material.map && material.map.isTexture === true) { - node = colorNode.mul(this.getTexture('map')); - } else { - node = colorNode; - } - } else if (scope === MaterialNode.OPACITY) { - const opacityNode = this.getFloat(scope); - - if (material.alphaMap && material.alphaMap.isTexture === true) { - node = opacityNode.mul(this.getTexture('alpha')); - } else { - node = opacityNode; - } - } else if (scope === MaterialNode.SPECULAR_STRENGTH) { - if (material.specularMap && material.specularMap.isTexture === true) { - node = this.getTexture('specular').r; - } else { - node = float(1); - } - } else if (scope === MaterialNode.SPECULAR_INTENSITY) { - const specularIntensity = this.getFloat(scope); - - if (material.specularMap) { - node = specularIntensity.mul(this.getTexture(scope).a); - } else { - node = specularIntensity; - } - } else if (scope === MaterialNode.SPECULAR_COLOR) { - const specularColorNode = this.getColor(scope); - - if (material.specularColorMap && material.specularColorMap.isTexture === true) { - node = specularColorNode.mul(this.getTexture(scope).rgb); - } else { - node = specularColorNode; - } - } else if (scope === MaterialNode.ROUGHNESS) { - // TODO: cleanup similar branches - - const roughnessNode = this.getFloat(scope); - - if (material.roughnessMap && material.roughnessMap.isTexture === true) { - node = roughnessNode.mul(this.getTexture(scope).g); - } else { - node = roughnessNode; - } - } else if (scope === MaterialNode.METALNESS) { - const metalnessNode = this.getFloat(scope); - - if (material.metalnessMap && material.metalnessMap.isTexture === true) { - node = metalnessNode.mul(this.getTexture(scope).b); - } else { - node = metalnessNode; - } - } else if (scope === MaterialNode.EMISSIVE) { - const emissiveIntensityNode = this.getFloat('emissiveIntensity'); - const emissiveNode = this.getColor(scope).mul(emissiveIntensityNode); - - if (material.emissiveMap && material.emissiveMap.isTexture === true) { - node = emissiveNode.mul(this.getTexture(scope)); - } else { - node = emissiveNode; - } - } else if (scope === MaterialNode.NORMAL) { - if (material.normalMap) { - node = this.getTexture('normal').normalMap(this.getCache('normalScale', 'vec2')); - } else if (material.bumpMap) { - node = this.getTexture('bump').r.bumpMap(this.getFloat('bumpScale')); - } else { - node = normalView; - } - } else if (scope === MaterialNode.CLEARCOAT) { - const clearcoatNode = this.getFloat(scope); - - if (material.clearcoatMap && material.clearcoatMap.isTexture === true) { - node = clearcoatNode.mul(this.getTexture(scope).r); - } else { - node = clearcoatNode; - } - } else if (scope === MaterialNode.CLEARCOAT_ROUGHNESS) { - const clearcoatRoughnessNode = this.getFloat(scope); - - if (material.clearcoatRoughnessMap && material.clearcoatRoughnessMap.isTexture === true) { - node = clearcoatRoughnessNode.mul(this.getTexture(scope).r); - } else { - node = clearcoatRoughnessNode; - } - } else if (scope === MaterialNode.CLEARCOAT_NORMAL) { - if (material.clearcoatNormalMap) { - node = this.getTexture(scope).normalMap(this.getCache(scope + 'Scale', 'vec2')); - } else { - node = normalView; - } - } else if (scope === MaterialNode.SHEEN) { - const sheenNode = this.getColor('sheenColor').mul(this.getFloat('sheen')); // Move this mul() to CPU - - if (material.sheenColorMap && material.sheenColorMap.isTexture === true) { - node = sheenNode.mul(this.getTexture('sheenColor').rgb); - } else { - node = sheenNode; - } - } else if (scope === MaterialNode.SHEEN_ROUGHNESS) { - const sheenRoughnessNode = this.getFloat(scope); - - if (material.sheenRoughnessMap && material.sheenRoughnessMap.isTexture === true) { - node = sheenRoughnessNode.mul(this.getTexture(scope).a); - } else { - node = sheenRoughnessNode; - } - - node = node.clamp(0.07, 1.0); - } else if (scope === MaterialNode.ANISOTROPY) { - if (material.anisotropyMap && material.anisotropyMap.isTexture === true) { - const anisotropyPolar = this.getTexture(scope); - const anisotropyMat = mat2(materialAnisotropyVector.x, materialAnisotropyVector.y, materialAnisotropyVector.y.negate(), materialAnisotropyVector.x); - - node = anisotropyMat.mul(anisotropyPolar.rg.mul(2.0).sub(vec2(1.0)).normalize().mul(anisotropyPolar.b)); - } else { - node = materialAnisotropyVector; - } - } else if (scope === MaterialNode.IRIDESCENCE_THICKNESS) { - const iridescenceThicknessMaximum = reference('1', 'float', material.iridescenceThicknessRange); - - if (material.iridescenceThicknessMap) { - const iridescenceThicknessMinimum = reference('0', 'float', material.iridescenceThicknessRange); - - node = iridescenceThicknessMaximum.sub(iridescenceThicknessMinimum).mul(this.getTexture(scope).g).add(iridescenceThicknessMinimum); - } else { - node = iridescenceThicknessMaximum; - } - } else if (scope === MaterialNode.TRANSMISSION) { - const transmissionNode = this.getFloat(scope); - - if (material.transmissionMap) { - node = transmissionNode.mul(this.getTexture(scope).r); - } else { - node = transmissionNode; - } - } else if (scope === MaterialNode.THICKNESS) { - const thicknessNode = this.getFloat(scope); - - if (material.thicknessMap) { - node = thicknessNode.mul(this.getTexture(scope).g); - } else { - node = thicknessNode; - } - } else if (scope === MaterialNode.IOR) { - node = this.getFloat(scope); - } else if (scope === MaterialNode.LIGHT_MAP) { - node = this.getTexture(scope).rgb.mul(this.getFloat('lightMapIntensity')); - } else if (scope === MaterialNode.AO_MAP) { - node = this.getTexture(scope).r.sub(1.0).mul(this.getFloat('aoMapIntensity')).add(1.0); - } else { - const outputType = this.getNodeType(builder); - - node = this.getCache(scope, outputType); - } - - return node; - } -} - -MaterialNode.ALPHA_TEST = 'alphaTest'; -MaterialNode.COLOR = 'color'; -MaterialNode.OPACITY = 'opacity'; -MaterialNode.SHININESS = 'shininess'; -MaterialNode.SPECULAR = 'specular'; -MaterialNode.SPECULAR_STRENGTH = 'specularStrength'; -MaterialNode.SPECULAR_INTENSITY = 'specularIntensity'; -MaterialNode.SPECULAR_COLOR = 'specularColor'; -MaterialNode.REFLECTIVITY = 'reflectivity'; -MaterialNode.ROUGHNESS = 'roughness'; -MaterialNode.METALNESS = 'metalness'; -MaterialNode.NORMAL = 'normal'; -MaterialNode.CLEARCOAT = 'clearcoat'; -MaterialNode.CLEARCOAT_ROUGHNESS = 'clearcoatRoughness'; -MaterialNode.CLEARCOAT_NORMAL = 'clearcoatNormal'; -MaterialNode.EMISSIVE = 'emissive'; -MaterialNode.ROTATION = 'rotation'; -MaterialNode.SHEEN = 'sheen'; -MaterialNode.SHEEN_ROUGHNESS = 'sheenRoughness'; -MaterialNode.ANISOTROPY = 'anisotropy'; -MaterialNode.IRIDESCENCE = 'iridescence'; -MaterialNode.IRIDESCENCE_IOR = 'iridescenceIOR'; -MaterialNode.IRIDESCENCE_THICKNESS = 'iridescenceThickness'; -MaterialNode.IOR = 'ior'; -MaterialNode.TRANSMISSION = 'transmission'; -MaterialNode.THICKNESS = 'thickness'; -MaterialNode.ATTENUATION_DISTANCE = 'attenuationDistance'; -MaterialNode.ATTENUATION_COLOR = 'attenuationColor'; -MaterialNode.LINE_SCALE = 'scale'; -MaterialNode.LINE_DASH_SIZE = 'dashSize'; -MaterialNode.LINE_GAP_SIZE = 'gapSize'; -MaterialNode.LINE_WIDTH = 'linewidth'; -MaterialNode.LINE_DASH_OFFSET = 'dashOffset'; -MaterialNode.POINT_WIDTH = 'pointWidth'; -MaterialNode.DISPERSION = 'dispersion'; -MaterialNode.LIGHT_MAP = 'light'; -MaterialNode.AO_MAP = 'ao'; - -const materialAlphaTest = nodeImmutable(MaterialNode, MaterialNode.ALPHA_TEST); -const materialColor = nodeImmutable(MaterialNode, MaterialNode.COLOR); -const materialShininess = nodeImmutable(MaterialNode, MaterialNode.SHININESS); -const materialEmissive = nodeImmutable(MaterialNode, MaterialNode.EMISSIVE); -const materialOpacity = nodeImmutable(MaterialNode, MaterialNode.OPACITY); -const materialSpecular = nodeImmutable(MaterialNode, MaterialNode.SPECULAR); - -const materialSpecularIntensity = nodeImmutable(MaterialNode, MaterialNode.SPECULAR_INTENSITY); -const materialSpecularColor = nodeImmutable(MaterialNode, MaterialNode.SPECULAR_COLOR); - -const materialSpecularStrength = nodeImmutable(MaterialNode, MaterialNode.SPECULAR_STRENGTH); -const materialReflectivity = nodeImmutable(MaterialNode, MaterialNode.REFLECTIVITY); -const materialRoughness = nodeImmutable(MaterialNode, MaterialNode.ROUGHNESS); -const materialMetalness = nodeImmutable(MaterialNode, MaterialNode.METALNESS); -const materialNormal = nodeImmutable(MaterialNode, MaterialNode.NORMAL).context({ getUV: null }); -const materialClearcoat = nodeImmutable(MaterialNode, MaterialNode.CLEARCOAT); -const materialClearcoatRoughness = nodeImmutable(MaterialNode, MaterialNode.CLEARCOAT_ROUGHNESS); -const materialClearcoatNormal = nodeImmutable(MaterialNode, MaterialNode.CLEARCOAT_NORMAL).context({ getUV: null }); -const materialRotation = nodeImmutable(MaterialNode, MaterialNode.ROTATION); -const materialSheen = nodeImmutable(MaterialNode, MaterialNode.SHEEN); -const materialSheenRoughness = nodeImmutable(MaterialNode, MaterialNode.SHEEN_ROUGHNESS); -const materialAnisotropy = nodeImmutable(MaterialNode, MaterialNode.ANISOTROPY); -const materialIridescence = nodeImmutable(MaterialNode, MaterialNode.IRIDESCENCE); -const materialIridescenceIOR = nodeImmutable(MaterialNode, MaterialNode.IRIDESCENCE_IOR); -const materialIridescenceThickness = nodeImmutable(MaterialNode, MaterialNode.IRIDESCENCE_THICKNESS); -const materialTransmission = nodeImmutable(MaterialNode, MaterialNode.TRANSMISSION); -const materialThickness = nodeImmutable(MaterialNode, MaterialNode.THICKNESS); -const materialIOR = nodeImmutable(MaterialNode, MaterialNode.IOR); -const materialAttenuationDistance = nodeImmutable(MaterialNode, MaterialNode.ATTENUATION_DISTANCE); -const materialAttenuationColor = nodeImmutable(MaterialNode, MaterialNode.ATTENUATION_COLOR); -const materialLineScale = nodeImmutable(MaterialNode, MaterialNode.LINE_SCALE); -const materialLineDashSize = nodeImmutable(MaterialNode, MaterialNode.LINE_DASH_SIZE); -const materialLineGapSize = nodeImmutable(MaterialNode, MaterialNode.LINE_GAP_SIZE); -const materialLineWidth = nodeImmutable(MaterialNode, MaterialNode.LINE_WIDTH); -const materialLineDashOffset = nodeImmutable(MaterialNode, MaterialNode.LINE_DASH_OFFSET); -const materialPointWidth = nodeImmutable(MaterialNode, MaterialNode.POINT_WIDTH); -const materialDispersion = nodeImmutable(MaterialNode, MaterialNode.DISPERSION); -const materialLightMap = nodeImmutable(MaterialNode, MaterialNode.LIGHT_MAP); -const materialAOMap = nodeImmutable(MaterialNode, MaterialNode.AO_MAP); -nodeImmutable(MaterialNode, MaterialNode.REFRACTION_RATIO); -const materialAnisotropyVector = uniform(new Vector2()) - .onReference(function (frame) { - return frame.material; - }) - .onRenderUpdate(function ({ material }) { - this.value.set(material.anisotropy * Math.cos(material.anisotropyRotation), material.anisotropy * Math.sin(material.anisotropyRotation)); - }); - -addNodeClass('MaterialNode', MaterialNode); - -class ModelViewProjectionNode extends TempNode { - constructor(positionNode = null) { - super('vec4'); - - this.positionNode = positionNode; - } - - setup(builder) { - if (builder.shaderStage === 'fragment') { - return varying(builder.context.mvp); - } - - const position = this.positionNode || positionLocal; - - return cameraProjectionMatrix.mul(modelViewMatrix).mul(position); - } -} - -const modelViewProjection = nodeProxy(ModelViewProjectionNode); - -addNodeClass('ModelViewProjectionNode', ModelViewProjectionNode); - -class BufferAttributeNode extends InputNode { - constructor(value, bufferType = null, bufferStride = 0, bufferOffset = 0) { - super(value, bufferType); - - this.isBufferNode = true; - - this.bufferType = bufferType; - this.bufferStride = bufferStride; - this.bufferOffset = bufferOffset; - - this.usage = StaticDrawUsage; - this.instanced = false; - - this.attribute = null; - - this.global = true; - - if (value && value.isBufferAttribute === true) { - this.attribute = value; - this.usage = value.usage; - this.instanced = value.isInstancedBufferAttribute; - } - } - - getHash(builder) { - if (this.bufferStride === 0 && this.bufferOffset === 0) { - let bufferData = builder.globalCache.getData(this.value); - - if (bufferData === undefined) { - bufferData = { - node: this, - }; - - builder.globalCache.setData(this.value, bufferData); - } - - return bufferData.node.uuid; - } - - return this.uuid; - } - - getNodeType(builder) { - if (this.bufferType === null) { - this.bufferType = builder.getTypeFromAttribute(this.attribute); - } - - return this.bufferType; - } - - setup(builder) { - if (this.attribute !== null) return; - - const type = this.getNodeType(builder); - const array = this.value; - const itemSize = builder.getTypeLength(type); - const stride = this.bufferStride || itemSize; - const offset = this.bufferOffset; - - const buffer = array.isInterleavedBuffer === true ? array : new InterleavedBuffer(array, stride); - const bufferAttribute = new InterleavedBufferAttribute(buffer, itemSize, offset); - - buffer.setUsage(this.usage); - - this.attribute = bufferAttribute; - this.attribute.isInstancedBufferAttribute = this.instanced; // @TODO: Add a possible: InstancedInterleavedBufferAttribute - } - - generate(builder) { - const nodeType = this.getNodeType(builder); - - const nodeAttribute = builder.getBufferAttributeFromNode(this, nodeType); - const propertyName = builder.getPropertyName(nodeAttribute); - - let output = null; - - if (builder.shaderStage === 'vertex' || builder.shaderStage === 'compute') { - this.name = propertyName; - - output = propertyName; - } else { - const nodeVarying = varying(this); - - output = nodeVarying.build(builder, nodeType); - } - - return output; - } - - getInputType(/*builder*/) { - return 'bufferAttribute'; - } - - setUsage(value) { - this.usage = value; - - if (this.attribute && this.attribute.isBufferAttribute === true) { - this.attribute.usage = value; - } - - return this; - } - - setInstanced(value) { - this.instanced = value; - - return this; - } -} - -const bufferAttribute = (array, type, stride, offset) => nodeObject(new BufferAttributeNode(array, type, stride, offset)); -const dynamicBufferAttribute = (array, type, stride, offset) => bufferAttribute(array, type, stride, offset).setUsage(DynamicDrawUsage); - -const instancedBufferAttribute = (array, type, stride, offset) => bufferAttribute(array, type, stride, offset).setInstanced(true); -const instancedDynamicBufferAttribute = (array, type, stride, offset) => dynamicBufferAttribute(array, type, stride, offset).setInstanced(true); - -addNodeElement('toAttribute', (bufferNode) => bufferAttribute(bufferNode.value)); - -addNodeClass('BufferAttributeNode', BufferAttributeNode); - -class InstanceNode extends Node { - constructor(instanceMesh) { - super('void'); - - this.instanceMesh = instanceMesh; - - this.instanceMatrixNode = null; - - this.instanceColorNode = null; - - this.updateType = NodeUpdateType.FRAME; - - this.buffer = null; - this.bufferColor = null; - } - - setup(builder) { - let instanceMatrixNode = this.instanceMatrixNode; - let instanceColorNode = this.instanceColorNode; - - const instanceMesh = this.instanceMesh; - - if (instanceMatrixNode === null) { - const instanceAttribute = instanceMesh.instanceMatrix; - - // Both WebGPU and WebGL backends have UBO max limited to 64kb. Matrix count number bigger than 1000 ( 16 * 4 * 1000 = 64kb ) will fallback to attribute. - - if (instanceMesh.count <= 1000) { - instanceMatrixNode = buffer(instanceAttribute.array, 'mat4', instanceMesh.count).element(instanceIndex); - } else { - const buffer = new InstancedInterleavedBuffer(instanceAttribute.array, 16, 1); - - this.buffer = buffer; - - const bufferFn = instanceAttribute.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute; - - const instanceBuffers = [ - // F.Signature -> bufferAttribute( array, type, stride, offset ) - bufferFn(buffer, 'vec4', 16, 0), - bufferFn(buffer, 'vec4', 16, 4), - bufferFn(buffer, 'vec4', 16, 8), - bufferFn(buffer, 'vec4', 16, 12), - ]; - - instanceMatrixNode = mat4(...instanceBuffers); - } - - this.instanceMatrixNode = instanceMatrixNode; - } - - const instanceColorAttribute = instanceMesh.instanceColor; - - if (instanceColorAttribute && instanceColorNode === null) { - const buffer = new InstancedBufferAttribute(instanceColorAttribute.array, 3); - - const bufferFn = instanceColorAttribute.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute; - - this.bufferColor = buffer; - - instanceColorNode = vec3(bufferFn(buffer, 'vec3', 3, 0)); - - this.instanceColorNode = instanceColorNode; - } - - // POSITION - - const instancePosition = instanceMatrixNode.mul(positionLocal).xyz; - positionLocal.assign(instancePosition); - - // NORMAL - - if (builder.hasGeometryAttribute('normal')) { - const m = mat3(instanceMatrixNode); - - const transformedNormal = normalLocal.div(vec3(m[0].dot(m[0]), m[1].dot(m[1]), m[2].dot(m[2]))); - - const instanceNormal = m.mul(transformedNormal).xyz; - - // ASSIGNS - - normalLocal.assign(instanceNormal); - } - - // COLOR - - if (this.instanceColorNode !== null) { - varyingProperty('vec3', 'vInstanceColor').assign(this.instanceColorNode); - } - } - - update(/*frame*/) { - if (this.instanceMesh.instanceMatrix.usage !== DynamicDrawUsage && this.buffer != null && this.instanceMesh.instanceMatrix.version !== this.buffer.version) { - this.buffer.version = this.instanceMesh.instanceMatrix.version; - } - - if (this.instanceMesh.instanceColor && this.instanceMesh.instanceColor.usage !== DynamicDrawUsage && this.bufferColor != null && this.instanceMesh.instanceColor.version !== this.bufferColor.version) { - this.bufferColor.version = this.instanceMesh.instanceColor.version; - } - } -} - -const instance = nodeProxy(InstanceNode); - -addNodeClass('InstanceNode', InstanceNode); - -const tangentGeometry = /*#__PURE__*/ Fn((builder) => { - if (builder.geometry.hasAttribute('tangent') === false) { - builder.geometry.computeTangents(); - } - - return attribute('tangent', 'vec4'); -})(); - -const tangentLocal = /*#__PURE__*/ tangentGeometry.xyz.toVar('tangentLocal'); -const tangentView = /*#__PURE__*/ varying(modelViewMatrix.mul(vec4(tangentLocal, 0)).xyz, 'v_tangentView') - .normalize() - .toVar('tangentView'); -const tangentWorld = /*#__PURE__*/ varying(tangentView.transformDirection(cameraViewMatrix), 'v_tangentWorld').normalize().toVar('tangentWorld'); -const transformedTangentView = /*#__PURE__*/ tangentView.toVar('transformedTangentView'); -const transformedTangentWorld = /*#__PURE__*/ transformedTangentView.transformDirection(cameraViewMatrix).normalize().toVar('transformedTangentWorld'); - -class BatchNode extends Node { - constructor(batchMesh) { - super('void'); - - this.batchMesh = batchMesh; - - this.batchingIdNode = null; - } - - setup(builder) { - // POSITION - - if (this.batchingIdNode === null) { - if (builder.getDrawIndex() === null) { - this.batchingIdNode = instanceIndex; - } else { - this.batchingIdNode = drawIndex; - } - } - - const getIndirectIndex = Fn(([id]) => { - const size = textureSize(textureLoad(this.batchMesh._indirectTexture), 0); - const x = int(id).modInt(int(size)); - const y = int(id).div(int(size)); - return textureLoad(this.batchMesh._indirectTexture, ivec2(x, y)).x; - }).setLayout({ - name: 'getIndirectIndex', - type: 'uint', - inputs: [{ name: 'id', type: 'int' }], - }); - - const indirectId = getIndirectIndex(int(this.batchingIdNode)); - - const matricesTexture = this.batchMesh._matricesTexture; - - const size = textureSize(textureLoad(matricesTexture), 0); - const j = float(indirectId).mul(4).toInt().toVar(); - - const x = j.modInt(size); - const y = j.div(int(size)); - const batchingMatrix = mat4(textureLoad(matricesTexture, ivec2(x, y)), textureLoad(matricesTexture, ivec2(x.add(1), y)), textureLoad(matricesTexture, ivec2(x.add(2), y)), textureLoad(matricesTexture, ivec2(x.add(3), y))); - - const colorsTexture = this.batchMesh._colorsTexture; - - if (colorsTexture !== null) { - const getBatchingColor = Fn(([id]) => { - const size = textureSize(textureLoad(colorsTexture), 0).x; - const j = id; - const x = j.modInt(size); - const y = j.div(size); - return textureLoad(colorsTexture, ivec2(x, y)).rgb; - }).setLayout({ - name: 'getBatchingColor', - type: 'vec3', - inputs: [{ name: 'id', type: 'int' }], - }); - - const color = getBatchingColor(indirectId); - - varyingProperty('vec3', 'vBatchColor').assign(color); - } - - const bm = mat3(batchingMatrix); - - positionLocal.assign(batchingMatrix.mul(positionLocal)); - - const transformedNormal = normalLocal.div(vec3(bm[0].dot(bm[0]), bm[1].dot(bm[1]), bm[2].dot(bm[2]))); - - const batchingNormal = bm.mul(transformedNormal).xyz; - - normalLocal.assign(batchingNormal); - - if (builder.hasGeometryAttribute('tangent')) { - tangentLocal.mulAssign(bm); - } - } -} - -const batch = nodeProxy(BatchNode); - -addNodeClass('batch', BatchNode); - -const _frameId = new WeakMap(); - -class SkinningNode extends Node { - constructor(skinnedMesh, useReference = false) { - super('void'); - - this.skinnedMesh = skinnedMesh; - this.useReference = useReference; - - this.updateType = NodeUpdateType.OBJECT; - - // - - this.skinIndexNode = attribute('skinIndex', 'uvec4'); - this.skinWeightNode = attribute('skinWeight', 'vec4'); - - let bindMatrixNode, bindMatrixInverseNode, boneMatricesNode; - - if (useReference) { - bindMatrixNode = reference('bindMatrix', 'mat4'); - bindMatrixInverseNode = reference('bindMatrixInverse', 'mat4'); - boneMatricesNode = referenceBuffer('skeleton.boneMatrices', 'mat4', skinnedMesh.skeleton.bones.length); - } else { - bindMatrixNode = uniform(skinnedMesh.bindMatrix, 'mat4'); - bindMatrixInverseNode = uniform(skinnedMesh.bindMatrixInverse, 'mat4'); - boneMatricesNode = buffer(skinnedMesh.skeleton.boneMatrices, 'mat4', skinnedMesh.skeleton.bones.length); - } - - this.bindMatrixNode = bindMatrixNode; - this.bindMatrixInverseNode = bindMatrixInverseNode; - this.boneMatricesNode = boneMatricesNode; - this.previousBoneMatricesNode = null; - } - - getSkinnedPosition(boneMatrices = this.boneMatricesNode, position = positionLocal) { - const { skinIndexNode, skinWeightNode, bindMatrixNode, bindMatrixInverseNode } = this; - - const boneMatX = boneMatrices.element(skinIndexNode.x); - const boneMatY = boneMatrices.element(skinIndexNode.y); - const boneMatZ = boneMatrices.element(skinIndexNode.z); - const boneMatW = boneMatrices.element(skinIndexNode.w); - - // POSITION - - const skinVertex = bindMatrixNode.mul(position); - - const skinned = add(boneMatX.mul(skinWeightNode.x).mul(skinVertex), boneMatY.mul(skinWeightNode.y).mul(skinVertex), boneMatZ.mul(skinWeightNode.z).mul(skinVertex), boneMatW.mul(skinWeightNode.w).mul(skinVertex)); - - return bindMatrixInverseNode.mul(skinned).xyz; - } - - getSkinnedNormal(boneMatrices = this.boneMatricesNode, normal = normalLocal) { - const { skinIndexNode, skinWeightNode, bindMatrixNode, bindMatrixInverseNode } = this; - - const boneMatX = boneMatrices.element(skinIndexNode.x); - const boneMatY = boneMatrices.element(skinIndexNode.y); - const boneMatZ = boneMatrices.element(skinIndexNode.z); - const boneMatW = boneMatrices.element(skinIndexNode.w); - - // NORMAL - - let skinMatrix = add(skinWeightNode.x.mul(boneMatX), skinWeightNode.y.mul(boneMatY), skinWeightNode.z.mul(boneMatZ), skinWeightNode.w.mul(boneMatW)); - - skinMatrix = bindMatrixInverseNode.mul(skinMatrix).mul(bindMatrixNode); - - return skinMatrix.transformDirection(normal).xyz; - } - - getPreviousSkinnedPosition(builder) { - const skinnedMesh = builder.object; - - if (this.previousBoneMatricesNode === null) { - skinnedMesh.skeleton.previousBoneMatrices = new Float32Array(skinnedMesh.skeleton.boneMatrices); - - this.previousBoneMatricesNode = referenceBuffer('skeleton.previousBoneMatrices', 'mat4', skinnedMesh.skeleton.bones.length); - } - - return this.getSkinnedPosition(this.previousBoneMatricesNode, positionPrevious); - } - - needsPreviousBoneMatrices(builder) { - const mrt = builder.renderer.getMRT(); - - return mrt && mrt.has('velocity'); - } - - setup(builder) { - if (this.needsPreviousBoneMatrices(builder)) { - positionPrevious.assign(this.getPreviousSkinnedPosition(builder)); - } - - const skinPosition = this.getSkinnedPosition(); - - positionLocal.assign(skinPosition); - - if (builder.hasGeometryAttribute('normal')) { - const skinNormal = this.getSkinnedNormal(); - - normalLocal.assign(skinNormal); - - if (builder.hasGeometryAttribute('tangent')) { - tangentLocal.assign(skinNormal); - } - } - } - - generate(builder, output) { - if (output !== 'void') { - return positionLocal.build(builder, output); - } - } - - update(frame) { - const object = this.useReference ? frame.object : this.skinnedMesh; - const skeleton = object.skeleton; - - if (_frameId.get(skeleton) === frame.frameId) return; - - _frameId.set(skeleton, frame.frameId); - - if (this.previousBoneMatricesNode !== null) skeleton.previousBoneMatrices.set(skeleton.boneMatrices); - - skeleton.update(); - } -} - -const skinning = (skinnedMesh) => nodeObject(new SkinningNode(skinnedMesh)); -const skinningReference = (skinnedMesh) => nodeObject(new SkinningNode(skinnedMesh, true)); - -addNodeClass('SkinningNode', SkinningNode); - -class LoopNode extends Node { - constructor(params = []) { - super(); - - this.params = params; - } - - getVarName(index) { - return String.fromCharCode('i'.charCodeAt() + index); - } - - getProperties(builder) { - const properties = builder.getNodeProperties(this); - - if (properties.stackNode !== undefined) return properties; - - // - - const inputs = {}; - - for (let i = 0, l = this.params.length - 1; i < l; i++) { - const param = this.params[i]; - - const name = (param.isNode !== true && param.name) || this.getVarName(i); - const type = (param.isNode !== true && param.type) || 'int'; - - inputs[name] = expression(name, type); - } - - const stack = builder.addStack(); // TODO: cache() it - - properties.returnsNode = this.params[this.params.length - 1](inputs, stack, builder); - properties.stackNode = stack; - - builder.removeStack(); - - return properties; - } - - getNodeType(builder) { - const { returnsNode } = this.getProperties(builder); - - return returnsNode ? returnsNode.getNodeType(builder) : 'void'; - } - - setup(builder) { - // setup properties - - this.getProperties(builder); - } - - generate(builder) { - const properties = this.getProperties(builder); - - const params = this.params; - const stackNode = properties.stackNode; - - for (let i = 0, l = params.length - 1; i < l; i++) { - const param = params[i]; - - let start = null, - end = null, - name = null, - type = null, - condition = null, - update = null; - - if (param.isNode) { - type = 'int'; - name = this.getVarName(i); - start = '0'; - end = param.build(builder, type); - condition = '<'; - } else { - type = param.type || 'int'; - name = param.name || this.getVarName(i); - start = param.start; - end = param.end; - condition = param.condition; - update = param.update; - - if (typeof start === 'number') start = start.toString(); - else if (start && start.isNode) start = start.build(builder, type); - - if (typeof end === 'number') end = end.toString(); - else if (end && end.isNode) end = end.build(builder, type); - - if (start !== undefined && end === undefined) { - start = start + ' - 1'; - end = '0'; - condition = '>='; - } else if (end !== undefined && start === undefined) { - start = '0'; - condition = '<'; - } - - if (condition === undefined) { - if (Number(start) > Number(end)) { - condition = '>='; - } else { - condition = '<'; - } - } - } - - const internalParam = { start, end, condition }; - - // - - const startSnippet = internalParam.start; - const endSnippet = internalParam.end; - - let declarationSnippet = ''; - let conditionalSnippet = ''; - let updateSnippet = ''; - - if (!update) { - if (type === 'int' || type === 'uint') { - if (condition.includes('<')) update = '++'; - else update = '--'; - } else { - if (condition.includes('<')) update = '+= 1.'; - else update = '-= 1.'; - } - } - - declarationSnippet += builder.getVar(type, name) + ' = ' + startSnippet; - - conditionalSnippet += name + ' ' + condition + ' ' + endSnippet; - updateSnippet += name + ' ' + update; - - const forSnippet = `for ( ${declarationSnippet}; ${conditionalSnippet}; ${updateSnippet} )`; - - builder.addFlowCode((i === 0 ? '\n' : '') + builder.tab + forSnippet + ' {\n\n').addFlowTab(); - } - - const stackSnippet = stackNode.build(builder, 'void'); - - const returnsSnippet = properties.returnsNode ? properties.returnsNode.build(builder) : ''; - - builder.removeFlowTab().addFlowCode('\n' + builder.tab + stackSnippet); - - for (let i = 0, l = this.params.length - 1; i < l; i++) { - builder.addFlowCode((i === 0 ? '' : builder.tab) + '}\n\n').removeFlowTab(); - } - - builder.addFlowTab(); - - return returnsSnippet; - } -} - -const Loop = (...params) => nodeObject(new LoopNode(nodeArray(params, 'int'))).append(); -const Continue = () => expression('continue').append(); -const Break = () => expression('break').append(); - -addNodeClass('LoopNode', LoopNode); - -const _morphTextures = new WeakMap(); -const _morphVec4 = /*@__PURE__*/ new Vector4(); - -const getMorph = Fn(({ bufferMap, influence, stride, width, depth, offset }) => { - const texelIndex = int(vertexIndex).mul(stride).add(offset); - - const y = texelIndex.div(width); - const x = texelIndex.sub(y.mul(width)); - - const bufferAttrib = textureLoad(bufferMap, ivec2(x, y)).depth(depth); - - return bufferAttrib.mul(influence); -}); - -function getEntry(geometry) { - const hasMorphPosition = geometry.morphAttributes.position !== undefined; - const hasMorphNormals = geometry.morphAttributes.normal !== undefined; - const hasMorphColors = geometry.morphAttributes.color !== undefined; - - // instead of using attributes, the WebGL 2 code path encodes morph targets - // into an array of data textures. Each layer represents a single morph target. - - const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; - const morphTargetsCount = morphAttribute !== undefined ? morphAttribute.length : 0; - - let entry = _morphTextures.get(geometry); - - if (entry === undefined || entry.count !== morphTargetsCount) { - if (entry !== undefined) entry.texture.dispose(); - - const morphTargets = geometry.morphAttributes.position || []; - const morphNormals = geometry.morphAttributes.normal || []; - const morphColors = geometry.morphAttributes.color || []; - - let vertexDataCount = 0; - - if (hasMorphPosition === true) vertexDataCount = 1; - if (hasMorphNormals === true) vertexDataCount = 2; - if (hasMorphColors === true) vertexDataCount = 3; - - let width = geometry.attributes.position.count * vertexDataCount; - let height = 1; - - const maxTextureSize = 4096; // @TODO: Use 'capabilities.maxTextureSize' - - if (width > maxTextureSize) { - height = Math.ceil(width / maxTextureSize); - width = maxTextureSize; - } - - const buffer = new Float32Array(width * height * 4 * morphTargetsCount); - - const bufferTexture = new DataArrayTexture(buffer, width, height, morphTargetsCount); - bufferTexture.type = FloatType; - bufferTexture.needsUpdate = true; - - // fill buffer - - const vertexDataStride = vertexDataCount * 4; - - for (let i = 0; i < morphTargetsCount; i++) { - const morphTarget = morphTargets[i]; - const morphNormal = morphNormals[i]; - const morphColor = morphColors[i]; - - const offset = width * height * 4 * i; - - for (let j = 0; j < morphTarget.count; j++) { - const stride = j * vertexDataStride; - - if (hasMorphPosition === true) { - _morphVec4.fromBufferAttribute(morphTarget, j); - - buffer[offset + stride + 0] = _morphVec4.x; - buffer[offset + stride + 1] = _morphVec4.y; - buffer[offset + stride + 2] = _morphVec4.z; - buffer[offset + stride + 3] = 0; - } - - if (hasMorphNormals === true) { - _morphVec4.fromBufferAttribute(morphNormal, j); - - buffer[offset + stride + 4] = _morphVec4.x; - buffer[offset + stride + 5] = _morphVec4.y; - buffer[offset + stride + 6] = _morphVec4.z; - buffer[offset + stride + 7] = 0; - } - - if (hasMorphColors === true) { - _morphVec4.fromBufferAttribute(morphColor, j); - - buffer[offset + stride + 8] = _morphVec4.x; - buffer[offset + stride + 9] = _morphVec4.y; - buffer[offset + stride + 10] = _morphVec4.z; - buffer[offset + stride + 11] = morphColor.itemSize === 4 ? _morphVec4.w : 1; - } - } - } - - entry = { - count: morphTargetsCount, - texture: bufferTexture, - stride: vertexDataCount, - size: new Vector2(width, height), - }; - - _morphTextures.set(geometry, entry); - - function disposeTexture() { - bufferTexture.dispose(); - - _morphTextures.delete(geometry); - - geometry.removeEventListener('dispose', disposeTexture); - } - - geometry.addEventListener('dispose', disposeTexture); - } - - return entry; -} - -class MorphNode extends Node { - constructor(mesh) { - super('void'); - - this.mesh = mesh; - this.morphBaseInfluence = uniform(1); - - this.updateType = NodeUpdateType.OBJECT; - } - - setup(builder) { - const { geometry } = builder; - - const hasMorphPosition = geometry.morphAttributes.position !== undefined; - const hasMorphNormals = geometry.hasAttribute('normal') && geometry.morphAttributes.normal !== undefined; - - const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; - const morphTargetsCount = morphAttribute !== undefined ? morphAttribute.length : 0; - - // nodes - - const { texture: bufferMap, stride, size } = getEntry(geometry); - - if (hasMorphPosition === true) positionLocal.mulAssign(this.morphBaseInfluence); - if (hasMorphNormals === true) normalLocal.mulAssign(this.morphBaseInfluence); - - const width = int(size.width); - - Loop(morphTargetsCount, ({ i }) => { - const influence = float(0).toVar(); - - if (this.mesh.count > 1 && this.mesh.morphTexture !== null && this.mesh.morphTexture !== undefined) { - influence.assign(textureLoad(this.mesh.morphTexture, ivec2(int(i).add(1), int(instanceIndex))).r); - } else { - influence.assign(reference('morphTargetInfluences', 'float').element(i).toVar()); - } - - if (hasMorphPosition === true) { - positionLocal.addAssign( - getMorph({ - bufferMap, - influence, - stride, - width, - depth: i, - offset: int(0), - }) - ); - } - - if (hasMorphNormals === true) { - normalLocal.addAssign( - getMorph({ - bufferMap, - influence, - stride, - width, - depth: i, - offset: int(1), - }) - ); - } - }); - } - - update() { - const morphBaseInfluence = this.morphBaseInfluence; - - if (this.mesh.geometry.morphTargetsRelative) { - morphBaseInfluence.value = 1; - } else { - morphBaseInfluence.value = 1 - this.mesh.morphTargetInfluences.reduce((a, b) => a + b, 0); - } - } -} - -const morphReference = nodeProxy(MorphNode); - -addNodeClass('MorphNode', MorphNode); - -class LightingNode extends Node { - constructor() { - super('vec3'); - - this.isLightingNode = true; - } - - generate(/*builder*/) { - console.warn('Abstract function.'); - } -} - -addNodeClass('LightingNode', LightingNode); - -const BasicShadowMap = Fn(({ depthTexture, shadowCoord }) => { - return texture(depthTexture, shadowCoord.xy).compare(shadowCoord.z); -}); - -const PCFShadowMap = Fn(({ depthTexture, shadowCoord, shadow }) => { - const depthCompare = (uv, compare) => texture(depthTexture, uv).compare(compare); - - const mapSize = reference('mapSize', 'vec2', shadow); - const radius = reference('radius', 'float', shadow); - - const texelSize = vec2(1).div(mapSize); - const dx0 = texelSize.x.negate().mul(radius); - const dy0 = texelSize.y.negate().mul(radius); - const dx1 = texelSize.x.mul(radius); - const dy1 = texelSize.y.mul(radius); - const dx2 = dx0.div(2); - const dy2 = dy0.div(2); - const dx3 = dx1.div(2); - const dy3 = dy1.div(2); - - return add( - depthCompare(shadowCoord.xy.add(vec2(dx0, dy0)), shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(0, dy0)), shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(dx1, dy0)), shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(dx2, dy2)), shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(0, dy2)), shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(dx3, dy2)), shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(dx0, 0)), shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(dx2, 0)), shadowCoord.z), - depthCompare(shadowCoord.xy, shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(dx3, 0)), shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(dx1, 0)), shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(dx2, dy3)), shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(0, dy3)), shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(dx3, dy3)), shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(dx0, dy1)), shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(0, dy1)), shadowCoord.z), - depthCompare(shadowCoord.xy.add(vec2(dx1, dy1)), shadowCoord.z) - ).mul(1 / 17); -}); - -const PCFSoftShadowMap = Fn(({ depthTexture, shadowCoord, shadow }) => { - const depthCompare = (uv, compare) => texture(depthTexture, uv).compare(compare); - - const mapSize = reference('mapSize', 'vec2', shadow); - - const texelSize = vec2(1).div(mapSize); - const dx = texelSize.x; - const dy = texelSize.y; - - const uv = shadowCoord.xy; - const f = fract(uv.mul(mapSize).add(0.5)); - uv.subAssign(f.mul(texelSize)); - - return add( - depthCompare(uv, shadowCoord.z), - depthCompare(uv.add(vec2(dx, 0)), shadowCoord.z), - depthCompare(uv.add(vec2(0, dy)), shadowCoord.z), - depthCompare(uv.add(texelSize), shadowCoord.z), - mix(depthCompare(uv.add(vec2(dx.negate(), 0)), shadowCoord.z), depthCompare(uv.add(vec2(dx.mul(2), 0)), shadowCoord.z), f.x), - mix(depthCompare(uv.add(vec2(dx.negate(), dy)), shadowCoord.z), depthCompare(uv.add(vec2(dx.mul(2), dy)), shadowCoord.z), f.x), - mix(depthCompare(uv.add(vec2(0, dy.negate())), shadowCoord.z), depthCompare(uv.add(vec2(0, dy.mul(2))), shadowCoord.z), f.y), - mix(depthCompare(uv.add(vec2(dx, dy.negate())), shadowCoord.z), depthCompare(uv.add(vec2(dx, dy.mul(2))), shadowCoord.z), f.y), - mix(mix(depthCompare(uv.add(vec2(dx.negate(), dy.negate())), shadowCoord.z), depthCompare(uv.add(vec2(dx.mul(2), dy.negate())), shadowCoord.z), f.x), mix(depthCompare(uv.add(vec2(dx.negate(), dy.mul(2))), shadowCoord.z), depthCompare(uv.add(vec2(dx.mul(2), dy.mul(2))), shadowCoord.z), f.x), f.y) - ).mul(1 / 9); -}); - -const shadowFilterLib = [BasicShadowMap, PCFShadowMap, PCFSoftShadowMap]; - -// - -let overrideMaterial = null; - -class AnalyticLightNode extends LightingNode { - constructor(light = null) { - super(); - - this.updateType = NodeUpdateType.FRAME; - - this.light = light; - - this.color = new Color(); - this.colorNode = uniform(this.color); - - this.baseColorNode = null; - - this.shadowMap = null; - this.shadowNode = null; - this.shadowColorNode = null; - - this.isAnalyticLightNode = true; - } - - getCacheKey() { - return super.getCacheKey() + '-' + (this.light.id + '-' + (this.light.castShadow ? '1' : '0')); - } - - getHash() { - return this.light.uuid; - } - - setupShadow(builder) { - const { object, renderer } = builder; - - let shadowColorNode = this.shadowColorNode; - - if (shadowColorNode === null) { - if (overrideMaterial === null) { - overrideMaterial = builder.createNodeMaterial(); - overrideMaterial.fragmentNode = vec4(0, 0, 0, 1); - overrideMaterial.isShadowNodeMaterial = true; // Use to avoid other overrideMaterial override material.fragmentNode unintentionally when using material.shadowNode - overrideMaterial.name = 'ShadowMaterial'; - } - - const depthTexture = new DepthTexture(); - depthTexture.compareFunction = LessCompare; - - const shadow = this.light.shadow; - const shadowMap = builder.createRenderTarget(shadow.mapSize.width, shadow.mapSize.height); - shadowMap.depthTexture = depthTexture; - - shadow.camera.updateProjectionMatrix(); - - // - - const shadowIntensity = reference('intensity', 'float', shadow); - const bias = reference('bias', 'float', shadow); - const normalBias = reference('normalBias', 'float', shadow); - - const position = object.material.shadowPositionNode || positionWorld; - - let shadowCoord = uniform(shadow.matrix).mul(position.add(normalWorld.mul(normalBias))); - shadowCoord = shadowCoord.xyz.div(shadowCoord.w); - - let coordZ = shadowCoord.z.add(bias); - - if (renderer.coordinateSystem === WebGPUCoordinateSystem) { - coordZ = coordZ.mul(2).sub(1); // WebGPU: Convertion [ 0, 1 ] to [ - 1, 1 ] - } - - shadowCoord = vec3( - shadowCoord.x, - shadowCoord.y.oneMinus(), // follow webgpu standards - coordZ - ); - - const frustumTest = shadowCoord.x.greaterThanEqual(0).and(shadowCoord.x.lessThanEqual(1)).and(shadowCoord.y.greaterThanEqual(0)).and(shadowCoord.y.lessThanEqual(1)).and(shadowCoord.z.lessThanEqual(1)); - - // - - const filterFn = shadow.filterNode || shadowFilterLib[renderer.shadowMap.type] || null; - - if (filterFn === null) { - throw new Error('THREE.WebGPURenderer: Shadow map type not supported yet.'); - } - - const shadowColor = texture(shadowMap.texture, shadowCoord); - const shadowNode = frustumTest.select(filterFn({ depthTexture, shadowCoord, shadow }), float(1)); - - this.shadowMap = shadowMap; - - this.shadowNode = shadowNode; - this.shadowColorNode = shadowColorNode = this.colorNode.mul(mix(1, shadowNode.rgb.mix(shadowColor, 1), shadowIntensity.mul(shadowColor.a))); - - this.baseColorNode = this.colorNode; - } - - // - - this.colorNode = shadowColorNode; - - this.updateBeforeType = NodeUpdateType.RENDER; - } - - setup(builder) { - this.colorNode = this.baseColorNode || this.colorNode; - - if (this.light.castShadow) { - if (builder.object.receiveShadow) { - this.setupShadow(builder); - } - } else if (this.shadowNode !== null) { - this.disposeShadow(); - } - } - - updateShadow(frame) { - const { shadowMap, light } = this; - const { renderer, scene, camera } = frame; - - const depthVersion = shadowMap.depthTexture.version; - this._depthVersionCached = depthVersion; - - const currentOverrideMaterial = scene.overrideMaterial; - - scene.overrideMaterial = overrideMaterial; - - shadowMap.setSize(light.shadow.mapSize.width, light.shadow.mapSize.height); - - light.shadow.updateMatrices(light); - light.shadow.camera.layers.mask = camera.layers.mask; - - const currentRenderTarget = renderer.getRenderTarget(); - const currentRenderObjectFunction = renderer.getRenderObjectFunction(); - - renderer.setRenderObjectFunction((object, ...params) => { - if (object.castShadow === true) { - renderer.renderObject(object, ...params); - } - }); - - renderer.setRenderTarget(shadowMap); - renderer.render(scene, light.shadow.camera); - - renderer.setRenderTarget(currentRenderTarget); - renderer.setRenderObjectFunction(currentRenderObjectFunction); - - scene.overrideMaterial = currentOverrideMaterial; - } - - disposeShadow() { - this.shadowMap.dispose(); - this.shadowMap = null; - - this.shadowNode = null; - this.shadowColorNode = null; - - this.baseColorNode = null; - - this.updateBeforeType = NodeUpdateType.NONE; - } - - updateBefore(frame) { - const shadow = this.light.shadow; - - const needsUpdate = shadow.needsUpdate || shadow.autoUpdate; - - if (needsUpdate) { - this.updateShadow(frame); - - if (this.shadowMap.depthTexture.version === this._depthVersionCached) { - shadow.needsUpdate = false; - } - } - } - - update(/*frame*/) { - const { light } = this; - - this.color.copy(light.color).multiplyScalar(light.intensity); - } -} - -addNodeClass('AnalyticLightNode', AnalyticLightNode); - -const LightNodes = new WeakMap(); - -const sortLights = (lights) => { - return lights.sort((a, b) => a.id - b.id); -}; - -class LightsNode extends Node { - constructor(lightNodes = []) { - super('vec3'); - - this.totalDiffuseNode = vec3().temp('totalDiffuse'); - this.totalSpecularNode = vec3().temp('totalSpecular'); - - this.outgoingLightNode = vec3().temp('outgoingLight'); - - this.lightNodes = lightNodes; - - this._hash = null; - } - - get hasLight() { - return this.lightNodes.length > 0; - } - - getHash() { - if (this._hash === null) { - const hash = []; - - for (const lightNode of this.lightNodes) { - hash.push(lightNode.getHash()); - } - - this._hash = 'lights-' + hash.join(','); - } - - return this._hash; - } - - analyze(builder) { - const properties = builder.getDataFromNode(this); - - for (const node of properties.nodes) { - node.build(builder); - } - } - - setup(builder) { - const context = builder.context; - const lightingModel = context.lightingModel; - - let outgoingLightNode = this.outgoingLightNode; - - if (lightingModel) { - const { lightNodes, totalDiffuseNode, totalSpecularNode } = this; - - context.outgoingLight = outgoingLightNode; - - const stack = builder.addStack(); - - // - - const properties = builder.getDataFromNode(this); - properties.nodes = stack.nodes; - - // - - lightingModel.start(context, stack, builder); - - // lights - - for (const lightNode of lightNodes) { - lightNode.build(builder); - } - - // - - lightingModel.indirect(context, stack, builder); - - // - - const { backdrop, backdropAlpha } = context; - const { directDiffuse, directSpecular, indirectDiffuse, indirectSpecular } = context.reflectedLight; - - let totalDiffuse = directDiffuse.add(indirectDiffuse); - - if (backdrop !== null) { - if (backdropAlpha !== null) { - totalDiffuse = vec3(backdropAlpha.mix(totalDiffuse, backdrop)); - } else { - totalDiffuse = vec3(backdrop); - } - - context.material.transparent = true; - } - - totalDiffuseNode.assign(totalDiffuse); - totalSpecularNode.assign(directSpecular.add(indirectSpecular)); - - outgoingLightNode.assign(totalDiffuseNode.add(totalSpecularNode)); - - // - - lightingModel.finish(context, stack, builder); - - // - - outgoingLightNode = outgoingLightNode.bypass(builder.removeStack()); - } - - return outgoingLightNode; - } - - _getLightNodeById(id) { - for (const lightNode of this.lightNodes) { - if (lightNode.isAnalyticLightNode && lightNode.light.id === id) { - return lightNode; - } - } - - return null; - } - - fromLights(lights = []) { - const lightNodes = []; - - lights = sortLights(lights); - - for (const light of lights) { - let lightNode = this._getLightNodeById(light.id); - - if (lightNode === null) { - const lightClass = light.constructor; - const lightNodeClass = LightNodes.has(lightClass) ? LightNodes.get(lightClass) : AnalyticLightNode; - - lightNode = nodeObject(new lightNodeClass(light)); - } - - lightNodes.push(lightNode); - } - - this.lightNodes = lightNodes; - this._hash = null; - - return this; - } -} - -const lights = (lights) => nodeObject(new LightsNode().fromLights(lights)); -const lightsNode = nodeProxy(LightsNode); - -function addLightNode(lightClass, lightNodeClass) { - if (LightNodes.has(lightClass)) { - console.warn(`Redefinition of light node ${lightNodeClass.type}`); - return; - } - - if (typeof lightClass !== 'function') throw new Error(`Light ${lightClass.name} is not a class`); - if (typeof lightNodeClass !== 'function' || !lightNodeClass.type) throw new Error(`Light node ${lightNodeClass.type} is not a class`); - - LightNodes.set(lightClass, lightNodeClass); -} - -class AONode extends LightingNode { - constructor(aoNode = null) { - super(); - - this.aoNode = aoNode; - } - - setup(builder) { - builder.context.ambientOcclusion.mulAssign(this.aoNode); - } -} - -addNodeClass('AONode', AONode); - -class LightingContextNode extends ContextNode { - constructor(node, lightingModel = null, backdropNode = null, backdropAlphaNode = null) { - super(node); - - this.lightingModel = lightingModel; - this.backdropNode = backdropNode; - this.backdropAlphaNode = backdropAlphaNode; - - this._value = null; - } - - getContext() { - const { backdropNode, backdropAlphaNode } = this; - - const directDiffuse = vec3().temp('directDiffuse'), - directSpecular = vec3().temp('directSpecular'), - indirectDiffuse = vec3().temp('indirectDiffuse'), - indirectSpecular = vec3().temp('indirectSpecular'); - - const reflectedLight = { - directDiffuse, - directSpecular, - indirectDiffuse, - indirectSpecular, - }; - - const context = { - radiance: vec3().temp('radiance'), - irradiance: vec3().temp('irradiance'), - iblIrradiance: vec3().temp('iblIrradiance'), - ambientOcclusion: float(1).temp('ambientOcclusion'), - reflectedLight, - backdrop: backdropNode, - backdropAlpha: backdropAlphaNode, - }; - - return context; - } - - setup(builder) { - this.value = this._value || (this._value = this.getContext()); - this.value.lightingModel = this.lightingModel || builder.context.lightingModel; - - return super.setup(builder); - } -} - -const lightingContext = nodeProxy(LightingContextNode); - -addNodeElement('lightingContext', lightingContext); - -addNodeClass('LightingContextNode', LightingContextNode); - -class IrradianceNode extends LightingNode { - constructor(node) { - super(); - - this.node = node; - } - - setup(builder) { - builder.context.irradiance.addAssign(this.node); - } -} - -addNodeClass('IrradianceNode', IrradianceNode); - -let resolution, viewportResult; - -class ViewportNode extends Node { - constructor(scope) { - super(); - - this.scope = scope; - - this.isViewportNode = true; - } - - getNodeType() { - if (this.scope === ViewportNode.VIEWPORT) return 'vec4'; - else return 'vec2'; - } - - getUpdateType() { - let updateType = NodeUpdateType.NONE; - - if (this.scope === ViewportNode.RESOLUTION || this.scope === ViewportNode.VIEWPORT) { - updateType = NodeUpdateType.RENDER; - } - - this.updateType = updateType; - - return updateType; - } - - update({ renderer }) { - if (this.scope === ViewportNode.VIEWPORT) { - renderer.getViewport(viewportResult); - } else { - renderer.getDrawingBufferSize(resolution); - } - } - - setup(/*builder*/) { - const scope = this.scope; - - let output = null; - - if (scope === ViewportNode.RESOLUTION) { - output = uniform(resolution || (resolution = new Vector2())); - } else if (scope === ViewportNode.VIEWPORT) { - output = uniform(viewportResult || (viewportResult = new Vector4())); - } else { - output = vec2(viewportCoordinate.div(viewportResolution)); - } - - return output; - } - - generate(builder) { - if (this.scope === ViewportNode.COORDINATE) { - let coord = builder.getFragCoord(); - - if (builder.isFlipY()) { - // follow webgpu standards - - const resolution = builder.getNodeProperties(viewportResolution).outputNode.build(builder); - - coord = `${builder.getType('vec2')}( ${coord}.x, ${resolution}.y - ${coord}.y )`; - } - - return coord; - } - - return super.generate(builder); - } -} - -ViewportNode.COORDINATE = 'coordinate'; -ViewportNode.RESOLUTION = 'resolution'; -ViewportNode.VIEWPORT = 'viewport'; -ViewportNode.TOP_LEFT = 'topLeft'; -ViewportNode.BOTTOM_LEFT = 'bottomLeft'; -ViewportNode.TOP_RIGHT = 'topRight'; -ViewportNode.BOTTOM_RIGHT = 'bottomRight'; - -const viewportCoordinate = nodeImmutable(ViewportNode, ViewportNode.COORDINATE); -const viewportResolution = nodeImmutable(ViewportNode, ViewportNode.RESOLUTION); -const viewport = nodeImmutable(ViewportNode, ViewportNode.VIEWPORT); -const viewportUV = nodeImmutable(ViewportNode, ViewportNode.TOP_LEFT); - -const viewportTopLeft = /*@__PURE__*/ Fn(() => { - // @deprecated, r168 - - console.warn('TSL.ViewportNode: "viewportTopLeft" is deprecated. Use "viewportUV" instead.'); - - return viewportUV; -}, 'vec2').once()(); - -addNodeClass('ViewportNode', ViewportNode); - -const _size$a = /*@__PURE__*/ new Vector2(); - -class ViewportTextureNode extends TextureNode { - constructor(uvNode = viewportUV, levelNode = null, framebufferTexture = null) { - if (framebufferTexture === null) { - framebufferTexture = new FramebufferTexture(); - framebufferTexture.minFilter = LinearMipmapLinearFilter; - } - - super(framebufferTexture, uvNode, levelNode); - - this.generateMipmaps = false; - - this.isOutputTextureNode = true; - - this.updateBeforeType = NodeUpdateType.FRAME; - } - - updateBefore(frame) { - const renderer = frame.renderer; - renderer.getDrawingBufferSize(_size$a); - - // - - const framebufferTexture = this.value; - - if (framebufferTexture.image.width !== _size$a.width || framebufferTexture.image.height !== _size$a.height) { - framebufferTexture.image.width = _size$a.width; - framebufferTexture.image.height = _size$a.height; - framebufferTexture.needsUpdate = true; - } - - // - - const currentGenerateMipmaps = framebufferTexture.generateMipmaps; - framebufferTexture.generateMipmaps = this.generateMipmaps; - - renderer.copyFramebufferToTexture(framebufferTexture); - - framebufferTexture.generateMipmaps = currentGenerateMipmaps; - } - - clone() { - const viewportTextureNode = new this.constructor(this.uvNode, this.levelNode, this.value); - viewportTextureNode.generateMipmaps = this.generateMipmaps; - - return viewportTextureNode; - } -} - -const viewportTexture = nodeProxy(ViewportTextureNode); -const viewportMipTexture = nodeProxy(ViewportTextureNode, null, null, { generateMipmaps: true }); - -addNodeElement('viewportTexture', viewportTexture); -addNodeElement('viewportMipTexture', viewportMipTexture); - -addNodeClass('ViewportTextureNode', ViewportTextureNode); - -let sharedDepthbuffer = null; - -class ViewportDepthTextureNode extends ViewportTextureNode { - constructor(uvNode = viewportUV, levelNode = null) { - if (sharedDepthbuffer === null) { - sharedDepthbuffer = new DepthTexture(); - } - - super(uvNode, levelNode, sharedDepthbuffer); - } -} - -const viewportDepthTexture = nodeProxy(ViewportDepthTextureNode); - -addNodeElement('viewportDepthTexture', viewportDepthTexture); - -addNodeClass('ViewportDepthTextureNode', ViewportDepthTextureNode); - -class ViewportDepthNode extends Node { - constructor(scope, valueNode = null) { - super('float'); - - this.scope = scope; - this.valueNode = valueNode; - - this.isViewportDepthNode = true; - } - - generate(builder) { - const { scope } = this; - - if (scope === ViewportDepthNode.DEPTH_BASE) { - return builder.getFragDepth(); - } - - return super.generate(builder); - } - - setup({ camera }) { - const { scope } = this; - const value = this.valueNode; - - let node = null; - - if (scope === ViewportDepthNode.DEPTH_BASE) { - if (value !== null) { - node = depthBase().assign(value); - } - } else if (scope === ViewportDepthNode.DEPTH) { - if (camera.isPerspectiveCamera) { - node = viewZToPerspectiveDepth(positionView.z, cameraNear, cameraFar); - } else { - node = viewZToOrthographicDepth(positionView.z, cameraNear, cameraFar); - } - } else if (scope === ViewportDepthNode.LINEAR_DEPTH) { - if (value !== null) { - if (camera.isPerspectiveCamera) { - const viewZ = perspectiveDepthToViewZ(value, cameraNear, cameraFar); - - node = viewZToOrthographicDepth(viewZ, cameraNear, cameraFar); - } else { - node = value; - } - } else { - node = viewZToOrthographicDepth(positionView.z, cameraNear, cameraFar); - } - } - - return node; - } -} - -// NOTE: viewZ, the z-coordinate in camera space, is negative for points in front of the camera - -// -near maps to 0; -far maps to 1 -const viewZToOrthographicDepth = (viewZ, near, far) => viewZ.add(near).div(near.sub(far)); - -// maps orthographic depth in [ 0, 1 ] to viewZ -const orthographicDepthToViewZ = (depth, near, far) => near.sub(far).mul(depth).sub(near); - -// NOTE: https://twitter.com/gonnavis/status/1377183786949959682 - -// -near maps to 0; -far maps to 1 -const viewZToPerspectiveDepth = (viewZ, near, far) => near.add(viewZ).mul(far).div(far.sub(near).mul(viewZ)); - -// maps perspective depth in [ 0, 1 ] to viewZ -const perspectiveDepthToViewZ = (depth, near, far) => near.mul(far).div(far.sub(near).mul(depth).sub(far)); - -ViewportDepthNode.DEPTH_BASE = 'depthBase'; -ViewportDepthNode.DEPTH = 'depth'; -ViewportDepthNode.LINEAR_DEPTH = 'linearDepth'; - -const depthBase = nodeProxy(ViewportDepthNode, ViewportDepthNode.DEPTH_BASE); - -const depth = nodeImmutable(ViewportDepthNode, ViewportDepthNode.DEPTH); -const linearDepth = nodeProxy(ViewportDepthNode, ViewportDepthNode.LINEAR_DEPTH); -const viewportLinearDepth = linearDepth(viewportDepthTexture()); - -depth.assign = (value) => depthBase(value); - -addNodeClass('ViewportDepthNode', ViewportDepthNode); - -class ClippingNode extends Node { - constructor(scope = ClippingNode.DEFAULT) { - super(); - - this.scope = scope; - } - - setup(builder) { - super.setup(builder); - - const clippingContext = builder.clippingContext; - const { localClipIntersection, localClippingCount, globalClippingCount } = clippingContext; - - const numClippingPlanes = globalClippingCount + localClippingCount; - const numUnionClippingPlanes = localClipIntersection ? numClippingPlanes - localClippingCount : numClippingPlanes; - - if (this.scope === ClippingNode.ALPHA_TO_COVERAGE) { - return this.setupAlphaToCoverage(clippingContext.planes, numClippingPlanes, numUnionClippingPlanes); - } else { - return this.setupDefault(clippingContext.planes, numClippingPlanes, numUnionClippingPlanes); - } - } - - setupAlphaToCoverage(planes, numClippingPlanes, numUnionClippingPlanes) { - return Fn(() => { - const clippingPlanes = uniformArray(planes); - - const distanceToPlane = property('float', 'distanceToPlane'); - const distanceGradient = property('float', 'distanceToGradient'); - - const clipOpacity = property('float', 'clipOpacity'); - - clipOpacity.assign(1); - - let plane; - - Loop(numUnionClippingPlanes, ({ i }) => { - plane = clippingPlanes.element(i); - - distanceToPlane.assign(positionView.dot(plane.xyz).negate().add(plane.w)); - distanceGradient.assign(distanceToPlane.fwidth().div(2.0)); - - clipOpacity.mulAssign(smoothstep(distanceGradient.negate(), distanceGradient, distanceToPlane)); - - clipOpacity.equal(0.0).discard(); - }); - - if (numUnionClippingPlanes < numClippingPlanes) { - const unionClipOpacity = property('float', 'unionclipOpacity'); - - unionClipOpacity.assign(1); - - Loop({ start: numUnionClippingPlanes, end: numClippingPlanes }, ({ i }) => { - plane = clippingPlanes.element(i); - - distanceToPlane.assign(positionView.dot(plane.xyz).negate().add(plane.w)); - distanceGradient.assign(distanceToPlane.fwidth().div(2.0)); - - unionClipOpacity.mulAssign(smoothstep(distanceGradient.negate(), distanceGradient, distanceToPlane).oneMinus()); - }); - - clipOpacity.mulAssign(unionClipOpacity.oneMinus()); - } - - diffuseColor.a.mulAssign(clipOpacity); - - diffuseColor.a.equal(0.0).discard(); - })(); - } - - setupDefault(planes, numClippingPlanes, numUnionClippingPlanes) { - return Fn(() => { - const clippingPlanes = uniformArray(planes); - - let plane; - - Loop(numUnionClippingPlanes, ({ i }) => { - plane = clippingPlanes.element(i); - positionView.dot(plane.xyz).greaterThan(plane.w).discard(); - }); - - if (numUnionClippingPlanes < numClippingPlanes) { - const clipped = property('bool', 'clipped'); - - clipped.assign(true); - - Loop({ start: numUnionClippingPlanes, end: numClippingPlanes }, ({ i }) => { - plane = clippingPlanes.element(i); - clipped.assign(positionView.dot(plane.xyz).greaterThan(plane.w).and(clipped)); - }); - - clipped.discard(); - } - })(); - } -} - -ClippingNode.ALPHA_TO_COVERAGE = 'alphaToCoverage'; -ClippingNode.DEFAULT = 'default'; - -const clipping = () => nodeObject(new ClippingNode()); - -const clippingAlpha = () => nodeObject(new ClippingNode(ClippingNode.ALPHA_TO_COVERAGE)); - -const NodeMaterials = new Map(); - -class NodeMaterial extends Material { - constructor() { - super(); - - this.isNodeMaterial = true; - - this.type = this.constructor.type; - - this.forceSinglePass = false; - - this.fog = true; - this.lights = false; - - this.lightsNode = null; - this.envNode = null; - this.aoNode = null; - - this.colorNode = null; - this.normalNode = null; - this.opacityNode = null; - this.backdropNode = null; - this.backdropAlphaNode = null; - this.alphaTestNode = null; - - this.positionNode = null; - - this.depthNode = null; - this.shadowNode = null; - this.shadowPositionNode = null; - - this.outputNode = null; - this.mrtNode = null; - - this.fragmentNode = null; - this.vertexNode = null; - } - - customProgramCacheKey() { - return this.type + getCacheKey$1(this); - } - - build(builder) { - this.setup(builder); - } - - setup(builder) { - builder.context.setupNormal = () => this.setupNormal(builder); - - // < VERTEX STAGE > - - builder.addStack(); - - builder.stack.outputNode = this.vertexNode || this.setupPosition(builder); - - builder.addFlow('vertex', builder.removeStack()); - - // < FRAGMENT STAGE > - - builder.addStack(); - - let resultNode; - - const clippingNode = this.setupClipping(builder); - - if (this.depthWrite === true) this.setupDepth(builder); - - if (this.fragmentNode === null) { - this.setupDiffuseColor(builder); - this.setupVariants(builder); - - const outgoingLightNode = this.setupLighting(builder); - - if (clippingNode !== null) builder.stack.add(clippingNode); - - // force unsigned floats - useful for RenderTargets - - const basicOutput = vec4(outgoingLightNode, diffuseColor.a).max(0); - - resultNode = this.setupOutput(builder, basicOutput); - - // OUTPUT NODE - - output.assign(resultNode); - - // - - if (this.outputNode !== null) resultNode = this.outputNode; - - // MRT - - const renderTarget = builder.renderer.getRenderTarget(); - - if (renderTarget !== null) { - const mrt = builder.renderer.getMRT(); - const materialMRT = this.mrtNode; - - if (mrt !== null) { - resultNode = mrt; - - if (materialMRT !== null) { - resultNode = mrt.merge(materialMRT); - } - } else if (materialMRT !== null) { - resultNode = materialMRT; - } - } - } else { - let fragmentNode = this.fragmentNode; - - if (fragmentNode.isOutputStructNode !== true) { - fragmentNode = vec4(fragmentNode); - } - - resultNode = this.setupOutput(builder, fragmentNode); - } - - builder.stack.outputNode = resultNode; - - builder.addFlow('fragment', builder.removeStack()); - } - - setupClipping(builder) { - if (builder.clippingContext === null) return null; - - const { globalClippingCount, localClippingCount } = builder.clippingContext; - - let result = null; - - if (globalClippingCount || localClippingCount) { - if (this.alphaToCoverage) { - // to be added to flow when the color/alpha value has been determined - result = clippingAlpha(); - } else { - builder.stack.add(clipping()); - } - } - - return result; - } - - setupDepth(builder) { - const { renderer } = builder; - - // Depth - - let depthNode = this.depthNode; - - if (depthNode === null) { - const mrt = renderer.getMRT(); - - if (mrt && mrt.has('depth')) { - depthNode = mrt.get('depth'); - } else if (renderer.logarithmicDepthBuffer === true) { - const fragDepth = modelViewProjection().w.add(1); - - depthNode = fragDepth.log2().mul(cameraLogDepth).mul(0.5); - } - } - - if (depthNode !== null) { - depth.assign(depthNode).append(); - } - } - - setupPosition(builder) { - const { object } = builder; - const geometry = object.geometry; - - builder.addStack(); - - // Vertex - - if (geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color) { - morphReference(object).append(); - } - - if (object.isSkinnedMesh === true) { - skinningReference(object).append(); - } - - if (this.displacementMap) { - const displacementMap = materialReference('displacementMap', 'texture'); - const displacementScale = materialReference('displacementScale', 'float'); - const displacementBias = materialReference('displacementBias', 'float'); - - positionLocal.addAssign(normalLocal.normalize().mul(displacementMap.x.mul(displacementScale).add(displacementBias))); - } - - if (object.isBatchedMesh) { - batch(object).append(); - } - - if (object.instanceMatrix && object.instanceMatrix.isInstancedBufferAttribute === true) { - instance(object).append(); - } - - if (this.positionNode !== null) { - positionLocal.assign(this.positionNode); - } - - const mvp = modelViewProjection(); - - builder.context.vertex = builder.removeStack(); - builder.context.mvp = mvp; - - return mvp; - } - - setupDiffuseColor({ object, geometry }) { - let colorNode = this.colorNode ? vec4(this.colorNode) : materialColor; - - // VERTEX COLORS - - if (this.vertexColors === true && geometry.hasAttribute('color')) { - colorNode = vec4(colorNode.xyz.mul(attribute('color', 'vec3')), colorNode.a); - } - - // Instanced colors - - if (object.instanceColor) { - const instanceColor = varyingProperty('vec3', 'vInstanceColor'); - - colorNode = instanceColor.mul(colorNode); - } - - if (object.isBatchedMesh && object._colorsTexture) { - const batchColor = varyingProperty('vec3', 'vBatchColor'); - - colorNode = batchColor.mul(colorNode); - } - - // COLOR - - diffuseColor.assign(colorNode); - - // OPACITY - - const opacityNode = this.opacityNode ? float(this.opacityNode) : materialOpacity; - diffuseColor.a.assign(diffuseColor.a.mul(opacityNode)); - - // ALPHA TEST - - if (this.alphaTestNode !== null || this.alphaTest > 0) { - const alphaTestNode = this.alphaTestNode !== null ? float(this.alphaTestNode) : materialAlphaTest; - - diffuseColor.a.lessThanEqual(alphaTestNode).discard(); - } - - if (this.transparent === false && this.blending === NormalBlending && this.alphaToCoverage === false) { - diffuseColor.a.assign(1.0); - } - } - - setupVariants(/*builder*/) { - // Interface function. - } - - setupOutgoingLight() { - return this.lights === true ? vec3(0) : diffuseColor.rgb; - } - - setupNormal() { - return this.normalNode ? vec3(this.normalNode) : materialNormal; - } - - setupEnvironment(/*builder*/) { - let node = null; - - if (this.envNode) { - node = this.envNode; - } else if (this.envMap) { - node = this.envMap.isCubeTexture ? materialReference('envMap', 'cubeTexture') : materialReference('envMap', 'texture'); - } - - return node; - } - - setupLightMap(builder) { - let node = null; - - if (builder.material.lightMap) { - node = new IrradianceNode(materialLightMap); - } - - return node; - } - - setupLights(builder) { - const materialLightsNode = []; - - // - - const envNode = this.setupEnvironment(builder); - - if (envNode && envNode.isLightingNode) { - materialLightsNode.push(envNode); - } - - const lightMapNode = this.setupLightMap(builder); - - if (lightMapNode && lightMapNode.isLightingNode) { - materialLightsNode.push(lightMapNode); - } - - if (this.aoNode !== null || builder.material.aoMap) { - const aoNode = this.aoNode !== null ? this.aoNode : materialAOMap; - - materialLightsNode.push(new AONode(aoNode)); - } - - let lightsN = this.lightsNode || builder.lightsNode; - - if (materialLightsNode.length > 0) { - lightsN = lightsNode([...lightsN.lightNodes, ...materialLightsNode]); - } - - return lightsN; - } - - setupLightingModel(/*builder*/) { - // Interface function. - } - - setupLighting(builder) { - const { material } = builder; - const { backdropNode, backdropAlphaNode, emissiveNode } = this; - - // OUTGOING LIGHT - - const lights = this.lights === true || this.lightsNode !== null; - - const lightsNode = lights ? this.setupLights(builder) : null; - - let outgoingLightNode = this.setupOutgoingLight(builder); - - if (lightsNode && lightsNode.hasLight !== false) { - const lightingModel = this.setupLightingModel(builder); - - outgoingLightNode = lightingContext(lightsNode, lightingModel, backdropNode, backdropAlphaNode); - } else if (backdropNode !== null) { - outgoingLightNode = vec3(backdropAlphaNode !== null ? mix(outgoingLightNode, backdropNode, backdropAlphaNode) : backdropNode); - } - - // EMISSIVE - - if ((emissiveNode && emissiveNode.isNode === true) || (material.emissive && material.emissive.isColor === true)) { - emissive.assign(vec3(emissiveNode ? emissiveNode : materialEmissive)); - - outgoingLightNode = outgoingLightNode.add(emissive); - } - - return outgoingLightNode; - } - - setupOutput(builder, outputNode) { - // FOG - - if (this.fog === true) { - const fogNode = builder.fogNode; - - if (fogNode) outputNode = vec4(fogNode.mix(outputNode.rgb, fogNode.colorNode), outputNode.a); - } - - return outputNode; - } - - setDefaultValues(material) { - // This approach is to reuse the native refreshUniforms* - // and turn available the use of features like transmission and environment in core - - for (const property in material) { - const value = material[property]; - - if (this[property] === undefined) { - this[property] = value; - - if (value && value.clone) this[property] = value.clone(); - } - } - - const descriptors = Object.getOwnPropertyDescriptors(material.constructor.prototype); - - for (const key in descriptors) { - if (Object.getOwnPropertyDescriptor(this.constructor.prototype, key) === undefined && descriptors[key].get !== undefined) { - Object.defineProperty(this.constructor.prototype, key, descriptors[key]); - } - } - } - - toJSON(meta) { - const isRoot = meta === undefined || typeof meta === 'string'; - - if (isRoot) { - meta = { - textures: {}, - images: {}, - nodes: {}, - }; - } - - const data = Material.prototype.toJSON.call(this, meta); - const nodeChildren = getNodeChildren(this); - - data.inputNodes = {}; - - for (const { property, childNode } of nodeChildren) { - data.inputNodes[property] = childNode.toJSON(meta).uuid; - } - - // TODO: Copied from Object3D.toJSON - - function extractFromCache(cache) { - const values = []; - - for (const key in cache) { - const data = cache[key]; - delete data.metadata; - values.push(data); - } - - return values; - } - - if (isRoot) { - const textures = extractFromCache(meta.textures); - const images = extractFromCache(meta.images); - const nodes = extractFromCache(meta.nodes); - - if (textures.length > 0) data.textures = textures; - if (images.length > 0) data.images = images; - if (nodes.length > 0) data.nodes = nodes; - } - - return data; - } - - copy(source) { - this.lightsNode = source.lightsNode; - this.envNode = source.envNode; - - this.colorNode = source.colorNode; - this.normalNode = source.normalNode; - this.opacityNode = source.opacityNode; - this.backdropNode = source.backdropNode; - this.backdropAlphaNode = source.backdropAlphaNode; - this.alphaTestNode = source.alphaTestNode; - - this.positionNode = source.positionNode; - - this.depthNode = source.depthNode; - this.shadowNode = source.shadowNode; - this.shadowPositionNode = source.shadowPositionNode; - - this.outputNode = source.outputNode; - this.mrtNode = source.mrtNode; - - this.fragmentNode = source.fragmentNode; - this.vertexNode = source.vertexNode; - - return super.copy(source); - } - - static fromMaterial(material) { - if (material.isNodeMaterial === true) { - // is already a node material - - return material; - } - - const type = material.type.replace('Material', 'NodeMaterial'); - - const nodeMaterial = createNodeMaterialFromType(type); - - if (nodeMaterial === undefined) { - throw new Error(`NodeMaterial: Material "${material.type}" is not compatible.`); - } - - for (const key in material) { - nodeMaterial[key] = material[key]; - } - - return nodeMaterial; - } -} - -function addNodeMaterial(type, nodeMaterial) { - if (typeof nodeMaterial !== 'function' || !type) throw new Error(`Node material ${type} is not a class`); - if (NodeMaterials.has(type)) { - console.warn(`Redefinition of node material ${type}`); - return; - } - - NodeMaterials.set(type, nodeMaterial); - nodeMaterial.type = type; -} - -function createNodeMaterialFromType(type) { - const Material = NodeMaterials.get(type); - - if (Material !== undefined) { - return new Material(); - } -} - -addNodeMaterial('NodeMaterial', NodeMaterial); - -class Uniform { - constructor(name, value) { - this.name = name; - this.value = value; - - this.boundary = 0; // used to build the uniform buffer according to the STD140 layout - this.itemSize = 0; - - this.offset = 0; // this property is set by WebGPUUniformsGroup and marks the start position in the uniform buffer - } - - setValue(value) { - this.value = value; - } - - getValue() { - return this.value; - } -} - -class NumberUniform extends Uniform { - constructor(name, value = 0) { - super(name, value); - - this.isNumberUniform = true; - - this.boundary = 4; - this.itemSize = 1; - } -} - -class Vector2Uniform extends Uniform { - constructor(name, value = new Vector2()) { - super(name, value); - - this.isVector2Uniform = true; - - this.boundary = 8; - this.itemSize = 2; - } -} - -class Vector3Uniform extends Uniform { - constructor(name, value = new Vector3()) { - super(name, value); - - this.isVector3Uniform = true; - - this.boundary = 16; - this.itemSize = 3; - } -} - -class Vector4Uniform extends Uniform { - constructor(name, value = new Vector4()) { - super(name, value); - - this.isVector4Uniform = true; - - this.boundary = 16; - this.itemSize = 4; - } -} - -class ColorUniform extends Uniform { - constructor(name, value = new Color()) { - super(name, value); - - this.isColorUniform = true; - - this.boundary = 16; - this.itemSize = 3; - } -} - -class Matrix3Uniform extends Uniform { - constructor(name, value = new Matrix3()) { - super(name, value); - - this.isMatrix3Uniform = true; - - this.boundary = 48; - this.itemSize = 12; - } -} - -class Matrix4Uniform extends Uniform { - constructor(name, value = new Matrix4()) { - super(name, value); - - this.isMatrix4Uniform = true; - - this.boundary = 64; - this.itemSize = 16; - } -} - -class NumberNodeUniform extends NumberUniform { - constructor(nodeUniform) { - super(nodeUniform.name, nodeUniform.value); - - this.nodeUniform = nodeUniform; - } - - getValue() { - return this.nodeUniform.value; - } -} - -class Vector2NodeUniform extends Vector2Uniform { - constructor(nodeUniform) { - super(nodeUniform.name, nodeUniform.value); - - this.nodeUniform = nodeUniform; - } - - getValue() { - return this.nodeUniform.value; - } -} - -class Vector3NodeUniform extends Vector3Uniform { - constructor(nodeUniform) { - super(nodeUniform.name, nodeUniform.value); - - this.nodeUniform = nodeUniform; - } - - getValue() { - return this.nodeUniform.value; - } -} - -class Vector4NodeUniform extends Vector4Uniform { - constructor(nodeUniform) { - super(nodeUniform.name, nodeUniform.value); - - this.nodeUniform = nodeUniform; - } - - getValue() { - return this.nodeUniform.value; - } -} - -class ColorNodeUniform extends ColorUniform { - constructor(nodeUniform) { - super(nodeUniform.name, nodeUniform.value); - - this.nodeUniform = nodeUniform; - } - - getValue() { - return this.nodeUniform.value; - } -} - -class Matrix3NodeUniform extends Matrix3Uniform { - constructor(nodeUniform) { - super(nodeUniform.name, nodeUniform.value); - - this.nodeUniform = nodeUniform; - } - - getValue() { - return this.nodeUniform.value; - } -} - -class Matrix4NodeUniform extends Matrix4Uniform { - constructor(nodeUniform) { - super(nodeUniform.name, nodeUniform.value); - - this.nodeUniform = nodeUniform; - } - - getValue() { - return this.nodeUniform.value; - } -} - -class CondNode extends Node { - constructor(condNode, ifNode, elseNode = null) { - super(); - - this.condNode = condNode; - - this.ifNode = ifNode; - this.elseNode = elseNode; - } - - getNodeType(builder) { - const ifType = this.ifNode.getNodeType(builder); - - if (this.elseNode !== null) { - const elseType = this.elseNode.getNodeType(builder); - - if (builder.getTypeLength(elseType) > builder.getTypeLength(ifType)) { - return elseType; - } - } - - return ifType; - } - - setup(builder) { - const properties = builder.getNodeProperties(this); - properties.condNode = this.condNode.cache(); - properties.ifNode = this.ifNode.cache(); - properties.elseNode = this.elseNode ? this.elseNode.cache() : null; - } - - generate(builder, output) { - const type = this.getNodeType(builder); - - const nodeData = builder.getDataFromNode(this); - - if (nodeData.nodeProperty !== undefined) { - return nodeData.nodeProperty; - } - - const { condNode, ifNode, elseNode } = builder.getNodeProperties(this); - - const needsOutput = output !== 'void'; - const nodeProperty = needsOutput ? property(type).build(builder) : ''; - - nodeData.nodeProperty = nodeProperty; - - const nodeSnippet = condNode.build(builder, 'bool'); - - builder.addFlowCode(`\n${builder.tab}if ( ${nodeSnippet} ) {\n\n`).addFlowTab(); - - let ifSnippet = ifNode.build(builder, type); - - if (ifSnippet) { - if (needsOutput) { - ifSnippet = nodeProperty + ' = ' + ifSnippet + ';'; - } else { - ifSnippet = 'return ' + ifSnippet + ';'; - } - } - - builder.removeFlowTab().addFlowCode(builder.tab + '\t' + ifSnippet + '\n\n' + builder.tab + '}'); - - if (elseNode !== null) { - builder.addFlowCode(' else {\n\n').addFlowTab(); - - let elseSnippet = elseNode.build(builder, type); - - if (elseSnippet) { - if (needsOutput) { - elseSnippet = nodeProperty + ' = ' + elseSnippet + ';'; - } else { - elseSnippet = 'return ' + elseSnippet + ';'; - } - } - - builder.removeFlowTab().addFlowCode(builder.tab + '\t' + elseSnippet + '\n\n' + builder.tab + '}\n\n'); - } else { - builder.addFlowCode('\n\n'); - } - - return builder.format(nodeProperty, type, output); - } -} - -const select = nodeProxy(CondNode); - -addNodeElement('select', select); - -addNodeClass('CondNode', CondNode); - -// - -const cond = (...params) => { - // @deprecated, r168 - - console.warn('TSL.CondNode: cond() has been renamed to select().'); - return select(...params); -}; - -addNodeElement('cond', cond); - -class StackNode extends Node { - constructor(parent = null) { - super(); - - this.nodes = []; - this.outputNode = null; - - this.parent = parent; - - this._currentCond = null; - - this.isStackNode = true; - } - - getNodeType(builder) { - return this.outputNode ? this.outputNode.getNodeType(builder) : 'void'; - } - - add(node) { - this.nodes.push(node); - - return this; - } - - If(boolNode, method) { - const methodNode = new ShaderNode(method); - this._currentCond = select(boolNode, methodNode); - - return this.add(this._currentCond); - } - - ElseIf(boolNode, method) { - const methodNode = new ShaderNode(method); - const ifNode = select(boolNode, methodNode); - - this._currentCond.elseNode = ifNode; - this._currentCond = ifNode; - - return this; - } - - Else(method) { - this._currentCond.elseNode = new ShaderNode(method); - - return this; - } - - build(builder, ...params) { - const previousStack = getCurrentStack(); - - setCurrentStack(this); - - for (const node of this.nodes) { - node.build(builder, 'void'); - } - - setCurrentStack(previousStack); - - return this.outputNode ? this.outputNode.build(builder, ...params) : super.build(builder, ...params); - } - - // - - else(...params) { - // @deprecated, r168 - - console.warn('TSL.StackNode: .else() has been renamed to .Else().'); - return this.Else(...params); - } - - elseif(...params) { - // @deprecated, r168 - - console.warn('TSL.StackNode: .elseif() has been renamed to .ElseIf().'); - return this.ElseIf(...params); - } -} - -const stack = nodeProxy(StackNode); - -addNodeClass('StackNode', StackNode); - -class EquirectUVNode extends TempNode { - constructor(dirNode = positionWorldDirection) { - super('vec2'); - - this.dirNode = dirNode; - } - - setup() { - const dir = this.dirNode; - - const u = dir.z - .atan2(dir.x) - .mul(1 / (Math.PI * 2)) - .add(0.5); - const v = dir.y - .clamp(-1.0, 1.0) - .asin() - .mul(1 / Math.PI) - .add(0.5); - - return vec2(u, v); - } -} - -const equirectUV = nodeProxy(EquirectUVNode); - -addNodeClass('EquirectUVNode', EquirectUVNode); - -// @TODO: Consider rename WebGLCubeRenderTarget to just CubeRenderTarget - -class CubeRenderTarget extends WebGLCubeRenderTarget { - constructor(size = 1, options = {}) { - super(size, options); - - this.isCubeRenderTarget = true; - } - - fromEquirectangularTexture(renderer, texture$1) { - const currentMinFilter = texture$1.minFilter; - const currentGenerateMipmaps = texture$1.generateMipmaps; - - texture$1.generateMipmaps = true; - - this.texture.type = texture$1.type; - this.texture.colorSpace = texture$1.colorSpace; - - this.texture.generateMipmaps = texture$1.generateMipmaps; - this.texture.minFilter = texture$1.minFilter; - this.texture.magFilter = texture$1.magFilter; - - const geometry = new BoxGeometry(5, 5, 5); - - const uvNode = equirectUV(positionWorldDirection); - - const material = createNodeMaterialFromType('MeshBasicNodeMaterial'); - material.colorNode = texture(texture$1, uvNode, 0); - material.side = BackSide; - material.blending = NoBlending; - - const mesh = new Mesh(geometry, material); - - const scene = new Scene(); - scene.add(mesh); - - // Avoid blurred poles - if (texture$1.minFilter === LinearMipmapLinearFilter) texture$1.minFilter = LinearFilter; - - const camera = new CubeCamera(1, 10, this); - - const currentMRT = renderer.getMRT(); - renderer.setMRT(null); - - camera.update(renderer, scene); - - renderer.setMRT(currentMRT); - - texture$1.minFilter = currentMinFilter; - texture$1.currentGenerateMipmaps = currentGenerateMipmaps; - - mesh.geometry.dispose(); - mesh.material.dispose(); - - return this; - } -} - -// These defines must match with PMREMGenerator - -const cubeUV_r0 = float(1.0); -const cubeUV_m0 = float(-2.0); -const cubeUV_r1 = float(0.8); -const cubeUV_m1 = float(-1.0); -const cubeUV_r4 = float(0.4); -const cubeUV_m4 = float(2.0); -const cubeUV_r5 = float(0.305); -const cubeUV_m5 = float(3.0); -const cubeUV_r6 = float(0.21); -const cubeUV_m6 = float(4.0); - -const cubeUV_minMipLevel = float(4.0); -const cubeUV_minTileSize = float(16.0); - -// These shader functions convert between the UV coordinates of a single face of -// a cubemap, the 0-5 integer index of a cube face, and the direction vector for -// sampling a textureCube (not generally normalized ). - -const getFace = Fn(([direction]) => { - const absDirection = vec3(abs(direction)).toVar(); - const face = float(-1.0).toVar(); - - If(absDirection.x.greaterThan(absDirection.z), () => { - If(absDirection.x.greaterThan(absDirection.y), () => { - face.assign(select(direction.x.greaterThan(0.0), 0.0, 3.0)); - }).Else(() => { - face.assign(select(direction.y.greaterThan(0.0), 1.0, 4.0)); - }); - }).Else(() => { - If(absDirection.z.greaterThan(absDirection.y), () => { - face.assign(select(direction.z.greaterThan(0.0), 2.0, 5.0)); - }).Else(() => { - face.assign(select(direction.y.greaterThan(0.0), 1.0, 4.0)); - }); - }); - - return face; -}).setLayout({ - name: 'getFace', - type: 'float', - inputs: [{ name: 'direction', type: 'vec3' }], -}); - -// RH coordinate system; PMREM face-indexing convention -const getUV = Fn(([direction, face]) => { - const uv = vec2().toVar(); - - If(face.equal(0.0), () => { - uv.assign(vec2(direction.z, direction.y).div(abs(direction.x))); // pos x - }) - .ElseIf(face.equal(1.0), () => { - uv.assign(vec2(direction.x.negate(), direction.z.negate()).div(abs(direction.y))); // pos y - }) - .ElseIf(face.equal(2.0), () => { - uv.assign(vec2(direction.x.negate(), direction.y).div(abs(direction.z))); // pos z - }) - .ElseIf(face.equal(3.0), () => { - uv.assign(vec2(direction.z.negate(), direction.y).div(abs(direction.x))); // neg x - }) - .ElseIf(face.equal(4.0), () => { - uv.assign(vec2(direction.x.negate(), direction.z).div(abs(direction.y))); // neg y - }) - .Else(() => { - uv.assign(vec2(direction.x, direction.y).div(abs(direction.z))); // neg z - }); - - return mul(0.5, uv.add(1.0)); -}).setLayout({ - name: 'getUV', - type: 'vec2', - inputs: [ - { name: 'direction', type: 'vec3' }, - { name: 'face', type: 'float' }, - ], -}); - -const roughnessToMip = Fn(([roughness]) => { - const mip = float(0.0).toVar(); - - If(roughness.greaterThanEqual(cubeUV_r1), () => { - mip.assign(cubeUV_r0.sub(roughness).mul(cubeUV_m1.sub(cubeUV_m0)).div(cubeUV_r0.sub(cubeUV_r1)).add(cubeUV_m0)); - }) - .ElseIf(roughness.greaterThanEqual(cubeUV_r4), () => { - mip.assign(cubeUV_r1.sub(roughness).mul(cubeUV_m4.sub(cubeUV_m1)).div(cubeUV_r1.sub(cubeUV_r4)).add(cubeUV_m1)); - }) - .ElseIf(roughness.greaterThanEqual(cubeUV_r5), () => { - mip.assign(cubeUV_r4.sub(roughness).mul(cubeUV_m5.sub(cubeUV_m4)).div(cubeUV_r4.sub(cubeUV_r5)).add(cubeUV_m4)); - }) - .ElseIf(roughness.greaterThanEqual(cubeUV_r6), () => { - mip.assign(cubeUV_r5.sub(roughness).mul(cubeUV_m6.sub(cubeUV_m5)).div(cubeUV_r5.sub(cubeUV_r6)).add(cubeUV_m5)); - }) - .Else(() => { - mip.assign(float(-2.0).mul(log2(mul(1.16, roughness)))); // 1.16 = 1.79^0.25 - }); - - return mip; -}).setLayout({ - name: 'roughnessToMip', - type: 'float', - inputs: [{ name: 'roughness', type: 'float' }], -}); - -// RH coordinate system; PMREM face-indexing convention -const getDirection = Fn(([uv_immutable, face]) => { - const uv = uv_immutable.toVar(); - uv.assign(mul(2.0, uv).sub(1.0)); - const direction = vec3(uv, 1.0).toVar(); - - If(face.equal(0.0), () => { - direction.assign(direction.zyx); // ( 1, v, u ) pos x - }) - .ElseIf(face.equal(1.0), () => { - direction.assign(direction.xzy); - direction.xz.mulAssign(-1.0); // ( -u, 1, -v ) pos y - }) - .ElseIf(face.equal(2.0), () => { - direction.x.mulAssign(-1.0); // ( -u, v, 1 ) pos z - }) - .ElseIf(face.equal(3.0), () => { - direction.assign(direction.zyx); - direction.xz.mulAssign(-1.0); // ( -1, v, -u ) neg x - }) - .ElseIf(face.equal(4.0), () => { - direction.assign(direction.xzy); - direction.xy.mulAssign(-1.0); // ( -u, -1, v ) neg y - }) - .ElseIf(face.equal(5.0), () => { - direction.z.mulAssign(-1.0); // ( u, v, -1 ) neg zS - }); - - return direction; -}).setLayout({ - name: 'getDirection', - type: 'vec3', - inputs: [ - { name: 'uv', type: 'vec2' }, - { name: 'face', type: 'float' }, - ], -}); - -// - -const textureCubeUV = Fn(([envMap, sampleDir_immutable, roughness_immutable, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP]) => { - const roughness = float(roughness_immutable); - const sampleDir = vec3(sampleDir_immutable); - - const mip = clamp(roughnessToMip(roughness), cubeUV_m0, CUBEUV_MAX_MIP); - const mipF = fract(mip); - const mipInt = floor(mip); - const color0 = vec3(bilinearCubeUV(envMap, sampleDir, mipInt, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP)).toVar(); - - If(mipF.notEqual(0.0), () => { - const color1 = vec3(bilinearCubeUV(envMap, sampleDir, mipInt.add(1.0), CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP)).toVar(); - - color0.assign(mix(color0, color1, mipF)); - }); - - return color0; -}); - -const bilinearCubeUV = Fn(([envMap, direction_immutable, mipInt_immutable, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP]) => { - const mipInt = float(mipInt_immutable).toVar(); - const direction = vec3(direction_immutable); - const face = float(getFace(direction)).toVar(); - const filterInt = float(max$1(cubeUV_minMipLevel.sub(mipInt), 0.0)).toVar(); - mipInt.assign(max$1(mipInt, cubeUV_minMipLevel)); - const faceSize = float(exp2(mipInt)).toVar(); - const uv = vec2(getUV(direction, face).mul(faceSize.sub(2.0)).add(1.0)).toVar(); - - If(face.greaterThan(2.0), () => { - uv.y.addAssign(faceSize); - face.subAssign(3.0); - }); - - uv.x.addAssign(face.mul(faceSize)); - uv.x.addAssign(filterInt.mul(mul(3.0, cubeUV_minTileSize))); - uv.y.addAssign(mul(4.0, exp2(CUBEUV_MAX_MIP).sub(faceSize))); - uv.x.mulAssign(CUBEUV_TEXEL_WIDTH); - uv.y.mulAssign(CUBEUV_TEXEL_HEIGHT); - - return envMap.uv(uv).grad(vec2(), vec2()); // disable anisotropic filtering -}); - -const getSample = Fn(({ envMap, mipInt, outputDirection, theta, axis, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP }) => { - const cosTheta = cos(theta); - - // Rodrigues' axis-angle rotation - const sampleDirection = outputDirection - .mul(cosTheta) - .add(axis.cross(outputDirection).mul(sin(theta))) - .add(axis.mul(axis.dot(outputDirection).mul(cosTheta.oneMinus()))); - - return bilinearCubeUV(envMap, sampleDirection, mipInt, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP); -}); - -const blur = Fn(({ n, latitudinal, poleAxis, outputDirection, weights, samples, dTheta, mipInt, envMap, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP }) => { - const axis = vec3(select(latitudinal, poleAxis, cross(poleAxis, outputDirection))).toVar(); - - If(all(axis.equals(vec3(0.0))), () => { - axis.assign(vec3(outputDirection.z, 0.0, outputDirection.x.negate())); - }); - - axis.assign(normalize(axis)); - - const gl_FragColor = vec3().toVar(); - gl_FragColor.addAssign(weights.element(int(0)).mul(getSample({ theta: 0.0, axis, outputDirection, mipInt, envMap, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP }))); - - Loop({ start: int(1), end: n }, ({ i }) => { - If(i.greaterThanEqual(samples), () => { - Break(); - }); - - const theta = float(dTheta.mul(float(i))).toVar(); - gl_FragColor.addAssign(weights.element(i).mul(getSample({ theta: theta.mul(-1.0), axis, outputDirection, mipInt, envMap, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP }))); - gl_FragColor.addAssign(weights.element(i).mul(getSample({ theta, axis, outputDirection, mipInt, envMap, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP }))); - }); - - return vec4(gl_FragColor, 1); -}); - -const LOD_MIN = 4; - -// The standard deviations (radians) associated with the extra mips. These are -// chosen to approximate a Trowbridge-Reitz distribution function times the -// geometric shadowing function. These sigma values squared must match the -// variance #defines in cube_uv_reflection_fragment.glsl.js. -const EXTRA_LOD_SIGMA = [0.125, 0.215, 0.35, 0.446, 0.526, 0.582]; - -// The maximum length of the blur for loop. Smaller sigmas will use fewer -// samples and exit early, but not recompile the shader. -const MAX_SAMPLES = 20; - -const _flatCamera = /*@__PURE__*/ new OrthographicCamera(-1, 1, 1, -1, 0, 1); -const _cubeCamera = /*@__PURE__*/ new PerspectiveCamera(90, 1); -const _clearColor$2 = /*@__PURE__*/ new Color(); -let _oldTarget = null; -let _oldActiveCubeFace = 0; -let _oldActiveMipmapLevel = 0; - -// Golden Ratio -const PHI = (1 + Math.sqrt(5)) / 2; -const INV_PHI = 1 / PHI; - -// Vertices of a dodecahedron (except the opposites, which represent the -// same axis), used as axis directions evenly spread on a sphere. -const _axisDirections = [/*@__PURE__*/ new Vector3(-PHI, INV_PHI, 0), /*@__PURE__*/ new Vector3(PHI, INV_PHI, 0), /*@__PURE__*/ new Vector3(-INV_PHI, 0, PHI), /*@__PURE__*/ new Vector3(INV_PHI, 0, PHI), /*@__PURE__*/ new Vector3(0, PHI, -INV_PHI), /*@__PURE__*/ new Vector3(0, PHI, INV_PHI), /*@__PURE__*/ new Vector3(-1, 1, -1), /*@__PURE__*/ new Vector3(1, 1, -1), /*@__PURE__*/ new Vector3(-1, 1, 1), /*@__PURE__*/ new Vector3(1, 1, 1)]; - -// - -// WebGPU Face indices -const _faceLib = [3, 1, 5, 0, 4, 2]; - -const direction = getDirection(uv(), attribute('faceIndex')).normalize(); -const outputDirection = vec3(direction.x, direction.y.negate(), direction.z); - -/** - * This class generates a Prefiltered, Mipmapped Radiance Environment Map - * (PMREM) from a cubeMap environment texture. This allows different levels of - * blur to be quickly accessed based on material roughness. It is packed into a - * special CubeUV format that allows us to perform custom interpolation so that - * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap - * chain, it only goes down to the LOD_MIN level (above), and then creates extra - * even more filtered 'mips' at the same LOD_MIN resolution, associated with - * higher roughness levels. In this way we maintain resolution to smoothly - * interpolate diffuse lighting while limiting sampling computation. - * - * Paper: Fast, Accurate Image-Based Lighting - * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view - */ - -class PMREMGenerator { - constructor(renderer) { - this._renderer = renderer; - this._pingPongRenderTarget = null; - - this._lodMax = 0; - this._cubeSize = 0; - this._lodPlanes = []; - this._sizeLods = []; - this._sigmas = []; - this._lodMeshes = []; - - this._blurMaterial = null; - this._cubemapMaterial = null; - this._equirectMaterial = null; - this._backgroundBox = null; - } - - /** - * Generates a PMREM from a supplied Scene, which can be faster than using an - * image if networking bandwidth is low. Optional sigma specifies a blur radius - * in radians to be applied to the scene before PMREM generation. Optional near - * and far planes ensure the scene is rendered in its entirety (the cubeCamera - * is placed at the origin). - */ - fromScene(scene, sigma = 0, near = 0.1, far = 100) { - _oldTarget = this._renderer.getRenderTarget(); - _oldActiveCubeFace = this._renderer.getActiveCubeFace(); - _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel(); - - this._setSize(256); - - const cubeUVRenderTarget = this._allocateTargets(); - cubeUVRenderTarget.depthBuffer = true; - - this._sceneToCubeUV(scene, near, far, cubeUVRenderTarget); - - if (sigma > 0) { - this._blur(cubeUVRenderTarget, 0, 0, sigma); - } - - this._applyPMREM(cubeUVRenderTarget); - - this._cleanup(cubeUVRenderTarget); - - return cubeUVRenderTarget; - } - - /** - * Generates a PMREM from an equirectangular texture, which can be either LDR - * or HDR. The ideal input image size is 1k (1024 x 512), - * as this matches best with the 256 x 256 cubemap output. - */ - fromEquirectangular(equirectangular, renderTarget = null) { - return this._fromTexture(equirectangular, renderTarget); - } - - /** - * Generates a PMREM from an cubemap texture, which can be either LDR - * or HDR. The ideal input cube size is 256 x 256, - * as this matches best with the 256 x 256 cubemap output. - */ - fromCubemap(cubemap, renderTarget = null) { - return this._fromTexture(cubemap, renderTarget); - } - - /** - * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during - * your texture's network fetch for increased concurrency. - */ - compileCubemapShader() { - if (this._cubemapMaterial === null) { - this._cubemapMaterial = _getCubemapMaterial(); - this._compileMaterial(this._cubemapMaterial); - } - } - - /** - * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during - * your texture's network fetch for increased concurrency. - */ - compileEquirectangularShader() { - if (this._equirectMaterial === null) { - this._equirectMaterial = _getEquirectMaterial(); - this._compileMaterial(this._equirectMaterial); - } - } - - /** - * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class, - * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on - * one of them will cause any others to also become unusable. - */ - dispose() { - this._dispose(); - - if (this._cubemapMaterial !== null) this._cubemapMaterial.dispose(); - if (this._equirectMaterial !== null) this._equirectMaterial.dispose(); - if (this._backgroundBox !== null) { - this._backgroundBox.geometry.dispose(); - this._backgroundBox.material.dispose(); - } - } - - // private interface - - _setSize(cubeSize) { - this._lodMax = Math.floor(Math.log2(cubeSize)); - this._cubeSize = Math.pow(2, this._lodMax); - } - - _dispose() { - if (this._blurMaterial !== null) this._blurMaterial.dispose(); - - if (this._pingPongRenderTarget !== null) this._pingPongRenderTarget.dispose(); - - for (let i = 0; i < this._lodPlanes.length; i++) { - this._lodPlanes[i].dispose(); - } - } - - _cleanup(outputTarget) { - this._renderer.setRenderTarget(_oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel); - outputTarget.scissorTest = false; - _setViewport(outputTarget, 0, 0, outputTarget.width, outputTarget.height); - } - - _fromTexture(texture, renderTarget) { - if (texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping) { - this._setSize(texture.image.length === 0 ? 16 : texture.image[0].width || texture.image[0].image.width); - } else { - // Equirectangular - - this._setSize(texture.image.width / 4); - } - - _oldTarget = this._renderer.getRenderTarget(); - _oldActiveCubeFace = this._renderer.getActiveCubeFace(); - _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel(); - - const cubeUVRenderTarget = renderTarget || this._allocateTargets(); - this._textureToCubeUV(texture, cubeUVRenderTarget); - this._applyPMREM(cubeUVRenderTarget); - this._cleanup(cubeUVRenderTarget); - - return cubeUVRenderTarget; - } - - _allocateTargets() { - const width = 3 * Math.max(this._cubeSize, 16 * 7); - const height = 4 * this._cubeSize; - - const params = { - magFilter: LinearFilter, - minFilter: LinearFilter, - generateMipmaps: false, - type: HalfFloatType, - format: RGBAFormat, - colorSpace: LinearSRGBColorSpace, - //depthBuffer: false - }; - - const cubeUVRenderTarget = _createRenderTarget(width, height, params); - - if (this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height) { - if (this._pingPongRenderTarget !== null) { - this._dispose(); - } - - this._pingPongRenderTarget = _createRenderTarget(width, height, params); - - const { _lodMax } = this; - ({ sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas, lodMeshes: this._lodMeshes } = _createPlanes(_lodMax)); - - this._blurMaterial = _getBlurShader(_lodMax, width, height); - } - - return cubeUVRenderTarget; - } - - _compileMaterial(material) { - const tmpMesh = this._lodMeshes[0]; - tmpMesh.material = material; - - this._renderer.compile(tmpMesh, _flatCamera); - } - - _sceneToCubeUV(scene, near, far, cubeUVRenderTarget) { - const cubeCamera = _cubeCamera; - cubeCamera.near = near; - cubeCamera.far = far; - - // px, py, pz, nx, ny, nz - const upSign = [-1, 1, -1, -1, -1, -1]; - const forwardSign = [1, 1, 1, -1, -1, -1]; - - const renderer = this._renderer; - - const originalAutoClear = renderer.autoClear; - - renderer.getClearColor(_clearColor$2); - - renderer.autoClear = false; - - let backgroundBox = this._backgroundBox; - - if (backgroundBox === null) { - const backgroundMaterial = new MeshBasicMaterial({ - name: 'PMREM.Background', - side: BackSide, - depthWrite: false, - depthTest: false, - }); - - backgroundBox = new Mesh(new BoxGeometry(), backgroundMaterial); - } - - let useSolidColor = false; - const background = scene.background; - - if (background) { - if (background.isColor) { - backgroundBox.material.color.copy(background); - scene.background = null; - useSolidColor = true; - } - } else { - backgroundBox.material.color.copy(_clearColor$2); - useSolidColor = true; - } - - renderer.setRenderTarget(cubeUVRenderTarget); - - renderer.clear(); - - if (useSolidColor) { - renderer.render(backgroundBox, cubeCamera); - } - - for (let i = 0; i < 6; i++) { - const col = i % 3; - - if (col === 0) { - cubeCamera.up.set(0, upSign[i], 0); - cubeCamera.lookAt(forwardSign[i], 0, 0); - } else if (col === 1) { - cubeCamera.up.set(0, 0, upSign[i]); - cubeCamera.lookAt(0, forwardSign[i], 0); - } else { - cubeCamera.up.set(0, upSign[i], 0); - cubeCamera.lookAt(0, 0, forwardSign[i]); - } - - const size = this._cubeSize; - - _setViewport(cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size); - - renderer.render(scene, cubeCamera); - } - - renderer.autoClear = originalAutoClear; - scene.background = background; - } - - _textureToCubeUV(texture, cubeUVRenderTarget) { - const renderer = this._renderer; - - const isCubeTexture = texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping; - - if (isCubeTexture) { - if (this._cubemapMaterial === null) { - this._cubemapMaterial = _getCubemapMaterial(texture); - } - } else { - if (this._equirectMaterial === null) { - this._equirectMaterial = _getEquirectMaterial(texture); - } - } - - const material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial; - material.fragmentNode.value = texture; - - const mesh = this._lodMeshes[0]; - mesh.material = material; - - const size = this._cubeSize; - - _setViewport(cubeUVRenderTarget, 0, 0, 3 * size, 2 * size); - - renderer.setRenderTarget(cubeUVRenderTarget); - renderer.render(mesh, _flatCamera); - } - - _applyPMREM(cubeUVRenderTarget) { - const renderer = this._renderer; - const autoClear = renderer.autoClear; - renderer.autoClear = false; - const n = this._lodPlanes.length; - - for (let i = 1; i < n; i++) { - const sigma = Math.sqrt(this._sigmas[i] * this._sigmas[i] - this._sigmas[i - 1] * this._sigmas[i - 1]); - - const poleAxis = _axisDirections[(n - i - 1) % _axisDirections.length]; - - this._blur(cubeUVRenderTarget, i - 1, i, sigma, poleAxis); - } - - renderer.autoClear = autoClear; - } - - /** - * This is a two-pass Gaussian blur for a cubemap. Normally this is done - * vertically and horizontally, but this breaks down on a cube. Here we apply - * the blur latitudinally (around the poles), and then longitudinally (towards - * the poles) to approximate the orthogonally-separable blur. It is least - * accurate at the poles, but still does a decent job. - */ - _blur(cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis) { - const pingPongRenderTarget = this._pingPongRenderTarget; - - this._halfBlur(cubeUVRenderTarget, pingPongRenderTarget, lodIn, lodOut, sigma, 'latitudinal', poleAxis); - - this._halfBlur(pingPongRenderTarget, cubeUVRenderTarget, lodOut, lodOut, sigma, 'longitudinal', poleAxis); - } - - _halfBlur(targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis) { - const renderer = this._renderer; - const blurMaterial = this._blurMaterial; - - if (direction !== 'latitudinal' && direction !== 'longitudinal') { - console.error('blur direction must be either latitudinal or longitudinal!'); - } - - // Number of standard deviations at which to cut off the discrete approximation. - const STANDARD_DEVIATIONS = 3; - - const blurMesh = this._lodMeshes[lodOut]; - blurMesh.material = blurMaterial; - - const blurUniforms = blurMaterial.uniforms; - - const pixels = this._sizeLods[lodIn] - 1; - const radiansPerPixel = isFinite(sigmaRadians) ? Math.PI / (2 * pixels) : (2 * Math.PI) / (2 * MAX_SAMPLES - 1); - const sigmaPixels = sigmaRadians / radiansPerPixel; - const samples = isFinite(sigmaRadians) ? 1 + Math.floor(STANDARD_DEVIATIONS * sigmaPixels) : MAX_SAMPLES; - - if (samples > MAX_SAMPLES) { - console.warn(`sigmaRadians, ${sigmaRadians}, is too large and will clip, as it requested ${samples} samples when the maximum is set to ${MAX_SAMPLES}`); - } - - const weights = []; - let sum = 0; - - for (let i = 0; i < MAX_SAMPLES; ++i) { - const x = i / sigmaPixels; - const weight = Math.exp((-x * x) / 2); - weights.push(weight); - - if (i === 0) { - sum += weight; - } else if (i < samples) { - sum += 2 * weight; - } - } - - for (let i = 0; i < weights.length; i++) { - weights[i] = weights[i] / sum; - } - - targetIn.texture.frame = (targetIn.texture.frame || 0) + 1; - - blurUniforms.envMap.value = targetIn.texture; - blurUniforms.samples.value = samples; - blurUniforms.weights.array = weights; - blurUniforms.latitudinal.value = direction === 'latitudinal' ? 1 : 0; - - if (poleAxis) { - blurUniforms.poleAxis.value = poleAxis; - } - - const { _lodMax } = this; - blurUniforms.dTheta.value = radiansPerPixel; - blurUniforms.mipInt.value = _lodMax - lodIn; - - const outputSize = this._sizeLods[lodOut]; - const x = 3 * outputSize * (lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0); - const y = 4 * (this._cubeSize - outputSize); - - _setViewport(targetOut, x, y, 3 * outputSize, 2 * outputSize); - renderer.setRenderTarget(targetOut); - renderer.render(blurMesh, _flatCamera); - } -} - -function _createPlanes(lodMax) { - const lodPlanes = []; - const sizeLods = []; - const sigmas = []; - const lodMeshes = []; - - let lod = lodMax; - - const totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length; - - for (let i = 0; i < totalLods; i++) { - const sizeLod = Math.pow(2, lod); - sizeLods.push(sizeLod); - let sigma = 1.0 / sizeLod; - - if (i > lodMax - LOD_MIN) { - sigma = EXTRA_LOD_SIGMA[i - lodMax + LOD_MIN - 1]; - } else if (i === 0) { - sigma = 0; - } - - sigmas.push(sigma); - - const texelSize = 1.0 / (sizeLod - 2); - const min = -texelSize; - const max = 1 + texelSize; - const uv1 = [min, min, max, min, max, max, min, min, max, max, min, max]; - - const cubeFaces = 6; - const vertices = 6; - const positionSize = 3; - const uvSize = 2; - const faceIndexSize = 1; - - const position = new Float32Array(positionSize * vertices * cubeFaces); - const uv = new Float32Array(uvSize * vertices * cubeFaces); - const faceIndex = new Float32Array(faceIndexSize * vertices * cubeFaces); - - for (let face = 0; face < cubeFaces; face++) { - const x = ((face % 3) * 2) / 3 - 1; - const y = face > 2 ? 0 : -1; - const coordinates = [x, y, 0, x + 2 / 3, y, 0, x + 2 / 3, y + 1, 0, x, y, 0, x + 2 / 3, y + 1, 0, x, y + 1, 0]; - - const faceIdx = _faceLib[face]; - position.set(coordinates, positionSize * vertices * faceIdx); - uv.set(uv1, uvSize * vertices * faceIdx); - const fill = [faceIdx, faceIdx, faceIdx, faceIdx, faceIdx, faceIdx]; - faceIndex.set(fill, faceIndexSize * vertices * faceIdx); - } - - const planes = new BufferGeometry(); - planes.setAttribute('position', new BufferAttribute(position, positionSize)); - planes.setAttribute('uv', new BufferAttribute(uv, uvSize)); - planes.setAttribute('faceIndex', new BufferAttribute(faceIndex, faceIndexSize)); - lodPlanes.push(planes); - lodMeshes.push(new Mesh(planes, null)); - - if (lod > LOD_MIN) { - lod--; - } - } - - return { lodPlanes, sizeLods, sigmas, lodMeshes }; -} - -function _createRenderTarget(width, height, params) { - const cubeUVRenderTarget = new RenderTarget(width, height, params); - cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping; - cubeUVRenderTarget.texture.name = 'PMREM.cubeUv'; - cubeUVRenderTarget.texture.isPMREMTexture = true; - cubeUVRenderTarget.scissorTest = true; - return cubeUVRenderTarget; -} - -function _setViewport(target, x, y, width, height) { - const viewY = target.height - height - y; - - target.viewport.set(x, viewY, width, height); - target.scissor.set(x, viewY, width, height); -} - -function _getMaterial(type) { - const material = new NodeMaterial(); - material.depthTest = false; - material.depthWrite = false; - material.blending = NoBlending; - material.name = `PMREM_${type}`; - - return material; -} - -function _getBlurShader(lodMax, width, height) { - const weights = uniformArray(new Array(MAX_SAMPLES).fill(0)); - const poleAxis = uniform(new Vector3(0, 1, 0)); - const dTheta = uniform(0); - const n = float(MAX_SAMPLES); - const latitudinal = uniform(0); // false, bool - const samples = uniform(1); // int - const envMap = texture(null); - const mipInt = uniform(0); // int - const CUBEUV_TEXEL_WIDTH = float(1 / width); - const CUBEUV_TEXEL_HEIGHT = float(1 / height); - const CUBEUV_MAX_MIP = float(lodMax); - - const materialUniforms = { - n, - latitudinal, - weights, - poleAxis, - outputDirection, - dTheta, - samples, - envMap, - mipInt, - CUBEUV_TEXEL_WIDTH, - CUBEUV_TEXEL_HEIGHT, - CUBEUV_MAX_MIP, - }; - - const material = _getMaterial('blur'); - material.uniforms = materialUniforms; // TODO: Move to outside of the material - material.fragmentNode = blur({ ...materialUniforms, latitudinal: latitudinal.equal(1) }); - - return material; -} - -function _getCubemapMaterial(envTexture) { - const material = _getMaterial('cubemap'); - material.fragmentNode = cubeTexture(envTexture, outputDirection); - - return material; -} - -function _getEquirectMaterial(envTexture) { - const material = _getMaterial('equirect'); - material.fragmentNode = texture(envTexture, equirectUV(outputDirection), 0); - - return material; -} - -let _id$5 = 0; - -class BindGroup { - constructor(name = '', bindings = [], index = 0, bindingsReference = []) { - this.name = name; - this.bindings = bindings; - this.index = index; - this.bindingsReference = bindingsReference; - - this.id = _id$5++; - } -} - -const rendererCache = new WeakMap(); - -const typeFromLength = new Map([ - [2, 'vec2'], - [3, 'vec3'], - [4, 'vec4'], - [9, 'mat3'], - [16, 'mat4'], -]); - -const typeFromArray = new Map([ - [Int8Array, 'int'], - [Int16Array, 'int'], - [Int32Array, 'int'], - [Uint8Array, 'uint'], - [Uint16Array, 'uint'], - [Uint32Array, 'uint'], - [Float32Array, 'float'], -]); - -const toFloat = (value) => { - value = Number(value); - - return value + (value % 1 ? '' : '.0'); -}; - -class NodeBuilder { - constructor(object, renderer, parser) { - this.object = object; - this.material = (object && object.material) || null; - this.geometry = (object && object.geometry) || null; - this.renderer = renderer; - this.parser = parser; - this.scene = null; - this.camera = null; - - this.nodes = []; - this.updateNodes = []; - this.updateBeforeNodes = []; - this.updateAfterNodes = []; - this.hashNodes = {}; - - this.lightsNode = null; - this.environmentNode = null; - this.fogNode = null; - - this.clippingContext = null; - - this.vertexShader = null; - this.fragmentShader = null; - this.computeShader = null; - - this.flowNodes = { vertex: [], fragment: [], compute: [] }; - this.flowCode = { vertex: '', fragment: '', compute: '' }; - this.uniforms = { vertex: [], fragment: [], compute: [], index: 0 }; - this.structs = { vertex: [], fragment: [], compute: [], index: 0 }; - this.bindings = { vertex: {}, fragment: {}, compute: {} }; - this.bindingsIndexes = {}; - this.bindGroups = null; - this.attributes = []; - this.bufferAttributes = []; - this.varyings = []; - this.codes = {}; - this.vars = {}; - this.flow = { code: '' }; - this.chaining = []; - this.stack = stack(); - this.stacks = []; - this.tab = '\t'; - - this.instanceBindGroups = true; - - this.currentFunctionNode = null; - - this.context = { - material: this.material, - }; - - this.cache = new NodeCache(); - this.globalCache = this.cache; - - this.flowsData = new WeakMap(); - - this.shaderStage = null; - this.buildStage = null; - - this.useComparisonMethod = false; - } - - getBindGroupsCache() { - let bindGroupsCache = rendererCache.get(this.renderer); - - if (bindGroupsCache === undefined) { - bindGroupsCache = new ChainMap(); - - rendererCache.set(this.renderer, bindGroupsCache); - } - - return bindGroupsCache; - } - - createRenderTarget(width, height, options) { - return new RenderTarget(width, height, options); - } - - createCubeRenderTarget(size, options) { - return new CubeRenderTarget(size, options); - } - - createPMREMGenerator() { - // TODO: Move Materials.js to outside of the Nodes.js in order to remove this function and improve tree-shaking support - - return new PMREMGenerator(this.renderer); - } - - includes(node) { - return this.nodes.includes(node); - } - - _getBindGroup(groupName, bindings) { - const bindGroupsCache = this.getBindGroupsCache(); - - // - - const bindingsArray = []; - - let sharedGroup = true; - - for (const binding of bindings) { - bindingsArray.push(binding); - - sharedGroup = sharedGroup && binding.groupNode.shared !== true; - } - - // - - let bindGroup; - - if (sharedGroup) { - bindGroup = bindGroupsCache.get(bindingsArray); - - if (bindGroup === undefined) { - bindGroup = new BindGroup(groupName, bindingsArray, this.bindingsIndexes[groupName].group, bindingsArray); - - bindGroupsCache.set(bindingsArray, bindGroup); - } - } else { - bindGroup = new BindGroup(groupName, bindingsArray, this.bindingsIndexes[groupName].group, bindingsArray); - } - - return bindGroup; - } - - getBindGroupArray(groupName, shaderStage) { - const bindings = this.bindings[shaderStage]; - - let bindGroup = bindings[groupName]; - - if (bindGroup === undefined) { - if (this.bindingsIndexes[groupName] === undefined) { - this.bindingsIndexes[groupName] = { binding: 0, group: Object.keys(this.bindingsIndexes).length }; - } - - bindings[groupName] = bindGroup = []; - } - - return bindGroup; - } - - getBindings() { - let bindingsGroups = this.bindGroups; - - if (bindingsGroups === null) { - const groups = {}; - const bindings = this.bindings; - - for (const shaderStage of shaderStages) { - for (const groupName in bindings[shaderStage]) { - const uniforms = bindings[shaderStage][groupName]; - - const groupUniforms = groups[groupName] || (groups[groupName] = []); - groupUniforms.push(...uniforms); - } - } - - bindingsGroups = []; - - for (const groupName in groups) { - const group = groups[groupName]; - - const bindingsGroup = this._getBindGroup(groupName, group); - - bindingsGroups.push(bindingsGroup); - } - - this.bindGroups = bindingsGroups; - } - - return bindingsGroups; - } - - setHashNode(node, hash) { - this.hashNodes[hash] = node; - } - - addNode(node) { - if (this.nodes.includes(node) === false) { - this.nodes.push(node); - - this.setHashNode(node, node.getHash(this)); - } - } - - buildUpdateNodes() { - for (const node of this.nodes) { - const updateType = node.getUpdateType(); - const updateBeforeType = node.getUpdateBeforeType(); - const updateAfterType = node.getUpdateAfterType(); - - if (updateType !== NodeUpdateType.NONE) { - this.updateNodes.push(node.getSelf()); - } - - if (updateBeforeType !== NodeUpdateType.NONE) { - this.updateBeforeNodes.push(node); - } - - if (updateAfterType !== NodeUpdateType.NONE) { - this.updateAfterNodes.push(node); - } - } - } - - get currentNode() { - return this.chaining[this.chaining.length - 1]; - } - - isFilteredTexture(texture) { - return texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter || texture.minFilter === LinearFilter || texture.minFilter === LinearMipmapNearestFilter || texture.minFilter === NearestMipmapLinearFilter || texture.minFilter === LinearMipmapLinearFilter; - } - - addChain(node) { - /* - if ( this.chaining.indexOf( node ) !== - 1 ) { - - console.warn( 'Recursive node: ', node ); - - } - */ - - this.chaining.push(node); - } - - removeChain(node) { - const lastChain = this.chaining.pop(); - - if (lastChain !== node) { - throw new Error('NodeBuilder: Invalid node chaining!'); - } - } - - getMethod(method) { - return method; - } - - getNodeFromHash(hash) { - return this.hashNodes[hash]; - } - - addFlow(shaderStage, node) { - this.flowNodes[shaderStage].push(node); - - return node; - } - - setContext(context) { - this.context = context; - } - - getContext() { - return this.context; - } - - getSharedContext() { - ({ ...this.context }); - - return this.context; - } - - setCache(cache) { - this.cache = cache; - } - - getCache() { - return this.cache; - } - - getCacheFromNode(node, parent = true) { - const data = this.getDataFromNode(node); - if (data.cache === undefined) data.cache = new NodeCache(parent ? this.getCache() : null); - - return data.cache; - } - - isAvailable(/*name*/) { - return false; - } - - getVertexIndex() { - console.warn('Abstract function.'); - } - - getInstanceIndex() { - console.warn('Abstract function.'); - } - - getDrawIndex() { - console.warn('Abstract function.'); - } - - getFrontFacing() { - console.warn('Abstract function.'); - } - - getFragCoord() { - console.warn('Abstract function.'); - } - - isFlipY() { - return false; - } - - generateTexture(/* texture, textureProperty, uvSnippet */) { - console.warn('Abstract function.'); - } - - generateTextureLod(/* texture, textureProperty, uvSnippet, levelSnippet */) { - console.warn('Abstract function.'); - } - - generateConst(type, value = null) { - if (value === null) { - if (type === 'float' || type === 'int' || type === 'uint') value = 0; - else if (type === 'bool') value = false; - else if (type === 'color') value = new Color(); - else if (type === 'vec2') value = new Vector2(); - else if (type === 'vec3') value = new Vector3(); - else if (type === 'vec4') value = new Vector4(); - } - - if (type === 'float') return toFloat(value); - if (type === 'int') return `${Math.round(value)}`; - if (type === 'uint') return value >= 0 ? `${Math.round(value)}u` : '0u'; - if (type === 'bool') return value ? 'true' : 'false'; - if (type === 'color') return `${this.getType('vec3')}( ${toFloat(value.r)}, ${toFloat(value.g)}, ${toFloat(value.b)} )`; - - const typeLength = this.getTypeLength(type); - - const componentType = this.getComponentType(type); - - const generateConst = (value) => this.generateConst(componentType, value); - - if (typeLength === 2) { - return `${this.getType(type)}( ${generateConst(value.x)}, ${generateConst(value.y)} )`; - } else if (typeLength === 3) { - return `${this.getType(type)}( ${generateConst(value.x)}, ${generateConst(value.y)}, ${generateConst(value.z)} )`; - } else if (typeLength === 4) { - return `${this.getType(type)}( ${generateConst(value.x)}, ${generateConst(value.y)}, ${generateConst(value.z)}, ${generateConst(value.w)} )`; - } else if (typeLength > 4 && value && (value.isMatrix3 || value.isMatrix4)) { - return `${this.getType(type)}( ${value.elements.map(generateConst).join(', ')} )`; - } else if (typeLength > 4) { - return `${this.getType(type)}()`; - } - - throw new Error(`NodeBuilder: Type '${type}' not found in generate constant attempt.`); - } - - getType(type) { - if (type === 'color') return 'vec3'; - - return type; - } - - hasGeometryAttribute(name) { - return this.geometry && this.geometry.getAttribute(name) !== undefined; - } - - getAttribute(name, type) { - const attributes = this.attributes; - - // find attribute - - for (const attribute of attributes) { - if (attribute.name === name) { - return attribute; - } - } - - // create a new if no exist - - const attribute = new NodeAttribute(name, type); - - attributes.push(attribute); - - return attribute; - } - - getPropertyName(node /*, shaderStage*/) { - return node.name; - } - - isVector(type) { - return /vec\d/.test(type); - } - - isMatrix(type) { - return /mat\d/.test(type); - } - - isReference(type) { - return type === 'void' || type === 'property' || type === 'sampler' || type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'depthTexture' || type === 'texture3D'; - } - - needsColorSpaceToLinear(/*texture*/) { - return false; - } - - getComponentTypeFromTexture(texture) { - const type = texture.type; - - if (texture.isDataTexture) { - if (type === IntType) return 'int'; - if (type === UnsignedIntType) return 'uint'; - } - - return 'float'; - } - - getElementType(type) { - if (type === 'mat2') return 'vec2'; - if (type === 'mat3') return 'vec3'; - if (type === 'mat4') return 'vec4'; - - return this.getComponentType(type); - } - - getComponentType(type) { - type = this.getVectorType(type); - - if (type === 'float' || type === 'bool' || type === 'int' || type === 'uint') return type; - - const componentType = /(b|i|u|)(vec|mat)([2-4])/.exec(type); - - if (componentType === null) return null; - - if (componentType[1] === 'b') return 'bool'; - if (componentType[1] === 'i') return 'int'; - if (componentType[1] === 'u') return 'uint'; - - return 'float'; - } - - getVectorType(type) { - if (type === 'color') return 'vec3'; - if (type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'texture3D') return 'vec4'; - - return type; - } - - getTypeFromLength(length, componentType = 'float') { - if (length === 1) return componentType; - - const baseType = typeFromLength.get(length); - const prefix = componentType === 'float' ? '' : componentType[0]; - - return prefix + baseType; - } - - getTypeFromArray(array) { - return typeFromArray.get(array.constructor); - } - - getTypeFromAttribute(attribute) { - let dataAttribute = attribute; - - if (attribute.isInterleavedBufferAttribute) dataAttribute = attribute.data; - - const array = dataAttribute.array; - const itemSize = attribute.itemSize; - const normalized = attribute.normalized; - - let arrayType; - - if (!(attribute instanceof Float16BufferAttribute) && normalized !== true) { - arrayType = this.getTypeFromArray(array); - } - - return this.getTypeFromLength(itemSize, arrayType); - } - - getTypeLength(type) { - const vecType = this.getVectorType(type); - const vecNum = /vec([2-4])/.exec(vecType); - - if (vecNum !== null) return Number(vecNum[1]); - if (vecType === 'float' || vecType === 'bool' || vecType === 'int' || vecType === 'uint') return 1; - if (/mat2/.test(type) === true) return 4; - if (/mat3/.test(type) === true) return 9; - if (/mat4/.test(type) === true) return 16; - - return 0; - } - - getVectorFromMatrix(type) { - return type.replace('mat', 'vec'); - } - - changeComponentType(type, newComponentType) { - return this.getTypeFromLength(this.getTypeLength(type), newComponentType); - } - - getIntegerType(type) { - const componentType = this.getComponentType(type); - - if (componentType === 'int' || componentType === 'uint') return type; - - return this.changeComponentType(type, 'int'); - } - - addStack() { - this.stack = stack(this.stack); - - this.stacks.push(getCurrentStack() || this.stack); - setCurrentStack(this.stack); - - return this.stack; - } - - removeStack() { - const lastStack = this.stack; - this.stack = lastStack.parent; - - setCurrentStack(this.stacks.pop()); - - return lastStack; - } - - getDataFromNode(node, shaderStage = this.shaderStage, cache = null) { - cache = cache === null ? (node.isGlobal(this) ? this.globalCache : this.cache) : cache; - - let nodeData = cache.getData(node); - - if (nodeData === undefined) { - nodeData = {}; - - cache.setData(node, nodeData); - } - - if (nodeData[shaderStage] === undefined) nodeData[shaderStage] = {}; - - return nodeData[shaderStage]; - } - - getNodeProperties(node, shaderStage = 'any') { - const nodeData = this.getDataFromNode(node, shaderStage); - - return nodeData.properties || (nodeData.properties = { outputNode: null }); - } - - getBufferAttributeFromNode(node, type) { - const nodeData = this.getDataFromNode(node); - - let bufferAttribute = nodeData.bufferAttribute; - - if (bufferAttribute === undefined) { - const index = this.uniforms.index++; - - bufferAttribute = new NodeAttribute('nodeAttribute' + index, type, node); - - this.bufferAttributes.push(bufferAttribute); - - nodeData.bufferAttribute = bufferAttribute; - } - - return bufferAttribute; - } - - getStructTypeFromNode(node, shaderStage = this.shaderStage) { - const nodeData = this.getDataFromNode(node, shaderStage); - - if (nodeData.structType === undefined) { - const index = this.structs.index++; - - node.name = `StructType${index}`; - this.structs[shaderStage].push(node); - - nodeData.structType = node; - } - - return node; - } - - getUniformFromNode(node, type, shaderStage = this.shaderStage, name = null) { - const nodeData = this.getDataFromNode(node, shaderStage, this.globalCache); - - let nodeUniform = nodeData.uniform; - - if (nodeUniform === undefined) { - const index = this.uniforms.index++; - - nodeUniform = new NodeUniform(name || 'nodeUniform' + index, type, node); - - this.uniforms[shaderStage].push(nodeUniform); - - nodeData.uniform = nodeUniform; - } - - return nodeUniform; - } - - getVarFromNode(node, name = null, type = node.getNodeType(this), shaderStage = this.shaderStage) { - const nodeData = this.getDataFromNode(node, shaderStage); - - let nodeVar = nodeData.variable; - - if (nodeVar === undefined) { - const vars = this.vars[shaderStage] || (this.vars[shaderStage] = []); - - if (name === null) name = 'nodeVar' + vars.length; - - nodeVar = new NodeVar(name, type); - - vars.push(nodeVar); - - nodeData.variable = nodeVar; - } - - return nodeVar; - } - - getVaryingFromNode(node, name = null, type = node.getNodeType(this)) { - const nodeData = this.getDataFromNode(node, 'any'); - - let nodeVarying = nodeData.varying; - - if (nodeVarying === undefined) { - const varyings = this.varyings; - const index = varyings.length; - - if (name === null) name = 'nodeVarying' + index; - - nodeVarying = new NodeVarying(name, type); - - varyings.push(nodeVarying); - - nodeData.varying = nodeVarying; - } - - return nodeVarying; - } - - getCodeFromNode(node, type, shaderStage = this.shaderStage) { - const nodeData = this.getDataFromNode(node); - - let nodeCode = nodeData.code; - - if (nodeCode === undefined) { - const codes = this.codes[shaderStage] || (this.codes[shaderStage] = []); - const index = codes.length; - - nodeCode = new NodeCode('nodeCode' + index, type); - - codes.push(nodeCode); - - nodeData.code = nodeCode; - } - - return nodeCode; - } - - addLineFlowCode(code) { - if (code === '') return this; - - code = this.tab + code; - - if (!/;\s*$/.test(code)) { - code = code + ';\n'; - } - - this.flow.code += code; - - return this; - } - - addFlowCode(code) { - this.flow.code += code; - - return this; - } - - addFlowTab() { - this.tab += '\t'; - - return this; - } - - removeFlowTab() { - this.tab = this.tab.slice(0, -1); - - return this; - } - - getFlowData(node /*, shaderStage*/) { - return this.flowsData.get(node); - } - - flowNode(node) { - const output = node.getNodeType(this); - - const flowData = this.flowChildNode(node, output); - - this.flowsData.set(node, flowData); - - return flowData; - } - - buildFunctionNode(shaderNode) { - const fn = new FunctionNode(); - - const previous = this.currentFunctionNode; - - this.currentFunctionNode = fn; - - fn.code = this.buildFunctionCode(shaderNode); - - this.currentFunctionNode = previous; - - return fn; - } - - flowShaderNode(shaderNode) { - const layout = shaderNode.layout; - - const inputs = { - [Symbol.iterator]() { - let index = 0; - const values = Object.values(this); - return { - next: () => ({ - value: values[index], - done: index++ >= values.length, - }), - }; - }, - }; - - for (const input of layout.inputs) { - inputs[input.name] = new ParameterNode(input.type, input.name); - } - - // - - shaderNode.layout = null; - - const callNode = shaderNode.call(inputs); - const flowData = this.flowStagesNode(callNode, layout.type); - - shaderNode.layout = layout; - - return flowData; - } - - flowStagesNode(node, output = null) { - const previousFlow = this.flow; - const previousVars = this.vars; - const previousCache = this.cache; - const previousBuildStage = this.buildStage; - const previousStack = this.stack; - - const flow = { - code: '', - }; - - this.flow = flow; - this.vars = {}; - this.cache = new NodeCache(); - this.stack = stack(); - - for (const buildStage of defaultBuildStages) { - this.setBuildStage(buildStage); - - flow.result = node.build(this, output); - } - - flow.vars = this.getVars(this.shaderStage); - - this.flow = previousFlow; - this.vars = previousVars; - this.cache = previousCache; - this.stack = previousStack; - - this.setBuildStage(previousBuildStage); - - return flow; - } - - getFunctionOperator() { - return null; - } - - flowChildNode(node, output = null) { - const previousFlow = this.flow; - - const flow = { - code: '', - }; - - this.flow = flow; - - flow.result = node.build(this, output); - - this.flow = previousFlow; - - return flow; - } - - flowNodeFromShaderStage(shaderStage, node, output = null, propertyName = null) { - const previousShaderStage = this.shaderStage; - - this.setShaderStage(shaderStage); - - const flowData = this.flowChildNode(node, output); - - if (propertyName !== null) { - flowData.code += `${this.tab + propertyName} = ${flowData.result};\n`; - } - - this.flowCode[shaderStage] = this.flowCode[shaderStage] + flowData.code; - - this.setShaderStage(previousShaderStage); - - return flowData; - } - - getAttributesArray() { - return this.attributes.concat(this.bufferAttributes); - } - - getAttributes(/*shaderStage*/) { - console.warn('Abstract function.'); - } - - getVaryings(/*shaderStage*/) { - console.warn('Abstract function.'); - } - - getVar(type, name) { - return `${this.getType(type)} ${name}`; - } - - getVars(shaderStage) { - let snippet = ''; - - const vars = this.vars[shaderStage]; - - if (vars !== undefined) { - for (const variable of vars) { - snippet += `${this.getVar(variable.type, variable.name)}; `; - } - } - - return snippet; - } - - getUniforms(/*shaderStage*/) { - console.warn('Abstract function.'); - } - - getCodes(shaderStage) { - const codes = this.codes[shaderStage]; - - let code = ''; - - if (codes !== undefined) { - for (const nodeCode of codes) { - code += nodeCode.code + '\n'; - } - } - - return code; - } - - getHash() { - return this.vertexShader + this.fragmentShader + this.computeShader; - } - - setShaderStage(shaderStage) { - this.shaderStage = shaderStage; - } - - getShaderStage() { - return this.shaderStage; - } - - setBuildStage(buildStage) { - this.buildStage = buildStage; - } - - getBuildStage() { - return this.buildStage; - } - - buildCode() { - console.warn('Abstract function.'); - } - - build() { - const { object, material } = this; - - if (material !== null) { - NodeMaterial.fromMaterial(material).build(this); - } else { - this.addFlow('compute', object); - } - - // setup() -> stage 1: create possible new nodes and returns an output reference node - // analyze() -> stage 2: analyze nodes to possible optimization and validation - // generate() -> stage 3: generate shader - - for (const buildStage of defaultBuildStages) { - this.setBuildStage(buildStage); - - if (this.context.vertex && this.context.vertex.isNode) { - this.flowNodeFromShaderStage('vertex', this.context.vertex); - } - - for (const shaderStage of shaderStages) { - this.setShaderStage(shaderStage); - - const flowNodes = this.flowNodes[shaderStage]; - - for (const node of flowNodes) { - if (buildStage === 'generate') { - this.flowNode(node); - } else { - node.build(this); - } - } - } - } - - this.setBuildStage(null); - this.setShaderStage(null); - - // stage 4: build code for a specific output - - this.buildCode(); - this.buildUpdateNodes(); - - return this; - } - - getNodeUniform(uniformNode, type) { - if (type === 'float' || type === 'int' || type === 'uint') return new NumberNodeUniform(uniformNode); - if (type === 'vec2' || type === 'ivec2' || type === 'uvec2') return new Vector2NodeUniform(uniformNode); - if (type === 'vec3' || type === 'ivec3' || type === 'uvec3') return new Vector3NodeUniform(uniformNode); - if (type === 'vec4' || type === 'ivec4' || type === 'uvec4') return new Vector4NodeUniform(uniformNode); - if (type === 'color') return new ColorNodeUniform(uniformNode); - if (type === 'mat3') return new Matrix3NodeUniform(uniformNode); - if (type === 'mat4') return new Matrix4NodeUniform(uniformNode); - - throw new Error(`Uniform "${type}" not declared.`); - } - - createNodeMaterial(type = 'NodeMaterial') { - // TODO: Move Materials.js to outside of the Nodes.js in order to remove this function and improve tree-shaking support - - return createNodeMaterialFromType(type); - } - - format(snippet, fromType, toType) { - fromType = this.getVectorType(fromType); - toType = this.getVectorType(toType); - - if (fromType === toType || toType === null || this.isReference(toType)) { - return snippet; - } - - const fromTypeLength = this.getTypeLength(fromType); - const toTypeLength = this.getTypeLength(toType); - - if (fromTypeLength === 16 && toTypeLength === 9) { - return `${this.getType(toType)}(${snippet}[0].xyz, ${snippet}[1].xyz, ${snippet}[2].xyz)`; - } - - if (fromTypeLength === 9 && toTypeLength === 4) { - return `${this.getType(toType)}(${snippet}[0].xy, ${snippet}[1].xy)`; - } - - if (fromTypeLength > 4) { - // fromType is matrix-like - - // @TODO: ignore for now - - return snippet; - } - - if (toTypeLength > 4 || toTypeLength === 0) { - // toType is matrix-like or unknown - - // @TODO: ignore for now - - return snippet; - } - - if (fromTypeLength === toTypeLength) { - return `${this.getType(toType)}( ${snippet} )`; - } - - if (fromTypeLength > toTypeLength) { - return this.format(`${snippet}.${'xyz'.slice(0, toTypeLength)}`, this.getTypeFromLength(toTypeLength, this.getComponentType(fromType)), toType); - } - - if (toTypeLength === 4 && fromTypeLength > 1) { - // toType is vec4-like - - return `${this.getType(toType)}( ${this.format(snippet, fromType, 'vec3')}, 1.0 )`; - } - - if (fromTypeLength === 2) { - // fromType is vec2-like and toType is vec3-like - - return `${this.getType(toType)}( ${this.format(snippet, fromType, 'vec2')}, 0.0 )`; - } - - if (fromTypeLength === 1 && toTypeLength > 1 && fromType !== this.getComponentType(toType)) { - // fromType is float-like - - // convert a number value to vector type, e.g: - // vec3( 1u ) -> vec3( float( 1u ) ) - - snippet = `${this.getType(this.getComponentType(toType))}( ${snippet} )`; - } - - return `${this.getType(toType)}( ${snippet} )`; // fromType is float-like - } - - getSignature() { - return `// Three.js r${REVISION} - Node System\n`; - } -} - -class NodeFrame { - constructor() { - this.time = 0; - this.deltaTime = 0; - - this.frameId = 0; - this.renderId = 0; - - this.startTime = null; - - this.updateMap = new WeakMap(); - this.updateBeforeMap = new WeakMap(); - this.updateAfterMap = new WeakMap(); - - this.renderer = null; - this.material = null; - this.camera = null; - this.object = null; - this.scene = null; - } - - _getMaps(referenceMap, nodeRef) { - let maps = referenceMap.get(nodeRef); - - if (maps === undefined) { - maps = { - renderMap: new WeakMap(), - frameMap: new WeakMap(), - }; - - referenceMap.set(nodeRef, maps); - } - - return maps; - } - - updateBeforeNode(node) { - const updateType = node.getUpdateBeforeType(); - const reference = node.updateReference(this); - - if (updateType === NodeUpdateType.FRAME) { - const { frameMap } = this._getMaps(this.updateBeforeMap, reference); - - if (frameMap.get(reference) !== this.frameId) { - if (node.updateBefore(this) !== false) { - frameMap.set(reference, this.frameId); - } - } - } else if (updateType === NodeUpdateType.RENDER) { - const { renderMap } = this._getMaps(this.updateBeforeMap, reference); - - if (renderMap.get(reference) !== this.renderId) { - if (node.updateBefore(this) !== false) { - renderMap.set(reference, this.renderId); - } - } - } else if (updateType === NodeUpdateType.OBJECT) { - node.updateBefore(this); - } - } - - updateAfterNode(node) { - const updateType = node.getUpdateAfterType(); - const reference = node.updateReference(this); - - if (updateType === NodeUpdateType.FRAME) { - const { frameMap } = this._getMaps(this.updateAfterMap, reference); - - if (frameMap.get(reference) !== this.frameId) { - if (node.updateAfter(this) !== false) { - frameMap.set(reference, this.frameId); - } - } - } else if (updateType === NodeUpdateType.RENDER) { - const { renderMap } = this._getMaps(this.updateAfterMap, reference); - - if (renderMap.get(reference) !== this.renderId) { - if (node.updateAfter(this) !== false) { - renderMap.set(reference, this.renderId); - } - } - } else if (updateType === NodeUpdateType.OBJECT) { - node.updateAfter(this); - } - } - - updateNode(node) { - const updateType = node.getUpdateType(); - const reference = node.updateReference(this); - - if (updateType === NodeUpdateType.FRAME) { - const { frameMap } = this._getMaps(this.updateMap, reference); - - if (frameMap.get(reference) !== this.frameId) { - if (node.update(this) !== false) { - frameMap.set(reference, this.frameId); - } - } - } else if (updateType === NodeUpdateType.RENDER) { - const { renderMap } = this._getMaps(this.updateMap, reference); - - if (renderMap.get(reference) !== this.renderId) { - if (node.update(this) !== false) { - renderMap.set(reference, this.renderId); - } - } - } else if (updateType === NodeUpdateType.OBJECT) { - node.update(this); - } - } - - update() { - this.frameId++; - - if (this.lastTime === undefined) this.lastTime = performance.now(); - - this.deltaTime = (performance.now() - this.lastTime) / 1000; - - this.lastTime = performance.now(); - - this.time += this.deltaTime; - } -} - -class NodeFunctionInput { - constructor(type, name, count = null, qualifier = '', isConst = false) { - this.type = type; - this.name = name; - this.count = count; - this.qualifier = qualifier; - this.isConst = isConst; - } -} - -NodeFunctionInput.isNodeFunctionInput = true; - -class StructTypeNode extends Node { - constructor(types) { - super(); - - this.types = types; - this.isStructTypeNode = true; - } - - getMemberTypes() { - return this.types; - } -} - -addNodeClass('StructTypeNode', StructTypeNode); - -class OutputStructNode extends Node { - constructor(...members) { - super(); - - this.members = members; - - this.isOutputStructNode = true; - } - - setup(builder) { - super.setup(builder); - - const members = this.members; - const types = []; - - for (let i = 0; i < members.length; i++) { - types.push(members[i].getNodeType(builder)); - } - - this.nodeType = builder.getStructTypeFromNode(new StructTypeNode(types)).name; - } - - generate(builder, output) { - const propertyName = builder.getOutputStructName(); - const members = this.members; - - const structPrefix = propertyName !== '' ? propertyName + '.' : ''; - - for (let i = 0; i < members.length; i++) { - const snippet = members[i].build(builder, output); - - builder.addLineFlowCode(`${structPrefix}m${i} = ${snippet}`); - } - - return propertyName; - } -} - -const outputStruct = nodeProxy(OutputStructNode); - -addNodeClass('OutputStructNode', OutputStructNode); - -function getTextureIndex(textures, name) { - for (let i = 0; i < textures.length; i++) { - if (textures[i].name === name) { - return i; - } - } - - return -1; -} - -class MRTNode extends OutputStructNode { - constructor(outputNodes) { - super(); - - this.outputNodes = outputNodes; - - this.isMRTNode = true; - } - - has(name) { - return this.outputNodes[name] !== undefined; - } - - get(name) { - return this.outputNodes[name]; - } - - merge(mrtNode) { - const outputs = { ...this.outputNodes, ...mrtNode.outputNodes }; - - return mrt(outputs); - } - - setup(builder) { - const outputNodes = this.outputNodes; - const mrt = builder.renderer.getRenderTarget(); - - const members = []; - - const textures = mrt.textures; - - for (const name in outputNodes) { - const index = getTextureIndex(textures, name); - - members[index] = vec4(outputNodes[name]); - } - - this.members = members; - - return super.setup(builder); - } -} - -const mrt = nodeProxy(MRTNode); - -addNodeClass('MRTNode', MRTNode); - -const hash = Fn(([seed]) => { - // Taken from https://www.shadertoy.com/view/XlGcRh, originally from pcg-random.org - - const state = seed.toUint().mul(747796405).add(2891336453); - const word = state.shiftRight(state.shiftRight(28).add(4)).bitXor(state).mul(277803737); - const result = word.shiftRight(22).bitXor(word); - - return result.toFloat().mul(1 / 2 ** 32); // Convert to range [0, 1) -}); - -addNodeElement('hash', hash); - -// remapping functions https://iquilezles.org/articles/functions/ -const parabola = (x, k) => pow(mul(4.0, x.mul(sub(1.0, x))), k); -const gain = (x, k) => (x.lessThan(0.5) ? parabola(x.mul(2.0), k).div(2.0) : sub(1.0, parabola(mul(sub(1.0, x), 2.0), k).div(2.0))); -const pcurve = (x, a, b) => pow(div(pow(x, a), add(pow(x, a), pow(sub(1.0, x), b))), 1.0 / a); -const sinc = (x, k) => sin(PI.mul(k.mul(x).sub(1.0))).div(PI.mul(k.mul(x).sub(1.0))); - -addNodeElement('parabola', parabola); -addNodeElement('gain', gain); -addNodeElement('pcurve', pcurve); -addNodeElement('sinc', sinc); - -// https://github.com/cabbibo/glsl-tri-noise-3d - -const tri = Fn(([x]) => { - return x.fract().sub(0.5).abs(); -}); - -const tri3 = Fn(([p]) => { - return vec3(tri(p.z.add(tri(p.y.mul(1)))), tri(p.z.add(tri(p.x.mul(1)))), tri(p.y.add(tri(p.x.mul(1))))); -}); - -const triNoise3D = Fn(([p_immutable, spd, time]) => { - const p = vec3(p_immutable).toVar(); - const z = float(1.4).toVar(); - const rz = float(0.0).toVar(); - const bp = vec3(p).toVar(); - - Loop({ start: float(0.0), end: float(3.0), type: 'float', condition: '<=' }, () => { - const dg = vec3(tri3(bp.mul(2.0))).toVar(); - p.addAssign(dg.add(time.mul(float(0.1).mul(spd)))); - bp.mulAssign(1.8); - z.mulAssign(1.5); - p.mulAssign(1.2); - - const t = float(tri(p.z.add(tri(p.x.add(tri(p.y)))))).toVar(); - rz.addAssign(t.div(z)); - bp.addAssign(0.14); - }); - - return rz; -}); - -// layouts - -tri.setLayout({ - name: 'tri', - type: 'float', - inputs: [{ name: 'x', type: 'float' }], -}); - -tri3.setLayout({ - name: 'tri3', - type: 'vec3', - inputs: [{ name: 'p', type: 'vec3' }], -}); - -triNoise3D.setLayout({ - name: 'triNoise3D', - type: 'float', - inputs: [ - { name: 'p', type: 'vec3' }, - { name: 'spd', type: 'float' }, - { name: 'time', type: 'float' }, - ], -}); - -const Discard = (conditional) => (conditional ? select(conditional, expression('discard')) : expression('discard')).append(); -const Return = () => expression('return').append(); - -addNodeElement('discard', Discard); - -class FunctionOverloadingNode extends Node { - constructor(functionNodes = [], ...parametersNodes) { - super(); - - this.functionNodes = functionNodes; - this.parametersNodes = parametersNodes; - - this._candidateFnCall = null; - - this.global = true; - } - - getNodeType() { - return this.functionNodes[0].shaderNode.layout.type; - } - - setup(builder) { - const params = this.parametersNodes; - - let candidateFnCall = this._candidateFnCall; - - if (candidateFnCall === null) { - let candidateFn = null; - let candidateScore = -1; - - for (const functionNode of this.functionNodes) { - const shaderNode = functionNode.shaderNode; - const layout = shaderNode.layout; - - if (layout === null) { - throw new Error('FunctionOverloadingNode: FunctionNode must be a layout.'); - } - - const inputs = layout.inputs; - - if (params.length === inputs.length) { - let score = 0; - - for (let i = 0; i < params.length; i++) { - const param = params[i]; - const input = inputs[i]; - - if (param.getNodeType(builder) === input.type) { - score++; - } else { - score = 0; - } - } - - if (score > candidateScore) { - candidateFn = functionNode; - candidateScore = score; - } - } - } - - this._candidateFnCall = candidateFnCall = candidateFn(...params); - } - - return candidateFnCall; - } -} - -const overloadingBaseFn = nodeProxy(FunctionOverloadingNode); - -const overloadingFn = - (functionNodes) => - (...params) => - overloadingBaseFn(functionNodes, ...params); - -addNodeClass('FunctionOverloadingNode', FunctionOverloadingNode); - -class MatcapUVNode extends TempNode { - constructor() { - super('vec2'); - } - - setup() { - const x = vec3(positionViewDirection.z, 0, positionViewDirection.x.negate()).normalize(); - const y = positionViewDirection.cross(x); - - return vec2(x.dot(transformedNormalView), y.dot(transformedNormalView)).mul(0.495).add(0.5); // 0.495 to remove artifacts caused by undersized matcap disks - } -} - -const matcapUV = nodeImmutable(MatcapUVNode); - -addNodeClass('MatcapUVNode', MatcapUVNode); - -class TimerNode extends UniformNode { - constructor(scope = TimerNode.LOCAL, scale = 1, value = 0) { - super(value); - - this.scope = scope; - this.scale = scale; - - this.updateType = NodeUpdateType.FRAME; - } - /* - @TODO: - getNodeType( builder ) { - - const scope = this.scope; - - if ( scope === TimerNode.FRAME ) { - - return 'uint'; - - } - - return 'float'; - - } -*/ - update(frame) { - const scope = this.scope; - const scale = this.scale; - - if (scope === TimerNode.LOCAL) { - this.value += frame.deltaTime * scale; - } else if (scope === TimerNode.DELTA) { - this.value = frame.deltaTime * scale; - } else if (scope === TimerNode.FRAME) { - this.value = frame.frameId; - } else { - // global - - this.value = frame.time * scale; - } - } - - serialize(data) { - super.serialize(data); - - data.scope = this.scope; - data.scale = this.scale; - } - - deserialize(data) { - super.deserialize(data); - - this.scope = data.scope; - this.scale = data.scale; - } -} - -TimerNode.LOCAL = 'local'; -TimerNode.GLOBAL = 'global'; -TimerNode.DELTA = 'delta'; -TimerNode.FRAME = 'frame'; - -// @TODO: add support to use node in timeScale -const timerLocal = (timeScale, value = 0) => nodeObject(new TimerNode(TimerNode.LOCAL, timeScale, value)); -const timerGlobal = (timeScale, value = 0) => nodeObject(new TimerNode(TimerNode.GLOBAL, timeScale, value)); -const timerDelta = (timeScale, value = 0) => nodeObject(new TimerNode(TimerNode.DELTA, timeScale, value)); -const frameId = nodeImmutable(TimerNode, TimerNode.FRAME).toUint(); - -addNodeClass('TimerNode', TimerNode); - -class OscNode extends Node { - constructor(method = OscNode.SINE, timeNode = timerLocal()) { - super(); - - this.method = method; - this.timeNode = timeNode; - } - - getNodeType(builder) { - return this.timeNode.getNodeType(builder); - } - - setup() { - const method = this.method; - const timeNode = nodeObject(this.timeNode); - - let outputNode = null; - - if (method === OscNode.SINE) { - outputNode = timeNode - .add(0.75) - .mul(Math.PI * 2) - .sin() - .mul(0.5) - .add(0.5); - } else if (method === OscNode.SQUARE) { - outputNode = timeNode.fract().round(); - } else if (method === OscNode.TRIANGLE) { - outputNode = timeNode.add(0.5).fract().mul(2).sub(1).abs(); - } else if (method === OscNode.SAWTOOTH) { - outputNode = timeNode.fract(); - } - - return outputNode; - } - - serialize(data) { - super.serialize(data); - - data.method = this.method; - } - - deserialize(data) { - super.deserialize(data); - - this.method = data.method; - } -} - -OscNode.SINE = 'sine'; -OscNode.SQUARE = 'square'; -OscNode.TRIANGLE = 'triangle'; -OscNode.SAWTOOTH = 'sawtooth'; - -const oscSine = nodeProxy(OscNode, OscNode.SINE); -const oscSquare = nodeProxy(OscNode, OscNode.SQUARE); -const oscTriangle = nodeProxy(OscNode, OscNode.TRIANGLE); -const oscSawtooth = nodeProxy(OscNode, OscNode.SAWTOOTH); - -addNodeClass('OscNode', OscNode); - -const directionToColor = (node) => nodeObject(node).mul(0.5).add(0.5); -const colorToDirection = (node) => nodeObject(node).mul(2.0).sub(1); - -class RemapNode extends Node { - constructor(node, inLowNode, inHighNode, outLowNode = float(0), outHighNode = float(1)) { - super(); - - this.node = node; - this.inLowNode = inLowNode; - this.inHighNode = inHighNode; - this.outLowNode = outLowNode; - this.outHighNode = outHighNode; - - this.doClamp = true; - } - - setup() { - const { node, inLowNode, inHighNode, outLowNode, outHighNode, doClamp } = this; - - let t = node.sub(inLowNode).div(inHighNode.sub(inLowNode)); - - if (doClamp === true) t = t.clamp(); - - return t.mul(outHighNode.sub(outLowNode)).add(outLowNode); - } -} - -const remap = nodeProxy(RemapNode, null, null, { doClamp: false }); -const remapClamp = nodeProxy(RemapNode); - -addNodeElement('remap', remap); -addNodeElement('remapClamp', remapClamp); - -addNodeClass('RemapNode', RemapNode); - -const rotateUV = Fn(([uv, rotation, center = vec2(0.5)]) => { - return uv.sub(center).rotate(rotation).add(center); -}); - -const spherizeUV = Fn(([uv, strength, center = vec2(0.5)]) => { - const delta = uv.sub(center); - const delta2 = delta.dot(delta); - const delta4 = delta2.mul(delta2); - const deltaOffset = delta4.mul(strength); - - return uv.add(delta.mul(deltaOffset)); -}); - -addNodeElement('rotateUV', rotateUV); -addNodeElement('spherizeUV', spherizeUV); - -const billboarding = Fn(({ position = null, horizontal = true, vertical = false }) => { - let worldMatrix; - - if (position !== null) { - worldMatrix = modelWorldMatrix.toVar(); - worldMatrix[3][0] = position.x; - worldMatrix[3][1] = position.y; - worldMatrix[3][2] = position.z; - } else { - worldMatrix = modelWorldMatrix; - } - - const modelViewMatrix = cameraViewMatrix.mul(worldMatrix); - - if (defined(horizontal)) { - modelViewMatrix[0][0] = modelWorldMatrix[0].length(); - modelViewMatrix[0][1] = 0; - modelViewMatrix[0][2] = 0; - } - - if (defined(vertical)) { - modelViewMatrix[1][0] = 0; - modelViewMatrix[1][1] = modelWorldMatrix[1].length(); - modelViewMatrix[1][2] = 0; - } - - modelViewMatrix[2][0] = 0; - modelViewMatrix[2][1] = 0; - modelViewMatrix[2][2] = 1; - - return cameraProjectionMatrix.mul(modelViewMatrix).mul(positionLocal); -}); - -const viewportSafeUV = Fn(([uv = null]) => { - const depth = linearDepth(); - const depthDiff = linearDepth(viewportDepthTexture(uv)).sub(depth); - const finalUV = depthDiff.lessThan(0).select(viewportUV, uv); - - return finalUV; -}); - -class RotateNode extends TempNode { - constructor(positionNode, rotationNode) { - super(); - - this.positionNode = positionNode; - this.rotationNode = rotationNode; - } - - getNodeType(builder) { - return this.positionNode.getNodeType(builder); - } - - setup(builder) { - const { rotationNode, positionNode } = this; - - const nodeType = this.getNodeType(builder); - - if (nodeType === 'vec2') { - const cosAngle = rotationNode.cos(); - const sinAngle = rotationNode.sin(); - - const rotationMatrix = mat2(cosAngle, sinAngle, sinAngle.negate(), cosAngle); - - return rotationMatrix.mul(positionNode); - } else { - const rotation = rotationNode; - const rotationXMatrix = mat4(vec4(1.0, 0.0, 0.0, 0.0), vec4(0.0, cos(rotation.x), sin(rotation.x).negate(), 0.0), vec4(0.0, sin(rotation.x), cos(rotation.x), 0.0), vec4(0.0, 0.0, 0.0, 1.0)); - const rotationYMatrix = mat4(vec4(cos(rotation.y), 0.0, sin(rotation.y), 0.0), vec4(0.0, 1.0, 0.0, 0.0), vec4(sin(rotation.y).negate(), 0.0, cos(rotation.y), 0.0), vec4(0.0, 0.0, 0.0, 1.0)); - const rotationZMatrix = mat4(vec4(cos(rotation.z), sin(rotation.z).negate(), 0.0, 0.0), vec4(sin(rotation.z), cos(rotation.z), 0.0, 0.0), vec4(0.0, 0.0, 1.0, 0.0), vec4(0.0, 0.0, 0.0, 1.0)); - - return rotationXMatrix.mul(rotationYMatrix).mul(rotationZMatrix).mul(vec4(positionNode, 1.0)).xyz; - } - } -} - -const rotate = nodeProxy(RotateNode); - -addNodeElement('rotate', rotate); - -addNodeClass('RotateNode', RotateNode); - -class SpriteSheetUVNode extends Node { - constructor(countNode, uvNode = uv(), frameNode = float(0)) { - super('vec2'); - - this.countNode = countNode; - this.uvNode = uvNode; - this.frameNode = frameNode; - } - - setup() { - const { frameNode, uvNode, countNode } = this; - - const { width, height } = countNode; - - const frameNum = frameNode.mod(width.mul(height)).floor(); - - const column = frameNum.mod(width); - const row = height.sub(frameNum.add(1).div(width).ceil()); - - const scale = countNode.reciprocal(); - const uvFrameOffset = vec2(column, row); - - return uvNode.add(uvFrameOffset).mul(scale); - } -} - -const spritesheetUV = nodeProxy(SpriteSheetUVNode); - -addNodeClass('SpriteSheetUVNode', SpriteSheetUVNode); - -class StorageArrayElementNode extends ArrayElementNode { - constructor(storageBufferNode, indexNode) { - super(storageBufferNode, indexNode); - - this.isStorageArrayElementNode = true; - } - - set storageBufferNode(value) { - this.node = value; - } - - get storageBufferNode() { - return this.node; - } - - setup(builder) { - if (builder.isAvailable('storageBuffer') === false) { - if (!this.node.instanceIndex && this.node.bufferObject === true) { - builder.setupPBO(this.node); - } - } - - return super.setup(builder); - } - - generate(builder, output) { - let snippet; - - const isAssignContext = builder.context.assign; - - // - - if (builder.isAvailable('storageBuffer') === false) { - const { node } = this; - - if (!node.instanceIndex && this.node.bufferObject === true && isAssignContext !== true) { - snippet = builder.generatePBO(this); - } else { - snippet = node.build(builder); - } - } else { - snippet = super.generate(builder); - } - - if (isAssignContext !== true) { - const type = this.getNodeType(builder); - - snippet = builder.format(snippet, type, output); - } - - return snippet; - } -} - -const storageElement = nodeProxy(StorageArrayElementNode); - -addNodeElement('storageElement', storageElement); - -addNodeClass('StorageArrayElementNode', StorageArrayElementNode); - -class TriplanarTexturesNode extends Node { - constructor(textureXNode, textureYNode = null, textureZNode = null, scaleNode = float(1), positionNode = positionLocal, normalNode = normalLocal) { - super('vec4'); - - this.textureXNode = textureXNode; - this.textureYNode = textureYNode; - this.textureZNode = textureZNode; - - this.scaleNode = scaleNode; - - this.positionNode = positionNode; - this.normalNode = normalNode; - } - - setup() { - const { textureXNode, textureYNode, textureZNode, scaleNode, positionNode, normalNode } = this; - - // Ref: https://github.com/keijiro/StandardTriplanar - - // Blending factor of triplanar mapping - let bf = normalNode.abs().normalize(); - bf = bf.div(bf.dot(vec3(1.0))); - - // Triplanar mapping - const tx = positionNode.yz.mul(scaleNode); - const ty = positionNode.zx.mul(scaleNode); - const tz = positionNode.xy.mul(scaleNode); - - // Base color - const textureX = textureXNode.value; - const textureY = textureYNode !== null ? textureYNode.value : textureX; - const textureZ = textureZNode !== null ? textureZNode.value : textureX; - - const cx = texture(textureX, tx).mul(bf.x); - const cy = texture(textureY, ty).mul(bf.y); - const cz = texture(textureZ, tz).mul(bf.z); - - return add(cx, cy, cz); - } -} - -const triplanarTextures = nodeProxy(TriplanarTexturesNode); -const triplanarTexture = (...params) => triplanarTextures(...params); - -addNodeElement('triplanarTexture', triplanarTexture); - -addNodeClass('TriplanarTexturesNode', TriplanarTexturesNode); - -const _reflectorPlane = new Plane(); -const _normal = new Vector3(); -const _reflectorWorldPosition = new Vector3(); -const _cameraWorldPosition = new Vector3(); -const _rotationMatrix = new Matrix4(); -const _lookAtPosition = new Vector3(0, 0, -1); -const clipPlane = new Vector4(); - -const _view = new Vector3(); -const _target = new Vector3(); -const _q = new Vector4(); - -const _size$9 = new Vector2(); - -const _defaultRT = new RenderTarget(); -const _defaultUV = viewportUV.flipX(); - -let _inReflector = false; - -class ReflectorNode extends TextureNode { - constructor(parameters = {}) { - super(_defaultRT.texture, _defaultUV); - - const { target = new Object3D(), resolution = 1, generateMipmaps = false, bounces = true } = parameters; - - // - - this.target = target; - this.resolution = resolution; - this.generateMipmaps = generateMipmaps; - this.bounces = bounces; - - this.updateBeforeType = bounces ? NodeUpdateType.RENDER : NodeUpdateType.FRAME; - - this.virtualCameras = new WeakMap(); - this.renderTargets = new WeakMap(); - } - - _updateResolution(renderTarget, renderer) { - const resolution = this.resolution; - - renderer.getDrawingBufferSize(_size$9); - - renderTarget.setSize(Math.round(_size$9.width * resolution), Math.round(_size$9.height * resolution)); - } - - setup(builder) { - this._updateResolution(_defaultRT, builder.renderer); - - return super.setup(builder); - } - - getTextureNode() { - return this.textureNode; - } - - getVirtualCamera(camera) { - let virtualCamera = this.virtualCameras.get(camera); - - if (virtualCamera === undefined) { - virtualCamera = camera.clone(); - - this.virtualCameras.set(camera, virtualCamera); - } - - return virtualCamera; - } - - getRenderTarget(camera) { - let renderTarget = this.renderTargets.get(camera); - - if (renderTarget === undefined) { - renderTarget = new RenderTarget(0, 0, { type: HalfFloatType }); - - if (this.generateMipmaps === true) { - renderTarget.texture.minFilter = LinearMipMapLinearFilter; - renderTarget.texture.generateMipmaps = true; - } - - this.renderTargets.set(camera, renderTarget); - } - - return renderTarget; - } - - updateBefore(frame) { - if (this.bounces === false && _inReflector) return false; - - _inReflector = true; - - const { scene, camera, renderer, material } = frame; - const { target } = this; - - const virtualCamera = this.getVirtualCamera(camera); - const renderTarget = this.getRenderTarget(virtualCamera); - - renderer.getDrawingBufferSize(_size$9); - - this._updateResolution(renderTarget, renderer); - - // - - _reflectorWorldPosition.setFromMatrixPosition(target.matrixWorld); - _cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld); - - _rotationMatrix.extractRotation(target.matrixWorld); - - _normal.set(0, 0, 1); - _normal.applyMatrix4(_rotationMatrix); - - _view.subVectors(_reflectorWorldPosition, _cameraWorldPosition); - - // Avoid rendering when reflector is facing away - - if (_view.dot(_normal) > 0) return; - - _view.reflect(_normal).negate(); - _view.add(_reflectorWorldPosition); - - _rotationMatrix.extractRotation(camera.matrixWorld); - - _lookAtPosition.set(0, 0, -1); - _lookAtPosition.applyMatrix4(_rotationMatrix); - _lookAtPosition.add(_cameraWorldPosition); - - _target.subVectors(_reflectorWorldPosition, _lookAtPosition); - _target.reflect(_normal).negate(); - _target.add(_reflectorWorldPosition); - - // - - virtualCamera.coordinateSystem = camera.coordinateSystem; - virtualCamera.position.copy(_view); - virtualCamera.up.set(0, 1, 0); - virtualCamera.up.applyMatrix4(_rotationMatrix); - virtualCamera.up.reflect(_normal); - virtualCamera.lookAt(_target); - - virtualCamera.near = camera.near; - virtualCamera.far = camera.far; - - virtualCamera.updateMatrixWorld(); - virtualCamera.projectionMatrix.copy(camera.projectionMatrix); - - // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html - // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf - _reflectorPlane.setFromNormalAndCoplanarPoint(_normal, _reflectorWorldPosition); - _reflectorPlane.applyMatrix4(virtualCamera.matrixWorldInverse); - - clipPlane.set(_reflectorPlane.normal.x, _reflectorPlane.normal.y, _reflectorPlane.normal.z, _reflectorPlane.constant); - - const projectionMatrix = virtualCamera.projectionMatrix; - - _q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0]; - _q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5]; - _q.z = -1.0; - _q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14]; - - // Calculate the scaled plane vector - clipPlane.multiplyScalar(1.0 / clipPlane.dot(_q)); - - const clipBias = 0; - - // Replacing the third row of the projection matrix - projectionMatrix.elements[2] = clipPlane.x; - projectionMatrix.elements[6] = clipPlane.y; - projectionMatrix.elements[10] = clipPlane.z - clipBias; - projectionMatrix.elements[14] = clipPlane.w; - - // - - this.value = renderTarget.texture; - - material.visible = false; - - const currentRenderTarget = renderer.getRenderTarget(); - const currentMRT = renderer.getMRT(); - - renderer.setMRT(null); - renderer.setRenderTarget(renderTarget); - - renderer.render(scene, virtualCamera); - - renderer.setMRT(currentMRT); - renderer.setRenderTarget(currentRenderTarget); - - material.visible = true; - - _inReflector = false; - } -} - -const reflector = (parameters) => nodeObject(new ReflectorNode(parameters)); - -// Helper for passes that need to fill the viewport with a single quad. - -const _camera = /*@__PURE__*/ new OrthographicCamera(-1, 1, 1, -1, 0, 1); - -// https://github.com/mrdoob/three.js/pull/21358 - -class QuadGeometry extends BufferGeometry { - constructor(flipY = false) { - super(); - - const uv = flipY === false ? [0, -1, 0, 1, 2, 1] : [0, 2, 0, 0, 2, 0]; - - this.setAttribute('position', new Float32BufferAttribute([-1, 3, 0, -1, -1, 0, 3, -1, 0], 3)); - this.setAttribute('uv', new Float32BufferAttribute(uv, 2)); - } -} - -const _geometry = /*@__PURE__*/ new QuadGeometry(); - -class QuadMesh extends Mesh { - constructor(material = null) { - super(_geometry, material); - - this.camera = _camera; - - this.isQuadMesh = true; - } - - renderAsync(renderer) { - return renderer.renderAsync(this, _camera); - } - - render(renderer) { - renderer.render(this, _camera); - } -} - -const _size$8 = /*@__PURE__*/ new Vector2(); - -class RTTNode extends TextureNode { - constructor(node, width = null, height = null, options = { type: HalfFloatType }) { - const renderTarget = new RenderTarget(width, height, options); - - super(renderTarget.texture, uv()); - - this.node = node; - this.width = width; - this.height = height; - - this.renderTarget = renderTarget; - - this.textureNeedsUpdate = true; - this.autoUpdate = true; - - this.updateMap = new WeakMap(); - - this._rttNode = null; - this._quadMesh = new QuadMesh(new NodeMaterial()); - - this.updateBeforeType = NodeUpdateType.RENDER; - } - - get autoSize() { - return this.width === null; - } - - setup(builder) { - this._rttNode = this.node.context(builder.getSharedContext()); - this._quadMesh.material.name = 'RTT'; - this._quadMesh.material.needsUpdate = true; - - return super.setup(builder); - } - - setSize(width, height) { - this.width = width; - this.height = height; - - const effectiveWidth = width * this.pixelRatio; - const effectiveHeight = height * this.pixelRatio; - - this.renderTarget.setSize(effectiveWidth, effectiveHeight); - - this.textureNeedsUpdate = true; - } - - setPixelRatio(pixelRatio) { - this.pixelRatio = pixelRatio; - - this.setSize(this.width, this.height); - } - - updateBefore({ renderer }) { - if (this.textureNeedsUpdate === false && this.autoUpdate === false) return; - - this.textureNeedsUpdate = false; - - // - - if (this.autoSize === true) { - this.pixelRatio = renderer.getPixelRatio(); - - const size = renderer.getSize(_size$8); - - this.setSize(size.width, size.height); - } - - // - - this._quadMesh.material.fragmentNode = this._rttNode; - - // - - const currentRenderTarget = renderer.getRenderTarget(); - - renderer.setRenderTarget(this.renderTarget); - - this._quadMesh.render(renderer); - - renderer.setRenderTarget(currentRenderTarget); - } - - clone() { - const newNode = new TextureNode(this.value, this.uvNode, this.levelNode); - newNode.sampler = this.sampler; - newNode.referenceNode = this; - - return newNode; - } -} - -const rtt = (node, ...params) => nodeObject(new RTTNode(nodeObject(node), ...params)); - -addNodeElement('toTexture', (node, ...params) => (node.isTextureNode ? node : rtt(node, ...params))); - -addNodeClass('RTTNode', RTTNode); - -const getBitangent = (crossNormalTangent) => crossNormalTangent.mul(tangentGeometry.w).xyz; - -const bitangentGeometry = /*#__PURE__*/ varying(getBitangent(normalGeometry.cross(tangentGeometry)), 'v_bitangentGeometry') - .normalize() - .toVar('bitangentGeometry'); -const bitangentLocal = /*#__PURE__*/ varying(getBitangent(normalLocal.cross(tangentLocal)), 'v_bitangentLocal') - .normalize() - .toVar('bitangentLocal'); -const bitangentView = /*#__PURE__*/ varying(getBitangent(normalView.cross(tangentView)), 'v_bitangentView') - .normalize() - .toVar('bitangentView'); -const bitangentWorld = /*#__PURE__*/ varying(getBitangent(normalWorld.cross(tangentWorld)), 'v_bitangentWorld') - .normalize() - .toVar('bitangentWorld'); -const transformedBitangentView = /*#__PURE__*/ getBitangent(transformedNormalView.cross(transformedTangentView)).normalize().toVar('transformedBitangentView'); -const transformedBitangentWorld = /*#__PURE__*/ transformedBitangentView.transformDirection(cameraViewMatrix).normalize().toVar('transformedBitangentWorld'); - -const TBNViewMatrix = mat3(tangentView, bitangentView, normalView); - -const parallaxDirection = positionViewDirection.mul(TBNViewMatrix); /*.normalize()*/ -const parallaxUV = (uv, scale) => uv.sub(parallaxDirection.mul(scale)); - -const transformedBentNormalView = (() => { - // https://google.github.io/filament/Filament.md.html#lighting/imagebasedlights/anisotropy - - let bentNormal = anisotropyB.cross(positionViewDirection); - bentNormal = bentNormal.cross(anisotropyB).normalize(); - bentNormal = mix(bentNormal, transformedNormalView, anisotropy.mul(roughness.oneMinus()).oneMinus().pow2().pow2()).normalize(); - - return bentNormal; -})(); - -class VertexColorNode extends AttributeNode { - constructor(index = 0) { - super(null, 'vec4'); - - this.isVertexColorNode = true; - - this.index = index; - } - - getAttributeName(/*builder*/) { - const index = this.index; - - return 'color' + (index > 0 ? index : ''); - } - - generate(builder) { - const attributeName = this.getAttributeName(builder); - const geometryAttribute = builder.hasGeometryAttribute(attributeName); - - let result; - - if (geometryAttribute === true) { - result = super.generate(builder); - } else { - // Vertex color fallback should be white - result = builder.generateConst(this.nodeType, new Vector4(1, 1, 1, 1)); - } - - return result; - } - - serialize(data) { - super.serialize(data); - - data.index = this.index; - } - - deserialize(data) { - super.deserialize(data); - - this.index = data.index; - } -} - -const vertexColor = (...params) => nodeObject(new VertexColorNode(...params)); - -addNodeClass('VertexColorNode', VertexColorNode); - -class RendererReferenceNode extends ReferenceNode { - constructor(property, inputType, renderer = null) { - super(property, inputType, renderer); - - this.renderer = renderer; - } - - updateReference(state) { - this.reference = this.renderer !== null ? this.renderer : state.renderer; - - return this.reference; - } -} - -const rendererReference = (name, type, renderer) => nodeObject(new RendererReferenceNode(name, type, renderer)); - -addNodeClass('RendererReferenceNode', RendererReferenceNode); - -// Mipped Bicubic Texture Filtering by N8 -// https://www.shadertoy.com/view/Dl2SDW - -const bC = 1.0 / 6.0; - -const w0 = (a) => mul(bC, mul(a, mul(a, a.negate().add(3.0)).sub(3.0)).add(1.0)); - -const w1 = (a) => mul(bC, mul(a, mul(a, mul(3.0, a).sub(6.0))).add(4.0)); - -const w2 = (a) => mul(bC, mul(a, mul(a, mul(-3.0, a).add(3.0)).add(3.0)).add(1.0)); - -const w3 = (a) => mul(bC, pow(a, 3)); - -const g0 = (a) => w0(a).add(w1(a)); - -const g1 = (a) => w2(a).add(w3(a)); - -// h0 and h1 are the two offset functions -const h0 = (a) => add(-1.0, w1(a).div(w0(a).add(w1(a)))); - -const h1 = (a) => add(1.0, w3(a).div(w2(a).add(w3(a)))); - -const bicubic = (textureNode, texelSize, lod) => { - const uv = textureNode.uvNode; - const uvScaled = mul(uv, texelSize.zw).add(0.5); - - const iuv = floor(uvScaled); - const fuv = fract(uvScaled); - - const g0x = g0(fuv.x); - const g1x = g1(fuv.x); - const h0x = h0(fuv.x); - const h1x = h1(fuv.x); - const h0y = h0(fuv.y); - const h1y = h1(fuv.y); - - const p0 = vec2(iuv.x.add(h0x), iuv.y.add(h0y)).sub(0.5).mul(texelSize.xy); - const p1 = vec2(iuv.x.add(h1x), iuv.y.add(h0y)).sub(0.5).mul(texelSize.xy); - const p2 = vec2(iuv.x.add(h0x), iuv.y.add(h1y)).sub(0.5).mul(texelSize.xy); - const p3 = vec2(iuv.x.add(h1x), iuv.y.add(h1y)).sub(0.5).mul(texelSize.xy); - - const a = g0(fuv.y).mul(add(g0x.mul(textureNode.uv(p0).level(lod)), g1x.mul(textureNode.uv(p1).level(lod)))); - const b = g1(fuv.y).mul(add(g0x.mul(textureNode.uv(p2).level(lod)), g1x.mul(textureNode.uv(p3).level(lod)))); - - return a.add(b); -}; - -const textureBicubicMethod = (textureNode, lodNode) => { - const fLodSize = vec2(textureNode.size(int(lodNode))); - const cLodSize = vec2(textureNode.size(int(lodNode.add(1.0)))); - const fLodSizeInv = div(1.0, fLodSize); - const cLodSizeInv = div(1.0, cLodSize); - const fSample = bicubic(textureNode, vec4(fLodSizeInv, fLodSize), floor(lodNode)); - const cSample = bicubic(textureNode, vec4(cLodSizeInv, cLodSize), ceil(lodNode)); - - return fract(lodNode).mix(fSample, cSample); -}; - -class TextureBicubicNode extends TempNode { - constructor(textureNode, blurNode = float(3)) { - super('vec4'); - - this.textureNode = textureNode; - this.blurNode = blurNode; - } - - setup() { - return textureBicubicMethod(this.textureNode, this.blurNode); - } -} - -const textureBicubic = nodeProxy(TextureBicubicNode); - -addNodeElement('bicubic', textureBicubic); - -addNodeClass('TextureBicubicNode', TextureBicubicNode); - -class PointUVNode extends Node { - constructor() { - super('vec2'); - - this.isPointUVNode = true; - } - - generate(/*builder*/) { - return 'vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y )'; - } -} - -const pointUV = nodeImmutable(PointUVNode); - -addNodeClass('PointUVNode', PointUVNode); - -class SceneNode extends Node { - constructor(scope = SceneNode.BACKGROUND_BLURRINESS, scene = null) { - super(); - - this.scope = scope; - this.scene = scene; - } - - setup(builder) { - const scope = this.scope; - const scene = this.scene !== null ? this.scene : builder.scene; - - let output; - - if (scope === SceneNode.BACKGROUND_BLURRINESS) { - output = reference('backgroundBlurriness', 'float', scene); - } else if (scope === SceneNode.BACKGROUND_INTENSITY) { - output = reference('backgroundIntensity', 'float', scene); - } else { - console.error('THREE.SceneNode: Unknown scope:', scope); - } - - return output; - } -} - -SceneNode.BACKGROUND_BLURRINESS = 'backgroundBlurriness'; -SceneNode.BACKGROUND_INTENSITY = 'backgroundIntensity'; - -const backgroundBlurriness = nodeImmutable(SceneNode, SceneNode.BACKGROUND_BLURRINESS); -const backgroundIntensity = nodeImmutable(SceneNode, SceneNode.BACKGROUND_INTENSITY); - -addNodeClass('SceneNode', SceneNode); - -const GPUPrimitiveTopology = { - PointList: 'point-list', - LineList: 'line-list', - LineStrip: 'line-strip', - TriangleList: 'triangle-list', - TriangleStrip: 'triangle-strip', -}; - -const GPUCompareFunction = { - Never: 'never', - Less: 'less', - Equal: 'equal', - LessEqual: 'less-equal', - Greater: 'greater', - NotEqual: 'not-equal', - GreaterEqual: 'greater-equal', - Always: 'always', -}; - -const GPUStoreOp = { - Store: 'store', - Discard: 'discard', -}; - -const GPULoadOp = { - Load: 'load', - Clear: 'clear', -}; - -const GPUFrontFace = { - CCW: 'ccw', - CW: 'cw', -}; - -const GPUCullMode = { - None: 'none', - Front: 'front', - Back: 'back', -}; - -const GPUIndexFormat = { - Uint16: 'uint16', - Uint32: 'uint32', -}; - -const GPUTextureFormat = { - // 8-bit formats - - R8Unorm: 'r8unorm', - R8Snorm: 'r8snorm', - R8Uint: 'r8uint', - R8Sint: 'r8sint', - - // 16-bit formats - - R16Uint: 'r16uint', - R16Sint: 'r16sint', - R16Float: 'r16float', - RG8Unorm: 'rg8unorm', - RG8Snorm: 'rg8snorm', - RG8Uint: 'rg8uint', - RG8Sint: 'rg8sint', - - // 32-bit formats - - R32Uint: 'r32uint', - R32Sint: 'r32sint', - R32Float: 'r32float', - RG16Uint: 'rg16uint', - RG16Sint: 'rg16sint', - RG16Float: 'rg16float', - RGBA8Unorm: 'rgba8unorm', - RGBA8UnormSRGB: 'rgba8unorm-srgb', - RGBA8Snorm: 'rgba8snorm', - RGBA8Uint: 'rgba8uint', - RGBA8Sint: 'rgba8sint', - BGRA8Unorm: 'bgra8unorm', - BGRA8UnormSRGB: 'bgra8unorm-srgb', - // Packed 32-bit formats - RGB9E5UFloat: 'rgb9e5ufloat', - RGB10A2Unorm: 'rgb10a2unorm', - RG11B10uFloat: 'rgb10a2unorm', - - // 64-bit formats - - RG32Uint: 'rg32uint', - RG32Sint: 'rg32sint', - RG32Float: 'rg32float', - RGBA16Uint: 'rgba16uint', - RGBA16Sint: 'rgba16sint', - RGBA16Float: 'rgba16float', - - // 128-bit formats - - RGBA32Uint: 'rgba32uint', - RGBA32Sint: 'rgba32sint', - RGBA32Float: 'rgba32float', - - // Depth and stencil formats - - Stencil8: 'stencil8', - Depth16Unorm: 'depth16unorm', - Depth24Plus: 'depth24plus', - Depth24PlusStencil8: 'depth24plus-stencil8', - Depth32Float: 'depth32float', - - // 'depth32float-stencil8' extension - - Depth32FloatStencil8: 'depth32float-stencil8', - - // BC compressed formats usable if 'texture-compression-bc' is both - // supported by the device/user agent and enabled in requestDevice. - - BC1RGBAUnorm: 'bc1-rgba-unorm', - BC1RGBAUnormSRGB: 'bc1-rgba-unorm-srgb', - BC2RGBAUnorm: 'bc2-rgba-unorm', - BC2RGBAUnormSRGB: 'bc2-rgba-unorm-srgb', - BC3RGBAUnorm: 'bc3-rgba-unorm', - BC3RGBAUnormSRGB: 'bc3-rgba-unorm-srgb', - BC4RUnorm: 'bc4-r-unorm', - BC4RSnorm: 'bc4-r-snorm', - BC5RGUnorm: 'bc5-rg-unorm', - BC5RGSnorm: 'bc5-rg-snorm', - BC6HRGBUFloat: 'bc6h-rgb-ufloat', - BC6HRGBFloat: 'bc6h-rgb-float', - BC7RGBAUnorm: 'bc7-rgba-unorm', - BC7RGBAUnormSRGB: 'bc7-rgba-srgb', - - // ETC2 compressed formats usable if 'texture-compression-etc2' is both - // supported by the device/user agent and enabled in requestDevice. - - ETC2RGB8Unorm: 'etc2-rgb8unorm', - ETC2RGB8UnormSRGB: 'etc2-rgb8unorm-srgb', - ETC2RGB8A1Unorm: 'etc2-rgb8a1unorm', - ETC2RGB8A1UnormSRGB: 'etc2-rgb8a1unorm-srgb', - ETC2RGBA8Unorm: 'etc2-rgba8unorm', - ETC2RGBA8UnormSRGB: 'etc2-rgba8unorm-srgb', - EACR11Unorm: 'eac-r11unorm', - EACR11Snorm: 'eac-r11snorm', - EACRG11Unorm: 'eac-rg11unorm', - EACRG11Snorm: 'eac-rg11snorm', - - // ASTC compressed formats usable if 'texture-compression-astc' is both - // supported by the device/user agent and enabled in requestDevice. - - ASTC4x4Unorm: 'astc-4x4-unorm', - ASTC4x4UnormSRGB: 'astc-4x4-unorm-srgb', - ASTC5x4Unorm: 'astc-5x4-unorm', - ASTC5x4UnormSRGB: 'astc-5x4-unorm-srgb', - ASTC5x5Unorm: 'astc-5x5-unorm', - ASTC5x5UnormSRGB: 'astc-5x5-unorm-srgb', - ASTC6x5Unorm: 'astc-6x5-unorm', - ASTC6x5UnormSRGB: 'astc-6x5-unorm-srgb', - ASTC6x6Unorm: 'astc-6x6-unorm', - ASTC6x6UnormSRGB: 'astc-6x6-unorm-srgb', - ASTC8x5Unorm: 'astc-8x5-unorm', - ASTC8x5UnormSRGB: 'astc-8x5-unorm-srgb', - ASTC8x6Unorm: 'astc-8x6-unorm', - ASTC8x6UnormSRGB: 'astc-8x6-unorm-srgb', - ASTC8x8Unorm: 'astc-8x8-unorm', - ASTC8x8UnormSRGB: 'astc-8x8-unorm-srgb', - ASTC10x5Unorm: 'astc-10x5-unorm', - ASTC10x5UnormSRGB: 'astc-10x5-unorm-srgb', - ASTC10x6Unorm: 'astc-10x6-unorm', - ASTC10x6UnormSRGB: 'astc-10x6-unorm-srgb', - ASTC10x8Unorm: 'astc-10x8-unorm', - ASTC10x8UnormSRGB: 'astc-10x8-unorm-srgb', - ASTC10x10Unorm: 'astc-10x10-unorm', - ASTC10x10UnormSRGB: 'astc-10x10-unorm-srgb', - ASTC12x10Unorm: 'astc-12x10-unorm', - ASTC12x10UnormSRGB: 'astc-12x10-unorm-srgb', - ASTC12x12Unorm: 'astc-12x12-unorm', - ASTC12x12UnormSRGB: 'astc-12x12-unorm-srgb', -}; - -const GPUAddressMode = { - ClampToEdge: 'clamp-to-edge', - Repeat: 'repeat', - MirrorRepeat: 'mirror-repeat', -}; - -const GPUFilterMode = { - Linear: 'linear', - Nearest: 'nearest', -}; - -const GPUBlendFactor = { - Zero: 'zero', - One: 'one', - Src: 'src', - OneMinusSrc: 'one-minus-src', - SrcAlpha: 'src-alpha', - OneMinusSrcAlpha: 'one-minus-src-alpha', - Dst: 'dst', - OneMinusDstColor: 'one-minus-dst', - DstAlpha: 'dst-alpha', - OneMinusDstAlpha: 'one-minus-dst-alpha', - SrcAlphaSaturated: 'src-alpha-saturated', - Constant: 'constant', - OneMinusConstant: 'one-minus-constant', -}; - -const GPUBlendOperation = { - Add: 'add', - Subtract: 'subtract', - ReverseSubtract: 'reverse-subtract', - Min: 'min', - Max: 'max', -}; - -const GPUColorWriteFlags = { - None: 0, - Red: 0x1, - Green: 0x2, - Blue: 0x4, - Alpha: 0x8, - All: 0xf, -}; - -const GPUStencilOperation = { - Keep: 'keep', - Zero: 'zero', - Replace: 'replace', - Invert: 'invert', - IncrementClamp: 'increment-clamp', - DecrementClamp: 'decrement-clamp', - IncrementWrap: 'increment-wrap', - DecrementWrap: 'decrement-wrap', -}; - -const GPUBufferBindingType = { - Uniform: 'uniform', - Storage: 'storage', - ReadOnlyStorage: 'read-only-storage', -}; - -const GPUStorageTextureAccess = { - WriteOnly: 'write-only', - ReadOnly: 'read-only', - ReadWrite: 'read-write', -}; - -const GPUTextureSampleType = { - Float: 'float', - UnfilterableFloat: 'unfilterable-float', - Depth: 'depth', - SInt: 'sint', - UInt: 'uint', -}; - -const GPUTextureDimension = { - OneD: '1d', - TwoD: '2d', - ThreeD: '3d', -}; - -const GPUTextureViewDimension = { - OneD: '1d', - TwoD: '2d', - TwoDArray: '2d-array', - Cube: 'cube', - CubeArray: 'cube-array', - ThreeD: '3d', -}; - -const GPUTextureAspect = { - All: 'all', - StencilOnly: 'stencil-only', - DepthOnly: 'depth-only', -}; - -const GPUInputStepMode = { - Vertex: 'vertex', - Instance: 'instance', -}; - -const GPUFeatureName = { - DepthClipControl: 'depth-clip-control', - Depth32FloatStencil8: 'depth32float-stencil8', - TextureCompressionBC: 'texture-compression-bc', - TextureCompressionETC2: 'texture-compression-etc2', - TextureCompressionASTC: 'texture-compression-astc', - TimestampQuery: 'timestamp-query', - IndirectFirstInstance: 'indirect-first-instance', - ShaderF16: 'shader-f16', - RG11B10UFloat: 'rg11b10ufloat-renderable', - BGRA8UNormStorage: 'bgra8unorm-storage', - Float32Filterable: 'float32-filterable', - ClipDistances: 'clip-distances', - DualSourceBlending: 'dual-source-blending', - Subgroups: 'subgroups', -}; - -class StorageBufferNode extends BufferNode { - constructor(value, bufferType, bufferCount = 0) { - super(value, bufferType, bufferCount); - - this.isStorageBufferNode = true; - - this.access = GPUBufferBindingType.Storage; - - this.bufferObject = false; - this.bufferCount = bufferCount; - - this._attribute = null; - this._varying = null; - - this.global = true; - - if (value.isStorageBufferAttribute !== true && value.isStorageInstancedBufferAttribute !== true) { - // TOOD: Improve it, possibly adding a new property to the BufferAttribute to identify it as a storage buffer read-only attribute in Renderer - - if (value.isInstancedBufferAttribute) value.isStorageInstancedBufferAttribute = true; - else value.isStorageBufferAttribute = true; - } - } - - getHash(builder) { - if (this.bufferCount === 0) { - let bufferData = builder.globalCache.getData(this.value); - - if (bufferData === undefined) { - bufferData = { - node: this, - }; - - builder.globalCache.setData(this.value, bufferData); - } - - return bufferData.node.uuid; - } - - return this.uuid; - } - - getInputType(/*builder*/) { - return 'storageBuffer'; - } - - element(indexNode) { - return storageElement(this, indexNode); - } - - setBufferObject(value) { - this.bufferObject = value; - - return this; - } - - setAccess(value) { - this.access = value; - - return this; - } - - toReadOnly() { - return this.setAccess(GPUBufferBindingType.ReadOnlyStorage); - } - - generate(builder) { - if (builder.isAvailable('storageBuffer')) { - return super.generate(builder); - } - - const nodeType = this.getNodeType(builder); - - if (this._attribute === null) { - this._attribute = bufferAttribute(this.value); - this._varying = varying(this._attribute); - } - - const output = this._varying.build(builder, nodeType); - - builder.registerTransform(output, this._attribute); - - return output; - } -} - -// Read-Write Storage -const storage = (value, type, count) => nodeObject(new StorageBufferNode(value, type, count)); -const storageObject = (value, type, count) => nodeObject(new StorageBufferNode(value, type, count).setBufferObject(true)); - -addNodeClass('StorageBufferNode', StorageBufferNode); - -class StorageTextureNode extends TextureNode { - constructor(value, uvNode, storeNode = null) { - super(value, uvNode); - - this.storeNode = storeNode; - - this.isStorageTextureNode = true; - - this.access = GPUStorageTextureAccess.WriteOnly; - } - - getInputType(/*builder*/) { - return 'storageTexture'; - } - - setup(builder) { - super.setup(builder); - - const properties = builder.getNodeProperties(this); - properties.storeNode = this.storeNode; - } - - setAccess(value) { - this.access = value; - return this; - } - - generate(builder, output) { - let snippet; - - if (this.storeNode !== null) { - snippet = this.generateStore(builder); - } else { - snippet = super.generate(builder, output); - } - - return snippet; - } - - toReadOnly() { - return this.setAccess(GPUStorageTextureAccess.ReadOnly); - } - - toWriteOnly() { - return this.setAccess(GPUStorageTextureAccess.WriteOnly); - } - - generateStore(builder) { - const properties = builder.getNodeProperties(this); - - const { uvNode, storeNode } = properties; - - const textureProperty = super.generate(builder, 'property'); - const uvSnippet = uvNode.build(builder, 'uvec2'); - const storeSnippet = storeNode.build(builder, 'vec4'); - - const snippet = builder.generateTextureStore(builder, textureProperty, uvSnippet, storeSnippet); - - builder.addLineFlowCode(snippet); - } -} - -const storageTexture = nodeProxy(StorageTextureNode); - -const textureStore = (value, uvNode, storeNode) => { - const node = storageTexture(value, uvNode, storeNode); - - if (storeNode !== null) node.append(); - - return node; -}; - -addNodeClass('StorageTextureNode', StorageTextureNode); - -const normal = Fn(({ texture, uv }) => { - const epsilon = 0.0001; - - const ret = vec3().temp(); - - If(uv.x.lessThan(epsilon), () => { - ret.assign(vec3(1, 0, 0)); - }) - .ElseIf(uv.y.lessThan(epsilon), () => { - ret.assign(vec3(0, 1, 0)); - }) - .ElseIf(uv.z.lessThan(epsilon), () => { - ret.assign(vec3(0, 0, 1)); - }) - .ElseIf(uv.x.greaterThan(1 - epsilon), () => { - ret.assign(vec3(-1, 0, 0)); - }) - .ElseIf(uv.y.greaterThan(1 - epsilon), () => { - ret.assign(vec3(0, -1, 0)); - }) - .ElseIf(uv.z.greaterThan(1 - epsilon), () => { - ret.assign(vec3(0, 0, -1)); - }) - .Else(() => { - const step = 0.01; - - const x = texture.uv(uv.add(vec3(-step, 0.0, 0.0))).r.sub(texture.uv(uv.add(vec3(step, 0.0, 0.0))).r); - const y = texture.uv(uv.add(vec3(0.0, -step, 0.0))).r.sub(texture.uv(uv.add(vec3(0.0, step, 0.0))).r); - const z = texture.uv(uv.add(vec3(0.0, 0.0, -step))).r.sub(texture.uv(uv.add(vec3(0.0, 0.0, step))).r); - - ret.assign(vec3(x, y, z)); - }); - - return ret.normalize(); -}); - -class Texture3DNode extends TextureNode { - constructor(value, uvNode = null, levelNode = null) { - super(value, uvNode, levelNode); - - this.isTexture3DNode = true; - } - - getInputType(/*builder*/) { - return 'texture3D'; - } - - getDefaultUV() { - return vec3(0.5, 0.5, 0.5); - } - - setUpdateMatrix(/*updateMatrix*/) {} // Ignore .updateMatrix for 3d TextureNode - - setupUV(builder, uvNode) { - return uvNode; - } - - generateUV(builder, uvNode) { - return uvNode.build(builder, 'vec3'); - } - - normal(uvNode) { - return normal({ texture: this, uv: uvNode }); - } -} - -const texture3D = nodeProxy(Texture3DNode); - -addNodeClass('Texture3DNode', Texture3DNode); - -class UserDataNode extends ReferenceNode { - constructor(property, inputType, userData = null) { - super(property, inputType, userData); - - this.userData = userData; - } - - update(frame) { - this.reference = this.userData !== null ? this.userData : frame.object.userData; - - super.update(frame); - } -} - -const userData = (name, inputType, userData) => nodeObject(new UserDataNode(name, inputType, userData)); - -addNodeClass('UserDataNode', UserDataNode); - -const _matrixCache = new WeakMap(); - -class VelocityNode extends TempNode { - constructor() { - super('vec2'); - - this.updateType = NodeUpdateType.OBJECT; - this.updateAfterType = NodeUpdateType.OBJECT; - - this.previousProjectionMatrix = uniform(new Matrix4()); - this.previousModelViewMatrix = uniform(new Matrix4()); - } - - update({ camera, object }) { - const previousModelMatrix = getPreviousMatrix(object); - const previousCameraMatrix = getPreviousMatrix(camera); - - this.previousModelViewMatrix.value.copy(previousModelMatrix); - this.previousProjectionMatrix.value.copy(previousCameraMatrix); - } - - updateAfter({ camera, object }) { - const previousModelMatrix = getPreviousMatrix(object); - const previousCameraMatrix = getPreviousMatrix(camera); - - previousModelMatrix.copy(object.modelViewMatrix); - previousCameraMatrix.copy(camera.projectionMatrix); - } - - setup(/*builder*/) { - const clipPositionCurrent = cameraProjectionMatrix.mul(modelViewMatrix).mul(positionLocal); - const clipPositionPrevious = this.previousProjectionMatrix.mul(this.previousModelViewMatrix).mul(positionPrevious); - - const ndcPositionCurrent = clipPositionCurrent.xy.div(clipPositionCurrent.w); - const ndcPositionPrevious = clipPositionPrevious.xy.div(clipPositionPrevious.w); - - const velocity = sub(ndcPositionCurrent, ndcPositionPrevious); - - return velocity; - } -} - -function getPreviousMatrix(object) { - let previousMatrix = _matrixCache.get(object); - - if (previousMatrix === undefined) { - previousMatrix = new Matrix4(); - _matrixCache.set(object, previousMatrix); - } - - return previousMatrix; -} - -const velocity = nodeImmutable(VelocityNode); - -addNodeClass('VelocityNode', VelocityNode); - -const burn = /*#__PURE__*/ Fn(([base, blend]) => { - return min$1(1.0, base.oneMinus().div(blend)).oneMinus(); -}).setLayout({ - name: 'burnBlend', - type: 'vec3', - inputs: [ - { name: 'base', type: 'vec3' }, - { name: 'blend', type: 'vec3' }, - ], -}); - -const dodge = /*#__PURE__*/ Fn(([base, blend]) => { - return min$1(base.div(blend.oneMinus()), 1.0); -}).setLayout({ - name: 'dodgeBlend', - type: 'vec3', - inputs: [ - { name: 'base', type: 'vec3' }, - { name: 'blend', type: 'vec3' }, - ], -}); - -const screen = /*#__PURE__*/ Fn(([base, blend]) => { - return base.oneMinus().mul(blend.oneMinus()).oneMinus(); -}).setLayout({ - name: 'screenBlend', - type: 'vec3', - inputs: [ - { name: 'base', type: 'vec3' }, - { name: 'blend', type: 'vec3' }, - ], -}); - -const overlay = /*#__PURE__*/ Fn(([base, blend]) => { - return mix(base.mul(2.0).mul(blend), base.oneMinus().mul(2.0).mul(blend.oneMinus()).oneMinus(), step(0.5, base)); -}).setLayout({ - name: 'overlayBlend', - type: 'vec3', - inputs: [ - { name: 'base', type: 'vec3' }, - { name: 'blend', type: 'vec3' }, - ], -}); - -addNodeElement('burn', burn); -addNodeElement('dodge', dodge); -addNodeElement('overlay', overlay); -addNodeElement('screen', screen); - -// Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen -// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf - -const dHdxy_fwd = Fn(({ textureNode, bumpScale }) => { - // It's used to preserve the same TextureNode instance - const sampleTexture = (callback) => textureNode.cache().context({ getUV: (texNode) => callback(texNode.uvNode || uv()), forceUVContext: true }); - - const Hll = float(sampleTexture((uvNode) => uvNode)); - - return vec2(float(sampleTexture((uvNode) => uvNode.add(uvNode.dFdx()))).sub(Hll), float(sampleTexture((uvNode) => uvNode.add(uvNode.dFdy()))).sub(Hll)).mul(bumpScale); -}); - -// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2) - -const perturbNormalArb = Fn((inputs) => { - const { surf_pos, surf_norm, dHdxy } = inputs; - - // normalize is done to ensure that the bump map looks the same regardless of the texture's scale - const vSigmaX = surf_pos.dFdx().normalize(); - const vSigmaY = surf_pos.dFdy().normalize(); - const vN = surf_norm; // normalized - - const R1 = vSigmaY.cross(vN); - const R2 = vN.cross(vSigmaX); - - const fDet = vSigmaX.dot(R1).mul(faceDirection); - - const vGrad = fDet.sign().mul(dHdxy.x.mul(R1).add(dHdxy.y.mul(R2))); - - return fDet.abs().mul(surf_norm).sub(vGrad).normalize(); -}); - -class BumpMapNode extends TempNode { - constructor(textureNode, scaleNode = null) { - super('vec3'); - - this.textureNode = textureNode; - this.scaleNode = scaleNode; - } - - setup() { - const bumpScale = this.scaleNode !== null ? this.scaleNode : 1; - const dHdxy = dHdxy_fwd({ textureNode: this.textureNode, bumpScale }); - - return perturbNormalArb({ - surf_pos: positionView, - surf_norm: normalView, - dHdxy, - }); - } -} - -const bumpMap = nodeProxy(BumpMapNode); - -addNodeElement('bumpMap', bumpMap); - -addNodeClass('BumpMapNode', BumpMapNode); - -const saturation = /*#__PURE__*/ Fn(([color, adjustment = float(1)]) => { - return adjustment.mix(luminance(color.rgb), color.rgb); -}); - -const vibrance = /*#__PURE__*/ Fn(([color, adjustment = float(1)]) => { - const average = add(color.r, color.g, color.b).div(3.0); - - const mx = color.r.max(color.g.max(color.b)); - const amt = mx.sub(average).mul(adjustment).mul(-3.0); - - return mix(color.rgb, mx, amt); -}); - -const hue = /*#__PURE__*/ Fn(([color, adjustment = float(1)]) => { - const k = vec3(0.57735, 0.57735, 0.57735); - - const cosAngle = adjustment.cos(); - - return vec3( - color.rgb.mul(cosAngle).add( - k - .cross(color.rgb) - .mul(adjustment.sin()) - .add(k.mul(dot(k, color.rgb).mul(cosAngle.oneMinus()))) - ) - ); -}); - -const _luminanceCoefficients = /*#__PURE__*/ new Vector3(); -const luminance = (color, luminanceCoefficients = vec3(...ColorManagement.getLuminanceCoefficients(_luminanceCoefficients))) => dot(color, luminanceCoefficients); - -const threshold = (color, threshold) => mix(vec3(0.0), color, luminance(color).sub(threshold).max(0)); - -addNodeElement('saturation', saturation); -addNodeElement('vibrance', vibrance); -addNodeElement('hue', hue); -addNodeElement('threshold', threshold); - -// Normal Mapping Without Precomputed Tangents -// http://www.thetenthplanet.de/archives/1180 - -const perturbNormal2Arb = Fn((inputs) => { - const { eye_pos, surf_norm, mapN, uv } = inputs; - - const q0 = eye_pos.dFdx(); - const q1 = eye_pos.dFdy(); - const st0 = uv.dFdx(); - const st1 = uv.dFdy(); - - const N = surf_norm; // normalized - - const q1perp = q1.cross(N); - const q0perp = N.cross(q0); - - const T = q1perp.mul(st0.x).add(q0perp.mul(st1.x)); - const B = q1perp.mul(st0.y).add(q0perp.mul(st1.y)); - - const det = T.dot(T).max(B.dot(B)); - const scale = faceDirection.mul(det.inverseSqrt()); - - return add(T.mul(mapN.x, scale), B.mul(mapN.y, scale), N.mul(mapN.z)).normalize(); -}); - -class NormalMapNode extends TempNode { - constructor(node, scaleNode = null) { - super('vec3'); - - this.node = node; - this.scaleNode = scaleNode; - - this.normalMapType = TangentSpaceNormalMap; - } - - setup(builder) { - const { normalMapType, scaleNode } = this; - - let normalMap = this.node.mul(2.0).sub(1.0); - - if (scaleNode !== null) { - normalMap = vec3(normalMap.xy.mul(scaleNode), normalMap.z); - } - - let outputNode = null; - - if (normalMapType === ObjectSpaceNormalMap) { - outputNode = modelNormalMatrix.mul(normalMap).normalize(); - } else if (normalMapType === TangentSpaceNormalMap) { - const tangent = builder.hasGeometryAttribute('tangent'); - - if (tangent === true) { - outputNode = TBNViewMatrix.mul(normalMap).normalize(); - } else { - outputNode = perturbNormal2Arb({ - eye_pos: positionView, - surf_norm: normalView, - mapN: normalMap, - uv: uv(), - }); - } - } - - return outputNode; - } -} - -const normalMap = nodeProxy(NormalMapNode); - -addNodeElement('normalMap', normalMap); - -addNodeClass('NormalMapNode', NormalMapNode); - -class PosterizeNode extends TempNode { - constructor(sourceNode, stepsNode) { - super(); - - this.sourceNode = sourceNode; - this.stepsNode = stepsNode; - } - - setup() { - const { sourceNode, stepsNode } = this; - - return sourceNode.mul(stepsNode).floor().div(stepsNode); - } -} - -const posterize = nodeProxy(PosterizeNode); - -addNodeElement('posterize', posterize); - -addNodeClass('PosterizeNode', PosterizeNode); - -// exposure only -const LinearToneMappingNode = Fn(({ color, exposure }) => { - return color.mul(exposure).clamp(); -}); - -// source: https://www.cs.utah.edu/docs/techreports/2002/pdf/UUCS-02-001.pdf -const ReinhardToneMappingNode = Fn(({ color, exposure }) => { - color = color.mul(exposure); - - return color.div(color.add(1.0)).clamp(); -}); - -// source: http://filmicworlds.com/blog/filmic-tonemapping-operators/ -const CineonToneMappingNode = Fn(({ color, exposure }) => { - // filmic operator by Jim Hejl and Richard Burgess-Dawson - color = color.mul(exposure); - color = color.sub(0.004).max(0.0); - - const a = color.mul(color.mul(6.2).add(0.5)); - const b = color.mul(color.mul(6.2).add(1.7)).add(0.06); - - return a.div(b).pow(2.2); -}); - -// source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs -const RRTAndODTFit = Fn(({ color }) => { - const a = color.mul(color.add(0.0245786)).sub(0.000090537); - const b = color.mul(color.add(0.432951).mul(0.983729)).add(0.238081); - - return a.div(b); -}); - -// source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs -const ACESFilmicToneMappingNode = Fn(({ color, exposure }) => { - // sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT - const ACESInputMat = mat3(0.59719, 0.35458, 0.04823, 0.076, 0.90834, 0.01566, 0.0284, 0.13383, 0.83777); - - // ODT_SAT => XYZ => D60_2_D65 => sRGB - const ACESOutputMat = mat3(1.60475, -0.53108, -0.07367, -0.10208, 1.10813, -0.00605, -0.00327, -0.07276, 1.07602); - - color = color.mul(exposure).div(0.6); - - color = ACESInputMat.mul(color); - - // Apply RRT and ODT - color = RRTAndODTFit({ color }); - - color = ACESOutputMat.mul(color); - - // Clamp to [0, 1] - return color.clamp(); -}); - -const LINEAR_REC2020_TO_LINEAR_SRGB = mat3(vec3(1.6605, -0.1246, -0.0182), vec3(-0.5876, 1.1329, -0.1006), vec3(-0.0728, -0.0083, 1.1187)); -const LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(vec3(0.6274, 0.0691, 0.0164), vec3(0.3293, 0.9195, 0.088), vec3(0.0433, 0.0113, 0.8956)); - -const agxDefaultContrastApprox = Fn(([x_immutable]) => { - const x = vec3(x_immutable).toVar(); - const x2 = vec3(x.mul(x)).toVar(); - const x4 = vec3(x2.mul(x2)).toVar(); - - return float(15.5) - .mul(x4.mul(x2)) - .sub(mul(40.14, x4.mul(x))) - .add( - mul(31.96, x4) - .sub(mul(6.868, x2.mul(x))) - .add(mul(0.4298, x2).add(mul(0.1191, x).sub(0.00232))) - ); -}); - -const AgXToneMappingNode = Fn(({ color, exposure }) => { - const colortone = vec3(color).toVar(); - const AgXInsetMatrix = mat3(vec3(0.856627153315983, 0.137318972929847, 0.11189821299995), vec3(0.0951212405381588, 0.761241990602591, 0.0767994186031903), vec3(0.0482516061458583, 0.101439036467562, 0.811302368396859)); - const AgXOutsetMatrix = mat3(vec3(1.1271005818144368, -0.1413297634984383, -0.14132976349843826), vec3(-0.11060664309660323, 1.157823702216272, -0.11060664309660294), vec3(-0.016493938717834573, -0.016493938717834257, 1.2519364065950405)); - const AgxMinEv = float(-12.47393); - const AgxMaxEv = float(4.026069); - colortone.mulAssign(exposure); - colortone.assign(LINEAR_SRGB_TO_LINEAR_REC2020.mul(colortone)); - colortone.assign(AgXInsetMatrix.mul(colortone)); - colortone.assign(max$1(colortone, 1e-10)); - colortone.assign(log2(colortone)); - colortone.assign(colortone.sub(AgxMinEv).div(AgxMaxEv.sub(AgxMinEv))); - colortone.assign(clamp(colortone, 0.0, 1.0)); - colortone.assign(agxDefaultContrastApprox(colortone)); - colortone.assign(AgXOutsetMatrix.mul(colortone)); - colortone.assign(pow(max$1(vec3(0.0), colortone), vec3(2.2))); - colortone.assign(LINEAR_REC2020_TO_LINEAR_SRGB.mul(colortone)); - colortone.assign(clamp(colortone, 0.0, 1.0)); - - return colortone; -}); - -// https://modelviewer.dev/examples/tone-mapping - -const NeutralToneMappingNode = Fn(({ color, exposure }) => { - const StartCompression = float(0.8 - 0.04); - const Desaturation = float(0.15); - - color = color.mul(exposure); - - const x = min$1(color.r, min$1(color.g, color.b)); - const offset = select(x.lessThan(0.08), x.sub(mul(6.25, x.mul(x))), 0.04); - - color.subAssign(offset); - - const peak = max$1(color.r, max$1(color.g, color.b)); - - If(peak.lessThan(StartCompression), () => { - return color; - }); - - const d = sub(1, StartCompression); - const newPeak = sub(1, d.mul(d).div(peak.add(d.sub(StartCompression)))); - color.mulAssign(newPeak.div(peak)); - const g = sub(1, div(1, Desaturation.mul(peak.sub(newPeak)).add(1))); - - return mix(color, vec3(newPeak), g); -}).setLayout({ - name: 'NeutralToneMapping', - type: 'vec3', - inputs: [ - { name: 'color', type: 'vec3' }, - { name: 'exposure', type: 'float' }, - ], -}); - -const toneMappingLib = { - [LinearToneMapping]: LinearToneMappingNode, - [ReinhardToneMapping]: ReinhardToneMappingNode, - [CineonToneMapping]: CineonToneMappingNode, - [ACESFilmicToneMapping]: ACESFilmicToneMappingNode, - [AgXToneMapping]: AgXToneMappingNode, - [NeutralToneMapping]: NeutralToneMappingNode, -}; - -class ToneMappingNode extends TempNode { - constructor(toneMapping, exposureNode = toneMappingExposure, colorNode = null) { - super('vec3'); - - this.toneMapping = toneMapping; - - this.exposureNode = exposureNode; - this.colorNode = colorNode; - } - - getCacheKey() { - let cacheKey = super.getCacheKey(); - cacheKey = '{toneMapping:' + this.toneMapping + ',nodes:' + cacheKey + '}'; - - return cacheKey; - } - - setup(builder) { - const colorNode = this.colorNode || builder.context.color; - const toneMapping = this.toneMapping; - - if (toneMapping === NoToneMapping) return colorNode; - - const toneMappingParams = { exposure: this.exposureNode, color: colorNode.rgb }; - const toneMappingNode = toneMappingLib[toneMapping]; - - let outputNode = null; - - if (toneMappingNode) { - outputNode = vec4(toneMappingNode(toneMappingParams), colorNode.a); - } else { - console.error('ToneMappingNode: Unsupported Tone Mapping configuration.', toneMapping); - - outputNode = colorNode; - } - - return outputNode; - } -} - -const toneMapping = (mapping, exposure, color) => nodeObject(new ToneMappingNode(mapping, nodeObject(exposure), nodeObject(color))); -const toneMappingExposure = rendererReference('toneMappingExposure', 'float'); - -addNodeElement('toneMapping', (color, mapping, exposure) => toneMapping(mapping, exposure, color)); - -addNodeClass('ToneMappingNode', ToneMappingNode); - -let _sharedFramebuffer = null; - -class ViewportSharedTextureNode extends ViewportTextureNode { - constructor(uvNode = viewportUV, levelNode = null) { - if (_sharedFramebuffer === null) { - _sharedFramebuffer = new FramebufferTexture(); - } - - super(uvNode, levelNode, _sharedFramebuffer); - } - - updateReference() { - return this; - } -} - -const viewportSharedTexture = nodeProxy(ViewportSharedTextureNode); - -addNodeElement('viewportSharedTexture', viewportSharedTexture); - -addNodeClass('ViewportSharedTextureNode', ViewportSharedTextureNode); - -const _size$7 = /*@__PURE__*/ new Vector2(); - -class PassTextureNode extends TextureNode { - constructor(passNode, texture) { - super(texture); - - this.passNode = passNode; - - this.setUpdateMatrix(false); - } - - setup(builder) { - if (builder.object.isQuadMesh) this.passNode.build(builder); - - return super.setup(builder); - } - - clone() { - return new this.constructor(this.passNode, this.value); - } -} - -class PassMultipleTextureNode extends PassTextureNode { - constructor(passNode, textureName, previousTexture = false) { - super(passNode, null); - - this.textureName = textureName; - this.previousTexture = previousTexture; - } - - updateTexture() { - this.value = this.previousTexture ? this.passNode.getPreviousTexture(this.textureName) : this.passNode.getTexture(this.textureName); - } - - setup(builder) { - this.updateTexture(); - - return super.setup(builder); - } - - clone() { - return new this.constructor(this.passNode, this.textureName, this.previousTexture); - } -} - -class PassNode extends TempNode { - constructor(scope, scene, camera, options = {}) { - super('vec4'); - - this.scope = scope; - this.scene = scene; - this.camera = camera; - this.options = options; - - this._pixelRatio = 1; - this._width = 1; - this._height = 1; - - const depthTexture = new DepthTexture(); - depthTexture.isRenderTargetTexture = true; - //depthTexture.type = FloatType; - depthTexture.name = 'depth'; - - const renderTarget = new RenderTarget(this._width * this._pixelRatio, this._height * this._pixelRatio, { type: HalfFloatType, ...options }); - renderTarget.texture.name = 'output'; - renderTarget.depthTexture = depthTexture; - - this.renderTarget = renderTarget; - - this.updateBeforeType = NodeUpdateType.FRAME; - - this._textures = { - output: renderTarget.texture, - depth: depthTexture, - }; - - this._textureNodes = {}; - this._linearDepthNodes = {}; - this._viewZNodes = {}; - - this._previousTextures = {}; - this._previousTextureNodes = {}; - - this._cameraNear = uniform(0); - this._cameraFar = uniform(0); - - this._mrt = null; - - this.isPassNode = true; - } - - setMRT(mrt) { - this._mrt = mrt; - - return this; - } - - getMRT() { - return this._mrt; - } - - isGlobal() { - return true; - } - - getTexture(name) { - let texture = this._textures[name]; - - if (texture === undefined) { - const refTexture = this.renderTarget.texture; - - texture = refTexture.clone(); - texture.isRenderTargetTexture = true; - texture.name = name; - - this._textures[name] = texture; - - this.renderTarget.textures.push(texture); - } - - return texture; - } - - getPreviousTexture(name) { - let texture = this._previousTextures[name]; - - if (texture === undefined) { - texture = this.getTexture(name).clone(); - texture.isRenderTargetTexture = true; - - this._previousTextures[name] = texture; - } - - return texture; - } - - toggleTexture(name) { - const prevTexture = this._previousTextures[name]; - - if (prevTexture !== undefined) { - const texture = this._textures[name]; - - const index = this.renderTarget.textures.indexOf(texture); - this.renderTarget.textures[index] = prevTexture; - - this._textures[name] = prevTexture; - this._previousTextures[name] = texture; - - this._textureNodes[name].updateTexture(); - this._previousTextureNodes[name].updateTexture(); - } - } - - getTextureNode(name = 'output') { - let textureNode = this._textureNodes[name]; - - if (textureNode === undefined) { - this._textureNodes[name] = textureNode = nodeObject(new PassMultipleTextureNode(this, name)); - this._textureNodes[name].updateTexture(); - } - - return textureNode; - } - - getPreviousTextureNode(name = 'output') { - let textureNode = this._previousTextureNodes[name]; - - if (textureNode === undefined) { - if (this._textureNodes[name] === undefined) this.getTextureNode(name); - - this._previousTextureNodes[name] = textureNode = nodeObject(new PassMultipleTextureNode(this, name, true)); - this._previousTextureNodes[name].updateTexture(); - } - - return textureNode; - } - - getViewZNode(name = 'depth') { - let viewZNode = this._viewZNodes[name]; - - if (viewZNode === undefined) { - const cameraNear = this._cameraNear; - const cameraFar = this._cameraFar; - - this._viewZNodes[name] = viewZNode = perspectiveDepthToViewZ(this.getTextureNode(name), cameraNear, cameraFar); - } - - return viewZNode; - } - - getLinearDepthNode(name = 'depth') { - let linearDepthNode = this._linearDepthNodes[name]; - - if (linearDepthNode === undefined) { - const cameraNear = this._cameraNear; - const cameraFar = this._cameraFar; - const viewZNode = this.getViewZNode(name); - - // TODO: just if ( builder.camera.isPerspectiveCamera ) - - this._linearDepthNodes[name] = linearDepthNode = viewZToOrthographicDepth(viewZNode, cameraNear, cameraFar); - } - - return linearDepthNode; - } - - setup({ renderer }) { - this.renderTarget.samples = this.options.samples === undefined ? renderer.samples : this.options.samples; - - // Disable MSAA for WebGL backend for now - if (renderer.backend.isWebGLBackend === true) { - this.renderTarget.samples = 0; - } - - this.renderTarget.depthTexture.isMultisampleRenderTargetTexture = this.renderTarget.samples > 1; - - return this.scope === PassNode.COLOR ? this.getTextureNode() : this.getLinearDepthNode(); - } - - updateBefore(frame) { - const { renderer } = frame; - const { scene, camera } = this; - - this._pixelRatio = renderer.getPixelRatio(); - - const size = renderer.getSize(_size$7); - - this.setSize(size.width, size.height); - - const currentRenderTarget = renderer.getRenderTarget(); - const currentMRT = renderer.getMRT(); - - this._cameraNear.value = camera.near; - this._cameraFar.value = camera.far; - - for (const name in this._previousTextures) { - this.toggleTexture(name); - } - - renderer.setRenderTarget(this.renderTarget); - renderer.setMRT(this._mrt); - - renderer.render(scene, camera); - - renderer.setRenderTarget(currentRenderTarget); - renderer.setMRT(currentMRT); - } - - setSize(width, height) { - this._width = width; - this._height = height; - - const effectiveWidth = this._width * this._pixelRatio; - const effectiveHeight = this._height * this._pixelRatio; - - this.renderTarget.setSize(effectiveWidth, effectiveHeight); - } - - setPixelRatio(pixelRatio) { - this._pixelRatio = pixelRatio; - - this.setSize(this._width, this._height); - } - - dispose() { - this.renderTarget.dispose(); - } -} - -PassNode.COLOR = 'color'; -PassNode.DEPTH = 'depth'; - -const pass = (scene, camera, options) => nodeObject(new PassNode(PassNode.COLOR, scene, camera, options)); -const passTexture = (pass, texture) => nodeObject(new PassTextureNode(pass, texture)); -const depthPass = (scene, camera) => nodeObject(new PassNode(PassNode.DEPTH, scene, camera)); - -addNodeClass('PassNode', PassNode); - -// WebGPU: The use of a single QuadMesh for both gaussian blur passes results in a single RenderObject with a SampledTexture binding that -// alternates between source textures and triggers creation of new BindGroups and BindGroupLayouts every frame. - -const _quadMesh1 = /*@__PURE__*/ new QuadMesh(); -const _quadMesh2 = /*@__PURE__*/ new QuadMesh(); - -class GaussianBlurNode extends TempNode { - constructor(textureNode, directionNode = null, sigma = 2) { - super('vec4'); - - this.textureNode = textureNode; - this.directionNode = directionNode; - this.sigma = sigma; - - this._invSize = uniform(new Vector2()); - this._passDirection = uniform(new Vector2()); - - this._horizontalRT = new RenderTarget(); - this._horizontalRT.texture.name = 'GaussianBlurNode.horizontal'; - this._verticalRT = new RenderTarget(); - this._verticalRT.texture.name = 'GaussianBlurNode.vertical'; - - this._textureNode = passTexture(this, this._verticalRT.texture); - - this.updateBeforeType = NodeUpdateType.RENDER; - - this.resolution = new Vector2(1, 1); - } - - setSize(width, height) { - width = Math.max(Math.round(width * this.resolution.x), 1); - height = Math.max(Math.round(height * this.resolution.y), 1); - - this._invSize.value.set(1 / width, 1 / height); - this._horizontalRT.setSize(width, height); - this._verticalRT.setSize(width, height); - } - - updateBefore(frame) { - const { renderer } = frame; - - const textureNode = this.textureNode; - const map = textureNode.value; - - const currentRenderTarget = renderer.getRenderTarget(); - const currentMRT = renderer.getMRT(); - - const currentTexture = textureNode.value; - - _quadMesh1.material = this._material; - _quadMesh2.material = this._material; - - this.setSize(map.image.width, map.image.height); - - const textureType = map.type; - - this._horizontalRT.texture.type = textureType; - this._verticalRT.texture.type = textureType; - - // clear - - renderer.setMRT(null); - - // horizontal - - renderer.setRenderTarget(this._horizontalRT); - - this._passDirection.value.set(1, 0); - - _quadMesh1.render(renderer); - - // vertical - - textureNode.value = this._horizontalRT.texture; - renderer.setRenderTarget(this._verticalRT); - - this._passDirection.value.set(0, 1); - - _quadMesh2.render(renderer); - - // restore - - renderer.setRenderTarget(currentRenderTarget); - renderer.setMRT(currentMRT); - textureNode.value = currentTexture; - } - - getTextureNode() { - return this._textureNode; - } - - setup(builder) { - const textureNode = this.textureNode; - - if (textureNode.isTextureNode !== true) { - console.error('GaussianBlurNode requires a TextureNode.'); - - return vec4(); - } - - // - - const uvNode = textureNode.uvNode || uv(); - const directionNode = vec2(this.directionNode || 1); - - const sampleTexture = (uv) => textureNode.uv(uv); - - const blur = Fn(() => { - const kernelSize = 3 + 2 * this.sigma; - const gaussianCoefficients = this._getCoefficients(kernelSize); - - const invSize = this._invSize; - const direction = directionNode.mul(this._passDirection); - - const weightSum = float(gaussianCoefficients[0]).toVar(); - const diffuseSum = vec4(sampleTexture(uvNode).mul(weightSum)).toVar(); - - for (let i = 1; i < kernelSize; i++) { - const x = float(i); - const w = float(gaussianCoefficients[i]); - - const uvOffset = vec2(direction.mul(invSize.mul(x))).toVar(); - - const sample1 = vec4(sampleTexture(uvNode.add(uvOffset))); - const sample2 = vec4(sampleTexture(uvNode.sub(uvOffset))); - - diffuseSum.addAssign(sample1.add(sample2).mul(w)); - weightSum.addAssign(mul(2.0, w)); - } - - return diffuseSum.div(weightSum); - }); - - // - - const material = this._material || (this._material = builder.createNodeMaterial()); - material.fragmentNode = blur().context(builder.getSharedContext()); - material.name = 'Gaussian_blur'; - material.needsUpdate = true; - - // - - const properties = builder.getNodeProperties(this); - properties.textureNode = textureNode; - - // - - return this._textureNode; - } - - dispose() { - this._horizontalRT.dispose(); - this._verticalRT.dispose(); - } - - _getCoefficients(kernelRadius) { - const coefficients = []; - - for (let i = 0; i < kernelRadius; i++) { - coefficients.push((0.39894 * Math.exp((-0.5 * i * i) / (kernelRadius * kernelRadius))) / kernelRadius); - } - - return coefficients; - } -} - -const gaussianBlur = (node, directionNode, sigma) => nodeObject(new GaussianBlurNode(nodeObject(node).toTexture(), directionNode, sigma)); - -addNodeElement('gaussianBlur', gaussianBlur); - -const _size$6 = /*@__PURE__*/ new Vector2(); - -const _quadMeshComp = /*@__PURE__*/ new QuadMesh(); - -class AfterImageNode extends TempNode { - constructor(textureNode, damp = 0.96) { - super(textureNode); - - this.textureNode = textureNode; - this.textureNodeOld = texture(); - this.damp = uniform(damp); - - this._compRT = new RenderTarget(); - this._compRT.texture.name = 'AfterImageNode.comp'; - - this._oldRT = new RenderTarget(); - this._oldRT.texture.name = 'AfterImageNode.old'; - - this._textureNode = passTexture(this, this._compRT.texture); - - this.updateBeforeType = NodeUpdateType.RENDER; - } - - getTextureNode() { - return this._textureNode; - } - - setSize(width, height) { - this._compRT.setSize(width, height); - this._oldRT.setSize(width, height); - } - - updateBefore(frame) { - const { renderer } = frame; - - const textureNode = this.textureNode; - const map = textureNode.value; - - const textureType = map.type; - - this._compRT.texture.type = textureType; - this._oldRT.texture.type = textureType; - - renderer.getDrawingBufferSize(_size$6); - - this.setSize(_size$6.x, _size$6.y); - - const currentRenderTarget = renderer.getRenderTarget(); - const currentTexture = textureNode.value; - - this.textureNodeOld.value = this._oldRT.texture; - - // comp - renderer.setRenderTarget(this._compRT); - _quadMeshComp.render(renderer); - - // Swap the textures - const temp = this._oldRT; - this._oldRT = this._compRT; - this._compRT = temp; - - renderer.setRenderTarget(currentRenderTarget); - textureNode.value = currentTexture; - } - - setup(builder) { - const textureNode = this.textureNode; - const textureNodeOld = this.textureNodeOld; - - // - - const uvNode = textureNode.uvNode || uv(); - - textureNodeOld.uvNode = uvNode; - - const sampleTexture = (uv) => textureNode.uv(uv); - - const when_gt = Fn(([x_immutable, y_immutable]) => { - const y = float(y_immutable).toVar(); - const x = vec4(x_immutable).toVar(); - - return max$1(sign(x.sub(y)), 0.0); - }); - - const afterImg = Fn(() => { - const texelOld = vec4(textureNodeOld); - const texelNew = vec4(sampleTexture(uvNode)); - - texelOld.mulAssign(this.damp.mul(when_gt(texelOld, 0.1))); - return max$1(texelNew, texelOld); - }); - - // - - const materialComposed = this._materialComposed || (this._materialComposed = builder.createNodeMaterial()); - materialComposed.name = 'AfterImage'; - materialComposed.fragmentNode = afterImg(); - - _quadMeshComp.material = materialComposed; - - // - - const properties = builder.getNodeProperties(this); - properties.textureNode = textureNode; - - // - - return this._textureNode; - } - - dispose() { - this._compRT.dispose(); - this._oldRT.dispose(); - } -} - -const afterImage = (node, damp) => nodeObject(new AfterImageNode(nodeObject(node).toTexture(), damp)); - -addNodeElement('afterImage', afterImage); - -const _quadMesh$4 = /*@__PURE__*/ new QuadMesh(); - -class AnamorphicNode extends TempNode { - constructor(textureNode, tresholdNode, scaleNode, samples) { - super('vec4'); - - this.textureNode = textureNode; - this.tresholdNode = tresholdNode; - this.scaleNode = scaleNode; - this.colorNode = vec3(0.1, 0.0, 1.0); - this.samples = samples; - this.resolution = new Vector2(1, 1); - - this._renderTarget = new RenderTarget(); - this._renderTarget.texture.name = 'anamorphic'; - - this._invSize = uniform(new Vector2()); - - this._textureNode = passTexture(this, this._renderTarget.texture); - - this.updateBeforeType = NodeUpdateType.RENDER; - } - - getTextureNode() { - return this._textureNode; - } - - setSize(width, height) { - this._invSize.value.set(1 / width, 1 / height); - - width = Math.max(Math.round(width * this.resolution.x), 1); - height = Math.max(Math.round(height * this.resolution.y), 1); - - this._renderTarget.setSize(width, height); - } - - updateBefore(frame) { - const { renderer } = frame; - - const textureNode = this.textureNode; - const map = textureNode.value; - - this._renderTarget.texture.type = map.type; - - const currentRenderTarget = renderer.getRenderTarget(); - const currentTexture = textureNode.value; - - _quadMesh$4.material = this._material; - - this.setSize(map.image.width, map.image.height); - - // render - - renderer.setRenderTarget(this._renderTarget); - - _quadMesh$4.render(renderer); - - // restore - - renderer.setRenderTarget(currentRenderTarget); - textureNode.value = currentTexture; - } - - setup(builder) { - const textureNode = this.textureNode; - const uvNode = textureNode.uvNode || uv(); - - const sampleTexture = (uv) => textureNode.uv(uv); - - const anamorph = Fn(() => { - const samples = this.samples; - const halfSamples = Math.floor(samples / 2); - - const total = vec3(0).toVar(); - - Loop({ start: -halfSamples, end: halfSamples }, ({ i }) => { - const softness = float(i).abs().div(halfSamples).oneMinus(); - - const uv = vec2(uvNode.x.add(this._invSize.x.mul(i).mul(this.scaleNode)), uvNode.y); - const color = sampleTexture(uv); - const pass = threshold(color, this.tresholdNode).mul(softness); - - total.addAssign(pass); - }); - - return total.mul(this.colorNode); - }); - - // - - const material = this._material || (this._material = builder.createNodeMaterial()); - material.name = 'Anamorphic'; - material.fragmentNode = anamorph(); - - // - - const properties = builder.getNodeProperties(this); - properties.textureNode = textureNode; - - // - - return this._textureNode; - } - - dispose() { - this._renderTarget.dispose(); - } -} - -const anamorphic = (node, threshold = 0.9, scale = 3, samples = 32) => nodeObject(new AnamorphicNode(nodeObject(node).toTexture(), nodeObject(threshold), nodeObject(scale), samples)); - -addNodeElement('anamorphic', anamorphic); - -class SobelOperatorNode extends TempNode { - constructor(textureNode) { - super(); - - this.textureNode = textureNode; - - this.updateBeforeType = NodeUpdateType.RENDER; - - this._invSize = uniform(new Vector2()); - } - - updateBefore() { - const map = this.textureNode.value; - - this._invSize.value.set(1 / map.image.width, 1 / map.image.height); - } - - setup() { - const { textureNode } = this; - - const uvNode = textureNode.uvNode || uv(); - - const sampleTexture = (uv) => textureNode.uv(uv); - - const sobel = Fn(() => { - // Sobel Edge Detection (see https://youtu.be/uihBwtPIBxM) - - const texel = this._invSize; - - // kernel definition (in glsl matrices are filled in column-major order) - - const Gx = mat3(-1, -2, -1, 0, 0, 0, 1, 2, 1); // x direction kernel - const Gy = mat3(-1, 0, 1, -2, 0, 2, -1, 0, 1); // y direction kernel - - // fetch the 3x3 neighbourhood of a fragment - - // first column - - const tx0y0 = luminance(sampleTexture(uvNode.add(texel.mul(vec2(-1, -1)))).xyz); - const tx0y1 = luminance(sampleTexture(uvNode.add(texel.mul(vec2(-1, 0)))).xyz); - const tx0y2 = luminance(sampleTexture(uvNode.add(texel.mul(vec2(-1, 1)))).xyz); - - // second column - - const tx1y0 = luminance(sampleTexture(uvNode.add(texel.mul(vec2(0, -1)))).xyz); - const tx1y1 = luminance(sampleTexture(uvNode.add(texel.mul(vec2(0, 0)))).xyz); - const tx1y2 = luminance(sampleTexture(uvNode.add(texel.mul(vec2(0, 1)))).xyz); - - // third column - - const tx2y0 = luminance(sampleTexture(uvNode.add(texel.mul(vec2(1, -1)))).xyz); - const tx2y1 = luminance(sampleTexture(uvNode.add(texel.mul(vec2(1, 0)))).xyz); - const tx2y2 = luminance(sampleTexture(uvNode.add(texel.mul(vec2(1, 1)))).xyz); - - // gradient value in x direction - - const valueGx = add(Gx[0][0].mul(tx0y0), Gx[1][0].mul(tx1y0), Gx[2][0].mul(tx2y0), Gx[0][1].mul(tx0y1), Gx[1][1].mul(tx1y1), Gx[2][1].mul(tx2y1), Gx[0][2].mul(tx0y2), Gx[1][2].mul(tx1y2), Gx[2][2].mul(tx2y2)); - - // gradient value in y direction - - const valueGy = add(Gy[0][0].mul(tx0y0), Gy[1][0].mul(tx1y0), Gy[2][0].mul(tx2y0), Gy[0][1].mul(tx0y1), Gy[1][1].mul(tx1y1), Gy[2][1].mul(tx2y1), Gy[0][2].mul(tx0y2), Gy[1][2].mul(tx1y2), Gy[2][2].mul(tx2y2)); - - // magnitute of the total gradient - - const G = valueGx.mul(valueGx).add(valueGy.mul(valueGy)).sqrt(); - - return vec4(vec3(G), 1); - }); - - const outputNode = sobel(); - - return outputNode; - } -} - -const sobel = (node) => nodeObject(new SobelOperatorNode(nodeObject(node).toTexture())); - -addNodeElement('sobel', sobel); - -class DepthOfFieldNode extends TempNode { - constructor(textureNode, viewZNode, focusNode, apertureNode, maxblurNode) { - super(); - - this.textureNode = textureNode; - this.viewZNode = viewZNode; - - this.focusNode = focusNode; - this.apertureNode = apertureNode; - this.maxblurNode = maxblurNode; - - this._aspect = uniform(0); - - this.updateBeforeType = NodeUpdateType.RENDER; - } - - updateBefore() { - const map = this.textureNode.value; - - this._aspect.value = map.image.width / map.image.height; - } - - setup() { - const textureNode = this.textureNode; - const uvNode = textureNode.uvNode || uv(); - - const sampleTexture = (uv) => textureNode.uv(uv); - - const dof = Fn(() => { - const aspectcorrect = vec2(1.0, this._aspect); - - const factor = this.focusNode.add(this.viewZNode); - - const dofblur = vec2(clamp(factor.mul(this.apertureNode), this.maxblurNode.negate(), this.maxblurNode)); - - const dofblur9 = dofblur.mul(0.9); - const dofblur7 = dofblur.mul(0.7); - const dofblur4 = dofblur.mul(0.4); - - let col = vec4(0.0); - - col = col.add(sampleTexture(uvNode)); - - col = col.add(sampleTexture(uvNode.add(vec2(0.0, 0.4).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.15, 0.37).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.29, 0.29).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.37, 0.15).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.4, 0.0).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.37, -0.15).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.29, -0.29).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.15, -0.37).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.0, -0.4).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.15, 0.37).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.29, 0.29).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.37, 0.15).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.4, 0.0).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.37, -0.15).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.29, -0.29).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.15, -0.37).mul(aspectcorrect).mul(dofblur)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.15, 0.37).mul(aspectcorrect).mul(dofblur9)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.37, 0.15).mul(aspectcorrect).mul(dofblur9)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.37, -0.15).mul(aspectcorrect).mul(dofblur9)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.15, -0.37).mul(aspectcorrect).mul(dofblur9)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.15, 0.37).mul(aspectcorrect).mul(dofblur9)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.37, 0.15).mul(aspectcorrect).mul(dofblur9)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.37, -0.15).mul(aspectcorrect).mul(dofblur9)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.15, -0.37).mul(aspectcorrect).mul(dofblur9)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.29, 0.29).mul(aspectcorrect).mul(dofblur7)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.4, 0.0).mul(aspectcorrect).mul(dofblur7)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.29, -0.29).mul(aspectcorrect).mul(dofblur7)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.0, -0.4).mul(aspectcorrect).mul(dofblur7)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.29, 0.29).mul(aspectcorrect).mul(dofblur7)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.4, 0.0).mul(aspectcorrect).mul(dofblur7)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.29, -0.29).mul(aspectcorrect).mul(dofblur7)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.0, 0.4).mul(aspectcorrect).mul(dofblur7)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.29, 0.29).mul(aspectcorrect).mul(dofblur4)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.4, 0.0).mul(aspectcorrect).mul(dofblur4)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.29, -0.29).mul(aspectcorrect).mul(dofblur4)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.0, -0.4).mul(aspectcorrect).mul(dofblur4)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.29, 0.29).mul(aspectcorrect).mul(dofblur4)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.4, 0.0).mul(aspectcorrect).mul(dofblur4)))); - col = col.add(sampleTexture(uvNode.add(vec2(-0.29, -0.29).mul(aspectcorrect).mul(dofblur4)))); - col = col.add(sampleTexture(uvNode.add(vec2(0.0, 0.4).mul(aspectcorrect).mul(dofblur4)))); - - col = col.div(41); - col.a = 1; - - return vec4(col); - }); - - const outputNode = dof(); - - return outputNode; - } -} - -const dof = (node, viewZNode, focus = 1, aperture = 0.025, maxblur = 1) => nodeObject(new DepthOfFieldNode(nodeObject(node).toTexture(), nodeObject(viewZNode), nodeObject(focus), nodeObject(aperture), nodeObject(maxblur))); - -addNodeElement('dof', dof); - -class DotScreenNode extends TempNode { - constructor(inputNode, center = new Vector2(0.5, 0.5), angle = 1.57, scale = 1) { - super('vec4'); - - this.inputNode = inputNode; - this.center = uniform(center); - this.angle = uniform(angle); - this.scale = uniform(scale); - } - - setup() { - const inputNode = this.inputNode; - - const pattern = Fn(() => { - const s = sin(this.angle); - const c = cos(this.angle); - - const tex = uv().mul(viewportResolution).sub(this.center); - const point = vec2(c.mul(tex.x).sub(s.mul(tex.y)), s.mul(tex.x).add(c.mul(tex.y))).mul(this.scale); - - return sin(point.x).mul(sin(point.y)).mul(4); - }); - - const dotScreen = Fn(() => { - const color = inputNode; - - const average = add(color.r, color.g, color.b).div(3); - - return vec4(vec3(average.mul(10).sub(5).add(pattern())), color.a); - }); - - const outputNode = dotScreen(); - - return outputNode; - } -} - -const dotScreen = (node, center, angle, scale) => nodeObject(new DotScreenNode(nodeObject(node), center, angle, scale)); - -addNodeElement('dotScreen', dotScreen); - -class RGBShiftNode extends TempNode { - constructor(textureNode, amount = 0.005, angle = 0) { - super('vec4'); - - this.textureNode = textureNode; - this.amount = uniform(amount); - this.angle = uniform(angle); - } - - setup() { - const { textureNode } = this; - - const uvNode = textureNode.uvNode || uv(); - - const sampleTexture = (uv) => textureNode.uv(uv); - - const rgbShift = Fn(() => { - const offset = vec2(cos(this.angle), sin(this.angle)).mul(this.amount); - const cr = sampleTexture(uvNode.add(offset)); - const cga = sampleTexture(uvNode); - const cb = sampleTexture(uvNode.sub(offset)); - - return vec4(cr.r, cga.g, cb.b, cga.a); - }); - - return rgbShift(); - } -} - -const rgbShift = (node, amount, angle) => nodeObject(new RGBShiftNode(nodeObject(node).toTexture(), amount, angle)); - -addNodeElement('rgbShift', rgbShift); - -class FilmNode extends TempNode { - constructor(inputNode, intensityNode = null, uvNode = null) { - super(); - - this.inputNode = inputNode; - this.intensityNode = intensityNode; - this.uvNode = uvNode; - } - - setup() { - const uvNode = this.uvNode || uv(); - - const film = Fn(() => { - const base = this.inputNode.rgb; - const noise = rand(fract(uvNode.add(timerLocal()))); - - let color = base.add(base.mul(clamp(noise.add(0.1), 0, 1))); - - if (this.intensityNode !== null) { - color = mix(base, color, this.intensityNode); - } - - return vec4(color, this.inputNode.a); - }); - - const outputNode = film(); - - return outputNode; - } -} - -const film = nodeProxy(FilmNode); - -addNodeElement('film', film); - -class Lut3DNode extends TempNode { - constructor(inputNode, lutNode, size, intensityNode) { - super(); - - this.inputNode = inputNode; - this.lutNode = lutNode; - this.size = uniform(size); - this.intensityNode = intensityNode; - } - - setup() { - const { inputNode, lutNode } = this; - - const sampleLut = (uv) => lutNode.uv(uv); - - const lut3D = Fn(() => { - const base = inputNode; - - // pull the sample in by half a pixel so the sample begins at the center of the edge pixels. - - const pixelWidth = float(1.0).div(this.size); - const halfPixelWidth = float(0.5).div(this.size); - const uvw = vec3(halfPixelWidth).add(base.rgb.mul(float(1.0).sub(pixelWidth))); - - const lutValue = vec4(sampleLut(uvw).rgb, base.a); - - return vec4(mix(base, lutValue, this.intensityNode)); - }); - - const outputNode = lut3D(); - - return outputNode; - } -} - -const lut3D = (node, lut, size, intensity) => nodeObject(new Lut3DNode(nodeObject(node), nodeObject(lut), size, nodeObject(intensity))); - -addNodeElement('lut3D', lut3D); - -const motionBlur = /*#__PURE__*/ Fn(([inputNode, velocity, numSamples = int(16)]) => { - const sampleColor = (uv) => inputNode.uv(uv); - - const uvs = uv(); - - const colorResult = sampleColor(uvs).toVar(); - const fSamples = float(numSamples); - - Loop({ start: int(1), end: numSamples, type: 'int', condition: '<=' }, ({ i }) => { - const offset = velocity.mul(float(i).div(fSamples.sub(1)).sub(0.5)); - colorResult.addAssign(sampleColor(uvs.add(offset))); - }); - - colorResult.divAssign(fSamples); - - return colorResult; -}); - -const _quadMesh$3 = /*@__PURE__*/ new QuadMesh(); -const _currentClearColor$1 = /*@__PURE__*/ new Color(); -const _size$5 = /*@__PURE__*/ new Vector2(); - -class GTAONode extends TempNode { - constructor(depthNode, normalNode, camera) { - super(); - - this.depthNode = depthNode; - this.normalNode = normalNode; - - this.radius = uniform(0.25); - this.resolution = uniform(new Vector2()); - this.thickness = uniform(1); - this.distanceExponent = uniform(1); - this.distanceFallOff = uniform(1); - this.scale = uniform(1); - this.noiseNode = texture(generateMagicSquareNoise()); - - this.cameraProjectionMatrix = uniform(camera.projectionMatrix); - this.cameraProjectionMatrixInverse = uniform(camera.projectionMatrixInverse); - - this.SAMPLES = uniform(16); - - this._aoRenderTarget = new RenderTarget(); - this._aoRenderTarget.texture.name = 'GTAONode.AO'; - - this._material = null; - this._textureNode = passTexture(this, this._aoRenderTarget.texture); - - this.updateBeforeType = NodeUpdateType.FRAME; - } - - getTextureNode() { - return this._textureNode; - } - - setSize(width, height) { - this.resolution.value.set(width, height); - this._aoRenderTarget.setSize(width, height); - } - - updateBefore(frame) { - const { renderer } = frame; - - const size = renderer.getDrawingBufferSize(_size$5); - - const currentRenderTarget = renderer.getRenderTarget(); - const currentMRT = renderer.getMRT(); - renderer.getClearColor(_currentClearColor$1); - const currentClearAlpha = renderer.getClearAlpha(); - - _quadMesh$3.material = this._material; - - this.setSize(size.width, size.height); - - // clear - - renderer.setMRT(null); - renderer.setClearColor(0xffffff, 1); - - // ao - - renderer.setRenderTarget(this._aoRenderTarget); - _quadMesh$3.render(renderer); - - // restore - - renderer.setRenderTarget(currentRenderTarget); - renderer.setMRT(currentMRT); - renderer.setClearColor(_currentClearColor$1, currentClearAlpha); - } - - setup(builder) { - const uvNode = uv(); - - const sampleDepth = (uv) => this.depthNode.uv(uv).x; - const sampleNoise = (uv) => this.noiseNode.uv(uv); - - const getSceneUvAndDepth = Fn(([sampleViewPos]) => { - const sampleClipPos = this.cameraProjectionMatrix.mul(vec4(sampleViewPos, 1.0)); - let sampleUv = sampleClipPos.xy.div(sampleClipPos.w).mul(0.5).add(0.5).toVar(); - sampleUv = vec2(sampleUv.x, sampleUv.y.oneMinus()); - const sampleSceneDepth = sampleDepth(sampleUv); - return vec3(sampleUv, sampleSceneDepth); - }); - - const getViewPosition = Fn(([screenPosition, depth]) => { - screenPosition = vec2(screenPosition.x, screenPosition.y.oneMinus()).mul(2.0).sub(1.0); - - const clipSpacePosition = vec4(vec3(screenPosition, depth), 1.0); - const viewSpacePosition = vec4(this.cameraProjectionMatrixInverse.mul(clipSpacePosition)); - - return viewSpacePosition.xyz.div(viewSpacePosition.w); - }); - - const ao = Fn(() => { - const depth = sampleDepth(uvNode); - - depth.greaterThanEqual(1.0).discard(); - - const viewPosition = getViewPosition(uvNode, depth); - const viewNormal = this.normalNode.rgb.normalize(); - - const radiusToUse = this.radius; - - const noiseResolution = textureSize(this.noiseNode, 0); - let noiseUv = vec2(uvNode.x, uvNode.y.oneMinus()); - noiseUv = noiseUv.mul(this.resolution.div(noiseResolution)); - const noiseTexel = sampleNoise(noiseUv); - const randomVec = noiseTexel.xyz.mul(2.0).sub(1.0); - const tangent = vec3(randomVec.xy, 0.0).normalize(); - const bitangent = vec3(tangent.y.mul(-1.0), tangent.x, 0.0); - const kernelMatrix = mat3(tangent, bitangent, vec3(0.0, 0.0, 1.0)); - - const DIRECTIONS = this.SAMPLES.lessThan(30).select(3, 5); - const STEPS = add(this.SAMPLES, DIRECTIONS.sub(1)).div(DIRECTIONS); - - const ao = float(0).toVar(); - - Loop({ start: int(0), end: DIRECTIONS, type: 'int', condition: '<' }, ({ i }) => { - const angle = float(i).div(float(DIRECTIONS)).mul(PI); - const sampleDir = vec4(cos(angle), sin(angle), 0, add(0.5, mul(0.5, noiseTexel.w))); - sampleDir.xyz = normalize(kernelMatrix.mul(sampleDir.xyz)); - - const viewDir = normalize(viewPosition.xyz.negate()); - const sliceBitangent = normalize(cross(sampleDir.xyz, viewDir)); - const sliceTangent = cross(sliceBitangent, viewDir); - const normalInSlice = normalize(viewNormal.sub(sliceBitangent.mul(dot(viewNormal, sliceBitangent)))); - - const tangentToNormalInSlice = cross(normalInSlice, sliceBitangent); - const cosHorizons = vec2(dot(viewDir, tangentToNormalInSlice), dot(viewDir, tangentToNormalInSlice.negate())).toVar(); - - Loop({ end: STEPS, type: 'int', name: 'j', condition: '<' }, ({ j }) => { - const sampleViewOffset = sampleDir.xyz - .mul(radiusToUse) - .mul(sampleDir.w) - .mul(pow(div(float(j).add(1.0), float(STEPS)), this.distanceExponent)); - - // x - - const sampleSceneUvDepthX = getSceneUvAndDepth(viewPosition.add(sampleViewOffset)); - const sampleSceneViewPositionX = getViewPosition(sampleSceneUvDepthX.xy, sampleSceneUvDepthX.z); - const viewDeltaX = sampleSceneViewPositionX.sub(viewPosition); - - If(abs(viewDeltaX.z).lessThan(this.thickness), () => { - const sampleCosHorizon = dot(viewDir, normalize(viewDeltaX)); - cosHorizons.x.addAssign(max$1(0, mul(sampleCosHorizon.sub(cosHorizons.x), mix(1.0, float(2.0).div(float(j).add(2)), this.distanceFallOff)))); - }); - - // y - - const sampleSceneUvDepthY = getSceneUvAndDepth(viewPosition.sub(sampleViewOffset)); - const sampleSceneViewPositionY = getViewPosition(sampleSceneUvDepthY.xy, sampleSceneUvDepthY.z); - const viewDeltaY = sampleSceneViewPositionY.sub(viewPosition); - - If(abs(viewDeltaY.z).lessThan(this.thickness), () => { - const sampleCosHorizon = dot(viewDir, normalize(viewDeltaY)); - cosHorizons.y.addAssign(max$1(0, mul(sampleCosHorizon.sub(cosHorizons.y), mix(1.0, float(2.0).div(float(j).add(2)), this.distanceFallOff)))); - }); - }); - - const sinHorizons = sqrt(sub(1.0, cosHorizons.mul(cosHorizons))); - const nx = dot(normalInSlice, sliceTangent); - const ny = dot(normalInSlice, viewDir); - const nxb = mul( - 0.5, - acos(cosHorizons.y) - .sub(acos(cosHorizons.x)) - .add(sinHorizons.x.mul(cosHorizons.x).sub(sinHorizons.y.mul(cosHorizons.y))) - ); - const nyb = mul(0.5, sub(2.0, cosHorizons.x.mul(cosHorizons.x)).sub(cosHorizons.y.mul(cosHorizons.y))); - const occlusion = nx.mul(nxb).add(ny.mul(nyb)); - ao.addAssign(occlusion); - }); - - ao.assign(clamp(ao.div(DIRECTIONS), 0, 1)); - ao.assign(pow(ao, this.scale)); - - return vec4(vec3(ao), 1.0); - }); - - const material = this._material || (this._material = builder.createNodeMaterial()); - material.fragmentNode = ao().context(builder.getSharedContext()); - material.name = 'GTAO'; - material.needsUpdate = true; - - // - - return this._textureNode; - } - - dispose() { - this._aoRenderTarget.dispose(); - } -} - -function generateMagicSquareNoise(size = 5) { - const noiseSize = Math.floor(size) % 2 === 0 ? Math.floor(size) + 1 : Math.floor(size); - const magicSquare = generateMagicSquare(noiseSize); - const noiseSquareSize = magicSquare.length; - const data = new Uint8Array(noiseSquareSize * 4); - - for (let inx = 0; inx < noiseSquareSize; ++inx) { - const iAng = magicSquare[inx]; - const angle = (2 * Math.PI * iAng) / noiseSquareSize; - const randomVec = new Vector3(Math.cos(angle), Math.sin(angle), 0).normalize(); - data[inx * 4] = (randomVec.x * 0.5 + 0.5) * 255; - data[inx * 4 + 1] = (randomVec.y * 0.5 + 0.5) * 255; - data[inx * 4 + 2] = 127; - data[inx * 4 + 3] = 255; - } - - const noiseTexture = new DataTexture(data, noiseSize, noiseSize); - noiseTexture.wrapS = RepeatWrapping; - noiseTexture.wrapT = RepeatWrapping; - noiseTexture.needsUpdate = true; - - return noiseTexture; -} - -function generateMagicSquare(size) { - const noiseSize = Math.floor(size) % 2 === 0 ? Math.floor(size) + 1 : Math.floor(size); - const noiseSquareSize = noiseSize * noiseSize; - const magicSquare = Array(noiseSquareSize).fill(0); - let i = Math.floor(noiseSize / 2); - let j = noiseSize - 1; - - for (let num = 1; num <= noiseSquareSize; ) { - if (i === -1 && j === noiseSize) { - j = noiseSize - 2; - i = 0; - } else { - if (j === noiseSize) { - j = 0; - } - - if (i < 0) { - i = noiseSize - 1; - } - } - - if (magicSquare[i * noiseSize + j] !== 0) { - j -= 2; - i++; - continue; - } else { - magicSquare[i * noiseSize + j] = num++; - } - - j++; - i--; - } - - return magicSquare; -} - -const ao = (depthNode, normalNode, camera) => nodeObject(new GTAONode(nodeObject(depthNode), nodeObject(normalNode), camera)); - -addNodeElement('ao', ao); - -class DenoiseNode extends TempNode { - constructor(textureNode, depthNode, normalNode, noiseNode, camera) { - super(); - - this.textureNode = textureNode; - this.depthNode = depthNode; - this.normalNode = normalNode; - this.noiseNode = noiseNode; - - this.cameraProjectionMatrixInverse = uniform(camera.projectionMatrixInverse); - this.lumaPhi = uniform(5); - this.depthPhi = uniform(5); - this.normalPhi = uniform(5); - this.radius = uniform(5); - this.index = uniform(0); - - this._resolution = uniform(new Vector2()); - this._sampleVectors = uniformArray(generatePdSamplePointInitializer(16, 2, 1)); - - this.updateBeforeType = NodeUpdateType.RENDER; - } - - updateBefore() { - const map = this.textureNode.value; - - this._resolution.value.set(map.image.width, map.image.height); - } - - setup() { - const uvNode = uv(); - - const sampleTexture = (uv) => this.textureNode.uv(uv); - const sampleDepth = (uv) => this.depthNode.uv(uv).x; - const sampleNormal = (uv) => this.normalNode.uv(uv); - const sampleNoise = (uv) => this.noiseNode.uv(uv); - - const getViewPosition = Fn(([screenPosition, depth]) => { - screenPosition = vec2(screenPosition.x, screenPosition.y.oneMinus()).mul(2.0).sub(1.0); - - const clipSpacePosition = vec4(vec3(screenPosition, depth), 1.0); - const viewSpacePosition = vec4(this.cameraProjectionMatrixInverse.mul(clipSpacePosition)); - - return viewSpacePosition.xyz.div(viewSpacePosition.w); - }); - - const denoiseSample = Fn(([center, viewNormal, viewPosition, sampleUv]) => { - const texel = sampleTexture(sampleUv); - const depth = sampleDepth(sampleUv); - const normal = sampleNormal(sampleUv).rgb.normalize(); - const neighborColor = texel.rgb; - const viewPos = getViewPosition(sampleUv, depth); - - const normalDiff = dot(viewNormal, normal).toVar(); - const normalSimilarity = pow(max$1(normalDiff, 0), this.normalPhi).toVar(); - const lumaDiff = abs(luminance(neighborColor).sub(luminance(center))).toVar(); - const lumaSimilarity = max$1(float(1.0).sub(lumaDiff.div(this.lumaPhi)), 0).toVar(); - const depthDiff = abs(dot(viewPosition.sub(viewPos), viewNormal)).toVar(); - const depthSimilarity = max$1(float(1.0).sub(depthDiff.div(this.depthPhi)), 0); - const w = lumaSimilarity.mul(depthSimilarity).mul(normalSimilarity); - - return vec4(neighborColor.mul(w), w); - }); - - const denoise = Fn(([uvNode]) => { - const depth = sampleDepth(uvNode); - const viewNormal = sampleNormal(uvNode).rgb.normalize(); - - const texel = sampleTexture(uvNode); - - If(depth.greaterThanEqual(1.0).or(dot(viewNormal, viewNormal).equal(0.0)), () => { - return texel; - }); - - const center = vec3(texel.rgb); - - const viewPosition = getViewPosition(uvNode, depth); - - const noiseResolution = textureSize(this.noiseNode, 0); - let noiseUv = vec2(uvNode.x, uvNode.y.oneMinus()); - noiseUv = noiseUv.mul(this._resolution.div(noiseResolution)); - const noiseTexel = sampleNoise(noiseUv); - - const x = sin(noiseTexel.element(this.index.mod(4).mul(2).mul(PI))); - const y = cos(noiseTexel.element(this.index.mod(4).mul(2).mul(PI))); - - const noiseVec = vec2(x, y); - const rotationMatrix = mat2(noiseVec.x, noiseVec.y.negate(), noiseVec.x, noiseVec.y); - - const totalWeight = float(1.0).toVar(); - const denoised = vec3(texel.rgb).toVar(); - - Loop({ start: int(0), end: int(16), type: 'int', condition: '<' }, ({ i }) => { - const sampleDir = this._sampleVectors.element(i).toVar(); - const offset = rotationMatrix - .mul(sampleDir.xy.mul(float(1.0).add(sampleDir.z.mul(this.radius.sub(1))))) - .div(this._resolution) - .toVar(); - const sampleUv = uvNode.add(offset).toVar(); - - const result = denoiseSample(center, viewNormal, viewPosition, sampleUv); - - denoised.addAssign(result.xyz); - totalWeight.addAssign(result.w); - }); - - If(totalWeight.greaterThan(float(0)), () => { - denoised.divAssign(totalWeight); - }); - - return vec4(denoised, texel.a); - }).setLayout({ - name: 'denoise', - type: 'vec4', - inputs: [{ name: 'uv', type: 'vec2' }], - }); - - const output = Fn(() => { - return denoise(uvNode); - }); - - const outputNode = output(); - - return outputNode; - } -} - -function generatePdSamplePointInitializer(samples, rings, radiusExponent) { - const poissonDisk = generateDenoiseSamples(samples, rings, radiusExponent); - - const array = []; - - for (let i = 0; i < samples; i++) { - const sample = poissonDisk[i]; - array.push(sample); - } - - return array; -} - -function generateDenoiseSamples(numSamples, numRings, radiusExponent) { - const samples = []; - - for (let i = 0; i < numSamples; i++) { - const angle = (2 * Math.PI * numRings * i) / numSamples; - const radius = Math.pow(i / (numSamples - 1), radiusExponent); - samples.push(new Vector3(Math.cos(angle), Math.sin(angle), radius)); - } - - return samples; -} - -const denoise = (node, depthNode, normalNode, noiseNode, camera) => nodeObject(new DenoiseNode(nodeObject(node).toTexture(), nodeObject(depthNode), nodeObject(normalNode), nodeObject(noiseNode), camera)); - -addNodeElement('denoise', denoise); - -class FXAANode extends TempNode { - constructor(textureNode) { - super(); - - this.textureNode = textureNode; - - this.updateBeforeType = NodeUpdateType.RENDER; - - this._invSize = uniform(new Vector2()); - } - - updateBefore() { - const map = this.textureNode.value; - - this._invSize.value.set(1 / map.image.width, 1 / map.image.height); - } - - setup() { - const textureNode = this.textureNode.bias(-100); - const uvNode = textureNode.uvNode || uv(); - - // FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com) - - //---------------------------------------------------------------------------------- - // File: es3-kepler\FXAA\assets\shaders/FXAA_DefaultES.frag - // SDK Version: v3.00 - // Email: gameworks@nvidia.com - // Site: http://developer.nvidia.com/ - // - // Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions - // are met: - // * Redistributions of source code must retain the above copyright - // notice, this list of conditions and the following disclaimer. - // * Redistributions in binary form must reproduce the above copyright - // notice, this list of conditions and the following disclaimer in the - // documentation and/or other materials provided with the distribution. - // * Neither the name of NVIDIA CORPORATION nor the names of its - // contributors may be used to endorse or promote products derived - // from this software without specific prior written permission. - // - // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY - // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - // - //---------------------------------------------------------------------------------- - - const FxaaTexTop = (p) => textureNode.uv(p); - const FxaaTexOff = (p, o, r) => textureNode.uv(p.add(o.mul(r))); - - const NUM_SAMPLES = int(5); - - const contrast = Fn(([a_immutable, b_immutable]) => { - // assumes colors have premultipliedAlpha, so that the calculated color contrast is scaled by alpha - - const b = vec4(b_immutable).toVar(); - const a = vec4(a_immutable).toVar(); - const diff = vec4(abs(a.sub(b))).toVar(); - - return max$1(max$1(max$1(diff.r, diff.g), diff.b), diff.a); - }); - - // FXAA3 QUALITY - PC - - const FxaaPixelShader = Fn(([uv, fxaaQualityRcpFrame, fxaaQualityEdgeThreshold, fxaaQualityinvEdgeThreshold]) => { - const rgbaM = FxaaTexTop(uv).toVar(); - const rgbaS = FxaaTexOff(uv, vec2(0.0, -1.0), fxaaQualityRcpFrame.xy).toVar(); - const rgbaE = FxaaTexOff(uv, vec2(1.0, 0.0), fxaaQualityRcpFrame.xy).toVar(); - const rgbaN = FxaaTexOff(uv, vec2(0.0, 1.0), fxaaQualityRcpFrame.xy).toVar(); - const rgbaW = FxaaTexOff(uv, vec2(-1.0, 0.0), fxaaQualityRcpFrame.xy).toVar(); - // . S . - // W M E - // . N . - - const contrastN = contrast(rgbaM, rgbaN).toVar(); - const contrastS = contrast(rgbaM, rgbaS).toVar(); - const contrastE = contrast(rgbaM, rgbaE).toVar(); - const contrastW = contrast(rgbaM, rgbaW).toVar(); - - const maxValue = max$1(contrastN, max$1(contrastS, max$1(contrastE, contrastW))).toVar(); - - // . 0 . - // 0 0 0 - // . 0 . - - If(maxValue.lessThan(fxaaQualityEdgeThreshold), () => { - return rgbaM; // assuming define FXAA_DISCARD is always 0 - }); - - // - - const relativeVContrast = sub(contrastN.add(contrastS), contrastE.add(contrastW)).toVar(); - relativeVContrast.mulAssign(fxaaQualityinvEdgeThreshold); - - // 45 deg edge detection and corners of objects, aka V/H contrast is too similar - - If(abs(relativeVContrast).lessThan(0.3), () => { - // locate the edge - - const x = contrastE.greaterThan(contrastW).select(1, -1).toVar(); - const y = contrastS.greaterThan(contrastN).select(1, -1).toVar(); - - const dirToEdge = vec2(x, y).toVar(); - // . 2 . . 1 . - // 1 0 2 ~= 0 0 1 - // . 1 . . 0 . - - // tap 2 pixels and see which ones are "outside" the edge, to - // determine if the edge is vertical or horizontal - - const rgbaAlongH = FxaaTexOff(uv, vec2(dirToEdge.x, dirToEdge.y), fxaaQualityRcpFrame.xy); - const matchAlongH = contrast(rgbaM, rgbaAlongH).toVar(); - // . 1 . - // 0 0 1 - // . 0 H - - const rgbaAlongV = FxaaTexOff(uv, vec2(dirToEdge.x.negate(), dirToEdge.y.negate()), fxaaQualityRcpFrame.xy); - const matchAlongV = contrast(rgbaM, rgbaAlongV).toVar(); - // V 1 . - // 0 0 1 - // . 0 . - - relativeVContrast.assign(matchAlongV.sub(matchAlongH)); - relativeVContrast.mulAssign(fxaaQualityinvEdgeThreshold); - - If(abs(relativeVContrast).lessThan(0.3), () => { - // 45 deg edge - - // 1 1 . - // 0 0 1 - // . 0 1 - - // do a simple blur - const sum = rgbaN.add(rgbaS).add(rgbaE).add(rgbaW); - return mix(rgbaM, sum.mul(0.25), 0.4); - }); - }); - - const offNP = vec2().toVar(); - - If(relativeVContrast.lessThanEqual(0), () => { - rgbaN.assign(rgbaW); - rgbaS.assign(rgbaE); - - // . 0 . 1 - // 1 0 1 -> 0 - // . 0 . 1 - - offNP.x.assign(0); - offNP.y.assign(fxaaQualityRcpFrame.y); - }).Else(() => { - offNP.x.assign(fxaaQualityRcpFrame.x); - offNP.y.assign(0); - }); - - const mn = contrast(rgbaM, rgbaN).toVar(); - const ms = contrast(rgbaM, rgbaS).toVar(); - - If(mn.lessThanEqual(ms), () => { - rgbaN.assign(rgbaS); - }); - - const doneN = int(0).toVar(); - const doneP = int(0).toVar(); - - const nDist = float(0).toVar(); - const pDist = float(0).toVar(); - - const posN = vec2(uv).toVar(); - const posP = vec2(uv).toVar(); - - const iterationsUsedN = int(0).toVar(); - const iterationsUsedP = int(0).toVar(); - - Loop(NUM_SAMPLES, ({ i }) => { - const increment = i.add(1).toVar(); - - If(doneN.equal(0), () => { - nDist.addAssign(increment); - posN.assign(uv.add(offNP.mul(nDist))); - const rgbaEndN = FxaaTexTop(posN.xy); - - const nm = contrast(rgbaEndN, rgbaM).toVar(); - const nn = contrast(rgbaEndN, rgbaN).toVar(); - - If(nm.greaterThan(nn), () => { - doneN.assign(1); - }); - - iterationsUsedN.assign(i); - }); - - If(doneP.equal(0), () => { - pDist.addAssign(increment); - posP.assign(uv.sub(offNP.mul(pDist))); - const rgbaEndP = FxaaTexTop(posP.xy); - - const pm = contrast(rgbaEndP, rgbaM).toVar(); - const pn = contrast(rgbaEndP, rgbaN).toVar(); - - If(pm.greaterThan(pn), () => { - doneP.assign(1); - }); - - iterationsUsedP.assign(i); - }); - - If(doneN.equal(1).or(doneP.equal(1)), () => { - Break(); - }); - }); - - If(doneN.equal(0).and(doneP.equal(0)), () => { - return rgbaM; // failed to find end of edge - }); - - const distN = float(1).toVar(); - const distP = float(1).toVar(); - - If(doneN.equal(1), () => { - distN.assign(float(iterationsUsedN).div(float(NUM_SAMPLES.sub(1)))); - }); - - If(doneP.equal(1), () => { - distP.assign(float(iterationsUsedP).div(float(NUM_SAMPLES.sub(1)))); - }); - - const dist = min$1(distN, distP); - - // hacky way of reduces blurriness of mostly diagonal edges - // but reduces AA quality - dist.assign(pow(dist, 0.5)); - dist.assign(float(1).sub(dist)); - - return mix(rgbaM, rgbaN, dist.mul(0.5)); - }).setLayout({ - name: 'FxaaPixelShader', - type: 'vec4', - inputs: [ - { name: 'uv', type: 'vec2' }, - { name: 'fxaaQualityRcpFrame', type: 'vec2' }, - { name: 'fxaaQualityEdgeThreshold', type: 'float' }, - { name: 'fxaaQualityinvEdgeThreshold', type: 'float' }, - ], - }); - - const fxaa = Fn(() => { - const edgeDetectionQuality = float(0.2); - const invEdgeDetectionQuality = float(1).div(edgeDetectionQuality); - - return FxaaPixelShader(uvNode, this._invSize, edgeDetectionQuality, invEdgeDetectionQuality); - }); - - const outputNode = fxaa(); - - return outputNode; - } -} - -const fxaa = (node) => nodeObject(new FXAANode(nodeObject(node).toTexture())); - -addNodeElement('fxaa', fxaa); - -const _quadMesh$2 = /*@__PURE__*/ new QuadMesh(); - -const _clearColor$1 = /*@__PURE__*/ new Color(0, 0, 0); -const _currentClearColor = /*@__PURE__*/ new Color(); -const _size$4 = /*@__PURE__*/ new Vector2(); - -const _BlurDirectionX = /*@__PURE__*/ new Vector2(1.0, 0.0); -const _BlurDirectionY = /*@__PURE__*/ new Vector2(0.0, 1.0); - -class BloomNode extends TempNode { - constructor(inputNode, strength = 1, radius = 0, threshold = 0) { - super(); - - this.inputNode = inputNode; - this.strength = uniform(strength); - this.radius = uniform(radius); - this.threshold = uniform(threshold); - - this.smoothWidth = uniform(0.01); - - // - - this._renderTargetsHorizontal = []; - this._renderTargetsVertical = []; - this._nMips = 5; - - // render targets - - this._renderTargetBright = new RenderTarget(1, 1, { type: HalfFloatType }); - this._renderTargetBright.texture.name = 'UnrealBloomPass.bright'; - this._renderTargetBright.texture.generateMipmaps = false; - - for (let i = 0; i < this._nMips; i++) { - const renderTargetHorizontal = new RenderTarget(1, 1, { type: HalfFloatType }); - - renderTargetHorizontal.texture.name = 'UnrealBloomPass.h' + i; - renderTargetHorizontal.texture.generateMipmaps = false; - - this._renderTargetsHorizontal.push(renderTargetHorizontal); - - const renderTargetVertical = new RenderTarget(1, 1, { type: HalfFloatType }); - - renderTargetVertical.texture.name = 'UnrealBloomPass.v' + i; - renderTargetVertical.texture.generateMipmaps = false; - - this._renderTargetsVertical.push(renderTargetVertical); - } - - // materials - - this._compositeMaterial = null; - this._highPassFilterMaterial = null; - this._separableBlurMaterials = []; - - // pass and texture nodes - - this._textureNodeBright = texture(this._renderTargetBright.texture); - this._textureNodeBlur0 = texture(this._renderTargetsVertical[0].texture); - this._textureNodeBlur1 = texture(this._renderTargetsVertical[1].texture); - this._textureNodeBlur2 = texture(this._renderTargetsVertical[2].texture); - this._textureNodeBlur3 = texture(this._renderTargetsVertical[3].texture); - this._textureNodeBlur4 = texture(this._renderTargetsVertical[4].texture); - - this._textureOutput = passTexture(this, this._renderTargetsHorizontal[0].texture); - - this.updateBeforeType = NodeUpdateType.FRAME; - } - - getTextureNode() { - return this._textureOutput; - } - - setSize(width, height) { - let resx = Math.round(width / 2); - let resy = Math.round(height / 2); - - this._renderTargetBright.setSize(resx, resy); - - for (let i = 0; i < this._nMips; i++) { - this._renderTargetsHorizontal[i].setSize(resx, resy); - this._renderTargetsVertical[i].setSize(resx, resy); - - this._separableBlurMaterials[i].invSize.value.set(1 / resx, 1 / resy); - - resx = Math.round(resx / 2); - resy = Math.round(resy / 2); - } - } - - updateBefore(frame) { - const { renderer } = frame; - - const size = renderer.getDrawingBufferSize(_size$4); - this.setSize(size.width, size.height); - - const currentRenderTarget = renderer.getRenderTarget(); - const currentMRT = renderer.getMRT(); - renderer.getClearColor(_currentClearColor); - const currentClearAlpha = renderer.getClearAlpha(); - - this.setSize(size.width, size.height); - - renderer.setMRT(null); - renderer.setClearColor(_clearColor$1, 0); - - // 1. Extract Bright Areas - - renderer.setRenderTarget(this._renderTargetBright); - _quadMesh$2.material = this._highPassFilterMaterial; - _quadMesh$2.render(renderer); - - // 2. Blur All the mips progressively - - let inputRenderTarget = this._renderTargetBright; - - for (let i = 0; i < this._nMips; i++) { - _quadMesh$2.material = this._separableBlurMaterials[i]; - - this._separableBlurMaterials[i].colorTexture.value = inputRenderTarget.texture; - this._separableBlurMaterials[i].direction.value = _BlurDirectionX; - renderer.setRenderTarget(this._renderTargetsHorizontal[i]); - renderer.clear(); - _quadMesh$2.render(renderer); - - this._separableBlurMaterials[i].colorTexture.value = this._renderTargetsHorizontal[i].texture; - this._separableBlurMaterials[i].direction.value = _BlurDirectionY; - renderer.setRenderTarget(this._renderTargetsVertical[i]); - renderer.clear(); - _quadMesh$2.render(renderer); - - inputRenderTarget = this._renderTargetsVertical[i]; - } - - // 3. Composite All the mips - - renderer.setRenderTarget(this._renderTargetsHorizontal[0]); - renderer.clear(); - _quadMesh$2.material = this._compositeMaterial; - _quadMesh$2.render(renderer); - - // restore - - renderer.setRenderTarget(currentRenderTarget); - renderer.setMRT(currentMRT); - renderer.setClearColor(_currentClearColor, currentClearAlpha); - } - - setup(builder) { - // luminosity high pass material - - const luminosityHighPass = Fn(() => { - const texel = this.inputNode; - const v = luminance(texel.rgb); - - const alpha = smoothstep(this.threshold, this.threshold.add(this.smoothWidth), v); - - return mix(vec4(0), texel, alpha); - }); - - this._highPassFilterMaterial = this._highPassFilterMaterial || builder.createNodeMaterial(); - this._highPassFilterMaterial.fragmentNode = luminosityHighPass().context(builder.getSharedContext()); - this._highPassFilterMaterial.name = 'Bloom_highPass'; - this._highPassFilterMaterial.needsUpdate = true; - - // gaussian blur materials - - const kernelSizeArray = [3, 5, 7, 9, 11]; - - for (let i = 0; i < this._nMips; i++) { - this._separableBlurMaterials.push(this._getSeperableBlurMaterial(builder, kernelSizeArray[i])); - } - - // composite material - - const bloomFactors = uniformArray([1.0, 0.8, 0.6, 0.4, 0.2]); - const bloomTintColors = uniformArray([new Vector3(1, 1, 1), new Vector3(1, 1, 1), new Vector3(1, 1, 1), new Vector3(1, 1, 1), new Vector3(1, 1, 1)]); - - const lerpBloomFactor = Fn(([factor, radius]) => { - const mirrorFactor = float(1.2).sub(factor); - return mix(factor, mirrorFactor, radius); - }).setLayout({ - name: 'lerpBloomFactor', - type: 'float', - inputs: [ - { name: 'factor', type: 'float' }, - { name: 'radius', type: 'float' }, - ], - }); - - const compositePass = Fn(() => { - const color0 = lerpBloomFactor(bloomFactors.element(0), this.radius) - .mul(vec4(bloomTintColors.element(0), 1.0)) - .mul(this._textureNodeBlur0); - const color1 = lerpBloomFactor(bloomFactors.element(1), this.radius) - .mul(vec4(bloomTintColors.element(1), 1.0)) - .mul(this._textureNodeBlur1); - const color2 = lerpBloomFactor(bloomFactors.element(2), this.radius) - .mul(vec4(bloomTintColors.element(2), 1.0)) - .mul(this._textureNodeBlur2); - const color3 = lerpBloomFactor(bloomFactors.element(3), this.radius) - .mul(vec4(bloomTintColors.element(3), 1.0)) - .mul(this._textureNodeBlur3); - const color4 = lerpBloomFactor(bloomFactors.element(4), this.radius) - .mul(vec4(bloomTintColors.element(4), 1.0)) - .mul(this._textureNodeBlur4); - - const sum = color0.add(color1).add(color2).add(color3).add(color4); - - return sum.mul(this.strength); - }); - - this._compositeMaterial = this._compositeMaterial || builder.createNodeMaterial(); - this._compositeMaterial.fragmentNode = compositePass().context(builder.getSharedContext()); - this._compositeMaterial.name = 'Bloom_comp'; - this._compositeMaterial.needsUpdate = true; - - // - - return this._textureOutput; - } - - dispose() { - for (let i = 0; i < this._renderTargetsHorizontal.length; i++) { - this._renderTargetsHorizontal[i].dispose(); - } - - for (let i = 0; i < this._renderTargetsVertical.length; i++) { - this._renderTargetsVertical[i].dispose(); - } - - this._renderTargetBright.dispose(); - } - - _getSeperableBlurMaterial(builder, kernelRadius) { - const coefficients = []; - - for (let i = 0; i < kernelRadius; i++) { - coefficients.push((0.39894 * Math.exp((-0.5 * i * i) / (kernelRadius * kernelRadius))) / kernelRadius); - } - - // - - const colorTexture = texture(); - const gaussianCoefficients = uniformArray(coefficients); - const invSize = uniform(new Vector2()); - const direction = uniform(new Vector2(0.5, 0.5)); - - const uvNode = uv(); - const sampleTexel = (uv) => colorTexture.uv(uv); - - const seperableBlurPass = Fn(() => { - const weightSum = gaussianCoefficients.element(0).toVar(); - const diffuseSum = sampleTexel(uvNode).rgb.mul(weightSum).toVar(); - - Loop({ start: int(1), end: int(kernelRadius), type: 'int', condition: '<' }, ({ i }) => { - const x = float(i); - const w = gaussianCoefficients.element(i); - const uvOffset = direction.mul(invSize).mul(x); - const sample1 = sampleTexel(uvNode.add(uvOffset)).rgb; - const sample2 = sampleTexel(uvNode.sub(uvOffset)).rgb; - diffuseSum.addAssign(add(sample1, sample2).mul(w)); - weightSum.addAssign(float(2.0).mul(w)); - }); - - return vec4(diffuseSum.div(weightSum), 1.0); - }); - - const seperableBlurMaterial = builder.createNodeMaterial(); - seperableBlurMaterial.fragmentNode = seperableBlurPass().context(builder.getSharedContext()); - seperableBlurMaterial.name = 'Bloom_seperable'; - seperableBlurMaterial.needsUpdate = true; - - // uniforms - seperableBlurMaterial.colorTexture = colorTexture; - seperableBlurMaterial.direction = direction; - seperableBlurMaterial.invSize = invSize; - - return seperableBlurMaterial; - } -} - -const bloom = (node, strength, radius, threshold) => nodeObject(new BloomNode(nodeObject(node), strength, radius, threshold)); - -addNodeElement('bloom', bloom); - -class TransitionNode extends TempNode { - constructor(textureNodeA, textureNodeB, mixTextureNode, mixRatioNode, thresholdNode, useTextureNode) { - super(); - - // Input textures - - this.textureNodeA = textureNodeA; - this.textureNodeB = textureNodeB; - this.mixTextureNode = mixTextureNode; - - // Uniforms - - this.mixRatioNode = mixRatioNode; - this.thresholdNode = thresholdNode; - this.useTextureNode = useTextureNode; - } - - setup() { - const { textureNodeA, textureNodeB, mixTextureNode, mixRatioNode, thresholdNode, useTextureNode } = this; - - const sampleTexture = (textureNode) => { - const uvNodeTexture = textureNode.uvNode || uv(); - return textureNode.uv(uvNodeTexture); - }; - - const transition = Fn(() => { - const texelOne = sampleTexture(textureNodeA); - const texelTwo = sampleTexture(textureNodeB); - - const color = vec4().toVar(); - - If(useTextureNode.equal(int(1)), () => { - const transitionTexel = sampleTexture(mixTextureNode); - const r = mixRatioNode.mul(thresholdNode.mul(2.0).add(1.0)).sub(thresholdNode); - const mixf = clamp(sub(transitionTexel.r, r).mul(float(1.0).div(thresholdNode)), 0.0, 1.0); - - color.assign(mix(texelOne, texelTwo, mixf)); - }).Else(() => { - color.assign(mix(texelTwo, texelOne, mixRatioNode)); - }); - - return color; - }); - - const outputNode = transition(); - - return outputNode; - } -} - -const transition = (nodeA, nodeB, mixTexture, mixRatio = 0.0, threshold = 0.1, useTexture = 0) => nodeObject(new TransitionNode(nodeObject(nodeA).toTexture(), nodeObject(nodeB).toTexture(), nodeObject(mixTexture).toTexture(), nodeObject(mixRatio), nodeObject(threshold), nodeObject(useTexture))); - -addNodeElement('transition', transition); - -class RenderOutputNode extends TempNode { - constructor(colorNode, toneMapping, outputColorSpace) { - super('vec4'); - - this.colorNode = colorNode; - this.toneMapping = toneMapping; - this.outputColorSpace = outputColorSpace; - - this.isRenderOutput = true; - } - - setup({ context }) { - let outputNode = this.colorNode || context.color; - - // tone mapping - - const toneMapping = (this.toneMapping !== null ? this.toneMapping : context.toneMapping) || NoToneMapping; - const outputColorSpace = (this.outputColorSpace !== null ? this.outputColorSpace : context.outputColorSpace) || LinearSRGBColorSpace; - - if (toneMapping !== NoToneMapping) { - outputNode = outputNode.toneMapping(toneMapping); - } - - // output color space - - if (outputColorSpace === SRGBColorSpace) { - outputNode = outputNode.linearToColorSpace(outputColorSpace); - } - - return outputNode; - } -} - -const renderOutput = (color, toneMapping = null, outputColorSpace = null) => nodeObject(new RenderOutputNode(nodeObject(color), toneMapping, outputColorSpace)); - -addNodeElement('renderOutput', renderOutput); - -addNodeClass('RenderOutputNode', RenderOutputNode); - -class PixelationNode extends TempNode { - constructor(textureNode, depthNode, normalNode, pixelSize, normalEdgeStrength, depthEdgeStrength) { - super(); - - // Input textures - - this.textureNode = textureNode; - this.depthNode = depthNode; - this.normalNode = normalNode; - - // Input uniforms - - this.pixelSize = pixelSize; - this.normalEdgeStrength = normalEdgeStrength; - this.depthEdgeStrength = depthEdgeStrength; - - // Private uniforms - - this._resolution = uniform(new Vector4()); - - this.updateBeforeType = NodeUpdateType.RENDER; - } - - updateBefore() { - const map = this.textureNode.value; - - const width = map.image.width; - const height = map.image.height; - - this._resolution.value.set(width, height, 1 / width, 1 / height); - } - - setup() { - const { textureNode, depthNode, normalNode } = this; - - const uvNodeTexture = textureNode.uvNode || uv(); - const uvNodeDepth = depthNode.uvNode || uv(); - const uvNodeNormal = normalNode.uvNode || uv(); - - const sampleTexture = () => textureNode.uv(uvNodeTexture); - - const sampleDepth = (x, y) => depthNode.uv(uvNodeDepth.add(vec2(x, y).mul(this._resolution.zw))).r; - - const sampleNormal = (x, y) => normalNode.uv(uvNodeNormal.add(vec2(x, y).mul(this._resolution.zw))).rgb.normalize(); - - const depthEdgeIndicator = (depth) => { - const diff = property('float', 'diff'); - diff.addAssign(clamp(sampleDepth(1, 0).sub(depth))); - diff.addAssign(clamp(sampleDepth(-1, 0).sub(depth))); - diff.addAssign(clamp(sampleDepth(0, 1).sub(depth))); - diff.addAssign(clamp(sampleDepth(0, -1).sub(depth))); - - return floor(smoothstep(0.01, 0.02, diff).mul(2)).div(2); - }; - - const neighborNormalEdgeIndicator = (x, y, depth, normal) => { - const depthDiff = sampleDepth(x, y).sub(depth); - const neighborNormal = sampleNormal(x, y); - - // Edge pixels should yield to faces who's normals are closer to the bias normal. - - const normalEdgeBias = vec3(1, 1, 1); // This should probably be a parameter. - const normalDiff = dot(normal.sub(neighborNormal), normalEdgeBias); - const normalIndicator = clamp(smoothstep(-0.01, 0.01, normalDiff), 0.0, 1.0); - - // Only the shallower pixel should detect the normal edge. - - const depthIndicator = clamp(sign(depthDiff.mul(0.25).add(0.0025)), 0.0, 1.0); - - return float(1.0).sub(dot(normal, neighborNormal)).mul(depthIndicator).mul(normalIndicator); - }; - - const normalEdgeIndicator = (depth, normal) => { - const indicator = property('float', 'indicator'); - - indicator.addAssign(neighborNormalEdgeIndicator(0, -1, depth, normal)); - indicator.addAssign(neighborNormalEdgeIndicator(0, 1, depth, normal)); - indicator.addAssign(neighborNormalEdgeIndicator(-1, 0, depth, normal)); - indicator.addAssign(neighborNormalEdgeIndicator(1, 0, depth, normal)); - - return step(0.1, indicator); - }; - - const pixelation = Fn(() => { - const texel = sampleTexture(); - - const depth = property('float', 'depth'); - const normal = property('vec3', 'normal'); - - If(this.depthEdgeStrength.greaterThan(0.0).or(this.normalEdgeStrength.greaterThan(0.0)), () => { - depth.assign(sampleDepth(0, 0)); - normal.assign(sampleNormal(0, 0)); - }); - - const dei = property('float', 'dei'); - - If(this.depthEdgeStrength.greaterThan(0.0), () => { - dei.assign(depthEdgeIndicator(depth)); - }); - - const nei = property('float', 'nei'); - - If(this.normalEdgeStrength.greaterThan(0.0), () => { - nei.assign(normalEdgeIndicator(depth, normal)); - }); - - const strength = dei.greaterThan(0).select(float(1.0).sub(dei.mul(this.depthEdgeStrength)), nei.mul(this.normalEdgeStrength).add(1)); - - return texel.mul(strength); - }); - - const outputNode = pixelation(); - - return outputNode; - } -} - -const pixelation = (node, depthNode, normalNode, pixelSize = 6, normalEdgeStrength = 0.3, depthEdgeStrength = 0.4) => nodeObject(new PixelationNode(nodeObject(node).toTexture(), nodeObject(depthNode).toTexture(), nodeObject(normalNode).toTexture(), nodeObject(pixelSize), nodeObject(normalEdgeStrength), nodeObject(depthEdgeStrength))); - -addNodeElement('pixelation', pixelation); - -class PixelationPassNode extends PassNode { - constructor(scene, camera, pixelSize = 6, normalEdgeStrength = 0.3, depthEdgeStrength = 0.4) { - super('color', scene, camera, { minFilter: NearestFilter, magFilter: NearestFilter }); - - this.pixelSize = pixelSize; - this.normalEdgeStrength = normalEdgeStrength; - this.depthEdgeStrength = depthEdgeStrength; - - this.isPixelationPassNode = true; - - this._mrt = mrt({ - output: output, - normal: normalView, - }); - } - - setSize(width, height) { - const pixelSize = this.pixelSize.value ? this.pixelSize.value : this.pixelSize; - - const adjustedWidth = Math.floor(width / pixelSize); - const adjustedHeight = Math.floor(height / pixelSize); - - super.setSize(adjustedWidth, adjustedHeight); - } - - setup() { - const color = super.getTextureNode('output'); - const depth = super.getTextureNode('depth'); - const normal = super.getTextureNode('normal'); - - return pixelation(color, depth, normal, this.pixelSize, this.normalEdgeStrength, this.depthEdgeStrength); - } -} - -const pixelationPass = (scene, camera, pixelSize, normalEdgeStrength, depthEdgeStrength) => nodeObject(new PixelationPassNode(scene, camera, pixelSize, normalEdgeStrength, depthEdgeStrength)); - -const _size$3 = /*@__PURE__*/ new Vector2(); - -/** - * - * Supersample Anti-Aliasing Render Pass - * - * This manual approach to SSAA re-renders the scene ones for each sample with camera jitter and accumulates the results. - * - * References: https://en.wikipedia.org/wiki/Supersampling - * - */ - -class SSAAPassNode extends PassNode { - constructor(scene, camera) { - super(PassNode.COLOR, scene, camera); - - this.isSSAAPassNode = true; - - this.sampleLevel = 4; // specified as n, where the number of samples is 2^n, so sampleLevel = 4, is 2^4 samples, 16. - this.unbiased = true; - this.clearColor = new Color(0x000000); - this.clearAlpha = 0; - - this._currentClearColor = new Color(); - - this.sampleWeight = uniform(1); - - this.sampleRenderTarget = null; - - this._quadMesh = new QuadMesh(); - } - - updateBefore(frame) { - const { renderer } = frame; - const { scene, camera } = this; - - this._pixelRatio = renderer.getPixelRatio(); - - const size = renderer.getSize(_size$3); - - this.setSize(size.width, size.height); - this.sampleRenderTarget.setSize(this.renderTarget.width, this.renderTarget.height); - - // save current renderer settings - - renderer.getClearColor(this._currentClearColor); - const currentClearAlpha = renderer.getClearAlpha(); - const currentRenderTarget = renderer.getRenderTarget(); - const currentMRT = renderer.getMRT(); - const currentAutoClear = renderer.autoClear; - - // - - this._cameraNear.value = camera.near; - this._cameraFar.value = camera.far; - - renderer.setMRT(this.getMRT()); - renderer.autoClear = false; - - const jitterOffsets = _JitterVectors[Math.max(0, Math.min(this.sampleLevel, 5))]; - - const baseSampleWeight = 1.0 / jitterOffsets.length; - const roundingRange = 1 / 32; - - const viewOffset = { - fullWidth: this.renderTarget.width, - fullHeight: this.renderTarget.height, - offsetX: 0, - offsetY: 0, - width: this.renderTarget.width, - height: this.renderTarget.height, - }; - - const originalViewOffset = Object.assign({}, camera.view); - - if (originalViewOffset.enabled) Object.assign(viewOffset, originalViewOffset); - - // render the scene multiple times, each slightly jitter offset from the last and accumulate the results. - - for (let i = 0; i < jitterOffsets.length; i++) { - const jitterOffset = jitterOffsets[i]; - - if (camera.setViewOffset) { - camera.setViewOffset( - viewOffset.fullWidth, - viewOffset.fullHeight, - - viewOffset.offsetX + jitterOffset[0] * 0.0625, - viewOffset.offsetY + jitterOffset[1] * 0.0625, // 0.0625 = 1 / 16 - - viewOffset.width, - viewOffset.height - ); - } - - this.sampleWeight.value = baseSampleWeight; - - if (this.unbiased) { - // the theory is that equal weights for each sample lead to an accumulation of rounding errors. - // The following equation varies the sampleWeight per sample so that it is uniformly distributed - // across a range of values whose rounding errors cancel each other out. - - const uniformCenteredDistribution = -0.5 + (i + 0.5) / jitterOffsets.length; - this.sampleWeight.value += roundingRange * uniformCenteredDistribution; - } - - renderer.setClearColor(this.clearColor, this.clearAlpha); - renderer.setRenderTarget(this.sampleRenderTarget); - renderer.clear(); - renderer.render(scene, camera); - - // accumulation - - renderer.setRenderTarget(this.renderTarget); - - if (i === 0) { - renderer.setClearColor(0x000000, 0.0); - renderer.clear(); - } - - this._quadMesh.render(renderer); - } - - renderer.copyTextureToTexture(this.sampleRenderTarget.depthTexture, this.renderTarget.depthTexture); - - // restore - - if (camera.setViewOffset && originalViewOffset.enabled) { - camera.setViewOffset( - originalViewOffset.fullWidth, - originalViewOffset.fullHeight, - - originalViewOffset.offsetX, - originalViewOffset.offsetY, - - originalViewOffset.width, - originalViewOffset.height - ); - } else if (camera.clearViewOffset) { - camera.clearViewOffset(); - } - - renderer.setRenderTarget(currentRenderTarget); - renderer.setMRT(currentMRT); - - renderer.autoClear = currentAutoClear; - renderer.setClearColor(this._currentClearColor, currentClearAlpha); - } - - setup(builder) { - if (this.sampleRenderTarget === null) { - this.sampleRenderTarget = this.renderTarget.clone(); - } - - let sampleTexture; - - const passMRT = this.getMRT(); - - if (passMRT !== null) { - const outputs = {}; - - for (const name in passMRT.outputNodes) { - const index = getTextureIndex(this.sampleRenderTarget.textures, name); - - if (index >= 0) { - outputs[name] = texture(this.sampleRenderTarget.textures[index]).mul(this.sampleWeight); - } - } - - sampleTexture = mrt(outputs); - } else { - sampleTexture = texture(this.sampleRenderTarget.texture).mul(this.sampleWeight); - } - - this._quadMesh.material = builder.createNodeMaterial(); - this._quadMesh.material.fragmentNode = sampleTexture; - this._quadMesh.material.transparent = true; - this._quadMesh.material.depthTest = false; - this._quadMesh.material.depthWrite = false; - this._quadMesh.material.premultipliedAlpha = true; - this._quadMesh.material.blending = AdditiveBlending; - this._quadMesh.material.normals = false; - this._quadMesh.material.name = 'SSAA'; - - return super.setup(builder); - } - - dispose() { - super.dispose(); - - if (this.sampleRenderTarget !== null) { - this.sampleRenderTarget.dispose(); - } - } -} - -// These jitter vectors are specified in integers because it is easier. -// I am assuming a [-8,8) integer grid, but it needs to be mapped onto [-0.5,0.5) -// before being used, thus these integers need to be scaled by 1/16. -// -// Sample patterns reference: https://msdn.microsoft.com/en-us/library/windows/desktop/ff476218%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 -const _JitterVectors = [ - [[0, 0]], - [ - [4, 4], - [-4, -4], - ], - [ - [-2, -6], - [6, -2], - [-6, 2], - [2, 6], - ], - [ - [1, -3], - [-1, 3], - [5, 1], - [-3, -5], - [-5, 5], - [-7, -1], - [3, 7], - [7, -7], - ], - [ - [1, 1], - [-1, -3], - [-3, 2], - [4, -1], - [-5, -2], - [2, 5], - [5, 3], - [3, -5], - [-2, 6], - [0, -7], - [-4, -6], - [-6, 4], - [-8, 0], - [7, -4], - [6, 7], - [-7, -8], - ], - [ - [-4, -7], - [-7, -5], - [-3, -5], - [-5, -4], - [-1, -4], - [-2, -2], - [-6, -1], - [-4, 0], - [-7, 1], - [-1, 2], - [-6, 3], - [-3, 3], - [-7, 6], - [-3, 6], - [-5, 7], - [-1, 7], - [5, -7], - [1, -6], - [6, -5], - [4, -4], - [2, -3], - [7, -2], - [1, -1], - [4, -1], - [2, 1], - [6, 2], - [0, 4], - [4, 4], - [2, 5], - [7, 5], - [5, 6], - [3, 7], - ], -]; - -const ssaaPass = (scene, camera) => nodeObject(new SSAAPassNode(scene, camera)); - -const _size$2 = /*@__PURE__*/ new Vector2(); - -class StereoPassNode extends PassNode { - constructor(scene, camera) { - super(PassNode.COLOR, scene, camera); - - this.isStereoPassNode = true; - - this.stereo = new StereoCamera(); - this.stereo.aspect = 0.5; - } - - updateBefore(frame) { - const { renderer } = frame; - const { scene, camera, stereo, renderTarget } = this; - - this._pixelRatio = renderer.getPixelRatio(); - - stereo.cameraL.coordinateSystem = renderer.coordinateSystem; - stereo.cameraR.coordinateSystem = renderer.coordinateSystem; - stereo.update(camera); - - const size = renderer.getSize(_size$2); - this.setSize(size.width, size.height); - - const currentAutoClear = renderer.autoClear; - renderer.autoClear = false; - - const currentRenderTarget = renderer.getRenderTarget(); - const currentMRT = renderer.getMRT(); - - this._cameraNear.value = camera.near; - this._cameraFar.value = camera.far; - - for (const name in this._previousTextures) { - this.toggleTexture(name); - } - - renderer.setRenderTarget(renderTarget); - renderer.setMRT(this._mrt); - renderer.clear(); - - renderTarget.scissorTest = true; - - renderTarget.scissor.set(0, 0, renderTarget.width / 2, renderTarget.height); - renderTarget.viewport.set(0, 0, renderTarget.width / 2, renderTarget.height); - renderer.render(scene, stereo.cameraL); - - renderTarget.scissor.set(renderTarget.width / 2, 0, renderTarget.width / 2, renderTarget.height); - renderTarget.viewport.set(renderTarget.width / 2, 0, renderTarget.width / 2, renderTarget.height); - renderer.render(scene, stereo.cameraR); - - renderTarget.scissorTest = false; - - renderer.setRenderTarget(currentRenderTarget); - renderer.setMRT(currentMRT); - - renderer.autoClear = currentAutoClear; - } -} - -const stereoPass = (scene, camera) => nodeObject(new StereoPassNode(scene, camera)); - -const _size$1 = /*@__PURE__*/ new Vector2(); -const _quadMesh$1 = /*@__PURE__*/ new QuadMesh(); - -class StereoCompositePassNode extends PassNode { - constructor(scene, camera) { - super(PassNode.COLOR, scene, camera); - - this.isStereoCompositePassNode = true; - - this.stereo = new StereoCamera(); - const _params = { minFilter: LinearFilter, magFilter: NearestFilter, type: HalfFloatType }; - - this._renderTargetL = new RenderTarget(1, 1, _params); - this._renderTargetR = new RenderTarget(1, 1, _params); - - this._mapLeft = texture(this._renderTargetL.texture); - this._mapRight = texture(this._renderTargetR.texture); - - this._material = null; - } - - updateStereoCamera(coordinateSystem) { - this.stereo.cameraL.coordinateSystem = coordinateSystem; - this.stereo.cameraR.coordinateSystem = coordinateSystem; - this.stereo.update(this.camera); - } - - setSize(width, height) { - super.setSize(width, height); - - this._renderTargetL.setSize(this.renderTarget.width, this.renderTarget.height); - this._renderTargetR.setSize(this.renderTarget.width, this.renderTarget.height); - } - - updateBefore(frame) { - const { renderer } = frame; - const { scene, stereo, renderTarget } = this; - - this._pixelRatio = renderer.getPixelRatio(); - - this.updateStereoCamera(renderer.coordinateSystem); - - const size = renderer.getSize(_size$1); - this.setSize(size.width, size.height); - - const currentRenderTarget = renderer.getRenderTarget(); - - // left - - renderer.setRenderTarget(this._renderTargetL); - renderer.render(scene, stereo.cameraL); - - // right - - renderer.setRenderTarget(this._renderTargetR); - renderer.render(scene, stereo.cameraR); - - // composite - - renderer.setRenderTarget(renderTarget); - _quadMesh$1.material = this._material; - _quadMesh$1.render(renderer); - - // restore - - renderer.setRenderTarget(currentRenderTarget); - } - - dispose() { - super.dispose(); - - this._renderTargetL.dispose(); - this._renderTargetR.dispose(); - - if (this._material !== null) { - this._material.dispose(); - } - } -} - -class AnaglyphPassNode extends StereoCompositePassNode { - constructor(scene, camera) { - super(scene, camera); - - this.isAnaglyphPassNode = true; - - // Dubois matrices from https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.7.6968&rep=rep1&type=pdf#page=4 - - this._colorMatrixLeft = uniform(new Matrix3().fromArray([0.4561, -0.0400822, -0.0152161, 0.500484, -0.0378246, -0.0205971, 0.176381, -0.0157589, -0.00546856])); - - this._colorMatrixRight = uniform(new Matrix3().fromArray([-0.0434706, 0.378476, -0.0721527, -0.0879388, 0.73364, -0.112961, -0.00155529, -0.0184503, 1.2264])); - } - - setup(builder) { - const uvNode = uv(); - - const anaglyph = Fn(() => { - const colorL = this._mapLeft.uv(uvNode); - const colorR = this._mapRight.uv(uvNode); - - const color = clamp(this._colorMatrixLeft.mul(colorL.rgb).add(this._colorMatrixRight.mul(colorR.rgb))); - - return vec4(color.rgb, max$1(colorL.a, colorR.a)); - }); - - const material = this._material || (this._material = builder.createNodeMaterial()); - material.fragmentNode = anaglyph().context(builder.getSharedContext()); - material.name = 'Anaglyph'; - material.needsUpdate = true; - - return super.setup(builder); - } -} - -const anaglyphPass = (scene, camera) => nodeObject(new AnaglyphPassNode(scene, camera)); - -addNodeClass('AnaglyphPassNode', AnaglyphPassNode); - -class ParallaxBarrierPassNode extends StereoCompositePassNode { - constructor(scene, camera) { - super(scene, camera); - - this.isParallaxBarrierPassNode = true; - } - - setup(builder) { - const uvNode = uv(); - - const parallaxBarrier = Fn(() => { - const color = vec4().toVar(); - - If(mod(viewportCoordinate.y, 2).greaterThan(1), () => { - color.assign(this._mapLeft.uv(uvNode)); - }).Else(() => { - color.assign(this._mapRight.uv(uvNode)); - }); - - return color; - }); - - const material = this._material || (this._material = builder.createNodeMaterial()); - material.fragmentNode = parallaxBarrier().context(builder.getSharedContext()); - material.needsUpdate = true; - - return super.setup(builder); - } -} - -const parallaxBarrierPass = (scene, camera) => nodeObject(new ParallaxBarrierPassNode(scene, camera)); - -addNodeClass('ParallaxBarrierPassNode', ParallaxBarrierPassNode); - -const bleach = /*@__PURE__*/ Fn(([color, opacity = 1]) => { - const base = color; - const lum = luminance(base.rgb); - const blend = vec3(lum); - - const L = min$1(1.0, max$1(0.0, float(10.0).mul(lum.sub(0.45)))); - - const result1 = blend.mul(base.rgb).mul(2.0); - const result2 = float(2.0).mul(blend.oneMinus()).mul(base.rgb.oneMinus()).oneMinus(); - - const newColor = mix(result1, result2, L); - - const A2 = base.a.mul(opacity); - - const mixRGB = A2.mul(newColor.rgb); - - mixRGB.addAssign(base.rgb.mul(A2.oneMinus())); - - return vec4(mixRGB, base.a); -}); - -addNodeElement('bleach', bleach); - -const sepia = /*@__PURE__*/ Fn(([color]) => { - const c = vec3(color); - - // https://github.com/evanw/glfx.js/blob/master/src/filters/adjust/sepia.js - - return vec4(dot(c, vec3(0.393, 0.769, 0.189)), dot(c, vec3(0.349, 0.686, 0.168)), dot(c, vec3(0.272, 0.534, 0.131)), color.a); -}); - -addNodeElement('sepia', sepia); - -class FunctionCallNode extends TempNode { - constructor(functionNode = null, parameters = {}) { - super(); - - this.functionNode = functionNode; - this.parameters = parameters; - } - - setParameters(parameters) { - this.parameters = parameters; - - return this; - } - - getParameters() { - return this.parameters; - } - - getNodeType(builder) { - return this.functionNode.getNodeType(builder); - } - - generate(builder) { - const params = []; - - const functionNode = this.functionNode; - - const inputs = functionNode.getInputs(builder); - const parameters = this.parameters; - - if (Array.isArray(parameters)) { - for (let i = 0; i < parameters.length; i++) { - const inputNode = inputs[i]; - const node = parameters[i]; - - params.push(node.build(builder, inputNode.type)); - } - } else { - for (const inputNode of inputs) { - const node = parameters[inputNode.name]; - - if (node !== undefined) { - params.push(node.build(builder, inputNode.type)); - } else { - throw new Error(`FunctionCallNode: Input '${inputNode.name}' not found in FunctionNode.`); - } - } - } - - const functionName = functionNode.build(builder, 'property'); - - return `${functionName}( ${params.join(', ')} )`; - } -} - -const call = (func, ...params) => { - params = params.length > 1 || (params[0] && params[0].isNode === true) ? nodeArray(params) : nodeObjects(params[0]); - - return nodeObject(new FunctionCallNode(nodeObject(func), params)); -}; - -addNodeElement('call', call); - -addNodeClass('FunctionCallNode', FunctionCallNode); - -class ScriptableValueNode extends Node { - constructor(value = null) { - super(); - - this._value = value; - this._cache = null; - - this.inputType = null; - this.outpuType = null; - - this.events = new EventDispatcher(); - - this.isScriptableValueNode = true; - } - - get isScriptableOutputNode() { - return this.outputType !== null; - } - - set value(val) { - if (this._value === val) return; - - if (this._cache && this.inputType === 'URL' && this.value.value instanceof ArrayBuffer) { - URL.revokeObjectURL(this._cache); - - this._cache = null; - } - - this._value = val; - - this.events.dispatchEvent({ type: 'change' }); - - this.refresh(); - } - - get value() { - return this._value; - } - - refresh() { - this.events.dispatchEvent({ type: 'refresh' }); - } - - getValue() { - const value = this.value; - - if (value && this._cache === null && this.inputType === 'URL' && value.value instanceof ArrayBuffer) { - this._cache = URL.createObjectURL(new Blob([value.value])); - } else if (value && value.value !== null && value.value !== undefined && (((this.inputType === 'URL' || this.inputType === 'String') && typeof value.value === 'string') || (this.inputType === 'Number' && typeof value.value === 'number') || (this.inputType === 'Vector2' && value.value.isVector2) || (this.inputType === 'Vector3' && value.value.isVector3) || (this.inputType === 'Vector4' && value.value.isVector4) || (this.inputType === 'Color' && value.value.isColor) || (this.inputType === 'Matrix3' && value.value.isMatrix3) || (this.inputType === 'Matrix4' && value.value.isMatrix4))) { - return value.value; - } - - return this._cache || value; - } - - getNodeType(builder) { - return this.value && this.value.isNode ? this.value.getNodeType(builder) : 'float'; - } - - setup() { - return this.value && this.value.isNode ? this.value : float(); - } - - serialize(data) { - super.serialize(data); - - if (this.value !== null) { - if (this.inputType === 'ArrayBuffer') { - data.value = arrayBufferToBase64(this.value); - } else { - data.value = this.value ? this.value.toJSON(data.meta).uuid : null; - } - } else { - data.value = null; - } - - data.inputType = this.inputType; - data.outputType = this.outputType; - } - - deserialize(data) { - super.deserialize(data); - - let value = null; - - if (data.value !== null) { - if (data.inputType === 'ArrayBuffer') { - value = base64ToArrayBuffer(data.value); - } else if (data.inputType === 'Texture') { - value = data.meta.textures[data.value]; - } else { - value = data.meta.nodes[data.value] || null; - } - } - - this.value = value; - - this.inputType = data.inputType; - this.outputType = data.outputType; - } -} - -const scriptableValue = nodeProxy(ScriptableValueNode); - -addNodeElement('scriptableValue', scriptableValue); - -addNodeClass('ScriptableValueNode', ScriptableValueNode); - -class Resources extends Map { - get(key, callback = null, ...params) { - if (this.has(key)) return super.get(key); - - if (callback !== null) { - const value = callback(...params); - this.set(key, value); - return value; - } - } -} - -class Parameters { - constructor(scriptableNode) { - this.scriptableNode = scriptableNode; - } - - get parameters() { - return this.scriptableNode.parameters; - } - - get layout() { - return this.scriptableNode.getLayout(); - } - - getInputLayout(id) { - return this.scriptableNode.getInputLayout(id); - } - - get(name) { - const param = this.parameters[name]; - const value = param ? param.getValue() : null; - - return value; - } -} - -const global = new Resources(); - -class ScriptableNode extends Node { - constructor(codeNode = null, parameters = {}) { - super(); - - this.codeNode = codeNode; - this.parameters = parameters; - - this._local = new Resources(); - this._output = scriptableValue(); - this._outputs = {}; - this._source = this.source; - this._method = null; - this._object = null; - this._value = null; - this._needsOutputUpdate = true; - - this.onRefresh = this.onRefresh.bind(this); - - this.isScriptableNode = true; - } - - get source() { - return this.codeNode ? this.codeNode.code : ''; - } - - setLocal(name, value) { - return this._local.set(name, value); - } - - getLocal(name) { - return this._local.get(name); - } - - onRefresh() { - this._refresh(); - } - - getInputLayout(id) { - for (const element of this.getLayout()) { - if (element.inputType && (element.id === id || element.name === id)) { - return element; - } - } - } - - getOutputLayout(id) { - for (const element of this.getLayout()) { - if (element.outputType && (element.id === id || element.name === id)) { - return element; - } - } - } - - setOutput(name, value) { - const outputs = this._outputs; - - if (outputs[name] === undefined) { - outputs[name] = scriptableValue(value); - } else { - outputs[name].value = value; - } - - return this; - } - - getOutput(name) { - return this._outputs[name]; - } - - getParameter(name) { - return this.parameters[name]; - } - - setParameter(name, value) { - const parameters = this.parameters; - - if (value && value.isScriptableNode) { - this.deleteParameter(name); - - parameters[name] = value; - parameters[name].getDefaultOutput().events.addEventListener('refresh', this.onRefresh); - } else if (value && value.isScriptableValueNode) { - this.deleteParameter(name); - - parameters[name] = value; - parameters[name].events.addEventListener('refresh', this.onRefresh); - } else if (parameters[name] === undefined) { - parameters[name] = scriptableValue(value); - parameters[name].events.addEventListener('refresh', this.onRefresh); - } else { - parameters[name].value = value; - } - - return this; - } - - getValue() { - return this.getDefaultOutput().getValue(); - } - - deleteParameter(name) { - let valueNode = this.parameters[name]; - - if (valueNode) { - if (valueNode.isScriptableNode) valueNode = valueNode.getDefaultOutput(); - - valueNode.events.removeEventListener('refresh', this.onRefresh); - } - - return this; - } - - clearParameters() { - for (const name of Object.keys(this.parameters)) { - this.deleteParameter(name); - } - - this.needsUpdate = true; - - return this; - } - - call(name, ...params) { - const object = this.getObject(); - const method = object[name]; - - if (typeof method === 'function') { - return method(...params); - } - } - - async callAsync(name, ...params) { - const object = this.getObject(); - const method = object[name]; - - if (typeof method === 'function') { - return method.constructor.name === 'AsyncFunction' ? await method(...params) : method(...params); - } - } - - getNodeType(builder) { - return this.getDefaultOutputNode().getNodeType(builder); - } - - refresh(output = null) { - if (output !== null) { - this.getOutput(output).refresh(); - } else { - this._refresh(); - } - } - - getObject() { - if (this.needsUpdate) this.dispose(); - if (this._object !== null) return this._object; - - // - - const refresh = () => this.refresh(); - const setOutput = (id, value) => this.setOutput(id, value); - - const parameters = new Parameters(this); - - const THREE = global.get('THREE'); - const TSL = global.get('TSL'); - - const method = this.getMethod(this.codeNode); - const params = [parameters, this._local, global, refresh, setOutput, THREE, TSL]; - - this._object = method(...params); - - const layout = this._object.layout; - - if (layout) { - if (layout.cache === false) { - this._local.clear(); - } - - // default output - this._output.outputType = layout.outputType || null; - - if (Array.isArray(layout.elements)) { - for (const element of layout.elements) { - const id = element.id || element.name; - - if (element.inputType) { - if (this.getParameter(id) === undefined) this.setParameter(id, null); - - this.getParameter(id).inputType = element.inputType; - } - - if (element.outputType) { - if (this.getOutput(id) === undefined) this.setOutput(id, null); - - this.getOutput(id).outputType = element.outputType; - } - } - } - } - - return this._object; - } - - deserialize(data) { - super.deserialize(data); - - for (const name in this.parameters) { - let valueNode = this.parameters[name]; - - if (valueNode.isScriptableNode) valueNode = valueNode.getDefaultOutput(); - - valueNode.events.addEventListener('refresh', this.onRefresh); - } - } - - getLayout() { - return this.getObject().layout; - } - - getDefaultOutputNode() { - const output = this.getDefaultOutput().value; - - if (output && output.isNode) { - return output; - } - - return float(); - } - - getDefaultOutput() { - return this._exec()._output; - } - - getMethod() { - if (this.needsUpdate) this.dispose(); - if (this._method !== null) return this._method; - - // - - const parametersProps = ['parameters', 'local', 'global', 'refresh', 'setOutput', 'THREE', 'TSL']; - const interfaceProps = ['layout', 'init', 'main', 'dispose']; - - const properties = interfaceProps.join(', '); - const declarations = 'var ' + properties + '; var output = {};\n'; - const returns = '\nreturn { ...output, ' + properties + ' };'; - - const code = declarations + this.codeNode.code + returns; - - // - - this._method = new Function(...parametersProps, code); - - return this._method; - } - - dispose() { - if (this._method === null) return; - - if (this._object && typeof this._object.dispose === 'function') { - this._object.dispose(); - } - - this._method = null; - this._object = null; - this._source = null; - this._value = null; - this._needsOutputUpdate = true; - this._output.value = null; - this._outputs = {}; - } - - setup() { - return this.getDefaultOutputNode(); - } - - getCacheKey(force) { - const cacheKey = [this.source, this.getDefaultOutputNode().getCacheKey(force)]; - - for (const param in this.parameters) { - cacheKey.push(this.parameters[param].getCacheKey(force)); - } - - return cacheKey.join(','); - } - - set needsUpdate(value) { - if (value === true) this.dispose(); - } - - get needsUpdate() { - return this.source !== this._source; - } - - _exec() { - if (this.codeNode === null) return this; - - if (this._needsOutputUpdate === true) { - this._value = this.call('main'); - - this._needsOutputUpdate = false; - } - - this._output.value = this._value; - - return this; - } - - _refresh() { - this.needsUpdate = true; - - this._exec(); - - this._output.refresh(); - } -} - -const scriptable = nodeProxy(ScriptableNode); - -addNodeElement('scriptable', scriptable); - -addNodeClass('ScriptableNode', ScriptableNode); - -class FogNode extends Node { - constructor(colorNode, factorNode) { - super('float'); - - this.isFogNode = true; - - this.colorNode = colorNode; - this.factorNode = factorNode; - } - - getViewZNode(builder) { - let viewZ; - - const getViewZ = builder.context.getViewZ; - - if (getViewZ !== undefined) { - viewZ = getViewZ(this); - } - - return (viewZ || positionView.z).negate(); - } - - setup() { - return this.factorNode; - } -} - -const fog = nodeProxy(FogNode); - -addNodeElement('fog', fog); - -addNodeClass('FogNode', FogNode); - -class FogRangeNode extends FogNode { - constructor(colorNode, nearNode, farNode) { - super(colorNode); - - this.isFogRangeNode = true; - - this.nearNode = nearNode; - this.farNode = farNode; - } - - setup(builder) { - const viewZ = this.getViewZNode(builder); - - return smoothstep(this.nearNode, this.farNode, viewZ); - } -} - -const rangeFog = nodeProxy(FogRangeNode); - -addNodeElement('rangeFog', rangeFog); - -addNodeClass('FogRangeNode', FogRangeNode); - -class FogExp2Node extends FogNode { - constructor(colorNode, densityNode) { - super(colorNode); - - this.isFogExp2Node = true; - - this.densityNode = densityNode; - } - - setup(builder) { - const viewZ = this.getViewZNode(builder); - const density = this.densityNode; - - return density.mul(density, viewZ, viewZ).negate().exp().oneMinus(); - } -} - -const densityFog = nodeProxy(FogExp2Node); - -addNodeElement('densityFog', densityFog); - -addNodeClass('FogExp2Node', FogExp2Node); - -let min = null; -let max = null; - -class RangeNode extends Node { - constructor(minNode = float(), maxNode = float()) { - super(); - - this.minNode = minNode; - this.maxNode = maxNode; - } - - getVectorLength(builder) { - const minLength = builder.getTypeLength(getValueType(this.minNode.value)); - const maxLength = builder.getTypeLength(getValueType(this.maxNode.value)); - - return minLength > maxLength ? minLength : maxLength; - } - - getNodeType(builder) { - return builder.object.count > 1 ? builder.getTypeFromLength(this.getVectorLength(builder)) : 'float'; - } - - setup(builder) { - const object = builder.object; - - let output = null; - - if (object.count > 1) { - const minValue = this.minNode.value; - const maxValue = this.maxNode.value; - - const minLength = builder.getTypeLength(getValueType(minValue)); - const maxLength = builder.getTypeLength(getValueType(maxValue)); - - min = min || new Vector4(); - max = max || new Vector4(); - - min.setScalar(0); - max.setScalar(0); - - if (minLength === 1) min.setScalar(minValue); - else if (minValue.isColor) min.set(minValue.r, minValue.g, minValue.b); - else min.set(minValue.x, minValue.y, minValue.z || 0, minValue.w || 0); - - if (maxLength === 1) max.setScalar(maxValue); - else if (maxValue.isColor) max.set(maxValue.r, maxValue.g, maxValue.b); - else max.set(maxValue.x, maxValue.y, maxValue.z || 0, maxValue.w || 0); - - const stride = 4; - - const length = stride * object.count; - const array = new Float32Array(length); - - for (let i = 0; i < length; i++) { - const index = i % stride; - - const minElementValue = min.getComponent(index); - const maxElementValue = max.getComponent(index); - - array[i] = MathUtils.lerp(minElementValue, maxElementValue, Math.random()); - } - - const nodeType = this.getNodeType(builder); - - if (object.count <= 4096) { - output = buffer(array, 'vec4', object.count).element(instanceIndex).convert(nodeType); - } else { - // TODO: Improve anonymous buffer attribute creation removing this part - const bufferAttribute = new InstancedBufferAttribute(array, 4); - builder.geometry.setAttribute('__range' + this.id, bufferAttribute); - - output = instancedBufferAttribute(bufferAttribute).convert(nodeType); - } - } else { - output = float(0); - } - - return output; - } -} - -const range = nodeProxy(RangeNode); - -addNodeClass('RangeNode', RangeNode); - -class ComputeNode extends Node { - constructor(computeNode, count, workgroupSize = [64]) { - super('void'); - - this.isComputeNode = true; - - this.computeNode = computeNode; - - this.count = count; - this.workgroupSize = workgroupSize; - this.dispatchCount = 0; - - this.version = 1; - this.updateBeforeType = NodeUpdateType.OBJECT; - - this.updateDispatchCount(); - } - - dispose() { - this.dispatchEvent({ type: 'dispose' }); - } - - set needsUpdate(value) { - if (value === true) this.version++; - } - - updateDispatchCount() { - const { count, workgroupSize } = this; - - let size = workgroupSize[0]; - - for (let i = 1; i < workgroupSize.length; i++) size *= workgroupSize[i]; - - this.dispatchCount = Math.ceil(count / size); - } - - onInit() {} - - updateBefore({ renderer }) { - renderer.compute(this); - } - - generate(builder) { - const { shaderStage } = builder; - - if (shaderStage === 'compute') { - const snippet = this.computeNode.build(builder, 'void'); - - if (snippet !== '') { - builder.addLineFlowCode(snippet); - } - } - } -} - -const compute = (node, count, workgroupSize) => nodeObject(new ComputeNode(nodeObject(node), count, workgroupSize)); - -addNodeElement('compute', compute); - -addNodeClass('ComputeNode', ComputeNode); - -class LightNode extends Node { - constructor(scope = LightNode.TARGET_DIRECTION, light = null) { - super(); - - this.scope = scope; - this.light = light; - } - - setup() { - const { scope, light } = this; - - let output = null; - - if (scope === LightNode.TARGET_DIRECTION) { - output = cameraViewMatrix.transformDirection(objectPosition(light).sub(objectPosition(light.target))); - } - - return output; - } - - serialize(data) { - super.serialize(data); - - data.scope = this.scope; - } - - deserialize(data) { - super.deserialize(data); - - this.scope = data.scope; - } -} - -LightNode.TARGET_DIRECTION = 'targetDirection'; - -const lightTargetDirection = nodeProxy(LightNode, LightNode.TARGET_DIRECTION); - -addNodeClass('LightNode', LightNode); - -const getDistanceAttenuation = Fn((inputs) => { - const { lightDistance, cutoffDistance, decayExponent } = inputs; - - // based upon Frostbite 3 Moving to Physically-based Rendering - // page 32, equation 26: E[window1] - // https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf - const distanceFalloff = lightDistance.pow(decayExponent).max(0.01).reciprocal(); - - return cutoffDistance.greaterThan(0).select(distanceFalloff.mul(lightDistance.div(cutoffDistance).pow4().oneMinus().clamp().pow2()), distanceFalloff); -}); // validated - -class PointLightNode extends AnalyticLightNode { - constructor(light = null) { - super(light); - - this.cutoffDistanceNode = uniform(0); - this.decayExponentNode = uniform(0); - } - - update(frame) { - const { light } = this; - - super.update(frame); - - this.cutoffDistanceNode.value = light.distance; - this.decayExponentNode.value = light.decay; - } - - setup(builder) { - const { colorNode, cutoffDistanceNode, decayExponentNode, light } = this; - - const lightingModel = builder.context.lightingModel; - - const lVector = objectViewPosition(light).sub(positionView); // @TODO: Add it into LightNode - - const lightDirection = lVector.normalize(); - const lightDistance = lVector.length(); - - const lightAttenuation = getDistanceAttenuation({ - lightDistance, - cutoffDistance: cutoffDistanceNode, - decayExponent: decayExponentNode, - }); - - const lightColor = colorNode.mul(lightAttenuation); - - const reflectedLight = builder.context.reflectedLight; - - lightingModel.direct( - { - lightDirection, - lightColor, - reflectedLight, - }, - builder.stack, - builder - ); - } -} - -addNodeClass('PointLightNode', PointLightNode); - -addLightNode(PointLight, PointLightNode); - -class DirectionalLightNode extends AnalyticLightNode { - constructor(light = null) { - super(light); - } - - setup(builder) { - super.setup(builder); - - const lightingModel = builder.context.lightingModel; - - const lightColor = this.colorNode; - const lightDirection = lightTargetDirection(this.light); - const reflectedLight = builder.context.reflectedLight; - - lightingModel.direct( - { - lightDirection, - lightColor, - reflectedLight, - }, - builder.stack, - builder - ); - } -} - -addNodeClass('DirectionalLightNode', DirectionalLightNode); - -addLightNode(DirectionalLight, DirectionalLightNode); - -const _matrix41 = /*@__PURE__*/ new Matrix4(); -const _matrix42 = /*@__PURE__*/ new Matrix4(); - -let ltcLib = null; - -class RectAreaLightNode extends AnalyticLightNode { - constructor(light = null) { - super(light); - - this.halfHeight = uniform(new Vector3()); - this.halfWidth = uniform(new Vector3()); - } - - update(frame) { - super.update(frame); - - const { light } = this; - - const viewMatrix = frame.camera.matrixWorldInverse; - - _matrix42.identity(); - _matrix41.copy(light.matrixWorld); - _matrix41.premultiply(viewMatrix); - _matrix42.extractRotation(_matrix41); - - this.halfWidth.value.set(light.width * 0.5, 0.0, 0.0); - this.halfHeight.value.set(0.0, light.height * 0.5, 0.0); - - this.halfWidth.value.applyMatrix4(_matrix42); - this.halfHeight.value.applyMatrix4(_matrix42); - } - - setup(builder) { - super.setup(builder); - - let ltc_1, ltc_2; - - if (builder.isAvailable('float32Filterable')) { - ltc_1 = texture(ltcLib.LTC_FLOAT_1); - ltc_2 = texture(ltcLib.LTC_FLOAT_2); - } else { - ltc_1 = texture(ltcLib.LTC_HALF_1); - ltc_2 = texture(ltcLib.LTC_HALF_2); - } - - const { colorNode, light } = this; - const lightingModel = builder.context.lightingModel; - - const lightPosition = objectViewPosition(light); - const reflectedLight = builder.context.reflectedLight; - - lightingModel.directRectArea( - { - lightColor: colorNode, - lightPosition, - halfWidth: this.halfWidth, - halfHeight: this.halfHeight, - reflectedLight, - ltc_1, - ltc_2, - }, - builder.stack, - builder - ); - } - - static setLTC(ltc) { - ltcLib = ltc; - } -} - -addNodeClass('RectAreaLightNode', RectAreaLightNode); - -addLightNode(RectAreaLight, RectAreaLightNode); - -class SpotLightNode extends AnalyticLightNode { - constructor(light = null) { - super(light); - - this.coneCosNode = uniform(0); - this.penumbraCosNode = uniform(0); - - this.cutoffDistanceNode = uniform(0); - this.decayExponentNode = uniform(0); - } - - update(frame) { - super.update(frame); - - const { light } = this; - - this.coneCosNode.value = Math.cos(light.angle); - this.penumbraCosNode.value = Math.cos(light.angle * (1 - light.penumbra)); - - this.cutoffDistanceNode.value = light.distance; - this.decayExponentNode.value = light.decay; - } - - getSpotAttenuation(angleCosine) { - const { coneCosNode, penumbraCosNode } = this; - - return smoothstep(coneCosNode, penumbraCosNode, angleCosine); - } - - setup(builder) { - super.setup(builder); - - const lightingModel = builder.context.lightingModel; - - const { colorNode, cutoffDistanceNode, decayExponentNode, light } = this; - - const lVector = objectViewPosition(light).sub(positionView); // @TODO: Add it into LightNode - - const lightDirection = lVector.normalize(); - const angleCos = lightDirection.dot(lightTargetDirection(light)); - const spotAttenuation = this.getSpotAttenuation(angleCos); - - const lightDistance = lVector.length(); - - const lightAttenuation = getDistanceAttenuation({ - lightDistance, - cutoffDistance: cutoffDistanceNode, - decayExponent: decayExponentNode, - }); - - const lightColor = colorNode.mul(spotAttenuation).mul(lightAttenuation); - - const reflectedLight = builder.context.reflectedLight; - - lightingModel.direct( - { - lightDirection, - lightColor, - reflectedLight, - }, - builder.stack, - builder - ); - } -} - -addNodeClass('SpotLightNode', SpotLightNode); - -addLightNode(SpotLight, SpotLightNode); - -class IESSpotLight extends SpotLight { - constructor(color, intensity, distance, angle, penumbra, decay) { - super(color, intensity, distance, angle, penumbra, decay); - - this.iesMap = null; - } - - copy(source, recursive) { - super.copy(source, recursive); - - this.iesMap = source.iesMap; - - return this; - } -} - -class IESSpotLightNode extends SpotLightNode { - getSpotAttenuation(angleCosine) { - const iesMap = this.light.iesMap; - - let spotAttenuation = null; - - if (iesMap && iesMap.isTexture === true) { - const angle = angleCosine.acos().mul(1.0 / Math.PI); - - spotAttenuation = texture(iesMap, vec2(angle, 0), 0).r; - } else { - spotAttenuation = super.getSpotAttenuation(angleCosine); - } - - return spotAttenuation; - } -} - -addNodeClass('IESSpotLightNode', IESSpotLightNode); - -addLightNode(IESSpotLight, IESSpotLightNode); - -class AmbientLightNode extends AnalyticLightNode { - constructor(light = null) { - super(light); - } - - setup({ context }) { - context.irradiance.addAssign(this.colorNode); - } -} - -addNodeClass('AmbientLightNode', AmbientLightNode); - -addLightNode(AmbientLight, AmbientLightNode); - -class HemisphereLightNode extends AnalyticLightNode { - constructor(light = null) { - super(light); - - this.lightPositionNode = objectPosition(light); - this.lightDirectionNode = this.lightPositionNode.normalize(); - - this.groundColorNode = uniform(new Color()); - } - - update(frame) { - const { light } = this; - - super.update(frame); - - this.lightPositionNode.object3d = light; - - this.groundColorNode.value.copy(light.groundColor).multiplyScalar(light.intensity); - } - - setup(builder) { - const { colorNode, groundColorNode, lightDirectionNode } = this; - - const dotNL = normalView.dot(lightDirectionNode); - const hemiDiffuseWeight = dotNL.mul(0.5).add(0.5); - - const irradiance = mix(groundColorNode, colorNode, hemiDiffuseWeight); - - builder.context.irradiance.addAssign(irradiance); - } -} - -addNodeClass('HemisphereLightNode', HemisphereLightNode); - -addLightNode(HemisphereLight, HemisphereLightNode); - -class LightProbeNode extends AnalyticLightNode { - constructor(light = null) { - super(light); - - const array = []; - - for (let i = 0; i < 9; i++) array.push(new Vector3()); - - this.lightProbe = uniformArray(array); - } - - update(frame) { - const { light } = this; - - super.update(frame); - - // - - for (let i = 0; i < 9; i++) { - this.lightProbe.array[i].copy(light.sh.coefficients[i]).multiplyScalar(light.intensity); - } - } - - setup(builder) { - const irradiance = shGetIrradianceAt(normalWorld, this.lightProbe); - - builder.context.irradiance.addAssign(irradiance); - } -} - -const shGetIrradianceAt = Fn(([normal, shCoefficients]) => { - // normal is assumed to have unit length - - const x = normal.x, - y = normal.y, - z = normal.z; - - // band 0 - const result = shCoefficients.element(0).mul(0.886227); - - // band 1 - result.addAssign( - shCoefficients - .element(1) - .mul(2.0 * 0.511664) - .mul(y) - ); - result.addAssign( - shCoefficients - .element(2) - .mul(2.0 * 0.511664) - .mul(z) - ); - result.addAssign( - shCoefficients - .element(3) - .mul(2.0 * 0.511664) - .mul(x) - ); - - // band 2 - result.addAssign( - shCoefficients - .element(4) - .mul(2.0 * 0.429043) - .mul(x) - .mul(y) - ); - result.addAssign( - shCoefficients - .element(5) - .mul(2.0 * 0.429043) - .mul(y) - .mul(z) - ); - result.addAssign(shCoefficients.element(6).mul(z.mul(z).mul(0.743125).sub(0.247708))); - result.addAssign( - shCoefficients - .element(7) - .mul(2.0 * 0.429043) - .mul(x) - .mul(z) - ); - result.addAssign( - shCoefficients - .element(8) - .mul(0.429043) - .mul(mul(x, x).sub(mul(y, y))) - ); - - return result; -}); - -addNodeClass('LightProbeNode', LightProbeNode); - -addLightNode(LightProbe, LightProbeNode); - -let _generator = null; - -const _cache$1 = new WeakMap(); - -function _generateCubeUVSize(imageHeight) { - const maxMip = Math.log2(imageHeight) - 2; - - const texelHeight = 1.0 / imageHeight; - - const texelWidth = 1.0 / (3 * Math.max(Math.pow(2, maxMip), 7 * 16)); - - return { texelWidth, texelHeight, maxMip }; -} - -function _getPMREMFromTexture(texture) { - let cacheTexture = _cache$1.get(texture); - - const pmremVersion = cacheTexture !== undefined ? cacheTexture.pmremVersion : -1; - - if (pmremVersion !== texture.pmremVersion) { - const image = texture.image; - - if (texture.isCubeTexture) { - if (isCubeMapReady(image)) { - cacheTexture = _generator.fromCubemap(texture, cacheTexture); - } else { - return null; - } - } else { - if (isEquirectangularMapReady$1(image)) { - cacheTexture = _generator.fromEquirectangular(texture, cacheTexture); - } else { - return null; - } - } - - cacheTexture.pmremVersion = texture.pmremVersion; - - _cache$1.set(texture, cacheTexture); - } - - return cacheTexture.texture; -} - -class PMREMNode extends TempNode { - constructor(value, uvNode = null, levelNode = null) { - super('vec3'); - - this._value = value; - this._pmrem = null; - - this.uvNode = uvNode; - this.levelNode = levelNode; - - this._generator = null; - - const defaultTexture = new Texture(); - defaultTexture.isRenderTargetTexture = true; - - this._texture = texture(defaultTexture); - - this._width = uniform(0); - this._height = uniform(0); - this._maxMip = uniform(0); - - this.updateBeforeType = NodeUpdateType.RENDER; - } - - set value(value) { - this._value = value; - this._pmrem = null; - } - - get value() { - return this._value; - } - - updateFromTexture(texture) { - const cubeUVSize = _generateCubeUVSize(texture.image.height); - - this._texture.value = texture; - this._width.value = cubeUVSize.texelWidth; - this._height.value = cubeUVSize.texelHeight; - this._maxMip.value = cubeUVSize.maxMip; - } - - updateBefore() { - let pmrem = this._pmrem; - - const pmremVersion = pmrem ? pmrem.pmremVersion : -1; - const texture = this._value; - - if (pmremVersion !== texture.pmremVersion) { - if (texture.isPMREMTexture === true) { - pmrem = texture; - } else { - pmrem = _getPMREMFromTexture(texture); - } - - if (pmrem !== null) { - this._pmrem = pmrem; - - this.updateFromTexture(pmrem); - } - } - } - - setup(builder) { - if (_generator === null) { - _generator = builder.createPMREMGenerator(); - } - - // - - this.updateBefore(builder); - - // - - let uvNode = this.uvNode; - - if (uvNode === null && builder.context.getUV) { - uvNode = builder.context.getUV(this); - } - - // - - const texture = this.value; - - if (builder.renderer.coordinateSystem === WebGLCoordinateSystem && texture.isPMREMTexture !== true && texture.isRenderTargetTexture === true) { - uvNode = vec3(uvNode.x.negate(), uvNode.yz); - } - - // - - let levelNode = this.levelNode; - - if (levelNode === null && builder.context.getTextureLevel) { - levelNode = builder.context.getTextureLevel(this); - } - - // - - return textureCubeUV(this._texture, uvNode, levelNode, this._width, this._height, this._maxMip); - } -} - -function isCubeMapReady(image) { - if (image === null || image === undefined) return false; - - let count = 0; - const length = 6; - - for (let i = 0; i < length; i++) { - if (image[i] !== undefined) count++; - } - - return count === length; -} - -function isEquirectangularMapReady$1(image) { - if (image === null || image === undefined) return false; - - return image.height > 0; -} - -const pmremTexture = nodeProxy(PMREMNode); - -addNodeClass('PMREMNode', PMREMNode); - -const _envNodeCache = new WeakMap(); - -class EnvironmentNode extends LightingNode { - constructor(envNode = null) { - super(); - - this.envNode = envNode; - } - - setup(builder) { - const { material } = builder; - - let envNode = this.envNode; - - if (envNode.isTextureNode || envNode.isMaterialReferenceNode) { - const value = envNode.isTextureNode ? envNode.value : material[envNode.property]; - - let cacheEnvNode = _envNodeCache.get(value); - - if (cacheEnvNode === undefined) { - cacheEnvNode = pmremTexture(value); - - _envNodeCache.set(value, cacheEnvNode); - } - - envNode = cacheEnvNode; - } - - // - - const envMap = material.envMap; - const intensity = envMap ? reference('envMapIntensity', 'float', builder.material) : reference('environmentIntensity', 'float', builder.scene); // @TODO: Add materialEnvIntensity in MaterialNode - - const useAnisotropy = material.useAnisotropy === true || material.anisotropy > 0; - const radianceNormalView = useAnisotropy ? transformedBentNormalView : transformedNormalView; - - const radiance = context(envNode, createRadianceContext(roughness, radianceNormalView)).mul(intensity); - const irradiance = context(envNode, createIrradianceContext(transformedNormalWorld)).mul(Math.PI).mul(intensity); - - const isolateRadiance = cache(radiance); - const isolateIrradiance = cache(irradiance); - - // - - builder.context.radiance.addAssign(isolateRadiance); - - builder.context.iblIrradiance.addAssign(isolateIrradiance); - - // - - const clearcoatRadiance = builder.context.lightingModel.clearcoatRadiance; - - if (clearcoatRadiance) { - const clearcoatRadianceContext = context(envNode, createRadianceContext(clearcoatRoughness, transformedClearcoatNormalView)).mul(intensity); - const isolateClearcoatRadiance = cache(clearcoatRadianceContext); - - clearcoatRadiance.addAssign(isolateClearcoatRadiance); - } - } -} - -const createRadianceContext = (roughnessNode, normalViewNode) => { - let reflectVec = null; - - return { - getUV: () => { - if (reflectVec === null) { - reflectVec = positionViewDirection.negate().reflect(normalViewNode); - - // Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane. - reflectVec = roughnessNode.mul(roughnessNode).mix(reflectVec, normalViewNode).normalize(); - - reflectVec = reflectVec.transformDirection(cameraViewMatrix); - } - - return reflectVec; - }, - getTextureLevel: () => { - return roughnessNode; - }, - }; -}; - -const createIrradianceContext = (normalWorldNode) => { - return { - getUV: () => { - return normalWorldNode; - }, - getTextureLevel: () => { - return float(1.0); - }, - }; -}; - -addNodeClass('EnvironmentNode', EnvironmentNode); - -const _cache = new WeakMap(); - -class CubeMapNode extends TempNode { - constructor(envNode) { - super('vec3'); - - this.envNode = envNode; - - this._cubeTexture = null; - this._cubeTextureNode = cubeTexture(); - - const defaultTexture = new CubeTexture(); - defaultTexture.isRenderTargetTexture = true; - - this._defaultTexture = defaultTexture; - - this.updateBeforeType = NodeUpdateType.RENDER; - } - - updateBefore(frame) { - const { renderer, material } = frame; - - const envNode = this.envNode; - - if (envNode.isTextureNode || envNode.isMaterialReferenceNode) { - const texture = envNode.isTextureNode ? envNode.value : material[envNode.property]; - - if (texture && texture.isTexture) { - const mapping = texture.mapping; - - if (mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping) { - // check for converted cubemap map - - if (_cache.has(texture)) { - const cubeMap = _cache.get(texture); - - mapTextureMapping(cubeMap, texture.mapping); - this._cubeTexture = cubeMap; - } else { - // create cube map from equirectangular map - - const image = texture.image; - - if (isEquirectangularMapReady(image)) { - const renderTarget = new CubeRenderTarget(image.height); - renderTarget.fromEquirectangularTexture(renderer, texture); - - mapTextureMapping(renderTarget.texture, texture.mapping); - this._cubeTexture = renderTarget.texture; - - _cache.set(texture, renderTarget.texture); - - texture.addEventListener('dispose', onTextureDispose); - } else { - // default cube texture as fallback when equirectangular texture is not yet loaded - - this._cubeTexture = this._defaultTexture; - } - } - - // - - this._cubeTextureNode.value = this._cubeTexture; - } else { - // envNode already refers to a cube map - - this._cubeTextureNode = this.envNode; - } - } - } - } - - setup(builder) { - this.updateBefore(builder); - - return this._cubeTextureNode; - } -} - -function isEquirectangularMapReady(image) { - if (image === null || image === undefined) return false; - - return image.height > 0; -} - -function onTextureDispose(event) { - const texture = event.target; - - texture.removeEventListener('dispose', onTextureDispose); - - const renderTarget = _cache.get(texture); - - if (renderTarget !== undefined) { - _cache.delete(texture); - - renderTarget.dispose(); - } -} - -function mapTextureMapping(texture, mapping) { - if (mapping === EquirectangularReflectionMapping) { - texture.mapping = CubeReflectionMapping; - } else if (mapping === EquirectangularRefractionMapping) { - texture.mapping = CubeRefractionMapping; - } -} - -const cubeMapNode = nodeProxy(CubeMapNode); - -addNodeClass('CubeMapNode', CubeMapNode); - -class BasicEnvironmentNode extends LightingNode { - constructor(envNode = null) { - super(); - - this.envNode = envNode; - } - - setup(builder) { - // environment property is used in the finish() method of BasicLightingModel - - builder.context.environment = cubeMapNode(this.envNode); - } -} - -addNodeClass('BasicEnvironmentNode', BasicEnvironmentNode); - -const checkerShaderNode = Fn((inputs) => { - const uv = inputs.uv.mul(2.0); - - const cx = uv.x.floor(); - const cy = uv.y.floor(); - const result = cx.add(cy).mod(2.0); - - return result.sign(); -}); - -class CheckerNode extends TempNode { - constructor(uvNode = uv()) { - super('float'); - - this.uvNode = uvNode; - } - - setup() { - return checkerShaderNode({ uv: this.uvNode }); - } -} - -const checker = nodeProxy(CheckerNode); - -addNodeElement('checker', checker); - -addNodeClass('CheckerNode', CheckerNode); - -class NodeLoader extends Loader { - constructor(manager) { - super(manager); - - this.textures = {}; - } - - load(url, onLoad, onProgress, onError) { - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load( - url, - (text) => { - try { - onLoad(this.parse(JSON.parse(text))); - } catch (e) { - if (onError) { - onError(e); - } else { - console.error(e); - } - - this.manager.itemError(url); - } - }, - onProgress, - onError - ); - } - - parseNodes(json) { - const nodes = {}; - - if (json !== undefined) { - for (const nodeJSON of json) { - const { uuid, type } = nodeJSON; - - nodes[uuid] = nodeObject(createNodeFromType(type)); // @TODO: Maybe nodeObjectify the node in createNodeFromType? - nodes[uuid].uuid = uuid; - } - - const meta = { nodes, textures: this.textures }; - - for (const nodeJSON of json) { - nodeJSON.meta = meta; - - const node = nodes[nodeJSON.uuid]; - node.deserialize(nodeJSON); - - delete nodeJSON.meta; - } - } - - return nodes; - } - - parse(json) { - const node = nodeObject(createNodeFromType(json.type)); - node.uuid = json.uuid; - - const nodes = this.parseNodes(json.nodes); - const meta = { nodes, textures: this.textures }; - - json.meta = meta; - - node.deserialize(json); - - delete json.meta; - - return node; - } - - setTextures(value) { - this.textures = value; - return this; - } -} - -const _defaultValues$e = /*@__PURE__*/ new PointsMaterial(); - -class InstancedPointsNodeMaterial extends NodeMaterial { - constructor(params = {}) { - super(); - - this.lights = false; - - this.useAlphaToCoverage = true; - - this.useColor = params.vertexColors; - - this.pointWidth = 1; - - this.pointColorNode = null; - - this.setDefaultValues(_defaultValues$e); - - this.setupShaders(); - - this.setValues(params); - } - - setup(builder) { - this.setupShaders(); - - super.setup(builder); - } - - setupShaders() { - const useAlphaToCoverage = this.alphaToCoverage; - const useColor = this.useColor; - - this.vertexNode = Fn(() => { - //vUv = uv; - varying(vec2(), 'vUv').assign(uv()); // @TODO: Analyze other way to do this - - const instancePosition = attribute('instancePosition'); - - // camera space - const mvPos = property('vec4', 'mvPos'); - mvPos.assign(modelViewMatrix.mul(vec4(instancePosition, 1.0))); - - const aspect = viewport.z.div(viewport.w); - - // clip space - const clipPos = cameraProjectionMatrix.mul(mvPos); - - // offset in ndc space - const offset = property('vec2', 'offset'); - offset.assign(positionGeometry.xy); - offset.assign(offset.mul(materialPointWidth)); - offset.assign(offset.div(viewport.z)); - offset.y.assign(offset.y.mul(aspect)); - - // back to clip space - offset.assign(offset.mul(clipPos.w)); - - //clipPos.xy += offset; - clipPos.assign(clipPos.add(vec4(offset, 0, 0))); - - return clipPos; - - //vec4 mvPosition = mvPos; // this was used for somethihng... - })(); - - this.fragmentNode = Fn(() => { - const vUv = varying(vec2(), 'vUv'); - - // force assignment into correct place in flow - const alpha = property('float', 'alpha'); - alpha.assign(1); - - const a = vUv.x; - const b = vUv.y; - - const len2 = a.mul(a).add(b.mul(b)); - - if (useAlphaToCoverage) { - // force assignment out of following 'if' statement - to avoid uniform control flow errors - const dlen = property('float', 'dlen'); - dlen.assign(len2.fwidth()); - - alpha.assign(smoothstep(dlen.oneMinus(), dlen.add(1), len2).oneMinus()); - } else { - len2.greaterThan(1.0).discard(); - } - - let pointColorNode; - - if (this.pointColorNode) { - pointColorNode = this.pointColorNode; - } else { - if (useColor) { - const instanceColor = attribute('instanceColor'); - - pointColorNode = instanceColor.mul(materialColor); - } else { - pointColorNode = materialColor; - } - } - - return vec4(pointColorNode, alpha); - })(); - - this.needsUpdate = true; - } - - get alphaToCoverage() { - return this.useAlphaToCoverage; - } - - set alphaToCoverage(value) { - if (this.useAlphaToCoverage !== value) { - this.useAlphaToCoverage = value; - this.needsUpdate = true; - } - } -} - -addNodeMaterial('InstancedPointsNodeMaterial', InstancedPointsNodeMaterial); - -const _defaultValues$d = /*@__PURE__*/ new LineBasicMaterial(); - -class LineBasicNodeMaterial extends NodeMaterial { - constructor(parameters) { - super(); - - this.isLineBasicNodeMaterial = true; - - this.lights = false; - - this.setDefaultValues(_defaultValues$d); - - this.setValues(parameters); - } -} - -addNodeMaterial('LineBasicNodeMaterial', LineBasicNodeMaterial); - -const _defaultValues$c = /*@__PURE__*/ new LineDashedMaterial(); - -class LineDashedNodeMaterial extends NodeMaterial { - constructor(parameters) { - super(); - - this.isLineDashedNodeMaterial = true; - - this.lights = false; - - this.setDefaultValues(_defaultValues$c); - - this.offsetNode = null; - this.dashScaleNode = null; - this.dashSizeNode = null; - this.gapSizeNode = null; - - this.setValues(parameters); - } - - setupVariants() { - const offsetNode = this.offsetNode; - const dashScaleNode = this.dashScaleNode ? float(this.dashScaleNode) : materialLineScale; - const dashSizeNode = this.dashSizeNode ? float(this.dashSizeNode) : materialLineDashSize; - const gapSizeNode = this.dashSizeNode ? float(this.dashGapNode) : materialLineGapSize; - - dashSize.assign(dashSizeNode); - gapSize.assign(gapSizeNode); - - const vLineDistance = varying(attribute('lineDistance').mul(dashScaleNode)); - const vLineDistanceOffset = offsetNode ? vLineDistance.add(offsetNode) : vLineDistance; - - vLineDistanceOffset.mod(dashSize.add(gapSize)).greaterThan(dashSize).discard(); - } -} - -addNodeMaterial('LineDashedNodeMaterial', LineDashedNodeMaterial); - -const _defaultValues$b = /*@__PURE__*/ new LineDashedMaterial(); - -class Line2NodeMaterial extends NodeMaterial { - constructor(params = {}) { - super(); - - this.lights = false; - - this.setDefaultValues(_defaultValues$b); - - this.useAlphaToCoverage = true; - this.useColor = params.vertexColors; - this.useDash = params.dashed; - this.useWorldUnits = false; - - this.dashOffset = 0; - this.lineWidth = 1; - - this.lineColorNode = null; - - this.offsetNode = null; - this.dashScaleNode = null; - this.dashSizeNode = null; - this.gapSizeNode = null; - - this.setValues(params); - } - - setup(builder) { - this.setupShaders(); - - super.setup(builder); - } - - setupShaders() { - const useAlphaToCoverage = this.alphaToCoverage; - const useColor = this.useColor; - const useDash = this.dashed; - const useWorldUnits = this.worldUnits; - - const trimSegment = Fn(({ start, end }) => { - const a = cameraProjectionMatrix.element(2).element(2); // 3nd entry in 3th column - const b = cameraProjectionMatrix.element(3).element(2); // 3nd entry in 4th column - const nearEstimate = b.mul(-0.5).div(a); - - const alpha = nearEstimate.sub(start.z).div(end.z.sub(start.z)); - - return vec4(mix(start.xyz, end.xyz, alpha), end.w); - }); - - this.vertexNode = Fn(() => { - varyingProperty('vec2', 'vUv').assign(uv()); - - const instanceStart = attribute('instanceStart'); - const instanceEnd = attribute('instanceEnd'); - - // camera space - - const start = property('vec4', 'start'); - const end = property('vec4', 'end'); - - start.assign(modelViewMatrix.mul(vec4(instanceStart, 1.0))); // force assignment into correct place in flow - end.assign(modelViewMatrix.mul(vec4(instanceEnd, 1.0))); - - if (useWorldUnits) { - varyingProperty('vec3', 'worldStart').assign(start.xyz); - varyingProperty('vec3', 'worldEnd').assign(end.xyz); - } - - const aspect = viewport.z.div(viewport.w); - - // special case for perspective projection, and segments that terminate either in, or behind, the camera plane - // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space - // but we need to perform ndc-space calculations in the shader, so we must address this issue directly - // perhaps there is a more elegant solution -- WestLangley - - const perspective = cameraProjectionMatrix.element(2).element(3).equal(-1.0); // 4th entry in the 3rd column - - If(perspective, () => { - If(start.z.lessThan(0.0).and(end.z.greaterThan(0.0)), () => { - end.assign(trimSegment({ start: start, end: end })); - }).ElseIf(end.z.lessThan(0.0).and(start.z.greaterThanEqual(0.0)), () => { - start.assign(trimSegment({ start: end, end: start })); - }); - }); - - // clip space - const clipStart = cameraProjectionMatrix.mul(start); - const clipEnd = cameraProjectionMatrix.mul(end); - - // ndc space - const ndcStart = clipStart.xyz.div(clipStart.w); - const ndcEnd = clipEnd.xyz.div(clipEnd.w); - - // direction - const dir = ndcEnd.xy.sub(ndcStart.xy).temp(); - - // account for clip-space aspect ratio - dir.x.assign(dir.x.mul(aspect)); - dir.assign(dir.normalize()); - - const clip = temp(vec4()); - - if (useWorldUnits) { - // get the offset direction as perpendicular to the view vector - - const worldDir = end.xyz.sub(start.xyz).normalize(); - const tmpFwd = mix(start.xyz, end.xyz, 0.5).normalize(); - const worldUp = worldDir.cross(tmpFwd).normalize(); - const worldFwd = worldDir.cross(worldUp); - - const worldPos = varyingProperty('vec4', 'worldPos'); - - worldPos.assign(positionGeometry.y.lessThan(0.5).select(start, end)); - - // height offset - const hw = materialLineWidth.mul(0.5); - worldPos.addAssign(vec4(positionGeometry.x.lessThan(0.0).select(worldUp.mul(hw), worldUp.mul(hw).negate()), 0)); - - // don't extend the line if we're rendering dashes because we - // won't be rendering the endcaps - if (!useDash) { - // cap extension - worldPos.addAssign(vec4(positionGeometry.y.lessThan(0.5).select(worldDir.mul(hw).negate(), worldDir.mul(hw)), 0)); - - // add width to the box - worldPos.addAssign(vec4(worldFwd.mul(hw), 0)); - - // endcaps - If(positionGeometry.y.greaterThan(1.0).or(positionGeometry.y.lessThan(0.0)), () => { - worldPos.subAssign(vec4(worldFwd.mul(2.0).mul(hw), 0)); - }); - } - - // project the worldpos - clip.assign(cameraProjectionMatrix.mul(worldPos)); - - // shift the depth of the projected points so the line - // segments overlap neatly - const clipPose = temp(vec3()); - - clipPose.assign(positionGeometry.y.lessThan(0.5).select(ndcStart, ndcEnd)); - clip.z.assign(clipPose.z.mul(clip.w)); - } else { - const offset = property('vec2', 'offset'); - - offset.assign(vec2(dir.y, dir.x.negate())); - - // undo aspect ratio adjustment - dir.x.assign(dir.x.div(aspect)); - offset.x.assign(offset.x.div(aspect)); - - // sign flip - offset.assign(positionGeometry.x.lessThan(0.0).select(offset.negate(), offset)); - - // endcaps - If(positionGeometry.y.lessThan(0.0), () => { - offset.assign(offset.sub(dir)); - }).ElseIf(positionGeometry.y.greaterThan(1.0), () => { - offset.assign(offset.add(dir)); - }); - - // adjust for linewidth - offset.assign(offset.mul(materialLineWidth)); - - // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ... - offset.assign(offset.div(viewport.w)); - - // select end - clip.assign(positionGeometry.y.lessThan(0.5).select(clipStart, clipEnd)); - - // back to clip space - offset.assign(offset.mul(clip.w)); - - clip.assign(clip.add(vec4(offset, 0, 0))); - } - - return clip; - })(); - - const closestLineToLine = Fn(({ p1, p2, p3, p4 }) => { - const p13 = p1.sub(p3); - const p43 = p4.sub(p3); - - const p21 = p2.sub(p1); - - const d1343 = p13.dot(p43); - const d4321 = p43.dot(p21); - const d1321 = p13.dot(p21); - const d4343 = p43.dot(p43); - const d2121 = p21.dot(p21); - - const denom = d2121.mul(d4343).sub(d4321.mul(d4321)); - const numer = d1343.mul(d4321).sub(d1321.mul(d4343)); - - const mua = numer.div(denom).clamp(); - const mub = d1343.add(d4321.mul(mua)).div(d4343).clamp(); - - return vec2(mua, mub); - }); - - this.fragmentNode = Fn(() => { - const vUv = varyingProperty('vec2', 'vUv'); - - if (useDash) { - const offsetNode = this.offsetNode ? float(this.offsetNodeNode) : materialLineDashOffset; - const dashScaleNode = this.dashScaleNode ? float(this.dashScaleNode) : materialLineScale; - const dashSizeNode = this.dashSizeNode ? float(this.dashSizeNode) : materialLineDashSize; - const gapSizeNode = this.dashSizeNode ? float(this.dashGapNode) : materialLineGapSize; - - dashSize.assign(dashSizeNode); - gapSize.assign(gapSizeNode); - - const instanceDistanceStart = attribute('instanceDistanceStart'); - const instanceDistanceEnd = attribute('instanceDistanceEnd'); - - const lineDistance = positionGeometry.y.lessThan(0.5).select(dashScaleNode.mul(instanceDistanceStart), materialLineScale.mul(instanceDistanceEnd)); - - const vLineDistance = varying(lineDistance.add(materialLineDashOffset)); - const vLineDistanceOffset = offsetNode ? vLineDistance.add(offsetNode) : vLineDistance; - - vUv.y.lessThan(-1.0).or(vUv.y.greaterThan(1.0)).discard(); // discard endcaps - vLineDistanceOffset.mod(dashSize.add(gapSize)).greaterThan(dashSize).discard(); // todo - FIX - } - - // force assignment into correct place in flow - const alpha = property('float', 'alpha'); - alpha.assign(1); - - if (useWorldUnits) { - const worldStart = varyingProperty('vec3', 'worldStart'); - const worldEnd = varyingProperty('vec3', 'worldEnd'); - - // Find the closest points on the view ray and the line segment - const rayEnd = varyingProperty('vec4', 'worldPos').xyz.normalize().mul(1e5); - const lineDir = worldEnd.sub(worldStart); - const params = closestLineToLine({ p1: worldStart, p2: worldEnd, p3: vec3(0.0, 0.0, 0.0), p4: rayEnd }); - - const p1 = worldStart.add(lineDir.mul(params.x)); - const p2 = rayEnd.mul(params.y); - const delta = p1.sub(p2); - const len = delta.length(); - const norm = len.div(materialLineWidth); - - if (!useDash) { - if (useAlphaToCoverage) { - const dnorm = norm.fwidth(); - alpha.assign(smoothstep(dnorm.negate().add(0.5), dnorm.add(0.5), norm).oneMinus()); - } else { - norm.greaterThan(0.5).discard(); - } - } - } else { - // round endcaps - - if (useAlphaToCoverage) { - const a = vUv.x; - const b = vUv.y.greaterThan(0.0).select(vUv.y.sub(1.0), vUv.y.add(1.0)); - - const len2 = a.mul(a).add(b.mul(b)); - - // force assignment out of following 'if' statement - to avoid uniform control flow errors - const dlen = property('float', 'dlen'); - dlen.assign(len2.fwidth()); - - If(vUv.y.abs().greaterThan(1.0), () => { - alpha.assign(smoothstep(dlen.oneMinus(), dlen.add(1), len2).oneMinus()); - }); - } else { - If(vUv.y.abs().greaterThan(1.0), () => { - const a = vUv.x; - const b = vUv.y.greaterThan(0.0).select(vUv.y.sub(1.0), vUv.y.add(1.0)); - const len2 = a.mul(a).add(b.mul(b)); - - len2.greaterThan(1.0).discard(); - }); - } - } - - let lineColorNode; - - if (this.lineColorNode) { - lineColorNode = this.lineColorNode; - } else { - if (useColor) { - const instanceColorStart = attribute('instanceColorStart'); - const instanceColorEnd = attribute('instanceColorEnd'); - - const instanceColor = positionGeometry.y.lessThan(0.5).select(instanceColorStart, instanceColorEnd); - - lineColorNode = instanceColor.mul(materialColor); - } else { - lineColorNode = materialColor; - } - } - - return vec4(lineColorNode, alpha); - })(); - } - - get worldUnits() { - return this.useWorldUnits; - } - - set worldUnits(value) { - if (this.useWorldUnits !== value) { - this.useWorldUnits = value; - this.needsUpdate = true; - } - } - - get dashed() { - return this.useDash; - } - - set dashed(value) { - if (this.useDash !== value) { - this.useDash = value; - this.needsUpdate = true; - } - } - - get alphaToCoverage() { - return this.useAlphaToCoverage; - } - - set alphaToCoverage(value) { - if (this.useAlphaToCoverage !== value) { - this.useAlphaToCoverage = value; - this.needsUpdate = true; - } - } -} - -addNodeMaterial('Line2NodeMaterial', Line2NodeMaterial); - -const _defaultValues$a = /*@__PURE__*/ new MeshNormalMaterial(); - -class MeshNormalNodeMaterial extends NodeMaterial { - constructor(parameters) { - super(); - - this.lights = false; - - this.isMeshNormalNodeMaterial = true; - - this.setDefaultValues(_defaultValues$a); - - this.setValues(parameters); - } - - setupDiffuseColor() { - const opacityNode = this.opacityNode ? float(this.opacityNode) : materialOpacity; - - diffuseColor.assign(vec4(directionToColor(transformedNormalView), opacityNode)); - } -} - -addNodeMaterial('MeshNormalNodeMaterial', MeshNormalNodeMaterial); - -class BasicLightMapNode extends LightingNode { - constructor(lightMapNode = null) { - super(); - - this.lightMapNode = lightMapNode; - } - - setup(builder) { - // irradianceLightMap property is used in the indirectDiffuse() method of BasicLightingModel - - const RECIPROCAL_PI = float(1 / Math.PI); - - builder.context.irradianceLightMap = this.lightMapNode.mul(RECIPROCAL_PI); - } -} - -addNodeClass('BasicLightMapNode', BasicLightMapNode); - -class BasicLightingModel extends LightingModel { - constructor() { - super(); - } - - indirect(context, stack, builder) { - const ambientOcclusion = context.ambientOcclusion; - const reflectedLight = context.reflectedLight; - const irradianceLightMap = builder.context.irradianceLightMap; - - reflectedLight.indirectDiffuse.assign(vec4(0.0)); - - // accumulation (baked indirect lighting only) - - if (irradianceLightMap) { - reflectedLight.indirectDiffuse.addAssign(irradianceLightMap); - } else { - reflectedLight.indirectDiffuse.addAssign(vec4(1.0, 1.0, 1.0, 0.0)); - } - - // modulation - - reflectedLight.indirectDiffuse.mulAssign(ambientOcclusion); - - reflectedLight.indirectDiffuse.mulAssign(diffuseColor.rgb); - } - - finish(context, stack, builder) { - const material = builder.material; - const outgoingLight = context.outgoingLight; - const envNode = builder.context.environment; - - if (envNode) { - switch (material.combine) { - case MultiplyOperation: - outgoingLight.rgb.assign(mix(outgoingLight.rgb, outgoingLight.rgb.mul(envNode.rgb), materialSpecularStrength.mul(materialReflectivity))); - break; - - case MixOperation: - outgoingLight.rgb.assign(mix(outgoingLight.rgb, envNode.rgb, materialSpecularStrength.mul(materialReflectivity))); - break; - - case AddOperation: - outgoingLight.rgb.addAssign(envNode.rgb.mul(materialSpecularStrength.mul(materialReflectivity))); - break; - - default: - console.warn('THREE.BasicLightingModel: Unsupported .combine value:', material.combine); - break; - } - } - } -} - -const _defaultValues$9 = /*@__PURE__*/ new MeshBasicMaterial(); - -class MeshBasicNodeMaterial extends NodeMaterial { - constructor(parameters) { - super(); - - this.isMeshBasicNodeMaterial = true; - - this.lights = true; - - this.setDefaultValues(_defaultValues$9); - - this.setValues(parameters); - } - - setupNormal() { - return normalView; // see #28839 - } - - setupEnvironment(builder) { - const envNode = super.setupEnvironment(builder); - - return envNode ? new BasicEnvironmentNode(envNode) : null; - } - - setupLightMap(builder) { - let node = null; - - if (builder.material.lightMap) { - node = new BasicLightMapNode(materialLightMap); - } - - return node; - } - - setupOutgoingLight() { - return diffuseColor.rgb; - } - - setupLightingModel() { - return new BasicLightingModel(); - } -} - -addNodeMaterial('MeshBasicNodeMaterial', MeshBasicNodeMaterial); - -const F_Schlick = Fn(({ f0, f90, dotVH }) => { - // Original approximation by Christophe Schlick '94 - // float fresnel = pow( 1.0 - dotVH, 5.0 ); - - // Optimized variant (presented by Epic at SIGGRAPH '13) - // https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf - const fresnel = dotVH.mul(-5.55473).sub(6.98316).mul(dotVH).exp2(); - - return f0.mul(fresnel.oneMinus()).add(f90.mul(fresnel)); -}); // validated - -const BRDF_Lambert = Fn((inputs) => { - return inputs.diffuseColor.mul(1 / Math.PI); // punctual light -}); // validated - -const G_BlinnPhong_Implicit = () => float(0.25); - -const D_BlinnPhong = Fn(({ dotNH }) => { - return shininess - .mul(float(0.5)) - .add(1.0) - .mul(float(1 / Math.PI)) - .mul(dotNH.pow(shininess)); -}); - -const BRDF_BlinnPhong = Fn(({ lightDirection }) => { - const halfDir = lightDirection.add(positionViewDirection).normalize(); - - const dotNH = transformedNormalView.dot(halfDir).clamp(); - const dotVH = positionViewDirection.dot(halfDir).clamp(); - - const F = F_Schlick({ f0: specularColor, f90: 1.0, dotVH }); - const G = G_BlinnPhong_Implicit(); - const D = D_BlinnPhong({ dotNH }); - - return F.mul(G).mul(D); -}); - -class PhongLightingModel extends BasicLightingModel { - constructor(specular = true) { - super(); - - this.specular = specular; - } - - direct({ lightDirection, lightColor, reflectedLight }) { - const dotNL = transformedNormalView.dot(lightDirection).clamp(); - const irradiance = dotNL.mul(lightColor); - - reflectedLight.directDiffuse.addAssign(irradiance.mul(BRDF_Lambert({ diffuseColor: diffuseColor.rgb }))); - - if (this.specular === true) { - reflectedLight.directSpecular.addAssign(irradiance.mul(BRDF_BlinnPhong({ lightDirection })).mul(materialSpecularStrength)); - } - } - - indirect({ ambientOcclusion, irradiance, reflectedLight }) { - reflectedLight.indirectDiffuse.addAssign(irradiance.mul(BRDF_Lambert({ diffuseColor }))); - - reflectedLight.indirectDiffuse.mulAssign(ambientOcclusion); - } -} - -const _defaultValues$8 = /*@__PURE__*/ new MeshLambertMaterial(); - -class MeshLambertNodeMaterial extends NodeMaterial { - constructor(parameters) { - super(); - - this.isMeshLambertNodeMaterial = true; - - this.lights = true; - - this.setDefaultValues(_defaultValues$8); - - this.setValues(parameters); - } - - setupEnvironment(builder) { - const envNode = super.setupEnvironment(builder); - - return envNode ? new BasicEnvironmentNode(envNode) : null; - } - - setupLightingModel(/*builder*/) { - return new PhongLightingModel(false); // ( specular ) -> force lambert - } -} - -addNodeMaterial('MeshLambertNodeMaterial', MeshLambertNodeMaterial); - -const _defaultValues$7 = /*@__PURE__*/ new MeshPhongMaterial(); - -class MeshPhongNodeMaterial extends NodeMaterial { - constructor(parameters) { - super(); - - this.isMeshPhongNodeMaterial = true; - - this.lights = true; - - this.shininessNode = null; - this.specularNode = null; - - this.setDefaultValues(_defaultValues$7); - - this.setValues(parameters); - } - - setupEnvironment(builder) { - const envNode = super.setupEnvironment(builder); - - return envNode ? new BasicEnvironmentNode(envNode) : null; - } - - setupLightingModel(/*builder*/) { - return new PhongLightingModel(); - } - - setupVariants() { - // SHININESS - - const shininessNode = (this.shininessNode ? float(this.shininessNode) : materialShininess).max(1e-4); // to prevent pow( 0.0, 0.0 ) - - shininess.assign(shininessNode); - - // SPECULAR COLOR - - const specularNode = this.specularNode || materialSpecular; - - specularColor.assign(specularNode); - } - - copy(source) { - this.shininessNode = source.shininessNode; - this.specularNode = source.specularNode; - - return super.copy(source); - } -} - -addNodeMaterial('MeshPhongNodeMaterial', MeshPhongNodeMaterial); - -const getGeometryRoughness = Fn(() => { - const dxy = normalView.dFdx().abs().max(normalView.dFdy().abs()); - const geometryRoughness = dxy.x.max(dxy.y).max(dxy.z); - - return geometryRoughness; -}); - -const getRoughness = Fn((inputs) => { - const { roughness } = inputs; - - const geometryRoughness = getGeometryRoughness(); - - let roughnessFactor = roughness.max(0.0525); // 0.0525 corresponds to the base mip of a 256 cubemap. - roughnessFactor = roughnessFactor.add(geometryRoughness); - roughnessFactor = roughnessFactor.min(1.0); - - return roughnessFactor; -}); - -// Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2 -// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf -const V_GGX_SmithCorrelated = Fn(({ alpha, dotNL, dotNV }) => { - const a2 = alpha.pow2(); - - const gv = dotNL.mul(a2.add(a2.oneMinus().mul(dotNV.pow2())).sqrt()); - const gl = dotNV.mul(a2.add(a2.oneMinus().mul(dotNL.pow2())).sqrt()); - - return div(0.5, gv.add(gl).max(EPSILON)); -}).setLayout({ - name: 'V_GGX_SmithCorrelated', - type: 'float', - inputs: [ - { name: 'alpha', type: 'float' }, - { name: 'dotNL', type: 'float' }, - { name: 'dotNV', type: 'float' }, - ], -}); // validated - -// https://google.github.io/filament/Filament.md.html#materialsystem/anisotropicmodel/anisotropicspecularbrdf - -const V_GGX_SmithCorrelated_Anisotropic = Fn(({ alphaT, alphaB, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL }) => { - const gv = dotNL.mul(vec3(alphaT.mul(dotTV), alphaB.mul(dotBV), dotNV).length()); - const gl = dotNV.mul(vec3(alphaT.mul(dotTL), alphaB.mul(dotBL), dotNL).length()); - const v = div(0.5, gv.add(gl)); - - return v.saturate(); -}).setLayout({ - name: 'V_GGX_SmithCorrelated_Anisotropic', - type: 'float', - inputs: [ - { name: 'alphaT', type: 'float', qualifier: 'in' }, - { name: 'alphaB', type: 'float', qualifier: 'in' }, - { name: 'dotTV', type: 'float', qualifier: 'in' }, - { name: 'dotBV', type: 'float', qualifier: 'in' }, - { name: 'dotTL', type: 'float', qualifier: 'in' }, - { name: 'dotBL', type: 'float', qualifier: 'in' }, - { name: 'dotNV', type: 'float', qualifier: 'in' }, - { name: 'dotNL', type: 'float', qualifier: 'in' }, - ], -}); - -// Microfacet Models for Refraction through Rough Surfaces - equation (33) -// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html -// alpha is "roughness squared" in Disney’s reparameterization -const D_GGX = Fn(({ alpha, dotNH }) => { - const a2 = alpha.pow2(); - - const denom = dotNH.pow2().mul(a2.oneMinus()).oneMinus(); // avoid alpha = 0 with dotNH = 1 - - return a2.div(denom.pow2()).mul(1 / Math.PI); -}).setLayout({ - name: 'D_GGX', - type: 'float', - inputs: [ - { name: 'alpha', type: 'float' }, - { name: 'dotNH', type: 'float' }, - ], -}); // validated - -const RECIPROCAL_PI = float(1 / Math.PI); - -// https://google.github.io/filament/Filament.md.html#materialsystem/anisotropicmodel/anisotropicspecularbrdf - -const D_GGX_Anisotropic = Fn(({ alphaT, alphaB, dotNH, dotTH, dotBH }) => { - const a2 = alphaT.mul(alphaB); - const v = vec3(alphaB.mul(dotTH), alphaT.mul(dotBH), a2.mul(dotNH)); - const v2 = v.dot(v); - const w2 = a2.div(v2); - - return RECIPROCAL_PI.mul(a2.mul(w2.pow2())); -}).setLayout({ - name: 'D_GGX_Anisotropic', - type: 'float', - inputs: [ - { name: 'alphaT', type: 'float', qualifier: 'in' }, - { name: 'alphaB', type: 'float', qualifier: 'in' }, - { name: 'dotNH', type: 'float', qualifier: 'in' }, - { name: 'dotTH', type: 'float', qualifier: 'in' }, - { name: 'dotBH', type: 'float', qualifier: 'in' }, - ], -}); - -// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility -const BRDF_GGX = Fn((inputs) => { - const { lightDirection, f0, f90, roughness, f, USE_IRIDESCENCE, USE_ANISOTROPY } = inputs; - - const normalView = inputs.normalView || transformedNormalView; - - const alpha = roughness.pow2(); // UE4's roughness - - const halfDir = lightDirection.add(positionViewDirection).normalize(); - - const dotNL = normalView.dot(lightDirection).clamp(); - const dotNV = normalView.dot(positionViewDirection).clamp(); // @ TODO: Move to core dotNV - const dotNH = normalView.dot(halfDir).clamp(); - const dotVH = positionViewDirection.dot(halfDir).clamp(); - - let F = F_Schlick({ f0, f90, dotVH }); - let V, D; - - if (defined(USE_IRIDESCENCE)) { - F = iridescence.mix(F, f); - } - - if (defined(USE_ANISOTROPY)) { - const dotTL = anisotropyT.dot(lightDirection); - const dotTV = anisotropyT.dot(positionViewDirection); - const dotTH = anisotropyT.dot(halfDir); - const dotBL = anisotropyB.dot(lightDirection); - const dotBV = anisotropyB.dot(positionViewDirection); - const dotBH = anisotropyB.dot(halfDir); - - V = V_GGX_SmithCorrelated_Anisotropic({ alphaT, alphaB: alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL }); - D = D_GGX_Anisotropic({ alphaT, alphaB: alpha, dotNH, dotTH, dotBH }); - } else { - V = V_GGX_SmithCorrelated({ alpha, dotNL, dotNV }); - D = D_GGX({ alpha, dotNH }); - } - - return F.mul(V).mul(D); -}); // validated - -// Analytical approximation of the DFG LUT, one half of the -// split-sum approximation used in indirect specular lighting. -// via 'environmentBRDF' from "Physically Based Shading on Mobile" -// https://www.unrealengine.com/blog/physically-based-shading-on-mobile -const DFGApprox = Fn(({ roughness, dotNV }) => { - const c0 = vec4(-1, -0.0275, -0.572, 0.022); - - const c1 = vec4(1, 0.0425, 1.04, -0.04); - - const r = roughness.mul(c0).add(c1); - - const a004 = r.x.mul(r.x).min(dotNV.mul(-9.28).exp2()).mul(r.x).add(r.y); - - const fab = vec2(-1.04, 1.04).mul(a004).add(r.zw); - - return fab; -}).setLayout({ - name: 'DFGApprox', - type: 'vec2', - inputs: [ - { name: 'roughness', type: 'float' }, - { name: 'dotNV', type: 'vec3' }, - ], -}); - -const EnvironmentBRDF = Fn((inputs) => { - const { dotNV, specularColor, specularF90, roughness } = inputs; - - const fab = DFGApprox({ dotNV, roughness }); - return specularColor.mul(fab.x).add(specularF90.mul(fab.y)); -}); - -const Schlick_to_F0 = Fn(({ f, f90, dotVH }) => { - const x = dotVH.oneMinus().saturate(); - const x2 = x.mul(x); - const x5 = x.mul(x2, x2).clamp(0, 0.9999); - - return f.sub(vec3(f90).mul(x5)).div(x5.oneMinus()); -}).setLayout({ - name: 'Schlick_to_F0', - type: 'vec3', - inputs: [ - { name: 'f', type: 'vec3' }, - { name: 'f90', type: 'float' }, - { name: 'dotVH', type: 'float' }, - ], -}); - -// https://github.com/google/filament/blob/master/shaders/src/brdf.fs -const D_Charlie = Fn(({ roughness, dotNH }) => { - const alpha = roughness.pow2(); - - // Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF" - const invAlpha = float(1.0).div(alpha); - const cos2h = dotNH.pow2(); - const sin2h = cos2h.oneMinus().max(0.0078125); // 2^(-14/2), so sin2h^2 > 0 in fp16 - - return float(2.0) - .add(invAlpha) - .mul(sin2h.pow(invAlpha.mul(0.5))) - .div(2.0 * Math.PI); -}).setLayout({ - name: 'D_Charlie', - type: 'float', - inputs: [ - { name: 'roughness', type: 'float' }, - { name: 'dotNH', type: 'float' }, - ], -}); - -// https://github.com/google/filament/blob/master/shaders/src/brdf.fs -const V_Neubelt = Fn(({ dotNV, dotNL }) => { - // Neubelt and Pettineo 2013, "Crafting a Next-gen Material Pipeline for The Order: 1886" - return float(1.0).div(float(4.0).mul(dotNL.add(dotNV).sub(dotNL.mul(dotNV)))); -}).setLayout({ - name: 'V_Neubelt', - type: 'float', - inputs: [ - { name: 'dotNV', type: 'float' }, - { name: 'dotNL', type: 'float' }, - ], -}); - -const BRDF_Sheen = Fn(({ lightDirection }) => { - const halfDir = lightDirection.add(positionViewDirection).normalize(); - - const dotNL = transformedNormalView.dot(lightDirection).clamp(); - const dotNV = transformedNormalView.dot(positionViewDirection).clamp(); - const dotNH = transformedNormalView.dot(halfDir).clamp(); - - const D = D_Charlie({ roughness: sheenRoughness, dotNH }); - const V = V_Neubelt({ dotNV, dotNL }); - - return sheen.mul(D).mul(V); -}); - -// Rect Area Light - -// Real-Time Polygonal-Light Shading with Linearly Transformed Cosines -// by Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt -// code: https://github.com/selfshadow/ltc_code/ - -const LTC_Uv = Fn(({ N, V, roughness }) => { - const LUT_SIZE = 64.0; - const LUT_SCALE = (LUT_SIZE - 1.0) / LUT_SIZE; - const LUT_BIAS = 0.5 / LUT_SIZE; - - const dotNV = N.dot(V).saturate(); - - // texture parameterized by sqrt( GGX alpha ) and sqrt( 1 - cos( theta ) ) - const uv = vec2(roughness, dotNV.oneMinus().sqrt()); - - uv.assign(uv.mul(LUT_SCALE).add(LUT_BIAS)); - - return uv; -}).setLayout({ - name: 'LTC_Uv', - type: 'vec2', - inputs: [ - { name: 'N', type: 'vec3' }, - { name: 'V', type: 'vec3' }, - { name: 'roughness', type: 'float' }, - ], -}); - -const LTC_ClippedSphereFormFactor = Fn(({ f }) => { - // Real-Time Area Lighting: a Journey from Research to Production (p.102) - // An approximation of the form factor of a horizon-clipped rectangle. - - const l = f.length(); - - return max$1(l.mul(l).add(f.z).div(l.add(1.0)), 0); -}).setLayout({ - name: 'LTC_ClippedSphereFormFactor', - type: 'float', - inputs: [{ name: 'f', type: 'vec3' }], -}); - -const LTC_EdgeVectorFormFactor = Fn(({ v1, v2 }) => { - const x = v1.dot(v2); - const y = x.abs().toVar(); - - // rational polynomial approximation to theta / sin( theta ) / 2PI - const a = y.mul(0.0145206).add(0.4965155).mul(y).add(0.8543985).toVar(); - const b = y.add(4.1616724).mul(y).add(3.417594).toVar(); - const v = a.div(b); - - const theta_sintheta = x.greaterThan(0.0).select(v, max$1(x.mul(x).oneMinus(), 1e-7).inverseSqrt().mul(0.5).sub(v)); - - return v1.cross(v2).mul(theta_sintheta); -}).setLayout({ - name: 'LTC_EdgeVectorFormFactor', - type: 'vec3', - inputs: [ - { name: 'v1', type: 'vec3' }, - { name: 'v2', type: 'vec3' }, - ], -}); - -const LTC_Evaluate = Fn(({ N, V, P, mInv, p0, p1, p2, p3 }) => { - // bail if point is on back side of plane of light - // assumes ccw winding order of light vertices - const v1 = p1.sub(p0).toVar(); - const v2 = p3.sub(p0).toVar(); - - const lightNormal = v1.cross(v2); - const result = vec3().toVar(); - - If(lightNormal.dot(P.sub(p0)).greaterThanEqual(0.0), () => { - // construct orthonormal basis around N - const T1 = V.sub(N.mul(V.dot(N))).normalize(); - const T2 = N.cross(T1).negate(); // negated from paper; possibly due to a different handedness of world coordinate system - - // compute transform - const mat = mInv.mul(mat3(T1, T2, N).transpose()).toVar(); - - // transform rect - // & project rect onto sphere - const coords0 = mat.mul(p0.sub(P)).normalize().toVar(); - const coords1 = mat.mul(p1.sub(P)).normalize().toVar(); - const coords2 = mat.mul(p2.sub(P)).normalize().toVar(); - const coords3 = mat.mul(p3.sub(P)).normalize().toVar(); - - // calculate vector form factor - const vectorFormFactor = vec3(0).toVar(); - vectorFormFactor.addAssign(LTC_EdgeVectorFormFactor({ v1: coords0, v2: coords1 })); - vectorFormFactor.addAssign(LTC_EdgeVectorFormFactor({ v1: coords1, v2: coords2 })); - vectorFormFactor.addAssign(LTC_EdgeVectorFormFactor({ v1: coords2, v2: coords3 })); - vectorFormFactor.addAssign(LTC_EdgeVectorFormFactor({ v1: coords3, v2: coords0 })); - - // adjust for horizon clipping - result.assign(vec3(LTC_ClippedSphereFormFactor({ f: vectorFormFactor }))); - }); - - return result; -}).setLayout({ - name: 'LTC_Evaluate', - type: 'vec3', - inputs: [ - { name: 'N', type: 'vec3' }, - { name: 'V', type: 'vec3' }, - { name: 'P', type: 'vec3' }, - { name: 'mInv', type: 'mat3' }, - { name: 'p0', type: 'vec3' }, - { name: 'p1', type: 'vec3' }, - { name: 'p2', type: 'vec3' }, - { name: 'p3', type: 'vec3' }, - ], -}); - -// -// Transmission -// - -const getVolumeTransmissionRay = Fn(([n, v, thickness, ior, modelMatrix]) => { - // Direction of refracted light. - const refractionVector = vec3(refract(v.negate(), normalize(n), div(1.0, ior))); - - // Compute rotation-independant scaling of the model matrix. - const modelScale = vec3(length(modelMatrix[0].xyz), length(modelMatrix[1].xyz), length(modelMatrix[2].xyz)); - - // The thickness is specified in local space. - return normalize(refractionVector).mul(thickness.mul(modelScale)); -}).setLayout({ - name: 'getVolumeTransmissionRay', - type: 'vec3', - inputs: [ - { name: 'n', type: 'vec3' }, - { name: 'v', type: 'vec3' }, - { name: 'thickness', type: 'float' }, - { name: 'ior', type: 'float' }, - { name: 'modelMatrix', type: 'mat4' }, - ], -}); - -const applyIorToRoughness = Fn(([roughness, ior]) => { - // Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and - // an IOR of 1.5 results in the default amount of microfacet refraction. - return roughness.mul(clamp(ior.mul(2.0).sub(2.0), 0.0, 1.0)); -}).setLayout({ - name: 'applyIorToRoughness', - type: 'float', - inputs: [ - { name: 'roughness', type: 'float' }, - { name: 'ior', type: 'float' }, - ], -}); - -const singleViewportMipTexture = viewportMipTexture(); - -const getTransmissionSample = Fn(([fragCoord, roughness, ior]) => { - const transmissionSample = singleViewportMipTexture.uv(fragCoord); - //const transmissionSample = viewportMipTexture( fragCoord ); - - const lod = log2(float(viewportResolution.x)).mul(applyIorToRoughness(roughness, ior)); - - return transmissionSample.bicubic(lod); -}); - -const volumeAttenuation = Fn(([transmissionDistance, attenuationColor, attenuationDistance]) => { - If(attenuationDistance.notEqual(0), () => { - // Compute light attenuation using Beer's law. - const attenuationCoefficient = log(attenuationColor).negate().div(attenuationDistance); - const transmittance = exp(attenuationCoefficient.negate().mul(transmissionDistance)); - - return transmittance; - }); - - // Attenuation distance is +∞, i.e. the transmitted color is not attenuated at all. - return vec3(1.0); -}).setLayout({ - name: 'volumeAttenuation', - type: 'vec3', - inputs: [ - { name: 'transmissionDistance', type: 'float' }, - { name: 'attenuationColor', type: 'vec3' }, - { name: 'attenuationDistance', type: 'float' }, - ], -}); - -const getIBLVolumeRefraction = Fn(([n, v, roughness, diffuseColor, specularColor, specularF90, position, modelMatrix, viewMatrix, projMatrix, ior, thickness, attenuationColor, attenuationDistance, dispersion]) => { - let transmittedLight, transmittance; - - if (dispersion) { - transmittedLight = vec4().toVar(); - transmittance = vec3().toVar(); - - const halfSpread = ior.sub(1.0).mul(dispersion.mul(0.025)); - const iors = vec3(ior.sub(halfSpread), ior, ior.add(halfSpread)); - - Loop({ start: 0, end: 3 }, ({ i }) => { - const ior = iors.element(i); - - const transmissionRay = getVolumeTransmissionRay(n, v, thickness, ior, modelMatrix); - const refractedRayExit = position.add(transmissionRay); - - // Project refracted vector on the framebuffer, while mapping to normalized device coordinates. - const ndcPos = projMatrix.mul(viewMatrix.mul(vec4(refractedRayExit, 1.0))); - const refractionCoords = vec2(ndcPos.xy.div(ndcPos.w)).toVar(); - refractionCoords.addAssign(1.0); - refractionCoords.divAssign(2.0); - refractionCoords.assign(vec2(refractionCoords.x, refractionCoords.y.oneMinus())); // webgpu - - // Sample framebuffer to get pixel the refracted ray hits. - const transmissionSample = getTransmissionSample(refractionCoords, roughness, ior); - - transmittedLight.element(i).assign(transmissionSample.element(i)); - transmittedLight.a.addAssign(transmissionSample.a); - - transmittance.element(i).assign(diffuseColor.element(i).mul(volumeAttenuation(length(transmissionRay), attenuationColor, attenuationDistance).element(i))); - }); - - transmittedLight.a.divAssign(3.0); - } else { - const transmissionRay = getVolumeTransmissionRay(n, v, thickness, ior, modelMatrix); - const refractedRayExit = position.add(transmissionRay); - - // Project refracted vector on the framebuffer, while mapping to normalized device coordinates. - const ndcPos = projMatrix.mul(viewMatrix.mul(vec4(refractedRayExit, 1.0))); - const refractionCoords = vec2(ndcPos.xy.div(ndcPos.w)).toVar(); - refractionCoords.addAssign(1.0); - refractionCoords.divAssign(2.0); - refractionCoords.assign(vec2(refractionCoords.x, refractionCoords.y.oneMinus())); // webgpu - - // Sample framebuffer to get pixel the refracted ray hits. - transmittedLight = getTransmissionSample(refractionCoords, roughness, ior); - transmittance = diffuseColor.mul(volumeAttenuation(length(transmissionRay), attenuationColor, attenuationDistance)); - } - - const attenuatedColor = transmittance.rgb.mul(transmittedLight.rgb); - const dotNV = n.dot(v).clamp(); - - // Get the specular component. - const F = vec3( - EnvironmentBRDF({ - // n, v, specularColor, specularF90, roughness - dotNV, - specularColor, - specularF90, - roughness, - }) - ); - - // As less light is transmitted, the opacity should be increased. This simple approximation does a decent job - // of modulating a CSS background, and has no effect when the buffer is opaque, due to a solid object or clear color. - const transmittanceFactor = transmittance.r.add(transmittance.g, transmittance.b).div(3.0); - - return vec4(F.oneMinus().mul(attenuatedColor), transmittedLight.a.oneMinus().mul(transmittanceFactor).oneMinus()); -}); - -// -// Iridescence -// - -// XYZ to linear-sRGB color space -const XYZ_TO_REC709 = mat3(3.2404542, -0.969266, 0.0556434, -1.5371385, 1.8760108, -0.2040259, -0.4985314, 0.041556, 1.0572252); - -// Assume air interface for top -// Note: We don't handle the case fresnel0 == 1 -const Fresnel0ToIor = (fresnel0) => { - const sqrtF0 = fresnel0.sqrt(); - return vec3(1.0).add(sqrtF0).div(vec3(1.0).sub(sqrtF0)); -}; - -// ior is a value between 1.0 and 3.0. 1.0 is air interface -const IorToFresnel0 = (transmittedIor, incidentIor) => { - return transmittedIor.sub(incidentIor).div(transmittedIor.add(incidentIor)).pow2(); -}; - -// Fresnel equations for dielectric/dielectric interfaces. -// Ref: https://belcour.github.io/blog/research/2017/05/01/brdf-thin-film.html -// Evaluation XYZ sensitivity curves in Fourier space -const evalSensitivity = (OPD, shift) => { - const phase = OPD.mul(2.0 * Math.PI * 1.0e-9); - const val = vec3(5.4856e-13, 4.4201e-13, 5.2481e-13); - const pos = vec3(1.681e6, 1.7953e6, 2.2084e6); - const VAR = vec3(4.3278e9, 9.3046e9, 6.6121e9); - - const x = float(9.747e-14 * Math.sqrt(2.0 * Math.PI * 4.5282e9)) - .mul(phase.mul(2.2399e6).add(shift.x).cos()) - .mul(phase.pow2().mul(-4.5282e9).exp()); - - let xyz = val - .mul(VAR.mul(2.0 * Math.PI).sqrt()) - .mul(pos.mul(phase).add(shift).cos()) - .mul(phase.pow2().negate().mul(VAR).exp()); - xyz = vec3(xyz.x.add(x), xyz.y, xyz.z).div(1.0685e-7); - - const rgb = XYZ_TO_REC709.mul(xyz); - - return rgb; -}; - -const evalIridescence = Fn(({ outsideIOR, eta2, cosTheta1, thinFilmThickness, baseF0 }) => { - // Force iridescenceIOR -> outsideIOR when thinFilmThickness -> 0.0 - const iridescenceIOR = mix(outsideIOR, eta2, smoothstep(0.0, 0.03, thinFilmThickness)); - // Evaluate the cosTheta on the base layer (Snell law) - const sinTheta2Sq = outsideIOR.div(iridescenceIOR).pow2().mul(float(1).sub(cosTheta1.pow2())); - - // Handle TIR: - const cosTheta2Sq = float(1).sub(sinTheta2Sq); - /*if ( cosTheta2Sq < 0.0 ) { - - return vec3( 1.0 ); - - }*/ - - const cosTheta2 = cosTheta2Sq.sqrt(); - - // First interface - const R0 = IorToFresnel0(iridescenceIOR, outsideIOR); - const R12 = F_Schlick({ f0: R0, f90: 1.0, dotVH: cosTheta1 }); - //const R21 = R12; - const T121 = R12.oneMinus(); - const phi12 = iridescenceIOR.lessThan(outsideIOR).select(Math.PI, 0.0); - const phi21 = float(Math.PI).sub(phi12); - - // Second interface - const baseIOR = Fresnel0ToIor(baseF0.clamp(0.0, 0.9999)); // guard against 1.0 - const R1 = IorToFresnel0(baseIOR, iridescenceIOR.toVec3()); - const R23 = F_Schlick({ f0: R1, f90: 1.0, dotVH: cosTheta2 }); - const phi23 = vec3(baseIOR.x.lessThan(iridescenceIOR).select(Math.PI, 0.0), baseIOR.y.lessThan(iridescenceIOR).select(Math.PI, 0.0), baseIOR.z.lessThan(iridescenceIOR).select(Math.PI, 0.0)); - - // Phase shift - const OPD = iridescenceIOR.mul(thinFilmThickness, cosTheta2, 2.0); - const phi = vec3(phi21).add(phi23); - - // Compound terms - const R123 = R12.mul(R23).clamp(1e-5, 0.9999); - const r123 = R123.sqrt(); - const Rs = T121.pow2().mul(R23).div(vec3(1.0).sub(R123)); - - // Reflectance term for m = 0 (DC term amplitude) - const C0 = R12.add(Rs); - let I = C0; - - // Reflectance term for m > 0 (pairs of diracs) - let Cm = Rs.sub(T121); - for (let m = 1; m <= 2; ++m) { - Cm = Cm.mul(r123); - const Sm = evalSensitivity(float(m).mul(OPD), float(m).mul(phi)).mul(2.0); - I = I.add(Cm.mul(Sm)); - } - - // Since out of gamut colors might be produced, negative color values are clamped to 0. - return I.max(vec3(0.0)); -}).setLayout({ - name: 'evalIridescence', - type: 'vec3', - inputs: [ - { name: 'outsideIOR', type: 'float' }, - { name: 'eta2', type: 'float' }, - { name: 'cosTheta1', type: 'float' }, - { name: 'thinFilmThickness', type: 'float' }, - { name: 'baseF0', type: 'vec3' }, - ], -}); - -// -// Sheen -// - -// This is a curve-fit approxmation to the "Charlie sheen" BRDF integrated over the hemisphere from -// Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF". The analysis can be found -// in the Sheen section of https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing -const IBLSheenBRDF = Fn(({ normal, viewDir, roughness }) => { - const dotNV = normal.dot(viewDir).saturate(); - - const r2 = roughness.pow2(); - - const a = select(roughness.lessThan(0.25), float(-339.2).mul(r2).add(float(161.4).mul(roughness)).sub(25.9), float(-8.48).mul(r2).add(float(14.3).mul(roughness)).sub(9.95)); - - const b = select(roughness.lessThan(0.25), float(44.0).mul(r2).sub(float(23.7).mul(roughness)).add(3.26), float(1.97).mul(r2).sub(float(3.27).mul(roughness)).add(0.72)); - - const DG = select(roughness.lessThan(0.25), 0.0, float(0.1).mul(roughness).sub(0.025)).add(a.mul(dotNV).add(b).exp()); - - return DG.mul(1.0 / Math.PI).saturate(); -}); - -const clearcoatF0 = vec3(0.04); -const clearcoatF90 = float(1); - -// - -class PhysicalLightingModel extends LightingModel { - constructor(clearcoat = false, sheen = false, iridescence = false, anisotropy = false, transmission = false, dispersion = false) { - super(); - - this.clearcoat = clearcoat; - this.sheen = sheen; - this.iridescence = iridescence; - this.anisotropy = anisotropy; - this.transmission = transmission; - this.dispersion = dispersion; - - this.clearcoatRadiance = null; - this.clearcoatSpecularDirect = null; - this.clearcoatSpecularIndirect = null; - this.sheenSpecularDirect = null; - this.sheenSpecularIndirect = null; - this.iridescenceFresnel = null; - this.iridescenceF0 = null; - } - - start(context) { - if (this.clearcoat === true) { - this.clearcoatRadiance = vec3().temp('clearcoatRadiance'); - this.clearcoatSpecularDirect = vec3().temp('clearcoatSpecularDirect'); - this.clearcoatSpecularIndirect = vec3().temp('clearcoatSpecularIndirect'); - } - - if (this.sheen === true) { - this.sheenSpecularDirect = vec3().temp('sheenSpecularDirect'); - this.sheenSpecularIndirect = vec3().temp('sheenSpecularIndirect'); - } - - if (this.iridescence === true) { - const dotNVi = transformedNormalView.dot(positionViewDirection).clamp(); - - this.iridescenceFresnel = evalIridescence({ - outsideIOR: float(1.0), - eta2: iridescenceIOR, - cosTheta1: dotNVi, - thinFilmThickness: iridescenceThickness, - baseF0: specularColor, - }); - - this.iridescenceF0 = Schlick_to_F0({ f: this.iridescenceFresnel, f90: 1.0, dotVH: dotNVi }); - } - - if (this.transmission === true) { - const position = positionWorld; - const v = cameraPosition.sub(positionWorld).normalize(); // TODO: Create Node for this, same issue in MaterialX - const n = transformedNormalWorld; - - context.backdrop = getIBLVolumeRefraction( - n, - v, - roughness, - diffuseColor, - specularColor, - specularF90, // specularF90 - position, // positionWorld - modelWorldMatrix, // modelMatrix - cameraViewMatrix, // viewMatrix - cameraProjectionMatrix, // projMatrix - ior, - thickness, - attenuationColor, - attenuationDistance, - this.dispersion ? dispersion : null - ); - - context.backdropAlpha = transmission; - - diffuseColor.a.mulAssign(mix(1, context.backdrop.a, transmission)); - } - } - - // Fdez-Agüera's "Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting" - // Approximates multiscattering in order to preserve energy. - // http://www.jcgt.org/published/0008/01/03/ - - computeMultiscattering(singleScatter, multiScatter, specularF90) { - const dotNV = transformedNormalView.dot(positionViewDirection).clamp(); // @ TODO: Move to core dotNV - - const fab = DFGApprox({ roughness, dotNV }); - - const Fr = this.iridescenceF0 ? iridescence.mix(specularColor, this.iridescenceF0) : specularColor; - - const FssEss = Fr.mul(fab.x).add(specularF90.mul(fab.y)); - - const Ess = fab.x.add(fab.y); - const Ems = Ess.oneMinus(); - - const Favg = specularColor.add(specularColor.oneMinus().mul(0.047619)); // 1/21 - const Fms = FssEss.mul(Favg).div(Ems.mul(Favg).oneMinus()); - - singleScatter.addAssign(FssEss); - multiScatter.addAssign(Fms.mul(Ems)); - } - - direct({ lightDirection, lightColor, reflectedLight }) { - const dotNL = transformedNormalView.dot(lightDirection).clamp(); - const irradiance = dotNL.mul(lightColor); - - if (this.sheen === true) { - this.sheenSpecularDirect.addAssign(irradiance.mul(BRDF_Sheen({ lightDirection }))); - } - - if (this.clearcoat === true) { - const dotNLcc = transformedClearcoatNormalView.dot(lightDirection).clamp(); - const ccIrradiance = dotNLcc.mul(lightColor); - - this.clearcoatSpecularDirect.addAssign(ccIrradiance.mul(BRDF_GGX({ lightDirection, f0: clearcoatF0, f90: clearcoatF90, roughness: clearcoatRoughness, normalView: transformedClearcoatNormalView }))); - } - - reflectedLight.directDiffuse.addAssign(irradiance.mul(BRDF_Lambert({ diffuseColor: diffuseColor.rgb }))); - - reflectedLight.directSpecular.addAssign(irradiance.mul(BRDF_GGX({ lightDirection, f0: specularColor, f90: 1, roughness, iridescence: this.iridescence, f: this.iridescenceFresnel, USE_IRIDESCENCE: this.iridescence, USE_ANISOTROPY: this.anisotropy }))); - } - - directRectArea({ lightColor, lightPosition, halfWidth, halfHeight, reflectedLight, ltc_1, ltc_2 }) { - const p0 = lightPosition.add(halfWidth).sub(halfHeight); // counterclockwise; light shines in local neg z direction - const p1 = lightPosition.sub(halfWidth).sub(halfHeight); - const p2 = lightPosition.sub(halfWidth).add(halfHeight); - const p3 = lightPosition.add(halfWidth).add(halfHeight); - - const N = transformedNormalView; - const V = positionViewDirection; - const P = positionView.toVar(); - - const uv = LTC_Uv({ N, V, roughness }); - - const t1 = ltc_1.uv(uv).toVar(); - const t2 = ltc_2.uv(uv).toVar(); - - const mInv = mat3(vec3(t1.x, 0, t1.y), vec3(0, 1, 0), vec3(t1.z, 0, t1.w)).toVar(); - - // LTC Fresnel Approximation by Stephen Hill - // http://blog.selfshadow.com/publications/s2016-advances/s2016_ltc_fresnel.pdf - const fresnel = specularColor.mul(t2.x).add(specularColor.oneMinus().mul(t2.y)).toVar(); - - reflectedLight.directSpecular.addAssign(lightColor.mul(fresnel).mul(LTC_Evaluate({ N, V, P, mInv, p0, p1, p2, p3 }))); - - reflectedLight.directDiffuse.addAssign(lightColor.mul(diffuseColor).mul(LTC_Evaluate({ N, V, P, mInv: mat3(1, 0, 0, 0, 1, 0, 0, 0, 1), p0, p1, p2, p3 }))); - } - - indirect(context, stack, builder) { - this.indirectDiffuse(context, stack, builder); - this.indirectSpecular(context, stack, builder); - this.ambientOcclusion(context, stack, builder); - } - - indirectDiffuse({ irradiance, reflectedLight }) { - reflectedLight.indirectDiffuse.addAssign(irradiance.mul(BRDF_Lambert({ diffuseColor }))); - } - - indirectSpecular({ radiance, iblIrradiance, reflectedLight }) { - if (this.sheen === true) { - this.sheenSpecularIndirect.addAssign( - iblIrradiance.mul( - sheen, - IBLSheenBRDF({ - normal: transformedNormalView, - viewDir: positionViewDirection, - roughness: sheenRoughness, - }) - ) - ); - } - - if (this.clearcoat === true) { - const dotNVcc = transformedClearcoatNormalView.dot(positionViewDirection).clamp(); - - const clearcoatEnv = EnvironmentBRDF({ - dotNV: dotNVcc, - specularColor: clearcoatF0, - specularF90: clearcoatF90, - roughness: clearcoatRoughness, - }); - - this.clearcoatSpecularIndirect.addAssign(this.clearcoatRadiance.mul(clearcoatEnv)); - } - - // Both indirect specular and indirect diffuse light accumulate here - - const singleScattering = vec3().temp('singleScattering'); - const multiScattering = vec3().temp('multiScattering'); - const cosineWeightedIrradiance = iblIrradiance.mul(1 / Math.PI); - - this.computeMultiscattering(singleScattering, multiScattering, specularF90); - - const totalScattering = singleScattering.add(multiScattering); - - const diffuse = diffuseColor.mul(totalScattering.r.max(totalScattering.g).max(totalScattering.b).oneMinus()); - - reflectedLight.indirectSpecular.addAssign(radiance.mul(singleScattering)); - reflectedLight.indirectSpecular.addAssign(multiScattering.mul(cosineWeightedIrradiance)); - - reflectedLight.indirectDiffuse.addAssign(diffuse.mul(cosineWeightedIrradiance)); - } - - ambientOcclusion({ ambientOcclusion, reflectedLight }) { - const dotNV = transformedNormalView.dot(positionViewDirection).clamp(); // @ TODO: Move to core dotNV - - const aoNV = dotNV.add(ambientOcclusion); - const aoExp = roughness.mul(-16.0).oneMinus().negate().exp2(); - - const aoNode = ambientOcclusion.sub(aoNV.pow(aoExp).oneMinus()).clamp(); - - if (this.clearcoat === true) { - this.clearcoatSpecularIndirect.mulAssign(ambientOcclusion); - } - - if (this.sheen === true) { - this.sheenSpecularIndirect.mulAssign(ambientOcclusion); - } - - reflectedLight.indirectDiffuse.mulAssign(ambientOcclusion); - reflectedLight.indirectSpecular.mulAssign(aoNode); - } - - finish(context) { - const { outgoingLight } = context; - - if (this.clearcoat === true) { - const dotNVcc = transformedClearcoatNormalView.dot(positionViewDirection).clamp(); - - const Fcc = F_Schlick({ - dotVH: dotNVcc, - f0: clearcoatF0, - f90: clearcoatF90, - }); - - const clearcoatLight = outgoingLight.mul(clearcoat.mul(Fcc).oneMinus()).add(this.clearcoatSpecularDirect.add(this.clearcoatSpecularIndirect).mul(clearcoat)); - - outgoingLight.assign(clearcoatLight); - } - - if (this.sheen === true) { - const sheenEnergyComp = sheen.r.max(sheen.g).max(sheen.b).mul(0.157).oneMinus(); - const sheenLight = outgoingLight.mul(sheenEnergyComp).add(this.sheenSpecularDirect, this.sheenSpecularIndirect); - - outgoingLight.assign(sheenLight); - } - } -} - -const _defaultValues$6 = /*@__PURE__*/ new MeshStandardMaterial(); - -class MeshStandardNodeMaterial extends NodeMaterial { - constructor(parameters) { - super(); - - this.isMeshStandardNodeMaterial = true; - - this.lights = true; - - this.emissiveNode = null; - - this.metalnessNode = null; - this.roughnessNode = null; - - this.setDefaultValues(_defaultValues$6); - - this.setValues(parameters); - } - - setupEnvironment(builder) { - let envNode = super.setupEnvironment(builder); - - if (envNode === null && builder.environmentNode) { - envNode = builder.environmentNode; - } - - return envNode ? new EnvironmentNode(envNode) : null; - } - - setupLightingModel(/*builder*/) { - return new PhysicalLightingModel(); - } - - setupSpecular() { - const specularColorNode = mix(vec3(0.04), diffuseColor.rgb, metalness); - - specularColor.assign(specularColorNode); - specularF90.assign(1.0); - } - - setupVariants() { - // METALNESS - - const metalnessNode = this.metalnessNode ? float(this.metalnessNode) : materialMetalness; - - metalness.assign(metalnessNode); - - // ROUGHNESS - - let roughnessNode = this.roughnessNode ? float(this.roughnessNode) : materialRoughness; - roughnessNode = getRoughness({ roughness: roughnessNode }); - - roughness.assign(roughnessNode); - - // SPECULAR COLOR - - this.setupSpecular(); - - // DIFFUSE COLOR - - diffuseColor.assign(vec4(diffuseColor.rgb.mul(metalnessNode.oneMinus()), diffuseColor.a)); - } - - copy(source) { - this.emissiveNode = source.emissiveNode; - - this.metalnessNode = source.metalnessNode; - this.roughnessNode = source.roughnessNode; - - return super.copy(source); - } -} - -addNodeMaterial('MeshStandardNodeMaterial', MeshStandardNodeMaterial); - -const _defaultValues$5 = /*@__PURE__*/ new MeshPhysicalMaterial(); - -class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial { - constructor(parameters) { - super(); - - this.isMeshPhysicalNodeMaterial = true; - - this.clearcoatNode = null; - this.clearcoatRoughnessNode = null; - this.clearcoatNormalNode = null; - - this.sheenNode = null; - this.sheenRoughnessNode = null; - - this.iridescenceNode = null; - this.iridescenceIORNode = null; - this.iridescenceThicknessNode = null; - - this.specularIntensityNode = null; - this.specularColorNode = null; - - this.iorNode = null; - this.transmissionNode = null; - this.thicknessNode = null; - this.attenuationDistanceNode = null; - this.attenuationColorNode = null; - this.dispersionNode = null; - - this.anisotropyNode = null; - - this.setDefaultValues(_defaultValues$5); - - this.setValues(parameters); - } - - get useClearcoat() { - return this.clearcoat > 0 || this.clearcoatNode !== null; - } - - get useIridescence() { - return this.iridescence > 0 || this.iridescenceNode !== null; - } - - get useSheen() { - return this.sheen > 0 || this.sheenNode !== null; - } - - get useAnisotropy() { - return this.anisotropy > 0 || this.anisotropyNode !== null; - } - - get useTransmission() { - return this.transmission > 0 || this.transmissionNode !== null; - } - - get useDispersion() { - return this.dispersion > 0 || this.dispersionNode !== null; - } - - setupSpecular() { - const iorNode = this.iorNode ? float(this.iorNode) : materialIOR; - - ior.assign(iorNode); - specularColor.assign(mix(min$1(pow2(ior.sub(1.0).div(ior.add(1.0))).mul(materialSpecularColor), vec3(1.0)).mul(materialSpecularIntensity), diffuseColor.rgb, metalness)); - specularF90.assign(mix(materialSpecularIntensity, 1.0, metalness)); - } - - setupLightingModel(/*builder*/) { - return new PhysicalLightingModel(this.useClearcoat, this.useSheen, this.useIridescence, this.useAnisotropy, this.useTransmission, this.useDispersion); - } - - setupVariants(builder) { - super.setupVariants(builder); - - // CLEARCOAT - - if (this.useClearcoat) { - const clearcoatNode = this.clearcoatNode ? float(this.clearcoatNode) : materialClearcoat; - const clearcoatRoughnessNode = this.clearcoatRoughnessNode ? float(this.clearcoatRoughnessNode) : materialClearcoatRoughness; - - clearcoat.assign(clearcoatNode); - clearcoatRoughness.assign(getRoughness({ roughness: clearcoatRoughnessNode })); - } - - // SHEEN - - if (this.useSheen) { - const sheenNode = this.sheenNode ? vec3(this.sheenNode) : materialSheen; - const sheenRoughnessNode = this.sheenRoughnessNode ? float(this.sheenRoughnessNode) : materialSheenRoughness; - - sheen.assign(sheenNode); - sheenRoughness.assign(sheenRoughnessNode); - } - - // IRIDESCENCE - - if (this.useIridescence) { - const iridescenceNode = this.iridescenceNode ? float(this.iridescenceNode) : materialIridescence; - const iridescenceIORNode = this.iridescenceIORNode ? float(this.iridescenceIORNode) : materialIridescenceIOR; - const iridescenceThicknessNode = this.iridescenceThicknessNode ? float(this.iridescenceThicknessNode) : materialIridescenceThickness; - - iridescence.assign(iridescenceNode); - iridescenceIOR.assign(iridescenceIORNode); - iridescenceThickness.assign(iridescenceThicknessNode); - } - - // ANISOTROPY - - if (this.useAnisotropy) { - const anisotropyV = (this.anisotropyNode ? vec2(this.anisotropyNode) : materialAnisotropy).toVar(); - - anisotropy.assign(anisotropyV.length()); - - If(anisotropy.equal(0.0), () => { - anisotropyV.assign(vec2(1.0, 0.0)); - }).Else(() => { - anisotropyV.divAssign(vec2(anisotropy)); - anisotropy.assign(anisotropy.saturate()); - }); - - // Roughness along the anisotropy bitangent is the material roughness, while the tangent roughness increases with anisotropy. - alphaT.assign(anisotropy.pow2().mix(roughness.pow2(), 1.0)); - - anisotropyT.assign(TBNViewMatrix[0].mul(anisotropyV.x).add(TBNViewMatrix[1].mul(anisotropyV.y))); - anisotropyB.assign(TBNViewMatrix[1].mul(anisotropyV.x).sub(TBNViewMatrix[0].mul(anisotropyV.y))); - } - - // TRANSMISSION - - if (this.useTransmission) { - const transmissionNode = this.transmissionNode ? float(this.transmissionNode) : materialTransmission; - const thicknessNode = this.thicknessNode ? float(this.thicknessNode) : materialThickness; - const attenuationDistanceNode = this.attenuationDistanceNode ? float(this.attenuationDistanceNode) : materialAttenuationDistance; - const attenuationColorNode = this.attenuationColorNode ? vec3(this.attenuationColorNode) : materialAttenuationColor; - - transmission.assign(transmissionNode); - thickness.assign(thicknessNode); - attenuationDistance.assign(attenuationDistanceNode); - attenuationColor.assign(attenuationColorNode); - - if (this.useDispersion) { - const dispersionNode = this.dispersionNode ? float(this.dispersionNode) : materialDispersion; - - dispersion.assign(dispersionNode); - } - } - } - - setupClearcoatNormal() { - return this.clearcoatNormalNode ? vec3(this.clearcoatNormalNode) : materialClearcoatNormal; - } - - setup(builder) { - builder.context.setupClearcoatNormal = () => this.setupClearcoatNormal(builder); - - super.setup(builder); - } - - copy(source) { - this.clearcoatNode = source.clearcoatNode; - this.clearcoatRoughnessNode = source.clearcoatRoughnessNode; - this.clearcoatNormalNode = source.clearcoatNormalNode; - - this.sheenNode = source.sheenNode; - this.sheenRoughnessNode = source.sheenRoughnessNode; - - this.iridescenceNode = source.iridescenceNode; - this.iridescenceIORNode = source.iridescenceIORNode; - this.iridescenceThicknessNode = source.iridescenceThicknessNode; - - this.specularIntensityNode = source.specularIntensityNode; - this.specularColorNode = source.specularColorNode; - - this.transmissionNode = source.transmissionNode; - this.thicknessNode = source.thicknessNode; - this.attenuationDistanceNode = source.attenuationDistanceNode; - this.attenuationColorNode = source.attenuationColorNode; - this.dispersionNode = source.dispersionNode; - - this.anisotropyNode = source.anisotropyNode; - - return super.copy(source); - } -} - -addNodeMaterial('MeshPhysicalNodeMaterial', MeshPhysicalNodeMaterial); - -class SSSLightingModel extends PhysicalLightingModel { - constructor(useClearcoat, useSheen, useIridescence, useSSS) { - super(useClearcoat, useSheen, useIridescence); - - this.useSSS = useSSS; - } - - direct({ lightDirection, lightColor, reflectedLight }, stack, builder) { - if (this.useSSS === true) { - const material = builder.material; - - const { thicknessColorNode, thicknessDistortionNode, thicknessAmbientNode, thicknessAttenuationNode, thicknessPowerNode, thicknessScaleNode } = material; - - const scatteringHalf = lightDirection.add(transformedNormalView.mul(thicknessDistortionNode)).normalize(); - const scatteringDot = float(positionViewDirection.dot(scatteringHalf.negate()).saturate().pow(thicknessPowerNode).mul(thicknessScaleNode)); - const scatteringIllu = vec3(scatteringDot.add(thicknessAmbientNode).mul(thicknessColorNode)); - - reflectedLight.directDiffuse.addAssign(scatteringIllu.mul(thicknessAttenuationNode.mul(lightColor))); - } - - super.direct({ lightDirection, lightColor, reflectedLight }, stack, builder); - } -} - -class MeshSSSNodeMaterial extends MeshPhysicalNodeMaterial { - constructor(parameters) { - super(parameters); - - this.thicknessColorNode = null; - this.thicknessDistortionNode = float(0.1); - this.thicknessAmbientNode = float(0.0); - this.thicknessAttenuationNode = float(0.1); - this.thicknessPowerNode = float(2.0); - this.thicknessScaleNode = float(10.0); - } - - get useSSS() { - return this.thicknessColorNode !== null; - } - - setupLightingModel(/*builder*/) { - return new SSSLightingModel(this.useClearcoat, this.useSheen, this.useIridescence, this.useSSS); - } - - copy(source) { - this.thicknessColorNode = source.thicknessColorNode; - this.thicknessDistortionNode = source.thicknessDistortionNode; - this.thicknessAmbientNode = source.thicknessAmbientNode; - this.thicknessAttenuationNode = source.thicknessAttenuationNode; - this.thicknessPowerNode = source.thicknessPowerNode; - this.thicknessScaleNode = source.thicknessScaleNode; - - return super.copy(source); - } -} - -addNodeMaterial('MeshSSSNodeMaterial', MeshSSSNodeMaterial); - -const getGradientIrradiance = Fn(({ normal, lightDirection, builder }) => { - // dotNL will be from -1.0 to 1.0 - const dotNL = normal.dot(lightDirection); - const coord = vec2(dotNL.mul(0.5).add(0.5), 0.0); - - if (builder.material.gradientMap) { - const gradientMap = materialReference('gradientMap', 'texture').context({ getUV: () => coord }); - - return vec3(gradientMap.r); - } else { - const fw = coord.fwidth().mul(0.5); - - return mix(vec3(0.7), vec3(1.0), smoothstep(float(0.7).sub(fw.x), float(0.7).add(fw.x), coord.x)); - } -}); - -class ToonLightingModel extends LightingModel { - direct({ lightDirection, lightColor, reflectedLight }, stack, builder) { - const irradiance = getGradientIrradiance({ normal: normalGeometry, lightDirection, builder }).mul(lightColor); - - reflectedLight.directDiffuse.addAssign(irradiance.mul(BRDF_Lambert({ diffuseColor: diffuseColor.rgb }))); - } - - indirect({ ambientOcclusion, irradiance, reflectedLight }) { - reflectedLight.indirectDiffuse.addAssign(irradiance.mul(BRDF_Lambert({ diffuseColor }))); - - reflectedLight.indirectDiffuse.mulAssign(ambientOcclusion); - } -} - -const _defaultValues$4 = /*@__PURE__*/ new MeshToonMaterial(); - -class MeshToonNodeMaterial extends NodeMaterial { - constructor(parameters) { - super(); - - this.isMeshToonNodeMaterial = true; - - this.lights = true; - - this.setDefaultValues(_defaultValues$4); - - this.setValues(parameters); - } - - setupLightingModel(/*builder*/) { - return new ToonLightingModel(); - } -} - -addNodeMaterial('MeshToonNodeMaterial', MeshToonNodeMaterial); - -const _defaultValues$3 = /*@__PURE__*/ new MeshMatcapMaterial(); - -class MeshMatcapNodeMaterial extends NodeMaterial { - constructor(parameters) { - super(); - - this.lights = false; - - this.isMeshMatcapNodeMaterial = true; - - this.setDefaultValues(_defaultValues$3); - - this.setValues(parameters); - } - - setupVariants(builder) { - const uv = matcapUV; - - let matcapColor; - - if (builder.material.matcap) { - matcapColor = materialReference('matcap', 'texture').context({ getUV: () => uv }); - } else { - matcapColor = vec3(mix(0.2, 0.8, uv.y)); // default if matcap is missing - } - - diffuseColor.rgb.mulAssign(matcapColor.rgb); - } -} - -addNodeMaterial('MeshMatcapNodeMaterial', MeshMatcapNodeMaterial); - -const _defaultValues$2 = /*@__PURE__*/ new PointsMaterial(); - -class PointsNodeMaterial extends NodeMaterial { - constructor(parameters) { - super(); - - this.isPointsNodeMaterial = true; - - this.lights = false; - this.transparent = true; - - this.sizeNode = null; - - this.setDefaultValues(_defaultValues$2); - - this.setValues(parameters); - } - - copy(source) { - this.sizeNode = source.sizeNode; - - return super.copy(source); - } -} - -addNodeMaterial('PointsNodeMaterial', PointsNodeMaterial); - -const _defaultValues$1 = /*@__PURE__*/ new SpriteMaterial(); - -class SpriteNodeMaterial extends NodeMaterial { - constructor(parameters) { - super(); - - this.isSpriteNodeMaterial = true; - - this.lights = false; - - this.positionNode = null; - this.rotationNode = null; - this.scaleNode = null; - - this.setDefaultValues(_defaultValues$1); - - this.setValues(parameters); - } - - setupPosition({ object, context }) { - // < VERTEX STAGE > - - const { positionNode, rotationNode, scaleNode } = this; - - const vertex = positionLocal; - - let mvPosition = modelViewMatrix.mul(vec3(positionNode || 0)); - - let scale = vec2(modelWorldMatrix[0].xyz.length(), modelWorldMatrix[1].xyz.length()); - - if (scaleNode !== null) { - scale = scale.mul(scaleNode); - } - - let alignedPosition = vertex.xy; - - if (object.center && object.center.isVector2 === true) { - alignedPosition = alignedPosition.sub(uniform(object.center).sub(0.5)); - } - - alignedPosition = alignedPosition.mul(scale); - - const rotation = float(rotationNode || materialRotation); - - const rotatedPosition = alignedPosition.rotate(rotation); - - mvPosition = vec4(mvPosition.xy.add(rotatedPosition), mvPosition.zw); - - const modelViewProjection = cameraProjectionMatrix.mul(mvPosition); - - context.vertex = vertex; - - return modelViewProjection; - } - - copy(source) { - this.positionNode = source.positionNode; - this.rotationNode = source.rotationNode; - this.scaleNode = source.scaleNode; - - return super.copy(source); - } -} - -addNodeMaterial('SpriteNodeMaterial', SpriteNodeMaterial); - -class ShadowMaskModel extends LightingModel { - constructor() { - super(); - - this.shadowNode = float(1).toVar('shadowMask'); - } - - direct({ shadowMask }) { - this.shadowNode.mulAssign(shadowMask); - } - - finish(context) { - diffuseColor.a.mulAssign(this.shadowNode.oneMinus()); - - context.outgoingLight.rgb.assign(diffuseColor.rgb); // TODO: Optimize LightsNode to avoid this assignment - } -} - -const _defaultValues = /*@__PURE__*/ new ShadowMaterial(); - -class ShadowNodeMaterial extends NodeMaterial { - constructor(parameters) { - super(); - - this.isShadowNodeMaterial = true; - - this.lights = true; - - this.setDefaultValues(_defaultValues); - - this.setValues(parameters); - } - - setupLightingModel(/*builder*/) { - return new ShadowMaskModel(); - } -} - -addNodeMaterial('ShadowNodeMaterial', ShadowNodeMaterial); - -class VolumeNodeMaterial extends NodeMaterial { - constructor(params = {}) { - super(); - - this.lights = false; - this.isVolumeNodeMaterial = true; - this.testNode = null; - - this.setValues(params); - } - - setup(builder) { - const map = texture3D(this.map, null, 0); - - const hitBox = Fn(({ orig, dir }) => { - const box_min = vec3(-0.5); - const box_max = vec3(0.5); - - const inv_dir = dir.reciprocal(); - - const tmin_tmp = box_min.sub(orig).mul(inv_dir); - const tmax_tmp = box_max.sub(orig).mul(inv_dir); - - const tmin = min$1(tmin_tmp, tmax_tmp); - const tmax = max$1(tmin_tmp, tmax_tmp); - - const t0 = max$1(tmin.x, max$1(tmin.y, tmin.z)); - const t1 = min$1(tmax.x, min$1(tmax.y, tmax.z)); - - return vec2(t0, t1); - }); - - this.fragmentNode = Fn(() => { - const vOrigin = varying(vec3(modelWorldMatrixInverse.mul(vec4(cameraPosition, 1.0)))); - const vDirection = varying(positionGeometry.sub(vOrigin)); - - const rayDir = vDirection.normalize(); - const bounds = property('vec2', 'bounds').assign(hitBox({ orig: vOrigin, dir: rayDir })); - - bounds.x.greaterThan(bounds.y).discard(); - - bounds.assign(vec2(max$1(bounds.x, 0.0), bounds.y)); - - const p = property('vec3', 'p').assign(vOrigin.add(bounds.x.mul(rayDir))); - const inc = property('vec3', 'inc').assign(vec3(rayDir.abs().reciprocal())); - const delta = property('float', 'delta').assign(min$1(inc.x, min$1(inc.y, inc.z))); - - delta.divAssign(materialReference('steps', 'float')); - - const ac = property('vec4', 'ac').assign(vec4(materialReference('base', 'color'), 0.0)); - - Loop({ type: 'float', start: bounds.x, end: bounds.y, update: '+= delta' }, () => { - const d = property('float', 'd').assign(map.uv(p.add(0.5)).r); - - if (this.testNode !== null) { - this.testNode({ map: map, mapValue: d, probe: p, finalColor: ac }).append(); - } else { - // default to show surface of mesh - ac.a.assign(1); - Break(); - } - - p.addAssign(rayDir.mul(delta)); - }); - - ac.a.equal(0).discard(); - - return vec4(ac); - })(); - - super.setup(builder); - } -} - -addNodeMaterial('VolumeNodeMaterial', VolumeNodeMaterial); - -const superFromTypeFunction = MaterialLoader.createMaterialFromType; - -MaterialLoader.createMaterialFromType = function (type) { - const material = createNodeMaterialFromType(type); - - if (material !== undefined) { - return material; - } - - return superFromTypeFunction.call(this, type); -}; - -class NodeMaterialLoader extends MaterialLoader { - constructor(manager) { - super(manager); - - this.nodes = {}; - } - - parse(json) { - const material = super.parse(json); - - const nodes = this.nodes; - const inputNodes = json.inputNodes; - - for (const property in inputNodes) { - const uuid = inputNodes[property]; - - material[property] = nodes[uuid]; - } - - return material; - } - - setNodes(value) { - this.nodes = value; - - return this; - } -} - -class NodeObjectLoader extends ObjectLoader { - constructor(manager) { - super(manager); - - this._nodesJSON = null; - } - - parse(json, onLoad) { - this._nodesJSON = json.nodes; - - const data = super.parse(json, onLoad); - - this._nodesJSON = null; // dispose - - return data; - } - - parseNodes(json, textures) { - if (json !== undefined) { - const loader = new NodeLoader(); - loader.setTextures(textures); - - return loader.parseNodes(json); - } - - return {}; - } - - parseMaterials(json, textures) { - const materials = {}; - - if (json !== undefined) { - const nodes = this.parseNodes(this._nodesJSON, textures); - - const loader = new NodeMaterialLoader(); - loader.setTextures(textures); - loader.setNodes(nodes); - - for (let i = 0, l = json.length; i < l; i++) { - const data = json[i]; - - materials[data.uuid] = loader.parse(data); - } - } - - return materials; - } -} - -class NodeParser { - parseFunction(/*source*/) { - console.warn('Abstract function.'); - } -} - -class NodeFunction { - constructor(type, inputs, name = '', precision = '') { - this.type = type; - this.inputs = inputs; - this.name = name; - this.precision = precision; - } - - getCode(/*name = this.name*/) { - console.warn('Abstract function.'); - } -} - -NodeFunction.isNodeFunction = true; - -const declarationRegexp$1 = /^\s*(highp|mediump|lowp)?\s*([a-z_0-9]+)\s*([a-z_0-9]+)?\s*\(([\s\S]*?)\)/i; -const propertiesRegexp$1 = /[a-z_0-9]+/gi; - -const pragmaMain = '#pragma main'; - -const parse$1 = (source) => { - source = source.trim(); - - const pragmaMainIndex = source.indexOf(pragmaMain); - - const mainCode = pragmaMainIndex !== -1 ? source.slice(pragmaMainIndex + pragmaMain.length) : source; - - const declaration = mainCode.match(declarationRegexp$1); - - if (declaration !== null && declaration.length === 5) { - // tokenizer - - const inputsCode = declaration[4]; - const propsMatches = []; - - let nameMatch = null; - - while ((nameMatch = propertiesRegexp$1.exec(inputsCode)) !== null) { - propsMatches.push(nameMatch); - } - - // parser - - const inputs = []; - - let i = 0; - - while (i < propsMatches.length) { - const isConst = propsMatches[i][0] === 'const'; - - if (isConst === true) { - i++; - } - - let qualifier = propsMatches[i][0]; - - if (qualifier === 'in' || qualifier === 'out' || qualifier === 'inout') { - i++; - } else { - qualifier = ''; - } - - const type = propsMatches[i++][0]; - - let count = Number.parseInt(propsMatches[i][0]); - - if (Number.isNaN(count) === false) i++; - else count = null; - - const name = propsMatches[i++][0]; - - inputs.push(new NodeFunctionInput(type, name, count, qualifier, isConst)); - } - - // - - const blockCode = mainCode.substring(declaration[0].length); - - const name = declaration[3] !== undefined ? declaration[3] : ''; - const type = declaration[2]; - - const precision = declaration[1] !== undefined ? declaration[1] : ''; - - const headerCode = pragmaMainIndex !== -1 ? source.slice(0, pragmaMainIndex) : ''; - - return { - type, - inputs, - name, - precision, - inputsCode, - blockCode, - headerCode, - }; - } else { - throw new Error('FunctionNode: Function is not a GLSL code.'); - } -}; - -class GLSLNodeFunction extends NodeFunction { - constructor(source) { - const { type, inputs, name, precision, inputsCode, blockCode, headerCode } = parse$1(source); - - super(type, inputs, name, precision); - - this.inputsCode = inputsCode; - this.blockCode = blockCode; - this.headerCode = headerCode; - } - - getCode(name = this.name) { - let code; - - const blockCode = this.blockCode; - - if (blockCode !== '') { - const { type, inputsCode, headerCode, precision } = this; - - let declarationCode = `${type} ${name} ( ${inputsCode.trim()} )`; - - if (precision !== '') { - declarationCode = `${precision} ${declarationCode}`; - } - - code = headerCode + declarationCode + blockCode; - } else { - // interface function - - code = ''; - } - - return code; - } -} - -class GLSLNodeParser extends NodeParser { - parseFunction(source) { - return new GLSLNodeFunction(source); - } -} - -// Three.js Transpiler -// https://raw.githubusercontent.com/AcademySoftwareFoundation/MaterialX/main/libraries/stdlib/genglsl/lib/mx_noise.glsl - -const mx_select = /*#__PURE__*/ Fn(([b_immutable, t_immutable, f_immutable]) => { - const f = float(f_immutable).toVar(); - const t = float(t_immutable).toVar(); - const b = bool(b_immutable).toVar(); - - return select(b, t, f); -}).setLayout({ - name: 'mx_select', - type: 'float', - inputs: [ - { name: 'b', type: 'bool' }, - { name: 't', type: 'float' }, - { name: 'f', type: 'float' }, - ], -}); - -const mx_negate_if = /*#__PURE__*/ Fn(([val_immutable, b_immutable]) => { - const b = bool(b_immutable).toVar(); - const val = float(val_immutable).toVar(); - - return select(b, val.negate(), val); -}).setLayout({ - name: 'mx_negate_if', - type: 'float', - inputs: [ - { name: 'val', type: 'float' }, - { name: 'b', type: 'bool' }, - ], -}); - -const mx_floor = /*#__PURE__*/ Fn(([x_immutable]) => { - const x = float(x_immutable).toVar(); - - return int(floor(x)); -}).setLayout({ - name: 'mx_floor', - type: 'int', - inputs: [{ name: 'x', type: 'float' }], -}); - -const mx_floorfrac = /*#__PURE__*/ Fn(([x_immutable, i]) => { - const x = float(x_immutable).toVar(); - i.assign(mx_floor(x)); - - return x.sub(float(i)); -}); - -const mx_bilerp_0 = /*#__PURE__*/ Fn(([v0_immutable, v1_immutable, v2_immutable, v3_immutable, s_immutable, t_immutable]) => { - const t = float(t_immutable).toVar(); - const s = float(s_immutable).toVar(); - const v3 = float(v3_immutable).toVar(); - const v2 = float(v2_immutable).toVar(); - const v1 = float(v1_immutable).toVar(); - const v0 = float(v0_immutable).toVar(); - const s1 = float(sub(1.0, s)).toVar(); - - return sub(1.0, t) - .mul(v0.mul(s1).add(v1.mul(s))) - .add(t.mul(v2.mul(s1).add(v3.mul(s)))); -}).setLayout({ - name: 'mx_bilerp_0', - type: 'float', - inputs: [ - { name: 'v0', type: 'float' }, - { name: 'v1', type: 'float' }, - { name: 'v2', type: 'float' }, - { name: 'v3', type: 'float' }, - { name: 's', type: 'float' }, - { name: 't', type: 'float' }, - ], -}); - -const mx_bilerp_1 = /*#__PURE__*/ Fn(([v0_immutable, v1_immutable, v2_immutable, v3_immutable, s_immutable, t_immutable]) => { - const t = float(t_immutable).toVar(); - const s = float(s_immutable).toVar(); - const v3 = vec3(v3_immutable).toVar(); - const v2 = vec3(v2_immutable).toVar(); - const v1 = vec3(v1_immutable).toVar(); - const v0 = vec3(v0_immutable).toVar(); - const s1 = float(sub(1.0, s)).toVar(); - - return sub(1.0, t) - .mul(v0.mul(s1).add(v1.mul(s))) - .add(t.mul(v2.mul(s1).add(v3.mul(s)))); -}).setLayout({ - name: 'mx_bilerp_1', - type: 'vec3', - inputs: [ - { name: 'v0', type: 'vec3' }, - { name: 'v1', type: 'vec3' }, - { name: 'v2', type: 'vec3' }, - { name: 'v3', type: 'vec3' }, - { name: 's', type: 'float' }, - { name: 't', type: 'float' }, - ], -}); - -const mx_bilerp = /*#__PURE__*/ overloadingFn([mx_bilerp_0, mx_bilerp_1]); - -const mx_trilerp_0 = /*#__PURE__*/ Fn(([v0_immutable, v1_immutable, v2_immutable, v3_immutable, v4_immutable, v5_immutable, v6_immutable, v7_immutable, s_immutable, t_immutable, r_immutable]) => { - const r = float(r_immutable).toVar(); - const t = float(t_immutable).toVar(); - const s = float(s_immutable).toVar(); - const v7 = float(v7_immutable).toVar(); - const v6 = float(v6_immutable).toVar(); - const v5 = float(v5_immutable).toVar(); - const v4 = float(v4_immutable).toVar(); - const v3 = float(v3_immutable).toVar(); - const v2 = float(v2_immutable).toVar(); - const v1 = float(v1_immutable).toVar(); - const v0 = float(v0_immutable).toVar(); - const s1 = float(sub(1.0, s)).toVar(); - const t1 = float(sub(1.0, t)).toVar(); - const r1 = float(sub(1.0, r)).toVar(); - - return r1.mul(t1.mul(v0.mul(s1).add(v1.mul(s))).add(t.mul(v2.mul(s1).add(v3.mul(s))))).add(r.mul(t1.mul(v4.mul(s1).add(v5.mul(s))).add(t.mul(v6.mul(s1).add(v7.mul(s)))))); -}).setLayout({ - name: 'mx_trilerp_0', - type: 'float', - inputs: [ - { name: 'v0', type: 'float' }, - { name: 'v1', type: 'float' }, - { name: 'v2', type: 'float' }, - { name: 'v3', type: 'float' }, - { name: 'v4', type: 'float' }, - { name: 'v5', type: 'float' }, - { name: 'v6', type: 'float' }, - { name: 'v7', type: 'float' }, - { name: 's', type: 'float' }, - { name: 't', type: 'float' }, - { name: 'r', type: 'float' }, - ], -}); - -const mx_trilerp_1 = /*#__PURE__*/ Fn(([v0_immutable, v1_immutable, v2_immutable, v3_immutable, v4_immutable, v5_immutable, v6_immutable, v7_immutable, s_immutable, t_immutable, r_immutable]) => { - const r = float(r_immutable).toVar(); - const t = float(t_immutable).toVar(); - const s = float(s_immutable).toVar(); - const v7 = vec3(v7_immutable).toVar(); - const v6 = vec3(v6_immutable).toVar(); - const v5 = vec3(v5_immutable).toVar(); - const v4 = vec3(v4_immutable).toVar(); - const v3 = vec3(v3_immutable).toVar(); - const v2 = vec3(v2_immutable).toVar(); - const v1 = vec3(v1_immutable).toVar(); - const v0 = vec3(v0_immutable).toVar(); - const s1 = float(sub(1.0, s)).toVar(); - const t1 = float(sub(1.0, t)).toVar(); - const r1 = float(sub(1.0, r)).toVar(); - - return r1.mul(t1.mul(v0.mul(s1).add(v1.mul(s))).add(t.mul(v2.mul(s1).add(v3.mul(s))))).add(r.mul(t1.mul(v4.mul(s1).add(v5.mul(s))).add(t.mul(v6.mul(s1).add(v7.mul(s)))))); -}).setLayout({ - name: 'mx_trilerp_1', - type: 'vec3', - inputs: [ - { name: 'v0', type: 'vec3' }, - { name: 'v1', type: 'vec3' }, - { name: 'v2', type: 'vec3' }, - { name: 'v3', type: 'vec3' }, - { name: 'v4', type: 'vec3' }, - { name: 'v5', type: 'vec3' }, - { name: 'v6', type: 'vec3' }, - { name: 'v7', type: 'vec3' }, - { name: 's', type: 'float' }, - { name: 't', type: 'float' }, - { name: 'r', type: 'float' }, - ], -}); - -const mx_trilerp = /*#__PURE__*/ overloadingFn([mx_trilerp_0, mx_trilerp_1]); - -const mx_gradient_float_0 = /*#__PURE__*/ Fn(([hash_immutable, x_immutable, y_immutable]) => { - const y = float(y_immutable).toVar(); - const x = float(x_immutable).toVar(); - const hash = uint(hash_immutable).toVar(); - const h = uint(hash.bitAnd(uint(7))).toVar(); - const u = float(mx_select(h.lessThan(uint(4)), x, y)).toVar(); - const v = float(mul(2.0, mx_select(h.lessThan(uint(4)), y, x))).toVar(); - - return mx_negate_if(u, bool(h.bitAnd(uint(1)))).add(mx_negate_if(v, bool(h.bitAnd(uint(2))))); -}).setLayout({ - name: 'mx_gradient_float_0', - type: 'float', - inputs: [ - { name: 'hash', type: 'uint' }, - { name: 'x', type: 'float' }, - { name: 'y', type: 'float' }, - ], -}); - -const mx_gradient_float_1 = /*#__PURE__*/ Fn(([hash_immutable, x_immutable, y_immutable, z_immutable]) => { - const z = float(z_immutable).toVar(); - const y = float(y_immutable).toVar(); - const x = float(x_immutable).toVar(); - const hash = uint(hash_immutable).toVar(); - const h = uint(hash.bitAnd(uint(15))).toVar(); - const u = float(mx_select(h.lessThan(uint(8)), x, y)).toVar(); - const v = float(mx_select(h.lessThan(uint(4)), y, mx_select(h.equal(uint(12)).or(h.equal(uint(14))), x, z))).toVar(); - - return mx_negate_if(u, bool(h.bitAnd(uint(1)))).add(mx_negate_if(v, bool(h.bitAnd(uint(2))))); -}).setLayout({ - name: 'mx_gradient_float_1', - type: 'float', - inputs: [ - { name: 'hash', type: 'uint' }, - { name: 'x', type: 'float' }, - { name: 'y', type: 'float' }, - { name: 'z', type: 'float' }, - ], -}); - -const mx_gradient_float = /*#__PURE__*/ overloadingFn([mx_gradient_float_0, mx_gradient_float_1]); - -const mx_gradient_vec3_0 = /*#__PURE__*/ Fn(([hash_immutable, x_immutable, y_immutable]) => { - const y = float(y_immutable).toVar(); - const x = float(x_immutable).toVar(); - const hash = uvec3(hash_immutable).toVar(); - - return vec3(mx_gradient_float(hash.x, x, y), mx_gradient_float(hash.y, x, y), mx_gradient_float(hash.z, x, y)); -}).setLayout({ - name: 'mx_gradient_vec3_0', - type: 'vec3', - inputs: [ - { name: 'hash', type: 'uvec3' }, - { name: 'x', type: 'float' }, - { name: 'y', type: 'float' }, - ], -}); - -const mx_gradient_vec3_1 = /*#__PURE__*/ Fn(([hash_immutable, x_immutable, y_immutable, z_immutable]) => { - const z = float(z_immutable).toVar(); - const y = float(y_immutable).toVar(); - const x = float(x_immutable).toVar(); - const hash = uvec3(hash_immutable).toVar(); - - return vec3(mx_gradient_float(hash.x, x, y, z), mx_gradient_float(hash.y, x, y, z), mx_gradient_float(hash.z, x, y, z)); -}).setLayout({ - name: 'mx_gradient_vec3_1', - type: 'vec3', - inputs: [ - { name: 'hash', type: 'uvec3' }, - { name: 'x', type: 'float' }, - { name: 'y', type: 'float' }, - { name: 'z', type: 'float' }, - ], -}); - -const mx_gradient_vec3 = /*#__PURE__*/ overloadingFn([mx_gradient_vec3_0, mx_gradient_vec3_1]); - -const mx_gradient_scale2d_0 = /*#__PURE__*/ Fn(([v_immutable]) => { - const v = float(v_immutable).toVar(); - - return mul(0.6616, v); -}).setLayout({ - name: 'mx_gradient_scale2d_0', - type: 'float', - inputs: [{ name: 'v', type: 'float' }], -}); - -const mx_gradient_scale3d_0 = /*#__PURE__*/ Fn(([v_immutable]) => { - const v = float(v_immutable).toVar(); - - return mul(0.982, v); -}).setLayout({ - name: 'mx_gradient_scale3d_0', - type: 'float', - inputs: [{ name: 'v', type: 'float' }], -}); - -const mx_gradient_scale2d_1 = /*#__PURE__*/ Fn(([v_immutable]) => { - const v = vec3(v_immutable).toVar(); - - return mul(0.6616, v); -}).setLayout({ - name: 'mx_gradient_scale2d_1', - type: 'vec3', - inputs: [{ name: 'v', type: 'vec3' }], -}); - -const mx_gradient_scale2d = /*#__PURE__*/ overloadingFn([mx_gradient_scale2d_0, mx_gradient_scale2d_1]); - -const mx_gradient_scale3d_1 = /*#__PURE__*/ Fn(([v_immutable]) => { - const v = vec3(v_immutable).toVar(); - - return mul(0.982, v); -}).setLayout({ - name: 'mx_gradient_scale3d_1', - type: 'vec3', - inputs: [{ name: 'v', type: 'vec3' }], -}); - -const mx_gradient_scale3d = /*#__PURE__*/ overloadingFn([mx_gradient_scale3d_0, mx_gradient_scale3d_1]); - -const mx_rotl32 = /*#__PURE__*/ Fn(([x_immutable, k_immutable]) => { - const k = int(k_immutable).toVar(); - const x = uint(x_immutable).toVar(); - - return x.shiftLeft(k).bitOr(x.shiftRight(int(32).sub(k))); -}).setLayout({ - name: 'mx_rotl32', - type: 'uint', - inputs: [ - { name: 'x', type: 'uint' }, - { name: 'k', type: 'int' }, - ], -}); - -const mx_bjmix = /*#__PURE__*/ Fn(([a, b, c]) => { - a.subAssign(c); - a.bitXorAssign(mx_rotl32(c, int(4))); - c.addAssign(b); - b.subAssign(a); - b.bitXorAssign(mx_rotl32(a, int(6))); - a.addAssign(c); - c.subAssign(b); - c.bitXorAssign(mx_rotl32(b, int(8))); - b.addAssign(a); - a.subAssign(c); - a.bitXorAssign(mx_rotl32(c, int(16))); - c.addAssign(b); - b.subAssign(a); - b.bitXorAssign(mx_rotl32(a, int(19))); - a.addAssign(c); - c.subAssign(b); - c.bitXorAssign(mx_rotl32(b, int(4))); - b.addAssign(a); -}); - -const mx_bjfinal = /*#__PURE__*/ Fn(([a_immutable, b_immutable, c_immutable]) => { - const c = uint(c_immutable).toVar(); - const b = uint(b_immutable).toVar(); - const a = uint(a_immutable).toVar(); - c.bitXorAssign(b); - c.subAssign(mx_rotl32(b, int(14))); - a.bitXorAssign(c); - a.subAssign(mx_rotl32(c, int(11))); - b.bitXorAssign(a); - b.subAssign(mx_rotl32(a, int(25))); - c.bitXorAssign(b); - c.subAssign(mx_rotl32(b, int(16))); - a.bitXorAssign(c); - a.subAssign(mx_rotl32(c, int(4))); - b.bitXorAssign(a); - b.subAssign(mx_rotl32(a, int(14))); - c.bitXorAssign(b); - c.subAssign(mx_rotl32(b, int(24))); - - return c; -}).setLayout({ - name: 'mx_bjfinal', - type: 'uint', - inputs: [ - { name: 'a', type: 'uint' }, - { name: 'b', type: 'uint' }, - { name: 'c', type: 'uint' }, - ], -}); - -const mx_bits_to_01 = /*#__PURE__*/ Fn(([bits_immutable]) => { - const bits = uint(bits_immutable).toVar(); - - return float(bits).div(float(uint(int(0xffffffff)))); -}).setLayout({ - name: 'mx_bits_to_01', - type: 'float', - inputs: [{ name: 'bits', type: 'uint' }], -}); - -const mx_fade = /*#__PURE__*/ Fn(([t_immutable]) => { - const t = float(t_immutable).toVar(); - - return t - .mul(t) - .mul(t) - .mul(t.mul(t.mul(6.0).sub(15.0)).add(10.0)); -}).setLayout({ - name: 'mx_fade', - type: 'float', - inputs: [{ name: 't', type: 'float' }], -}); - -const mx_hash_int_0 = /*#__PURE__*/ Fn(([x_immutable]) => { - const x = int(x_immutable).toVar(); - const len = uint(uint(1)).toVar(); - const seed = uint( - uint(int(0xdeadbeef)) - .add(len.shiftLeft(uint(2))) - .add(uint(13)) - ).toVar(); - - return mx_bjfinal(seed.add(uint(x)), seed, seed); -}).setLayout({ - name: 'mx_hash_int_0', - type: 'uint', - inputs: [{ name: 'x', type: 'int' }], -}); - -const mx_hash_int_1 = /*#__PURE__*/ Fn(([x_immutable, y_immutable]) => { - const y = int(y_immutable).toVar(); - const x = int(x_immutable).toVar(); - const len = uint(uint(2)).toVar(); - const a = uint().toVar(), - b = uint().toVar(), - c = uint().toVar(); - a.assign( - b.assign( - c.assign( - uint(int(0xdeadbeef)) - .add(len.shiftLeft(uint(2))) - .add(uint(13)) - ) - ) - ); - a.addAssign(uint(x)); - b.addAssign(uint(y)); - - return mx_bjfinal(a, b, c); -}).setLayout({ - name: 'mx_hash_int_1', - type: 'uint', - inputs: [ - { name: 'x', type: 'int' }, - { name: 'y', type: 'int' }, - ], -}); - -const mx_hash_int_2 = /*#__PURE__*/ Fn(([x_immutable, y_immutable, z_immutable]) => { - const z = int(z_immutable).toVar(); - const y = int(y_immutable).toVar(); - const x = int(x_immutable).toVar(); - const len = uint(uint(3)).toVar(); - const a = uint().toVar(), - b = uint().toVar(), - c = uint().toVar(); - a.assign( - b.assign( - c.assign( - uint(int(0xdeadbeef)) - .add(len.shiftLeft(uint(2))) - .add(uint(13)) - ) - ) - ); - a.addAssign(uint(x)); - b.addAssign(uint(y)); - c.addAssign(uint(z)); - - return mx_bjfinal(a, b, c); -}).setLayout({ - name: 'mx_hash_int_2', - type: 'uint', - inputs: [ - { name: 'x', type: 'int' }, - { name: 'y', type: 'int' }, - { name: 'z', type: 'int' }, - ], -}); - -const mx_hash_int_3 = /*#__PURE__*/ Fn(([x_immutable, y_immutable, z_immutable, xx_immutable]) => { - const xx = int(xx_immutable).toVar(); - const z = int(z_immutable).toVar(); - const y = int(y_immutable).toVar(); - const x = int(x_immutable).toVar(); - const len = uint(uint(4)).toVar(); - const a = uint().toVar(), - b = uint().toVar(), - c = uint().toVar(); - a.assign( - b.assign( - c.assign( - uint(int(0xdeadbeef)) - .add(len.shiftLeft(uint(2))) - .add(uint(13)) - ) - ) - ); - a.addAssign(uint(x)); - b.addAssign(uint(y)); - c.addAssign(uint(z)); - mx_bjmix(a, b, c); - a.addAssign(uint(xx)); - - return mx_bjfinal(a, b, c); -}).setLayout({ - name: 'mx_hash_int_3', - type: 'uint', - inputs: [ - { name: 'x', type: 'int' }, - { name: 'y', type: 'int' }, - { name: 'z', type: 'int' }, - { name: 'xx', type: 'int' }, - ], -}); - -const mx_hash_int_4 = /*#__PURE__*/ Fn(([x_immutable, y_immutable, z_immutable, xx_immutable, yy_immutable]) => { - const yy = int(yy_immutable).toVar(); - const xx = int(xx_immutable).toVar(); - const z = int(z_immutable).toVar(); - const y = int(y_immutable).toVar(); - const x = int(x_immutable).toVar(); - const len = uint(uint(5)).toVar(); - const a = uint().toVar(), - b = uint().toVar(), - c = uint().toVar(); - a.assign( - b.assign( - c.assign( - uint(int(0xdeadbeef)) - .add(len.shiftLeft(uint(2))) - .add(uint(13)) - ) - ) - ); - a.addAssign(uint(x)); - b.addAssign(uint(y)); - c.addAssign(uint(z)); - mx_bjmix(a, b, c); - a.addAssign(uint(xx)); - b.addAssign(uint(yy)); - - return mx_bjfinal(a, b, c); -}).setLayout({ - name: 'mx_hash_int_4', - type: 'uint', - inputs: [ - { name: 'x', type: 'int' }, - { name: 'y', type: 'int' }, - { name: 'z', type: 'int' }, - { name: 'xx', type: 'int' }, - { name: 'yy', type: 'int' }, - ], -}); - -const mx_hash_int = /*#__PURE__*/ overloadingFn([mx_hash_int_0, mx_hash_int_1, mx_hash_int_2, mx_hash_int_3, mx_hash_int_4]); - -const mx_hash_vec3_0 = /*#__PURE__*/ Fn(([x_immutable, y_immutable]) => { - const y = int(y_immutable).toVar(); - const x = int(x_immutable).toVar(); - const h = uint(mx_hash_int(x, y)).toVar(); - const result = uvec3().toVar(); - result.x.assign(h.bitAnd(int(0xff))); - result.y.assign(h.shiftRight(int(8)).bitAnd(int(0xff))); - result.z.assign(h.shiftRight(int(16)).bitAnd(int(0xff))); - - return result; -}).setLayout({ - name: 'mx_hash_vec3_0', - type: 'uvec3', - inputs: [ - { name: 'x', type: 'int' }, - { name: 'y', type: 'int' }, - ], -}); - -const mx_hash_vec3_1 = /*#__PURE__*/ Fn(([x_immutable, y_immutable, z_immutable]) => { - const z = int(z_immutable).toVar(); - const y = int(y_immutable).toVar(); - const x = int(x_immutable).toVar(); - const h = uint(mx_hash_int(x, y, z)).toVar(); - const result = uvec3().toVar(); - result.x.assign(h.bitAnd(int(0xff))); - result.y.assign(h.shiftRight(int(8)).bitAnd(int(0xff))); - result.z.assign(h.shiftRight(int(16)).bitAnd(int(0xff))); - - return result; -}).setLayout({ - name: 'mx_hash_vec3_1', - type: 'uvec3', - inputs: [ - { name: 'x', type: 'int' }, - { name: 'y', type: 'int' }, - { name: 'z', type: 'int' }, - ], -}); - -const mx_hash_vec3 = /*#__PURE__*/ overloadingFn([mx_hash_vec3_0, mx_hash_vec3_1]); - -const mx_perlin_noise_float_0 = /*#__PURE__*/ Fn(([p_immutable]) => { - const p = vec2(p_immutable).toVar(); - const X = int().toVar(), - Y = int().toVar(); - const fx = float(mx_floorfrac(p.x, X)).toVar(); - const fy = float(mx_floorfrac(p.y, Y)).toVar(); - const u = float(mx_fade(fx)).toVar(); - const v = float(mx_fade(fy)).toVar(); - const result = float(mx_bilerp(mx_gradient_float(mx_hash_int(X, Y), fx, fy), mx_gradient_float(mx_hash_int(X.add(int(1)), Y), fx.sub(1.0), fy), mx_gradient_float(mx_hash_int(X, Y.add(int(1))), fx, fy.sub(1.0)), mx_gradient_float(mx_hash_int(X.add(int(1)), Y.add(int(1))), fx.sub(1.0), fy.sub(1.0)), u, v)).toVar(); - - return mx_gradient_scale2d(result); -}).setLayout({ - name: 'mx_perlin_noise_float_0', - type: 'float', - inputs: [{ name: 'p', type: 'vec2' }], -}); - -const mx_perlin_noise_float_1 = /*#__PURE__*/ Fn(([p_immutable]) => { - const p = vec3(p_immutable).toVar(); - const X = int().toVar(), - Y = int().toVar(), - Z = int().toVar(); - const fx = float(mx_floorfrac(p.x, X)).toVar(); - const fy = float(mx_floorfrac(p.y, Y)).toVar(); - const fz = float(mx_floorfrac(p.z, Z)).toVar(); - const u = float(mx_fade(fx)).toVar(); - const v = float(mx_fade(fy)).toVar(); - const w = float(mx_fade(fz)).toVar(); - const result = float( - mx_trilerp( - mx_gradient_float(mx_hash_int(X, Y, Z), fx, fy, fz), - mx_gradient_float(mx_hash_int(X.add(int(1)), Y, Z), fx.sub(1.0), fy, fz), - mx_gradient_float(mx_hash_int(X, Y.add(int(1)), Z), fx, fy.sub(1.0), fz), - mx_gradient_float(mx_hash_int(X.add(int(1)), Y.add(int(1)), Z), fx.sub(1.0), fy.sub(1.0), fz), - mx_gradient_float(mx_hash_int(X, Y, Z.add(int(1))), fx, fy, fz.sub(1.0)), - mx_gradient_float(mx_hash_int(X.add(int(1)), Y, Z.add(int(1))), fx.sub(1.0), fy, fz.sub(1.0)), - mx_gradient_float(mx_hash_int(X, Y.add(int(1)), Z.add(int(1))), fx, fy.sub(1.0), fz.sub(1.0)), - mx_gradient_float(mx_hash_int(X.add(int(1)), Y.add(int(1)), Z.add(int(1))), fx.sub(1.0), fy.sub(1.0), fz.sub(1.0)), - u, - v, - w - ) - ).toVar(); - - return mx_gradient_scale3d(result); -}).setLayout({ - name: 'mx_perlin_noise_float_1', - type: 'float', - inputs: [{ name: 'p', type: 'vec3' }], -}); - -const mx_perlin_noise_float = /*#__PURE__*/ overloadingFn([mx_perlin_noise_float_0, mx_perlin_noise_float_1]); - -const mx_perlin_noise_vec3_0 = /*#__PURE__*/ Fn(([p_immutable]) => { - const p = vec2(p_immutable).toVar(); - const X = int().toVar(), - Y = int().toVar(); - const fx = float(mx_floorfrac(p.x, X)).toVar(); - const fy = float(mx_floorfrac(p.y, Y)).toVar(); - const u = float(mx_fade(fx)).toVar(); - const v = float(mx_fade(fy)).toVar(); - const result = vec3(mx_bilerp(mx_gradient_vec3(mx_hash_vec3(X, Y), fx, fy), mx_gradient_vec3(mx_hash_vec3(X.add(int(1)), Y), fx.sub(1.0), fy), mx_gradient_vec3(mx_hash_vec3(X, Y.add(int(1))), fx, fy.sub(1.0)), mx_gradient_vec3(mx_hash_vec3(X.add(int(1)), Y.add(int(1))), fx.sub(1.0), fy.sub(1.0)), u, v)).toVar(); - - return mx_gradient_scale2d(result); -}).setLayout({ - name: 'mx_perlin_noise_vec3_0', - type: 'vec3', - inputs: [{ name: 'p', type: 'vec2' }], -}); - -const mx_perlin_noise_vec3_1 = /*#__PURE__*/ Fn(([p_immutable]) => { - const p = vec3(p_immutable).toVar(); - const X = int().toVar(), - Y = int().toVar(), - Z = int().toVar(); - const fx = float(mx_floorfrac(p.x, X)).toVar(); - const fy = float(mx_floorfrac(p.y, Y)).toVar(); - const fz = float(mx_floorfrac(p.z, Z)).toVar(); - const u = float(mx_fade(fx)).toVar(); - const v = float(mx_fade(fy)).toVar(); - const w = float(mx_fade(fz)).toVar(); - const result = vec3( - mx_trilerp( - mx_gradient_vec3(mx_hash_vec3(X, Y, Z), fx, fy, fz), - mx_gradient_vec3(mx_hash_vec3(X.add(int(1)), Y, Z), fx.sub(1.0), fy, fz), - mx_gradient_vec3(mx_hash_vec3(X, Y.add(int(1)), Z), fx, fy.sub(1.0), fz), - mx_gradient_vec3(mx_hash_vec3(X.add(int(1)), Y.add(int(1)), Z), fx.sub(1.0), fy.sub(1.0), fz), - mx_gradient_vec3(mx_hash_vec3(X, Y, Z.add(int(1))), fx, fy, fz.sub(1.0)), - mx_gradient_vec3(mx_hash_vec3(X.add(int(1)), Y, Z.add(int(1))), fx.sub(1.0), fy, fz.sub(1.0)), - mx_gradient_vec3(mx_hash_vec3(X, Y.add(int(1)), Z.add(int(1))), fx, fy.sub(1.0), fz.sub(1.0)), - mx_gradient_vec3(mx_hash_vec3(X.add(int(1)), Y.add(int(1)), Z.add(int(1))), fx.sub(1.0), fy.sub(1.0), fz.sub(1.0)), - u, - v, - w - ) - ).toVar(); - - return mx_gradient_scale3d(result); -}).setLayout({ - name: 'mx_perlin_noise_vec3_1', - type: 'vec3', - inputs: [{ name: 'p', type: 'vec3' }], -}); - -const mx_perlin_noise_vec3 = /*#__PURE__*/ overloadingFn([mx_perlin_noise_vec3_0, mx_perlin_noise_vec3_1]); - -const mx_cell_noise_float_0 = /*#__PURE__*/ Fn(([p_immutable]) => { - const p = float(p_immutable).toVar(); - const ix = int(mx_floor(p)).toVar(); - - return mx_bits_to_01(mx_hash_int(ix)); -}).setLayout({ - name: 'mx_cell_noise_float_0', - type: 'float', - inputs: [{ name: 'p', type: 'float' }], -}); - -const mx_cell_noise_float_1 = /*#__PURE__*/ Fn(([p_immutable]) => { - const p = vec2(p_immutable).toVar(); - const ix = int(mx_floor(p.x)).toVar(); - const iy = int(mx_floor(p.y)).toVar(); - - return mx_bits_to_01(mx_hash_int(ix, iy)); -}).setLayout({ - name: 'mx_cell_noise_float_1', - type: 'float', - inputs: [{ name: 'p', type: 'vec2' }], -}); - -const mx_cell_noise_float_2 = /*#__PURE__*/ Fn(([p_immutable]) => { - const p = vec3(p_immutable).toVar(); - const ix = int(mx_floor(p.x)).toVar(); - const iy = int(mx_floor(p.y)).toVar(); - const iz = int(mx_floor(p.z)).toVar(); - - return mx_bits_to_01(mx_hash_int(ix, iy, iz)); -}).setLayout({ - name: 'mx_cell_noise_float_2', - type: 'float', - inputs: [{ name: 'p', type: 'vec3' }], -}); - -const mx_cell_noise_float_3 = /*#__PURE__*/ Fn(([p_immutable]) => { - const p = vec4(p_immutable).toVar(); - const ix = int(mx_floor(p.x)).toVar(); - const iy = int(mx_floor(p.y)).toVar(); - const iz = int(mx_floor(p.z)).toVar(); - const iw = int(mx_floor(p.w)).toVar(); - - return mx_bits_to_01(mx_hash_int(ix, iy, iz, iw)); -}).setLayout({ - name: 'mx_cell_noise_float_3', - type: 'float', - inputs: [{ name: 'p', type: 'vec4' }], -}); - -const mx_cell_noise_float$1 = /*#__PURE__*/ overloadingFn([mx_cell_noise_float_0, mx_cell_noise_float_1, mx_cell_noise_float_2, mx_cell_noise_float_3]); - -const mx_cell_noise_vec3_0 = /*#__PURE__*/ Fn(([p_immutable]) => { - const p = float(p_immutable).toVar(); - const ix = int(mx_floor(p)).toVar(); - - return vec3(mx_bits_to_01(mx_hash_int(ix, int(0))), mx_bits_to_01(mx_hash_int(ix, int(1))), mx_bits_to_01(mx_hash_int(ix, int(2)))); -}).setLayout({ - name: 'mx_cell_noise_vec3_0', - type: 'vec3', - inputs: [{ name: 'p', type: 'float' }], -}); - -const mx_cell_noise_vec3_1 = /*#__PURE__*/ Fn(([p_immutable]) => { - const p = vec2(p_immutable).toVar(); - const ix = int(mx_floor(p.x)).toVar(); - const iy = int(mx_floor(p.y)).toVar(); - - return vec3(mx_bits_to_01(mx_hash_int(ix, iy, int(0))), mx_bits_to_01(mx_hash_int(ix, iy, int(1))), mx_bits_to_01(mx_hash_int(ix, iy, int(2)))); -}).setLayout({ - name: 'mx_cell_noise_vec3_1', - type: 'vec3', - inputs: [{ name: 'p', type: 'vec2' }], -}); - -const mx_cell_noise_vec3_2 = /*#__PURE__*/ Fn(([p_immutable]) => { - const p = vec3(p_immutable).toVar(); - const ix = int(mx_floor(p.x)).toVar(); - const iy = int(mx_floor(p.y)).toVar(); - const iz = int(mx_floor(p.z)).toVar(); - - return vec3(mx_bits_to_01(mx_hash_int(ix, iy, iz, int(0))), mx_bits_to_01(mx_hash_int(ix, iy, iz, int(1))), mx_bits_to_01(mx_hash_int(ix, iy, iz, int(2)))); -}).setLayout({ - name: 'mx_cell_noise_vec3_2', - type: 'vec3', - inputs: [{ name: 'p', type: 'vec3' }], -}); - -const mx_cell_noise_vec3_3 = /*#__PURE__*/ Fn(([p_immutable]) => { - const p = vec4(p_immutable).toVar(); - const ix = int(mx_floor(p.x)).toVar(); - const iy = int(mx_floor(p.y)).toVar(); - const iz = int(mx_floor(p.z)).toVar(); - const iw = int(mx_floor(p.w)).toVar(); - - return vec3(mx_bits_to_01(mx_hash_int(ix, iy, iz, iw, int(0))), mx_bits_to_01(mx_hash_int(ix, iy, iz, iw, int(1))), mx_bits_to_01(mx_hash_int(ix, iy, iz, iw, int(2)))); -}).setLayout({ - name: 'mx_cell_noise_vec3_3', - type: 'vec3', - inputs: [{ name: 'p', type: 'vec4' }], -}); - -const mx_cell_noise_vec3 = /*#__PURE__*/ overloadingFn([mx_cell_noise_vec3_0, mx_cell_noise_vec3_1, mx_cell_noise_vec3_2, mx_cell_noise_vec3_3]); - -const mx_fractal_noise_float$1 = /*#__PURE__*/ Fn(([p_immutable, octaves_immutable, lacunarity_immutable, diminish_immutable]) => { - const diminish = float(diminish_immutable).toVar(); - const lacunarity = float(lacunarity_immutable).toVar(); - const octaves = int(octaves_immutable).toVar(); - const p = vec3(p_immutable).toVar(); - const result = float(0.0).toVar(); - const amplitude = float(1.0).toVar(); - - Loop(octaves, () => { - result.addAssign(amplitude.mul(mx_perlin_noise_float(p))); - amplitude.mulAssign(diminish); - p.mulAssign(lacunarity); - }); - - return result; -}).setLayout({ - name: 'mx_fractal_noise_float', - type: 'float', - inputs: [ - { name: 'p', type: 'vec3' }, - { name: 'octaves', type: 'int' }, - { name: 'lacunarity', type: 'float' }, - { name: 'diminish', type: 'float' }, - ], -}); - -const mx_fractal_noise_vec3$1 = /*#__PURE__*/ Fn(([p_immutable, octaves_immutable, lacunarity_immutable, diminish_immutable]) => { - const diminish = float(diminish_immutable).toVar(); - const lacunarity = float(lacunarity_immutable).toVar(); - const octaves = int(octaves_immutable).toVar(); - const p = vec3(p_immutable).toVar(); - const result = vec3(0.0).toVar(); - const amplitude = float(1.0).toVar(); - - Loop(octaves, () => { - result.addAssign(amplitude.mul(mx_perlin_noise_vec3(p))); - amplitude.mulAssign(diminish); - p.mulAssign(lacunarity); - }); - - return result; -}).setLayout({ - name: 'mx_fractal_noise_vec3', - type: 'vec3', - inputs: [ - { name: 'p', type: 'vec3' }, - { name: 'octaves', type: 'int' }, - { name: 'lacunarity', type: 'float' }, - { name: 'diminish', type: 'float' }, - ], -}); - -const mx_fractal_noise_vec2$1 = /*#__PURE__*/ Fn(([p_immutable, octaves_immutable, lacunarity_immutable, diminish_immutable]) => { - const diminish = float(diminish_immutable).toVar(); - const lacunarity = float(lacunarity_immutable).toVar(); - const octaves = int(octaves_immutable).toVar(); - const p = vec3(p_immutable).toVar(); - - return vec2(mx_fractal_noise_float$1(p, octaves, lacunarity, diminish), mx_fractal_noise_float$1(p.add(vec3(int(19), int(193), int(17))), octaves, lacunarity, diminish)); -}).setLayout({ - name: 'mx_fractal_noise_vec2', - type: 'vec2', - inputs: [ - { name: 'p', type: 'vec3' }, - { name: 'octaves', type: 'int' }, - { name: 'lacunarity', type: 'float' }, - { name: 'diminish', type: 'float' }, - ], -}); - -const mx_fractal_noise_vec4$1 = /*#__PURE__*/ Fn(([p_immutable, octaves_immutable, lacunarity_immutable, diminish_immutable]) => { - const diminish = float(diminish_immutable).toVar(); - const lacunarity = float(lacunarity_immutable).toVar(); - const octaves = int(octaves_immutable).toVar(); - const p = vec3(p_immutable).toVar(); - const c = vec3(mx_fractal_noise_vec3$1(p, octaves, lacunarity, diminish)).toVar(); - const f = float(mx_fractal_noise_float$1(p.add(vec3(int(19), int(193), int(17))), octaves, lacunarity, diminish)).toVar(); - - return vec4(c, f); -}).setLayout({ - name: 'mx_fractal_noise_vec4', - type: 'vec4', - inputs: [ - { name: 'p', type: 'vec3' }, - { name: 'octaves', type: 'int' }, - { name: 'lacunarity', type: 'float' }, - { name: 'diminish', type: 'float' }, - ], -}); - -const mx_worley_distance_0 = /*#__PURE__*/ Fn(([p_immutable, x_immutable, y_immutable, xoff_immutable, yoff_immutable, jitter_immutable, metric_immutable]) => { - const metric = int(metric_immutable).toVar(); - const jitter = float(jitter_immutable).toVar(); - const yoff = int(yoff_immutable).toVar(); - const xoff = int(xoff_immutable).toVar(); - const y = int(y_immutable).toVar(); - const x = int(x_immutable).toVar(); - const p = vec2(p_immutable).toVar(); - const tmp = vec3(mx_cell_noise_vec3(vec2(x.add(xoff), y.add(yoff)))).toVar(); - const off = vec2(tmp.x, tmp.y).toVar(); - off.subAssign(0.5); - off.mulAssign(jitter); - off.addAssign(0.5); - const cellpos = vec2(vec2(float(x), float(y)).add(off)).toVar(); - const diff = vec2(cellpos.sub(p)).toVar(); - - If(metric.equal(int(2)), () => { - return abs(diff.x).add(abs(diff.y)); - }); - - If(metric.equal(int(3)), () => { - return max$1(abs(diff.x), abs(diff.y)); - }); - - return dot(diff, diff); -}).setLayout({ - name: 'mx_worley_distance_0', - type: 'float', - inputs: [ - { name: 'p', type: 'vec2' }, - { name: 'x', type: 'int' }, - { name: 'y', type: 'int' }, - { name: 'xoff', type: 'int' }, - { name: 'yoff', type: 'int' }, - { name: 'jitter', type: 'float' }, - { name: 'metric', type: 'int' }, - ], -}); - -const mx_worley_distance_1 = /*#__PURE__*/ Fn(([p_immutable, x_immutable, y_immutable, z_immutable, xoff_immutable, yoff_immutable, zoff_immutable, jitter_immutable, metric_immutable]) => { - const metric = int(metric_immutable).toVar(); - const jitter = float(jitter_immutable).toVar(); - const zoff = int(zoff_immutable).toVar(); - const yoff = int(yoff_immutable).toVar(); - const xoff = int(xoff_immutable).toVar(); - const z = int(z_immutable).toVar(); - const y = int(y_immutable).toVar(); - const x = int(x_immutable).toVar(); - const p = vec3(p_immutable).toVar(); - const off = vec3(mx_cell_noise_vec3(vec3(x.add(xoff), y.add(yoff), z.add(zoff)))).toVar(); - off.subAssign(0.5); - off.mulAssign(jitter); - off.addAssign(0.5); - const cellpos = vec3(vec3(float(x), float(y), float(z)).add(off)).toVar(); - const diff = vec3(cellpos.sub(p)).toVar(); - - If(metric.equal(int(2)), () => { - return abs(diff.x).add(abs(diff.y)).add(abs(diff.z)); - }); - - If(metric.equal(int(3)), () => { - return max$1(max$1(abs(diff.x), abs(diff.y)), abs(diff.z)); - }); - - return dot(diff, diff); -}).setLayout({ - name: 'mx_worley_distance_1', - type: 'float', - inputs: [ - { name: 'p', type: 'vec3' }, - { name: 'x', type: 'int' }, - { name: 'y', type: 'int' }, - { name: 'z', type: 'int' }, - { name: 'xoff', type: 'int' }, - { name: 'yoff', type: 'int' }, - { name: 'zoff', type: 'int' }, - { name: 'jitter', type: 'float' }, - { name: 'metric', type: 'int' }, - ], -}); - -const mx_worley_distance = /*#__PURE__*/ overloadingFn([mx_worley_distance_0, mx_worley_distance_1]); - -const mx_worley_noise_float_0 = /*#__PURE__*/ Fn(([p_immutable, jitter_immutable, metric_immutable]) => { - const metric = int(metric_immutable).toVar(); - const jitter = float(jitter_immutable).toVar(); - const p = vec2(p_immutable).toVar(); - const X = int().toVar(), - Y = int().toVar(); - const localpos = vec2(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y)).toVar(); - const sqdist = float(1e6).toVar(); - - Loop({ start: -1, end: int(1), name: 'x', condition: '<=' }, ({ x }) => { - Loop({ start: -1, end: int(1), name: 'y', condition: '<=' }, ({ y }) => { - const dist = float(mx_worley_distance(localpos, x, y, X, Y, jitter, metric)).toVar(); - sqdist.assign(min$1(sqdist, dist)); - }); - }); - - If(metric.equal(int(0)), () => { - sqdist.assign(sqrt(sqdist)); - }); - - return sqdist; -}).setLayout({ - name: 'mx_worley_noise_float_0', - type: 'float', - inputs: [ - { name: 'p', type: 'vec2' }, - { name: 'jitter', type: 'float' }, - { name: 'metric', type: 'int' }, - ], -}); - -const mx_worley_noise_vec2_0 = /*#__PURE__*/ Fn(([p_immutable, jitter_immutable, metric_immutable]) => { - const metric = int(metric_immutable).toVar(); - const jitter = float(jitter_immutable).toVar(); - const p = vec2(p_immutable).toVar(); - const X = int().toVar(), - Y = int().toVar(); - const localpos = vec2(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y)).toVar(); - const sqdist = vec2(1e6, 1e6).toVar(); - - Loop({ start: -1, end: int(1), name: 'x', condition: '<=' }, ({ x }) => { - Loop({ start: -1, end: int(1), name: 'y', condition: '<=' }, ({ y }) => { - const dist = float(mx_worley_distance(localpos, x, y, X, Y, jitter, metric)).toVar(); - - If(dist.lessThan(sqdist.x), () => { - sqdist.y.assign(sqdist.x); - sqdist.x.assign(dist); - }).ElseIf(dist.lessThan(sqdist.y), () => { - sqdist.y.assign(dist); - }); - }); - }); - - If(metric.equal(int(0)), () => { - sqdist.assign(sqrt(sqdist)); - }); - - return sqdist; -}).setLayout({ - name: 'mx_worley_noise_vec2_0', - type: 'vec2', - inputs: [ - { name: 'p', type: 'vec2' }, - { name: 'jitter', type: 'float' }, - { name: 'metric', type: 'int' }, - ], -}); - -const mx_worley_noise_vec3_0 = /*#__PURE__*/ Fn(([p_immutable, jitter_immutable, metric_immutable]) => { - const metric = int(metric_immutable).toVar(); - const jitter = float(jitter_immutable).toVar(); - const p = vec2(p_immutable).toVar(); - const X = int().toVar(), - Y = int().toVar(); - const localpos = vec2(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y)).toVar(); - const sqdist = vec3(1e6, 1e6, 1e6).toVar(); - - Loop({ start: -1, end: int(1), name: 'x', condition: '<=' }, ({ x }) => { - Loop({ start: -1, end: int(1), name: 'y', condition: '<=' }, ({ y }) => { - const dist = float(mx_worley_distance(localpos, x, y, X, Y, jitter, metric)).toVar(); - - If(dist.lessThan(sqdist.x), () => { - sqdist.z.assign(sqdist.y); - sqdist.y.assign(sqdist.x); - sqdist.x.assign(dist); - }) - .ElseIf(dist.lessThan(sqdist.y), () => { - sqdist.z.assign(sqdist.y); - sqdist.y.assign(dist); - }) - .ElseIf(dist.lessThan(sqdist.z), () => { - sqdist.z.assign(dist); - }); - }); - }); - - If(metric.equal(int(0)), () => { - sqdist.assign(sqrt(sqdist)); - }); - - return sqdist; -}).setLayout({ - name: 'mx_worley_noise_vec3_0', - type: 'vec3', - inputs: [ - { name: 'p', type: 'vec2' }, - { name: 'jitter', type: 'float' }, - { name: 'metric', type: 'int' }, - ], -}); - -const mx_worley_noise_float_1 = /*#__PURE__*/ Fn(([p_immutable, jitter_immutable, metric_immutable]) => { - const metric = int(metric_immutable).toVar(); - const jitter = float(jitter_immutable).toVar(); - const p = vec3(p_immutable).toVar(); - const X = int().toVar(), - Y = int().toVar(), - Z = int().toVar(); - const localpos = vec3(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y), mx_floorfrac(p.z, Z)).toVar(); - const sqdist = float(1e6).toVar(); - - Loop({ start: -1, end: int(1), name: 'x', condition: '<=' }, ({ x }) => { - Loop({ start: -1, end: int(1), name: 'y', condition: '<=' }, ({ y }) => { - Loop({ start: -1, end: int(1), name: 'z', condition: '<=' }, ({ z }) => { - const dist = float(mx_worley_distance(localpos, x, y, z, X, Y, Z, jitter, metric)).toVar(); - sqdist.assign(min$1(sqdist, dist)); - }); - }); - }); - - If(metric.equal(int(0)), () => { - sqdist.assign(sqrt(sqdist)); - }); - - return sqdist; -}).setLayout({ - name: 'mx_worley_noise_float_1', - type: 'float', - inputs: [ - { name: 'p', type: 'vec3' }, - { name: 'jitter', type: 'float' }, - { name: 'metric', type: 'int' }, - ], -}); - -const mx_worley_noise_float$1 = /*#__PURE__*/ overloadingFn([mx_worley_noise_float_0, mx_worley_noise_float_1]); - -const mx_worley_noise_vec2_1 = /*#__PURE__*/ Fn(([p_immutable, jitter_immutable, metric_immutable]) => { - const metric = int(metric_immutable).toVar(); - const jitter = float(jitter_immutable).toVar(); - const p = vec3(p_immutable).toVar(); - const X = int().toVar(), - Y = int().toVar(), - Z = int().toVar(); - const localpos = vec3(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y), mx_floorfrac(p.z, Z)).toVar(); - const sqdist = vec2(1e6, 1e6).toVar(); - - Loop({ start: -1, end: int(1), name: 'x', condition: '<=' }, ({ x }) => { - Loop({ start: -1, end: int(1), name: 'y', condition: '<=' }, ({ y }) => { - Loop({ start: -1, end: int(1), name: 'z', condition: '<=' }, ({ z }) => { - const dist = float(mx_worley_distance(localpos, x, y, z, X, Y, Z, jitter, metric)).toVar(); - - If(dist.lessThan(sqdist.x), () => { - sqdist.y.assign(sqdist.x); - sqdist.x.assign(dist); - }).ElseIf(dist.lessThan(sqdist.y), () => { - sqdist.y.assign(dist); - }); - }); - }); - }); - - If(metric.equal(int(0)), () => { - sqdist.assign(sqrt(sqdist)); - }); - - return sqdist; -}).setLayout({ - name: 'mx_worley_noise_vec2_1', - type: 'vec2', - inputs: [ - { name: 'p', type: 'vec3' }, - { name: 'jitter', type: 'float' }, - { name: 'metric', type: 'int' }, - ], -}); - -const mx_worley_noise_vec2$1 = /*#__PURE__*/ overloadingFn([mx_worley_noise_vec2_0, mx_worley_noise_vec2_1]); - -const mx_worley_noise_vec3_1 = /*#__PURE__*/ Fn(([p_immutable, jitter_immutable, metric_immutable]) => { - const metric = int(metric_immutable).toVar(); - const jitter = float(jitter_immutable).toVar(); - const p = vec3(p_immutable).toVar(); - const X = int().toVar(), - Y = int().toVar(), - Z = int().toVar(); - const localpos = vec3(mx_floorfrac(p.x, X), mx_floorfrac(p.y, Y), mx_floorfrac(p.z, Z)).toVar(); - const sqdist = vec3(1e6, 1e6, 1e6).toVar(); - - Loop({ start: -1, end: int(1), name: 'x', condition: '<=' }, ({ x }) => { - Loop({ start: -1, end: int(1), name: 'y', condition: '<=' }, ({ y }) => { - Loop({ start: -1, end: int(1), name: 'z', condition: '<=' }, ({ z }) => { - const dist = float(mx_worley_distance(localpos, x, y, z, X, Y, Z, jitter, metric)).toVar(); - - If(dist.lessThan(sqdist.x), () => { - sqdist.z.assign(sqdist.y); - sqdist.y.assign(sqdist.x); - sqdist.x.assign(dist); - }) - .ElseIf(dist.lessThan(sqdist.y), () => { - sqdist.z.assign(sqdist.y); - sqdist.y.assign(dist); - }) - .ElseIf(dist.lessThan(sqdist.z), () => { - sqdist.z.assign(dist); - }); - }); - }); - }); - - If(metric.equal(int(0)), () => { - sqdist.assign(sqrt(sqdist)); - }); - - return sqdist; -}).setLayout({ - name: 'mx_worley_noise_vec3_1', - type: 'vec3', - inputs: [ - { name: 'p', type: 'vec3' }, - { name: 'jitter', type: 'float' }, - { name: 'metric', type: 'int' }, - ], -}); - -const mx_worley_noise_vec3$1 = /*#__PURE__*/ overloadingFn([mx_worley_noise_vec3_0, mx_worley_noise_vec3_1]); - -// Three.js Transpiler -// https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/libraries/stdlib/genglsl/lib/mx_hsv.glsl - -const mx_hsvtorgb = /*#__PURE__*/ Fn(([hsv]) => { - const s = hsv.y; - const v = hsv.z; - - const result = vec3().toVar(); - - If(s.lessThan(0.0001), () => { - result.assign(vec3(v, v, v)); - }).Else(() => { - let h = hsv.x; - h = h.sub(floor(h)).mul(6.0).toVar(); // TODO: check what .toVar() is needed in node system cache - const hi = int(trunc(h)); - const f = h.sub(float(hi)); - const p = v.mul(s.oneMinus()); - const q = v.mul(s.mul(f).oneMinus()); - const t = v.mul(s.mul(f.oneMinus()).oneMinus()); - - If(hi.equal(int(0)), () => { - result.assign(vec3(v, t, p)); - }) - .ElseIf(hi.equal(int(1)), () => { - result.assign(vec3(q, v, p)); - }) - .ElseIf(hi.equal(int(2)), () => { - result.assign(vec3(p, v, t)); - }) - .ElseIf(hi.equal(int(3)), () => { - result.assign(vec3(p, q, v)); - }) - .ElseIf(hi.equal(int(4)), () => { - result.assign(vec3(t, p, v)); - }) - .Else(() => { - result.assign(vec3(v, p, q)); - }); - }); - - return result; -}).setLayout({ - name: 'mx_hsvtorgb', - type: 'vec3', - inputs: [{ name: 'hsv', type: 'vec3' }], -}); - -const mx_rgbtohsv = /*#__PURE__*/ Fn(([c_immutable]) => { - const c = vec3(c_immutable).toVar(); - const r = float(c.x).toVar(); - const g = float(c.y).toVar(); - const b = float(c.z).toVar(); - const mincomp = float(min$1(r, min$1(g, b))).toVar(); - const maxcomp = float(max$1(r, max$1(g, b))).toVar(); - const delta = float(maxcomp.sub(mincomp)).toVar(); - const h = float().toVar(), - s = float().toVar(), - v = float().toVar(); - v.assign(maxcomp); - - If(maxcomp.greaterThan(0.0), () => { - s.assign(delta.div(maxcomp)); - }).Else(() => { - s.assign(0.0); - }); - - If(s.lessThanEqual(0.0), () => { - h.assign(0.0); - }).Else(() => { - If(r.greaterThanEqual(maxcomp), () => { - h.assign(g.sub(b).div(delta)); - }) - .ElseIf(g.greaterThanEqual(maxcomp), () => { - h.assign(add(2.0, b.sub(r).div(delta))); - }) - .Else(() => { - h.assign(add(4.0, r.sub(g).div(delta))); - }); - - h.mulAssign(1.0 / 6.0); - - If(h.lessThan(0.0), () => { - h.addAssign(1.0); - }); - }); - - return vec3(h, s, v); -}).setLayout({ - name: 'mx_rgbtohsv', - type: 'vec3', - inputs: [{ name: 'c', type: 'vec3' }], -}); - -// Three.js Transpiler -// https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/libraries/stdlib/genglsl/lib/mx_transform_color.glsl - -const mx_srgb_texture_to_lin_rec709 = /*#__PURE__*/ Fn(([color_immutable]) => { - const color = vec3(color_immutable).toVar(); - const isAbove = bvec3(greaterThan(color, vec3(0.04045))).toVar(); - const linSeg = vec3(color.div(12.92)).toVar(); - const powSeg = vec3(pow(max$1(color.add(vec3(0.055)), vec3(0.0)).div(1.055), vec3(2.4))).toVar(); - - return mix(linSeg, powSeg, isAbove); -}).setLayout({ - name: 'mx_srgb_texture_to_lin_rec709', - type: 'vec3', - inputs: [{ name: 'color', type: 'vec3' }], -}); - -const mx_aastep = (threshold, value) => { - threshold = float(threshold); - value = float(value); - - const afwidth = vec2(value.dFdx(), value.dFdy()).length().mul(0.70710678118654757); - - return smoothstep(threshold.sub(afwidth), threshold.add(afwidth), value); -}; - -const _ramp = (a, b, uv, p) => mix(a, b, uv[p].clamp()); -const mx_ramplr = (valuel, valuer, texcoord = uv()) => _ramp(valuel, valuer, texcoord, 'x'); -const mx_ramptb = (valuet, valueb, texcoord = uv()) => _ramp(valuet, valueb, texcoord, 'y'); - -const _split = (a, b, center, uv, p) => mix(a, b, mx_aastep(center, uv[p])); -const mx_splitlr = (valuel, valuer, center, texcoord = uv()) => _split(valuel, valuer, center, texcoord, 'x'); -const mx_splittb = (valuet, valueb, center, texcoord = uv()) => _split(valuet, valueb, center, texcoord, 'y'); - -const mx_transform_uv = (uv_scale = 1, uv_offset = 0, uv_geo = uv()) => uv_geo.mul(uv_scale).add(uv_offset); - -const mx_safepower = (in1, in2 = 1) => { - in1 = float(in1); - - return in1.abs().pow(in2).mul(in1.sign()); -}; - -const mx_contrast = (input, amount = 1, pivot = 0.5) => float(input).sub(pivot).mul(amount).add(pivot); - -const mx_noise_float = (texcoord = uv(), amplitude = 1, pivot = 0) => mx_perlin_noise_float(texcoord.convert('vec2|vec3')).mul(amplitude).add(pivot); -//export const mx_noise_vec2 = ( texcoord = uv(), amplitude = 1, pivot = 0 ) => mx_perlin_noise_vec3( texcoord.convert( 'vec2|vec3' ) ).mul( amplitude ).add( pivot ); -const mx_noise_vec3 = (texcoord = uv(), amplitude = 1, pivot = 0) => mx_perlin_noise_vec3(texcoord.convert('vec2|vec3')).mul(amplitude).add(pivot); -const mx_noise_vec4 = (texcoord = uv(), amplitude = 1, pivot = 0) => { - texcoord = texcoord.convert('vec2|vec3'); // overloading type - - const noise_vec4 = vec4(mx_perlin_noise_vec3(texcoord), mx_perlin_noise_float(texcoord.add(vec2(19, 73)))); - - return noise_vec4.mul(amplitude).add(pivot); -}; - -const mx_worley_noise_float = (texcoord = uv(), jitter = 1) => mx_worley_noise_float$1(texcoord.convert('vec2|vec3'), jitter, int(1)); -const mx_worley_noise_vec2 = (texcoord = uv(), jitter = 1) => mx_worley_noise_vec2$1(texcoord.convert('vec2|vec3'), jitter, int(1)); -const mx_worley_noise_vec3 = (texcoord = uv(), jitter = 1) => mx_worley_noise_vec3$1(texcoord.convert('vec2|vec3'), jitter, int(1)); - -const mx_cell_noise_float = (texcoord = uv()) => mx_cell_noise_float$1(texcoord.convert('vec2|vec3')); - -const mx_fractal_noise_float = (position = uv(), octaves = 3, lacunarity = 2, diminish = 0.5, amplitude = 1) => mx_fractal_noise_float$1(position, int(octaves), lacunarity, diminish).mul(amplitude); -const mx_fractal_noise_vec2 = (position = uv(), octaves = 3, lacunarity = 2, diminish = 0.5, amplitude = 1) => mx_fractal_noise_vec2$1(position, int(octaves), lacunarity, diminish).mul(amplitude); -const mx_fractal_noise_vec3 = (position = uv(), octaves = 3, lacunarity = 2, diminish = 0.5, amplitude = 1) => mx_fractal_noise_vec3$1(position, int(octaves), lacunarity, diminish).mul(amplitude); -const mx_fractal_noise_vec4 = (position = uv(), octaves = 3, lacunarity = 2, diminish = 0.5, amplitude = 1) => mx_fractal_noise_vec4$1(position, int(octaves), lacunarity, diminish).mul(amplitude); - -function painterSortStable(a, b) { - if (a.groupOrder !== b.groupOrder) { - return a.groupOrder - b.groupOrder; - } else if (a.renderOrder !== b.renderOrder) { - return a.renderOrder - b.renderOrder; - } else if (a.material.id !== b.material.id) { - return a.material.id - b.material.id; - } else if (a.z !== b.z) { - return a.z - b.z; - } else { - return a.id - b.id; - } -} - -function reversePainterSortStable(a, b) { - if (a.groupOrder !== b.groupOrder) { - return a.groupOrder - b.groupOrder; - } else if (a.renderOrder !== b.renderOrder) { - return a.renderOrder - b.renderOrder; - } else if (a.z !== b.z) { - return b.z - a.z; - } else { - return a.id - b.id; - } -} - -class RenderList { - constructor() { - this.renderItems = []; - this.renderItemsIndex = 0; - - this.opaque = []; - this.transparent = []; - this.bundles = []; - - this.lightsNode = new LightsNode([]); - this.lightsArray = []; - - this.occlusionQueryCount = 0; - } - - begin() { - this.renderItemsIndex = 0; - - this.opaque.length = 0; - this.transparent.length = 0; - this.bundles.length = 0; - - this.lightsArray.length = 0; - - this.occlusionQueryCount = 0; - - return this; - } - - getNextRenderItem(object, geometry, material, groupOrder, z, group) { - let renderItem = this.renderItems[this.renderItemsIndex]; - - if (renderItem === undefined) { - renderItem = { - id: object.id, - object: object, - geometry: geometry, - material: material, - groupOrder: groupOrder, - renderOrder: object.renderOrder, - z: z, - group: group, - }; - - this.renderItems[this.renderItemsIndex] = renderItem; - } else { - renderItem.id = object.id; - renderItem.object = object; - renderItem.geometry = geometry; - renderItem.material = material; - renderItem.groupOrder = groupOrder; - renderItem.renderOrder = object.renderOrder; - renderItem.z = z; - renderItem.group = group; - } - - this.renderItemsIndex++; - - return renderItem; - } - - push(object, geometry, material, groupOrder, z, group) { - const renderItem = this.getNextRenderItem(object, geometry, material, groupOrder, z, group); - - if (object.occlusionTest === true) this.occlusionQueryCount++; - - (material.transparent === true || material.transmission > 0 ? this.transparent : this.opaque).push(renderItem); - } - - unshift(object, geometry, material, groupOrder, z, group) { - const renderItem = this.getNextRenderItem(object, geometry, material, groupOrder, z, group); - - (material.transparent === true ? this.transparent : this.opaque).unshift(renderItem); - } - - pushBundle(group) { - this.bundles.push(group); - } - - pushLight(light) { - this.lightsArray.push(light); - } - - getLightsNode() { - return this.lightsNode.fromLights(this.lightsArray); - } - - sort(customOpaqueSort, customTransparentSort) { - if (this.opaque.length > 1) this.opaque.sort(customOpaqueSort || painterSortStable); - if (this.transparent.length > 1) this.transparent.sort(customTransparentSort || reversePainterSortStable); - } - - finish() { - // update lights - - this.lightsNode.fromLights(this.lightsArray); - - // Clear references from inactive renderItems in the list - - for (let i = this.renderItemsIndex, il = this.renderItems.length; i < il; i++) { - const renderItem = this.renderItems[i]; - - if (renderItem.id === null) break; - - renderItem.id = null; - renderItem.object = null; - renderItem.geometry = null; - renderItem.material = null; - renderItem.groupOrder = null; - renderItem.renderOrder = null; - renderItem.z = null; - renderItem.group = null; - } - } -} - -class RenderLists { - constructor() { - this.lists = new ChainMap(); - } - - get(scene, camera) { - const lists = this.lists; - const keys = [scene, camera]; - - let list = lists.get(keys); - - if (list === undefined) { - list = new RenderList(); - lists.set(keys, list); - } - - return list; - } - - dispose() { - this.lists = new ChainMap(); - } -} - -let id = 0; - -class RenderContext { - constructor() { - this.id = id++; - - this.color = true; - this.clearColor = true; - this.clearColorValue = { r: 0, g: 0, b: 0, a: 1 }; - - this.depth = true; - this.clearDepth = true; - this.clearDepthValue = 1; - - this.stencil = false; - this.clearStencil = true; - this.clearStencilValue = 1; - - this.viewport = false; - this.viewportValue = new Vector4(); - - this.scissor = false; - this.scissorValue = new Vector4(); - - this.textures = null; - this.depthTexture = null; - this.activeCubeFace = 0; - this.sampleCount = 1; - - this.width = 0; - this.height = 0; - - this.isRenderContext = true; - } - - getCacheKey() { - return getCacheKey(this); - } -} - -function getCacheKey(renderContext) { - const { textures, activeCubeFace } = renderContext; - - let key = ''; - - for (const texture of textures) { - key += texture.id + ','; - } - - key += activeCubeFace; - - return key; -} - -class RenderContexts { - constructor() { - this.chainMaps = {}; - } - - get(scene, camera, renderTarget = null) { - const chainKey = [scene, camera]; - - let attachmentState; - - if (renderTarget === null) { - attachmentState = 'default'; - } else { - const format = renderTarget.texture.format; - const count = renderTarget.textures.length; - - attachmentState = `${count}:${format}:${renderTarget.samples}:${renderTarget.depthBuffer}:${renderTarget.stencilBuffer}`; - } - - const chainMap = this.getChainMap(attachmentState); - - let renderState = chainMap.get(chainKey); - - if (renderState === undefined) { - renderState = new RenderContext(); - - chainMap.set(chainKey, renderState); - } - - if (renderTarget !== null) renderState.sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples; - - return renderState; - } - - getChainMap(attachmentState) { - return this.chainMaps[attachmentState] || (this.chainMaps[attachmentState] = new ChainMap()); - } - - dispose() { - this.chainMaps = {}; - } -} - -const _size = /*@__PURE__*/ new Vector3(); - -class Textures extends DataMap { - constructor(renderer, backend, info) { - super(); - - this.renderer = renderer; - this.backend = backend; - this.info = info; - } - - updateRenderTarget(renderTarget, activeMipmapLevel = 0) { - const renderTargetData = this.get(renderTarget); - - const sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples; - const depthTextureMips = renderTargetData.depthTextureMips || (renderTargetData.depthTextureMips = {}); - - const textures = renderTarget.textures; - - const size = this.getSize(textures[0]); - - const mipWidth = size.width >> activeMipmapLevel; - const mipHeight = size.height >> activeMipmapLevel; - - let depthTexture = renderTarget.depthTexture || depthTextureMips[activeMipmapLevel]; - let textureNeedsUpdate = false; - - if (depthTexture === undefined) { - depthTexture = new DepthTexture(); - depthTexture.format = renderTarget.stencilBuffer ? DepthStencilFormat : DepthFormat; - depthTexture.type = renderTarget.stencilBuffer ? UnsignedInt248Type : UnsignedIntType; // FloatType - depthTexture.image.width = mipWidth; - depthTexture.image.height = mipHeight; - - depthTextureMips[activeMipmapLevel] = depthTexture; - } - - if (renderTargetData.width !== size.width || size.height !== renderTargetData.height) { - textureNeedsUpdate = true; - depthTexture.needsUpdate = true; - - depthTexture.image.width = mipWidth; - depthTexture.image.height = mipHeight; - } - - renderTargetData.width = size.width; - renderTargetData.height = size.height; - renderTargetData.textures = textures; - renderTargetData.depthTexture = depthTexture; - renderTargetData.depth = renderTarget.depthBuffer; - renderTargetData.stencil = renderTarget.stencilBuffer; - renderTargetData.renderTarget = renderTarget; - - if (renderTargetData.sampleCount !== sampleCount) { - textureNeedsUpdate = true; - depthTexture.needsUpdate = true; - - renderTargetData.sampleCount = sampleCount; - } - - // - - const options = { sampleCount }; - - for (let i = 0; i < textures.length; i++) { - const texture = textures[i]; - - if (textureNeedsUpdate) texture.needsUpdate = true; - - this.updateTexture(texture, options); - } - - this.updateTexture(depthTexture, options); - - // dispose handler - - if (renderTargetData.initialized !== true) { - renderTargetData.initialized = true; - - // dispose - - const onDispose = () => { - renderTarget.removeEventListener('dispose', onDispose); - - for (let i = 0; i < textures.length; i++) { - this._destroyTexture(textures[i]); - } - - this._destroyTexture(depthTexture); - - this.delete(renderTarget); - }; - - renderTarget.addEventListener('dispose', onDispose); - } - } - - updateTexture(texture, options = {}) { - const textureData = this.get(texture); - if (textureData.initialized === true && textureData.version === texture.version) return; - - const isRenderTarget = texture.isRenderTargetTexture || texture.isDepthTexture || texture.isFramebufferTexture; - const backend = this.backend; - - if (isRenderTarget && textureData.initialized === true) { - // it's an update - - backend.destroySampler(texture); - backend.destroyTexture(texture); - } - - // - - if (texture.isFramebufferTexture) { - const renderer = this.renderer; - const renderTarget = renderer.getRenderTarget(); - - if (renderTarget) { - texture.type = renderTarget.texture.type; - } else { - texture.type = UnsignedByteType; - } - } - - // - - const { width, height, depth } = this.getSize(texture); - - options.width = width; - options.height = height; - options.depth = depth; - options.needsMipmaps = this.needsMipmaps(texture); - options.levels = options.needsMipmaps ? this.getMipLevels(texture, width, height) : 1; - - // - - if (isRenderTarget || texture.isStorageTexture === true) { - backend.createSampler(texture); - backend.createTexture(texture, options); - - textureData.generation = texture.version; - } else { - const needsCreate = textureData.initialized !== true; - - if (needsCreate) backend.createSampler(texture); - - if (texture.version > 0) { - const image = texture.image; - - if (image === undefined) { - console.warn('THREE.Renderer: Texture marked for update but image is undefined.'); - } else if (image.complete === false) { - console.warn('THREE.Renderer: Texture marked for update but image is incomplete.'); - } else { - if (texture.images) { - const images = []; - - for (const image of texture.images) { - images.push(image); - } - - options.images = images; - } else { - options.image = image; - } - - if (textureData.isDefaultTexture === undefined || textureData.isDefaultTexture === true) { - backend.createTexture(texture, options); - - textureData.isDefaultTexture = false; - textureData.generation = texture.version; - } - - if (texture.source.dataReady === true) backend.updateTexture(texture, options); - - if (options.needsMipmaps && texture.mipmaps.length === 0) backend.generateMipmaps(texture); - } - } else { - // async update - - backend.createDefaultTexture(texture); - - textureData.isDefaultTexture = true; - textureData.generation = texture.version; - } - } - - // dispose handler - - if (textureData.initialized !== true) { - textureData.initialized = true; - textureData.generation = texture.version; - - // - - this.info.memory.textures++; - - // dispose - - const onDispose = () => { - texture.removeEventListener('dispose', onDispose); - - this._destroyTexture(texture); - - this.info.memory.textures--; - }; - - texture.addEventListener('dispose', onDispose); - } - - // - - textureData.version = texture.version; - } - - getSize(texture, target = _size) { - let image = texture.images ? texture.images[0] : texture.image; - - if (image) { - if (image.image !== undefined) image = image.image; - - target.width = image.width; - target.height = image.height; - target.depth = texture.isCubeTexture ? 6 : image.depth || 1; - } else { - target.width = target.height = target.depth = 1; - } - - return target; - } - - getMipLevels(texture, width, height) { - let mipLevelCount; - - if (texture.isCompressedTexture) { - mipLevelCount = texture.mipmaps.length; - } else { - mipLevelCount = Math.floor(Math.log2(Math.max(width, height))) + 1; - } - - return mipLevelCount; - } - - needsMipmaps(texture) { - if (this.isEnvironmentTexture(texture)) return true; - - return texture.isCompressedTexture === true || (texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter); - } - - isEnvironmentTexture(texture) { - const mapping = texture.mapping; - - return mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping || mapping === CubeReflectionMapping || mapping === CubeRefractionMapping; - } - - _destroyTexture(texture) { - this.backend.destroySampler(texture); - this.backend.destroyTexture(texture); - - this.delete(texture); - } -} - -class Color4 extends Color { - constructor(r, g, b, a = 1) { - super(r, g, b); - - this.a = a; - } - - set(r, g, b, a = 1) { - this.a = a; - - return super.set(r, g, b); - } - - copy(color) { - if (color.a !== undefined) this.a = color.a; - - return super.copy(color); - } - - clone() { - return new this.constructor(this.r, this.g, this.b, this.a); - } -} - -const _clearColor = /*@__PURE__*/ new Color4(); - -class Background extends DataMap { - constructor(renderer, nodes) { - super(); - - this.renderer = renderer; - this.nodes = nodes; - } - - update(scene, renderList, renderContext) { - const renderer = this.renderer; - const background = this.nodes.getBackgroundNode(scene) || scene.background; - - let forceClear = false; - - if (background === null) { - // no background settings, use clear color configuration from the renderer - - renderer._clearColor.getRGB(_clearColor, LinearSRGBColorSpace); - _clearColor.a = renderer._clearColor.a; - } else if (background.isColor === true) { - // background is an opaque color - - background.getRGB(_clearColor, LinearSRGBColorSpace); - _clearColor.a = 1; - - forceClear = true; - } else if (background.isNode === true) { - const sceneData = this.get(scene); - const backgroundNode = background; - - _clearColor.copy(renderer._clearColor); - - let backgroundMesh = sceneData.backgroundMesh; - - if (backgroundMesh === undefined) { - const backgroundMeshNode = context(vec4(backgroundNode).mul(backgroundIntensity), { - // @TODO: Add Texture2D support using node context - getUV: () => normalWorld, - getTextureLevel: () => backgroundBlurriness, - }); - - let viewProj = modelViewProjection(); - viewProj = viewProj.setZ(viewProj.w); - - const nodeMaterial = new NodeMaterial(); - nodeMaterial.name = 'Background.material'; - nodeMaterial.side = BackSide; - nodeMaterial.depthTest = false; - nodeMaterial.depthWrite = false; - nodeMaterial.fog = false; - nodeMaterial.lights = false; - nodeMaterial.vertexNode = viewProj; - nodeMaterial.colorNode = backgroundMeshNode; - - sceneData.backgroundMeshNode = backgroundMeshNode; - sceneData.backgroundMesh = backgroundMesh = new Mesh(new SphereGeometry(1, 32, 32), nodeMaterial); - backgroundMesh.frustumCulled = false; - backgroundMesh.name = 'Background.mesh'; - - backgroundMesh.onBeforeRender = function (renderer, scene, camera) { - this.matrixWorld.copyPosition(camera.matrixWorld); - }; - } - - const backgroundCacheKey = backgroundNode.getCacheKey(); - - if (sceneData.backgroundCacheKey !== backgroundCacheKey) { - sceneData.backgroundMeshNode.node = vec4(backgroundNode).mul(backgroundIntensity); - sceneData.backgroundMeshNode.needsUpdate = true; - - backgroundMesh.material.needsUpdate = true; - - sceneData.backgroundCacheKey = backgroundCacheKey; - } - - renderList.unshift(backgroundMesh, backgroundMesh.geometry, backgroundMesh.material, 0, 0, null); - } else { - console.error('THREE.Renderer: Unsupported background configuration.', background); - } - - // - - if (renderer.autoClear === true || forceClear === true) { - _clearColor.multiplyScalar(_clearColor.a); - - const clearColorValue = renderContext.clearColorValue; - - clearColorValue.r = _clearColor.r; - clearColorValue.g = _clearColor.g; - clearColorValue.b = _clearColor.b; - clearColorValue.a = _clearColor.a; - - renderContext.depthClearValue = renderer._clearDepth; - renderContext.stencilClearValue = renderer._clearStencil; - - renderContext.clearColor = renderer.autoClearColor === true; - renderContext.clearDepth = renderer.autoClearDepth === true; - renderContext.clearStencil = renderer.autoClearStencil === true; - } else { - renderContext.clearColor = false; - renderContext.clearDepth = false; - renderContext.clearStencil = false; - } - } -} - -class NodeBuilderState { - constructor(vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes, updateAfterNodes, instanceBindGroups = true, transforms = []) { - this.vertexShader = vertexShader; - this.fragmentShader = fragmentShader; - this.computeShader = computeShader; - this.transforms = transforms; - - this.nodeAttributes = nodeAttributes; - this.bindings = bindings; - - this.updateNodes = updateNodes; - this.updateBeforeNodes = updateBeforeNodes; - this.updateAfterNodes = updateAfterNodes; - - this.instanceBindGroups = instanceBindGroups; - - this.usedTimes = 0; - } - - createBindings() { - const bindings = []; - - for (const instanceGroup of this.bindings) { - const shared = this.instanceBindGroups && instanceGroup.bindings[0].groupNode.shared; - - if (shared !== true) { - const bindingsGroup = new BindGroup(instanceGroup.name, [], instanceGroup.index, instanceGroup); - bindings.push(bindingsGroup); - - for (const instanceBinding of instanceGroup.bindings) { - bindingsGroup.bindings.push(instanceBinding.clone()); - } - } else { - bindings.push(instanceGroup); - } - } - - return bindings; - } -} - -const outputNodeMap = new WeakMap(); - -class Nodes extends DataMap { - constructor(renderer, backend) { - super(); - - this.renderer = renderer; - this.backend = backend; - this.nodeFrame = new NodeFrame(); - this.nodeBuilderCache = new Map(); - this.callHashCache = new ChainMap(); - this.groupsData = new ChainMap(); - } - - updateGroup(nodeUniformsGroup) { - const groupNode = nodeUniformsGroup.groupNode; - const name = groupNode.name; - - // objectGroup is every updated - - if (name === objectGroup.name) return true; - - // renderGroup is updated once per render/compute call - - if (name === renderGroup.name) { - const uniformsGroupData = this.get(nodeUniformsGroup); - const renderId = this.nodeFrame.renderId; - - if (uniformsGroupData.renderId !== renderId) { - uniformsGroupData.renderId = renderId; - - return true; - } - - return false; - } - - // frameGroup is updated once per frame - - if (name === frameGroup.name) { - const uniformsGroupData = this.get(nodeUniformsGroup); - const frameId = this.nodeFrame.frameId; - - if (uniformsGroupData.frameId !== frameId) { - uniformsGroupData.frameId = frameId; - - return true; - } - - return false; - } - - // other groups are updated just when groupNode.needsUpdate is true - - const groupChain = [groupNode, nodeUniformsGroup]; - - let groupData = this.groupsData.get(groupChain); - if (groupData === undefined) this.groupsData.set(groupChain, (groupData = {})); - - if (groupData.version !== groupNode.version) { - groupData.version = groupNode.version; - - return true; - } - - return false; - } - - getForRenderCacheKey(renderObject) { - return renderObject.initialCacheKey; - } - - getForRender(renderObject) { - const renderObjectData = this.get(renderObject); - - let nodeBuilderState = renderObjectData.nodeBuilderState; - - if (nodeBuilderState === undefined) { - const { nodeBuilderCache } = this; - - const cacheKey = this.getForRenderCacheKey(renderObject); - - nodeBuilderState = nodeBuilderCache.get(cacheKey); - - if (nodeBuilderState === undefined) { - const nodeBuilder = this.backend.createNodeBuilder(renderObject.object, this.renderer); - nodeBuilder.scene = renderObject.scene; - nodeBuilder.material = renderObject.material; - nodeBuilder.camera = renderObject.camera; - nodeBuilder.context.material = renderObject.material; - nodeBuilder.lightsNode = renderObject.lightsNode; - nodeBuilder.environmentNode = this.getEnvironmentNode(renderObject.scene); - nodeBuilder.fogNode = this.getFogNode(renderObject.scene); - nodeBuilder.clippingContext = renderObject.clippingContext; - nodeBuilder.build(); - - nodeBuilderState = this._createNodeBuilderState(nodeBuilder); - - nodeBuilderCache.set(cacheKey, nodeBuilderState); - } - - nodeBuilderState.usedTimes++; - - renderObjectData.nodeBuilderState = nodeBuilderState; - } - - return nodeBuilderState; - } - - delete(object) { - if (object.isRenderObject) { - const nodeBuilderState = this.get(object).nodeBuilderState; - nodeBuilderState.usedTimes--; - - if (nodeBuilderState.usedTimes === 0) { - this.nodeBuilderCache.delete(this.getForRenderCacheKey(object)); - } - } - - return super.delete(object); - } - - getForCompute(computeNode) { - const computeData = this.get(computeNode); - - let nodeBuilderState = computeData.nodeBuilderState; - - if (nodeBuilderState === undefined) { - const nodeBuilder = this.backend.createNodeBuilder(computeNode, this.renderer); - nodeBuilder.build(); - - nodeBuilderState = this._createNodeBuilderState(nodeBuilder); - - computeData.nodeBuilderState = nodeBuilderState; - } - - return nodeBuilderState; - } - - _createNodeBuilderState(nodeBuilder) { - return new NodeBuilderState(nodeBuilder.vertexShader, nodeBuilder.fragmentShader, nodeBuilder.computeShader, nodeBuilder.getAttributesArray(), nodeBuilder.getBindings(), nodeBuilder.updateNodes, nodeBuilder.updateBeforeNodes, nodeBuilder.updateAfterNodes, nodeBuilder.instanceBindGroups, nodeBuilder.transforms); - } - - getEnvironmentNode(scene) { - return scene.environmentNode || this.get(scene).environmentNode || null; - } - - getBackgroundNode(scene) { - return scene.backgroundNode || this.get(scene).backgroundNode || null; - } - - getFogNode(scene) { - return scene.fogNode || this.get(scene).fogNode || null; - } - - getCacheKey(scene, lightsNode) { - const chain = [scene, lightsNode]; - const callId = this.renderer.info.calls; - - let cacheKeyData = this.callHashCache.get(chain); - - if (cacheKeyData === undefined || cacheKeyData.callId !== callId) { - const environmentNode = this.getEnvironmentNode(scene); - const fogNode = this.getFogNode(scene); - - const cacheKey = []; - - if (lightsNode) cacheKey.push(lightsNode.getCacheKey(true)); - if (environmentNode) cacheKey.push(environmentNode.getCacheKey()); - if (fogNode) cacheKey.push(fogNode.getCacheKey()); - - cacheKeyData = { - callId, - cacheKey: cacheKey.join(','), - }; - - this.callHashCache.set(chain, cacheKeyData); - } - - return cacheKeyData.cacheKey; - } - - updateScene(scene) { - this.updateEnvironment(scene); - this.updateFog(scene); - this.updateBackground(scene); - } - - get isToneMappingState() { - return this.renderer.getRenderTarget() ? false : true; - } - - updateBackground(scene) { - const sceneData = this.get(scene); - const background = scene.background; - - if (background) { - const forceUpdate = (scene.backgroundBlurriness === 0 && sceneData.backgroundBlurriness > 0) || (scene.backgroundBlurriness > 0 && sceneData.backgroundBlurriness === 0); - - if (sceneData.background !== background || forceUpdate) { - let backgroundNode = null; - - if (background.isCubeTexture === true || background.mapping === EquirectangularReflectionMapping || background.mapping === EquirectangularRefractionMapping) { - if (scene.backgroundBlurriness > 0) { - backgroundNode = pmremTexture(background, normalWorld); - } else { - let envMap; - - if (background.isCubeTexture === true) { - envMap = cubeTexture(background); - } else { - envMap = texture(background); - } - - backgroundNode = cubeMapNode(envMap); - } - } else if (background.isTexture === true) { - backgroundNode = texture(background, viewportUV.flipY()).setUpdateMatrix(true); - } else if (background.isColor !== true) { - console.error('WebGPUNodes: Unsupported background configuration.', background); - } - - sceneData.backgroundNode = backgroundNode; - sceneData.background = background; - sceneData.backgroundBlurriness = scene.backgroundBlurriness; - } - } else if (sceneData.backgroundNode) { - delete sceneData.backgroundNode; - delete sceneData.background; - } - } - - updateFog(scene) { - const sceneData = this.get(scene); - const fog = scene.fog; - - if (fog) { - if (sceneData.fog !== fog) { - let fogNode = null; - - if (fog.isFogExp2) { - fogNode = densityFog(reference('color', 'color', fog), reference('density', 'float', fog)); - } else if (fog.isFog) { - fogNode = rangeFog(reference('color', 'color', fog), reference('near', 'float', fog), reference('far', 'float', fog)); - } else { - console.error('WebGPUNodes: Unsupported fog configuration.', fog); - } - - sceneData.fogNode = fogNode; - sceneData.fog = fog; - } - } else { - delete sceneData.fogNode; - delete sceneData.fog; - } - } - - updateEnvironment(scene) { - const sceneData = this.get(scene); - const environment = scene.environment; - - if (environment) { - if (sceneData.environment !== environment) { - let environmentNode = null; - - if (environment.isCubeTexture === true) { - environmentNode = cubeTexture(environment); - } else if (environment.isTexture === true) { - environmentNode = texture(environment); - } else { - console.error('Nodes: Unsupported environment configuration.', environment); - } - - sceneData.environmentNode = environmentNode; - sceneData.environment = environment; - } - } else if (sceneData.environmentNode) { - delete sceneData.environmentNode; - delete sceneData.environment; - } - } - - getNodeFrame(renderer = this.renderer, scene = null, object = null, camera = null, material = null) { - const nodeFrame = this.nodeFrame; - nodeFrame.renderer = renderer; - nodeFrame.scene = scene; - nodeFrame.object = object; - nodeFrame.camera = camera; - nodeFrame.material = material; - - return nodeFrame; - } - - getNodeFrameForRender(renderObject) { - return this.getNodeFrame(renderObject.renderer, renderObject.scene, renderObject.object, renderObject.camera, renderObject.material); - } - - getOutputCacheKey() { - const renderer = this.renderer; - - return renderer.toneMapping + ',' + renderer.currentColorSpace; - } - - hasOutputChange(outputTarget) { - const cacheKey = outputNodeMap.get(outputTarget); - - return cacheKey !== this.getOutputCacheKey(); - } - - getOutputNode(outputTexture) { - const renderer = this.renderer; - const cacheKey = this.getOutputCacheKey(); - - const output = texture(outputTexture, viewportUV).renderOutput(renderer.toneMapping, renderer.currentColorSpace); - - outputNodeMap.set(outputTexture, cacheKey); - - return output; - } - - updateBefore(renderObject) { - const nodeFrame = this.getNodeFrameForRender(renderObject); - const nodeBuilder = renderObject.getNodeBuilderState(); - - for (const node of nodeBuilder.updateBeforeNodes) { - nodeFrame.updateBeforeNode(node); - } - } - - updateAfter(renderObject) { - const nodeFrame = this.getNodeFrameForRender(renderObject); - const nodeBuilder = renderObject.getNodeBuilderState(); - - for (const node of nodeBuilder.updateAfterNodes) { - nodeFrame.updateAfterNode(node); - } - } - - updateForCompute(computeNode) { - const nodeFrame = this.getNodeFrame(); - const nodeBuilder = this.getForCompute(computeNode); - - for (const node of nodeBuilder.updateNodes) { - nodeFrame.updateNode(node); - } - } - - updateForRender(renderObject) { - const nodeFrame = this.getNodeFrameForRender(renderObject); - const nodeBuilder = renderObject.getNodeBuilderState(); - - for (const node of nodeBuilder.updateNodes) { - nodeFrame.updateNode(node); - } - } - - dispose() { - super.dispose(); - - this.nodeFrame = new NodeFrame(); - this.nodeBuilderCache = new Map(); - } -} - -class RenderBundle { - constructor(scene, camera) { - this.scene = scene; - this.camera = camera; - } - - clone() { - return Object.assign(new this.constructor(), this); - } -} - -class RenderBundles { - constructor() { - this.lists = new ChainMap(); - } - - get(scene, camera) { - const lists = this.lists; - const keys = [scene, camera]; - - let list = lists.get(keys); - - if (list === undefined) { - list = new RenderBundle(scene, camera); - lists.set(keys, list); - } - - return list; - } - - dispose() { - this.lists = new ChainMap(); - } -} - -const _scene = /*@__PURE__*/ new Scene(); -const _drawingBufferSize = /*@__PURE__*/ new Vector2(); -const _screen = /*@__PURE__*/ new Vector4(); -const _frustum = /*@__PURE__*/ new Frustum(); -const _projScreenMatrix = /*@__PURE__*/ new Matrix4(); -const _vector3 = /*@__PURE__*/ new Vector3(); - -class Renderer { - constructor(backend, parameters = {}) { - this.isRenderer = true; - - // - - const { logarithmicDepthBuffer = false, alpha = true, antialias = false, samples = 0, getFallback = null } = parameters; - - // public - this.domElement = backend.getDomElement(); - - this.backend = backend; - - this.samples = samples || antialias === true ? 4 : 0; - - this.autoClear = true; - this.autoClearColor = true; - this.autoClearDepth = true; - this.autoClearStencil = true; - - this.alpha = alpha; - - this.logarithmicDepthBuffer = logarithmicDepthBuffer; - - this.outputColorSpace = SRGBColorSpace; - - this.toneMapping = NoToneMapping; - this.toneMappingExposure = 1.0; - - this.sortObjects = true; - - this.depth = true; - this.stencil = false; - - this.clippingPlanes = []; - - this.info = new Info(); - - // internals - - this._getFallback = getFallback; - - this._pixelRatio = 1; - this._width = this.domElement.width; - this._height = this.domElement.height; - - this._viewport = new Vector4(0, 0, this._width, this._height); - this._scissor = new Vector4(0, 0, this._width, this._height); - this._scissorTest = false; - - this._attributes = null; - this._geometries = null; - this._nodes = null; - this._animation = null; - this._bindings = null; - this._objects = null; - this._pipelines = null; - this._bundles = null; - this._renderLists = null; - this._renderContexts = null; - this._textures = null; - this._background = null; - - this._quad = new QuadMesh(new NodeMaterial()); - this._quad.material.type = 'Renderer_output'; - - this._currentRenderContext = null; - - this._opaqueSort = null; - this._transparentSort = null; - - this._frameBufferTarget = null; - - const alphaClear = this.alpha === true ? 0 : 1; - - this._clearColor = new Color4(0, 0, 0, alphaClear); - this._clearDepth = 1; - this._clearStencil = 0; - - this._renderTarget = null; - this._activeCubeFace = 0; - this._activeMipmapLevel = 0; - - this._mrt = null; - - this._renderObjectFunction = null; - this._currentRenderObjectFunction = null; - this._currentRenderBundle = null; - - this._handleObjectFunction = this._renderObjectDirect; - - this._initialized = false; - this._initPromise = null; - - this._compilationPromises = null; - - this.transparent = true; - this.opaque = true; - - this.shadowMap = { - enabled: false, - type: PCFShadowMap$1, - }; - - this.xr = { - enabled: false, - }; - - this.debug = { - checkShaderErrors: true, - onShaderError: null, - getShaderAsync: async (scene, camera, object) => { - await this.compileAsync(scene, camera); - - const renderList = this._renderLists.get(scene, camera); - const renderContext = this._renderContexts.get(scene, camera, this._renderTarget); - - const material = scene.overrideMaterial || object.material; - - const renderObject = this._objects.get(object, material, scene, camera, renderList.lightsNode, renderContext); - - const { fragmentShader, vertexShader } = renderObject.getNodeBuilderState(); - - return { fragmentShader, vertexShader }; - }, - }; - } - - async init() { - if (this._initialized) { - throw new Error('Renderer: Backend has already been initialized.'); - } - - if (this._initPromise !== null) { - return this._initPromise; - } - - this._initPromise = new Promise(async (resolve, reject) => { - let backend = this.backend; - - try { - await backend.init(this); - } catch (error) { - if (this._getFallback !== null) { - // try the fallback - - try { - this.backend = backend = this._getFallback(error); - await backend.init(this); - } catch (error) { - reject(error); - return; - } - } else { - reject(error); - return; - } - } - - this._nodes = new Nodes(this, backend); - this._animation = new Animation(this._nodes, this.info); - this._attributes = new Attributes(backend); - this._background = new Background(this, this._nodes); - this._geometries = new Geometries(this._attributes, this.info); - this._textures = new Textures(this, backend, this.info); - this._pipelines = new Pipelines(backend, this._nodes); - this._bindings = new Bindings(backend, this._nodes, this._textures, this._attributes, this._pipelines, this.info); - this._objects = new RenderObjects(this, this._nodes, this._geometries, this._pipelines, this._bindings, this.info); - this._renderLists = new RenderLists(); - this._bundles = new RenderBundles(); - this._renderContexts = new RenderContexts(); - - // - - this._initialized = true; - - resolve(); - }); - - return this._initPromise; - } - - get coordinateSystem() { - return this.backend.coordinateSystem; - } - - async compileAsync(scene, camera, targetScene = null) { - if (this._initialized === false) await this.init(); - - // preserve render tree - - const nodeFrame = this._nodes.nodeFrame; - - const previousRenderId = nodeFrame.renderId; - const previousRenderContext = this._currentRenderContext; - const previousRenderObjectFunction = this._currentRenderObjectFunction; - const previousCompilationPromises = this._compilationPromises; - - // - - const sceneRef = scene.isScene === true ? scene : _scene; - - if (targetScene === null) targetScene = scene; - - const renderTarget = this._renderTarget; - const renderContext = this._renderContexts.get(targetScene, camera, renderTarget); - const activeMipmapLevel = this._activeMipmapLevel; - - const compilationPromises = []; - - this._currentRenderContext = renderContext; - this._currentRenderObjectFunction = this.renderObject; - - this._handleObjectFunction = this._createObjectPipeline; - - this._compilationPromises = compilationPromises; - - nodeFrame.renderId++; - - // - - nodeFrame.update(); - - // - - renderContext.depth = this.depth; - renderContext.stencil = this.stencil; - - if (!renderContext.clippingContext) renderContext.clippingContext = new ClippingContext(); - renderContext.clippingContext.updateGlobal(this, camera); - - // - - sceneRef.onBeforeRender(this, scene, camera, renderTarget); - - // - - const renderList = this._renderLists.get(scene, camera); - renderList.begin(); - - this._projectObject(scene, camera, 0, renderList); - - // include lights from target scene - if (targetScene !== scene) { - targetScene.traverseVisible(function (object) { - if (object.isLight && object.layers.test(camera.layers)) { - renderList.pushLight(object); - } - }); - } - - renderList.finish(); - - // - - if (renderTarget !== null) { - this._textures.updateRenderTarget(renderTarget, activeMipmapLevel); - - const renderTargetData = this._textures.get(renderTarget); - - renderContext.textures = renderTargetData.textures; - renderContext.depthTexture = renderTargetData.depthTexture; - } else { - renderContext.textures = null; - renderContext.depthTexture = null; - } - - // - - this._nodes.updateScene(sceneRef); - - // - - this._background.update(sceneRef, renderList, renderContext); - - // process render lists - - const opaqueObjects = renderList.opaque; - const transparentObjects = renderList.transparent; - const lightsNode = renderList.lightsNode; - - if (this.opaque === true && opaqueObjects.length > 0) this._renderObjects(opaqueObjects, camera, sceneRef, lightsNode); - if (this.transparent === true && transparentObjects.length > 0) this._renderObjects(transparentObjects, camera, sceneRef, lightsNode); - - // restore render tree - - nodeFrame.renderId = previousRenderId; - - this._currentRenderContext = previousRenderContext; - this._currentRenderObjectFunction = previousRenderObjectFunction; - this._compilationPromises = previousCompilationPromises; - - this._handleObjectFunction = this._renderObjectDirect; - - // wait for all promises setup by backends awaiting compilation/linking/pipeline creation to complete - - await Promise.all(compilationPromises); - } - - async renderAsync(scene, camera) { - if (this._initialized === false) await this.init(); - - const renderContext = this._renderScene(scene, camera); - - await this.backend.resolveTimestampAsync(renderContext, 'render'); - } - - setMRT(mrt) { - this._mrt = mrt; - - return this; - } - - getMRT() { - return this._mrt; - } - - _renderBundle(bundle, sceneRef, lightsNode) { - const { object, camera, renderList } = bundle; - - const renderContext = this._currentRenderContext; - const renderContextData = this.backend.get(renderContext); - - // - - const renderBundle = this._bundles.get(object, camera); - - const renderBundleData = this.backend.get(renderBundle); - if (renderBundleData.renderContexts === undefined) renderBundleData.renderContexts = new Set(); - - // - - const renderBundleNeedsUpdate = renderBundleData.renderContexts.has(renderContext) === false || object.needsUpdate === true; - - renderBundleData.renderContexts.add(renderContext); - - if (renderBundleNeedsUpdate) { - if (renderContextData.renderObjects === undefined || object.needsUpdate === true) { - const nodeFrame = this._nodes.nodeFrame; - - renderContextData.renderObjects = []; - renderContextData.renderBundles = []; - renderContextData.scene = sceneRef; - renderContextData.camera = camera; - renderContextData.renderId = nodeFrame.renderId; - - renderContextData.registerBundlesPhase = true; - } - - this._currentRenderBundle = renderBundle; - - const opaqueObjects = renderList.opaque; - - if (opaqueObjects.length > 0) this._renderObjects(opaqueObjects, camera, sceneRef, lightsNode); - - this._currentRenderBundle = null; - - // - - object.needsUpdate = false; - } else { - const renderContext = this._currentRenderContext; - const renderContextData = this.backend.get(renderContext); - - for (let i = 0, l = renderContextData.renderObjects.length; i < l; i++) { - const renderObject = renderContextData.renderObjects[i]; - - this._nodes.updateBefore(renderObject); - - // - - renderObject.object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, renderObject.object.matrixWorld); - renderObject.object.normalMatrix.getNormalMatrix(renderObject.object.modelViewMatrix); - - this._nodes.updateForRender(renderObject); - this._bindings.updateForRender(renderObject); - - this.backend.draw(renderObject, this.info); - - this._nodes.updateAfter(renderObject); - } - } - } - - render(scene, camera) { - if (this._initialized === false) { - console.warn('THREE.Renderer: .render() called before the backend is initialized. Try using .renderAsync() instead.'); - - return this.renderAsync(scene, camera); - } - - this._renderScene(scene, camera); - } - - _getFrameBufferTarget() { - const { currentColorSpace } = this; - - const useToneMapping = this._renderTarget === null && this.toneMapping !== NoToneMapping; - const useColorSpace = this._renderTarget === null && currentColorSpace !== LinearSRGBColorSpace && currentColorSpace !== NoColorSpace; - - if (useToneMapping === false && useColorSpace === false) return null; - - const { width, height } = this.getDrawingBufferSize(_drawingBufferSize); - const { depth, stencil } = this; - - let frameBufferTarget = this._frameBufferTarget; - - if (frameBufferTarget === null) { - frameBufferTarget = new RenderTarget(width, height, { - depthBuffer: depth, - stencilBuffer: stencil, - type: HalfFloatType, // FloatType - format: RGBAFormat, - colorSpace: LinearSRGBColorSpace, - generateMipmaps: false, - minFilter: LinearFilter, - magFilter: LinearFilter, - samples: this.samples, - }); - - frameBufferTarget.isPostProcessingRenderTarget = true; - - this._frameBufferTarget = frameBufferTarget; - } - - frameBufferTarget.depthBuffer = depth; - frameBufferTarget.stencilBuffer = stencil; - frameBufferTarget.setSize(width, height); - frameBufferTarget.viewport.copy(this._viewport); - frameBufferTarget.scissor.copy(this._scissor); - frameBufferTarget.viewport.multiplyScalar(this._pixelRatio); - frameBufferTarget.scissor.multiplyScalar(this._pixelRatio); - frameBufferTarget.scissorTest = this._scissorTest; - - return frameBufferTarget; - } - - _renderScene(scene, camera, useFrameBufferTarget = true) { - const frameBufferTarget = useFrameBufferTarget ? this._getFrameBufferTarget() : null; - - // preserve render tree - - const nodeFrame = this._nodes.nodeFrame; - - const previousRenderId = nodeFrame.renderId; - const previousRenderContext = this._currentRenderContext; - const previousRenderObjectFunction = this._currentRenderObjectFunction; - - // - - const sceneRef = scene.isScene === true ? scene : _scene; - - const outputRenderTarget = this._renderTarget; - - const activeCubeFace = this._activeCubeFace; - const activeMipmapLevel = this._activeMipmapLevel; - - // - - let renderTarget; - - if (frameBufferTarget !== null) { - renderTarget = frameBufferTarget; - - this.setRenderTarget(renderTarget); - } else { - renderTarget = outputRenderTarget; - } - - // - - const renderContext = this._renderContexts.get(scene, camera, renderTarget); - - this._currentRenderContext = renderContext; - this._currentRenderObjectFunction = this._renderObjectFunction || this.renderObject; - - // - - this.info.calls++; - this.info.render.calls++; - this.info.render.frameCalls++; - - nodeFrame.renderId = this.info.calls; - - // - - const coordinateSystem = this.coordinateSystem; - - if (camera.coordinateSystem !== coordinateSystem) { - camera.coordinateSystem = coordinateSystem; - - camera.updateProjectionMatrix(); - } - - // - - if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); - - if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); - - // - - let viewport = this._viewport; - let scissor = this._scissor; - let pixelRatio = this._pixelRatio; - - if (renderTarget !== null) { - viewport = renderTarget.viewport; - scissor = renderTarget.scissor; - pixelRatio = 1; - } - - this.getDrawingBufferSize(_drawingBufferSize); - - _screen.set(0, 0, _drawingBufferSize.width, _drawingBufferSize.height); - - const minDepth = viewport.minDepth === undefined ? 0 : viewport.minDepth; - const maxDepth = viewport.maxDepth === undefined ? 1 : viewport.maxDepth; - - renderContext.viewportValue.copy(viewport).multiplyScalar(pixelRatio).floor(); - renderContext.viewportValue.width >>= activeMipmapLevel; - renderContext.viewportValue.height >>= activeMipmapLevel; - renderContext.viewportValue.minDepth = minDepth; - renderContext.viewportValue.maxDepth = maxDepth; - renderContext.viewport = renderContext.viewportValue.equals(_screen) === false; - - renderContext.scissorValue.copy(scissor).multiplyScalar(pixelRatio).floor(); - renderContext.scissor = this._scissorTest && renderContext.scissorValue.equals(_screen) === false; - renderContext.scissorValue.width >>= activeMipmapLevel; - renderContext.scissorValue.height >>= activeMipmapLevel; - - if (!renderContext.clippingContext) renderContext.clippingContext = new ClippingContext(); - renderContext.clippingContext.updateGlobal(this, camera); - - // - - sceneRef.onBeforeRender(this, scene, camera, renderTarget); - - // - - _projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); - _frustum.setFromProjectionMatrix(_projScreenMatrix, coordinateSystem); - - const renderList = this._renderLists.get(scene, camera); - renderList.begin(); - - this._projectObject(scene, camera, 0, renderList); - - renderList.finish(); - - if (this.sortObjects === true) { - renderList.sort(this._opaqueSort, this._transparentSort); - } - - // - - if (renderTarget !== null) { - this._textures.updateRenderTarget(renderTarget, activeMipmapLevel); - - const renderTargetData = this._textures.get(renderTarget); - - renderContext.textures = renderTargetData.textures; - renderContext.depthTexture = renderTargetData.depthTexture; - renderContext.width = renderTargetData.width; - renderContext.height = renderTargetData.height; - renderContext.renderTarget = renderTarget; - renderContext.depth = renderTarget.depthBuffer; - renderContext.stencil = renderTarget.stencilBuffer; - } else { - renderContext.textures = null; - renderContext.depthTexture = null; - renderContext.width = this.domElement.width; - renderContext.height = this.domElement.height; - renderContext.depth = this.depth; - renderContext.stencil = this.stencil; - } - - renderContext.width >>= activeMipmapLevel; - renderContext.height >>= activeMipmapLevel; - renderContext.activeCubeFace = activeCubeFace; - renderContext.activeMipmapLevel = activeMipmapLevel; - renderContext.occlusionQueryCount = renderList.occlusionQueryCount; - - // - - this._nodes.updateScene(sceneRef); - - // - - this._background.update(sceneRef, renderList, renderContext); - - // - - this.backend.beginRender(renderContext); - - // process render lists - - const opaqueObjects = renderList.opaque; - const transparentObjects = renderList.transparent; - const bundles = renderList.bundles; - const lightsNode = renderList.lightsNode; - - if (bundles.length > 0) this._renderBundles(bundles, sceneRef, lightsNode); - if (this.opaque === true && opaqueObjects.length > 0) this._renderObjects(opaqueObjects, camera, sceneRef, lightsNode); - if (this.transparent === true && transparentObjects.length > 0) this._renderObjects(transparentObjects, camera, sceneRef, lightsNode); - - // finish render pass - - this.backend.finishRender(renderContext); - - // restore render tree - - nodeFrame.renderId = previousRenderId; - - this._currentRenderContext = previousRenderContext; - this._currentRenderObjectFunction = previousRenderObjectFunction; - - // - - if (frameBufferTarget !== null) { - this.setRenderTarget(outputRenderTarget, activeCubeFace, activeMipmapLevel); - - const quad = this._quad; - - if (this._nodes.hasOutputChange(renderTarget.texture)) { - quad.material.fragmentNode = this._nodes.getOutputNode(renderTarget.texture); - quad.material.needsUpdate = true; - } - - this._renderScene(quad, quad.camera, false); - } - - // - - sceneRef.onAfterRender(this, scene, camera, renderTarget); - - // - - return renderContext; - } - - getMaxAnisotropy() { - return this.backend.getMaxAnisotropy(); - } - - getActiveCubeFace() { - return this._activeCubeFace; - } - - getActiveMipmapLevel() { - return this._activeMipmapLevel; - } - - async setAnimationLoop(callback) { - if (this._initialized === false) await this.init(); - - this._animation.setAnimationLoop(callback); - } - - async getArrayBufferAsync(attribute) { - return await this.backend.getArrayBufferAsync(attribute); - } - - getContext() { - return this.backend.getContext(); - } - - getPixelRatio() { - return this._pixelRatio; - } - - getDrawingBufferSize(target) { - return target.set(this._width * this._pixelRatio, this._height * this._pixelRatio).floor(); - } - - getSize(target) { - return target.set(this._width, this._height); - } - - setPixelRatio(value = 1) { - this._pixelRatio = value; - - this.setSize(this._width, this._height, false); - } - - setDrawingBufferSize(width, height, pixelRatio) { - this._width = width; - this._height = height; - - this._pixelRatio = pixelRatio; - - this.domElement.width = Math.floor(width * pixelRatio); - this.domElement.height = Math.floor(height * pixelRatio); - - this.setViewport(0, 0, width, height); - - if (this._initialized) this.backend.updateSize(); - } - - setSize(width, height, updateStyle = true) { - this._width = width; - this._height = height; - - this.domElement.width = Math.floor(width * this._pixelRatio); - this.domElement.height = Math.floor(height * this._pixelRatio); - - if (updateStyle === true) { - this.domElement.style.width = width + 'px'; - this.domElement.style.height = height + 'px'; - } - - this.setViewport(0, 0, width, height); - - if (this._initialized) this.backend.updateSize(); - } - - setOpaqueSort(method) { - this._opaqueSort = method; - } - - setTransparentSort(method) { - this._transparentSort = method; - } - - getScissor(target) { - const scissor = this._scissor; - - target.x = scissor.x; - target.y = scissor.y; - target.width = scissor.width; - target.height = scissor.height; - - return target; - } - - setScissor(x, y, width, height) { - const scissor = this._scissor; - - if (x.isVector4) { - scissor.copy(x); - } else { - scissor.set(x, y, width, height); - } - } - - getScissorTest() { - return this._scissorTest; - } - - setScissorTest(boolean) { - this._scissorTest = boolean; - - this.backend.setScissorTest(boolean); - } - - getViewport(target) { - return target.copy(this._viewport); - } - - setViewport(x, y, width, height, minDepth = 0, maxDepth = 1) { - const viewport = this._viewport; - - if (x.isVector4) { - viewport.copy(x); - } else { - viewport.set(x, y, width, height); - } - - viewport.minDepth = minDepth; - viewport.maxDepth = maxDepth; - } - - getClearColor(target) { - return target.copy(this._clearColor); - } - - setClearColor(color, alpha = 1) { - this._clearColor.set(color); - this._clearColor.a = alpha; - } - - getClearAlpha() { - return this._clearColor.a; - } - - setClearAlpha(alpha) { - this._clearColor.a = alpha; - } - - getClearDepth() { - return this._clearDepth; - } - - setClearDepth(depth) { - this._clearDepth = depth; - } - - getClearStencil() { - return this._clearStencil; - } - - setClearStencil(stencil) { - this._clearStencil = stencil; - } - - isOccluded(object) { - const renderContext = this._currentRenderContext; - - return renderContext && this.backend.isOccluded(renderContext, object); - } - - clear(color = true, depth = true, stencil = true) { - if (this._initialized === false) { - console.warn('THREE.Renderer: .clear() called before the backend is initialized. Try using .clearAsync() instead.'); - - return this.clearAsync(color, depth, stencil); - } - - const renderTarget = this._renderTarget || this._getFrameBufferTarget(); - - let renderTargetData = null; - - if (renderTarget !== null) { - this._textures.updateRenderTarget(renderTarget); - - renderTargetData = this._textures.get(renderTarget); - } - - this.backend.clear(color, depth, stencil, renderTargetData); - - if (renderTarget !== null && this._renderTarget === null) { - // If a color space transform or tone mapping is required, - // the clear operation clears the intermediate renderTarget texture, but does not update the screen canvas. - - const quad = this._quad; - - if (this._nodes.hasOutputChange(renderTarget.texture)) { - quad.material.fragmentNode = this._nodes.getOutputNode(renderTarget.texture); - quad.material.needsUpdate = true; - } - - this._renderScene(quad, quad.camera, false); - } - } - - clearColor() { - return this.clear(true, false, false); - } - - clearDepth() { - return this.clear(false, true, false); - } - - clearStencil() { - return this.clear(false, false, true); - } - - async clearAsync(color = true, depth = true, stencil = true) { - if (this._initialized === false) await this.init(); - - this.clear(color, depth, stencil); - } - - clearColorAsync() { - return this.clearAsync(true, false, false); - } - - clearDepthAsync() { - return this.clearAsync(false, true, false); - } - - clearStencilAsync() { - return this.clearAsync(false, false, true); - } - - get currentColorSpace() { - const renderTarget = this._renderTarget; - - if (renderTarget !== null) { - const texture = renderTarget.texture; - - return (Array.isArray(texture) ? texture[0] : texture).colorSpace; - } - - return this.outputColorSpace; - } - - dispose() { - this.info.dispose(); - - this._animation.dispose(); - this._objects.dispose(); - this._pipelines.dispose(); - this._nodes.dispose(); - this._bindings.dispose(); - this._renderLists.dispose(); - this._renderContexts.dispose(); - this._textures.dispose(); - - this.setRenderTarget(null); - this.setAnimationLoop(null); - } - - setRenderTarget(renderTarget, activeCubeFace = 0, activeMipmapLevel = 0) { - this._renderTarget = renderTarget; - this._activeCubeFace = activeCubeFace; - this._activeMipmapLevel = activeMipmapLevel; - } - - getRenderTarget() { - return this._renderTarget; - } - - setRenderObjectFunction(renderObjectFunction) { - this._renderObjectFunction = renderObjectFunction; - } - - getRenderObjectFunction() { - return this._renderObjectFunction; - } - - async computeAsync(computeNodes) { - if (this._initialized === false) await this.init(); - - const nodeFrame = this._nodes.nodeFrame; - - const previousRenderId = nodeFrame.renderId; - - // - - this.info.calls++; - this.info.compute.calls++; - this.info.compute.frameCalls++; - - nodeFrame.renderId = this.info.calls; - - // - - const backend = this.backend; - const pipelines = this._pipelines; - const bindings = this._bindings; - const nodes = this._nodes; - - const computeList = Array.isArray(computeNodes) ? computeNodes : [computeNodes]; - - if (computeList[0] === undefined || computeList[0].isComputeNode !== true) { - throw new Error('THREE.Renderer: .compute() expects a ComputeNode.'); - } - - backend.beginCompute(computeNodes); - - for (const computeNode of computeList) { - // onInit - - if (pipelines.has(computeNode) === false) { - const dispose = () => { - computeNode.removeEventListener('dispose', dispose); - - pipelines.delete(computeNode); - bindings.delete(computeNode); - nodes.delete(computeNode); - }; - - computeNode.addEventListener('dispose', dispose); - - // - - computeNode.onInit({ renderer: this }); - } - - nodes.updateForCompute(computeNode); - bindings.updateForCompute(computeNode); - - const computeBindings = bindings.getForCompute(computeNode); - const computePipeline = pipelines.getForCompute(computeNode, computeBindings); - - backend.compute(computeNodes, computeNode, computeBindings, computePipeline); - } - - backend.finishCompute(computeNodes); - - await this.backend.resolveTimestampAsync(computeNodes, 'compute'); - - // - - nodeFrame.renderId = previousRenderId; - } - - async hasFeatureAsync(name) { - if (this._initialized === false) await this.init(); - - return this.backend.hasFeature(name); - } - - hasFeature(name) { - if (this._initialized === false) { - console.warn('THREE.Renderer: .hasFeature() called before the backend is initialized. Try using .hasFeatureAsync() instead.'); - - return false; - } - - return this.backend.hasFeature(name); - } - - copyFramebufferToTexture(framebufferTexture) { - const renderContext = this._currentRenderContext; - - this._textures.updateTexture(framebufferTexture); - - this.backend.copyFramebufferToTexture(framebufferTexture, renderContext); - } - - copyTextureToTexture(srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0) { - this._textures.updateTexture(srcTexture); - this._textures.updateTexture(dstTexture); - - this.backend.copyTextureToTexture(srcTexture, dstTexture, srcRegion, dstPosition, level); - } - - readRenderTargetPixelsAsync(renderTarget, x, y, width, height, index = 0) { - return this.backend.copyTextureToBuffer(renderTarget.textures[index], x, y, width, height); - } - - _projectObject(object, camera, groupOrder, renderList) { - if (object.visible === false) return; - - const visible = object.layers.test(camera.layers); - - if (visible) { - if (object.isGroup) { - groupOrder = object.renderOrder; - } else if (object.isLOD) { - if (object.autoUpdate === true) object.update(camera); - } else if (object.isLight) { - renderList.pushLight(object); - } else if (object.isSprite) { - if (!object.frustumCulled || _frustum.intersectsSprite(object)) { - if (this.sortObjects === true) { - _vector3.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix); - } - - const geometry = object.geometry; - const material = object.material; - - if (material.visible) { - renderList.push(object, geometry, material, groupOrder, _vector3.z, null); - } - } - } else if (object.isLineLoop) { - console.error('THREE.Renderer: Objects of type THREE.LineLoop are not supported. Please use THREE.Line or THREE.LineSegments.'); - } else if (object.isMesh || object.isLine || object.isPoints) { - if (!object.frustumCulled || _frustum.intersectsObject(object)) { - const geometry = object.geometry; - const material = object.material; - - if (this.sortObjects === true) { - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - - _vector3.copy(geometry.boundingSphere.center).applyMatrix4(object.matrixWorld).applyMatrix4(_projScreenMatrix); - } - - if (Array.isArray(material)) { - const groups = geometry.groups; - - for (let i = 0, l = groups.length; i < l; i++) { - const group = groups[i]; - const groupMaterial = material[group.materialIndex]; - - if (groupMaterial && groupMaterial.visible) { - renderList.push(object, geometry, groupMaterial, groupOrder, _vector3.z, group); - } - } - } else if (material.visible) { - renderList.push(object, geometry, material, groupOrder, _vector3.z, null); - } - } - } - } - - if (object.static === true) { - const baseRenderList = renderList; - - // replace render list - renderList = this._renderLists.get(object, camera); - - renderList.begin(); - - baseRenderList.pushBundle({ - object, - camera, - renderList, - }); - - renderList.finish(); - } - - const children = object.children; - - for (let i = 0, l = children.length; i < l; i++) { - this._projectObject(children[i], camera, groupOrder, renderList); - } - } - - _renderBundles(bundles, sceneRef, lightsNode) { - for (const bundle of bundles) { - this._renderBundle(bundle, sceneRef, lightsNode); - } - } - - _renderObjects(renderList, camera, scene, lightsNode) { - // process renderable objects - - for (let i = 0, il = renderList.length; i < il; i++) { - const renderItem = renderList[i]; - - // @TODO: Add support for multiple materials per object. This will require to extract - // the material from the renderItem object and pass it with its group data to renderObject(). - - const { object, geometry, material, group } = renderItem; - - if (camera.isArrayCamera) { - const cameras = camera.cameras; - - for (let j = 0, jl = cameras.length; j < jl; j++) { - const camera2 = cameras[j]; - - if (object.layers.test(camera2.layers)) { - const vp = camera2.viewport; - const minDepth = vp.minDepth === undefined ? 0 : vp.minDepth; - const maxDepth = vp.maxDepth === undefined ? 1 : vp.maxDepth; - - const viewportValue = this._currentRenderContext.viewportValue; - viewportValue.copy(vp).multiplyScalar(this._pixelRatio).floor(); - viewportValue.minDepth = minDepth; - viewportValue.maxDepth = maxDepth; - - this.backend.updateViewport(this._currentRenderContext); - - this._currentRenderObjectFunction(object, scene, camera2, geometry, material, group, lightsNode); - } - } - } else { - this._currentRenderObjectFunction(object, scene, camera, geometry, material, group, lightsNode); - } - } - } - - renderObject(object, scene, camera, geometry, material, group, lightsNode) { - let overridePositionNode; - let overrideFragmentNode; - let overrideDepthNode; - - // - - object.onBeforeRender(this, scene, camera, geometry, material, group); - - // - - if (scene.overrideMaterial !== null) { - const overrideMaterial = scene.overrideMaterial; - - if (material.positionNode && material.positionNode.isNode) { - overridePositionNode = overrideMaterial.positionNode; - overrideMaterial.positionNode = material.positionNode; - } - - if (overrideMaterial.isShadowNodeMaterial) { - overrideMaterial.side = material.shadowSide === null ? material.side : material.shadowSide; - - if (material.depthNode && material.depthNode.isNode) { - overrideDepthNode = overrideMaterial.depthNode; - overrideMaterial.depthNode = material.depthNode; - } - - if (material.shadowNode && material.shadowNode.isNode) { - overrideFragmentNode = overrideMaterial.fragmentNode; - overrideMaterial.fragmentNode = material.shadowNode; - } - - if (this.localClippingEnabled) { - if (material.clipShadows) { - if (overrideMaterial.clippingPlanes !== material.clippingPlanes) { - overrideMaterial.clippingPlanes = material.clippingPlanes; - overrideMaterial.needsUpdate = true; - } - - if (overrideMaterial.clipIntersection !== material.clipIntersection) { - overrideMaterial.clipIntersection = material.clipIntersection; - } - } else if (Array.isArray(overrideMaterial.clippingPlanes)) { - overrideMaterial.clippingPlanes = null; - overrideMaterial.needsUpdate = true; - } - } - } - - material = overrideMaterial; - } - - // - - if (material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false) { - material.side = BackSide; - this._handleObjectFunction(object, material, scene, camera, lightsNode, group, 'backSide'); // create backSide pass id - - material.side = FrontSide; - this._handleObjectFunction(object, material, scene, camera, lightsNode, group); // use default pass id - - material.side = DoubleSide; - } else { - this._handleObjectFunction(object, material, scene, camera, lightsNode, group); - } - - // - - if (overridePositionNode !== undefined) { - scene.overrideMaterial.positionNode = overridePositionNode; - } - - if (overrideDepthNode !== undefined) { - scene.overrideMaterial.depthNode = overrideDepthNode; - } - - if (overrideFragmentNode !== undefined) { - scene.overrideMaterial.fragmentNode = overrideFragmentNode; - } - - // - - object.onAfterRender(this, scene, camera, geometry, material, group); - } - - _renderObjectDirect(object, material, scene, camera, lightsNode, group, passId) { - const renderObject = this._objects.get(object, material, scene, camera, lightsNode, this._currentRenderContext, passId); - renderObject.drawRange = group || object.geometry.drawRange; - - // - - this._nodes.updateBefore(renderObject); - - // - - object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, object.matrixWorld); - object.normalMatrix.getNormalMatrix(object.modelViewMatrix); - - // - - this._nodes.updateForRender(renderObject); - this._geometries.updateForRender(renderObject); - this._bindings.updateForRender(renderObject); - this._pipelines.updateForRender(renderObject); - - // - - if (this._currentRenderBundle !== null && this._currentRenderBundle.needsUpdate === true) { - const renderObjectData = this.backend.get(renderObject); - - renderObjectData.bundleEncoder = undefined; - renderObjectData.lastPipelineGPU = undefined; - } - - this.backend.draw(renderObject, this.info); - - if (this._currentRenderBundle !== null) { - const renderContextData = this.backend.get(this._currentRenderContext); - - renderContextData.renderObjects.push(renderObject); - } - - this._nodes.updateAfter(renderObject); - } - - _createObjectPipeline(object, material, scene, camera, lightsNode, passId) { - const renderObject = this._objects.get(object, material, scene, camera, lightsNode, this._currentRenderContext, passId); - - // - - this._nodes.updateBefore(renderObject); - - // - - this._nodes.updateForRender(renderObject); - this._geometries.updateForRender(renderObject); - this._bindings.updateForRender(renderObject); - - this._pipelines.getForRender(renderObject, this._compilationPromises); - - this._nodes.updateAfter(renderObject); - } - - get compute() { - return this.computeAsync; - } - - get compile() { - return this.compileAsync; - } -} - -class Binding { - constructor(name = '') { - this.name = name; - - this.visibility = 0; - } - - setVisibility(visibility) { - this.visibility |= visibility; - } - - clone() { - return Object.assign(new this.constructor(), this); - } -} - -function getFloatLength(floatLength) { - // ensure chunk size alignment (STD140 layout) - - return floatLength + ((GPU_CHUNK_BYTES - (floatLength % GPU_CHUNK_BYTES)) % GPU_CHUNK_BYTES); -} - -class Buffer extends Binding { - constructor(name, buffer = null) { - super(name); - - this.isBuffer = true; - - this.bytesPerElement = Float32Array.BYTES_PER_ELEMENT; - - this._buffer = buffer; - } - - get byteLength() { - return getFloatLength(this._buffer.byteLength); - } - - get buffer() { - return this._buffer; - } - - update() { - return true; - } -} - -class UniformBuffer extends Buffer { - constructor(name, buffer = null) { - super(name, buffer); - - this.isUniformBuffer = true; - } -} - -let _id$4 = 0; - -class NodeUniformBuffer extends UniformBuffer { - constructor(nodeUniform, groupNode) { - super('UniformBuffer_' + _id$4++, nodeUniform ? nodeUniform.value : null); - - this.nodeUniform = nodeUniform; - this.groupNode = groupNode; - } - - get buffer() { - return this.nodeUniform.value; - } -} - -class UniformsGroup extends UniformBuffer { - constructor(name) { - super(name); - - this.isUniformsGroup = true; - - this._values = null; - - // the order of uniforms in this array must match the order of uniforms in the shader - - this.uniforms = []; - } - - addUniform(uniform) { - this.uniforms.push(uniform); - - return this; - } - - removeUniform(uniform) { - const index = this.uniforms.indexOf(uniform); - - if (index !== -1) { - this.uniforms.splice(index, 1); - } - - return this; - } - - get values() { - if (this._values === null) { - this._values = Array.from(this.buffer); - } - - return this._values; - } - - get buffer() { - let buffer = this._buffer; - - if (buffer === null) { - const byteLength = this.byteLength; - - buffer = new Float32Array(new ArrayBuffer(byteLength)); - - this._buffer = buffer; - } - - return buffer; - } - - get byteLength() { - let offset = 0; // global buffer offset in bytes - - for (let i = 0, l = this.uniforms.length; i < l; i++) { - const uniform = this.uniforms[i]; - - const { boundary, itemSize } = uniform; - - // offset within a single chunk in bytes - - const chunkOffset = offset % GPU_CHUNK_BYTES; - const remainingSizeInChunk = GPU_CHUNK_BYTES - chunkOffset; - - // conformance tests - - if (chunkOffset !== 0 && remainingSizeInChunk - boundary < 0) { - // check for chunk overflow - - offset += GPU_CHUNK_BYTES - chunkOffset; - } else if (chunkOffset % boundary !== 0) { - // check for correct alignment - - offset += chunkOffset % boundary; - } - - uniform.offset = offset / this.bytesPerElement; - - offset += itemSize * this.bytesPerElement; - } - - return Math.ceil(offset / GPU_CHUNK_BYTES) * GPU_CHUNK_BYTES; - } - - update() { - let updated = false; - - for (const uniform of this.uniforms) { - if (this.updateByType(uniform) === true) { - updated = true; - } - } - - return updated; - } - - updateByType(uniform) { - if (uniform.isNumberUniform) return this.updateNumber(uniform); - if (uniform.isVector2Uniform) return this.updateVector2(uniform); - if (uniform.isVector3Uniform) return this.updateVector3(uniform); - if (uniform.isVector4Uniform) return this.updateVector4(uniform); - if (uniform.isColorUniform) return this.updateColor(uniform); - if (uniform.isMatrix3Uniform) return this.updateMatrix3(uniform); - if (uniform.isMatrix4Uniform) return this.updateMatrix4(uniform); - - console.error('THREE.WebGPUUniformsGroup: Unsupported uniform type.', uniform); - } - - updateNumber(uniform) { - let updated = false; - - const a = this.values; - const v = uniform.getValue(); - const offset = uniform.offset; - - if (a[offset] !== v) { - const b = this.buffer; - - b[offset] = a[offset] = v; - updated = true; - } - - return updated; - } - - updateVector2(uniform) { - let updated = false; - - const a = this.values; - const v = uniform.getValue(); - const offset = uniform.offset; - - if (a[offset + 0] !== v.x || a[offset + 1] !== v.y) { - const b = this.buffer; - - b[offset + 0] = a[offset + 0] = v.x; - b[offset + 1] = a[offset + 1] = v.y; - - updated = true; - } - - return updated; - } - - updateVector3(uniform) { - let updated = false; - - const a = this.values; - const v = uniform.getValue(); - const offset = uniform.offset; - - if (a[offset + 0] !== v.x || a[offset + 1] !== v.y || a[offset + 2] !== v.z) { - const b = this.buffer; - - b[offset + 0] = a[offset + 0] = v.x; - b[offset + 1] = a[offset + 1] = v.y; - b[offset + 2] = a[offset + 2] = v.z; - - updated = true; - } - - return updated; - } - - updateVector4(uniform) { - let updated = false; - - const a = this.values; - const v = uniform.getValue(); - const offset = uniform.offset; - - if (a[offset + 0] !== v.x || a[offset + 1] !== v.y || a[offset + 2] !== v.z || a[offset + 4] !== v.w) { - const b = this.buffer; - - b[offset + 0] = a[offset + 0] = v.x; - b[offset + 1] = a[offset + 1] = v.y; - b[offset + 2] = a[offset + 2] = v.z; - b[offset + 3] = a[offset + 3] = v.w; - - updated = true; - } - - return updated; - } - - updateColor(uniform) { - let updated = false; - - const a = this.values; - const c = uniform.getValue(); - const offset = uniform.offset; - - if (a[offset + 0] !== c.r || a[offset + 1] !== c.g || a[offset + 2] !== c.b) { - const b = this.buffer; - - b[offset + 0] = a[offset + 0] = c.r; - b[offset + 1] = a[offset + 1] = c.g; - b[offset + 2] = a[offset + 2] = c.b; - - updated = true; - } - - return updated; - } - - updateMatrix3(uniform) { - let updated = false; - - const a = this.values; - const e = uniform.getValue().elements; - const offset = uniform.offset; - - if (a[offset + 0] !== e[0] || a[offset + 1] !== e[1] || a[offset + 2] !== e[2] || a[offset + 4] !== e[3] || a[offset + 5] !== e[4] || a[offset + 6] !== e[5] || a[offset + 8] !== e[6] || a[offset + 9] !== e[7] || a[offset + 10] !== e[8]) { - const b = this.buffer; - - b[offset + 0] = a[offset + 0] = e[0]; - b[offset + 1] = a[offset + 1] = e[1]; - b[offset + 2] = a[offset + 2] = e[2]; - b[offset + 4] = a[offset + 4] = e[3]; - b[offset + 5] = a[offset + 5] = e[4]; - b[offset + 6] = a[offset + 6] = e[5]; - b[offset + 8] = a[offset + 8] = e[6]; - b[offset + 9] = a[offset + 9] = e[7]; - b[offset + 10] = a[offset + 10] = e[8]; - - updated = true; - } - - return updated; - } - - updateMatrix4(uniform) { - let updated = false; - - const a = this.values; - const e = uniform.getValue().elements; - const offset = uniform.offset; - - if (arraysEqual(a, e, offset) === false) { - const b = this.buffer; - b.set(e, offset); - setArray(a, e, offset); - updated = true; - } - - return updated; - } -} - -function setArray(a, b, offset) { - for (let i = 0, l = b.length; i < l; i++) { - a[offset + i] = b[i]; - } -} - -function arraysEqual(a, b, offset) { - for (let i = 0, l = b.length; i < l; i++) { - if (a[offset + i] !== b[i]) return false; - } - - return true; -} - -let _id$3 = 0; - -class NodeUniformsGroup extends UniformsGroup { - constructor(name, groupNode) { - super(name); - - this.id = _id$3++; - this.groupNode = groupNode; - - this.isNodeUniformsGroup = true; - } - - getNodes() { - const nodes = []; - - for (const uniform of this.uniforms) { - const node = uniform.nodeUniform.node; - - if (!node) throw new Error('NodeUniformsGroup: Uniform has no node.'); - - nodes.push(node); - } - - return nodes; - } -} - -let _id$2 = 0; - -class SampledTexture extends Binding { - constructor(name, texture) { - super(name); - - this.id = _id$2++; - - this.texture = texture; - this.version = texture ? texture.version : 0; - this.store = false; - this.generation = null; - - this.isSampledTexture = true; - } - - needsBindingsUpdate(generation) { - const { texture } = this; - - if (generation !== this.generation) { - this.generation = generation; - - return true; - } - - return texture.isVideoTexture; - } - - update() { - const { texture, version } = this; - - if (version !== texture.version) { - this.version = texture.version; - - return true; - } - - return false; - } -} - -class NodeSampledTexture extends SampledTexture { - constructor(name, textureNode, groupNode, access = null) { - super(name, textureNode ? textureNode.value : null); - - this.textureNode = textureNode; - this.groupNode = groupNode; - - this.access = access; - } - - needsBindingsUpdate(generation) { - return this.textureNode.value !== this.texture || super.needsBindingsUpdate(generation); - } - - update() { - const { textureNode } = this; - - if (this.texture !== textureNode.value) { - this.texture = textureNode.value; - - return true; - } - - return super.update(); - } -} - -class NodeSampledCubeTexture extends NodeSampledTexture { - constructor(name, textureNode, groupNode, access) { - super(name, textureNode, groupNode, access); - - this.isSampledCubeTexture = true; - } -} - -class NodeSampledTexture3D extends NodeSampledTexture { - constructor(name, textureNode, groupNode, access) { - super(name, textureNode, groupNode, access); - - this.isSampledTexture3D = true; - } -} - -const glslMethods = { - [MathNode.ATAN2]: 'atan', - textureDimensions: 'textureSize', - equals: 'equal', -}; - -const precisionLib = { - low: 'lowp', - medium: 'mediump', - high: 'highp', -}; - -const supports$1 = { - swizzleAssign: true, - storageBuffer: false, -}; - -const defaultPrecisions = ` -precision highp float; -precision highp int; -precision highp sampler2D; -precision highp sampler3D; -precision highp samplerCube; -precision highp sampler2DArray; - -precision highp usampler2D; -precision highp usampler3D; -precision highp usamplerCube; -precision highp usampler2DArray; - -precision highp isampler2D; -precision highp isampler3D; -precision highp isamplerCube; -precision highp isampler2DArray; - -precision lowp sampler2DShadow; -`; - -class GLSLNodeBuilder extends NodeBuilder { - constructor(object, renderer) { - super(object, renderer, new GLSLNodeParser()); - - this.uniformGroups = {}; - this.transforms = []; - this.extensions = {}; - - this.instanceBindGroups = false; - - this.useComparisonMethod = true; - } - - getMethod(method) { - return glslMethods[method] || method; - } - - getOutputStructName() { - return ''; - } - - buildFunctionCode(shaderNode) { - const layout = shaderNode.layout; - const flowData = this.flowShaderNode(shaderNode); - - const parameters = []; - - for (const input of layout.inputs) { - parameters.push(this.getType(input.type) + ' ' + input.name); - } - - // - - const code = `${this.getType(layout.type)} ${layout.name}( ${parameters.join(', ')} ) { - - ${flowData.vars} - -${flowData.code} - return ${flowData.result}; - -}`; - - // - - return code; - } - - setupPBO(storageBufferNode) { - const attribute = storageBufferNode.value; - - if (attribute.pbo === undefined) { - const originalArray = attribute.array; - const numElements = attribute.count * attribute.itemSize; - - const { itemSize } = attribute; - - const isInteger = attribute.array.constructor.name.toLowerCase().includes('int'); - - let format = isInteger ? RedIntegerFormat : RedFormat; - - if (itemSize === 2) { - format = isInteger ? RGIntegerFormat : RGFormat; - } else if (itemSize === 3) { - format = isInteger ? RGBIntegerFormat : RGBFormat; - } else if (itemSize === 4) { - format = isInteger ? RGBAIntegerFormat : RGBAFormat; - } - - const typeMap = { - Float32Array: FloatType, - Uint8Array: UnsignedByteType, - Uint16Array: UnsignedShortType, - Uint32Array: UnsignedIntType, - Int8Array: ByteType, - Int16Array: ShortType, - Int32Array: IntType, - Uint8ClampedArray: UnsignedByteType, - }; - - const width = Math.pow(2, Math.ceil(Math.log2(Math.sqrt(numElements / itemSize)))); - let height = Math.ceil(numElements / itemSize / width); - if (width * height * itemSize < numElements) height++; // Ensure enough space - - const newSize = width * height * itemSize; - - const newArray = new originalArray.constructor(newSize); - - newArray.set(originalArray, 0); - - attribute.array = newArray; - - const pboTexture = new DataTexture(attribute.array, width, height, format, typeMap[attribute.array.constructor.name] || FloatType); - pboTexture.needsUpdate = true; - pboTexture.isPBOTexture = true; - - const pbo = new TextureNode(pboTexture, null, null); - pbo.setPrecision('high'); - - attribute.pboNode = pbo; - attribute.pbo = pbo.value; - - this.getUniformFromNode(attribute.pboNode, 'texture', this.shaderStage, this.context.label); - } - } - - getPropertyName(node, shaderStage = this.shaderStage) { - if (node.isNodeUniform && node.node.isTextureNode !== true && node.node.isBufferNode !== true) { - return shaderStage.charAt(0) + '_' + node.name; - } - - return super.getPropertyName(node, shaderStage); - } - - generatePBO(storageArrayElementNode) { - const { node, indexNode } = storageArrayElementNode; - const attribute = node.value; - - if (this.renderer.backend.has(attribute)) { - const attributeData = this.renderer.backend.get(attribute); - attributeData.pbo = attribute.pbo; - } - - const nodeUniform = this.getUniformFromNode(attribute.pboNode, 'texture', this.shaderStage, this.context.label); - const textureName = this.getPropertyName(nodeUniform); - - indexNode.increaseUsage(this); // force cache generate to be used as index in x,y - const indexSnippet = indexNode.build(this, 'uint'); - - const elementNodeData = this.getDataFromNode(storageArrayElementNode); - - let propertyName = elementNodeData.propertyName; - - if (propertyName === undefined) { - // property element - - const nodeVar = this.getVarFromNode(storageArrayElementNode); - - propertyName = this.getPropertyName(nodeVar); - - // property size - - const bufferNodeData = this.getDataFromNode(node); - - let propertySizeName = bufferNodeData.propertySizeName; - - if (propertySizeName === undefined) { - propertySizeName = propertyName + 'Size'; - - this.getVarFromNode(node, propertySizeName, 'uint'); - - this.addLineFlowCode(`${propertySizeName} = uint( textureSize( ${textureName}, 0 ).x )`); - - bufferNodeData.propertySizeName = propertySizeName; - } - - // - - const { itemSize } = attribute; - - const channel = '.' + vectorComponents.join('').slice(0, itemSize); - const uvSnippet = `ivec2(${indexSnippet} % ${propertySizeName}, ${indexSnippet} / ${propertySizeName})`; - - const snippet = this.generateTextureLoad(null, textureName, uvSnippet, null, '0'); - - // - - let prefix = 'vec4'; - - if (attribute.pbo.type === UnsignedIntType) { - prefix = 'uvec4'; - } else if (attribute.pbo.type === IntType) { - prefix = 'ivec4'; - } - - this.addLineFlowCode(`${propertyName} = ${prefix}(${snippet})${channel}`); - - elementNodeData.propertyName = propertyName; - } - - return propertyName; - } - - generateTextureLoad(texture, textureProperty, uvIndexSnippet, depthSnippet, levelSnippet = '0') { - if (depthSnippet) { - return `texelFetch( ${textureProperty}, ivec3( ${uvIndexSnippet}, ${depthSnippet} ), ${levelSnippet} )`; - } else { - return `texelFetch( ${textureProperty}, ${uvIndexSnippet}, ${levelSnippet} )`; - } - } - - generateTexture(texture, textureProperty, uvSnippet, depthSnippet) { - if (texture.isDepthTexture) { - return `texture( ${textureProperty}, ${uvSnippet} ).x`; - } else { - if (depthSnippet) uvSnippet = `vec3( ${uvSnippet}, ${depthSnippet} )`; - - return `texture( ${textureProperty}, ${uvSnippet} )`; - } - } - - generateTextureLevel(texture, textureProperty, uvSnippet, levelSnippet) { - return `textureLod( ${textureProperty}, ${uvSnippet}, ${levelSnippet} )`; - } - - generateTextureBias(texture, textureProperty, uvSnippet, biasSnippet) { - return `texture( ${textureProperty}, ${uvSnippet}, ${biasSnippet} )`; - } - - generateTextureGrad(texture, textureProperty, uvSnippet, gradSnippet) { - return `textureGrad( ${textureProperty}, ${uvSnippet}, ${gradSnippet[0]}, ${gradSnippet[1]} )`; - } - - generateTextureCompare(texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, shaderStage = this.shaderStage) { - if (shaderStage === 'fragment') { - return `texture( ${textureProperty}, vec3( ${uvSnippet}, ${compareSnippet} ) )`; - } else { - console.error(`WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${shaderStage} shader.`); - } - } - - getVars(shaderStage) { - const snippets = []; - - const vars = this.vars[shaderStage]; - - if (vars !== undefined) { - for (const variable of vars) { - snippets.push(`${this.getVar(variable.type, variable.name)};`); - } - } - - return snippets.join('\n\t'); - } - - getUniforms(shaderStage) { - const uniforms = this.uniforms[shaderStage]; - - const bindingSnippets = []; - const uniformGroups = {}; - - for (const uniform of uniforms) { - let snippet = null; - let group = false; - - if (uniform.type === 'texture') { - const texture = uniform.node.value; - - let typePrefix = ''; - - if (texture.isDataTexture === true) { - if (texture.type === UnsignedIntType) { - typePrefix = 'u'; - } else if (texture.type === IntType) { - typePrefix = 'i'; - } - } - - if (texture.compareFunction) { - snippet = `sampler2DShadow ${uniform.name};`; - } else if (texture.isDataArrayTexture === true) { - snippet = `${typePrefix}sampler2DArray ${uniform.name};`; - } else { - snippet = `${typePrefix}sampler2D ${uniform.name};`; - } - } else if (uniform.type === 'cubeTexture') { - snippet = `samplerCube ${uniform.name};`; - } else if (uniform.type === 'texture3D') { - snippet = `sampler3D ${uniform.name};`; - } else if (uniform.type === 'buffer') { - const bufferNode = uniform.node; - const bufferType = this.getType(bufferNode.bufferType); - const bufferCount = bufferNode.bufferCount; - - const bufferCountSnippet = bufferCount > 0 ? bufferCount : ''; - snippet = `${bufferNode.name} {\n\t${bufferType} ${uniform.name}[${bufferCountSnippet}];\n};\n`; - } else { - const vectorType = this.getVectorType(uniform.type); - - snippet = `${vectorType} ${this.getPropertyName(uniform, shaderStage)};`; - - group = true; - } - - const precision = uniform.node.precision; - - if (precision !== null) { - snippet = precisionLib[precision] + ' ' + snippet; - } - - if (group) { - snippet = '\t' + snippet; - - const groupName = uniform.groupNode.name; - const groupSnippets = uniformGroups[groupName] || (uniformGroups[groupName] = []); - - groupSnippets.push(snippet); - } else { - snippet = 'uniform ' + snippet; - - bindingSnippets.push(snippet); - } - } - - let output = ''; - - for (const name in uniformGroups) { - const groupSnippets = uniformGroups[name]; - - output += this._getGLSLUniformStruct(shaderStage + '_' + name, groupSnippets.join('\n')) + '\n'; - } - - output += bindingSnippets.join('\n'); - - return output; - } - - getTypeFromAttribute(attribute) { - let nodeType = super.getTypeFromAttribute(attribute); - - if (/^[iu]/.test(nodeType) && attribute.gpuType !== IntType) { - let dataAttribute = attribute; - - if (attribute.isInterleavedBufferAttribute) dataAttribute = attribute.data; - - const array = dataAttribute.array; - - if ((array instanceof Uint32Array || array instanceof Int32Array) === false) { - nodeType = nodeType.slice(1); - } - } - - return nodeType; - } - - getAttributes(shaderStage) { - let snippet = ''; - - if (shaderStage === 'vertex' || shaderStage === 'compute') { - const attributes = this.getAttributesArray(); - - let location = 0; - - for (const attribute of attributes) { - snippet += `layout( location = ${location++} ) in ${attribute.type} ${attribute.name};\n`; - } - } - - return snippet; - } - - getStructMembers(struct) { - const snippets = []; - const members = struct.getMemberTypes(); - - for (let i = 0; i < members.length; i++) { - const member = members[i]; - snippets.push(`layout( location = ${i} ) out ${member} m${i};`); - } - - return snippets.join('\n'); - } - - getStructs(shaderStage) { - const snippets = []; - const structs = this.structs[shaderStage]; - - if (structs.length === 0) { - return 'layout( location = 0 ) out vec4 fragColor;\n'; - } - - for (let index = 0, length = structs.length; index < length; index++) { - const struct = structs[index]; - - let snippet = '\n'; - snippet += this.getStructMembers(struct); - snippet += '\n'; - - snippets.push(snippet); - } - - return snippets.join('\n\n'); - } - - getVaryings(shaderStage) { - let snippet = ''; - - const varyings = this.varyings; - - if (shaderStage === 'vertex' || shaderStage === 'compute') { - for (const varying of varyings) { - if (shaderStage === 'compute') varying.needsInterpolation = true; - const type = varying.type; - const flat = type.includes('int') || type.includes('uv') || type.includes('iv') ? 'flat ' : ''; - - snippet += `${flat}${varying.needsInterpolation ? 'out' : '/*out*/'} ${type} ${varying.name};\n`; - } - } else if (shaderStage === 'fragment') { - for (const varying of varyings) { - if (varying.needsInterpolation) { - const type = varying.type; - const flat = type.includes('int') || type.includes('uv') || type.includes('iv') ? 'flat ' : ''; - - snippet += `${flat}in ${type} ${varying.name};\n`; - } - } - } - - return snippet; - } - - getVertexIndex() { - return 'uint( gl_VertexID )'; - } - - getInstanceIndex() { - return 'uint( gl_InstanceID )'; - } - - getDrawIndex() { - const extensions = this.renderer.backend.extensions; - - if (extensions.has('WEBGL_multi_draw')) { - return 'uint( gl_DrawID )'; - } - - return null; - } - - getFrontFacing() { - return 'gl_FrontFacing'; - } - - getFragCoord() { - return 'gl_FragCoord.xy'; - } - - getFragDepth() { - return 'gl_FragDepth'; - } - - enableExtension(name, behavior, shaderStage = this.shaderStage) { - const map = this.extensions[shaderStage] || (this.extensions[shaderStage] = new Map()); - - if (map.has(name) === false) { - map.set(name, { - name, - behavior, - }); - } - } - - getExtensions(shaderStage) { - const snippets = []; - - if (shaderStage === 'vertex') { - const ext = this.renderer.backend.extensions; - const isBatchedMesh = this.object.isBatchedMesh; - - if (isBatchedMesh && ext.has('WEBGL_multi_draw')) { - this.enableExtension('GL_ANGLE_multi_draw', 'require', shaderStage); - } - } - - const extensions = this.extensions[shaderStage]; - - if (extensions !== undefined) { - for (const { name, behavior } of extensions.values()) { - snippets.push(`#extension ${name} : ${behavior}`); - } - } - - return snippets.join('\n'); - } - - isAvailable(name) { - let result = supports$1[name]; - - if (result === undefined) { - if (name === 'float32Filterable') { - const extensions = this.renderer.backend.extensions; - - if (extensions.has('OES_texture_float_linear')) { - extensions.get('OES_texture_float_linear'); - result = true; - } else { - result = false; - } - } - - supports$1[name] = result; - } - - return result; - } - - isFlipY() { - return true; - } - - registerTransform(varyingName, attributeNode) { - this.transforms.push({ varyingName, attributeNode }); - } - - getTransforms(/* shaderStage */) { - const transforms = this.transforms; - - let snippet = ''; - - for (let i = 0; i < transforms.length; i++) { - const transform = transforms[i]; - - const attributeName = this.getPropertyName(transform.attributeNode); - - snippet += `${transform.varyingName} = ${attributeName};\n\t`; - } - - return snippet; - } - - _getGLSLUniformStruct(name, vars) { - return ` -layout( std140 ) uniform ${name} { -${vars} -};`; - } - - _getGLSLVertexCode(shaderData) { - return `#version 300 es - -// extensions -${shaderData.extensions} - -// precision -${defaultPrecisions} - -// uniforms -${shaderData.uniforms} - -// varyings -${shaderData.varyings} - -// attributes -${shaderData.attributes} - -// codes -${shaderData.codes} - -void main() { - - // vars - ${shaderData.vars} - - // transforms - ${shaderData.transforms} - - // flow - ${shaderData.flow} - - gl_PointSize = 1.0; - -} -`; - } - - _getGLSLFragmentCode(shaderData) { - return `#version 300 es - -${this.getSignature()} - -// precision -${defaultPrecisions} - -// uniforms -${shaderData.uniforms} - -// varyings -${shaderData.varyings} - -// codes -${shaderData.codes} - -${shaderData.structs} - -void main() { - - // vars - ${shaderData.vars} - - // flow - ${shaderData.flow} - -} -`; - } - - buildCode() { - const shadersData = this.material !== null ? { fragment: {}, vertex: {} } : { compute: {} }; - - for (const shaderStage in shadersData) { - let flow = '// code\n\n'; - flow += this.flowCode[shaderStage]; - - const flowNodes = this.flowNodes[shaderStage]; - const mainNode = flowNodes[flowNodes.length - 1]; - - for (const node of flowNodes) { - const flowSlotData = this.getFlowData(node /*, shaderStage*/); - const slotName = node.name; - - if (slotName) { - if (flow.length > 0) flow += '\n'; - - flow += `\t// flow -> ${slotName}\n\t`; - } - - flow += `${flowSlotData.code}\n\t`; - - if (node === mainNode && shaderStage !== 'compute') { - flow += '// result\n\t'; - - if (shaderStage === 'vertex') { - flow += 'gl_Position = '; - flow += `${flowSlotData.result};`; - } else if (shaderStage === 'fragment') { - if (!node.outputNode.isOutputStructNode) { - flow += 'fragColor = '; - flow += `${flowSlotData.result};`; - } - } - } - } - - const stageData = shadersData[shaderStage]; - - stageData.extensions = this.getExtensions(shaderStage); - stageData.uniforms = this.getUniforms(shaderStage); - stageData.attributes = this.getAttributes(shaderStage); - stageData.varyings = this.getVaryings(shaderStage); - stageData.vars = this.getVars(shaderStage); - stageData.structs = this.getStructs(shaderStage); - stageData.codes = this.getCodes(shaderStage); - stageData.transforms = this.getTransforms(shaderStage); - stageData.flow = flow; - } - - if (this.material !== null) { - this.vertexShader = this._getGLSLVertexCode(shadersData.vertex); - this.fragmentShader = this._getGLSLFragmentCode(shadersData.fragment); - } else { - this.computeShader = this._getGLSLVertexCode(shadersData.compute); - } - } - - getUniformFromNode(node, type, shaderStage, name = null) { - const uniformNode = super.getUniformFromNode(node, type, shaderStage, name); - const nodeData = this.getDataFromNode(node, shaderStage, this.globalCache); - - let uniformGPU = nodeData.uniformGPU; - - if (uniformGPU === undefined) { - const group = node.groupNode; - const groupName = group.name; - - const bindings = this.getBindGroupArray(groupName, shaderStage); - - if (type === 'texture') { - uniformGPU = new NodeSampledTexture(uniformNode.name, uniformNode.node, group); - bindings.push(uniformGPU); - } else if (type === 'cubeTexture') { - uniformGPU = new NodeSampledCubeTexture(uniformNode.name, uniformNode.node, group); - bindings.push(uniformGPU); - } else if (type === 'texture3D') { - uniformGPU = new NodeSampledTexture3D(uniformNode.name, uniformNode.node, group); - bindings.push(uniformGPU); - } else if (type === 'buffer') { - node.name = `NodeBuffer_${node.id}`; - uniformNode.name = `buffer${node.id}`; - - const buffer = new NodeUniformBuffer(node, group); - buffer.name = node.name; - - bindings.push(buffer); - - uniformGPU = buffer; - } else { - const uniformsStage = this.uniformGroups[shaderStage] || (this.uniformGroups[shaderStage] = {}); - - let uniformsGroup = uniformsStage[groupName]; - - if (uniformsGroup === undefined) { - uniformsGroup = new NodeUniformsGroup(shaderStage + '_' + groupName, group); - //uniformsGroup.setVisibility( gpuShaderStageLib[ shaderStage ] ); - - uniformsStage[groupName] = uniformsGroup; - - bindings.push(uniformsGroup); - } - - uniformGPU = this.getNodeUniform(uniformNode, type); - - uniformsGroup.addUniform(uniformGPU); - } - - nodeData.uniformGPU = uniformGPU; - } - - return uniformNode; - } -} - -let vector2 = null; -let vector4 = null; -let color4 = null; - -class Backend { - constructor(parameters = {}) { - this.parameters = Object.assign({}, parameters); - this.data = new WeakMap(); - this.renderer = null; - this.domElement = null; - } - - async init(renderer) { - this.renderer = renderer; - } - - // render context - - begin(/*renderContext*/) {} - - finish(/*renderContext*/) {} - - // render object - - draw(/*renderObject, info*/) {} - - // program - - createProgram(/*program*/) {} - - destroyProgram(/*program*/) {} - - // bindings - - createBindings(/*bingGroup, bindings*/) {} - - updateBindings(/*bingGroup, bindings*/) {} - - // pipeline - - createRenderPipeline(/*renderObject*/) {} - - createComputePipeline(/*computeNode, pipeline*/) {} - - destroyPipeline(/*pipeline*/) {} - - // cache key - - needsRenderUpdate(/*renderObject*/) {} // return Boolean ( fast test ) - - getRenderCacheKey(/*renderObject*/) {} // return String - - // node builder - - createNodeBuilder(/*renderObject*/) {} // return NodeBuilder (ADD IT) - - // textures - - createSampler(/*texture*/) {} - - createDefaultTexture(/*texture*/) {} - - createTexture(/*texture*/) {} - - copyTextureToBuffer(/*texture, x, y, width, height*/) {} - - // attributes - - createAttribute(/*attribute*/) {} - - createIndexAttribute(/*attribute*/) {} - - updateAttribute(/*attribute*/) {} - - destroyAttribute(/*attribute*/) {} - - // canvas - - getContext() {} - - updateSize() {} - - // utils - - resolveTimestampAsync(/*renderContext, type*/) {} - - hasFeatureAsync(/*name*/) {} // return Boolean - - hasFeature(/*name*/) {} // return Boolean - - getInstanceCount(renderObject) { - const { object, geometry } = renderObject; - - return geometry.isInstancedBufferGeometry ? geometry.instanceCount : object.count > 1 ? object.count : 1; - } - - getDrawingBufferSize() { - vector2 = vector2 || new Vector2(); - - return this.renderer.getDrawingBufferSize(vector2); - } - - getScissor() { - vector4 = vector4 || new Vector4(); - - return this.renderer.getScissor(vector4); - } - - setScissorTest(/*boolean*/) {} - - getClearColor() { - const renderer = this.renderer; - - color4 = color4 || new Color4(); - - renderer.getClearColor(color4); - - color4.getRGB(color4, this.renderer.currentColorSpace); - - return color4; - } - - getDomElement() { - let domElement = this.domElement; - - if (domElement === null) { - domElement = this.parameters.canvas !== undefined ? this.parameters.canvas : createCanvasElement(); - - // OffscreenCanvas does not have setAttribute, see #22811 - // if ( 'setAttribute' in domElement ) domElement.setAttribute( 'data-engine', `three.js r${REVISION} webgpu` ); - - this.domElement = domElement; - } - - return domElement; - } - - // resource properties - - set(object, value) { - this.data.set(object, value); - } - - get(object) { - let map = this.data.get(object); - - if (map === undefined) { - map = {}; - this.data.set(object, map); - } - - return map; - } - - has(object) { - return this.data.has(object); - } - - delete(object) { - this.data.delete(object); - } -} - -let _id$1 = 0; - -class DualAttributeData { - constructor(attributeData, dualBuffer) { - this.buffers = [attributeData.bufferGPU, dualBuffer]; - this.type = attributeData.type; - this.bufferType = attributeData.bufferType; - this.pbo = attributeData.pbo; - this.byteLength = attributeData.byteLength; - this.bytesPerElement = attributeData.BYTES_PER_ELEMENT; - this.version = attributeData.version; - this.isInteger = attributeData.isInteger; - this.activeBufferIndex = 0; - this.baseId = attributeData.id; - } - - get id() { - return `${this.baseId}|${this.activeBufferIndex}`; - } - - get bufferGPU() { - return this.buffers[this.activeBufferIndex]; - } - - get transformBuffer() { - return this.buffers[this.activeBufferIndex ^ 1]; - } - - switchBuffers() { - this.activeBufferIndex ^= 1; - } -} - -class WebGLAttributeUtils { - constructor(backend) { - this.backend = backend; - } - - createAttribute(attribute, bufferType) { - const backend = this.backend; - const { gl } = backend; - - const array = attribute.array; - const usage = attribute.usage || gl.STATIC_DRAW; - - const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute; - const bufferData = backend.get(bufferAttribute); - - let bufferGPU = bufferData.bufferGPU; - - if (bufferGPU === undefined) { - bufferGPU = this._createBuffer(gl, bufferType, array, usage); - - bufferData.bufferGPU = bufferGPU; - bufferData.bufferType = bufferType; - bufferData.version = bufferAttribute.version; - } - - //attribute.onUploadCallback(); - - let type; - - if (array instanceof Float32Array) { - type = gl.FLOAT; - } else if (array instanceof Uint16Array) { - if (attribute.isFloat16BufferAttribute) { - type = gl.HALF_FLOAT; - } else { - type = gl.UNSIGNED_SHORT; - } - } else if (array instanceof Int16Array) { - type = gl.SHORT; - } else if (array instanceof Uint32Array) { - type = gl.UNSIGNED_INT; - } else if (array instanceof Int32Array) { - type = gl.INT; - } else if (array instanceof Int8Array) { - type = gl.BYTE; - } else if (array instanceof Uint8Array) { - type = gl.UNSIGNED_BYTE; - } else if (array instanceof Uint8ClampedArray) { - type = gl.UNSIGNED_BYTE; - } else { - throw new Error('THREE.WebGLBackend: Unsupported buffer data format: ' + array); - } - - let attributeData = { - bufferGPU, - bufferType, - type, - byteLength: array.byteLength, - bytesPerElement: array.BYTES_PER_ELEMENT, - version: attribute.version, - pbo: attribute.pbo, - isInteger: type === gl.INT || type === gl.UNSIGNED_INT || attribute.gpuType === IntType, - id: _id$1++, - }; - - if (attribute.isStorageBufferAttribute || attribute.isStorageInstancedBufferAttribute) { - // create buffer for tranform feedback use - const bufferGPUDual = this._createBuffer(gl, bufferType, array, usage); - attributeData = new DualAttributeData(attributeData, bufferGPUDual); - } - - backend.set(attribute, attributeData); - } - - updateAttribute(attribute) { - const backend = this.backend; - const { gl } = backend; - - const array = attribute.array; - const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute; - const bufferData = backend.get(bufferAttribute); - const bufferType = bufferData.bufferType; - const updateRanges = attribute.isInterleavedBufferAttribute ? attribute.data.updateRanges : attribute.updateRanges; - - gl.bindBuffer(bufferType, bufferData.bufferGPU); - - if (updateRanges.length === 0) { - // Not using update ranges - - gl.bufferSubData(bufferType, 0, array); - } else { - for (let i = 0, l = updateRanges.length; i < l; i++) { - const range = updateRanges[i]; - gl.bufferSubData(bufferType, range.start * array.BYTES_PER_ELEMENT, array, range.start, range.count); - } - - bufferAttribute.clearUpdateRanges(); - } - - gl.bindBuffer(bufferType, null); - - bufferData.version = bufferAttribute.version; - } - - destroyAttribute(attribute) { - const backend = this.backend; - const { gl } = backend; - - if (attribute.isInterleavedBufferAttribute) { - backend.delete(attribute.data); - } - - const attributeData = backend.get(attribute); - - gl.deleteBuffer(attributeData.bufferGPU); - - backend.delete(attribute); - } - - async getArrayBufferAsync(attribute) { - const backend = this.backend; - const { gl } = backend; - - const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute; - const { bufferGPU } = backend.get(bufferAttribute); - - const array = attribute.array; - const byteLength = array.byteLength; - - gl.bindBuffer(gl.COPY_READ_BUFFER, bufferGPU); - - const writeBuffer = gl.createBuffer(); - - gl.bindBuffer(gl.COPY_WRITE_BUFFER, writeBuffer); - gl.bufferData(gl.COPY_WRITE_BUFFER, byteLength, gl.STREAM_READ); - - gl.copyBufferSubData(gl.COPY_READ_BUFFER, gl.COPY_WRITE_BUFFER, 0, 0, byteLength); - - await backend.utils._clientWaitAsync(); - - const dstBuffer = new attribute.array.constructor(array.length); - - gl.getBufferSubData(gl.COPY_WRITE_BUFFER, 0, dstBuffer); - - gl.deleteBuffer(writeBuffer); - - return dstBuffer.buffer; - } - - _createBuffer(gl, bufferType, array, usage) { - const bufferGPU = gl.createBuffer(); - - gl.bindBuffer(bufferType, bufferGPU); - gl.bufferData(bufferType, array, usage); - gl.bindBuffer(bufferType, null); - - return bufferGPU; - } -} - -let initialized$1 = false, - equationToGL, - factorToGL; - -class WebGLState { - constructor(backend) { - this.backend = backend; - - this.gl = this.backend.gl; - - this.enabled = {}; - this.currentFlipSided = null; - this.currentCullFace = null; - this.currentProgram = null; - this.currentBlendingEnabled = false; - this.currentBlending = null; - this.currentBlendSrc = null; - this.currentBlendDst = null; - this.currentBlendSrcAlpha = null; - this.currentBlendDstAlpha = null; - this.currentPremultipledAlpha = null; - this.currentPolygonOffsetFactor = null; - this.currentPolygonOffsetUnits = null; - this.currentColorMask = null; - this.currentDepthFunc = null; - this.currentDepthMask = null; - this.currentStencilFunc = null; - this.currentStencilRef = null; - this.currentStencilFuncMask = null; - this.currentStencilFail = null; - this.currentStencilZFail = null; - this.currentStencilZPass = null; - this.currentStencilMask = null; - this.currentLineWidth = null; - - this.currentBoundFramebuffers = {}; - this.currentDrawbuffers = new WeakMap(); - - this.maxTextures = this.gl.getParameter(this.gl.MAX_TEXTURE_IMAGE_UNITS); - this.currentTextureSlot = null; - this.currentBoundTextures = {}; - this.currentBoundBufferBases = {}; - - if (initialized$1 === false) { - this._init(this.gl); - - initialized$1 = true; - } - } - - _init(gl) { - // Store only WebGL constants here. - - equationToGL = { - [AddEquation]: gl.FUNC_ADD, - [SubtractEquation]: gl.FUNC_SUBTRACT, - [ReverseSubtractEquation]: gl.FUNC_REVERSE_SUBTRACT, - }; - - factorToGL = { - [ZeroFactor]: gl.ZERO, - [OneFactor]: gl.ONE, - [SrcColorFactor]: gl.SRC_COLOR, - [SrcAlphaFactor]: gl.SRC_ALPHA, - [SrcAlphaSaturateFactor]: gl.SRC_ALPHA_SATURATE, - [DstColorFactor]: gl.DST_COLOR, - [DstAlphaFactor]: gl.DST_ALPHA, - [OneMinusSrcColorFactor]: gl.ONE_MINUS_SRC_COLOR, - [OneMinusSrcAlphaFactor]: gl.ONE_MINUS_SRC_ALPHA, - [OneMinusDstColorFactor]: gl.ONE_MINUS_DST_COLOR, - [OneMinusDstAlphaFactor]: gl.ONE_MINUS_DST_ALPHA, - }; - } - - enable(id) { - const { enabled } = this; - - if (enabled[id] !== true) { - this.gl.enable(id); - enabled[id] = true; - } - } - - disable(id) { - const { enabled } = this; - - if (enabled[id] !== false) { - this.gl.disable(id); - enabled[id] = false; - } - } - - setFlipSided(flipSided) { - if (this.currentFlipSided !== flipSided) { - const { gl } = this; - - if (flipSided) { - gl.frontFace(gl.CW); - } else { - gl.frontFace(gl.CCW); - } - - this.currentFlipSided = flipSided; - } - } - - setCullFace(cullFace) { - const { gl } = this; - - if (cullFace !== CullFaceNone) { - this.enable(gl.CULL_FACE); - - if (cullFace !== this.currentCullFace) { - if (cullFace === CullFaceBack) { - gl.cullFace(gl.BACK); - } else if (cullFace === CullFaceFront) { - gl.cullFace(gl.FRONT); - } else { - gl.cullFace(gl.FRONT_AND_BACK); - } - } - } else { - this.disable(gl.CULL_FACE); - } - - this.currentCullFace = cullFace; - } - - setLineWidth(width) { - const { currentLineWidth, gl } = this; - - if (width !== currentLineWidth) { - gl.lineWidth(width); - - this.currentLineWidth = width; - } - } - - setBlending(blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha) { - const { gl } = this; - - if (blending === NoBlending) { - if (this.currentBlendingEnabled === true) { - this.disable(gl.BLEND); - this.currentBlendingEnabled = false; - } - - return; - } - - if (this.currentBlendingEnabled === false) { - this.enable(gl.BLEND); - this.currentBlendingEnabled = true; - } - - if (blending !== CustomBlending) { - if (blending !== this.currentBlending || premultipliedAlpha !== this.currentPremultipledAlpha) { - if (this.currentBlendEquation !== AddEquation || this.currentBlendEquationAlpha !== AddEquation) { - gl.blendEquation(gl.FUNC_ADD); - - this.currentBlendEquation = AddEquation; - this.currentBlendEquationAlpha = AddEquation; - } - - if (premultipliedAlpha) { - switch (blending) { - case NormalBlending: - gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); - break; - - case AdditiveBlending: - gl.blendFunc(gl.ONE, gl.ONE); - break; - - case SubtractiveBlending: - gl.blendFuncSeparate(gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE); - break; - - case MultiplyBlending: - gl.blendFuncSeparate(gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA); - break; - - default: - console.error('THREE.WebGLState: Invalid blending: ', blending); - break; - } - } else { - switch (blending) { - case NormalBlending: - gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); - break; - - case AdditiveBlending: - gl.blendFunc(gl.SRC_ALPHA, gl.ONE); - break; - - case SubtractiveBlending: - gl.blendFuncSeparate(gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE); - break; - - case MultiplyBlending: - gl.blendFunc(gl.ZERO, gl.SRC_COLOR); - break; - - default: - console.error('THREE.WebGLState: Invalid blending: ', blending); - break; - } - } - - this.currentBlendSrc = null; - this.currentBlendDst = null; - this.currentBlendSrcAlpha = null; - this.currentBlendDstAlpha = null; - - this.currentBlending = blending; - this.currentPremultipledAlpha = premultipliedAlpha; - } - - return; - } - - // custom blending - - blendEquationAlpha = blendEquationAlpha || blendEquation; - blendSrcAlpha = blendSrcAlpha || blendSrc; - blendDstAlpha = blendDstAlpha || blendDst; - - if (blendEquation !== this.currentBlendEquation || blendEquationAlpha !== this.currentBlendEquationAlpha) { - gl.blendEquationSeparate(equationToGL[blendEquation], equationToGL[blendEquationAlpha]); - - this.currentBlendEquation = blendEquation; - this.currentBlendEquationAlpha = blendEquationAlpha; - } - - if (blendSrc !== this.currentBlendSrc || blendDst !== this.currentBlendDst || blendSrcAlpha !== this.currentBlendSrcAlpha || blendDstAlpha !== this.currentBlendDstAlpha) { - gl.blendFuncSeparate(factorToGL[blendSrc], factorToGL[blendDst], factorToGL[blendSrcAlpha], factorToGL[blendDstAlpha]); - - this.currentBlendSrc = blendSrc; - this.currentBlendDst = blendDst; - this.currentBlendSrcAlpha = blendSrcAlpha; - this.currentBlendDstAlpha = blendDstAlpha; - } - - this.currentBlending = blending; - this.currentPremultipledAlpha = false; - } - - setColorMask(colorMask) { - if (this.currentColorMask !== colorMask) { - this.gl.colorMask(colorMask, colorMask, colorMask, colorMask); - this.currentColorMask = colorMask; - } - } - - setDepthTest(depthTest) { - const { gl } = this; - - if (depthTest) { - this.enable(gl.DEPTH_TEST); - } else { - this.disable(gl.DEPTH_TEST); - } - } - - setDepthMask(depthMask) { - if (this.currentDepthMask !== depthMask) { - this.gl.depthMask(depthMask); - this.currentDepthMask = depthMask; - } - } - - setDepthFunc(depthFunc) { - if (this.currentDepthFunc !== depthFunc) { - const { gl } = this; - - switch (depthFunc) { - case NeverDepth: - gl.depthFunc(gl.NEVER); - break; - - case AlwaysDepth: - gl.depthFunc(gl.ALWAYS); - break; - - case LessDepth: - gl.depthFunc(gl.LESS); - break; - - case LessEqualDepth: - gl.depthFunc(gl.LEQUAL); - break; - - case EqualDepth: - gl.depthFunc(gl.EQUAL); - break; - - case GreaterEqualDepth: - gl.depthFunc(gl.GEQUAL); - break; - - case GreaterDepth: - gl.depthFunc(gl.GREATER); - break; - - case NotEqualDepth: - gl.depthFunc(gl.NOTEQUAL); - break; - - default: - gl.depthFunc(gl.LEQUAL); - } - - this.currentDepthFunc = depthFunc; - } - } - - setStencilTest(stencilTest) { - const { gl } = this; - - if (stencilTest) { - this.enable(gl.STENCIL_TEST); - } else { - this.disable(gl.STENCIL_TEST); - } - } - - setStencilMask(stencilMask) { - if (this.currentStencilMask !== stencilMask) { - this.gl.stencilMask(stencilMask); - this.currentStencilMask = stencilMask; - } - } - - setStencilFunc(stencilFunc, stencilRef, stencilMask) { - if (this.currentStencilFunc !== stencilFunc || this.currentStencilRef !== stencilRef || this.currentStencilFuncMask !== stencilMask) { - this.gl.stencilFunc(stencilFunc, stencilRef, stencilMask); - - this.currentStencilFunc = stencilFunc; - this.currentStencilRef = stencilRef; - this.currentStencilFuncMask = stencilMask; - } - } - - setStencilOp(stencilFail, stencilZFail, stencilZPass) { - if (this.currentStencilFail !== stencilFail || this.currentStencilZFail !== stencilZFail || this.currentStencilZPass !== stencilZPass) { - this.gl.stencilOp(stencilFail, stencilZFail, stencilZPass); - - this.currentStencilFail = stencilFail; - this.currentStencilZFail = stencilZFail; - this.currentStencilZPass = stencilZPass; - } - } - - setMaterial(material, frontFaceCW) { - const { gl } = this; - - material.side === DoubleSide ? this.disable(gl.CULL_FACE) : this.enable(gl.CULL_FACE); - - let flipSided = material.side === BackSide; - if (frontFaceCW) flipSided = !flipSided; - - this.setFlipSided(flipSided); - - material.blending === NormalBlending && material.transparent === false ? this.setBlending(NoBlending) : this.setBlending(material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha); - - this.setDepthFunc(material.depthFunc); - this.setDepthTest(material.depthTest); - this.setDepthMask(material.depthWrite); - this.setColorMask(material.colorWrite); - - const stencilWrite = material.stencilWrite; - this.setStencilTest(stencilWrite); - if (stencilWrite) { - this.setStencilMask(material.stencilWriteMask); - this.setStencilFunc(material.stencilFunc, material.stencilRef, material.stencilFuncMask); - this.setStencilOp(material.stencilFail, material.stencilZFail, material.stencilZPass); - } - - this.setPolygonOffset(material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits); - - material.alphaToCoverage === true ? this.enable(gl.SAMPLE_ALPHA_TO_COVERAGE) : this.disable(gl.SAMPLE_ALPHA_TO_COVERAGE); - } - - setPolygonOffset(polygonOffset, factor, units) { - const { gl } = this; - - if (polygonOffset) { - this.enable(gl.POLYGON_OFFSET_FILL); - - if (this.currentPolygonOffsetFactor !== factor || this.currentPolygonOffsetUnits !== units) { - gl.polygonOffset(factor, units); - - this.currentPolygonOffsetFactor = factor; - this.currentPolygonOffsetUnits = units; - } - } else { - this.disable(gl.POLYGON_OFFSET_FILL); - } - } - - useProgram(program) { - if (this.currentProgram !== program) { - this.gl.useProgram(program); - - this.currentProgram = program; - - return true; - } - - return false; - } - - // framebuffer - - bindFramebuffer(target, framebuffer) { - const { gl, currentBoundFramebuffers } = this; - - if (currentBoundFramebuffers[target] !== framebuffer) { - gl.bindFramebuffer(target, framebuffer); - - currentBoundFramebuffers[target] = framebuffer; - - // gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER - - if (target === gl.DRAW_FRAMEBUFFER) { - currentBoundFramebuffers[gl.FRAMEBUFFER] = framebuffer; - } - - if (target === gl.FRAMEBUFFER) { - currentBoundFramebuffers[gl.DRAW_FRAMEBUFFER] = framebuffer; - } - - return true; - } - - return false; - } - - drawBuffers(renderContext, framebuffer) { - const { gl } = this; - - let drawBuffers = []; - - let needsUpdate = false; - - if (renderContext.textures !== null) { - drawBuffers = this.currentDrawbuffers.get(framebuffer); - - if (drawBuffers === undefined) { - drawBuffers = []; - this.currentDrawbuffers.set(framebuffer, drawBuffers); - } - - const textures = renderContext.textures; - - if (drawBuffers.length !== textures.length || drawBuffers[0] !== gl.COLOR_ATTACHMENT0) { - for (let i = 0, il = textures.length; i < il; i++) { - drawBuffers[i] = gl.COLOR_ATTACHMENT0 + i; - } - - drawBuffers.length = textures.length; - - needsUpdate = true; - } - } else { - if (drawBuffers[0] !== gl.BACK) { - drawBuffers[0] = gl.BACK; - - needsUpdate = true; - } - } - - if (needsUpdate) { - gl.drawBuffers(drawBuffers); - } - } - - // texture - - activeTexture(webglSlot) { - const { gl, currentTextureSlot, maxTextures } = this; - - if (webglSlot === undefined) webglSlot = gl.TEXTURE0 + maxTextures - 1; - - if (currentTextureSlot !== webglSlot) { - gl.activeTexture(webglSlot); - this.currentTextureSlot = webglSlot; - } - } - - bindTexture(webglType, webglTexture, webglSlot) { - const { gl, currentTextureSlot, currentBoundTextures, maxTextures } = this; - - if (webglSlot === undefined) { - if (currentTextureSlot === null) { - webglSlot = gl.TEXTURE0 + maxTextures - 1; - } else { - webglSlot = currentTextureSlot; - } - } - - let boundTexture = currentBoundTextures[webglSlot]; - - if (boundTexture === undefined) { - boundTexture = { type: undefined, texture: undefined }; - currentBoundTextures[webglSlot] = boundTexture; - } - - if (boundTexture.type !== webglType || boundTexture.texture !== webglTexture) { - if (currentTextureSlot !== webglSlot) { - gl.activeTexture(webglSlot); - this.currentTextureSlot = webglSlot; - } - - gl.bindTexture(webglType, webglTexture); - - boundTexture.type = webglType; - boundTexture.texture = webglTexture; - } - } - - bindBufferBase(target, index, buffer) { - const { gl } = this; - - const key = `${target}-${index}`; - - if (this.currentBoundBufferBases[key] !== buffer) { - gl.bindBufferBase(target, index, buffer); - this.currentBoundBufferBases[key] = buffer; - - return true; - } - - return false; - } - - unbindTexture() { - const { gl, currentTextureSlot, currentBoundTextures } = this; - - const boundTexture = currentBoundTextures[currentTextureSlot]; - - if (boundTexture !== undefined && boundTexture.type !== undefined) { - gl.bindTexture(boundTexture.type, null); - - boundTexture.type = undefined; - boundTexture.texture = undefined; - } - } -} - -class WebGLUtils { - constructor(backend) { - this.backend = backend; - - this.gl = this.backend.gl; - this.extensions = backend.extensions; - } - - convert(p, colorSpace = NoColorSpace) { - const { gl, extensions } = this; - - let extension; - - if (p === UnsignedByteType) return gl.UNSIGNED_BYTE; - if (p === UnsignedShort4444Type) return gl.UNSIGNED_SHORT_4_4_4_4; - if (p === UnsignedShort5551Type) return gl.UNSIGNED_SHORT_5_5_5_1; - if (p === UnsignedInt5999Type) return gl.UNSIGNED_INT_5_9_9_9_REV; - - if (p === ByteType) return gl.BYTE; - if (p === ShortType) return gl.SHORT; - if (p === UnsignedShortType) return gl.UNSIGNED_SHORT; - if (p === IntType) return gl.INT; - if (p === UnsignedIntType) return gl.UNSIGNED_INT; - if (p === FloatType) return gl.FLOAT; - - if (p === HalfFloatType) { - return gl.HALF_FLOAT; - } - - if (p === AlphaFormat) return gl.ALPHA; - if (p === RGBFormat) return gl.RGB; - if (p === RGBAFormat) return gl.RGBA; - if (p === LuminanceFormat) return gl.LUMINANCE; - if (p === LuminanceAlphaFormat) return gl.LUMINANCE_ALPHA; - if (p === DepthFormat) return gl.DEPTH_COMPONENT; - if (p === DepthStencilFormat) return gl.DEPTH_STENCIL; - - // WebGL2 formats. - - if (p === RedFormat) return gl.RED; - if (p === RedIntegerFormat) return gl.RED_INTEGER; - if (p === RGFormat) return gl.RG; - if (p === RGIntegerFormat) return gl.RG_INTEGER; - if (p === RGBAIntegerFormat) return gl.RGBA_INTEGER; - - // S3TC - - if (p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format) { - if (colorSpace === SRGBColorSpace) { - extension = extensions.get('WEBGL_compressed_texture_s3tc_srgb'); - - if (extension !== null) { - if (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT; - if (p === RGBA_S3TC_DXT1_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT; - if (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT; - if (p === RGBA_S3TC_DXT5_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT; - } else { - return null; - } - } else { - extension = extensions.get('WEBGL_compressed_texture_s3tc'); - - if (extension !== null) { - if (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; - if (p === RGBA_S3TC_DXT1_Format) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; - if (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; - if (p === RGBA_S3TC_DXT5_Format) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; - } else { - return null; - } - } - } - - // PVRTC - - if (p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format) { - extension = extensions.get('WEBGL_compressed_texture_pvrtc'); - - if (extension !== null) { - if (p === RGB_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; - if (p === RGB_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; - if (p === RGBA_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; - if (p === RGBA_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; - } else { - return null; - } - } - - // ETC - - if (p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format) { - extension = extensions.get('WEBGL_compressed_texture_etc'); - - if (extension !== null) { - if (p === RGB_ETC1_Format || p === RGB_ETC2_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2; - if (p === RGBA_ETC2_EAC_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC; - } else { - return null; - } - } - - // ASTC - - if (p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format) { - extension = extensions.get('WEBGL_compressed_texture_astc'); - - if (extension !== null) { - if (p === RGBA_ASTC_4x4_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR; - if (p === RGBA_ASTC_5x4_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR; - if (p === RGBA_ASTC_5x5_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR; - if (p === RGBA_ASTC_6x5_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR; - if (p === RGBA_ASTC_6x6_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR; - if (p === RGBA_ASTC_8x5_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR; - if (p === RGBA_ASTC_8x6_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR; - if (p === RGBA_ASTC_8x8_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR; - if (p === RGBA_ASTC_10x5_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR; - if (p === RGBA_ASTC_10x6_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR; - if (p === RGBA_ASTC_10x8_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR; - if (p === RGBA_ASTC_10x10_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR; - if (p === RGBA_ASTC_12x10_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR; - if (p === RGBA_ASTC_12x12_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR; - } else { - return null; - } - } - - // BPTC - - if (p === RGBA_BPTC_Format) { - extension = extensions.get('EXT_texture_compression_bptc'); - - if (extension !== null) { - if (p === RGBA_BPTC_Format) return colorSpace === SRGBColorSpace ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT; - } else { - return null; - } - } - - // RGTC - - if (p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format) { - extension = extensions.get('EXT_texture_compression_rgtc'); - - if (extension !== null) { - if (p === RGBA_BPTC_Format) return extension.COMPRESSED_RED_RGTC1_EXT; - if (p === SIGNED_RED_RGTC1_Format) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT; - if (p === RED_GREEN_RGTC2_Format) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT; - if (p === SIGNED_RED_GREEN_RGTC2_Format) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT; - } else { - return null; - } - } - - // - - if (p === UnsignedInt248Type) { - return gl.UNSIGNED_INT_24_8; - } - - // if "p" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats) - - return gl[p] !== undefined ? gl[p] : null; - } - - _clientWaitAsync() { - const { gl } = this; - - const sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0); - - gl.flush(); - - return new Promise((resolve, reject) => { - function test() { - const res = gl.clientWaitSync(sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0); - - if (res === gl.WAIT_FAILED) { - gl.deleteSync(sync); - - reject(); - return; - } - - if (res === gl.TIMEOUT_EXPIRED) { - requestAnimationFrame(test); - return; - } - - gl.deleteSync(sync); - - resolve(); - } - - test(); - }); - } -} - -let initialized = false, - wrappingToGL, - filterToGL, - compareToGL; - -class WebGLTextureUtils { - constructor(backend) { - this.backend = backend; - - this.gl = backend.gl; - this.extensions = backend.extensions; - this.defaultTextures = {}; - - if (initialized === false) { - this._init(this.gl); - - initialized = true; - } - } - - _init(gl) { - // Store only WebGL constants here. - - wrappingToGL = { - [RepeatWrapping]: gl.REPEAT, - [ClampToEdgeWrapping]: gl.CLAMP_TO_EDGE, - [MirroredRepeatWrapping]: gl.MIRRORED_REPEAT, - }; - - filterToGL = { - [NearestFilter]: gl.NEAREST, - [NearestMipmapNearestFilter]: gl.NEAREST_MIPMAP_NEAREST, - [NearestMipmapLinearFilter]: gl.NEAREST_MIPMAP_LINEAR, - - [LinearFilter]: gl.LINEAR, - [LinearMipmapNearestFilter]: gl.LINEAR_MIPMAP_NEAREST, - [LinearMipmapLinearFilter]: gl.LINEAR_MIPMAP_LINEAR, - }; - - compareToGL = { - [NeverCompare]: gl.NEVER, - [AlwaysCompare]: gl.ALWAYS, - [LessCompare]: gl.LESS, - [LessEqualCompare]: gl.LEQUAL, - [EqualCompare]: gl.EQUAL, - [GreaterEqualCompare]: gl.GEQUAL, - [GreaterCompare]: gl.GREATER, - [NotEqualCompare]: gl.NOTEQUAL, - }; - } - - filterFallback(f) { - const { gl } = this; - - if (f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter) { - return gl.NEAREST; - } - - return gl.LINEAR; - } - - getGLTextureType(texture) { - const { gl } = this; - - let glTextureType; - - if (texture.isCubeTexture === true) { - glTextureType = gl.TEXTURE_CUBE_MAP; - } else if (texture.isDataArrayTexture === true) { - glTextureType = gl.TEXTURE_2D_ARRAY; - } else if (texture.isData3DTexture === true) { - glTextureType = gl.TEXTURE_3D; - } else { - glTextureType = gl.TEXTURE_2D; - } - - return glTextureType; - } - - getInternalFormat(internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false) { - const { gl, extensions } = this; - - if (internalFormatName !== null) { - if (gl[internalFormatName] !== undefined) return gl[internalFormatName]; - - console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + internalFormatName + "'"); - } - - let internalFormat = glFormat; - - if (glFormat === gl.RED) { - if (glType === gl.FLOAT) internalFormat = gl.R32F; - if (glType === gl.HALF_FLOAT) internalFormat = gl.R16F; - if (glType === gl.UNSIGNED_BYTE) internalFormat = gl.R8; - if (glType === gl.UNSIGNED_SHORT) internalFormat = gl.R16; - if (glType === gl.UNSIGNED_INT) internalFormat = gl.R32UI; - if (glType === gl.BYTE) internalFormat = gl.R8I; - if (glType === gl.SHORT) internalFormat = gl.R16I; - if (glType === gl.INT) internalFormat = gl.R32I; - } - - if (glFormat === gl.RED_INTEGER) { - if (glType === gl.UNSIGNED_BYTE) internalFormat = gl.R8UI; - if (glType === gl.UNSIGNED_SHORT) internalFormat = gl.R16UI; - if (glType === gl.UNSIGNED_INT) internalFormat = gl.R32UI; - if (glType === gl.BYTE) internalFormat = gl.R8I; - if (glType === gl.SHORT) internalFormat = gl.R16I; - if (glType === gl.INT) internalFormat = gl.R32I; - } - - if (glFormat === gl.RG) { - if (glType === gl.FLOAT) internalFormat = gl.RG32F; - if (glType === gl.HALF_FLOAT) internalFormat = gl.RG16F; - if (glType === gl.UNSIGNED_BYTE) internalFormat = gl.RG8; - if (glType === gl.UNSIGNED_SHORT) internalFormat = gl.RG16; - if (glType === gl.UNSIGNED_INT) internalFormat = gl.RG32UI; - if (glType === gl.BYTE) internalFormat = gl.RG8I; - if (glType === gl.SHORT) internalFormat = gl.RG16I; - if (glType === gl.INT) internalFormat = gl.RG32I; - } - - if (glFormat === gl.RG_INTEGER) { - if (glType === gl.UNSIGNED_BYTE) internalFormat = gl.RG8UI; - if (glType === gl.UNSIGNED_SHORT) internalFormat = gl.RG16UI; - if (glType === gl.UNSIGNED_INT) internalFormat = gl.RG32UI; - if (glType === gl.BYTE) internalFormat = gl.RG8I; - if (glType === gl.SHORT) internalFormat = gl.RG16I; - if (glType === gl.INT) internalFormat = gl.RG32I; - } - - if (glFormat === gl.RGB) { - if (glType === gl.FLOAT) internalFormat = gl.RGB32F; - if (glType === gl.HALF_FLOAT) internalFormat = gl.RGB16F; - if (glType === gl.UNSIGNED_BYTE) internalFormat = gl.RGB8; - if (glType === gl.UNSIGNED_SHORT) internalFormat = gl.RGB16; - if (glType === gl.UNSIGNED_INT) internalFormat = gl.RGB32UI; - if (glType === gl.BYTE) internalFormat = gl.RGB8I; - if (glType === gl.SHORT) internalFormat = gl.RGB16I; - if (glType === gl.INT) internalFormat = gl.RGB32I; - if (glType === gl.UNSIGNED_BYTE) internalFormat = colorSpace === SRGBColorSpace && forceLinearTransfer === false ? gl.SRGB8 : gl.RGB8; - if (glType === gl.UNSIGNED_SHORT_5_6_5) internalFormat = gl.RGB565; - if (glType === gl.UNSIGNED_SHORT_5_5_5_1) internalFormat = gl.RGB5_A1; - if (glType === gl.UNSIGNED_SHORT_4_4_4_4) internalFormat = gl.RGB4; - if (glType === gl.UNSIGNED_INT_5_9_9_9_REV) internalFormat = gl.RGB9_E5; - } - - if (glFormat === gl.RGB_INTEGER) { - if (glType === gl.UNSIGNED_BYTE) internalFormat = gl.RGB8UI; - if (glType === gl.UNSIGNED_SHORT) internalFormat = gl.RGB16UI; - if (glType === gl.UNSIGNED_INT) internalFormat = gl.RGB32UI; - if (glType === gl.BYTE) internalFormat = gl.RGB8I; - if (glType === gl.SHORT) internalFormat = gl.RGB16I; - if (glType === gl.INT) internalFormat = gl.RGB32I; - } - - if (glFormat === gl.RGBA) { - if (glType === gl.FLOAT) internalFormat = gl.RGBA32F; - if (glType === gl.HALF_FLOAT) internalFormat = gl.RGBA16F; - if (glType === gl.UNSIGNED_BYTE) internalFormat = gl.RGBA8; - if (glType === gl.UNSIGNED_SHORT) internalFormat = gl.RGBA16; - if (glType === gl.UNSIGNED_INT) internalFormat = gl.RGBA32UI; - if (glType === gl.BYTE) internalFormat = gl.RGBA8I; - if (glType === gl.SHORT) internalFormat = gl.RGBA16I; - if (glType === gl.INT) internalFormat = gl.RGBA32I; - if (glType === gl.UNSIGNED_BYTE) internalFormat = colorSpace === SRGBColorSpace && forceLinearTransfer === false ? gl.SRGB8_ALPHA8 : gl.RGBA8; - if (glType === gl.UNSIGNED_SHORT_4_4_4_4) internalFormat = gl.RGBA4; - if (glType === gl.UNSIGNED_SHORT_5_5_5_1) internalFormat = gl.RGB5_A1; - } - - if (glFormat === gl.RGBA_INTEGER) { - if (glType === gl.UNSIGNED_BYTE) internalFormat = gl.RGBA8UI; - if (glType === gl.UNSIGNED_SHORT) internalFormat = gl.RGBA16UI; - if (glType === gl.UNSIGNED_INT) internalFormat = gl.RGBA32UI; - if (glType === gl.BYTE) internalFormat = gl.RGBA8I; - if (glType === gl.SHORT) internalFormat = gl.RGBA16I; - if (glType === gl.INT) internalFormat = gl.RGBA32I; - } - - if (glFormat === gl.DEPTH_COMPONENT) { - if (glType === gl.UNSIGNED_INT) internalFormat = gl.DEPTH24_STENCIL8; - if (glType === gl.FLOAT) internalFormat = gl.DEPTH_COMPONENT32F; - } - - if (glFormat === gl.DEPTH_STENCIL) { - if (glType === gl.UNSIGNED_INT_24_8) internalFormat = gl.DEPTH24_STENCIL8; - } - - if (internalFormat === gl.R16F || internalFormat === gl.R32F || internalFormat === gl.RG16F || internalFormat === gl.RG32F || internalFormat === gl.RGBA16F || internalFormat === gl.RGBA32F) { - extensions.get('EXT_color_buffer_float'); - } - - return internalFormat; - } - - setTextureParameters(textureType, texture) { - const { gl, extensions, backend } = this; - - gl.texParameteri(textureType, gl.TEXTURE_WRAP_S, wrappingToGL[texture.wrapS]); - gl.texParameteri(textureType, gl.TEXTURE_WRAP_T, wrappingToGL[texture.wrapT]); - - if (textureType === gl.TEXTURE_3D || textureType === gl.TEXTURE_2D_ARRAY) { - gl.texParameteri(textureType, gl.TEXTURE_WRAP_R, wrappingToGL[texture.wrapR]); - } - - gl.texParameteri(textureType, gl.TEXTURE_MAG_FILTER, filterToGL[texture.magFilter]); - - const hasMipmaps = texture.mipmaps !== undefined && texture.mipmaps.length > 0; - - // follow WebGPU backend mapping for texture filtering - const minFilter = texture.minFilter === LinearFilter && hasMipmaps ? LinearMipmapLinearFilter : texture.minFilter; - - gl.texParameteri(textureType, gl.TEXTURE_MIN_FILTER, filterToGL[minFilter]); - - if (texture.compareFunction) { - gl.texParameteri(textureType, gl.TEXTURE_COMPARE_MODE, gl.COMPARE_REF_TO_TEXTURE); - gl.texParameteri(textureType, gl.TEXTURE_COMPARE_FUNC, compareToGL[texture.compareFunction]); - } - - if (extensions.has('EXT_texture_filter_anisotropic') === true) { - if (texture.magFilter === NearestFilter) return; - if (texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter) return; - if (texture.type === FloatType && extensions.has('OES_texture_float_linear') === false) return; // verify extension for WebGL 1 and WebGL 2 - - if (texture.anisotropy > 1) { - const extension = extensions.get('EXT_texture_filter_anisotropic'); - gl.texParameterf(textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(texture.anisotropy, backend.getMaxAnisotropy())); - } - } - } - - createDefaultTexture(texture) { - const { gl, backend, defaultTextures } = this; - - const glTextureType = this.getGLTextureType(texture); - - let textureGPU = defaultTextures[glTextureType]; - - if (textureGPU === undefined) { - textureGPU = gl.createTexture(); - - backend.state.bindTexture(glTextureType, textureGPU); - gl.texParameteri(glTextureType, gl.TEXTURE_MIN_FILTER, gl.NEAREST); - gl.texParameteri(glTextureType, gl.TEXTURE_MAG_FILTER, gl.NEAREST); - - // gl.texImage2D( glTextureType, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data ); - - defaultTextures[glTextureType] = textureGPU; - } - - backend.set(texture, { - textureGPU, - glTextureType, - isDefault: true, - }); - } - - createTexture(texture, options) { - const { gl, backend } = this; - const { levels, width, height, depth } = options; - - const glFormat = backend.utils.convert(texture.format, texture.colorSpace); - const glType = backend.utils.convert(texture.type); - const glInternalFormat = this.getInternalFormat(texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture); - - const textureGPU = gl.createTexture(); - const glTextureType = this.getGLTextureType(texture); - - backend.state.bindTexture(glTextureType, textureGPU); - - gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, texture.flipY); - gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha); - gl.pixelStorei(gl.UNPACK_ALIGNMENT, texture.unpackAlignment); - gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE); - - this.setTextureParameters(glTextureType, texture); - - if (texture.isDataArrayTexture) { - gl.texStorage3D(gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, width, height, depth); - } else if (texture.isData3DTexture) { - gl.texStorage3D(gl.TEXTURE_3D, levels, glInternalFormat, width, height, depth); - } else if (!texture.isVideoTexture) { - gl.texStorage2D(glTextureType, levels, glInternalFormat, width, height); - } - - backend.set(texture, { - textureGPU, - glTextureType, - glFormat, - glType, - glInternalFormat, - }); - } - - copyBufferToTexture(buffer, texture) { - const { gl, backend } = this; - - const { textureGPU, glTextureType, glFormat, glType } = backend.get(texture); - - const { width, height } = texture.source.data; - - gl.bindBuffer(gl.PIXEL_UNPACK_BUFFER, buffer); - - backend.state.bindTexture(glTextureType, textureGPU); - - gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false); - gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); - gl.texSubImage2D(glTextureType, 0, 0, 0, width, height, glFormat, glType, 0); - - gl.bindBuffer(gl.PIXEL_UNPACK_BUFFER, null); - - backend.state.unbindTexture(); - // debug - // const framebuffer = gl.createFramebuffer(); - // gl.bindFramebuffer( gl.FRAMEBUFFER, framebuffer ); - // gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, glTextureType, textureGPU, 0 ); - - // const readout = new Float32Array( width * height * 4 ); - - // const altFormat = gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_FORMAT ); - // const altType = gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_TYPE ); - - // gl.readPixels( 0, 0, width, height, altFormat, altType, readout ); - // gl.bindFramebuffer( gl.FRAMEBUFFER, null ); - // console.log( readout ); - } - - updateTexture(texture, options) { - const { gl } = this; - const { width, height } = options; - const { textureGPU, glTextureType, glFormat, glType, glInternalFormat } = this.backend.get(texture); - - if (texture.isRenderTargetTexture || textureGPU === undefined /* unsupported texture format */) return; - - const getImage = (source) => { - if (source.isDataTexture) { - return source.image.data; - } else if (source instanceof ImageBitmap || source instanceof OffscreenCanvas || source instanceof HTMLImageElement || source instanceof HTMLCanvasElement) { - return source; - } - - return source.data; - }; - - this.backend.state.bindTexture(glTextureType, textureGPU); - - if (texture.isCompressedTexture) { - const mipmaps = texture.mipmaps; - - for (let i = 0; i < mipmaps.length; i++) { - const mipmap = mipmaps[i]; - - if (texture.isCompressedArrayTexture) { - const image = options.image; - - if (texture.format !== gl.RGBA) { - if (glFormat !== null) { - gl.compressedTexSubImage3D(gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0); - } else { - console.warn('THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()'); - } - } else { - gl.texSubImage3D(gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data); - } - } else { - if (glFormat !== null) { - gl.compressedTexSubImage2D(gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data); - } else { - console.warn('Unsupported compressed texture format'); - } - } - } - } else if (texture.isCubeTexture) { - const images = options.images; - - for (let i = 0; i < 6; i++) { - const image = getImage(images[i]); - - gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, width, height, glFormat, glType, image); - } - } else if (texture.isDataArrayTexture) { - const image = options.image; - - gl.texSubImage3D(gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data); - } else if (texture.isData3DTexture) { - const image = options.image; - - gl.texSubImage3D(gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data); - } else if (texture.isVideoTexture) { - texture.update(); - - gl.texImage2D(glTextureType, 0, glInternalFormat, glFormat, glType, options.image); - } else { - const image = getImage(options.image); - - gl.texSubImage2D(glTextureType, 0, 0, 0, width, height, glFormat, glType, image); - } - } - - generateMipmaps(texture) { - const { gl, backend } = this; - const { textureGPU, glTextureType } = backend.get(texture); - - backend.state.bindTexture(glTextureType, textureGPU); - gl.generateMipmap(glTextureType); - } - - deallocateRenderBuffers(renderTarget) { - const { gl, backend } = this; - - // remove framebuffer reference - if (renderTarget) { - const renderContextData = backend.get(renderTarget); - - renderContextData.renderBufferStorageSetup = undefined; - - if (renderContextData.framebuffers) { - for (const cacheKey in renderContextData.framebuffers) { - gl.deleteFramebuffer(renderContextData.framebuffers[cacheKey]); - } - - delete renderContextData.framebuffers; - } - - if (renderContextData.depthRenderbuffer) { - gl.deleteRenderbuffer(renderContextData.depthRenderbuffer); - delete renderContextData.depthRenderbuffer; - } - - if (renderContextData.stencilRenderbuffer) { - gl.deleteRenderbuffer(renderContextData.stencilRenderbuffer); - delete renderContextData.stencilRenderbuffer; - } - - if (renderContextData.msaaFrameBuffer) { - gl.deleteFramebuffer(renderContextData.msaaFrameBuffer); - delete renderContextData.msaaFrameBuffer; - } - - if (renderContextData.msaaRenderbuffers) { - for (let i = 0; i < renderContextData.msaaRenderbuffers.length; i++) { - gl.deleteRenderbuffer(renderContextData.msaaRenderbuffers[i]); - } - - delete renderContextData.msaaRenderbuffers; - } - } - } - - destroyTexture(texture) { - const { gl, backend } = this; - const { textureGPU, renderTarget } = backend.get(texture); - - this.deallocateRenderBuffers(renderTarget); - gl.deleteTexture(textureGPU); - - backend.delete(texture); - } - - copyTextureToTexture(srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0) { - const { gl, backend } = this; - const { state } = this.backend; - - const { textureGPU: dstTextureGPU, glTextureType, glType, glFormat } = backend.get(dstTexture); - - let width, height, minX, minY; - let dstX, dstY; - if (srcRegion !== null) { - width = srcRegion.max.x - srcRegion.min.x; - height = srcRegion.max.y - srcRegion.min.y; - minX = srcRegion.min.x; - minY = srcRegion.min.y; - } else { - width = srcTexture.image.width; - height = srcTexture.image.height; - minX = 0; - minY = 0; - } - - if (dstPosition !== null) { - dstX = dstPosition.x; - dstY = dstPosition.y; - } else { - dstX = 0; - dstY = 0; - } - - state.bindTexture(glTextureType, dstTextureGPU); - - // As another texture upload may have changed pixelStorei - // parameters, make sure they are correct for the dstTexture - gl.pixelStorei(gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment); - gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY); - gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha); - gl.pixelStorei(gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment); - - const currentUnpackRowLen = gl.getParameter(gl.UNPACK_ROW_LENGTH); - const currentUnpackImageHeight = gl.getParameter(gl.UNPACK_IMAGE_HEIGHT); - const currentUnpackSkipPixels = gl.getParameter(gl.UNPACK_SKIP_PIXELS); - const currentUnpackSkipRows = gl.getParameter(gl.UNPACK_SKIP_ROWS); - const currentUnpackSkipImages = gl.getParameter(gl.UNPACK_SKIP_IMAGES); - - const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[level] : srcTexture.image; - - gl.pixelStorei(gl.UNPACK_ROW_LENGTH, image.width); - gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, image.height); - gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, minX); - gl.pixelStorei(gl.UNPACK_SKIP_ROWS, minY); - - if (srcTexture.isDataTexture) { - gl.texSubImage2D(gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image.data); - } else { - if (srcTexture.isCompressedTexture) { - gl.compressedTexSubImage2D(gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data); - } else { - gl.texSubImage2D(gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image); - } - } - - gl.pixelStorei(gl.UNPACK_ROW_LENGTH, currentUnpackRowLen); - gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight); - gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels); - gl.pixelStorei(gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows); - gl.pixelStorei(gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages); - - // Generate mipmaps only when copying level 0 - if (level === 0 && dstTexture.generateMipmaps) gl.generateMipmap(gl.TEXTURE_2D); - - state.unbindTexture(); - } - - copyFramebufferToTexture(texture, renderContext) { - const { gl } = this; - const { state } = this.backend; - - const { textureGPU } = this.backend.get(texture); - - const width = texture.image.width; - const height = texture.image.height; - - const requireDrawFrameBuffer = texture.isDepthTexture === true || (renderContext.renderTarget && renderContext.renderTarget.samples > 0); - - if (requireDrawFrameBuffer) { - let mask; - let attachment; - - if (texture.isDepthTexture === true) { - mask = gl.DEPTH_BUFFER_BIT; - attachment = gl.DEPTH_ATTACHMENT; - - if (renderContext.stencil) { - mask |= gl.STENCIL_BUFFER_BIT; - } - } else { - mask = gl.COLOR_BUFFER_BIT; - attachment = gl.COLOR_ATTACHMENT0; - } - - const fb = gl.createFramebuffer(); - state.bindFramebuffer(gl.DRAW_FRAMEBUFFER, fb); - - gl.framebufferTexture2D(gl.DRAW_FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureGPU, 0); - - gl.blitFramebuffer(0, 0, width, height, 0, 0, width, height, mask, gl.NEAREST); - - gl.deleteFramebuffer(fb); - } else { - state.bindTexture(gl.TEXTURE_2D, textureGPU); - gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, width, height); - - state.unbindTexture(); - } - - if (texture.generateMipmaps) this.generateMipmaps(texture); - - this.backend._setFramebuffer(renderContext); - } - - // Setup storage for internal depth/stencil buffers and bind to correct framebuffer - setupRenderBufferStorage(renderbuffer, renderContext) { - const { gl } = this; - const renderTarget = renderContext.renderTarget; - - const { samples, depthTexture, depthBuffer, stencilBuffer, width, height } = renderTarget; - - gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer); - - if (depthBuffer && !stencilBuffer) { - let glInternalFormat = gl.DEPTH_COMPONENT24; - - if (samples > 0) { - if (depthTexture && depthTexture.isDepthTexture) { - if (depthTexture.type === gl.FLOAT) { - glInternalFormat = gl.DEPTH_COMPONENT32F; - } - } - - gl.renderbufferStorageMultisample(gl.RENDERBUFFER, samples, glInternalFormat, width, height); - } else { - gl.renderbufferStorage(gl.RENDERBUFFER, glInternalFormat, width, height); - } - - gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, renderbuffer); - } else if (depthBuffer && stencilBuffer) { - if (samples > 0) { - gl.renderbufferStorageMultisample(gl.RENDERBUFFER, samples, gl.DEPTH24_STENCIL8, width, height); - } else { - gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height); - } - - gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, renderbuffer); - } - } - - async copyTextureToBuffer(texture, x, y, width, height) { - const { backend, gl } = this; - - const { textureGPU, glFormat, glType } = this.backend.get(texture); - - const fb = gl.createFramebuffer(); - - gl.bindFramebuffer(gl.READ_FRAMEBUFFER, fb); - gl.framebufferTexture2D(gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textureGPU, 0); - - const typedArrayType = this._getTypedArrayType(glType); - const bytesPerTexel = this._getBytesPerTexel(glFormat); - - const elementCount = width * height; - const byteLength = elementCount * bytesPerTexel; - - const buffer = gl.createBuffer(); - - gl.bindBuffer(gl.PIXEL_PACK_BUFFER, buffer); - gl.bufferData(gl.PIXEL_PACK_BUFFER, byteLength, gl.STREAM_READ); - gl.readPixels(x, y, width, height, glFormat, glType, 0); - gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null); - - await backend.utils._clientWaitAsync(); - - const dstBuffer = new typedArrayType(byteLength / typedArrayType.BYTES_PER_ELEMENT); - - gl.bindBuffer(gl.PIXEL_PACK_BUFFER, buffer); - gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, dstBuffer); - gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null); - - gl.deleteFramebuffer(fb); - - return dstBuffer; - } - - _getTypedArrayType(glType) { - const { gl } = this; - - if (glType === gl.UNSIGNED_BYTE) return Uint8Array; - - if (glType === gl.UNSIGNED_SHORT_4_4_4_4) return Uint16Array; - if (glType === gl.UNSIGNED_SHORT_5_5_5_1) return Uint16Array; - if (glType === gl.UNSIGNED_SHORT_5_6_5) return Uint16Array; - if (glType === gl.UNSIGNED_SHORT) return Uint16Array; - if (glType === gl.UNSIGNED_INT) return Uint32Array; - - if (glType === gl.FLOAT) return Float32Array; - - throw new Error(`Unsupported WebGL type: ${glType}`); - } - - _getBytesPerTexel(glFormat) { - const { gl } = this; - - if (glFormat === gl.RGBA) return 4; - if (glFormat === gl.RGB) return 3; - if (glFormat === gl.ALPHA) return 1; - } -} - -class WebGLExtensions { - constructor(backend) { - this.backend = backend; - - this.gl = this.backend.gl; - this.availableExtensions = this.gl.getSupportedExtensions(); - - this.extensions = {}; - } - - get(name) { - let extension = this.extensions[name]; - - if (extension === undefined) { - extension = this.gl.getExtension(name); - - this.extensions[name] = extension; - } - - return extension; - } - - has(name) { - return this.availableExtensions.includes(name); - } -} - -class WebGLCapabilities { - constructor(backend) { - this.backend = backend; - - this.maxAnisotropy = null; - } - - getMaxAnisotropy() { - if (this.maxAnisotropy !== null) return this.maxAnisotropy; - - const gl = this.backend.gl; - const extensions = this.backend.extensions; - - if (extensions.has('EXT_texture_filter_anisotropic') === true) { - const extension = extensions.get('EXT_texture_filter_anisotropic'); - - this.maxAnisotropy = gl.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT); - } else { - this.maxAnisotropy = 0; - } - - return this.maxAnisotropy; - } -} - -const GLFeatureName = { - WEBGL_multi_draw: 'WEBGL_multi_draw', - WEBGL_compressed_texture_astc: 'texture-compression-astc', - WEBGL_compressed_texture_etc: 'texture-compression-etc2', - WEBGL_compressed_texture_etc1: 'texture-compression-etc1', - WEBGL_compressed_texture_pvrtc: 'texture-compression-pvrtc', - WEBKIT_WEBGL_compressed_texture_pvrtc: 'texture-compression-pvrtc', - WEBGL_compressed_texture_s3tc: 'texture-compression-bc', - EXT_texture_compression_bptc: 'texture-compression-bptc', - EXT_disjoint_timer_query_webgl2: 'timestamp-query', -}; - -class WebGLBufferRenderer { - constructor(backend) { - this.gl = backend.gl; - this.extensions = backend.extensions; - this.info = backend.renderer.info; - this.mode = null; - this.index = 0; - this.type = null; - this.object = null; - } - - render(start, count) { - const { gl, mode, object, type, info, index } = this; - - if (index !== 0) { - gl.drawElements(mode, count, type, start); - } else { - gl.drawArrays(mode, start, count); - } - - info.update(object, count, mode, 1); - } - - renderInstances(start, count, primcount) { - const { gl, mode, type, index, object, info } = this; - - if (primcount === 0) return; - - if (index !== 0) { - gl.drawElementsInstanced(mode, count, type, start, primcount); - } else { - gl.drawArraysInstanced(mode, start, count, primcount); - } - - info.update(object, count, mode, primcount); - } - - renderMultiDraw(starts, counts, drawCount) { - const { extensions, mode, object, info } = this; - - if (drawCount === 0) return; - - const extension = extensions.get('WEBGL_multi_draw'); - - if (extension === null) { - for (let i = 0; i < drawCount; i++) { - this.render(starts[i], counts[i]); - } - } else { - if (this.index !== 0) { - extension.multiDrawElementsWEBGL(mode, counts, 0, this.type, starts, 0, drawCount); - } else { - extension.multiDrawArraysWEBGL(mode, starts, 0, counts, 0, drawCount); - } - - let elementCount = 0; - for (let i = 0; i < drawCount; i++) { - elementCount += counts[i]; - } - - info.update(object, elementCount, mode, 1); - } - } - - renderMultiDrawInstances(starts, counts, drawCount, primcount) { - const { extensions, mode, object, info } = this; - - if (drawCount === 0) return; - - const extension = extensions.get('WEBGL_multi_draw'); - - if (extension === null) { - for (let i = 0; i < drawCount; i++) { - this.renderInstances(starts[i], counts[i], primcount[i]); - } - } else { - if (this.index !== 0) { - extension.multiDrawElementsInstancedWEBGL(mode, counts, 0, this.type, starts, 0, primcount, 0, drawCount); - } else { - extension.multiDrawArraysInstancedWEBGL(mode, starts, 0, counts, 0, primcount, 0, drawCount); - } - - let elementCount = 0; - - for (let i = 0; i < drawCount; i++) { - elementCount += counts[i]; - } - - for (let i = 0; i < primcount.length; i++) { - info.update(object, elementCount, mode, primcount[i]); - } - } - } - - // -} - -// - -class WebGLBackend extends Backend { - constructor(parameters = {}) { - super(parameters); - - this.isWebGLBackend = true; - } - - init(renderer) { - super.init(renderer); - - // - - const parameters = this.parameters; - - const glContext = parameters.context !== undefined ? parameters.context : renderer.domElement.getContext('webgl2'); - - this.gl = glContext; - - this.extensions = new WebGLExtensions(this); - this.capabilities = new WebGLCapabilities(this); - this.attributeUtils = new WebGLAttributeUtils(this); - this.textureUtils = new WebGLTextureUtils(this); - this.bufferRenderer = new WebGLBufferRenderer(this); - - this.state = new WebGLState(this); - this.utils = new WebGLUtils(this); - - this.vaoCache = {}; - this.transformFeedbackCache = {}; - this.discard = false; - this.trackTimestamp = parameters.trackTimestamp === true; - - this.extensions.get('EXT_color_buffer_float'); - this.extensions.get('WEBGL_clip_cull_distance'); - this.extensions.get('OES_texture_float_linear'); - this.extensions.get('EXT_color_buffer_half_float'); - this.extensions.get('WEBGL_multisampled_render_to_texture'); - this.extensions.get('WEBGL_render_shared_exponent'); - this.extensions.get('WEBGL_multi_draw'); - - this.disjoint = this.extensions.get('EXT_disjoint_timer_query_webgl2'); - this.parallel = this.extensions.get('KHR_parallel_shader_compile'); - this._currentContext = null; - } - - get coordinateSystem() { - return WebGLCoordinateSystem; - } - - async getArrayBufferAsync(attribute) { - return await this.attributeUtils.getArrayBufferAsync(attribute); - } - - initTimestampQuery(renderContext) { - if (!this.disjoint || !this.trackTimestamp) return; - - const renderContextData = this.get(renderContext); - - if (this.queryRunning) { - if (!renderContextData.queryQueue) renderContextData.queryQueue = []; - renderContextData.queryQueue.push(renderContext); - return; - } - - if (renderContextData.activeQuery) { - this.gl.endQuery(this.disjoint.TIME_ELAPSED_EXT); - renderContextData.activeQuery = null; - } - - renderContextData.activeQuery = this.gl.createQuery(); - - if (renderContextData.activeQuery !== null) { - this.gl.beginQuery(this.disjoint.TIME_ELAPSED_EXT, renderContextData.activeQuery); - this.queryRunning = true; - } - } - - // timestamp utils - - prepareTimestampBuffer(renderContext) { - if (!this.disjoint || !this.trackTimestamp) return; - - const renderContextData = this.get(renderContext); - - if (renderContextData.activeQuery) { - this.gl.endQuery(this.disjoint.TIME_ELAPSED_EXT); - - if (!renderContextData.gpuQueries) renderContextData.gpuQueries = []; - renderContextData.gpuQueries.push({ query: renderContextData.activeQuery }); - renderContextData.activeQuery = null; - this.queryRunning = false; - - if (renderContextData.queryQueue && renderContextData.queryQueue.length > 0) { - const nextRenderContext = renderContextData.queryQueue.shift(); - this.initTimestampQuery(nextRenderContext); - } - } - } - - async resolveTimestampAsync(renderContext, type = 'render') { - if (!this.disjoint || !this.trackTimestamp) return; - - const renderContextData = this.get(renderContext); - - if (!renderContextData.gpuQueries) renderContextData.gpuQueries = []; - - for (let i = 0; i < renderContextData.gpuQueries.length; i++) { - const queryInfo = renderContextData.gpuQueries[i]; - const available = this.gl.getQueryParameter(queryInfo.query, this.gl.QUERY_RESULT_AVAILABLE); - const disjoint = this.gl.getParameter(this.disjoint.GPU_DISJOINT_EXT); - - if (available && !disjoint) { - const elapsed = this.gl.getQueryParameter(queryInfo.query, this.gl.QUERY_RESULT); - const duration = Number(elapsed) / 1000000; // Convert nanoseconds to milliseconds - this.gl.deleteQuery(queryInfo.query); - renderContextData.gpuQueries.splice(i, 1); // Remove the processed query - i--; - this.renderer.info.updateTimestamp(type, duration); - } - } - } - - getContext() { - return this.gl; - } - - beginRender(renderContext) { - const { gl } = this; - const renderContextData = this.get(renderContext); - - // - - // - - this.initTimestampQuery(renderContext); - - renderContextData.previousContext = this._currentContext; - this._currentContext = renderContext; - - this._setFramebuffer(renderContext); - - this.clear(renderContext.clearColor, renderContext.clearDepth, renderContext.clearStencil, renderContext, false); - - // - if (renderContext.viewport) { - this.updateViewport(renderContext); - } else { - gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); - } - - if (renderContext.scissor) { - const { x, y, width, height } = renderContext.scissorValue; - - gl.scissor(x, y, width, height); - } - - const occlusionQueryCount = renderContext.occlusionQueryCount; - - if (occlusionQueryCount > 0) { - // Get a reference to the array of objects with queries. The renderContextData property - // can be changed by another render pass before the async reading of all previous queries complete - renderContextData.currentOcclusionQueries = renderContextData.occlusionQueries; - renderContextData.currentOcclusionQueryObjects = renderContextData.occlusionQueryObjects; - - renderContextData.lastOcclusionObject = null; - renderContextData.occlusionQueries = new Array(occlusionQueryCount); - renderContextData.occlusionQueryObjects = new Array(occlusionQueryCount); - renderContextData.occlusionQueryIndex = 0; - } - } - - finishRender(renderContext) { - const { gl, state } = this; - const renderContextData = this.get(renderContext); - const previousContext = renderContextData.previousContext; - - const occlusionQueryCount = renderContext.occlusionQueryCount; - - if (occlusionQueryCount > 0) { - if (occlusionQueryCount > renderContextData.occlusionQueryIndex) { - gl.endQuery(gl.ANY_SAMPLES_PASSED); - } - - this.resolveOccludedAsync(renderContext); - } - - const textures = renderContext.textures; - - if (textures !== null) { - for (let i = 0; i < textures.length; i++) { - const texture = textures[i]; - - if (texture.generateMipmaps) { - this.generateMipmaps(texture); - } - } - } - - this._currentContext = previousContext; - - if (renderContext.textures !== null && renderContext.renderTarget) { - const renderTargetContextData = this.get(renderContext.renderTarget); - - const { samples } = renderContext.renderTarget; - - if (samples > 0) { - const fb = renderTargetContextData.framebuffers[renderContext.getCacheKey()]; - - const mask = gl.COLOR_BUFFER_BIT; - - const msaaFrameBuffer = renderTargetContextData.msaaFrameBuffer; - - const textures = renderContext.textures; - - state.bindFramebuffer(gl.READ_FRAMEBUFFER, msaaFrameBuffer); - state.bindFramebuffer(gl.DRAW_FRAMEBUFFER, fb); - - for (let i = 0; i < textures.length; i++) { - // TODO Add support for MRT - - if (renderContext.scissor) { - const { x, y, width, height } = renderContext.scissorValue; - - gl.blitFramebuffer(x, y, x + width, y + height, x, y, x + width, y + height, mask, gl.NEAREST); - gl.invalidateSubFramebuffer(gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray, x, y, width, height); - } else { - gl.blitFramebuffer(0, 0, renderContext.width, renderContext.height, 0, 0, renderContext.width, renderContext.height, mask, gl.NEAREST); - gl.invalidateFramebuffer(gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray); - } - } - } - } - - if (previousContext !== null) { - this._setFramebuffer(previousContext); - - if (previousContext.viewport) { - this.updateViewport(previousContext); - } else { - gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); - } - } - - this.prepareTimestampBuffer(renderContext); - } - - resolveOccludedAsync(renderContext) { - const renderContextData = this.get(renderContext); - - // handle occlusion query results - - const { currentOcclusionQueries, currentOcclusionQueryObjects } = renderContextData; - - if (currentOcclusionQueries && currentOcclusionQueryObjects) { - const occluded = new WeakSet(); - const { gl } = this; - - renderContextData.currentOcclusionQueryObjects = null; - renderContextData.currentOcclusionQueries = null; - - const check = () => { - let completed = 0; - - // check all queries and requeue as appropriate - for (let i = 0; i < currentOcclusionQueries.length; i++) { - const query = currentOcclusionQueries[i]; - - if (query === null) continue; - - if (gl.getQueryParameter(query, gl.QUERY_RESULT_AVAILABLE)) { - if (gl.getQueryParameter(query, gl.QUERY_RESULT) > 0) occluded.add(currentOcclusionQueryObjects[i]); - - currentOcclusionQueries[i] = null; - gl.deleteQuery(query); - - completed++; - } - } - - if (completed < currentOcclusionQueries.length) { - requestAnimationFrame(check); - } else { - renderContextData.occluded = occluded; - } - }; - - check(); - } - } - - isOccluded(renderContext, object) { - const renderContextData = this.get(renderContext); - - return renderContextData.occluded && renderContextData.occluded.has(object); - } - - updateViewport(renderContext) { - const gl = this.gl; - const { x, y, width, height } = renderContext.viewportValue; - - gl.viewport(x, y, width, height); - } - - setScissorTest(boolean) { - const gl = this.gl; - - if (boolean) { - gl.enable(gl.SCISSOR_TEST); - } else { - gl.disable(gl.SCISSOR_TEST); - } - } - - clear(color, depth, stencil, descriptor = null, setFrameBuffer = true) { - const { gl } = this; - - if (descriptor === null) { - descriptor = { - textures: null, - clearColorValue: this.getClearColor(), - }; - } - - // - - let clear = 0; - - if (color) clear |= gl.COLOR_BUFFER_BIT; - if (depth) clear |= gl.DEPTH_BUFFER_BIT; - if (stencil) clear |= gl.STENCIL_BUFFER_BIT; - - if (clear !== 0) { - const clearColor = descriptor.clearColorValue || this.getClearColor(); - - // premultiply alpha - - clearColor.r *= clearColor.a; - clearColor.g *= clearColor.a; - clearColor.b *= clearColor.a; - - if (depth) this.state.setDepthMask(true); - - if (descriptor.textures === null) { - gl.clearColor(clearColor.r, clearColor.g, clearColor.b, clearColor.a); - gl.clear(clear); - } else { - if (setFrameBuffer) this._setFramebuffer(descriptor); - - if (color) { - for (let i = 0; i < descriptor.textures.length; i++) { - gl.clearBufferfv(gl.COLOR, i, [clearColor.r, clearColor.g, clearColor.b, clearColor.a]); - } - } - - if (depth && stencil) { - gl.clearBufferfi(gl.DEPTH_STENCIL, 0, 1, 0); - } else if (depth) { - gl.clearBufferfv(gl.DEPTH, 0, [1.0]); - } else if (stencil) { - gl.clearBufferiv(gl.STENCIL, 0, [0]); - } - } - } - } - - beginCompute(computeGroup) { - const { state, gl } = this; - - state.bindFramebuffer(gl.FRAMEBUFFER, null); - this.initTimestampQuery(computeGroup); - } - - compute(computeGroup, computeNode, bindings, pipeline) { - const { state, gl } = this; - - if (!this.discard) { - // required here to handle async behaviour of render.compute() - gl.enable(gl.RASTERIZER_DISCARD); - this.discard = true; - } - - const { programGPU, transformBuffers, attributes } = this.get(pipeline); - - const vaoKey = this._getVaoKey(null, attributes); - - const vaoGPU = this.vaoCache[vaoKey]; - - if (vaoGPU === undefined) { - this._createVao(null, attributes); - } else { - gl.bindVertexArray(vaoGPU); - } - - state.useProgram(programGPU); - - this._bindUniforms(bindings); - - const transformFeedbackGPU = this._getTransformFeedback(transformBuffers); - - gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, transformFeedbackGPU); - gl.beginTransformFeedback(gl.POINTS); - - if (attributes[0].isStorageInstancedBufferAttribute) { - gl.drawArraysInstanced(gl.POINTS, 0, 1, computeNode.count); - } else { - gl.drawArrays(gl.POINTS, 0, computeNode.count); - } - - gl.endTransformFeedback(); - gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, null); - - // switch active buffers - - for (let i = 0; i < transformBuffers.length; i++) { - const dualAttributeData = transformBuffers[i]; - - if (dualAttributeData.pbo) { - this.textureUtils.copyBufferToTexture(dualAttributeData.transformBuffer, dualAttributeData.pbo); - } - - dualAttributeData.switchBuffers(); - } - } - - finishCompute(computeGroup) { - const gl = this.gl; - - this.discard = false; - - gl.disable(gl.RASTERIZER_DISCARD); - - this.prepareTimestampBuffer(computeGroup); - } - - draw(renderObject /*, info*/) { - const { object, pipeline, material, context } = renderObject; - const { programGPU } = this.get(pipeline); - - const { gl, state } = this; - - const contextData = this.get(context); - - // - - this._bindUniforms(renderObject.getBindings()); - - const frontFaceCW = object.isMesh && object.matrixWorld.determinant() < 0; - - state.setMaterial(material, frontFaceCW); - - state.useProgram(programGPU); - - // - - let vaoGPU = renderObject.staticVao; - - if (vaoGPU === undefined) { - const vaoKey = this._getVaoKey(renderObject.getIndex(), renderObject.getAttributes()); - - vaoGPU = this.vaoCache[vaoKey]; - - if (vaoGPU === undefined) { - let staticVao; - - ({ vaoGPU, staticVao } = this._createVao(renderObject.getIndex(), renderObject.getAttributes())); - - if (staticVao) renderObject.staticVao = vaoGPU; - } - } - - gl.bindVertexArray(vaoGPU); - - // - - const index = renderObject.getIndex(); - - const geometry = renderObject.geometry; - const drawRange = renderObject.drawRange; - const firstVertex = drawRange.start; - - // - - const lastObject = contextData.lastOcclusionObject; - - if (lastObject !== object && lastObject !== undefined) { - if (lastObject !== null && lastObject.occlusionTest === true) { - gl.endQuery(gl.ANY_SAMPLES_PASSED); - - contextData.occlusionQueryIndex++; - } - - if (object.occlusionTest === true) { - const query = gl.createQuery(); - - gl.beginQuery(gl.ANY_SAMPLES_PASSED, query); - - contextData.occlusionQueries[contextData.occlusionQueryIndex] = query; - contextData.occlusionQueryObjects[contextData.occlusionQueryIndex] = object; - } - - contextData.lastOcclusionObject = object; - } - - // - - const renderer = this.bufferRenderer; - - if (object.isPoints) renderer.mode = gl.POINTS; - else if (object.isLineSegments) renderer.mode = gl.LINES; - else if (object.isLine) renderer.mode = gl.LINE_STRIP; - else if (object.isLineLoop) renderer.mode = gl.LINE_LOOP; - else { - if (material.wireframe === true) { - state.setLineWidth(material.wireframeLinewidth * this.renderer.getPixelRatio()); - renderer.mode = gl.LINES; - } else { - renderer.mode = gl.TRIANGLES; - } - } - - // - - let count; - - renderer.object = object; - - if (index !== null) { - const indexData = this.get(index); - const indexCount = drawRange.count !== Infinity ? drawRange.count : index.count; - - renderer.index = index.count; - renderer.type = indexData.type; - - count = indexCount; - } else { - renderer.index = 0; - - const vertexCount = drawRange.count !== Infinity ? drawRange.count : geometry.attributes.position.count; - - count = vertexCount; - } - - const instanceCount = this.getInstanceCount(renderObject); - - if (object.isBatchedMesh) { - if (object._multiDrawInstances !== null) { - renderer.renderMultiDrawInstances(object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances); - } else if (!this.hasFeature('WEBGL_multi_draw')) { - warnOnce('THREE.WebGLRenderer: WEBGL_multi_draw not supported.'); - } else { - renderer.renderMultiDraw(object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount); - } - } else if (instanceCount > 1) { - renderer.renderInstances(firstVertex, count, instanceCount); - } else { - renderer.render(firstVertex, count); - } - // - - gl.bindVertexArray(null); - } - - needsRenderUpdate(/*renderObject*/) { - return false; - } - - getRenderCacheKey(/*renderObject*/) { - return ''; - } - - // textures - - createDefaultTexture(texture) { - this.textureUtils.createDefaultTexture(texture); - } - - createTexture(texture, options) { - this.textureUtils.createTexture(texture, options); - } - - updateTexture(texture, options) { - this.textureUtils.updateTexture(texture, options); - } - - generateMipmaps(texture) { - this.textureUtils.generateMipmaps(texture); - } - - destroyTexture(texture) { - this.textureUtils.destroyTexture(texture); - } - - copyTextureToBuffer(texture, x, y, width, height) { - return this.textureUtils.copyTextureToBuffer(texture, x, y, width, height); - } - - createSampler(/*texture*/) { - //console.warn( 'Abstract class.' ); - } - - destroySampler() {} - - // node builder - - createNodeBuilder(object, renderer) { - return new GLSLNodeBuilder(object, renderer); - } - - // program - - createProgram(program) { - const gl = this.gl; - const { stage, code } = program; - - const shader = stage === 'fragment' ? gl.createShader(gl.FRAGMENT_SHADER) : gl.createShader(gl.VERTEX_SHADER); - - gl.shaderSource(shader, code); - gl.compileShader(shader); - - this.set(program, { - shaderGPU: shader, - }); - } - - destroyProgram(/*program*/) { - console.warn('Abstract class.'); - } - - createRenderPipeline(renderObject, promises) { - const gl = this.gl; - const pipeline = renderObject.pipeline; - - // Program - - const { fragmentProgram, vertexProgram } = pipeline; - - const programGPU = gl.createProgram(); - - const fragmentShader = this.get(fragmentProgram).shaderGPU; - const vertexShader = this.get(vertexProgram).shaderGPU; - - gl.attachShader(programGPU, fragmentShader); - gl.attachShader(programGPU, vertexShader); - gl.linkProgram(programGPU); - - this.set(pipeline, { - programGPU, - fragmentShader, - vertexShader, - }); - - if (promises !== null && this.parallel) { - const p = new Promise((resolve /*, reject*/) => { - const parallel = this.parallel; - const checkStatus = () => { - if (gl.getProgramParameter(programGPU, parallel.COMPLETION_STATUS_KHR)) { - this._completeCompile(renderObject, pipeline); - resolve(); - } else { - requestAnimationFrame(checkStatus); - } - }; - - checkStatus(); - }); - - promises.push(p); - - return; - } - - this._completeCompile(renderObject, pipeline); - } - - _handleSource(string, errorLine) { - const lines = string.split('\n'); - const lines2 = []; - - const from = Math.max(errorLine - 6, 0); - const to = Math.min(errorLine + 6, lines.length); - - for (let i = from; i < to; i++) { - const line = i + 1; - lines2.push(`${line === errorLine ? '>' : ' '} ${line}: ${lines[i]}`); - } - - return lines2.join('\n'); - } - - _getShaderErrors(gl, shader, type) { - const status = gl.getShaderParameter(shader, gl.COMPILE_STATUS); - const errors = gl.getShaderInfoLog(shader).trim(); - - if (status && errors === '') return ''; - - const errorMatches = /ERROR: 0:(\d+)/.exec(errors); - if (errorMatches) { - const errorLine = parseInt(errorMatches[1]); - return type.toUpperCase() + '\n\n' + errors + '\n\n' + this._handleSource(gl.getShaderSource(shader), errorLine); - } else { - return errors; - } - } - - _logProgramError(programGPU, glFragmentShader, glVertexShader) { - if (this.renderer.debug.checkShaderErrors) { - const gl = this.gl; - - const programLog = gl.getProgramInfoLog(programGPU).trim(); - - if (gl.getProgramParameter(programGPU, gl.LINK_STATUS) === false) { - if (typeof this.renderer.debug.onShaderError === 'function') { - this.renderer.debug.onShaderError(gl, programGPU, glVertexShader, glFragmentShader); - } else { - // default error reporting - - const vertexErrors = this._getShaderErrors(gl, glVertexShader, 'vertex'); - const fragmentErrors = this._getShaderErrors(gl, glFragmentShader, 'fragment'); - - console.error('THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' + 'VALIDATE_STATUS ' + gl.getProgramParameter(programGPU, gl.VALIDATE_STATUS) + '\n\n' + 'Program Info Log: ' + programLog + '\n' + vertexErrors + '\n' + fragmentErrors); - } - } else if (programLog !== '') { - console.warn('THREE.WebGLProgram: Program Info Log:', programLog); - } - } - } - - _completeCompile(renderObject, pipeline) { - const { state, gl } = this; - const pipelineData = this.get(pipeline); - const { programGPU, fragmentShader, vertexShader } = pipelineData; - - if (gl.getProgramParameter(programGPU, gl.LINK_STATUS) === false) { - this._logProgramError(programGPU, fragmentShader, vertexShader); - } - - state.useProgram(programGPU); - - // Bindings - - const bindings = renderObject.getBindings(); - - this._setupBindings(bindings, programGPU); - - // - - this.set(pipeline, { - programGPU, - }); - } - - createComputePipeline(computePipeline, bindings) { - const { state, gl } = this; - - // Program - - const fragmentProgram = { - stage: 'fragment', - code: '#version 300 es\nprecision highp float;\nvoid main() {}', - }; - - this.createProgram(fragmentProgram); - - const { computeProgram } = computePipeline; - - const programGPU = gl.createProgram(); - - const fragmentShader = this.get(fragmentProgram).shaderGPU; - const vertexShader = this.get(computeProgram).shaderGPU; - - const transforms = computeProgram.transforms; - - const transformVaryingNames = []; - const transformAttributeNodes = []; - - for (let i = 0; i < transforms.length; i++) { - const transform = transforms[i]; - - transformVaryingNames.push(transform.varyingName); - transformAttributeNodes.push(transform.attributeNode); - } - - gl.attachShader(programGPU, fragmentShader); - gl.attachShader(programGPU, vertexShader); - - gl.transformFeedbackVaryings(programGPU, transformVaryingNames, gl.SEPARATE_ATTRIBS); - - gl.linkProgram(programGPU); - - if (gl.getProgramParameter(programGPU, gl.LINK_STATUS) === false) { - this._logProgramError(programGPU, fragmentShader, vertexShader); - } - - state.useProgram(programGPU); - - // Bindings - - this.createBindings(null, bindings); - - this._setupBindings(bindings, programGPU); - - const attributeNodes = computeProgram.attributes; - const attributes = []; - const transformBuffers = []; - - for (let i = 0; i < attributeNodes.length; i++) { - const attribute = attributeNodes[i].node.attribute; - - attributes.push(attribute); - - if (!this.has(attribute)) this.attributeUtils.createAttribute(attribute, gl.ARRAY_BUFFER); - } - - for (let i = 0; i < transformAttributeNodes.length; i++) { - const attribute = transformAttributeNodes[i].attribute; - - if (!this.has(attribute)) this.attributeUtils.createAttribute(attribute, gl.ARRAY_BUFFER); - - const attributeData = this.get(attribute); - - transformBuffers.push(attributeData); - } - - // - - this.set(computePipeline, { - programGPU, - transformBuffers, - attributes, - }); - } - - createBindings(bindGroup, bindings) { - this.updateBindings(bindGroup, bindings); - } - - updateBindings(bindGroup, bindings) { - const { state, gl } = this; - - let groupIndex = 0; - let textureIndex = 0; - - for (const bindGroup of bindings) { - for (const binding of bindGroup.bindings) { - if (binding.isUniformsGroup || binding.isUniformBuffer) { - const bufferGPU = gl.createBuffer(); - const data = binding.buffer; - - gl.bindBuffer(gl.UNIFORM_BUFFER, bufferGPU); - gl.bufferData(gl.UNIFORM_BUFFER, data, gl.DYNAMIC_DRAW); - state.bindBufferBase(gl.UNIFORM_BUFFER, groupIndex, bufferGPU); - - this.set(binding, { - index: groupIndex++, - bufferGPU, - }); - } else if (binding.isSampledTexture) { - const { textureGPU, glTextureType } = this.get(binding.texture); - - this.set(binding, { - index: textureIndex++, - textureGPU, - glTextureType, - }); - } - } - } - } - - updateBinding(binding) { - const gl = this.gl; - - if (binding.isUniformsGroup || binding.isUniformBuffer) { - const bindingData = this.get(binding); - const bufferGPU = bindingData.bufferGPU; - const data = binding.buffer; - - gl.bindBuffer(gl.UNIFORM_BUFFER, bufferGPU); - gl.bufferData(gl.UNIFORM_BUFFER, data, gl.DYNAMIC_DRAW); - } - } - - // attributes - - createIndexAttribute(attribute) { - const gl = this.gl; - - this.attributeUtils.createAttribute(attribute, gl.ELEMENT_ARRAY_BUFFER); - } - - createAttribute(attribute) { - if (this.has(attribute)) return; - - const gl = this.gl; - - this.attributeUtils.createAttribute(attribute, gl.ARRAY_BUFFER); - } - - createStorageAttribute(attribute) { - if (this.has(attribute)) return; - - const gl = this.gl; - - this.attributeUtils.createAttribute(attribute, gl.ARRAY_BUFFER); - } - - updateAttribute(attribute) { - this.attributeUtils.updateAttribute(attribute); - } - - destroyAttribute(attribute) { - this.attributeUtils.destroyAttribute(attribute); - } - - updateSize() { - //console.warn( 'Abstract class.' ); - } - - hasFeature(name) { - const keysMatching = Object.keys(GLFeatureName).filter((key) => GLFeatureName[key] === name); - - const extensions = this.extensions; - - for (let i = 0; i < keysMatching.length; i++) { - if (extensions.has(keysMatching[i])) return true; - } - - return false; - } - - getMaxAnisotropy() { - return this.capabilities.getMaxAnisotropy(); - } - - copyTextureToTexture(position, srcTexture, dstTexture, level) { - this.textureUtils.copyTextureToTexture(position, srcTexture, dstTexture, level); - } - - copyFramebufferToTexture(texture, renderContext) { - this.textureUtils.copyFramebufferToTexture(texture, renderContext); - } - - _setFramebuffer(descriptor) { - const { gl, state } = this; - - let currentFrameBuffer = null; - - if (descriptor.textures !== null) { - const renderTarget = descriptor.renderTarget; - const renderTargetContextData = this.get(renderTarget); - const { samples, depthBuffer, stencilBuffer } = renderTarget; - - const isCube = renderTarget.isWebGLCubeRenderTarget === true; - - let msaaFb = renderTargetContextData.msaaFrameBuffer; - let depthRenderbuffer = renderTargetContextData.depthRenderbuffer; - - const cacheKey = getCacheKey(descriptor); - - let fb; - - if (isCube) { - renderTargetContextData.cubeFramebuffers || (renderTargetContextData.cubeFramebuffers = {}); - - fb = renderTargetContextData.cubeFramebuffers[cacheKey]; - } else { - renderTargetContextData.framebuffers || (renderTargetContextData.framebuffers = {}); - - fb = renderTargetContextData.framebuffers[cacheKey]; - } - - if (fb === undefined) { - fb = gl.createFramebuffer(); - - state.bindFramebuffer(gl.FRAMEBUFFER, fb); - - const textures = descriptor.textures; - - if (isCube) { - renderTargetContextData.cubeFramebuffers[cacheKey] = fb; - - const { textureGPU } = this.get(textures[0]); - - const cubeFace = this.renderer._activeCubeFace; - - gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace, textureGPU, 0); - } else { - renderTargetContextData.framebuffers[cacheKey] = fb; - - for (let i = 0; i < textures.length; i++) { - const texture = textures[i]; - const textureData = this.get(texture); - textureData.renderTarget = descriptor.renderTarget; - - const attachment = gl.COLOR_ATTACHMENT0 + i; - - gl.framebufferTexture2D(gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, 0); - } - - state.drawBuffers(descriptor, fb); - } - - if (descriptor.depthTexture !== null) { - const textureData = this.get(descriptor.depthTexture); - const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT; - - gl.framebufferTexture2D(gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0); - } - } - - if (samples > 0) { - if (msaaFb === undefined) { - const invalidationArray = []; - - msaaFb = gl.createFramebuffer(); - - state.bindFramebuffer(gl.FRAMEBUFFER, msaaFb); - - const msaaRenderbuffers = []; - - const textures = descriptor.textures; - - for (let i = 0; i < textures.length; i++) { - msaaRenderbuffers[i] = gl.createRenderbuffer(); - - gl.bindRenderbuffer(gl.RENDERBUFFER, msaaRenderbuffers[i]); - - invalidationArray.push(gl.COLOR_ATTACHMENT0 + i); - - if (depthBuffer) { - const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT; - invalidationArray.push(depthStyle); - } - - const texture = descriptor.textures[i]; - const textureData = this.get(texture); - - gl.renderbufferStorageMultisample(gl.RENDERBUFFER, samples, textureData.glInternalFormat, descriptor.width, descriptor.height); - gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, msaaRenderbuffers[i]); - } - - renderTargetContextData.msaaFrameBuffer = msaaFb; - renderTargetContextData.msaaRenderbuffers = msaaRenderbuffers; - - if (depthRenderbuffer === undefined) { - depthRenderbuffer = gl.createRenderbuffer(); - this.textureUtils.setupRenderBufferStorage(depthRenderbuffer, descriptor); - - renderTargetContextData.depthRenderbuffer = depthRenderbuffer; - - const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT; - invalidationArray.push(depthStyle); - } - - renderTargetContextData.invalidationArray = invalidationArray; - } - - currentFrameBuffer = renderTargetContextData.msaaFrameBuffer; - } else { - currentFrameBuffer = fb; - } - } - - state.bindFramebuffer(gl.FRAMEBUFFER, currentFrameBuffer); - } - - _getVaoKey(index, attributes) { - let key = []; - - if (index !== null) { - const indexData = this.get(index); - - key += ':' + indexData.id; - } - - for (let i = 0; i < attributes.length; i++) { - const attributeData = this.get(attributes[i]); - - key += ':' + attributeData.id; - } - - return key; - } - - _createVao(index, attributes) { - const { gl } = this; - - const vaoGPU = gl.createVertexArray(); - let key = ''; - - let staticVao = true; - - gl.bindVertexArray(vaoGPU); - - if (index !== null) { - const indexData = this.get(index); - - gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexData.bufferGPU); - - key += ':' + indexData.id; - } - - for (let i = 0; i < attributes.length; i++) { - const attribute = attributes[i]; - const attributeData = this.get(attribute); - - key += ':' + attributeData.id; - - gl.bindBuffer(gl.ARRAY_BUFFER, attributeData.bufferGPU); - gl.enableVertexAttribArray(i); - - if (attribute.isStorageBufferAttribute || attribute.isStorageInstancedBufferAttribute) staticVao = false; - - let stride, offset; - - if (attribute.isInterleavedBufferAttribute === true) { - stride = attribute.data.stride * attributeData.bytesPerElement; - offset = attribute.offset * attributeData.bytesPerElement; - } else { - stride = 0; - offset = 0; - } - - if (attributeData.isInteger) { - gl.vertexAttribIPointer(i, attribute.itemSize, attributeData.type, stride, offset); - } else { - gl.vertexAttribPointer(i, attribute.itemSize, attributeData.type, attribute.normalized, stride, offset); - } - - if (attribute.isInstancedBufferAttribute && !attribute.isInterleavedBufferAttribute) { - gl.vertexAttribDivisor(i, attribute.meshPerAttribute); - } else if (attribute.isInterleavedBufferAttribute && attribute.data.isInstancedInterleavedBuffer) { - gl.vertexAttribDivisor(i, attribute.data.meshPerAttribute); - } - } - - gl.bindBuffer(gl.ARRAY_BUFFER, null); - - this.vaoCache[key] = vaoGPU; - - return { vaoGPU, staticVao }; - } - - _getTransformFeedback(transformBuffers) { - let key = ''; - - for (let i = 0; i < transformBuffers.length; i++) { - key += ':' + transformBuffers[i].id; - } - - let transformFeedbackGPU = this.transformFeedbackCache[key]; - - if (transformFeedbackGPU !== undefined) { - return transformFeedbackGPU; - } - - const { gl } = this; - - transformFeedbackGPU = gl.createTransformFeedback(); - - gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, transformFeedbackGPU); - - for (let i = 0; i < transformBuffers.length; i++) { - const attributeData = transformBuffers[i]; - - gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, i, attributeData.transformBuffer); - } - - gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, null); - - this.transformFeedbackCache[key] = transformFeedbackGPU; - - return transformFeedbackGPU; - } - - _setupBindings(bindings, programGPU) { - const gl = this.gl; - - for (const bindGroup of bindings) { - for (const binding of bindGroup.bindings) { - const bindingData = this.get(binding); - const index = bindingData.index; - - if (binding.isUniformsGroup || binding.isUniformBuffer) { - const location = gl.getUniformBlockIndex(programGPU, binding.name); - gl.uniformBlockBinding(programGPU, location, index); - } else if (binding.isSampledTexture) { - const location = gl.getUniformLocation(programGPU, binding.name); - gl.uniform1i(location, index); - } - } - } - } - - _bindUniforms(bindings) { - const { gl, state } = this; - - for (const bindGroup of bindings) { - for (const binding of bindGroup.bindings) { - const bindingData = this.get(binding); - const index = bindingData.index; - - if (binding.isUniformsGroup || binding.isUniformBuffer) { - // TODO USE bindBufferRange to group multiple uniform buffers - state.bindBufferBase(gl.UNIFORM_BUFFER, index, bindingData.bufferGPU); - } else if (binding.isSampledTexture) { - state.bindTexture(bindingData.glTextureType, bindingData.textureGPU, gl.TEXTURE0 + index); - } - } - } - } -} - -class Sampler extends Binding { - constructor(name, texture) { - super(name); - - this.texture = texture; - this.version = texture ? texture.version : 0; - - this.isSampler = true; - } -} - -class NodeSampler extends Sampler { - constructor(name, textureNode, groupNode) { - super(name, textureNode ? textureNode.value : null); - - this.textureNode = textureNode; - this.groupNode = groupNode; - } - - update() { - this.texture = this.textureNode.value; - } -} - -class StorageBuffer extends Buffer { - constructor(name, attribute) { - super(name, attribute ? attribute.array : null); - - this.attribute = attribute; - - this.isStorageBuffer = true; - } -} - -let _id = 0; - -class NodeStorageBuffer extends StorageBuffer { - constructor(nodeUniform, groupNode) { - super('StorageBuffer_' + _id++, nodeUniform ? nodeUniform.value : null); - - this.nodeUniform = nodeUniform; - this.access = nodeUniform ? nodeUniform.access : GPUBufferBindingType.Storage; - this.groupNode = groupNode; - } - - get buffer() { - return this.nodeUniform.value; - } -} - -class WebGPUTexturePassUtils extends DataMap { - constructor(device) { - super(); - - this.device = device; - - const mipmapVertexSource = ` -struct VarysStruct { - @builtin( position ) Position: vec4, - @location( 0 ) vTex : vec2 -}; - -@vertex -fn main( @builtin( vertex_index ) vertexIndex : u32 ) -> VarysStruct { - - var Varys : VarysStruct; - - var pos = array< vec2, 4 >( - vec2( -1.0, 1.0 ), - vec2( 1.0, 1.0 ), - vec2( -1.0, -1.0 ), - vec2( 1.0, -1.0 ) - ); - - var tex = array< vec2, 4 >( - vec2( 0.0, 0.0 ), - vec2( 1.0, 0.0 ), - vec2( 0.0, 1.0 ), - vec2( 1.0, 1.0 ) - ); - - Varys.vTex = tex[ vertexIndex ]; - Varys.Position = vec4( pos[ vertexIndex ], 0.0, 1.0 ); - - return Varys; - -} -`; - - const mipmapFragmentSource = ` -@group( 0 ) @binding( 0 ) -var imgSampler : sampler; - -@group( 0 ) @binding( 1 ) -var img : texture_2d; - -@fragment -fn main( @location( 0 ) vTex : vec2 ) -> @location( 0 ) vec4 { - - return textureSample( img, imgSampler, vTex ); - -} -`; - - const flipYFragmentSource = ` -@group( 0 ) @binding( 0 ) -var imgSampler : sampler; - -@group( 0 ) @binding( 1 ) -var img : texture_2d; - -@fragment -fn main( @location( 0 ) vTex : vec2 ) -> @location( 0 ) vec4 { - - return textureSample( img, imgSampler, vec2( vTex.x, 1.0 - vTex.y ) ); - -} -`; - this.mipmapSampler = device.createSampler({ minFilter: GPUFilterMode.Linear }); - this.flipYSampler = device.createSampler({ minFilter: GPUFilterMode.Nearest }); //@TODO?: Consider using textureLoad() - - // We'll need a new pipeline for every texture format used. - this.transferPipelines = {}; - this.flipYPipelines = {}; - - this.mipmapVertexShaderModule = device.createShaderModule({ - label: 'mipmapVertex', - code: mipmapVertexSource, - }); - - this.mipmapFragmentShaderModule = device.createShaderModule({ - label: 'mipmapFragment', - code: mipmapFragmentSource, - }); - - this.flipYFragmentShaderModule = device.createShaderModule({ - label: 'flipYFragment', - code: flipYFragmentSource, - }); - } - - getTransferPipeline(format) { - let pipeline = this.transferPipelines[format]; - - if (pipeline === undefined) { - pipeline = this.device.createRenderPipeline({ - label: `mipmap-${format}`, - vertex: { - module: this.mipmapVertexShaderModule, - entryPoint: 'main', - }, - fragment: { - module: this.mipmapFragmentShaderModule, - entryPoint: 'main', - targets: [{ format }], - }, - primitive: { - topology: GPUPrimitiveTopology.TriangleStrip, - stripIndexFormat: GPUIndexFormat.Uint32, - }, - layout: 'auto', - }); - - this.transferPipelines[format] = pipeline; - } - - return pipeline; - } - - getFlipYPipeline(format) { - let pipeline = this.flipYPipelines[format]; - - if (pipeline === undefined) { - pipeline = this.device.createRenderPipeline({ - label: `flipY-${format}`, - vertex: { - module: this.mipmapVertexShaderModule, - entryPoint: 'main', - }, - fragment: { - module: this.flipYFragmentShaderModule, - entryPoint: 'main', - targets: [{ format }], - }, - primitive: { - topology: GPUPrimitiveTopology.TriangleStrip, - stripIndexFormat: GPUIndexFormat.Uint32, - }, - layout: 'auto', - }); - - this.flipYPipelines[format] = pipeline; - } - - return pipeline; - } - - flipY(textureGPU, textureGPUDescriptor, baseArrayLayer = 0) { - const format = textureGPUDescriptor.format; - const { width, height } = textureGPUDescriptor.size; - - const transferPipeline = this.getTransferPipeline(format); - const flipYPipeline = this.getFlipYPipeline(format); - - const tempTexture = this.device.createTexture({ - size: { width, height, depthOrArrayLayers: 1 }, - format, - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING, - }); - - const srcView = textureGPU.createView({ - baseMipLevel: 0, - mipLevelCount: 1, - dimension: GPUTextureViewDimension.TwoD, - baseArrayLayer, - }); - - const dstView = tempTexture.createView({ - baseMipLevel: 0, - mipLevelCount: 1, - dimension: GPUTextureViewDimension.TwoD, - baseArrayLayer: 0, - }); - - const commandEncoder = this.device.createCommandEncoder({}); - - const pass = (pipeline, sourceView, destinationView) => { - const bindGroupLayout = pipeline.getBindGroupLayout(0); // @TODO: Consider making this static. - - const bindGroup = this.device.createBindGroup({ - layout: bindGroupLayout, - entries: [ - { - binding: 0, - resource: this.flipYSampler, - }, - { - binding: 1, - resource: sourceView, - }, - ], - }); - - const passEncoder = commandEncoder.beginRenderPass({ - colorAttachments: [ - { - view: destinationView, - loadOp: GPULoadOp.Clear, - storeOp: GPUStoreOp.Store, - clearValue: [0, 0, 0, 0], - }, - ], - }); - - passEncoder.setPipeline(pipeline); - passEncoder.setBindGroup(0, bindGroup); - passEncoder.draw(4, 1, 0, 0); - passEncoder.end(); - }; - - pass(transferPipeline, srcView, dstView); - pass(flipYPipeline, dstView, srcView); - - this.device.queue.submit([commandEncoder.finish()]); - - tempTexture.destroy(); - } - - generateMipmaps(textureGPU, textureGPUDescriptor, baseArrayLayer = 0) { - const textureData = this.get(textureGPU); - - if (textureData.useCount === undefined) { - textureData.useCount = 0; - textureData.layers = []; - } - - const passes = textureData.layers[baseArrayLayer] || this._mipmapCreateBundles(textureGPU, textureGPUDescriptor, baseArrayLayer); - - const commandEncoder = this.device.createCommandEncoder({}); - - this._mipmapRunBundles(commandEncoder, passes); - - this.device.queue.submit([commandEncoder.finish()]); - - if (textureData.useCount !== 0) textureData.layers[baseArrayLayer] = passes; - - textureData.useCount++; - } - - _mipmapCreateBundles(textureGPU, textureGPUDescriptor, baseArrayLayer) { - const pipeline = this.getTransferPipeline(textureGPUDescriptor.format); - - const bindGroupLayout = pipeline.getBindGroupLayout(0); // @TODO: Consider making this static. - - let srcView = textureGPU.createView({ - baseMipLevel: 0, - mipLevelCount: 1, - dimension: GPUTextureViewDimension.TwoD, - baseArrayLayer, - }); - - const passes = []; - - for (let i = 1; i < textureGPUDescriptor.mipLevelCount; i++) { - const bindGroup = this.device.createBindGroup({ - layout: bindGroupLayout, - entries: [ - { - binding: 0, - resource: this.mipmapSampler, - }, - { - binding: 1, - resource: srcView, - }, - ], - }); - - const dstView = textureGPU.createView({ - baseMipLevel: i, - mipLevelCount: 1, - dimension: GPUTextureViewDimension.TwoD, - baseArrayLayer, - }); - - const passDescriptor = { - colorAttachments: [ - { - view: dstView, - loadOp: GPULoadOp.Clear, - storeOp: GPUStoreOp.Store, - clearValue: [0, 0, 0, 0], - }, - ], - }; - - const passEncoder = this.device.createRenderBundleEncoder({ - colorFormats: [textureGPUDescriptor.format], - }); - - passEncoder.setPipeline(pipeline); - passEncoder.setBindGroup(0, bindGroup); - passEncoder.draw(4, 1, 0, 0); - - passes.push({ - renderBundles: [passEncoder.finish()], - passDescriptor, - }); - - srcView = dstView; - } - - return passes; - } - - _mipmapRunBundles(commandEncoder, passes) { - const levels = passes.length; - - for (let i = 0; i < levels; i++) { - const pass = passes[i]; - - const passEncoder = commandEncoder.beginRenderPass(pass.passDescriptor); - - passEncoder.executeBundles(pass.renderBundles); - - passEncoder.end(); - } - } -} - -const _compareToWebGPU = { - [NeverCompare]: 'never', - [LessCompare]: 'less', - [EqualCompare]: 'equal', - [LessEqualCompare]: 'less-equal', - [GreaterCompare]: 'greater', - [GreaterEqualCompare]: 'greater-equal', - [AlwaysCompare]: 'always', - [NotEqualCompare]: 'not-equal', -}; - -const _flipMap = [0, 1, 3, 2, 4, 5]; - -class WebGPUTextureUtils { - constructor(backend) { - this.backend = backend; - - this._passUtils = null; - - this.defaultTexture = {}; - this.defaultCubeTexture = {}; - this.defaultVideoFrame = null; - - this.colorBuffer = null; - - this.depthTexture = new DepthTexture(); - this.depthTexture.name = 'depthBuffer'; - } - - createSampler(texture) { - const backend = this.backend; - const device = backend.device; - - const textureGPU = backend.get(texture); - - const samplerDescriptorGPU = { - addressModeU: this._convertAddressMode(texture.wrapS), - addressModeV: this._convertAddressMode(texture.wrapT), - addressModeW: this._convertAddressMode(texture.wrapR), - magFilter: this._convertFilterMode(texture.magFilter), - minFilter: this._convertFilterMode(texture.minFilter), - mipmapFilter: this._convertFilterMode(texture.minFilter), - maxAnisotropy: texture.anisotropy, - }; - - if (texture.isDepthTexture && texture.compareFunction !== null) { - samplerDescriptorGPU.compare = _compareToWebGPU[texture.compareFunction]; - } - - textureGPU.sampler = device.createSampler(samplerDescriptorGPU); - } - - createDefaultTexture(texture) { - let textureGPU; - - const format = getFormat(texture); - - if (texture.isCubeTexture) { - textureGPU = this._getDefaultCubeTextureGPU(format); - } else if (texture.isVideoTexture) { - this.backend.get(texture).externalTexture = this._getDefaultVideoFrame(); - } else { - textureGPU = this._getDefaultTextureGPU(format); - } - - this.backend.get(texture).texture = textureGPU; - } - - createTexture(texture, options = {}) { - const backend = this.backend; - const textureData = backend.get(texture); - - if (textureData.initialized) { - throw new Error('WebGPUTextureUtils: Texture already initialized.'); - } - - if (options.needsMipmaps === undefined) options.needsMipmaps = false; - if (options.levels === undefined) options.levels = 1; - if (options.depth === undefined) options.depth = 1; - - const { width, height, depth, levels } = options; - - const dimension = this._getDimension(texture); - const format = texture.internalFormat || options.format || getFormat(texture, backend.device); - - let sampleCount = options.sampleCount !== undefined ? options.sampleCount : 1; - - sampleCount = backend.utils.getSampleCount(sampleCount); - - const primarySampleCount = texture.isRenderTargetTexture && !texture.isMultisampleRenderTargetTexture ? 1 : sampleCount; - - let usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC; - - if (texture.isStorageTexture === true) { - usage |= GPUTextureUsage.STORAGE_BINDING; - } - - if (texture.isCompressedTexture !== true) { - usage |= GPUTextureUsage.RENDER_ATTACHMENT; - } - - const textureDescriptorGPU = { - label: texture.name, - size: { - width: width, - height: height, - depthOrArrayLayers: depth, - }, - mipLevelCount: levels, - sampleCount: primarySampleCount, - dimension: dimension, - format: format, - usage: usage, - }; - - // texture creation - - if (texture.isVideoTexture) { - const video = texture.source.data; - const videoFrame = new VideoFrame(video); - - textureDescriptorGPU.size.width = videoFrame.displayWidth; - textureDescriptorGPU.size.height = videoFrame.displayHeight; - - videoFrame.close(); - - textureData.externalTexture = video; - } else { - if (format === undefined) { - console.warn('WebGPURenderer: Texture format not supported.'); - - return this.createDefaultTexture(texture); - } - - textureData.texture = backend.device.createTexture(textureDescriptorGPU); - } - - if (texture.isRenderTargetTexture && sampleCount > 1 && !texture.isMultisampleRenderTargetTexture) { - const msaaTextureDescriptorGPU = Object.assign({}, textureDescriptorGPU); - - msaaTextureDescriptorGPU.label = msaaTextureDescriptorGPU.label + '-msaa'; - msaaTextureDescriptorGPU.sampleCount = sampleCount; - - textureData.msaaTexture = backend.device.createTexture(msaaTextureDescriptorGPU); - } - - textureData.initialized = true; - - textureData.textureDescriptorGPU = textureDescriptorGPU; - } - - destroyTexture(texture) { - const backend = this.backend; - const textureData = backend.get(texture); - - textureData.texture.destroy(); - - if (textureData.msaaTexture !== undefined) textureData.msaaTexture.destroy(); - - backend.delete(texture); - } - - destroySampler(texture) { - const backend = this.backend; - const textureData = backend.get(texture); - - delete textureData.sampler; - } - - generateMipmaps(texture) { - const textureData = this.backend.get(texture); - - if (texture.isCubeTexture) { - for (let i = 0; i < 6; i++) { - this._generateMipmaps(textureData.texture, textureData.textureDescriptorGPU, i); - } - } else { - const depth = texture.image.depth || 1; - - for (let i = 0; i < depth; i++) { - this._generateMipmaps(textureData.texture, textureData.textureDescriptorGPU, i); - } - } - } - - getColorBuffer() { - if (this.colorBuffer) this.colorBuffer.destroy(); - - const backend = this.backend; - const { width, height } = backend.getDrawingBufferSize(); - - this.colorBuffer = backend.device.createTexture({ - label: 'colorBuffer', - size: { - width: width, - height: height, - depthOrArrayLayers: 1, - }, - sampleCount: backend.utils.getSampleCount(backend.renderer.samples), - format: navigator.gpu.getPreferredCanvasFormat(), - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - }); - - return this.colorBuffer; - } - - getDepthBuffer(depth = true, stencil = false) { - const backend = this.backend; - const { width, height } = backend.getDrawingBufferSize(); - - const depthTexture = this.depthTexture; - const depthTextureGPU = backend.get(depthTexture).texture; - - let format, type; - - if (stencil) { - format = DepthStencilFormat; - type = UnsignedInt248Type; - } else if (depth) { - format = DepthFormat; - type = UnsignedIntType; - } - - if (depthTextureGPU !== undefined) { - if (depthTexture.image.width === width && depthTexture.image.height === height && depthTexture.format === format && depthTexture.type === type) { - return depthTextureGPU; - } - - this.destroyTexture(depthTexture); - } - - depthTexture.name = 'depthBuffer'; - depthTexture.format = format; - depthTexture.type = type; - depthTexture.image.width = width; - depthTexture.image.height = height; - - this.createTexture(depthTexture, { sampleCount: backend.utils.getSampleCount(backend.renderer.samples), width, height }); - - return backend.get(depthTexture).texture; - } - - updateTexture(texture, options) { - const textureData = this.backend.get(texture); - - const { textureDescriptorGPU } = textureData; - - if (texture.isRenderTargetTexture || textureDescriptorGPU === undefined /* unsupported texture format */) return; - - // transfer texture data - - if (texture.isDataTexture) { - this._copyBufferToTexture(options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY); - } else if (texture.isDataArrayTexture || texture.isData3DTexture) { - for (let i = 0; i < options.image.depth; i++) { - this._copyBufferToTexture(options.image, textureData.texture, textureDescriptorGPU, i, texture.flipY, i); - } - } else if (texture.isCompressedTexture) { - this._copyCompressedBufferToTexture(texture.mipmaps, textureData.texture, textureDescriptorGPU); - } else if (texture.isCubeTexture) { - this._copyCubeMapToTexture(options.images, textureData.texture, textureDescriptorGPU, texture.flipY); - } else if (texture.isVideoTexture) { - const video = texture.source.data; - - textureData.externalTexture = video; - } else { - this._copyImageToTexture(options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY); - } - - // - - textureData.version = texture.version; - - if (texture.onUpdate) texture.onUpdate(texture); - } - - async copyTextureToBuffer(texture, x, y, width, height) { - const device = this.backend.device; - - const textureData = this.backend.get(texture); - const textureGPU = textureData.texture; - const format = textureData.textureDescriptorGPU.format; - const bytesPerTexel = this._getBytesPerTexel(format); - - let bytesPerRow = width * bytesPerTexel; - bytesPerRow = Math.ceil(bytesPerRow / 256) * 256; // Align to 256 bytes - - const readBuffer = device.createBuffer({ - size: width * height * bytesPerTexel, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ, - }); - - const encoder = device.createCommandEncoder(); - - encoder.copyTextureToBuffer( - { - texture: textureGPU, - origin: { x, y }, - }, - { - buffer: readBuffer, - bytesPerRow: bytesPerRow, - }, - { - width: width, - height: height, - } - ); - - const typedArrayType = this._getTypedArrayType(format); - - device.queue.submit([encoder.finish()]); - - await readBuffer.mapAsync(GPUMapMode.READ); - - const buffer = readBuffer.getMappedRange(); - - return new typedArrayType(buffer); - } - - _isEnvironmentTexture(texture) { - const mapping = texture.mapping; - - return mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping || mapping === CubeReflectionMapping || mapping === CubeRefractionMapping; - } - - _getDefaultTextureGPU(format) { - let defaultTexture = this.defaultTexture[format]; - - if (defaultTexture === undefined) { - const texture = new Texture(); - texture.minFilter = NearestFilter; - texture.magFilter = NearestFilter; - - this.createTexture(texture, { width: 1, height: 1, format }); - - this.defaultTexture[format] = defaultTexture = texture; - } - - return this.backend.get(defaultTexture).texture; - } - - _getDefaultCubeTextureGPU(format) { - let defaultCubeTexture = this.defaultTexture[format]; - - if (defaultCubeTexture === undefined) { - const texture = new CubeTexture(); - texture.minFilter = NearestFilter; - texture.magFilter = NearestFilter; - - this.createTexture(texture, { width: 1, height: 1, depth: 6 }); - - this.defaultCubeTexture[format] = defaultCubeTexture = texture; - } - - return this.backend.get(defaultCubeTexture).texture; - } - - _getDefaultVideoFrame() { - let defaultVideoFrame = this.defaultVideoFrame; - - if (defaultVideoFrame === null) { - const init = { - timestamp: 0, - codedWidth: 1, - codedHeight: 1, - format: 'RGBA', - }; - - this.defaultVideoFrame = defaultVideoFrame = new VideoFrame(new Uint8Array([0, 0, 0, 0xff]), init); - } - - return defaultVideoFrame; - } - - _copyCubeMapToTexture(images, textureGPU, textureDescriptorGPU, flipY) { - for (let i = 0; i < 6; i++) { - const image = images[i]; - - const flipIndex = flipY === true ? _flipMap[i] : i; - - if (image.isDataTexture) { - this._copyBufferToTexture(image.image, textureGPU, textureDescriptorGPU, flipIndex, flipY); - } else { - this._copyImageToTexture(image, textureGPU, textureDescriptorGPU, flipIndex, flipY); - } - } - } - - _copyImageToTexture(image, textureGPU, textureDescriptorGPU, originDepth, flipY) { - const device = this.backend.device; - - device.queue.copyExternalImageToTexture( - { - source: image, - }, - { - texture: textureGPU, - mipLevel: 0, - origin: { x: 0, y: 0, z: originDepth }, - }, - { - width: image.width, - height: image.height, - depthOrArrayLayers: 1, - } - ); - - if (flipY === true) { - this._flipY(textureGPU, textureDescriptorGPU, originDepth); - } - } - - _getPassUtils() { - let passUtils = this._passUtils; - - if (passUtils === null) { - this._passUtils = passUtils = new WebGPUTexturePassUtils(this.backend.device); - } - - return passUtils; - } - - _generateMipmaps(textureGPU, textureDescriptorGPU, baseArrayLayer = 0) { - this._getPassUtils().generateMipmaps(textureGPU, textureDescriptorGPU, baseArrayLayer); - } - - _flipY(textureGPU, textureDescriptorGPU, originDepth = 0) { - this._getPassUtils().flipY(textureGPU, textureDescriptorGPU, originDepth); - } - - _copyBufferToTexture(image, textureGPU, textureDescriptorGPU, originDepth, flipY, depth = 0) { - // @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture() - // @TODO: Consider to support valid buffer layouts with other formats like RGB - - const device = this.backend.device; - - const data = image.data; - - const bytesPerTexel = this._getBytesPerTexel(textureDescriptorGPU.format); - const bytesPerRow = image.width * bytesPerTexel; - - device.queue.writeTexture( - { - texture: textureGPU, - mipLevel: 0, - origin: { x: 0, y: 0, z: originDepth }, - }, - data, - { - offset: image.width * image.height * bytesPerTexel * depth, - bytesPerRow, - }, - { - width: image.width, - height: image.height, - depthOrArrayLayers: 1, - } - ); - - if (flipY === true) { - this._flipY(textureGPU, textureDescriptorGPU, originDepth); - } - } - - _copyCompressedBufferToTexture(mipmaps, textureGPU, textureDescriptorGPU) { - // @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture() - - const device = this.backend.device; - - const blockData = this._getBlockData(textureDescriptorGPU.format); - - for (let i = 0; i < mipmaps.length; i++) { - const mipmap = mipmaps[i]; - - const width = mipmap.width; - const height = mipmap.height; - - const bytesPerRow = Math.ceil(width / blockData.width) * blockData.byteLength; - - device.queue.writeTexture( - { - texture: textureGPU, - mipLevel: i, - }, - mipmap.data, - { - offset: 0, - bytesPerRow, - }, - { - width: Math.ceil(width / blockData.width) * blockData.width, - height: Math.ceil(height / blockData.width) * blockData.width, - depthOrArrayLayers: 1, - } - ); - } - } - - _getBlockData(format) { - // this method is only relevant for compressed texture formats - - if (format === GPUTextureFormat.BC1RGBAUnorm || format === GPUTextureFormat.BC1RGBAUnormSRGB) return { byteLength: 8, width: 4, height: 4 }; // DXT1 - if (format === GPUTextureFormat.BC2RGBAUnorm || format === GPUTextureFormat.BC2RGBAUnormSRGB) return { byteLength: 16, width: 4, height: 4 }; // DXT3 - if (format === GPUTextureFormat.BC3RGBAUnorm || format === GPUTextureFormat.BC3RGBAUnormSRGB) return { byteLength: 16, width: 4, height: 4 }; // DXT5 - if (format === GPUTextureFormat.BC4RUnorm || format === GPUTextureFormat.BC4RSNorm) return { byteLength: 8, width: 4, height: 4 }; // RGTC1 - if (format === GPUTextureFormat.BC5RGUnorm || format === GPUTextureFormat.BC5RGSnorm) return { byteLength: 16, width: 4, height: 4 }; // RGTC2 - if (format === GPUTextureFormat.BC6HRGBUFloat || format === GPUTextureFormat.BC6HRGBFloat) return { byteLength: 16, width: 4, height: 4 }; // BPTC (float) - if (format === GPUTextureFormat.BC7RGBAUnorm || format === GPUTextureFormat.BC7RGBAUnormSRGB) return { byteLength: 16, width: 4, height: 4 }; // BPTC (unorm) - - if (format === GPUTextureFormat.ETC2RGB8Unorm || format === GPUTextureFormat.ETC2RGB8UnormSRGB) return { byteLength: 8, width: 4, height: 4 }; - if (format === GPUTextureFormat.ETC2RGB8A1Unorm || format === GPUTextureFormat.ETC2RGB8A1UnormSRGB) return { byteLength: 8, width: 4, height: 4 }; - if (format === GPUTextureFormat.ETC2RGBA8Unorm || format === GPUTextureFormat.ETC2RGBA8UnormSRGB) return { byteLength: 16, width: 4, height: 4 }; - if (format === GPUTextureFormat.EACR11Unorm) return { byteLength: 8, width: 4, height: 4 }; - if (format === GPUTextureFormat.EACR11Snorm) return { byteLength: 8, width: 4, height: 4 }; - if (format === GPUTextureFormat.EACRG11Unorm) return { byteLength: 16, width: 4, height: 4 }; - if (format === GPUTextureFormat.EACRG11Snorm) return { byteLength: 16, width: 4, height: 4 }; - - if (format === GPUTextureFormat.ASTC4x4Unorm || format === GPUTextureFormat.ASTC4x4UnormSRGB) return { byteLength: 16, width: 4, height: 4 }; - if (format === GPUTextureFormat.ASTC5x4Unorm || format === GPUTextureFormat.ASTC5x4UnormSRGB) return { byteLength: 16, width: 5, height: 4 }; - if (format === GPUTextureFormat.ASTC5x5Unorm || format === GPUTextureFormat.ASTC5x5UnormSRGB) return { byteLength: 16, width: 5, height: 5 }; - if (format === GPUTextureFormat.ASTC6x5Unorm || format === GPUTextureFormat.ASTC6x5UnormSRGB) return { byteLength: 16, width: 6, height: 5 }; - if (format === GPUTextureFormat.ASTC6x6Unorm || format === GPUTextureFormat.ASTC6x6UnormSRGB) return { byteLength: 16, width: 6, height: 6 }; - if (format === GPUTextureFormat.ASTC8x5Unorm || format === GPUTextureFormat.ASTC8x5UnormSRGB) return { byteLength: 16, width: 8, height: 5 }; - if (format === GPUTextureFormat.ASTC8x6Unorm || format === GPUTextureFormat.ASTC8x6UnormSRGB) return { byteLength: 16, width: 8, height: 6 }; - if (format === GPUTextureFormat.ASTC8x8Unorm || format === GPUTextureFormat.ASTC8x8UnormSRGB) return { byteLength: 16, width: 8, height: 8 }; - if (format === GPUTextureFormat.ASTC10x5Unorm || format === GPUTextureFormat.ASTC10x5UnormSRGB) return { byteLength: 16, width: 10, height: 5 }; - if (format === GPUTextureFormat.ASTC10x6Unorm || format === GPUTextureFormat.ASTC10x6UnormSRGB) return { byteLength: 16, width: 10, height: 6 }; - if (format === GPUTextureFormat.ASTC10x8Unorm || format === GPUTextureFormat.ASTC10x8UnormSRGB) return { byteLength: 16, width: 10, height: 8 }; - if (format === GPUTextureFormat.ASTC10x10Unorm || format === GPUTextureFormat.ASTC10x10UnormSRGB) return { byteLength: 16, width: 10, height: 10 }; - if (format === GPUTextureFormat.ASTC12x10Unorm || format === GPUTextureFormat.ASTC12x10UnormSRGB) return { byteLength: 16, width: 12, height: 10 }; - if (format === GPUTextureFormat.ASTC12x12Unorm || format === GPUTextureFormat.ASTC12x12UnormSRGB) return { byteLength: 16, width: 12, height: 12 }; - } - - _convertAddressMode(value) { - let addressMode = GPUAddressMode.ClampToEdge; - - if (value === RepeatWrapping) { - addressMode = GPUAddressMode.Repeat; - } else if (value === MirroredRepeatWrapping) { - addressMode = GPUAddressMode.MirrorRepeat; - } - - return addressMode; - } - - _convertFilterMode(value) { - let filterMode = GPUFilterMode.Linear; - - if (value === NearestFilter || value === NearestMipmapNearestFilter || value === NearestMipmapLinearFilter) { - filterMode = GPUFilterMode.Nearest; - } - - return filterMode; - } - - _getBytesPerTexel(format) { - // 8-bit formats - if (format === GPUTextureFormat.R8Unorm || format === GPUTextureFormat.R8Snorm || format === GPUTextureFormat.R8Uint || format === GPUTextureFormat.R8Sint) return 1; - - // 16-bit formats - if (format === GPUTextureFormat.R16Uint || format === GPUTextureFormat.R16Sint || format === GPUTextureFormat.R16Float || format === GPUTextureFormat.RG8Unorm || format === GPUTextureFormat.RG8Snorm || format === GPUTextureFormat.RG8Uint || format === GPUTextureFormat.RG8Sint) return 2; - - // 32-bit formats - if ( - format === GPUTextureFormat.R32Uint || - format === GPUTextureFormat.R32Sint || - format === GPUTextureFormat.R32Float || - format === GPUTextureFormat.RG16Uint || - format === GPUTextureFormat.RG16Sint || - format === GPUTextureFormat.RG16Float || - format === GPUTextureFormat.RGBA8Unorm || - format === GPUTextureFormat.RGBA8UnormSRGB || - format === GPUTextureFormat.RGBA8Snorm || - format === GPUTextureFormat.RGBA8Uint || - format === GPUTextureFormat.RGBA8Sint || - format === GPUTextureFormat.BGRA8Unorm || - format === GPUTextureFormat.BGRA8UnormSRGB || - // Packed 32-bit formats - format === GPUTextureFormat.RGB9E5UFloat || - format === GPUTextureFormat.RGB10A2Unorm || - format === GPUTextureFormat.RG11B10UFloat || - format === GPUTextureFormat.Depth32Float || - format === GPUTextureFormat.Depth24Plus || - format === GPUTextureFormat.Depth24PlusStencil8 || - format === GPUTextureFormat.Depth32FloatStencil8 - ) - return 4; - - // 64-bit formats - if (format === GPUTextureFormat.RG32Uint || format === GPUTextureFormat.RG32Sint || format === GPUTextureFormat.RG32Float || format === GPUTextureFormat.RGBA16Uint || format === GPUTextureFormat.RGBA16Sint || format === GPUTextureFormat.RGBA16Float) return 8; - - // 128-bit formats - if (format === GPUTextureFormat.RGBA32Uint || format === GPUTextureFormat.RGBA32Sint || format === GPUTextureFormat.RGBA32Float) return 16; - } - - _getTypedArrayType(format) { - if (format === GPUTextureFormat.R8Uint) return Uint8Array; - if (format === GPUTextureFormat.R8Sint) return Int8Array; - if (format === GPUTextureFormat.R8Unorm) return Uint8Array; - if (format === GPUTextureFormat.R8Snorm) return Int8Array; - if (format === GPUTextureFormat.RG8Uint) return Uint8Array; - if (format === GPUTextureFormat.RG8Sint) return Int8Array; - if (format === GPUTextureFormat.RG8Unorm) return Uint8Array; - if (format === GPUTextureFormat.RG8Snorm) return Int8Array; - if (format === GPUTextureFormat.RGBA8Uint) return Uint8Array; - if (format === GPUTextureFormat.RGBA8Sint) return Int8Array; - if (format === GPUTextureFormat.RGBA8Unorm) return Uint8Array; - if (format === GPUTextureFormat.RGBA8Snorm) return Int8Array; - - if (format === GPUTextureFormat.R16Uint) return Uint16Array; - if (format === GPUTextureFormat.R16Sint) return Int16Array; - if (format === GPUTextureFormat.RG16Uint) return Uint16Array; - if (format === GPUTextureFormat.RG16Sint) return Int16Array; - if (format === GPUTextureFormat.RGBA16Uint) return Uint16Array; - if (format === GPUTextureFormat.RGBA16Sint) return Int16Array; - if (format === GPUTextureFormat.R16Float) return Float32Array; - if (format === GPUTextureFormat.RG16Float) return Float32Array; - if (format === GPUTextureFormat.RGBA16Float) return Float32Array; - - if (format === GPUTextureFormat.R32Uint) return Uint32Array; - if (format === GPUTextureFormat.R32Sint) return Int32Array; - if (format === GPUTextureFormat.R32Float) return Float32Array; - if (format === GPUTextureFormat.RG32Uint) return Uint32Array; - if (format === GPUTextureFormat.RG32Sint) return Int32Array; - if (format === GPUTextureFormat.RG32Float) return Float32Array; - if (format === GPUTextureFormat.RGBA32Uint) return Uint32Array; - if (format === GPUTextureFormat.RGBA32Sint) return Int32Array; - if (format === GPUTextureFormat.RGBA32Float) return Float32Array; - - if (format === GPUTextureFormat.BGRA8Unorm) return Uint8Array; - if (format === GPUTextureFormat.BGRA8UnormSRGB) return Uint8Array; - if (format === GPUTextureFormat.RGB10A2Unorm) return Uint32Array; - if (format === GPUTextureFormat.RGB9E5UFloat) return Uint32Array; - if (format === GPUTextureFormat.RG11B10UFloat) return Uint32Array; - - if (format === GPUTextureFormat.Depth32Float) return Float32Array; - if (format === GPUTextureFormat.Depth24Plus) return Uint32Array; - if (format === GPUTextureFormat.Depth24PlusStencil8) return Uint32Array; - if (format === GPUTextureFormat.Depth32FloatStencil8) return Float32Array; - } - - _getDimension(texture) { - let dimension; - - if (texture.isData3DTexture) { - dimension = GPUTextureDimension.ThreeD; - } else { - dimension = GPUTextureDimension.TwoD; - } - - return dimension; - } -} - -function getFormat(texture, device = null) { - const format = texture.format; - const type = texture.type; - const colorSpace = texture.colorSpace; - - let formatGPU; - - if (texture.isFramebufferTexture === true && texture.type === UnsignedByteType) { - formatGPU = GPUTextureFormat.BGRA8Unorm; - } else if (texture.isCompressedTexture === true) { - switch (format) { - case RGBA_S3TC_DXT1_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.BC1RGBAUnormSRGB : GPUTextureFormat.BC1RGBAUnorm; - break; - - case RGBA_S3TC_DXT3_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.BC2RGBAUnormSRGB : GPUTextureFormat.BC2RGBAUnorm; - break; - - case RGBA_S3TC_DXT5_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.BC3RGBAUnormSRGB : GPUTextureFormat.BC3RGBAUnorm; - break; - - case RGB_ETC2_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ETC2RGB8UnormSRGB : GPUTextureFormat.ETC2RGB8Unorm; - break; - - case RGBA_ETC2_EAC_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ETC2RGBA8UnormSRGB : GPUTextureFormat.ETC2RGBA8Unorm; - break; - - case RGBA_ASTC_4x4_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ASTC4x4UnormSRGB : GPUTextureFormat.ASTC4x4Unorm; - break; - - case RGBA_ASTC_5x4_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ASTC5x4UnormSRGB : GPUTextureFormat.ASTC5x4Unorm; - break; - - case RGBA_ASTC_5x5_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ASTC5x5UnormSRGB : GPUTextureFormat.ASTC5x5Unorm; - break; - - case RGBA_ASTC_6x5_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ASTC6x5UnormSRGB : GPUTextureFormat.ASTC6x5Unorm; - break; - - case RGBA_ASTC_6x6_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ASTC6x6UnormSRGB : GPUTextureFormat.ASTC6x6Unorm; - break; - - case RGBA_ASTC_8x5_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ASTC8x5UnormSRGB : GPUTextureFormat.ASTC8x5Unorm; - break; - - case RGBA_ASTC_8x6_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ASTC8x6UnormSRGB : GPUTextureFormat.ASTC8x6Unorm; - break; - - case RGBA_ASTC_8x8_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ASTC8x8UnormSRGB : GPUTextureFormat.ASTC8x8Unorm; - break; - - case RGBA_ASTC_10x5_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ASTC10x5UnormSRGB : GPUTextureFormat.ASTC10x5Unorm; - break; - - case RGBA_ASTC_10x6_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ASTC10x6UnormSRGB : GPUTextureFormat.ASTC10x6Unorm; - break; - - case RGBA_ASTC_10x8_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ASTC10x8UnormSRGB : GPUTextureFormat.ASTC10x8Unorm; - break; - - case RGBA_ASTC_10x10_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ASTC10x10UnormSRGB : GPUTextureFormat.ASTC10x10Unorm; - break; - - case RGBA_ASTC_12x10_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ASTC12x10UnormSRGB : GPUTextureFormat.ASTC12x10Unorm; - break; - - case RGBA_ASTC_12x12_Format: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.ASTC12x12UnormSRGB : GPUTextureFormat.ASTC12x12Unorm; - break; - - default: - console.error('WebGPURenderer: Unsupported texture format.', format); - } - } else { - switch (format) { - case RGBAFormat: - switch (type) { - case ByteType: - formatGPU = GPUTextureFormat.RGBA8Snorm; - break; - - case ShortType: - formatGPU = GPUTextureFormat.RGBA16Sint; - break; - - case UnsignedShortType: - formatGPU = GPUTextureFormat.RGBA16Uint; - break; - case UnsignedIntType: - formatGPU = GPUTextureFormat.RGBA32Uint; - break; - - case IntType: - formatGPU = GPUTextureFormat.RGBA32Sint; - break; - - case UnsignedByteType: - formatGPU = colorSpace === SRGBColorSpace ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm; - break; - - case HalfFloatType: - formatGPU = GPUTextureFormat.RGBA16Float; - break; - - case FloatType: - formatGPU = GPUTextureFormat.RGBA32Float; - break; - - default: - console.error('WebGPURenderer: Unsupported texture type with RGBAFormat.', type); - } - - break; - - case RGBFormat: - switch (type) { - case UnsignedInt5999Type: - formatGPU = GPUTextureFormat.RGB9E5UFloat; - break; - - default: - console.error('WebGPURenderer: Unsupported texture type with RGBFormat.', type); - } - - break; - - case RedFormat: - switch (type) { - case ByteType: - formatGPU = GPUTextureFormat.R8Snorm; - break; - - case ShortType: - formatGPU = GPUTextureFormat.R16Sint; - break; - - case UnsignedShortType: - formatGPU = GPUTextureFormat.R16Uint; - break; - - case UnsignedIntType: - formatGPU = GPUTextureFormat.R32Uint; - break; - - case IntType: - formatGPU = GPUTextureFormat.R32Sint; - break; - - case UnsignedByteType: - formatGPU = GPUTextureFormat.R8Unorm; - break; - - case HalfFloatType: - formatGPU = GPUTextureFormat.R16Float; - break; - - case FloatType: - formatGPU = GPUTextureFormat.R32Float; - break; - - default: - console.error('WebGPURenderer: Unsupported texture type with RedFormat.', type); - } - - break; - - case RGFormat: - switch (type) { - case ByteType: - formatGPU = GPUTextureFormat.RG8Snorm; - break; - - case ShortType: - formatGPU = GPUTextureFormat.RG16Sint; - break; - - case UnsignedShortType: - formatGPU = GPUTextureFormat.RG16Uint; - break; - - case UnsignedIntType: - formatGPU = GPUTextureFormat.RG32Uint; - break; - - case IntType: - formatGPU = GPUTextureFormat.RG32Sint; - break; - - case UnsignedByteType: - formatGPU = GPUTextureFormat.RG8Unorm; - break; - - case HalfFloatType: - formatGPU = GPUTextureFormat.RG16Float; - break; - - case FloatType: - formatGPU = GPUTextureFormat.RG32Float; - break; - - default: - console.error('WebGPURenderer: Unsupported texture type with RGFormat.', type); - } - - break; - - case DepthFormat: - switch (type) { - case UnsignedShortType: - formatGPU = GPUTextureFormat.Depth16Unorm; - break; - - case UnsignedIntType: - formatGPU = GPUTextureFormat.Depth24Plus; - break; - - case FloatType: - formatGPU = GPUTextureFormat.Depth32Float; - break; - - default: - console.error('WebGPURenderer: Unsupported texture type with DepthFormat.', type); - } - - break; - - case DepthStencilFormat: - switch (type) { - case UnsignedInt248Type: - formatGPU = GPUTextureFormat.Depth24PlusStencil8; - break; - - case FloatType: - if (device && device.features.has(GPUFeatureName.Depth32FloatStencil8) === false) { - console.error('WebGPURenderer: Depth textures with DepthStencilFormat + FloatType can only be used with the "depth32float-stencil8" GPU feature.'); - } - - formatGPU = GPUTextureFormat.Depth32FloatStencil8; - - break; - - default: - console.error('WebGPURenderer: Unsupported texture type with DepthStencilFormat.', type); - } - - break; - - case RedIntegerFormat: - switch (type) { - case IntType: - formatGPU = GPUTextureFormat.R32Sint; - break; - - case UnsignedIntType: - formatGPU = GPUTextureFormat.R32Uint; - break; - - default: - console.error('WebGPURenderer: Unsupported texture type with RedIntegerFormat.', type); - } - - break; - - case RGIntegerFormat: - switch (type) { - case IntType: - formatGPU = GPUTextureFormat.RG32Sint; - break; - - case UnsignedIntType: - formatGPU = GPUTextureFormat.RG32Uint; - break; - - default: - console.error('WebGPURenderer: Unsupported texture type with RGIntegerFormat.', type); - } - - break; - - case RGBAIntegerFormat: - switch (type) { - case IntType: - formatGPU = GPUTextureFormat.RGBA32Sint; - break; - - case UnsignedIntType: - formatGPU = GPUTextureFormat.RGBA32Uint; - break; - - default: - console.error('WebGPURenderer: Unsupported texture type with RGBAIntegerFormat.', type); - } - - break; - - default: - console.error('WebGPURenderer: Unsupported texture format.', format); - } - } - - return formatGPU; -} - -const declarationRegexp = /^[fn]*\s*([a-z_0-9]+)?\s*\(([\s\S]*?)\)\s*[\-\>]*\s*([a-z_0-9]+(?:<[\s\S]+?>)?)/i; -const propertiesRegexp = /([a-z_0-9]+)\s*:\s*([a-z_0-9]+(?:<[\s\S]+?>)?)/gi; - -const wgslTypeLib$1 = { - f32: 'float', - i32: 'int', - u32: 'uint', - bool: 'bool', - - 'vec2': 'vec2', - 'vec2': 'ivec2', - 'vec2': 'uvec2', - 'vec2': 'bvec2', - - vec2f: 'vec2', - vec2i: 'ivec2', - vec2u: 'uvec2', - vec2b: 'bvec2', - - 'vec3': 'vec3', - 'vec3': 'ivec3', - 'vec3': 'uvec3', - 'vec3': 'bvec3', - - vec3f: 'vec3', - vec3i: 'ivec3', - vec3u: 'uvec3', - vec3b: 'bvec3', - - 'vec4': 'vec4', - 'vec4': 'ivec4', - 'vec4': 'uvec4', - 'vec4': 'bvec4', - - vec4f: 'vec4', - vec4i: 'ivec4', - vec4u: 'uvec4', - vec4b: 'bvec4', - - 'mat2x2': 'mat2', - mat2x2f: 'mat2', - - 'mat3x3': 'mat3', - mat3x3f: 'mat3', - - 'mat4x4': 'mat4', - mat4x4f: 'mat4', - - sampler: 'sampler', - - texture_1d: 'texture', - - texture_2d: 'texture', - texture_2d_array: 'texture', - texture_multisampled_2d: 'cubeTexture', - - texture_depth_2d: 'depthTexture', - - texture_3d: 'texture3D', - - texture_cube: 'cubeTexture', - texture_cube_array: 'cubeTexture', - - texture_storage_1d: 'storageTexture', - texture_storage_2d: 'storageTexture', - texture_storage_2d_array: 'storageTexture', - texture_storage_3d: 'storageTexture', -}; - -const parse = (source) => { - source = source.trim(); - - const declaration = source.match(declarationRegexp); - - if (declaration !== null && declaration.length === 4) { - const inputsCode = declaration[2]; - const propsMatches = []; - let match = null; - - while ((match = propertiesRegexp.exec(inputsCode)) !== null) { - propsMatches.push({ name: match[1], type: match[2] }); - } - - // Process matches to correctly pair names and types - const inputs = []; - for (let i = 0; i < propsMatches.length; i++) { - const { name, type } = propsMatches[i]; - - let resolvedType = type; - - if (resolvedType.startsWith('texture')) { - resolvedType = type.split('<')[0]; - } - - resolvedType = wgslTypeLib$1[resolvedType] || resolvedType; - - inputs.push(new NodeFunctionInput(resolvedType, name)); - } - - const blockCode = source.substring(declaration[0].length); - const outputType = declaration[3] || 'void'; - - const name = declaration[1] !== undefined ? declaration[1] : ''; - const type = wgslTypeLib$1[outputType] || outputType; - - return { - type, - inputs, - name, - inputsCode, - blockCode, - outputType, - }; - } else { - throw new Error('FunctionNode: Function is not a WGSL code.'); - } -}; - -class WGSLNodeFunction extends NodeFunction { - constructor(source) { - const { type, inputs, name, inputsCode, blockCode, outputType } = parse(source); - - super(type, inputs, name); - - this.inputsCode = inputsCode; - this.blockCode = blockCode; - this.outputType = outputType; - } - - getCode(name = this.name) { - const outputType = this.outputType !== 'void' ? '-> ' + this.outputType : ''; - - return `fn ${name} ( ${this.inputsCode.trim()} ) ${outputType}` + this.blockCode; - } -} - -class WGSLNodeParser extends NodeParser { - parseFunction(source) { - return new WGSLNodeFunction(source); - } -} - -// GPUShaderStage is not defined in browsers not supporting WebGPU -const GPUShaderStage = self.GPUShaderStage; - -const gpuShaderStageLib = { - vertex: GPUShaderStage ? GPUShaderStage.VERTEX : 1, - fragment: GPUShaderStage ? GPUShaderStage.FRAGMENT : 2, - compute: GPUShaderStage ? GPUShaderStage.COMPUTE : 4, -}; - -const supports = { - instance: true, - swizzleAssign: false, - storageBuffer: true, -}; - -const wgslFnOpLib = { - '^^': 'tsl_xor', -}; - -const wgslTypeLib = { - float: 'f32', - int: 'i32', - uint: 'u32', - bool: 'bool', - color: 'vec3', - - vec2: 'vec2', - ivec2: 'vec2', - uvec2: 'vec2', - bvec2: 'vec2', - - vec3: 'vec3', - ivec3: 'vec3', - uvec3: 'vec3', - bvec3: 'vec3', - - vec4: 'vec4', - ivec4: 'vec4', - uvec4: 'vec4', - bvec4: 'vec4', - - mat2: 'mat2x2', - imat2: 'mat2x2', - umat2: 'mat2x2', - bmat2: 'mat2x2', - - mat3: 'mat3x3', - imat3: 'mat3x3', - umat3: 'mat3x3', - bmat3: 'mat3x3', - - mat4: 'mat4x4', - imat4: 'mat4x4', - umat4: 'mat4x4', - bmat4: 'mat4x4', -}; - -const wgslPolyfill = { - tsl_xor: new CodeNode('fn tsl_xor( a : bool, b : bool ) -> bool { return ( a || b ) && !( a && b ); }'), - mod_float: new CodeNode('fn tsl_mod_float( x : f32, y : f32 ) -> f32 { return x - y * floor( x / y ); }'), - mod_vec2: new CodeNode('fn tsl_mod_vec2( x : vec2f, y : vec2f ) -> vec2f { return x - y * floor( x / y ); }'), - mod_vec3: new CodeNode('fn tsl_mod_vec3( x : vec3f, y : vec3f ) -> vec3f { return x - y * floor( x / y ); }'), - mod_vec4: new CodeNode('fn tsl_mod_vec4( x : vec4f, y : vec4f ) -> vec4f { return x - y * floor( x / y ); }'), - equals_bool: new CodeNode('fn tsl_equals_bool( a : bool, b : bool ) -> bool { return a == b; }'), - equals_bvec2: new CodeNode('fn tsl_equals_bvec2( a : vec2f, b : vec2f ) -> vec2 { return vec2( a.x == b.x, a.y == b.y ); }'), - equals_bvec3: new CodeNode('fn tsl_equals_bvec3( a : vec3f, b : vec3f ) -> vec3 { return vec3( a.x == b.x, a.y == b.y, a.z == b.z ); }'), - equals_bvec4: new CodeNode('fn tsl_equals_bvec4( a : vec4f, b : vec4f ) -> vec4 { return vec4( a.x == b.x, a.y == b.y, a.z == b.z, a.w == b.w ); }'), - repeatWrapping: new CodeNode(` -fn tsl_repeatWrapping( uv : vec2, dimension : vec2 ) -> vec2 { - - let uvScaled = vec2( uv * vec2( dimension ) ); - - return ( ( uvScaled % dimension ) + dimension ) % dimension; - -} -`), - biquadraticTexture: new CodeNode(` -fn tsl_biquadraticTexture( map : texture_2d, coord : vec2f, level : i32 ) -> vec4f { - - let res = vec2f( textureDimensions( map, level ) ); - - let uvScaled = coord * res; - let uvWrapping = ( ( uvScaled % res ) + res ) % res; - - // https://www.shadertoy.com/view/WtyXRy - - let uv = uvWrapping - 0.5; - let iuv = floor( uv ); - let f = fract( uv ); - - let rg1 = textureLoad( map, vec2i( iuv + vec2( 0.5, 0.5 ) ), level ); - let rg2 = textureLoad( map, vec2i( iuv + vec2( 1.5, 0.5 ) ), level ); - let rg3 = textureLoad( map, vec2i( iuv + vec2( 0.5, 1.5 ) ), level ); - let rg4 = textureLoad( map, vec2i( iuv + vec2( 1.5, 1.5 ) ), level ); - - return mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y ); - -} -`), -}; - -const wgslMethods = { - dFdx: 'dpdx', - dFdy: '- dpdy', - mod_float: 'tsl_mod_float', - mod_vec2: 'tsl_mod_vec2', - mod_vec3: 'tsl_mod_vec3', - mod_vec4: 'tsl_mod_vec4', - equals_bool: 'tsl_equals_bool', - equals_bvec2: 'tsl_equals_bvec2', - equals_bvec3: 'tsl_equals_bvec3', - equals_bvec4: 'tsl_equals_bvec4', - inversesqrt: 'inverseSqrt', - bitcast: 'bitcast', -}; - -// WebGPU issue: does not support pow() with negative base on Windows - -if (/Windows/g.test(navigator.userAgent)) { - wgslPolyfill.pow_float = new CodeNode('fn tsl_pow_float( a : f32, b : f32 ) -> f32 { return select( -pow( -a, b ), pow( a, b ), a > 0.0 ); }'); - wgslPolyfill.pow_vec2 = new CodeNode('fn tsl_pow_vec2( a : vec2f, b : vec2f ) -> vec2f { return vec2f( tsl_pow_float( a.x, b.x ), tsl_pow_float( a.y, b.y ) ); }', [wgslPolyfill.pow_float]); - wgslPolyfill.pow_vec3 = new CodeNode('fn tsl_pow_vec3( a : vec3f, b : vec3f ) -> vec3f { return vec3f( tsl_pow_float( a.x, b.x ), tsl_pow_float( a.y, b.y ), tsl_pow_float( a.z, b.z ) ); }', [wgslPolyfill.pow_float]); - wgslPolyfill.pow_vec4 = new CodeNode('fn tsl_pow_vec4( a : vec4f, b : vec4f ) -> vec4f { return vec4f( tsl_pow_float( a.x, b.x ), tsl_pow_float( a.y, b.y ), tsl_pow_float( a.z, b.z ), tsl_pow_float( a.w, b.w ) ); }', [wgslPolyfill.pow_float]); - - wgslMethods.pow_float = 'tsl_pow_float'; - wgslMethods.pow_vec2 = 'tsl_pow_vec2'; - wgslMethods.pow_vec3 = 'tsl_pow_vec3'; - wgslMethods.pow_vec4 = 'tsl_pow_vec4'; -} - -// - -class WGSLNodeBuilder extends NodeBuilder { - constructor(object, renderer) { - super(object, renderer, new WGSLNodeParser()); - - this.uniformGroups = {}; - - this.builtins = {}; - - this.directives = {}; - } - - needsColorSpaceToLinear(texture) { - return texture.isVideoTexture === true && texture.colorSpace !== NoColorSpace; - } - - _generateTextureSample(texture, textureProperty, uvSnippet, depthSnippet, shaderStage = this.shaderStage) { - if (shaderStage === 'fragment') { - if (depthSnippet) { - return `textureSample( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet}, ${depthSnippet} )`; - } else { - return `textureSample( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet} )`; - } - } else if (this.isFilteredTexture(texture)) { - return this.generateFilteredTexture(texture, textureProperty, uvSnippet); - } else { - return this.generateTextureLod(texture, textureProperty, uvSnippet, '0'); - } - } - - _generateVideoSample(textureProperty, uvSnippet, shaderStage = this.shaderStage) { - if (shaderStage === 'fragment') { - return `textureSampleBaseClampToEdge( ${textureProperty}, ${textureProperty}_sampler, vec2( ${uvSnippet}.x, 1.0 - ${uvSnippet}.y ) )`; - } else { - console.error(`WebGPURenderer: THREE.VideoTexture does not support ${shaderStage} shader.`); - } - } - - _generateTextureSampleLevel(texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, shaderStage = this.shaderStage) { - if (shaderStage === 'fragment' && this.isUnfilterable(texture) === false) { - return `textureSampleLevel( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet}, ${levelSnippet} )`; - } else if (this.isFilteredTexture(texture)) { - return this.generateFilteredTexture(texture, textureProperty, uvSnippet, levelSnippet); - } else { - return this.generateTextureLod(texture, textureProperty, uvSnippet, levelSnippet); - } - } - - generateFilteredTexture(texture, textureProperty, uvSnippet, levelSnippet = '0') { - this._include('biquadraticTexture'); - - return `tsl_biquadraticTexture( ${textureProperty}, ${uvSnippet}, i32( ${levelSnippet} ) )`; - } - - generateTextureLod(texture, textureProperty, uvSnippet, levelSnippet = '0') { - this._include('repeatWrapping'); - - const dimension = texture.isMultisampleRenderTargetTexture === true ? `textureDimensions( ${textureProperty} )` : `textureDimensions( ${textureProperty}, 0 )`; - - return `textureLoad( ${textureProperty}, tsl_repeatWrapping( ${uvSnippet}, ${dimension} ), i32( ${levelSnippet} ) )`; - } - - generateTextureLoad(texture, textureProperty, uvIndexSnippet, depthSnippet, levelSnippet = '0u') { - if (depthSnippet) { - return `textureLoad( ${textureProperty}, ${uvIndexSnippet}, ${depthSnippet}, ${levelSnippet} )`; - } else { - return `textureLoad( ${textureProperty}, ${uvIndexSnippet}, ${levelSnippet} )`; - } - } - - generateTextureStore(texture, textureProperty, uvIndexSnippet, valueSnippet) { - return `textureStore( ${textureProperty}, ${uvIndexSnippet}, ${valueSnippet} )`; - } - - isUnfilterable(texture) { - return this.getComponentTypeFromTexture(texture) !== 'float' || (!this.isAvailable('float32Filterable') && texture.isDataTexture === true && texture.type === FloatType) || texture.isMultisampleRenderTargetTexture === true; - } - - generateTexture(texture, textureProperty, uvSnippet, depthSnippet, shaderStage = this.shaderStage) { - let snippet = null; - - if (texture.isVideoTexture === true) { - snippet = this._generateVideoSample(textureProperty, uvSnippet, shaderStage); - } else if (this.isUnfilterable(texture)) { - snippet = this.generateTextureLod(texture, textureProperty, uvSnippet, '0', depthSnippet, shaderStage); - } else { - snippet = this._generateTextureSample(texture, textureProperty, uvSnippet, depthSnippet, shaderStage); - } - - return snippet; - } - - generateTextureGrad(texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, shaderStage = this.shaderStage) { - if (shaderStage === 'fragment') { - // TODO handle i32 or u32 --> uvSnippet, array_index: A, ddx, ddy - return `textureSampleGrad( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet}, ${gradSnippet[0]}, ${gradSnippet[1]} )`; - } else { - console.error(`WebGPURenderer: THREE.TextureNode.gradient() does not support ${shaderStage} shader.`); - } - } - - generateTextureCompare(texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, shaderStage = this.shaderStage) { - if (shaderStage === 'fragment') { - return `textureSampleCompare( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet}, ${compareSnippet} )`; - } else { - console.error(`WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${shaderStage} shader.`); - } - } - - generateTextureLevel(texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, shaderStage = this.shaderStage) { - let snippet = null; - - if (texture.isVideoTexture === true) { - snippet = this._generateVideoSample(textureProperty, uvSnippet, shaderStage); - } else { - snippet = this._generateTextureSampleLevel(texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, shaderStage); - } - - return snippet; - } - - generateTextureBias(texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, shaderStage = this.shaderStage) { - if (shaderStage === 'fragment') { - return `textureSampleBias( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet}, ${biasSnippet} )`; - } else { - console.error(`WebGPURenderer: THREE.TextureNode.biasNode does not support ${shaderStage} shader.`); - } - } - - getPropertyName(node, shaderStage = this.shaderStage) { - if (node.isNodeVarying === true && node.needsInterpolation === true) { - if (shaderStage === 'vertex') { - return `varyings.${node.name}`; - } - } else if (node.isNodeUniform === true) { - const name = node.name; - const type = node.type; - - if (type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'texture3D') { - return name; - } else if (type === 'buffer' || type === 'storageBuffer') { - return `NodeBuffer_${node.id}.${name}`; - } else { - return node.groupNode.name + '.' + name; - } - } - - return super.getPropertyName(node); - } - - getOutputStructName() { - return 'output'; - } - - _getUniformGroupCount(shaderStage) { - return Object.keys(this.uniforms[shaderStage]).length; - } - - getFunctionOperator(op) { - const fnOp = wgslFnOpLib[op]; - - if (fnOp !== undefined) { - this._include(fnOp); - - return fnOp; - } - - return null; - } - - getStorageAccess(node) { - if (node.isStorageTextureNode) { - switch (node.access) { - case GPUStorageTextureAccess.ReadOnly: - return 'read'; - - case GPUStorageTextureAccess.WriteOnly: - return 'write'; - - default: - return 'read_write'; - } - } else { - switch (node.access) { - case GPUBufferBindingType.Storage: - return 'read_write'; - - case GPUBufferBindingType.ReadOnlyStorage: - return 'read'; - - default: - return 'write'; - } - } - } - - getUniformFromNode(node, type, shaderStage, name = null) { - const uniformNode = super.getUniformFromNode(node, type, shaderStage, name); - const nodeData = this.getDataFromNode(node, shaderStage, this.globalCache); - - if (nodeData.uniformGPU === undefined) { - let uniformGPU; - - const group = node.groupNode; - const groupName = group.name; - - const bindings = this.getBindGroupArray(groupName, shaderStage); - - if (type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'texture3D') { - let texture = null; - - if (type === 'texture' || type === 'storageTexture') { - texture = new NodeSampledTexture(uniformNode.name, uniformNode.node, group, node.access ? node.access : null); - } else if (type === 'cubeTexture') { - texture = new NodeSampledCubeTexture(uniformNode.name, uniformNode.node, group, node.access ? node.access : null); - } else if (type === 'texture3D') { - texture = new NodeSampledTexture3D(uniformNode.name, uniformNode.node, group, node.access ? node.access : null); - } - - texture.store = node.isStorageTextureNode === true; - texture.setVisibility(gpuShaderStageLib[shaderStage]); - - if (shaderStage === 'fragment' && this.isUnfilterable(node.value) === false && texture.store === false) { - const sampler = new NodeSampler(`${uniformNode.name}_sampler`, uniformNode.node, group); - sampler.setVisibility(gpuShaderStageLib[shaderStage]); - - bindings.push(sampler, texture); - - uniformGPU = [sampler, texture]; - } else { - bindings.push(texture); - - uniformGPU = [texture]; - } - } else if (type === 'buffer' || type === 'storageBuffer') { - const bufferClass = type === 'storageBuffer' ? NodeStorageBuffer : NodeUniformBuffer; - const buffer = new bufferClass(node, group); - buffer.setVisibility(gpuShaderStageLib[shaderStage]); - - bindings.push(buffer); - - uniformGPU = buffer; - } else { - const uniformsStage = this.uniformGroups[shaderStage] || (this.uniformGroups[shaderStage] = {}); - - let uniformsGroup = uniformsStage[groupName]; - - if (uniformsGroup === undefined) { - uniformsGroup = new NodeUniformsGroup(groupName, group); - uniformsGroup.setVisibility(gpuShaderStageLib[shaderStage]); - - uniformsStage[groupName] = uniformsGroup; - - bindings.push(uniformsGroup); - } - - uniformGPU = this.getNodeUniform(uniformNode, type); - - uniformsGroup.addUniform(uniformGPU); - } - - nodeData.uniformGPU = uniformGPU; - } - - return uniformNode; - } - - getBuiltin(name, property, type, shaderStage = this.shaderStage) { - const map = this.builtins[shaderStage] || (this.builtins[shaderStage] = new Map()); - - if (map.has(name) === false) { - map.set(name, { - name, - property, - type, - }); - } - - return property; - } - - getVertexIndex() { - if (this.shaderStage === 'vertex') { - return this.getBuiltin('vertex_index', 'vertexIndex', 'u32', 'attribute'); - } - - return 'vertexIndex'; - } - - buildFunctionCode(shaderNode) { - const layout = shaderNode.layout; - const flowData = this.flowShaderNode(shaderNode); - - const parameters = []; - - for (const input of layout.inputs) { - parameters.push(input.name + ' : ' + this.getType(input.type)); - } - - // - - let code = `fn ${layout.name}( ${parameters.join(', ')} ) -> ${this.getType(layout.type)} { -${flowData.vars} -${flowData.code} -`; - - if (flowData.result) { - code += `\treturn ${flowData.result};\n`; - } - - code += '\n}\n'; - - // - - return code; - } - - getInstanceIndex() { - if (this.shaderStage === 'vertex') { - return this.getBuiltin('instance_index', 'instanceIndex', 'u32', 'attribute'); - } - - return 'instanceIndex'; - } - - getSubgroupSize() { - this.enableSubGroups(); - - return this.getBuiltin('subgroup_size', 'subgroupSize', 'u32', 'attribute'); - } - - getSubgroupIndex() { - this.enableSubGroups(); - - return this.getBuiltin('subgroup_invocation_id', 'subgroupIndex', 'u32', 'attribute'); - } - - getDrawIndex() { - return null; - } - - getFrontFacing() { - return this.getBuiltin('front_facing', 'isFront', 'bool'); - } - - getFragCoord() { - return this.getBuiltin('position', 'fragCoord', 'vec4') + '.xy'; - } - - getFragDepth() { - return 'output.' + this.getBuiltin('frag_depth', 'depth', 'f32', 'output'); - } - - isFlipY() { - return false; - } - - enableDirective(name, shaderStage = this.shaderStage) { - const stage = this.directives[shaderStage] || (this.directives[shaderStage] = new Set()); - stage.add(name); - } - - getDirectives(shaderStage) { - const snippets = []; - const directives = this.directives[shaderStage]; - - if (directives !== undefined) { - for (const directive of directives) { - snippets.push(`enable ${directive};`); - } - } - - return snippets.join('\n'); - } - - enableSubGroups() { - this.enableDirective('subgroups'); - } - - enableSubgroupsF16() { - this.enableDirective('subgroups-f16'); - } - - enableClipDistances() { - this.enableDirective('clip_distances'); - } - - enableShaderF16() { - this.enableDirective('f16'); - } - - enableDualSourceBlending() { - this.enableDirective('dual_source_blending'); - } - - getBuiltins(shaderStage) { - const snippets = []; - const builtins = this.builtins[shaderStage]; - - if (builtins !== undefined) { - for (const { name, property, type } of builtins.values()) { - snippets.push(`@builtin( ${name} ) ${property} : ${type}`); - } - } - - return snippets.join(',\n\t'); - } - - getAttributes(shaderStage) { - const snippets = []; - - if (shaderStage === 'compute') { - this.getBuiltin('global_invocation_id', 'id', 'vec3', 'attribute'); - this.getBuiltin('workgroup_id', 'workgroupId', 'vec3', 'attribute'); - this.getBuiltin('local_invocation_id', 'localId', 'vec3', 'attribute'); - this.getBuiltin('num_workgroups', 'numWorkgroups', 'vec3', 'attribute'); - } - - if (shaderStage === 'vertex' || shaderStage === 'compute') { - const builtins = this.getBuiltins('attribute'); - - if (builtins) snippets.push(builtins); - - const attributes = this.getAttributesArray(); - - for (let index = 0, length = attributes.length; index < length; index++) { - const attribute = attributes[index]; - const name = attribute.name; - const type = this.getType(attribute.type); - - snippets.push(`@location( ${index} ) ${name} : ${type}`); - } - } - - return snippets.join(',\n\t'); - } - - getStructMembers(struct) { - const snippets = []; - const members = struct.getMemberTypes(); - - for (let i = 0; i < members.length; i++) { - const member = members[i]; - snippets.push(`\t@location( ${i} ) m${i} : ${member}`); - } - - const builtins = this.getBuiltins('output'); - - if (builtins) snippets.push('\t' + builtins); - - return snippets.join(',\n'); - } - - getStructs(shaderStage) { - const snippets = []; - const structs = this.structs[shaderStage]; - - for (let index = 0, length = structs.length; index < length; index++) { - const struct = structs[index]; - const name = struct.name; - - let snippet = `\struct ${name} {\n`; - snippet += this.getStructMembers(struct); - snippet += '\n}'; - - snippets.push(snippet); - - snippets.push(`\nvar output : ${name};\n\n`); - } - - return snippets.join('\n\n'); - } - - getVar(type, name) { - return `var ${name} : ${this.getType(type)}`; - } - - getVars(shaderStage) { - const snippets = []; - const vars = this.vars[shaderStage]; - - if (vars !== undefined) { - for (const variable of vars) { - snippets.push(`\t${this.getVar(variable.type, variable.name)};`); - } - } - - return `\n${snippets.join('\n')}\n`; - } - - getVaryings(shaderStage) { - const snippets = []; - - if (shaderStage === 'vertex') { - this.getBuiltin('position', 'Vertex', 'vec4', 'vertex'); - } - - if (shaderStage === 'vertex' || shaderStage === 'fragment') { - const varyings = this.varyings; - const vars = this.vars[shaderStage]; - - for (let index = 0; index < varyings.length; index++) { - const varying = varyings[index]; - - if (varying.needsInterpolation) { - let attributesSnippet = `@location( ${index} )`; - - if (/^(int|uint|ivec|uvec)/.test(varying.type)) { - attributesSnippet += ' @interpolate( flat )'; - } - - snippets.push(`${attributesSnippet} ${varying.name} : ${this.getType(varying.type)}`); - } else if (shaderStage === 'vertex' && vars.includes(varying) === false) { - vars.push(varying); - } - } - } - - const builtins = this.getBuiltins(shaderStage); - - if (builtins) snippets.push(builtins); - - const code = snippets.join(',\n\t'); - - return shaderStage === 'vertex' ? this._getWGSLStruct('VaryingsStruct', '\t' + code) : code; - } - - getUniforms(shaderStage) { - const uniforms = this.uniforms[shaderStage]; - - const bindingSnippets = []; - const bufferSnippets = []; - const structSnippets = []; - const uniformGroups = {}; - - for (const uniform of uniforms) { - const groundName = uniform.groupNode.name; - const uniformIndexes = this.bindingsIndexes[groundName]; - - if (uniform.type === 'texture' || uniform.type === 'cubeTexture' || uniform.type === 'storageTexture' || uniform.type === 'texture3D') { - const texture = uniform.node.value; - - if (shaderStage === 'fragment' && this.isUnfilterable(texture) === false && uniform.node.isStorageTextureNode !== true) { - if (texture.isDepthTexture === true && texture.compareFunction !== null) { - bindingSnippets.push(`@binding( ${uniformIndexes.binding++} ) @group( ${uniformIndexes.group} ) var ${uniform.name}_sampler : sampler_comparison;`); - } else { - bindingSnippets.push(`@binding( ${uniformIndexes.binding++} ) @group( ${uniformIndexes.group} ) var ${uniform.name}_sampler : sampler;`); - } - } - - let textureType; - - let multisampled = ''; - - if (texture.isMultisampleRenderTargetTexture === true) { - multisampled = '_multisampled'; - } - - if (texture.isCubeTexture === true) { - textureType = 'texture_cube'; - } else if (texture.isDataArrayTexture === true) { - textureType = 'texture_2d_array'; - } else if (texture.isDepthTexture === true) { - textureType = `texture_depth${multisampled}_2d`; - } else if (texture.isVideoTexture === true) { - textureType = 'texture_external'; - } else if (texture.isData3DTexture === true) { - textureType = 'texture_3d'; - } else if (uniform.node.isStorageTextureNode === true) { - const format = getFormat(texture); - const access = this.getStorageAccess(uniform.node); - - textureType = `texture_storage_2d<${format}, ${access}>`; - } else { - const componentPrefix = this.getComponentTypeFromTexture(texture).charAt(0); - - textureType = `texture${multisampled}_2d<${componentPrefix}32>`; - } - - bindingSnippets.push(`@binding( ${uniformIndexes.binding++} ) @group( ${uniformIndexes.group} ) var ${uniform.name} : ${textureType};`); - } else if (uniform.type === 'buffer' || uniform.type === 'storageBuffer') { - const bufferNode = uniform.node; - const bufferType = this.getType(bufferNode.bufferType); - const bufferCount = bufferNode.bufferCount; - - const bufferCountSnippet = bufferCount > 0 ? ', ' + bufferCount : ''; - const bufferSnippet = `\t${uniform.name} : array< ${bufferType}${bufferCountSnippet} >\n`; - const bufferAccessMode = bufferNode.isStorageBufferNode ? `storage, ${this.getStorageAccess(bufferNode)}` : 'uniform'; - - bufferSnippets.push(this._getWGSLStructBinding('NodeBuffer_' + bufferNode.id, bufferSnippet, bufferAccessMode, uniformIndexes.binding++, uniformIndexes.group)); - } else { - const vectorType = this.getType(this.getVectorType(uniform.type)); - const groupName = uniform.groupNode.name; - - const group = - uniformGroups[groupName] || - (uniformGroups[groupName] = { - index: uniformIndexes.binding++, - id: uniformIndexes.group, - snippets: [], - }); - - group.snippets.push(`\t${uniform.name} : ${vectorType}`); - } - } - - for (const name in uniformGroups) { - const group = uniformGroups[name]; - - structSnippets.push(this._getWGSLStructBinding(name, group.snippets.join(',\n'), 'uniform', group.index, group.id)); - } - - let code = bindingSnippets.join('\n'); - code += bufferSnippets.join('\n'); - code += structSnippets.join('\n'); - - return code; - } - - buildCode() { - const shadersData = this.material !== null ? { fragment: {}, vertex: {} } : { compute: {} }; - - for (const shaderStage in shadersData) { - const stageData = shadersData[shaderStage]; - stageData.uniforms = this.getUniforms(shaderStage); - stageData.attributes = this.getAttributes(shaderStage); - stageData.varyings = this.getVaryings(shaderStage); - stageData.structs = this.getStructs(shaderStage); - stageData.vars = this.getVars(shaderStage); - stageData.codes = this.getCodes(shaderStage); - stageData.directives = this.getDirectives(shaderStage); - - // - - let flow = '// code\n\n'; - flow += this.flowCode[shaderStage]; - - const flowNodes = this.flowNodes[shaderStage]; - const mainNode = flowNodes[flowNodes.length - 1]; - - const outputNode = mainNode.outputNode; - const isOutputStruct = outputNode !== undefined && outputNode.isOutputStructNode === true; - - for (const node of flowNodes) { - const flowSlotData = this.getFlowData(node /*, shaderStage*/); - const slotName = node.name; - - if (slotName) { - if (flow.length > 0) flow += '\n'; - - flow += `\t// flow -> ${slotName}\n\t`; - } - - flow += `${flowSlotData.code}\n\t`; - - if (node === mainNode && shaderStage !== 'compute') { - flow += '// result\n\n\t'; - - if (shaderStage === 'vertex') { - flow += `varyings.Vertex = ${flowSlotData.result};`; - } else if (shaderStage === 'fragment') { - if (isOutputStruct) { - stageData.returnType = outputNode.nodeType; - - flow += `return ${flowSlotData.result};`; - } else { - let structSnippet = '\t@location(0) color: vec4'; - - const builtins = this.getBuiltins('output'); - - if (builtins) structSnippet += ',\n\t' + builtins; - - stageData.returnType = 'OutputStruct'; - stageData.structs += this._getWGSLStruct('OutputStruct', structSnippet); - stageData.structs += '\nvar output : OutputStruct;\n\n'; - - flow += `output.color = ${flowSlotData.result};\n\n\treturn output;`; - } - } - } - } - - stageData.flow = flow; - } - - if (this.material !== null) { - this.vertexShader = this._getWGSLVertexCode(shadersData.vertex); - this.fragmentShader = this._getWGSLFragmentCode(shadersData.fragment); - } else { - this.computeShader = this._getWGSLComputeCode(shadersData.compute, (this.object.workgroupSize || [64]).join(', ')); - } - } - - getMethod(method, output = null) { - let wgslMethod; - - if (output !== null) { - wgslMethod = this._getWGSLMethod(method + '_' + output); - } - - if (wgslMethod === undefined) { - wgslMethod = this._getWGSLMethod(method); - } - - return wgslMethod || method; - } - - getType(type) { - return wgslTypeLib[type] || type; - } - - isAvailable(name) { - let result = supports[name]; - - if (result === undefined) { - if (name === 'float32Filterable') { - result = this.renderer.hasFeature('float32-filterable'); - } - - supports[name] = result; - } - - return result; - } - - _getWGSLMethod(method) { - if (wgslPolyfill[method] !== undefined) { - this._include(method); - } - - return wgslMethods[method]; - } - - _include(name) { - const codeNode = wgslPolyfill[name]; - codeNode.build(this); - - if (this.currentFunctionNode !== null) { - this.currentFunctionNode.includes.push(codeNode); - } - - return codeNode; - } - - _getWGSLVertexCode(shaderData) { - return `${this.getSignature()} -// directives -${shaderData.directives} - -// uniforms -${shaderData.uniforms} - -// varyings -${shaderData.varyings} -var varyings : VaryingsStruct; - -// codes -${shaderData.codes} - -@vertex -fn main( ${shaderData.attributes} ) -> VaryingsStruct { - - // vars - ${shaderData.vars} - - // flow - ${shaderData.flow} - - return varyings; - -} -`; - } - - _getWGSLFragmentCode(shaderData) { - return `${this.getSignature()} - -diagnostic( off, derivative_uniformity ); - -// uniforms -${shaderData.uniforms} - -// structs -${shaderData.structs} - -// codes -${shaderData.codes} - -@fragment -fn main( ${shaderData.varyings} ) -> ${shaderData.returnType} { - - // vars - ${shaderData.vars} - - // flow - ${shaderData.flow} - -} -`; - } - - _getWGSLComputeCode(shaderData, workgroupSize) { - return `${this.getSignature()} -// directives -${shaderData.directives} - -// system -var instanceIndex : u32; - -// uniforms -${shaderData.uniforms} - -// codes -${shaderData.codes} - -@compute @workgroup_size( ${workgroupSize} ) -fn main( ${shaderData.attributes} ) { - - // system - instanceIndex = id.x + id.y * numWorkgroups.x * u32(${workgroupSize}) + id.z * numWorkgroups.x * numWorkgroups.y * u32(${workgroupSize}); - - // vars - ${shaderData.vars} - - // flow - ${shaderData.flow} - -} -`; - } - - _getWGSLStruct(name, vars) { - return ` -struct ${name} { -${vars} -};`; - } - - _getWGSLStructBinding(name, vars, access, binding = 0, group = 0) { - const structName = name + 'Struct'; - const structSnippet = this._getWGSLStruct(structName, vars); - - return `${structSnippet} -@binding( ${binding} ) @group( ${group} ) -var<${access}> ${name} : ${structName};`; - } -} - -class WebGPUUtils { - constructor(backend) { - this.backend = backend; - } - - getCurrentDepthStencilFormat(renderContext) { - let format; - - if (renderContext.depthTexture !== null) { - format = this.getTextureFormatGPU(renderContext.depthTexture); - } else if (renderContext.depth && renderContext.stencil) { - format = GPUTextureFormat.Depth24PlusStencil8; - } else if (renderContext.depth) { - format = GPUTextureFormat.Depth24Plus; - } - - return format; - } - - getTextureFormatGPU(texture) { - return this.backend.get(texture).texture.format; - } - - getCurrentColorFormat(renderContext) { - let format; - - if (renderContext.textures !== null) { - format = this.getTextureFormatGPU(renderContext.textures[0]); - } else { - format = navigator.gpu.getPreferredCanvasFormat(); // default context format - } - - return format; - } - - getCurrentColorSpace(renderContext) { - if (renderContext.textures !== null) { - return renderContext.textures[0].colorSpace; - } - - return this.backend.renderer.outputColorSpace; - } - - getPrimitiveTopology(object, material) { - if (object.isPoints) return GPUPrimitiveTopology.PointList; - else if (object.isLineSegments || (object.isMesh && material.wireframe === true)) return GPUPrimitiveTopology.LineList; - else if (object.isLine) return GPUPrimitiveTopology.LineStrip; - else if (object.isMesh) return GPUPrimitiveTopology.TriangleList; - } - - getSampleCount(sampleCount) { - let count = 1; - - if (sampleCount > 1) { - // WebGPU only supports power-of-two sample counts and 2 is not a valid value - count = Math.pow(2, Math.floor(Math.log2(sampleCount))); - - if (count === 2) { - count = 4; - } - } - - return count; - } - - getSampleCountRenderContext(renderContext) { - if (renderContext.textures !== null) { - return this.getSampleCount(renderContext.sampleCount); - } - - return this.getSampleCount(this.backend.renderer.samples); - } -} - -const typedArraysToVertexFormatPrefix = new Map([ - [Int8Array, ['sint8', 'snorm8']], - [Uint8Array, ['uint8', 'unorm8']], - [Int16Array, ['sint16', 'snorm16']], - [Uint16Array, ['uint16', 'unorm16']], - [Int32Array, ['sint32', 'snorm32']], - [Uint32Array, ['uint32', 'unorm32']], - [Float32Array, ['float32']], -]); - -const typedAttributeToVertexFormatPrefix = new Map([[Float16BufferAttribute, ['float16']]]); - -const typeArraysToVertexFormatPrefixForItemSize1 = new Map([ - [Int32Array, 'sint32'], - [Int16Array, 'sint32'], // patch for INT16 - [Uint32Array, 'uint32'], - [Uint16Array, 'uint32'], // patch for UINT16 - [Float32Array, 'float32'], -]); - -class WebGPUAttributeUtils { - constructor(backend) { - this.backend = backend; - } - - createAttribute(attribute, usage) { - const bufferAttribute = this._getBufferAttribute(attribute); - - const backend = this.backend; - const bufferData = backend.get(bufferAttribute); - - let buffer = bufferData.buffer; - - if (buffer === undefined) { - const device = backend.device; - - let array = bufferAttribute.array; - - // patch for INT16 and UINT16 - if (attribute.normalized === false && (array.constructor === Int16Array || array.constructor === Uint16Array)) { - const tempArray = new Uint32Array(array.length); - for (let i = 0; i < array.length; i++) { - tempArray[i] = array[i]; - } - - array = tempArray; - } - - bufferAttribute.array = array; - - if ((bufferAttribute.isStorageBufferAttribute || bufferAttribute.isStorageInstancedBufferAttribute) && bufferAttribute.itemSize === 3) { - array = new array.constructor(bufferAttribute.count * 4); - - for (let i = 0; i < bufferAttribute.count; i++) { - array.set(bufferAttribute.array.subarray(i * 3, i * 3 + 3), i * 4); - } - - // Update BufferAttribute - bufferAttribute.itemSize = 4; - bufferAttribute.array = array; - } - - const size = array.byteLength + ((4 - (array.byteLength % 4)) % 4); // ensure 4 byte alignment, see #20441 - - buffer = device.createBuffer({ - label: bufferAttribute.name, - size: size, - usage: usage, - mappedAtCreation: true, - }); - - new array.constructor(buffer.getMappedRange()).set(array); - - buffer.unmap(); - - bufferData.buffer = buffer; - } - } - - updateAttribute(attribute) { - const bufferAttribute = this._getBufferAttribute(attribute); - - const backend = this.backend; - const device = backend.device; - - const buffer = backend.get(bufferAttribute).buffer; - - const array = bufferAttribute.array; - const updateRanges = bufferAttribute.updateRanges; - - if (updateRanges.length === 0) { - // Not using update ranges - - device.queue.writeBuffer(buffer, 0, array, 0); - } else { - for (let i = 0, l = updateRanges.length; i < l; i++) { - const range = updateRanges[i]; - device.queue.writeBuffer(buffer, 0, array, range.start * array.BYTES_PER_ELEMENT, range.count * array.BYTES_PER_ELEMENT); - } - - bufferAttribute.clearUpdateRanges(); - } - } - - createShaderVertexBuffers(renderObject) { - const attributes = renderObject.getAttributes(); - const vertexBuffers = new Map(); - - for (let slot = 0; slot < attributes.length; slot++) { - const geometryAttribute = attributes[slot]; - const bytesPerElement = geometryAttribute.array.BYTES_PER_ELEMENT; - const bufferAttribute = this._getBufferAttribute(geometryAttribute); - - let vertexBufferLayout = vertexBuffers.get(bufferAttribute); - - if (vertexBufferLayout === undefined) { - let arrayStride, stepMode; - - if (geometryAttribute.isInterleavedBufferAttribute === true) { - arrayStride = geometryAttribute.data.stride * bytesPerElement; - stepMode = geometryAttribute.data.isInstancedInterleavedBuffer ? GPUInputStepMode.Instance : GPUInputStepMode.Vertex; - } else { - arrayStride = geometryAttribute.itemSize * bytesPerElement; - stepMode = geometryAttribute.isInstancedBufferAttribute ? GPUInputStepMode.Instance : GPUInputStepMode.Vertex; - } - - // patch for INT16 and UINT16 - if (geometryAttribute.normalized === false && (geometryAttribute.array.constructor === Int16Array || geometryAttribute.array.constructor === Uint16Array)) { - arrayStride = 4; - } - - vertexBufferLayout = { - arrayStride, - attributes: [], - stepMode, - }; - - vertexBuffers.set(bufferAttribute, vertexBufferLayout); - } - - const format = this._getVertexFormat(geometryAttribute); - const offset = geometryAttribute.isInterleavedBufferAttribute === true ? geometryAttribute.offset * bytesPerElement : 0; - - vertexBufferLayout.attributes.push({ - shaderLocation: slot, - offset, - format, - }); - } - - return Array.from(vertexBuffers.values()); - } - - destroyAttribute(attribute) { - const backend = this.backend; - const data = backend.get(this._getBufferAttribute(attribute)); - - data.buffer.destroy(); - - backend.delete(attribute); - } - - async getArrayBufferAsync(attribute) { - const backend = this.backend; - const device = backend.device; - - const data = backend.get(this._getBufferAttribute(attribute)); - - const bufferGPU = data.buffer; - const size = bufferGPU.size; - - let readBufferGPU = data.readBuffer; - let needsUnmap = true; - - if (readBufferGPU === undefined) { - readBufferGPU = device.createBuffer({ - label: attribute.name, - size, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ, - }); - - needsUnmap = false; - - data.readBuffer = readBufferGPU; - } - - const cmdEncoder = device.createCommandEncoder({}); - - cmdEncoder.copyBufferToBuffer(bufferGPU, 0, readBufferGPU, 0, size); - - if (needsUnmap) readBufferGPU.unmap(); - - const gpuCommands = cmdEncoder.finish(); - device.queue.submit([gpuCommands]); - - await readBufferGPU.mapAsync(GPUMapMode.READ); - - const arrayBuffer = readBufferGPU.getMappedRange(); - - return arrayBuffer; - } - - _getVertexFormat(geometryAttribute) { - const { itemSize, normalized } = geometryAttribute; - const ArrayType = geometryAttribute.array.constructor; - const AttributeType = geometryAttribute.constructor; - - let format; - - if (itemSize == 1) { - format = typeArraysToVertexFormatPrefixForItemSize1.get(ArrayType); - } else { - const prefixOptions = typedAttributeToVertexFormatPrefix.get(AttributeType) || typedArraysToVertexFormatPrefix.get(ArrayType); - const prefix = prefixOptions[normalized ? 1 : 0]; - - if (prefix) { - const bytesPerUnit = ArrayType.BYTES_PER_ELEMENT * itemSize; - const paddedBytesPerUnit = Math.floor((bytesPerUnit + 3) / 4) * 4; - const paddedItemSize = paddedBytesPerUnit / ArrayType.BYTES_PER_ELEMENT; - - if (paddedItemSize % 1) { - throw new Error('THREE.WebGPUAttributeUtils: Bad vertex format item size.'); - } - - format = `${prefix}x${paddedItemSize}`; - } - } - - if (!format) { - console.error('THREE.WebGPUAttributeUtils: Vertex format not supported yet.'); - } - - return format; - } - - _getBufferAttribute(attribute) { - if (attribute.isInterleavedBufferAttribute) attribute = attribute.data; - - return attribute; - } -} - -class WebGPUBindingUtils { - constructor(backend) { - this.backend = backend; - this.bindGroupLayoutCache = new WeakMap(); - } - - createBindingsLayout(bindGroup) { - const backend = this.backend; - const device = backend.device; - - const entries = []; - - let index = 0; - - for (const binding of bindGroup.bindings) { - const bindingGPU = { - binding: index++, - visibility: binding.visibility, - }; - - if (binding.isUniformBuffer || binding.isStorageBuffer) { - const buffer = {}; // GPUBufferBindingLayout - - if (binding.isStorageBuffer) { - buffer.type = binding.access; - } - - bindingGPU.buffer = buffer; - } else if (binding.isSampler) { - const sampler = {}; // GPUSamplerBindingLayout - - if (binding.texture.isDepthTexture) { - if (binding.texture.compareFunction !== null) { - sampler.type = 'comparison'; - } - } - - bindingGPU.sampler = sampler; - } else if (binding.isSampledTexture && binding.texture.isVideoTexture) { - bindingGPU.externalTexture = {}; // GPUExternalTextureBindingLayout - } else if (binding.isSampledTexture && binding.store) { - const format = this.backend.get(binding.texture).texture.format; - const access = binding.access; - - bindingGPU.storageTexture = { format, access }; // GPUStorageTextureBindingLayout - } else if (binding.isSampledTexture) { - const texture = {}; // GPUTextureBindingLayout - - if (binding.texture.isMultisampleRenderTargetTexture === true) { - texture.multisampled = true; - } - - if (binding.texture.isDepthTexture) { - texture.sampleType = GPUTextureSampleType.Depth; - } else if (binding.texture.isDataTexture || binding.texture.isDataArrayTexture || binding.texture.isData3DTexture) { - const type = binding.texture.type; - - if (type === IntType) { - texture.sampleType = GPUTextureSampleType.SInt; - } else if (type === UnsignedIntType) { - texture.sampleType = GPUTextureSampleType.UInt; - } else if (type === FloatType) { - if (this.backend.hasFeature('float32-filterable')) { - texture.sampleType = GPUTextureSampleType.Float; - } else { - texture.sampleType = GPUTextureSampleType.UnfilterableFloat; - } - } - } - - if (binding.isSampledCubeTexture) { - texture.viewDimension = GPUTextureViewDimension.Cube; - } else if (binding.texture.isDataArrayTexture) { - texture.viewDimension = GPUTextureViewDimension.TwoDArray; - } else if (binding.isSampledTexture3D) { - texture.viewDimension = GPUTextureViewDimension.ThreeD; - } - - bindingGPU.texture = texture; - } else { - console.error(`WebGPUBindingUtils: Unsupported binding "${binding}".`); - } - - entries.push(bindingGPU); - } - - return device.createBindGroupLayout({ entries }); - } - - createBindings(bindGroup) { - const { backend, bindGroupLayoutCache } = this; - const bindingsData = backend.get(bindGroup); - - // setup (static) binding layout and (dynamic) binding group - - let bindLayoutGPU = bindGroupLayoutCache.get(bindGroup.bindingsReference); - - if (bindLayoutGPU === undefined) { - bindLayoutGPU = this.createBindingsLayout(bindGroup); - bindGroupLayoutCache.set(bindGroup.bindingsReference, bindLayoutGPU); - } - - const bindGroupGPU = this.createBindGroup(bindGroup, bindLayoutGPU); - - bindingsData.layout = bindLayoutGPU; - bindingsData.group = bindGroupGPU; - } - - updateBinding(binding) { - const backend = this.backend; - const device = backend.device; - - const buffer = binding.buffer; - const bufferGPU = backend.get(binding).buffer; - - device.queue.writeBuffer(bufferGPU, 0, buffer, 0); - } - - createBindGroup(bindGroup, layoutGPU) { - const backend = this.backend; - const device = backend.device; - - let bindingPoint = 0; - const entriesGPU = []; - - for (const binding of bindGroup.bindings) { - if (binding.isUniformBuffer) { - const bindingData = backend.get(binding); - - if (bindingData.buffer === undefined) { - const byteLength = binding.byteLength; - - const usage = GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST; - - const bufferGPU = device.createBuffer({ - label: 'bindingBuffer_' + binding.name, - size: byteLength, - usage: usage, - }); - - bindingData.buffer = bufferGPU; - } - - entriesGPU.push({ binding: bindingPoint, resource: { buffer: bindingData.buffer } }); - } else if (binding.isStorageBuffer) { - const bindingData = backend.get(binding); - - if (bindingData.buffer === undefined) { - const attribute = binding.attribute; - //const usage = GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | /*GPUBufferUsage.COPY_SRC |*/ GPUBufferUsage.COPY_DST; - - //backend.attributeUtils.createAttribute( attribute, usage ); // @TODO: Move it to universal renderer - - bindingData.buffer = backend.get(attribute).buffer; - } - - entriesGPU.push({ binding: bindingPoint, resource: { buffer: bindingData.buffer } }); - } else if (binding.isSampler) { - const textureGPU = backend.get(binding.texture); - - entriesGPU.push({ binding: bindingPoint, resource: textureGPU.sampler }); - } else if (binding.isSampledTexture) { - const textureData = backend.get(binding.texture); - - let dimensionViewGPU; - - if (binding.isSampledCubeTexture) { - dimensionViewGPU = GPUTextureViewDimension.Cube; - } else if (binding.isSampledTexture3D) { - dimensionViewGPU = GPUTextureViewDimension.ThreeD; - } else if (binding.texture.isDataArrayTexture) { - dimensionViewGPU = GPUTextureViewDimension.TwoDArray; - } else { - dimensionViewGPU = GPUTextureViewDimension.TwoD; - } - - let resourceGPU; - - if (textureData.externalTexture !== undefined) { - resourceGPU = device.importExternalTexture({ source: textureData.externalTexture }); - } else { - const aspectGPU = GPUTextureAspect.All; - - resourceGPU = textureData.texture.createView({ aspect: aspectGPU, dimension: dimensionViewGPU, mipLevelCount: binding.store ? 1 : textureData.mipLevelCount }); - } - - entriesGPU.push({ binding: bindingPoint, resource: resourceGPU }); - } - - bindingPoint++; - } - - return device.createBindGroup({ - label: 'bindGroup_' + bindGroup.name, - layout: layoutGPU, - entries: entriesGPU, - }); - } -} - -class WebGPUPipelineUtils { - constructor(backend) { - this.backend = backend; - } - - _getSampleCount(renderObjectContext) { - return this.backend.utils.getSampleCountRenderContext(renderObjectContext); - } - - createRenderPipeline(renderObject, promises) { - const { object, material, geometry, pipeline } = renderObject; - const { vertexProgram, fragmentProgram } = pipeline; - - const backend = this.backend; - const device = backend.device; - const utils = backend.utils; - - const pipelineData = backend.get(pipeline); - - // bind group layouts - - const bindGroupLayouts = []; - - for (const bindGroup of renderObject.getBindings()) { - const bindingsData = backend.get(bindGroup); - - bindGroupLayouts.push(bindingsData.layout); - } - - // vertex buffers - - const vertexBuffers = backend.attributeUtils.createShaderVertexBuffers(renderObject); - - // blending - - let blending; - - if (material.transparent === true && material.blending !== NoBlending) { - blending = this._getBlending(material); - } - - // stencil - - let stencilFront = {}; - - if (material.stencilWrite === true) { - stencilFront = { - compare: this._getStencilCompare(material), - failOp: this._getStencilOperation(material.stencilFail), - depthFailOp: this._getStencilOperation(material.stencilZFail), - passOp: this._getStencilOperation(material.stencilZPass), - }; - } - - const colorWriteMask = this._getColorWriteMask(material); - - const targets = []; - - if (renderObject.context.textures !== null) { - const textures = renderObject.context.textures; - - for (let i = 0; i < textures.length; i++) { - const colorFormat = utils.getTextureFormatGPU(textures[i]); - - targets.push({ - format: colorFormat, - blend: blending, - writeMask: colorWriteMask, - }); - } - } else { - const colorFormat = utils.getCurrentColorFormat(renderObject.context); - - targets.push({ - format: colorFormat, - blend: blending, - writeMask: colorWriteMask, - }); - } - - const vertexModule = backend.get(vertexProgram).module; - const fragmentModule = backend.get(fragmentProgram).module; - - const primitiveState = this._getPrimitiveState(object, geometry, material); - const depthCompare = this._getDepthCompare(material); - const depthStencilFormat = utils.getCurrentDepthStencilFormat(renderObject.context); - - const sampleCount = this._getSampleCount(renderObject.context); - - const pipelineDescriptor = { - label: `renderPipeline_${material.name || material.type}_${material.id}`, - vertex: Object.assign({}, vertexModule, { buffers: vertexBuffers }), - fragment: Object.assign({}, fragmentModule, { targets }), - primitive: primitiveState, - depthStencil: { - format: depthStencilFormat, - depthWriteEnabled: material.depthWrite, - depthCompare: depthCompare, - stencilFront: stencilFront, - stencilBack: {}, // three.js does not provide an API to configure the back function (gl.stencilFuncSeparate() was never used) - stencilReadMask: material.stencilFuncMask, - stencilWriteMask: material.stencilWriteMask, - }, - multisample: { - count: sampleCount, - alphaToCoverageEnabled: material.alphaToCoverage, - }, - layout: device.createPipelineLayout({ - bindGroupLayouts, - }), - }; - - if (promises === null) { - pipelineData.pipeline = device.createRenderPipeline(pipelineDescriptor); - } else { - const p = new Promise((resolve /*, reject*/) => { - device.createRenderPipelineAsync(pipelineDescriptor).then((pipeline) => { - pipelineData.pipeline = pipeline; - resolve(); - }); - }); - - promises.push(p); - } - } - - createBundleEncoder(renderContext, renderObject) { - const backend = this.backend; - const { utils, device } = backend; - - const renderContextData = backend.get(renderContext); - const renderObjectData = backend.get(renderObject); - - const depthStencilFormat = utils.getCurrentDepthStencilFormat(renderContext); - const colorFormat = utils.getCurrentColorFormat(renderContext); - const sampleCount = this._getSampleCount(renderObject.context); - - const descriptor = { - label: 'renderBundleEncoder', - colorFormats: [colorFormat], - depthStencilFormat, - sampleCount, - }; - - const bundleEncoder = device.createRenderBundleEncoder(descriptor); - - renderObjectData.bundleEncoder = bundleEncoder; - renderContextData.currentSets = { attributes: {} }; - renderContextData._renderBundleViewport = renderContext.width + '_' + renderContext.height; - - return bundleEncoder; - } - - createComputePipeline(pipeline, bindings) { - const backend = this.backend; - const device = backend.device; - - const computeProgram = backend.get(pipeline.computeProgram).module; - - const pipelineGPU = backend.get(pipeline); - - // bind group layouts - - const bindGroupLayouts = []; - - for (const bindingsGroup of bindings) { - const bindingsData = backend.get(bindingsGroup); - - bindGroupLayouts.push(bindingsData.layout); - } - - pipelineGPU.pipeline = device.createComputePipeline({ - compute: computeProgram, - layout: device.createPipelineLayout({ - bindGroupLayouts, - }), - }); - } - - _getBlending(material) { - let color, alpha; - - const blending = material.blending; - const blendSrc = material.blendSrc; - const blendDst = material.blendDst; - const blendEquation = material.blendEquation; - - if (blending === CustomBlending) { - const blendSrcAlpha = material.blendSrcAlpha !== null ? material.blendSrcAlpha : blendSrc; - const blendDstAlpha = material.blendDstAlpha !== null ? material.blendDstAlpha : blendDst; - const blendEquationAlpha = material.blendEquationAlpha !== null ? material.blendEquationAlpha : blendEquation; - - color = { - srcFactor: this._getBlendFactor(blendSrc), - dstFactor: this._getBlendFactor(blendDst), - operation: this._getBlendOperation(blendEquation), - }; - - alpha = { - srcFactor: this._getBlendFactor(blendSrcAlpha), - dstFactor: this._getBlendFactor(blendDstAlpha), - operation: this._getBlendOperation(blendEquationAlpha), - }; - } else { - const premultipliedAlpha = material.premultipliedAlpha; - - const setBlend = (srcRGB, dstRGB, srcAlpha, dstAlpha) => { - color = { - srcFactor: srcRGB, - dstFactor: dstRGB, - operation: GPUBlendOperation.Add, - }; - - alpha = { - srcFactor: srcAlpha, - dstFactor: dstAlpha, - operation: GPUBlendOperation.Add, - }; - }; - - if (premultipliedAlpha) { - switch (blending) { - case NormalBlending: - setBlend(GPUBlendFactor.One, GPUBlendFactor.OneMinusSrcAlpha, GPUBlendFactor.One, GPUBlendFactor.OneMinusSrcAlpha); - break; - - case AdditiveBlending: - setBlend(GPUBlendFactor.One, GPUBlendFactor.One, GPUBlendFactor.One, GPUBlendFactor.One); - break; - - case SubtractiveBlending: - setBlend(GPUBlendFactor.Zero, GPUBlendFactor.OneMinusSrc, GPUBlendFactor.Zero, GPUBlendFactor.One); - break; - - case MultiplyBlending: - setBlend(GPUBlendFactor.Zero, GPUBlendFactor.Src, GPUBlendFactor.Zero, GPUBlendFactor.SrcAlpha); - break; - } - } else { - switch (blending) { - case NormalBlending: - setBlend(GPUBlendFactor.SrcAlpha, GPUBlendFactor.OneMinusSrcAlpha, GPUBlendFactor.One, GPUBlendFactor.OneMinusSrcAlpha); - break; - - case AdditiveBlending: - setBlend(GPUBlendFactor.SrcAlpha, GPUBlendFactor.One, GPUBlendFactor.SrcAlpha, GPUBlendFactor.One); - break; - - case SubtractiveBlending: - setBlend(GPUBlendFactor.Zero, GPUBlendFactor.OneMinusSrc, GPUBlendFactor.Zero, GPUBlendFactor.One); - break; - - case MultiplyBlending: - setBlend(GPUBlendFactor.Zero, GPUBlendFactor.Src, GPUBlendFactor.Zero, GPUBlendFactor.Src); - break; - } - } - } - - if (color !== undefined && alpha !== undefined) { - return { color, alpha }; - } else { - console.error('THREE.WebGPURenderer: Invalid blending: ', blending); - } - } - - _getBlendFactor(blend) { - let blendFactor; - - switch (blend) { - case ZeroFactor: - blendFactor = GPUBlendFactor.Zero; - break; - - case OneFactor: - blendFactor = GPUBlendFactor.One; - break; - - case SrcColorFactor: - blendFactor = GPUBlendFactor.Src; - break; - - case OneMinusSrcColorFactor: - blendFactor = GPUBlendFactor.OneMinusSrc; - break; - - case SrcAlphaFactor: - blendFactor = GPUBlendFactor.SrcAlpha; - break; - - case OneMinusSrcAlphaFactor: - blendFactor = GPUBlendFactor.OneMinusSrcAlpha; - break; - - case DstColorFactor: - blendFactor = GPUBlendFactor.Dst; - break; - - case OneMinusDstColorFactor: - blendFactor = GPUBlendFactor.OneMinusDstColor; - break; - - case DstAlphaFactor: - blendFactor = GPUBlendFactor.DstAlpha; - break; - - case OneMinusDstAlphaFactor: - blendFactor = GPUBlendFactor.OneMinusDstAlpha; - break; - - case SrcAlphaSaturateFactor: - blendFactor = GPUBlendFactor.SrcAlphaSaturated; - break; - - case BlendColorFactor: - blendFactor = GPUBlendFactor.Constant; - break; - - case OneMinusBlendColorFactor: - blendFactor = GPUBlendFactor.OneMinusConstant; - break; - - default: - console.error('THREE.WebGPURenderer: Blend factor not supported.', blend); - } - - return blendFactor; - } - - _getStencilCompare(material) { - let stencilCompare; - - const stencilFunc = material.stencilFunc; - - switch (stencilFunc) { - case NeverStencilFunc: - stencilCompare = GPUCompareFunction.Never; - break; - - case AlwaysStencilFunc: - stencilCompare = GPUCompareFunction.Always; - break; - - case LessStencilFunc: - stencilCompare = GPUCompareFunction.Less; - break; - - case LessEqualStencilFunc: - stencilCompare = GPUCompareFunction.LessEqual; - break; - - case EqualStencilFunc: - stencilCompare = GPUCompareFunction.Equal; - break; - - case GreaterEqualStencilFunc: - stencilCompare = GPUCompareFunction.GreaterEqual; - break; - - case GreaterStencilFunc: - stencilCompare = GPUCompareFunction.Greater; - break; - - case NotEqualStencilFunc: - stencilCompare = GPUCompareFunction.NotEqual; - break; - - default: - console.error('THREE.WebGPURenderer: Invalid stencil function.', stencilFunc); - } - - return stencilCompare; - } - - _getStencilOperation(op) { - let stencilOperation; - - switch (op) { - case KeepStencilOp: - stencilOperation = GPUStencilOperation.Keep; - break; - - case ZeroStencilOp: - stencilOperation = GPUStencilOperation.Zero; - break; - - case ReplaceStencilOp: - stencilOperation = GPUStencilOperation.Replace; - break; - - case InvertStencilOp: - stencilOperation = GPUStencilOperation.Invert; - break; - - case IncrementStencilOp: - stencilOperation = GPUStencilOperation.IncrementClamp; - break; - - case DecrementStencilOp: - stencilOperation = GPUStencilOperation.DecrementClamp; - break; - - case IncrementWrapStencilOp: - stencilOperation = GPUStencilOperation.IncrementWrap; - break; - - case DecrementWrapStencilOp: - stencilOperation = GPUStencilOperation.DecrementWrap; - break; - - default: - console.error('THREE.WebGPURenderer: Invalid stencil operation.', stencilOperation); - } - - return stencilOperation; - } - - _getBlendOperation(blendEquation) { - let blendOperation; - - switch (blendEquation) { - case AddEquation: - blendOperation = GPUBlendOperation.Add; - break; - - case SubtractEquation: - blendOperation = GPUBlendOperation.Subtract; - break; - - case ReverseSubtractEquation: - blendOperation = GPUBlendOperation.ReverseSubtract; - break; - - case MinEquation: - blendOperation = GPUBlendOperation.Min; - break; - - case MaxEquation: - blendOperation = GPUBlendOperation.Max; - break; - - default: - console.error('THREE.WebGPUPipelineUtils: Blend equation not supported.', blendEquation); - } - - return blendOperation; - } - - _getPrimitiveState(object, geometry, material) { - const descriptor = {}; - const utils = this.backend.utils; - - descriptor.topology = utils.getPrimitiveTopology(object, material); - - if (geometry.index !== null && object.isLine === true && object.isLineSegments !== true) { - descriptor.stripIndexFormat = geometry.index.array instanceof Uint16Array ? GPUIndexFormat.Uint16 : GPUIndexFormat.Uint32; - } - - switch (material.side) { - case FrontSide: - descriptor.frontFace = GPUFrontFace.CCW; - descriptor.cullMode = GPUCullMode.Back; - break; - - case BackSide: - descriptor.frontFace = GPUFrontFace.CCW; - descriptor.cullMode = GPUCullMode.Front; - break; - - case DoubleSide: - descriptor.frontFace = GPUFrontFace.CCW; - descriptor.cullMode = GPUCullMode.None; - break; - - default: - console.error('THREE.WebGPUPipelineUtils: Unknown material.side value.', material.side); - break; - } - - return descriptor; - } - - _getColorWriteMask(material) { - return material.colorWrite === true ? GPUColorWriteFlags.All : GPUColorWriteFlags.None; - } - - _getDepthCompare(material) { - let depthCompare; - - if (material.depthTest === false) { - depthCompare = GPUCompareFunction.Always; - } else { - const depthFunc = material.depthFunc; - - switch (depthFunc) { - case NeverDepth: - depthCompare = GPUCompareFunction.Never; - break; - - case AlwaysDepth: - depthCompare = GPUCompareFunction.Always; - break; - - case LessDepth: - depthCompare = GPUCompareFunction.Less; - break; - - case LessEqualDepth: - depthCompare = GPUCompareFunction.LessEqual; - break; - - case EqualDepth: - depthCompare = GPUCompareFunction.Equal; - break; - - case GreaterEqualDepth: - depthCompare = GPUCompareFunction.GreaterEqual; - break; - - case GreaterDepth: - depthCompare = GPUCompareFunction.Greater; - break; - - case NotEqualDepth: - depthCompare = GPUCompareFunction.NotEqual; - break; - - default: - console.error('THREE.WebGPUPipelineUtils: Invalid depth function.', depthFunc); - } - } - - return depthCompare; - } -} - -/*// debugger tools -import 'https://greggman.github.io/webgpu-avoid-redundant-state-setting/webgpu-check-redundant-state-setting.js'; -//*/ - -// - -class WebGPUBackend extends Backend { - constructor(parameters = {}) { - super(parameters); - - this.isWebGPUBackend = true; - - // some parameters require default values other than "undefined" - this.parameters.alpha = parameters.alpha === undefined ? true : parameters.alpha; - - this.parameters.requiredLimits = parameters.requiredLimits === undefined ? {} : parameters.requiredLimits; - - this.trackTimestamp = parameters.trackTimestamp === true; - - this.device = null; - this.context = null; - this.colorBuffer = null; - this.defaultRenderPassdescriptor = null; - - this.utils = new WebGPUUtils(this); - this.attributeUtils = new WebGPUAttributeUtils(this); - this.bindingUtils = new WebGPUBindingUtils(this); - this.pipelineUtils = new WebGPUPipelineUtils(this); - this.textureUtils = new WebGPUTextureUtils(this); - this.occludedResolveCache = new Map(); - } - - async init(renderer) { - await super.init(renderer); - - // - - const parameters = this.parameters; - - // create the device if it is not passed with parameters - - let device; - - if (parameters.device === undefined) { - const adapterOptions = { - powerPreference: parameters.powerPreference, - }; - - const adapter = await navigator.gpu.requestAdapter(adapterOptions); - - if (adapter === null) { - throw new Error('WebGPUBackend: Unable to create WebGPU adapter.'); - } - - // feature support - - const features = Object.values(GPUFeatureName); - - const supportedFeatures = []; - - for (const name of features) { - if (adapter.features.has(name)) { - supportedFeatures.push(name); - } - } - - const deviceDescriptor = { - requiredFeatures: supportedFeatures, - requiredLimits: parameters.requiredLimits, - }; - - device = await adapter.requestDevice(deviceDescriptor); - } else { - device = parameters.device; - } - - const context = parameters.context !== undefined ? parameters.context : renderer.domElement.getContext('webgpu'); - - this.device = device; - this.context = context; - - const alphaMode = parameters.alpha ? 'premultiplied' : 'opaque'; - - this.context.configure({ - device: this.device, - format: navigator.gpu.getPreferredCanvasFormat(), - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - alphaMode: alphaMode, - }); - - this.updateSize(); - } - - get coordinateSystem() { - return WebGPUCoordinateSystem; - } - - async getArrayBufferAsync(attribute) { - return await this.attributeUtils.getArrayBufferAsync(attribute); - } - - getContext() { - return this.context; - } - - _getDefaultRenderPassDescriptor() { - let descriptor = this.defaultRenderPassdescriptor; - - if (descriptor === null) { - const renderer = this.renderer; - - descriptor = { - colorAttachments: [ - { - view: null, - }, - ], - depthStencilAttachment: { - view: this.textureUtils.getDepthBuffer(renderer.depth, renderer.stencil).createView(), - }, - }; - - const colorAttachment = descriptor.colorAttachments[0]; - - if (this.renderer.samples > 0) { - colorAttachment.view = this.colorBuffer.createView(); - } else { - colorAttachment.resolveTarget = undefined; - } - - this.defaultRenderPassdescriptor = descriptor; - } - - const colorAttachment = descriptor.colorAttachments[0]; - - if (this.renderer.samples > 0) { - colorAttachment.resolveTarget = this.context.getCurrentTexture().createView(); - } else { - colorAttachment.view = this.context.getCurrentTexture().createView(); - } - - return descriptor; - } - - _getRenderPassDescriptor(renderContext) { - const renderTarget = renderContext.renderTarget; - const renderTargetData = this.get(renderTarget); - - let descriptors = renderTargetData.descriptors; - - if (descriptors === undefined || renderTargetData.width !== renderTarget.width || renderTargetData.height !== renderTarget.height || renderTargetData.activeMipmapLevel !== renderTarget.activeMipmapLevel || renderTargetData.samples !== renderTarget.samples) { - descriptors = {}; - - renderTargetData.descriptors = descriptors; - - // dispose - - const onDispose = () => { - renderTarget.removeEventListener('dispose', onDispose); - - this.delete(renderTarget); - }; - - renderTarget.addEventListener('dispose', onDispose); - } - - const cacheKey = renderContext.getCacheKey(); - - let descriptor = descriptors[cacheKey]; - - if (descriptor === undefined) { - const textures = renderContext.textures; - const colorAttachments = []; - - for (let i = 0; i < textures.length; i++) { - const textureData = this.get(textures[i]); - - const textureView = textureData.texture.createView({ - baseMipLevel: renderContext.activeMipmapLevel, - mipLevelCount: 1, - baseArrayLayer: renderContext.activeCubeFace, - dimension: GPUTextureViewDimension.TwoD, - }); - - let view, resolveTarget; - - if (textureData.msaaTexture !== undefined) { - view = textureData.msaaTexture.createView(); - resolveTarget = textureView; - } else { - view = textureView; - resolveTarget = undefined; - } - - colorAttachments.push({ - view, - resolveTarget, - loadOp: GPULoadOp.Load, - storeOp: GPUStoreOp.Store, - }); - } - - const depthTextureData = this.get(renderContext.depthTexture); - - const depthStencilAttachment = { - view: depthTextureData.texture.createView(), - }; - - descriptor = { - colorAttachments, - depthStencilAttachment, - }; - - descriptors[cacheKey] = descriptor; - - renderTargetData.width = renderTarget.width; - renderTargetData.height = renderTarget.height; - renderTargetData.samples = renderTarget.samples; - renderTargetData.activeMipmapLevel = renderTarget.activeMipmapLevel; - } - - return descriptor; - } - - beginRender(renderContext) { - const renderContextData = this.get(renderContext); - - const device = this.device; - const occlusionQueryCount = renderContext.occlusionQueryCount; - - let occlusionQuerySet; - - if (occlusionQueryCount > 0) { - if (renderContextData.currentOcclusionQuerySet) renderContextData.currentOcclusionQuerySet.destroy(); - if (renderContextData.currentOcclusionQueryBuffer) renderContextData.currentOcclusionQueryBuffer.destroy(); - - // Get a reference to the array of objects with queries. The renderContextData property - // can be changed by another render pass before the buffer.mapAsyc() completes. - renderContextData.currentOcclusionQuerySet = renderContextData.occlusionQuerySet; - renderContextData.currentOcclusionQueryBuffer = renderContextData.occlusionQueryBuffer; - renderContextData.currentOcclusionQueryObjects = renderContextData.occlusionQueryObjects; - - // - - occlusionQuerySet = device.createQuerySet({ type: 'occlusion', count: occlusionQueryCount }); - - renderContextData.occlusionQuerySet = occlusionQuerySet; - renderContextData.occlusionQueryIndex = 0; - renderContextData.occlusionQueryObjects = new Array(occlusionQueryCount); - - renderContextData.lastOcclusionObject = null; - } - - let descriptor; - - if (renderContext.textures === null) { - descriptor = this._getDefaultRenderPassDescriptor(); - } else { - descriptor = this._getRenderPassDescriptor(renderContext); - } - - this.initTimestampQuery(renderContext, descriptor); - - descriptor.occlusionQuerySet = occlusionQuerySet; - - const depthStencilAttachment = descriptor.depthStencilAttachment; - - if (renderContext.textures !== null) { - const colorAttachments = descriptor.colorAttachments; - - for (let i = 0; i < colorAttachments.length; i++) { - const colorAttachment = colorAttachments[i]; - - if (renderContext.clearColor) { - colorAttachment.clearValue = i === 0 ? renderContext.clearColorValue : { r: 0, g: 0, b: 0, a: 1 }; - colorAttachment.loadOp = GPULoadOp.Clear; - colorAttachment.storeOp = GPUStoreOp.Store; - } else { - colorAttachment.loadOp = GPULoadOp.Load; - colorAttachment.storeOp = GPUStoreOp.Store; - } - } - } else { - const colorAttachment = descriptor.colorAttachments[0]; - - if (renderContext.clearColor) { - colorAttachment.clearValue = renderContext.clearColorValue; - colorAttachment.loadOp = GPULoadOp.Clear; - colorAttachment.storeOp = GPUStoreOp.Store; - } else { - colorAttachment.loadOp = GPULoadOp.Load; - colorAttachment.storeOp = GPUStoreOp.Store; - } - } - - // - - if (renderContext.depth) { - if (renderContext.clearDepth) { - depthStencilAttachment.depthClearValue = renderContext.clearDepthValue; - depthStencilAttachment.depthLoadOp = GPULoadOp.Clear; - depthStencilAttachment.depthStoreOp = GPUStoreOp.Store; - } else { - depthStencilAttachment.depthLoadOp = GPULoadOp.Load; - depthStencilAttachment.depthStoreOp = GPUStoreOp.Store; - } - } - - if (renderContext.stencil) { - if (renderContext.clearStencil) { - depthStencilAttachment.stencilClearValue = renderContext.clearStencilValue; - depthStencilAttachment.stencilLoadOp = GPULoadOp.Clear; - depthStencilAttachment.stencilStoreOp = GPUStoreOp.Store; - } else { - depthStencilAttachment.stencilLoadOp = GPULoadOp.Load; - depthStencilAttachment.stencilStoreOp = GPUStoreOp.Store; - } - } - - // - - const encoder = device.createCommandEncoder({ label: 'renderContext_' + renderContext.id }); - const currentPass = encoder.beginRenderPass(descriptor); - - // - - renderContextData.descriptor = descriptor; - renderContextData.encoder = encoder; - renderContextData.currentPass = currentPass; - renderContextData.currentSets = { attributes: {} }; - - // - - if (renderContext.viewport) { - this.updateViewport(renderContext); - } - - if (renderContext.scissor) { - const { x, y, width, height } = renderContext.scissorValue; - - currentPass.setScissorRect(x, renderContext.height - height - y, width, height); - } - } - - finishRender(renderContext) { - const renderContextData = this.get(renderContext); - const occlusionQueryCount = renderContext.occlusionQueryCount; - - if (renderContextData.renderBundles !== undefined && renderContextData.renderBundles.length > 0) { - renderContextData.registerBundlesPhase = false; - renderContextData.currentPass.executeBundles(renderContextData.renderBundles); - } - - if (occlusionQueryCount > renderContextData.occlusionQueryIndex) { - renderContextData.currentPass.endOcclusionQuery(); - } - - renderContextData.currentPass.end(); - - if (occlusionQueryCount > 0) { - const bufferSize = occlusionQueryCount * 8; // 8 byte entries for query results - - // - - let queryResolveBuffer = this.occludedResolveCache.get(bufferSize); - - if (queryResolveBuffer === undefined) { - queryResolveBuffer = this.device.createBuffer({ - size: bufferSize, - usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC, - }); - - this.occludedResolveCache.set(bufferSize, queryResolveBuffer); - } - - // - - const readBuffer = this.device.createBuffer({ - size: bufferSize, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ, - }); - - // two buffers required here - WebGPU doesn't allow usage of QUERY_RESOLVE & MAP_READ to be combined - renderContextData.encoder.resolveQuerySet(renderContextData.occlusionQuerySet, 0, occlusionQueryCount, queryResolveBuffer, 0); - renderContextData.encoder.copyBufferToBuffer(queryResolveBuffer, 0, readBuffer, 0, bufferSize); - - renderContextData.occlusionQueryBuffer = readBuffer; - - // - - this.resolveOccludedAsync(renderContext); - } - - this.prepareTimestampBuffer(renderContext, renderContextData.encoder); - - this.device.queue.submit([renderContextData.encoder.finish()]); - - // - - if (renderContext.textures !== null) { - const textures = renderContext.textures; - - for (let i = 0; i < textures.length; i++) { - const texture = textures[i]; - - if (texture.generateMipmaps === true) { - this.textureUtils.generateMipmaps(texture); - } - } - } - } - - isOccluded(renderContext, object) { - const renderContextData = this.get(renderContext); - - return renderContextData.occluded && renderContextData.occluded.has(object); - } - - async resolveOccludedAsync(renderContext) { - const renderContextData = this.get(renderContext); - - // handle occlusion query results - - const { currentOcclusionQueryBuffer, currentOcclusionQueryObjects } = renderContextData; - - if (currentOcclusionQueryBuffer && currentOcclusionQueryObjects) { - const occluded = new WeakSet(); - - renderContextData.currentOcclusionQueryObjects = null; - renderContextData.currentOcclusionQueryBuffer = null; - - await currentOcclusionQueryBuffer.mapAsync(GPUMapMode.READ); - - const buffer = currentOcclusionQueryBuffer.getMappedRange(); - const results = new BigUint64Array(buffer); - - for (let i = 0; i < currentOcclusionQueryObjects.length; i++) { - if (results[i] !== BigInt(0)) { - occluded.add(currentOcclusionQueryObjects[i]); - } - } - - currentOcclusionQueryBuffer.destroy(); - - renderContextData.occluded = occluded; - } - } - - updateViewport(renderContext) { - const { currentPass } = this.get(renderContext); - const { x, y, width, height, minDepth, maxDepth } = renderContext.viewportValue; - - currentPass.setViewport(x, renderContext.height - height - y, width, height, minDepth, maxDepth); - } - - clear(color, depth, stencil, renderTargetData = null) { - const device = this.device; - const renderer = this.renderer; - - let colorAttachments = []; - - let depthStencilAttachment; - let clearValue; - - let supportsDepth; - let supportsStencil; - - if (color) { - const clearColor = this.getClearColor(); - - if (this.renderer.alpha === true) { - // premultiply alpha - - const a = clearColor.a; - - clearValue = { r: clearColor.r * a, g: clearColor.g * a, b: clearColor.b * a, a: a }; - } else { - clearValue = { r: clearColor.r, g: clearColor.g, b: clearColor.b, a: clearColor.a }; - } - } - - if (renderTargetData === null) { - supportsDepth = renderer.depth; - supportsStencil = renderer.stencil; - - const descriptor = this._getDefaultRenderPassDescriptor(); - - if (color) { - colorAttachments = descriptor.colorAttachments; - - const colorAttachment = colorAttachments[0]; - - colorAttachment.clearValue = clearValue; - colorAttachment.loadOp = GPULoadOp.Clear; - colorAttachment.storeOp = GPUStoreOp.Store; - } - - if (supportsDepth || supportsStencil) { - depthStencilAttachment = descriptor.depthStencilAttachment; - } - } else { - supportsDepth = renderTargetData.depth; - supportsStencil = renderTargetData.stencil; - - if (color) { - for (const texture of renderTargetData.textures) { - const textureData = this.get(texture); - const textureView = textureData.texture.createView(); - - let view, resolveTarget; - - if (textureData.msaaTexture !== undefined) { - view = textureData.msaaTexture.createView(); - resolveTarget = textureView; - } else { - view = textureView; - resolveTarget = undefined; - } - - colorAttachments.push({ - view, - resolveTarget, - clearValue, - loadOp: GPULoadOp.Clear, - storeOp: GPUStoreOp.Store, - }); - } - } - - if (supportsDepth || supportsStencil) { - const depthTextureData = this.get(renderTargetData.depthTexture); - - depthStencilAttachment = { - view: depthTextureData.texture.createView(), - }; - } - } - - // - - if (supportsDepth) { - if (depth) { - depthStencilAttachment.depthLoadOp = GPULoadOp.Clear; - depthStencilAttachment.depthClearValue = renderer.getClearDepth(); - depthStencilAttachment.depthStoreOp = GPUStoreOp.Store; - } else { - depthStencilAttachment.depthLoadOp = GPULoadOp.Load; - depthStencilAttachment.depthStoreOp = GPUStoreOp.Store; - } - } - - // - - if (supportsStencil) { - if (stencil) { - depthStencilAttachment.stencilLoadOp = GPULoadOp.Clear; - depthStencilAttachment.stencilClearValue = renderer.getClearStencil(); - depthStencilAttachment.stencilStoreOp = GPUStoreOp.Store; - } else { - depthStencilAttachment.stencilLoadOp = GPULoadOp.Load; - depthStencilAttachment.stencilStoreOp = GPUStoreOp.Store; - } - } - - // - - const encoder = device.createCommandEncoder({}); - const currentPass = encoder.beginRenderPass({ - colorAttachments, - depthStencilAttachment, - }); - - currentPass.end(); - - device.queue.submit([encoder.finish()]); - } - - // compute - - beginCompute(computeGroup) { - const groupGPU = this.get(computeGroup); - - const descriptor = {}; - - this.initTimestampQuery(computeGroup, descriptor); - - groupGPU.cmdEncoderGPU = this.device.createCommandEncoder(); - - groupGPU.passEncoderGPU = groupGPU.cmdEncoderGPU.beginComputePass(descriptor); - } - - compute(computeGroup, computeNode, bindings, pipeline) { - const { passEncoderGPU } = this.get(computeGroup); - - // pipeline - - const pipelineGPU = this.get(pipeline).pipeline; - passEncoderGPU.setPipeline(pipelineGPU); - - // bind groups - - for (let i = 0, l = bindings.length; i < l; i++) { - const bindGroup = bindings[i]; - const bindingsData = this.get(bindGroup); - - passEncoderGPU.setBindGroup(i, bindingsData.group); - } - - const maxComputeWorkgroupsPerDimension = this.device.limits.maxComputeWorkgroupsPerDimension; - - const computeNodeData = this.get(computeNode); - - if (computeNodeData.dispatchSize === undefined) computeNodeData.dispatchSize = { x: 0, y: 1, z: 1 }; - - const { dispatchSize } = computeNodeData; - - if (computeNode.dispatchCount > maxComputeWorkgroupsPerDimension) { - dispatchSize.x = Math.min(computeNode.dispatchCount, maxComputeWorkgroupsPerDimension); - dispatchSize.y = Math.ceil(computeNode.dispatchCount / maxComputeWorkgroupsPerDimension); - } else { - dispatchSize.x = computeNode.dispatchCount; - } - - passEncoderGPU.dispatchWorkgroups(dispatchSize.x, dispatchSize.y, dispatchSize.z); - } - - finishCompute(computeGroup) { - const groupData = this.get(computeGroup); - - groupData.passEncoderGPU.end(); - - this.prepareTimestampBuffer(computeGroup, groupData.cmdEncoderGPU); - - this.device.queue.submit([groupData.cmdEncoderGPU.finish()]); - } - - // render object - - draw(renderObject, info) { - const { object, geometry, context, pipeline } = renderObject; - - const bindings = renderObject.getBindings(); - const contextData = this.get(context); - const pipelineGPU = this.get(pipeline).pipeline; - const currentSets = contextData.currentSets; - - const renderObjectData = this.get(renderObject); - - const { bundleEncoder, renderBundle, lastPipelineGPU } = renderObjectData; - - const renderContextData = this.get(context); - - if (renderContextData.registerBundlesPhase === true && bundleEncoder !== undefined && lastPipelineGPU === pipelineGPU) { - renderContextData.renderBundles.push(renderBundle); - return; - } - - const passEncoderGPU = this.renderer._currentRenderBundle ? this.createBundleEncoder(context, renderObject) : contextData.currentPass; - - // pipeline - - if (currentSets.pipeline !== pipelineGPU) { - passEncoderGPU.setPipeline(pipelineGPU); - - currentSets.pipeline = pipelineGPU; - } - - // bind groups - - for (let i = 0, l = bindings.length; i < l; i++) { - const bindGroup = bindings[i]; - const bindingsData = this.get(bindGroup); - - passEncoderGPU.setBindGroup(bindGroup.index, bindingsData.group); - } - - // attributes - - const index = renderObject.getIndex(); - - const hasIndex = index !== null; - - // index - - if (hasIndex === true) { - if (currentSets.index !== index) { - const buffer = this.get(index).buffer; - const indexFormat = index.array instanceof Uint16Array ? GPUIndexFormat.Uint16 : GPUIndexFormat.Uint32; - - passEncoderGPU.setIndexBuffer(buffer, indexFormat); - - currentSets.index = index; - } - } - - // vertex buffers - - const vertexBuffers = renderObject.getVertexBuffers(); - - for (let i = 0, l = vertexBuffers.length; i < l; i++) { - const vertexBuffer = vertexBuffers[i]; - - if (currentSets.attributes[i] !== vertexBuffer) { - const buffer = this.get(vertexBuffer).buffer; - passEncoderGPU.setVertexBuffer(i, buffer); - - currentSets.attributes[i] = vertexBuffer; - } - } - - // occlusion queries - handle multiple consecutive draw calls for an object - - if (contextData.occlusionQuerySet !== undefined) { - const lastObject = contextData.lastOcclusionObject; - - if (lastObject !== object) { - if (lastObject !== null && lastObject.occlusionTest === true) { - passEncoderGPU.endOcclusionQuery(); - contextData.occlusionQueryIndex++; - } - - if (object.occlusionTest === true) { - passEncoderGPU.beginOcclusionQuery(contextData.occlusionQueryIndex); - contextData.occlusionQueryObjects[contextData.occlusionQueryIndex] = object; - } - - contextData.lastOcclusionObject = object; - } - } - - // draw - - const drawRange = renderObject.drawRange; - const firstVertex = drawRange.start; - - const instanceCount = this.getInstanceCount(renderObject); - if (instanceCount === 0) return; - - if (object.isBatchedMesh === true) { - const starts = object._multiDrawStarts; - const counts = object._multiDrawCounts; - const drawCount = object._multiDrawCount; - const drawInstances = object._multiDrawInstances; - - const bytesPerElement = hasIndex ? index.array.BYTES_PER_ELEMENT : 1; - - for (let i = 0; i < drawCount; i++) { - const count = drawInstances ? drawInstances[i] : 1; - const firstInstance = count > 1 ? 0 : i; - - passEncoderGPU.drawIndexed(counts[i], count, starts[i] / bytesPerElement, 0, firstInstance); - } - } else if (hasIndex === true) { - const indexCount = drawRange.count !== Infinity ? drawRange.count : index.count; - - passEncoderGPU.drawIndexed(indexCount, instanceCount, firstVertex, 0, 0); - - info.update(object, indexCount, instanceCount); - } else { - const positionAttribute = geometry.attributes.position; - const vertexCount = drawRange.count !== Infinity ? drawRange.count : positionAttribute.count; - - passEncoderGPU.draw(vertexCount, instanceCount, firstVertex, 0); - - info.update(object, vertexCount, instanceCount); - } - - if (this.renderer._currentRenderBundle) { - const renderBundle = passEncoderGPU.finish(); - renderObjectData.lastPipelineGPU = pipelineGPU; - renderObjectData.renderBundle = renderBundle; - renderObjectData.bundleEncoder = passEncoderGPU; - } - } - - // cache key - - needsRenderUpdate(renderObject) { - const data = this.get(renderObject); - - const { object, material } = renderObject; - - const utils = this.utils; - - const sampleCount = utils.getSampleCountRenderContext(renderObject.context); - const colorSpace = utils.getCurrentColorSpace(renderObject.context); - const colorFormat = utils.getCurrentColorFormat(renderObject.context); - const depthStencilFormat = utils.getCurrentDepthStencilFormat(renderObject.context); - const primitiveTopology = utils.getPrimitiveTopology(object, material); - - let needsUpdate = false; - - if ( - data.material !== material || - data.materialVersion !== material.version || - data.transparent !== material.transparent || - data.blending !== material.blending || - data.premultipliedAlpha !== material.premultipliedAlpha || - data.blendSrc !== material.blendSrc || - data.blendDst !== material.blendDst || - data.blendEquation !== material.blendEquation || - data.blendSrcAlpha !== material.blendSrcAlpha || - data.blendDstAlpha !== material.blendDstAlpha || - data.blendEquationAlpha !== material.blendEquationAlpha || - data.colorWrite !== material.colorWrite || - data.depthWrite !== material.depthWrite || - data.depthTest !== material.depthTest || - data.depthFunc !== material.depthFunc || - data.stencilWrite !== material.stencilWrite || - data.stencilFunc !== material.stencilFunc || - data.stencilFail !== material.stencilFail || - data.stencilZFail !== material.stencilZFail || - data.stencilZPass !== material.stencilZPass || - data.stencilFuncMask !== material.stencilFuncMask || - data.stencilWriteMask !== material.stencilWriteMask || - data.side !== material.side || - data.alphaToCoverage !== material.alphaToCoverage || - data.sampleCount !== sampleCount || - data.colorSpace !== colorSpace || - data.colorFormat !== colorFormat || - data.depthStencilFormat !== depthStencilFormat || - data.primitiveTopology !== primitiveTopology || - data.clippingContextVersion !== renderObject.clippingContextVersion - ) { - data.material = material; - data.materialVersion = material.version; - data.transparent = material.transparent; - data.blending = material.blending; - data.premultipliedAlpha = material.premultipliedAlpha; - data.blendSrc = material.blendSrc; - data.blendDst = material.blendDst; - data.blendEquation = material.blendEquation; - data.blendSrcAlpha = material.blendSrcAlpha; - data.blendDstAlpha = material.blendDstAlpha; - data.blendEquationAlpha = material.blendEquationAlpha; - data.colorWrite = material.colorWrite; - data.depthWrite = material.depthWrite; - data.depthTest = material.depthTest; - data.depthFunc = material.depthFunc; - data.stencilWrite = material.stencilWrite; - data.stencilFunc = material.stencilFunc; - data.stencilFail = material.stencilFail; - data.stencilZFail = material.stencilZFail; - data.stencilZPass = material.stencilZPass; - data.stencilFuncMask = material.stencilFuncMask; - data.stencilWriteMask = material.stencilWriteMask; - data.side = material.side; - data.alphaToCoverage = material.alphaToCoverage; - data.sampleCount = sampleCount; - data.colorSpace = colorSpace; - data.colorFormat = colorFormat; - data.depthStencilFormat = depthStencilFormat; - data.primitiveTopology = primitiveTopology; - data.clippingContextVersion = renderObject.clippingContextVersion; - - needsUpdate = true; - } - - return needsUpdate; - } - - getRenderCacheKey(renderObject) { - const { object, material } = renderObject; - - const utils = this.utils; - const renderContext = renderObject.context; - - return [ - material.transparent, - material.blending, - material.premultipliedAlpha, - material.blendSrc, - material.blendDst, - material.blendEquation, - material.blendSrcAlpha, - material.blendDstAlpha, - material.blendEquationAlpha, - material.colorWrite, - material.depthWrite, - material.depthTest, - material.depthFunc, - material.stencilWrite, - material.stencilFunc, - material.stencilFail, - material.stencilZFail, - material.stencilZPass, - material.stencilFuncMask, - material.stencilWriteMask, - material.side, - utils.getSampleCountRenderContext(renderContext), - utils.getCurrentColorSpace(renderContext), - utils.getCurrentColorFormat(renderContext), - utils.getCurrentDepthStencilFormat(renderContext), - utils.getPrimitiveTopology(object, material), - renderObject.clippingContextVersion, - ].join(); - } - - // textures - - createSampler(texture) { - this.textureUtils.createSampler(texture); - } - - destroySampler(texture) { - this.textureUtils.destroySampler(texture); - } - - createDefaultTexture(texture) { - this.textureUtils.createDefaultTexture(texture); - } - - createTexture(texture, options) { - this.textureUtils.createTexture(texture, options); - } - - updateTexture(texture, options) { - this.textureUtils.updateTexture(texture, options); - } - - generateMipmaps(texture) { - this.textureUtils.generateMipmaps(texture); - } - - destroyTexture(texture) { - this.textureUtils.destroyTexture(texture); - } - - copyTextureToBuffer(texture, x, y, width, height) { - return this.textureUtils.copyTextureToBuffer(texture, x, y, width, height); - } - - initTimestampQuery(renderContext, descriptor) { - if (!this.hasFeature(GPUFeatureName.TimestampQuery) || !this.trackTimestamp) return; - - const renderContextData = this.get(renderContext); - - if (!renderContextData.timeStampQuerySet) { - // Create a GPUQuerySet which holds 2 timestamp query results: one for the - // beginning and one for the end of compute pass execution. - const timeStampQuerySet = this.device.createQuerySet({ type: 'timestamp', count: 2 }); - - const timestampWrites = { - querySet: timeStampQuerySet, - beginningOfPassWriteIndex: 0, // Write timestamp in index 0 when pass begins. - endOfPassWriteIndex: 1, // Write timestamp in index 1 when pass ends. - }; - - Object.assign(descriptor, { - timestampWrites, - }); - - renderContextData.timeStampQuerySet = timeStampQuerySet; - } - } - - // timestamp utils - - prepareTimestampBuffer(renderContext, encoder) { - if (!this.hasFeature(GPUFeatureName.TimestampQuery) || !this.trackTimestamp) return; - - const renderContextData = this.get(renderContext); - - const size = 2 * BigInt64Array.BYTES_PER_ELEMENT; - - if (renderContextData.currentTimestampQueryBuffers === undefined) { - renderContextData.currentTimestampQueryBuffers = { - resolveBuffer: this.device.createBuffer({ - label: 'timestamp resolve buffer', - size: size, - usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC, - }), - resultBuffer: this.device.createBuffer({ - label: 'timestamp result buffer', - size: size, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ, - }), - isMappingPending: false, - }; - } - - const { resolveBuffer, resultBuffer, isMappingPending } = renderContextData.currentTimestampQueryBuffers; - - if (isMappingPending === true) return; - - encoder.resolveQuerySet(renderContextData.timeStampQuerySet, 0, 2, resolveBuffer, 0); - encoder.copyBufferToBuffer(resolveBuffer, 0, resultBuffer, 0, size); - } - - async resolveTimestampAsync(renderContext, type = 'render') { - if (!this.hasFeature(GPUFeatureName.TimestampQuery) || !this.trackTimestamp) return; - - const renderContextData = this.get(renderContext); - - if (renderContextData.currentTimestampQueryBuffers === undefined) return; - - const { resultBuffer, isMappingPending } = renderContextData.currentTimestampQueryBuffers; - - if (isMappingPending === true) return; - - renderContextData.currentTimestampQueryBuffers.isMappingPending = true; - - resultBuffer.mapAsync(GPUMapMode.READ).then(() => { - const times = new BigUint64Array(resultBuffer.getMappedRange()); - const duration = Number(times[1] - times[0]) / 1000000; - - this.renderer.info.updateTimestamp(type, duration); - - resultBuffer.unmap(); - - renderContextData.currentTimestampQueryBuffers.isMappingPending = false; - }); - } - - // node builder - - createNodeBuilder(object, renderer) { - return new WGSLNodeBuilder(object, renderer); - } - - // program - - createProgram(program) { - const programGPU = this.get(program); - - programGPU.module = { - module: this.device.createShaderModule({ code: program.code, label: program.stage }), - entryPoint: 'main', - }; - } - - destroyProgram(program) { - this.delete(program); - } - - // pipelines - - createRenderPipeline(renderObject, promises) { - this.pipelineUtils.createRenderPipeline(renderObject, promises); - } - - createComputePipeline(computePipeline, bindings) { - this.pipelineUtils.createComputePipeline(computePipeline, bindings); - } - - createBundleEncoder(renderContext, renderObject) { - return this.pipelineUtils.createBundleEncoder(renderContext, renderObject); - } - - // bindings - - createBindings(bindGroup) { - this.bindingUtils.createBindings(bindGroup); - } - - updateBindings(bindGroup) { - this.bindingUtils.createBindings(bindGroup); - } - - updateBinding(binding) { - this.bindingUtils.updateBinding(binding); - } - - // attributes - - createIndexAttribute(attribute) { - this.attributeUtils.createAttribute(attribute, GPUBufferUsage.INDEX | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST); - } - - createAttribute(attribute) { - this.attributeUtils.createAttribute(attribute, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST); - } - - createStorageAttribute(attribute) { - this.attributeUtils.createAttribute(attribute, GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST); - } - - updateAttribute(attribute) { - this.attributeUtils.updateAttribute(attribute); - } - - destroyAttribute(attribute) { - this.attributeUtils.destroyAttribute(attribute); - } - - // canvas - - updateSize() { - this.colorBuffer = this.textureUtils.getColorBuffer(); - this.defaultRenderPassdescriptor = null; - } - - // utils public - - getMaxAnisotropy() { - return 16; - } - - hasFeature(name) { - return this.device.features.has(name); - } - - copyTextureToTexture(srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0) { - let dstX = 0; - let dstY = 0; - - let srcX = 0; - let srcY = 0; - - let srcWidth = srcTexture.image.width; - let srcHeight = srcTexture.image.height; - - if (srcRegion !== null) { - srcX = srcRegion.x; - srcY = srcRegion.y; - srcWidth = srcRegion.width; - srcHeight = srcRegion.height; - } - - if (dstPosition !== null) { - dstX = dstPosition.x; - dstY = dstPosition.y; - } - - const encoder = this.device.createCommandEncoder({ label: 'copyTextureToTexture_' + srcTexture.id + '_' + dstTexture.id }); - - const sourceGPU = this.get(srcTexture).texture; - const destinationGPU = this.get(dstTexture).texture; - - encoder.copyTextureToTexture( - { - texture: sourceGPU, - mipLevel: level, - origin: { x: srcX, y: srcY, z: 0 }, - }, - { - texture: destinationGPU, - mipLevel: level, - origin: { x: dstX, y: dstY, z: 0 }, - }, - [srcWidth, srcHeight] - ); - - this.device.queue.submit([encoder.finish()]); - } - - copyFramebufferToTexture(texture, renderContext) { - const renderContextData = this.get(renderContext); - - const { encoder, descriptor } = renderContextData; - - let sourceGPU = null; - - if (renderContext.renderTarget) { - if (texture.isDepthTexture) { - sourceGPU = this.get(renderContext.depthTexture).texture; - } else { - sourceGPU = this.get(renderContext.textures[0]).texture; - } - } else { - if (texture.isDepthTexture) { - sourceGPU = this.textureUtils.getDepthBuffer(renderContext.depth, renderContext.stencil); - } else { - sourceGPU = this.context.getCurrentTexture(); - } - } - - const destinationGPU = this.get(texture).texture; - - if (sourceGPU.format !== destinationGPU.format) { - console.error('WebGPUBackend: copyFramebufferToTexture: Source and destination formats do not match.', sourceGPU.format, destinationGPU.format); - - return; - } - - renderContextData.currentPass.end(); - - encoder.copyTextureToTexture( - { - texture: sourceGPU, - origin: { x: 0, y: 0, z: 0 }, - }, - { - texture: destinationGPU, - }, - [texture.image.width, texture.image.height] - ); - - if (texture.generateMipmaps) this.textureUtils.generateMipmaps(texture); - - for (let i = 0; i < descriptor.colorAttachments.length; i++) { - descriptor.colorAttachments[i].loadOp = GPULoadOp.Load; - } - - if (renderContext.depth) descriptor.depthStencilAttachment.depthLoadOp = GPULoadOp.Load; - if (renderContext.stencil) descriptor.depthStencilAttachment.stencilLoadOp = GPULoadOp.Load; - - renderContextData.currentPass = encoder.beginRenderPass(descriptor); - renderContextData.currentSets = { attributes: {} }; - } -} - -/* -const debugHandler = { - - get: function ( target, name ) { - - // Add |update - if ( /^(create|destroy)/.test( name ) ) console.log( 'WebGPUBackend.' + name ); - - return target[ name ]; - - } - -}; -*/ -class WebGPURenderer extends Renderer { - constructor(parameters = {}) { - let BackendClass; - - if (parameters.forceWebGL) { - BackendClass = WebGLBackend; - } else { - BackendClass = WebGPUBackend; - - parameters.getFallback = () => { - console.warn('THREE.WebGPURenderer: WebGPU is not available, running under WebGL2 backend.'); - - return new WebGLBackend(parameters); - }; - } - - const backend = new BackendClass(parameters); - - //super( new Proxy( backend, debugHandler ) ); - super(backend, parameters); - - this.isWebGPURenderer = true; - } -} - -const _material = /*@__PURE__*/ new NodeMaterial(); -const _quadMesh = /*@__PURE__*/ new QuadMesh(_material); - -class PostProcessing { - constructor(renderer, outputNode = vec4(0, 0, 1, 1)) { - this.renderer = renderer; - this.outputNode = outputNode; - - this.outputColorTransform = true; - - this.needsUpdate = true; - - _material.name = 'PostProcessing'; - } - - render() { - this.update(); - - const renderer = this.renderer; - - const toneMapping = renderer.toneMapping; - const outputColorSpace = renderer.outputColorSpace; - - renderer.toneMapping = NoToneMapping; - renderer.outputColorSpace = LinearSRGBColorSpace; - - // - - _quadMesh.render(renderer); - - // - - renderer.toneMapping = toneMapping; - renderer.outputColorSpace = outputColorSpace; - } - - update() { - if (this.needsUpdate === true) { - const renderer = this.renderer; - - const toneMapping = renderer.toneMapping; - const outputColorSpace = renderer.outputColorSpace; - - _quadMesh.material.fragmentNode = this.outputColorTransform === true ? renderOutput(this.outputNode, toneMapping, outputColorSpace) : this.outputNode.context({ toneMapping, outputColorSpace }); - _quadMesh.material.needsUpdate = true; - - this.needsUpdate = false; - } - } - - async renderAsync() { - this.update(); - - const renderer = this.renderer; - - const toneMapping = renderer.toneMapping; - const outputColorSpace = renderer.outputColorSpace; - - renderer.toneMapping = NoToneMapping; - renderer.outputColorSpace = LinearSRGBColorSpace; - - // - - await _quadMesh.renderAsync(renderer); - - // - - renderer.toneMapping = toneMapping; - renderer.outputColorSpace = outputColorSpace; - } -} - -class StorageTexture extends Texture { - constructor(width = 1, height = 1) { - super(); - - this.image = { width, height }; - - this.magFilter = LinearFilter; - this.minFilter = LinearFilter; - - this.isStorageTexture = true; - } -} - -class StorageBufferAttribute extends BufferAttribute { - constructor(array, itemSize, typeClass = Float32Array) { - if (ArrayBuffer.isView(array) === false) array = new typeClass(array * itemSize); - - super(array, itemSize); - - this.isStorageBufferAttribute = true; - } -} - -class StorageInstancedBufferAttribute extends InstancedBufferAttribute { - constructor(array, itemSize, typeClass = Float32Array) { - if (ArrayBuffer.isView(array) === false) array = new typeClass(array * itemSize); - - super(array, itemSize); - - this.isStorageInstancedBufferAttribute = true; - } -} - -if (typeof __THREE_DEVTOOLS__ !== 'undefined') { - __THREE_DEVTOOLS__.dispatchEvent( - new CustomEvent('register', { - detail: { - revision: REVISION, - }, - }) - ); -} - -if (typeof window !== 'undefined') { - if (window.__THREE__) { - console.warn('WARNING: Multiple instances of Three.js being imported.'); - } else { - window.__THREE__ = REVISION; - } -} - -export { - ACESFilmicToneMapping, - AONode, - AddEquation, - AddOperation, - AdditiveAnimationBlendMode, - AdditiveBlending, - AfterImageNode, - AgXToneMapping, - AlphaFormat, - AlwaysCompare, - AlwaysDepth, - AlwaysStencilFunc, - AmbientLight, - AmbientLightNode, - AnaglyphPassNode, - AnalyticLightNode, - AnamorphicNode, - AnimationAction, - AnimationClip, - AnimationLoader, - AnimationMixer, - AnimationObjectGroup, - AnimationUtils, - ArcCurve, - ArrayCamera, - ArrayElementNode, - ArrowHelper, - AssignNode, - AttachedBindMode, - AttributeNode, - Audio, - AudioAnalyser, - AudioContext, - AudioListener, - AudioLoader, - AxesHelper, - BRDF_GGX, - BRDF_Lambert, - BackSide, - BasicDepthPacking, - BasicEnvironmentNode, - BasicShadowMap$1 as BasicShadowMap, - BatchNode, - BatchedMesh, - BloomNode, - Bone, - BooleanKeyframeTrack, - Box2, - Box3, - Box3Helper, - BoxGeometry, - BoxHelper, - Break, - BufferAttribute, - BufferAttributeNode, - BufferGeometry, - BufferGeometryLoader, - BufferNode, - BumpMapNode, - BypassNode, - ByteType, - Cache, - CacheNode, - Camera, - CameraHelper, - CanvasTexture, - CapsuleGeometry, - CatmullRomCurve3, - CheckerNode, - CineonToneMapping, - CircleGeometry, - ClampToEdgeWrapping, - Clock, - CodeNode, - Color, - ColorKeyframeTrack, - ColorManagement, - ColorSpaceNode, - CompressedArrayTexture, - CompressedCubeTexture, - CompressedTexture, - CompressedTextureLoader, - ComputeNode, - CondNode, - ConeGeometry, - ConstNode, - ConstantAlphaFactor, - ConstantColorFactor, - ContextNode, - Continue, - Controls, - ConvertNode, - CubeCamera, - CubeReflectionMapping, - CubeRefractionMapping, - CubeTexture, - CubeTextureLoader, - CubeTextureNode, - CubeUVReflectionMapping, - CubicBezierCurve, - CubicBezierCurve3, - CubicInterpolant, - CullFaceBack, - CullFaceFront, - CullFaceFrontBack, - CullFaceNone, - Curve, - CurvePath, - CustomBlending, - CustomToneMapping, - CylinderGeometry, - Cylindrical, - DFGApprox, - D_GGX, - Data3DTexture, - DataArrayTexture, - DataTexture, - DataTextureLoader, - DataUtils, - DecrementStencilOp, - DecrementWrapStencilOp, - DefaultLoadingManager, - DenoiseNode, - DepthFormat, - DepthOfFieldNode, - DepthStencilFormat, - DepthTexture, - DetachedBindMode, - DirectionalLight, - DirectionalLightHelper, - DirectionalLightNode, - Discard, - DiscreteInterpolant, - DisplayP3ColorSpace, - DodecahedronGeometry, - DotScreenNode, - DoubleSide, - DstAlphaFactor, - DstColorFactor, - DynamicCopyUsage, - DynamicDrawUsage, - DynamicReadUsage, - EPSILON, - EdgesGeometry, - EllipseCurve, - EnvironmentNode, - EqualCompare, - EqualDepth, - EqualStencilFunc, - EquirectUVNode, - EquirectangularReflectionMapping, - EquirectangularRefractionMapping, - Euler, - EventDispatcher, - ExpressionNode, - ExtrudeGeometry, - FXAANode, - F_Schlick, - FileLoader, - FilmNode, - Float16BufferAttribute, - Float32BufferAttribute, - FloatType, - Fn, - Fog, - FogExp2, - FogExp2Node, - FogNode, - FogRangeNode, - FramebufferTexture, - FrontFacingNode, - FrontSide, - Frustum, - FunctionCallNode, - FunctionNode, - FunctionOverloadingNode, - GLBufferAttribute, - GLSL1, - GLSL3, - GLSLNodeParser, - GTAONode, - GaussianBlurNode, - GreaterCompare, - GreaterDepth, - GreaterEqualCompare, - GreaterEqualDepth, - GreaterEqualStencilFunc, - GreaterStencilFunc, - GridHelper, - Group, - HalfFloatType, - HemisphereLight, - HemisphereLightHelper, - HemisphereLightNode, - IESSpotLight, - IESSpotLightNode, - INFINITY, - IcosahedronGeometry, - If, - ImageBitmapLoader, - ImageLoader, - ImageUtils, - IncrementStencilOp, - IncrementWrapStencilOp, - IndexNode, - InstanceNode, - InstancedBufferAttribute, - InstancedBufferGeometry, - InstancedInterleavedBuffer, - InstancedMesh, - InstancedPointsNodeMaterial, - Int16BufferAttribute, - Int32BufferAttribute, - Int8BufferAttribute, - IntType, - InterleavedBuffer, - InterleavedBufferAttribute, - Interpolant, - InterpolateDiscrete, - InterpolateLinear, - InterpolateSmooth, - InvertStencilOp, - IrradianceNode, - JoinNode, - KeepStencilOp, - KeyframeTrack, - LOD, - LatheGeometry, - Layers, - LessCompare, - LessDepth, - LessEqualCompare, - LessEqualDepth, - LessEqualStencilFunc, - LessStencilFunc, - Light, - LightNode, - LightProbe, - LightProbeNode, - LightingContextNode, - LightingModel, - LightingNode, - LightsNode, - Line, - Line2NodeMaterial, - Line3, - LineBasicMaterial, - LineBasicNodeMaterial, - LineCurve, - LineCurve3, - LineDashedMaterial, - LineDashedNodeMaterial, - LineLoop, - LineSegments, - LinearDisplayP3ColorSpace, - LinearFilter, - LinearInterpolant, - LinearMipMapLinearFilter, - LinearMipMapNearestFilter, - LinearMipmapLinearFilter, - LinearMipmapNearestFilter, - LinearSRGBColorSpace, - LinearToneMapping, - LinearTransfer, - Loader, - LoaderUtils, - LoadingManager, - Loop, - LoopNode, - LoopOnce, - LoopPingPong, - LoopRepeat, - LuminanceAlphaFormat, - LuminanceFormat, - Lut3DNode, - MOUSE, - MRTNode, - MatcapUVNode, - Material, - MaterialLoader, - MaterialNode, - MaterialReferenceNode, - MathNode, - MathUtils, - Matrix2, - Matrix3, - Matrix4, - MaxEquation, - MaxMipLevelNode, - Mesh, - MeshBasicMaterial, - MeshBasicNodeMaterial, - MeshDepthMaterial, - MeshDistanceMaterial, - MeshLambertMaterial, - MeshLambertNodeMaterial, - MeshMatcapMaterial, - MeshMatcapNodeMaterial, - MeshNormalMaterial, - MeshNormalNodeMaterial, - MeshPhongMaterial, - MeshPhongNodeMaterial, - MeshPhysicalMaterial, - MeshPhysicalNodeMaterial, - MeshSSSNodeMaterial, - MeshStandardMaterial, - MeshStandardNodeMaterial, - MeshToonMaterial, - MeshToonNodeMaterial, - MinEquation, - MirroredRepeatWrapping, - MixOperation, - ModelNode, - ModelViewProjectionNode, - MorphNode, - MultiplyBlending, - MultiplyOperation, - NearestFilter, - NearestMipMapLinearFilter, - NearestMipMapNearestFilter, - NearestMipmapLinearFilter, - NearestMipmapNearestFilter, - NeutralToneMapping, - NeverCompare, - NeverDepth, - NeverStencilFunc, - NoBlending, - NoColorSpace, - NoToneMapping, - Node, - NodeAttribute, - NodeBuilder, - NodeCache, - NodeCode, - NodeFrame, - NodeFunctionInput, - NodeLoader, - NodeMaterial, - NodeMaterialLoader, - NodeObjectLoader, - NodeShaderStage, - NodeType, - NodeUniform, - NodeUpdateType, - NodeUtils, - NodeVar, - NodeVarying, - NormalAnimationBlendMode, - NormalBlending, - NormalMapNode, - NotEqualCompare, - NotEqualDepth, - NotEqualStencilFunc, - NumberKeyframeTrack, - Object3D, - Object3DNode, - ObjectLoader, - ObjectSpaceNormalMap, - OctahedronGeometry, - OneFactor, - OneMinusConstantAlphaFactor, - OneMinusConstantColorFactor, - OneMinusDstAlphaFactor, - OneMinusDstColorFactor, - OneMinusSrcAlphaFactor, - OneMinusSrcColorFactor, - OperatorNode, - OrthographicCamera, - OscNode, - OutputStructNode, - P3Primaries, - PCFShadowMap$1 as PCFShadowMap, - PCFSoftShadowMap$1 as PCFSoftShadowMap, - PI, - PI2, - PMREMGenerator, - PMREMNode, - ParallaxBarrierPassNode, - ParameterNode, - PassNode, - Path, - PerspectiveCamera, - PhongLightingModel, - PhysicalLightingModel, - PixelationPassNode, - Plane, - PlaneGeometry, - PlaneHelper, - PointLight, - PointLightHelper, - PointLightNode, - PointUVNode, - Points, - PointsMaterial, - PointsNodeMaterial, - PolarGridHelper, - PolyhedronGeometry, - PositionalAudio, - PostProcessing, - PosterizeNode, - PropertyBinding, - PropertyMixer, - PropertyNode, - QuadMesh, - QuadraticBezierCurve, - QuadraticBezierCurve3, - Quaternion, - QuaternionKeyframeTrack, - QuaternionLinearInterpolant, - RED_GREEN_RGTC2_Format, - RED_RGTC1_Format, - REVISION, - RGBADepthPacking, - RGBAFormat, - RGBAIntegerFormat, - RGBA_ASTC_10x10_Format, - RGBA_ASTC_10x5_Format, - RGBA_ASTC_10x6_Format, - RGBA_ASTC_10x8_Format, - RGBA_ASTC_12x10_Format, - RGBA_ASTC_12x12_Format, - RGBA_ASTC_4x4_Format, - RGBA_ASTC_5x4_Format, - RGBA_ASTC_5x5_Format, - RGBA_ASTC_6x5_Format, - RGBA_ASTC_6x6_Format, - RGBA_ASTC_8x5_Format, - RGBA_ASTC_8x6_Format, - RGBA_ASTC_8x8_Format, - RGBA_BPTC_Format, - RGBA_ETC2_EAC_Format, - RGBA_PVRTC_2BPPV1_Format, - RGBA_PVRTC_4BPPV1_Format, - RGBA_S3TC_DXT1_Format, - RGBA_S3TC_DXT3_Format, - RGBA_S3TC_DXT5_Format, - RGBDepthPacking, - RGBFormat, - RGBIntegerFormat, - RGBShiftNode, - RGB_BPTC_SIGNED_Format, - RGB_BPTC_UNSIGNED_Format, - RGB_ETC1_Format, - RGB_ETC2_Format, - RGB_PVRTC_2BPPV1_Format, - RGB_PVRTC_4BPPV1_Format, - RGB_S3TC_DXT1_Format, - RGDepthPacking, - RGFormat, - RGIntegerFormat, - RTTNode, - RangeNode, - RawShaderMaterial, - Ray, - Raycaster, - Rec709Primaries, - RectAreaLight, - RectAreaLightNode, - RedFormat, - RedIntegerFormat, - ReferenceNode, - ReflectorNode, - ReinhardToneMapping, - RemapNode, - RenderOutputNode, - RenderTarget, - RendererReferenceNode, - RepeatWrapping, - ReplaceStencilOp, - Return, - ReverseSubtractEquation, - RingGeometry, - RotateNode, - SIGNED_RED_GREEN_RGTC2_Format, - SIGNED_RED_RGTC1_Format, - SRGBColorSpace, - SRGBTransfer, - SSAAPassNode, - Scene, - SceneNode, - Schlick_to_F0, - ScriptableNode, - ScriptableValueNode, - SetNode, - ShaderMaterial, - ShaderNode, - ShadowMaterial, - ShadowNodeMaterial, - Shape, - ShapeGeometry, - ShapePath, - ShapeUtils, - ShortType, - Skeleton, - SkeletonHelper, - SkinnedMesh, - SkinningNode, - SobelOperatorNode, - Source, - Sphere, - SphereGeometry, - Spherical, - SphericalHarmonics3, - SplineCurve, - SplitNode, - SpotLight, - SpotLightHelper, - SpotLightNode, - Sprite, - SpriteMaterial, - SpriteNodeMaterial, - SpriteSheetUVNode, - SrcAlphaFactor, - SrcAlphaSaturateFactor, - SrcColorFactor, - StackNode, - StaticCopyUsage, - StaticDrawUsage, - StaticReadUsage, - StereoCamera, - StereoPassNode, - StorageArrayElementNode, - StorageBufferAttribute, - StorageBufferNode, - StorageInstancedBufferAttribute, - StorageTexture, - StorageTextureNode, - StreamCopyUsage, - StreamDrawUsage, - StreamReadUsage, - StringKeyframeTrack, - SubtractEquation, - SubtractiveBlending, - TBNViewMatrix, - TOUCH, - TangentSpaceNormalMap, - TempNode, - TetrahedronGeometry, - Texture, - Texture3DNode, - TextureBicubicNode, - TextureLoader, - TextureNode, - TextureSizeNode, - TimerNode, - ToneMappingNode, - TorusGeometry, - TorusKnotGeometry, - TransitionNode, - Triangle, - TriangleFanDrawMode, - TriangleStripDrawMode, - TrianglesDrawMode, - TriplanarTexturesNode, - TubeGeometry, - UVMapping, - Uint16BufferAttribute, - Uint32BufferAttribute, - Uint8BufferAttribute, - Uint8ClampedBufferAttribute, - Uniform$1 as Uniform, - UniformArrayNode, - UniformGroupNode, - UniformNode, - UniformsGroup$1 as UniformsGroup, - UnsignedByteType, - UnsignedInt248Type, - UnsignedInt5999Type, - UnsignedIntType, - UnsignedShort4444Type, - UnsignedShort5551Type, - UnsignedShortType, - UserDataNode, - VSMShadowMap, - V_GGX_SmithCorrelated, - VarNode, - VaryingNode, - Vector2, - Vector3, - Vector4, - VectorKeyframeTrack, - VertexColorNode, - VideoTexture, - ViewportDepthNode, - ViewportDepthTextureNode, - ViewportNode, - ViewportSharedTextureNode, - ViewportTextureNode, - VolumeNodeMaterial, - WebGL3DRenderTarget, - WebGLArrayRenderTarget, - WebGLCoordinateSystem, - WebGLCubeRenderTarget, - WebGLMultipleRenderTargets, - WebGLRenderTarget, - WebGPUCoordinateSystem, - WebGPURenderer, - WireframeGeometry, - WrapAroundEnding, - ZeroCurvatureEnding, - ZeroFactor, - ZeroSlopeEnding, - ZeroStencilOp, - abs, - acos, - add, - addLightNode, - addNodeClass, - addNodeElement, - addNodeMaterial, - afterImage, - all, - alphaT, - anaglyphPass, - anamorphic, - and, - anisotropy, - anisotropyB, - anisotropyT, - any, - ao, - append, - arrayBuffer, - asin, - assign, - atan, - atan2, - attribute, - backgroundBlurriness, - backgroundIntensity, - batch, - billboarding, - bitAnd, - bitNot, - bitOr, - bitXor, - bitangentGeometry, - bitangentLocal, - bitangentView, - bitangentWorld, - bitcast, - bleach, - bloom, - blur, - bmat2, - bmat3, - bmat4, - bool, - buffer, - bufferAttribute, - bumpMap, - burn, - bvec2, - bvec3, - bvec4, - bypass, - cache, - call, - cameraFar, - cameraLogDepth, - cameraNear, - cameraNormalMatrix, - cameraPosition, - cameraProjectionMatrix, - cameraProjectionMatrixInverse, - cameraViewMatrix, - cameraWorldMatrix, - cbrt, - ceil, - checker, - clamp, - clearcoat, - clearcoatRoughness, - code, - color, - colorSpaceToLinear, - colorToDirection, - compute, - cond, - context, - convert, - cos, - createCanvasElement, - createNodeFromType, - createNodeMaterialFromType, - cross, - cubeTexture, - dFdx, - dFdy, - dashSize, - defaultBuildStages, - defaultShaderStages, - defined, - degrees, - denoise, - densityFog, - depth, - depthPass, - difference, - diffuseColor, - directionToColor, - distance, - div, - dodge, - dof, - dot, - dotScreen, - drawIndex, - dynamicBufferAttribute, - element, - emissive, - equal, - equals, - equirectUV, - exp, - exp2, - expression, - faceDirection, - faceForward, - film, - float, - floor, - fog, - fract, - frameGroup, - frameId, - frontFacing, - fwidth, - fxaa, - gain, - gapSize, - gaussianBlur, - getConstNodeType, - getCurrentStack, - getDirection, - getDistanceAttenuation, - getGeometryRoughness, - getRoughness, - global, - glsl, - glslFn, - greaterThan, - greaterThanEqual, - hash, - hue, - imat2, - imat3, - imat4, - instance, - instanceIndex, - instancedBufferAttribute, - instancedDynamicBufferAttribute, - int, - inverseSqrt, - iridescence, - iridescenceIOR, - iridescenceThickness, - ivec2, - ivec3, - ivec4, - js, - label, - length, - lengthSq, - lessThan, - lessThanEqual, - lightTargetDirection, - lightingContext, - lights, - lightsNode, - linearDepth, - linearToColorSpace, - linearTosRGB, - log, - log2, - luminance, - lut3D, - mat2, - mat3, - mat4, - matcapUV, - materialAOMap, - materialAlphaTest, - materialAnisotropy, - materialAnisotropyVector, - materialClearcoat, - materialClearcoatNormal, - materialClearcoatRoughness, - materialColor, - materialDispersion, - materialEmissive, - materialIridescence, - materialIridescenceIOR, - materialIridescenceThickness, - materialLightMap, - materialLineDashOffset, - materialLineDashSize, - materialLineGapSize, - materialLineScale, - materialLineWidth, - materialMetalness, - materialNormal, - materialOpacity, - materialPointWidth, - materialReference, - materialReflectivity, - materialRefractionRatio, - materialRotation, - materialRoughness, - materialSheen, - materialSheenRoughness, - materialShininess, - materialSpecular, - materialSpecularStrength, - max$1 as max, - maxMipLevel, - metalness, - min$1 as min, - mix, - mod, - modInt, - modelDirection, - modelNormalMatrix, - modelPosition, - modelScale, - modelViewMatrix, - modelViewPosition, - modelViewProjection, - modelWorldMatrix, - modelWorldMatrixInverse, - morphReference, - motionBlur, - mrt, - mul, - mx_aastep, - mx_cell_noise_float, - mx_contrast, - mx_fractal_noise_float, - mx_fractal_noise_vec2, - mx_fractal_noise_vec3, - mx_fractal_noise_vec4, - mx_hsvtorgb, - mx_noise_float, - mx_noise_vec3, - mx_noise_vec4, - mx_ramplr, - mx_ramptb, - mx_rgbtohsv, - mx_safepower, - mx_splitlr, - mx_splittb, - mx_srgb_texture_to_lin_rec709, - mx_transform_uv, - mx_worley_noise_float, - mx_worley_noise_vec2, - mx_worley_noise_vec3, - negate, - nodeArray, - nodeImmutable, - nodeObject, - nodeObjects, - nodeProxy, - normalFlat, - normalGeometry, - normalLocal, - normalMap, - normalView, - normalWorld, - normalize, - not, - objectDirection, - objectGroup, - objectNormalMatrix, - objectPosition, - objectScale, - objectViewMatrix, - objectViewPosition, - objectWorldMatrix, - oneMinus, - or, - orthographicDepthToViewZ, - oscSawtooth, - oscSine, - oscSquare, - oscTriangle, - output, - outputStruct, - overlay, - overloadingFn, - parabola, - parallaxBarrierPass, - parallaxDirection, - parallaxUV, - parameter, - pass, - passTexture, - pcurve, - perspectiveDepthToViewZ, - pixelationPass, - pmremTexture, - pointUV, - pointWidth, - positionGeometry, - positionLocal, - positionPrevious, - positionView, - positionViewDirection, - positionWorld, - positionWorldDirection, - posterize, - pow, - pow2, - pow3, - pow4, - property, - radians, - rand, - range, - rangeFog, - reciprocal, - reference, - referenceBuffer, - reflect, - reflectVector, - reflectView, - reflector, - refract, - refractVector, - refractView, - remainder, - remap, - remapClamp, - renderGroup, - renderOutput, - rendererReference, - rgbShift, - rotate, - rotateUV, - roughness, - round, - rtt, - sRGBToLinear, - sampler, - saturate, - saturation, - screen, - scriptable, - scriptableValue, - select, - sepia, - setCurrentStack, - shaderStages, - sheen, - sheenRoughness, - shiftLeft, - shiftRight, - shininess, - sign, - sin, - sinc, - skinning, - skinningReference, - smoothstep, - sobel, - specularColor, - spherizeUV, - split, - spritesheetUV, - sqrt, - ssaaPass, - stack, - step, - stereoPass, - storage, - storageObject, - storageTexture, - string, - sub, - tan, - tangentGeometry, - tangentLocal, - tangentView, - tangentWorld, - temp, - texture, - texture3D, - textureBicubic, - textureCubeUV, - textureLoad, - textureSize, - textureStore, - threshold, - timerDelta, - timerGlobal, - timerLocal, - toneMapping, - transformDirection, - transformedBentNormalView, - transformedBitangentView, - transformedBitangentWorld, - transformedClearcoatNormalView, - transformedNormalView, - transformedNormalWorld, - transformedTangentView, - transformedTangentWorld, - transition, - transpose, - triNoise3D, - triplanarTexture, - triplanarTextures, - trunc, - tslFn, - uint, - umat2, - umat3, - umat4, - uniform, - uniformArray, - uniformGroup, - userData, - uv, - uvec2, - uvec3, - uvec4, - varying, - varyingProperty, - vec2, - vec3, - vec4, - vectorComponents, - velocity, - vertexColor, - vertexIndex, - vibrance, - viewZToOrthographicDepth, - viewZToPerspectiveDepth, - viewport, - viewportCoordinate, - viewportDepthTexture, - viewportLinearDepth, - viewportMipTexture, - viewportResolution, - viewportSafeUV, - viewportSharedTexture, - viewportTexture, - viewportTopLeft, - viewportUV, - wgsl, - wgslFn, - xor, -}; diff --git a/packages/canvas-three/three/src/Three.Legacy.d.ts b/packages/canvas-three/three/src/Three.Legacy.d.ts deleted file mode 100644 index bef262235..000000000 --- a/packages/canvas-three/three/src/Three.Legacy.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { RenderTargetOptions } from './core/RenderTarget.js'; -import { WebGLRenderTarget } from './renderers/WebGLRenderTarget.js'; -import { Texture } from './textures/Texture.js'; - -/** - * @deprecated THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the "count" parameter to enable MRT. - */ -export class WebGLMultipleRenderTargets extends WebGLRenderTarget { - readonly isWebGLMultipleRenderTargets: true; - - /** - * @deprecated THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the "count" parameter to enable MRT. - * @param width The width of the render target. - * @param height The height of the render target. - * @param count The number of render targets. - * @param options object that holds texture parameters for an auto-generated target texture and depthBuffer/stencilBuffer booleans. - * For an explanation of the texture parameters see {@link Texture}. - */ - constructor(width?: number, height?: number, count?: number, options?: RenderTargetOptions); -} diff --git a/packages/canvas-three/three/src/Three.WebGPU.d.ts b/packages/canvas-three/three/src/Three.WebGPU.d.ts deleted file mode 100644 index b277493ac..000000000 --- a/packages/canvas-three/three/src/Three.WebGPU.d.ts +++ /dev/null @@ -1,180 +0,0 @@ -export * from './animation/AnimationAction.js'; -export * from './animation/AnimationClip.js'; -export * from './animation/AnimationMixer.js'; -export * from './animation/AnimationObjectGroup.js'; -export { AnimationUtils } from './animation/AnimationUtils.js'; -export * from './animation/KeyframeTrack.js'; -export * from './animation/PropertyBinding.js'; -export * from './animation/PropertyMixer.js'; -export * from './animation/tracks/BooleanKeyframeTrack.js'; -export * from './animation/tracks/ColorKeyframeTrack.js'; -export * from './animation/tracks/NumberKeyframeTrack.js'; -export * from './animation/tracks/QuaternionKeyframeTrack.js'; -export * from './animation/tracks/StringKeyframeTrack.js'; -export * from './animation/tracks/VectorKeyframeTrack.js'; -export * from './audio/Audio.js'; -export * from './audio/AudioAnalyser.js'; -export * from './audio/AudioContext.js'; -export * from './audio/AudioListener.js'; -export * from './audio/PositionalAudio.js'; -export * from './cameras/ArrayCamera.js'; -export * from './cameras/Camera.js'; -export * from './cameras/CubeCamera.js'; -export * from './cameras/OrthographicCamera.js'; -export * from './cameras/PerspectiveCamera.js'; -export * from './cameras/StereoCamera.js'; -export * from './constants.js'; -export * from './core/BufferAttribute.js'; -export * from './core/BufferGeometry.js'; -export * from './core/Clock.js'; -export * from './core/EventDispatcher.js'; -export * from './core/GLBufferAttribute.js'; -export * from './core/InstancedBufferAttribute.js'; -export * from './core/InstancedBufferGeometry.js'; -export * from './core/InstancedInterleavedBuffer.js'; -export * from './core/InterleavedBuffer.js'; -export * from './core/InterleavedBufferAttribute.js'; -export * from './core/Layers.js'; -export * from './core/Object3D.js'; -export * from './core/Raycaster.js'; -export * from './core/RenderTarget.js'; -export * from './core/Uniform.js'; -export * from './core/UniformsGroup.js'; -export * from './extras/core/Curve.js'; -export * from './extras/core/CurvePath.js'; -export * from './extras/core/Path.js'; -export * from './extras/core/Shape.js'; -export * from './extras/core/ShapePath.js'; -export * from './extras/curves/Curves.js'; -export { DataUtils } from './extras/DataUtils.js'; -export * from './extras/ImageUtils.js'; -// export * from "./extras/PMREMGenerator.js"; -export * from './extras/ShapeUtils.js'; -export { TextureUtils } from './extras/TextureUtils.js'; -export * from './geometries/Geometries.js'; -export * from './helpers/ArrowHelper.js'; -export * from './helpers/AxesHelper.js'; -export * from './helpers/Box3Helper.js'; -export * from './helpers/BoxHelper.js'; -export * from './helpers/CameraHelper.js'; -export * from './helpers/DirectionalLightHelper.js'; -export * from './helpers/GridHelper.js'; -export * from './helpers/HemisphereLightHelper.js'; -export * from './helpers/PlaneHelper.js'; -export * from './helpers/PointLightHelper.js'; -export * from './helpers/PolarGridHelper.js'; -export * from './helpers/SkeletonHelper.js'; -export * from './helpers/SpotLightHelper.js'; -export * from './lights/AmbientLight.js'; -export * from './lights/DirectionalLight.js'; -export type { DirectionalLightShadow } from './lights/DirectionalLightShadow.js'; -export * from './lights/HemisphereLight.js'; -export * from './lights/Light.js'; -export * from './lights/LightProbe.js'; -export type { LightShadow, LightShadowJSON } from './lights/LightShadow.js'; -export * from './lights/PointLight.js'; -export type { PointLightShadow } from './lights/PointLightShadow.js'; -export * from './lights/RectAreaLight.js'; -export * from './lights/SpotLight.js'; -export type { SpotLightShadow } from './lights/SpotLightShadow.js'; -export * from './loaders/AnimationLoader.js'; -export * from './loaders/AudioLoader.js'; -export * from './loaders/BufferGeometryLoader.js'; -export * from './loaders/Cache.js'; -export * from './loaders/CompressedTextureLoader.js'; -export * from './loaders/CubeTextureLoader.js'; -export * from './loaders/DataTextureLoader.js'; -export * from './loaders/FileLoader.js'; -export * from './loaders/ImageBitmapLoader.js'; -export * from './loaders/ImageLoader.js'; -export * from './loaders/Loader.js'; -export * from './loaders/LoaderUtils.js'; -export * from './loaders/LoadingManager.js'; -export * from './loaders/MaterialLoader.js'; -export * from './loaders/ObjectLoader.js'; -export * from './loaders/TextureLoader.js'; -export * from './materials/Materials.js'; -export * from './math/Box2.js'; -export * from './math/Box3.js'; -export * from './math/Color.js'; -export { ColorManagement, DefinedColorSpace, WorkingColorSpace } from './math/ColorManagement.js'; -export * from './math/Cylindrical.js'; -export * from './math/Euler.js'; -export * from './math/Frustum.js'; -export * from './math/Interpolant.js'; -export * from './math/interpolants/CubicInterpolant.js'; -export * from './math/interpolants/DiscreteInterpolant.js'; -export * from './math/interpolants/LinearInterpolant.js'; -export * from './math/interpolants/QuaternionLinearInterpolant.js'; -export * from './math/Line3.js'; -export { MathUtils } from './math/MathUtils.js'; -export * from './math/Matrix2.js'; -export * from './math/Matrix3.js'; -export * from './math/Matrix4.js'; -export * from './math/Plane.js'; -export * from './math/Quaternion.js'; -export * from './math/Ray.js'; -export * from './math/Sphere.js'; -export * from './math/Spherical.js'; -export * from './math/SphericalHarmonics3.js'; -export * from './math/Triangle.js'; -export * from './math/Vector2.js'; -export * from './math/Vector3.js'; -export * from './math/Vector4.js'; -export * from './objects/BatchedMesh.js'; -export * from './objects/Bone.js'; -export * from './objects/Group.js'; -export * from './objects/InstancedMesh.js'; -export * from './objects/Line.js'; -export * from './objects/LineLoop.js'; -export * from './objects/LineSegments.js'; -export * from './objects/LOD.js'; -export * from './objects/Mesh.js'; -export * from './objects/Points.js'; -export * from './objects/Skeleton.js'; -export * from './objects/SkinnedMesh.js'; -export * from './objects/Sprite.js'; -// export * from "./renderers/shaders/ShaderChunk.js"; -// export * from "./renderers/shaders/ShaderLib.js"; -// export * from "./renderers/shaders/UniformsLib.js"; -// export { UniformsUtils } from './renderers/shaders/UniformsUtils.js'; -export type { WebGLProgramParameters, WebGLProgramParametersWithUniforms } from './renderers/webgl/WebGLPrograms.js'; -export type { WebGLShadowMap } from './renderers/webgl/WebGLShadowMap.js'; -// export * from "./renderers/webgl/WebGLUtils.js"; -export * from './renderers/WebGL3DRenderTarget.js'; -export * from './renderers/WebGLArrayRenderTarget.js'; -export * from './renderers/WebGLCubeRenderTarget.js'; -// export * from "./renderers/WebGLRenderer.js"; -export * from './renderers/WebGLRenderTarget.js'; -export type { WebXRController, WebXRSpaceEventMap, XRControllerEventType, XRGripSpace, XRHandInputState, XRHandJoints, XRHandSpace, XRJointSpace, XRTargetRaySpace } from './renderers/webxr/WebXRController.js'; -export type { WebXRDepthSensing } from './renderers/webxr/WebXRDepthSensing.js'; -export type { WebXRArrayCamera, WebXRCamera, WebXRManager, WebXRManagerEventMap } from './renderers/webxr/WebXRManager.js'; -export * from './scenes/Fog.js'; -export * from './scenes/FogExp2.js'; -export * from './scenes/Scene.js'; -export * from './textures/CanvasTexture.js'; -export * from './textures/CompressedArrayTexture.js'; -export * from './textures/CompressedCubeTexture.js'; -export * from './textures/CompressedTexture.js'; -export * from './textures/CubeTexture.js'; -export * from './textures/Data3DTexture.js'; -export * from './textures/DataArrayTexture.js'; -export * from './textures/DataTexture.js'; -export * from './textures/DepthTexture.js'; -export * from './textures/FramebufferTexture.js'; -export * from './textures/Source.js'; -export * from './textures/Texture.js'; -export * from './textures/VideoTexture.js'; -export * from './Three.Legacy.js'; -export { createCanvasElement } from './utils.js'; - -export { default as IESSpotLight } from './lights/webgpu/IESSpotLight.js'; -export * from './nodes/Nodes.js'; -export { default as PMREMGenerator } from './renderers/common/extras/PMREMGenerator.js'; -export { default as PostProcessing } from './renderers/common/PostProcessing.js'; -export { default as QuadMesh } from './renderers/common/QuadMesh.js'; -export type { default as Renderer } from './renderers/common/Renderer.js'; -export { default as StorageBufferAttribute } from './renderers/common/StorageBufferAttribute.js'; -export { default as StorageInstancedBufferAttribute } from './renderers/common/StorageInstancedBufferAttribute.js'; -export { default as StorageTexture } from './renderers/common/StorageTexture.js'; -export { default as WebGPURenderer } from './renderers/webgpu/WebGPURenderer.js'; diff --git a/packages/canvas-three/three/src/Three.d.ts b/packages/canvas-three/three/src/Three.d.ts deleted file mode 100644 index c8d5dd6ce..000000000 --- a/packages/canvas-three/three/src/Three.d.ts +++ /dev/null @@ -1,189 +0,0 @@ -export * from './animation/AnimationAction.js'; -export * from './animation/AnimationClip.js'; -export * from './animation/AnimationMixer.js'; -export * from './animation/AnimationObjectGroup.js'; -export { AnimationUtils } from './animation/AnimationUtils.js'; -export * from './animation/KeyframeTrack.js'; -export * from './animation/PropertyBinding.js'; -export * from './animation/PropertyMixer.js'; -export * from './animation/tracks/BooleanKeyframeTrack.js'; -export * from './animation/tracks/ColorKeyframeTrack.js'; -export * from './animation/tracks/NumberKeyframeTrack.js'; -export * from './animation/tracks/QuaternionKeyframeTrack.js'; -export * from './animation/tracks/StringKeyframeTrack.js'; -export * from './animation/tracks/VectorKeyframeTrack.js'; -export * from './audio/Audio.js'; -export * from './audio/AudioAnalyser.js'; -export * from './audio/AudioContext.js'; -export * from './audio/AudioListener.js'; -export * from './audio/PositionalAudio.js'; -export * from './cameras/ArrayCamera.js'; -export * from './cameras/Camera.js'; -export * from './cameras/CubeCamera.js'; -export * from './cameras/OrthographicCamera.js'; -export * from './cameras/PerspectiveCamera.js'; -export * from './cameras/StereoCamera.js'; -export * from './constants.js'; -export * from './core/BufferAttribute.js'; -export * from './core/BufferGeometry.js'; -export * from './core/Clock.js'; -export * from './core/EventDispatcher.js'; -export * from './core/GLBufferAttribute.js'; -export * from './core/InstancedBufferAttribute.js'; -export * from './core/InstancedBufferGeometry.js'; -export * from './core/InstancedInterleavedBuffer.js'; -export * from './core/InterleavedBuffer.js'; -export * from './core/InterleavedBufferAttribute.js'; -export * from './core/Layers.js'; -export * from './core/Object3D.js'; -export * from './core/Raycaster.js'; -export * from './core/RenderTarget.js'; -export * from './core/Uniform.js'; -export * from './core/UniformsGroup.js'; -export * from './extras/core/Curve.js'; -export * from './extras/core/CurvePath.js'; -export * from './extras/core/Path.js'; -export * from './extras/core/Shape.js'; -export * from './extras/core/ShapePath.js'; -export * from './extras/curves/Curves.js'; -export { DataUtils } from './extras/DataUtils.js'; -export * from './extras/ImageUtils.js'; -export * from './extras/PMREMGenerator.js'; -export * from './extras/ShapeUtils.js'; -export { TextureUtils } from './extras/TextureUtils.js'; -export * from './geometries/Geometries.js'; -export * from './helpers/ArrowHelper.js'; -export * from './helpers/AxesHelper.js'; -export * from './helpers/Box3Helper.js'; -export * from './helpers/BoxHelper.js'; -export * from './helpers/CameraHelper.js'; -export * from './helpers/DirectionalLightHelper.js'; -export * from './helpers/GridHelper.js'; -export * from './helpers/HemisphereLightHelper.js'; -export * from './helpers/PlaneHelper.js'; -export * from './helpers/PointLightHelper.js'; -export * from './helpers/PolarGridHelper.js'; -export * from './helpers/SkeletonHelper.js'; -export * from './helpers/SpotLightHelper.js'; -export * from './lights/AmbientLight.js'; -export * from './lights/DirectionalLight.js'; -export type { DirectionalLightShadow } from './lights/DirectionalLightShadow.js'; -export * from './lights/HemisphereLight.js'; -export * from './lights/Light.js'; -export * from './lights/LightProbe.js'; -export type { LightShadow, LightShadowJSON } from './lights/LightShadow.js'; -export * from './lights/PointLight.js'; -export type { PointLightShadow } from './lights/PointLightShadow.js'; -export * from './lights/RectAreaLight.js'; -export * from './lights/SpotLight.js'; -export type { SpotLightShadow } from './lights/SpotLightShadow.js'; -export * from './loaders/AnimationLoader.js'; -export * from './loaders/AudioLoader.js'; -export * from './loaders/BufferGeometryLoader.js'; -export * from './loaders/Cache.js'; -export * from './loaders/CompressedTextureLoader.js'; -export * from './loaders/CubeTextureLoader.js'; -export * from './loaders/DataTextureLoader.js'; -export * from './loaders/FileLoader.js'; -export * from './loaders/ImageBitmapLoader.js'; -export * from './loaders/ImageLoader.js'; -export * from './loaders/Loader.js'; -export * from './loaders/LoaderUtils.js'; -export * from './loaders/LoadingManager.js'; -export * from './loaders/MaterialLoader.js'; -export * from './loaders/ObjectLoader.js'; -export * from './loaders/TextureLoader.js'; -export * from './materials/Materials.js'; -export * from './math/Box2.js'; -export * from './math/Box3.js'; -export * from './math/Color.js'; -export { ColorManagement, DefinedColorSpace, WorkingColorSpace } from './math/ColorManagement.js'; -export * from './math/Cylindrical.js'; -export * from './math/Euler.js'; -export * from './math/Frustum.js'; -export * from './math/Interpolant.js'; -export * from './math/interpolants/CubicInterpolant.js'; -export * from './math/interpolants/DiscreteInterpolant.js'; -export * from './math/interpolants/LinearInterpolant.js'; -export * from './math/interpolants/QuaternionLinearInterpolant.js'; -export * from './math/Line3.js'; -export { MathUtils } from './math/MathUtils.js'; -export * from './math/Matrix2.js'; -export * from './math/Matrix3.js'; -export * from './math/Matrix4.js'; -export * from './math/Plane.js'; -export * from './math/Quaternion.js'; -export * from './math/Ray.js'; -export * from './math/Sphere.js'; -export * from './math/Spherical.js'; -export * from './math/SphericalHarmonics3.js'; -export * from './math/Triangle.js'; -export * from './math/Vector2.js'; -export * from './math/Vector3.js'; -export * from './math/Vector4.js'; -export * from './objects/BatchedMesh.js'; -export * from './objects/Bone.js'; -export * from './objects/Group.js'; -export * from './objects/InstancedMesh.js'; -export * from './objects/Line.js'; -export * from './objects/LineLoop.js'; -export * from './objects/LineSegments.js'; -export * from './objects/LOD.js'; -export * from './objects/Mesh.js'; -export * from './objects/Points.js'; -export * from './objects/Skeleton.js'; -export * from './objects/SkinnedMesh.js'; -export * from './objects/Sprite.js'; -export * from './renderers/shaders/ShaderChunk.js'; -export * from './renderers/shaders/ShaderLib.js'; -export * from './renderers/shaders/UniformsLib.js'; -export { UniformsUtils } from './renderers/shaders/UniformsUtils.js'; -export type { WebGLAttributes } from './renderers/webgl/WebGLAttributes.js'; -export type { WebGLBindingStates } from './renderers/webgl/WebGLBindingStates.js'; -export type { WebGLBufferRenderer } from './renderers/webgl/WebGLBufferRenderer.js'; -export type { WebGLCapabilities, WebGLCapabilitiesParameters } from './renderers/webgl/WebGLCapabilities.js'; -export type { WebGLClipping } from './renderers/webgl/WebGLClipping.js'; -export type { WebGLCubeMaps } from './renderers/webgl/WebGLCubeMaps.js'; -export type { WebGLCubeUVMaps } from './renderers/webgl/WebGLCubeUVMaps.js'; -export type { WebGLExtensions } from './renderers/webgl/WebGLExtensions.js'; -export type { WebGLGeometries } from './renderers/webgl/WebGLGeometries.js'; -export type { WebGLIndexedBufferRenderer } from './renderers/webgl/WebGLIndexedBufferRenderer.js'; -export type { WebGLInfo } from './renderers/webgl/WebGLInfo.js'; -export type { WebGLLights, WebGLLightsState } from './renderers/webgl/WebGLLights.js'; -export type { WebGLObjects } from './renderers/webgl/WebGLObjects.js'; -export type { WebGLProgram } from './renderers/webgl/WebGLProgram.js'; -export type { WebGLProgramParameters, WebGLProgramParametersWithUniforms, WebGLPrograms } from './renderers/webgl/WebGLPrograms.js'; -export type { WebGLProperties } from './renderers/webgl/WebGLProperties.js'; -export type { RenderItem, WebGLRenderList, WebGLRenderLists } from './renderers/webgl/WebGLRenderLists.js'; -export type { WebGLShader } from './renderers/webgl/WebGLShader.js'; -export type { WebGLShadowMap } from './renderers/webgl/WebGLShadowMap.js'; -export type { WebGLColorBuffer, WebGLDepthBuffer, WebGLState, WebGLStencilBuffer } from './renderers/webgl/WebGLState.js'; -export type { WebGLTextures } from './renderers/webgl/WebGLTextures.js'; -export type { WebGLUniforms } from './renderers/webgl/WebGLUniforms.js'; -export * from './renderers/webgl/WebGLUtils.js'; -export * from './renderers/WebGL3DRenderTarget.js'; -export * from './renderers/WebGLArrayRenderTarget.js'; -export * from './renderers/WebGLCubeRenderTarget.js'; -export * from './renderers/WebGLRenderer.js'; -export * from './renderers/WebGLRenderTarget.js'; -export type { WebXRController, WebXRSpaceEventMap, XRControllerEventType, XRGripSpace, XRHandInputState, XRHandJoints, XRHandSpace, XRJointSpace, XRTargetRaySpace } from './renderers/webxr/WebXRController.js'; -export type { WebXRDepthSensing } from './renderers/webxr/WebXRDepthSensing.js'; -export type { WebXRArrayCamera, WebXRCamera, WebXRManager, WebXRManagerEventMap } from './renderers/webxr/WebXRManager.js'; -export * from './scenes/Fog.js'; -export * from './scenes/FogExp2.js'; -export * from './scenes/Scene.js'; -export * from './textures/CanvasTexture.js'; -export * from './textures/CompressedArrayTexture.js'; -export * from './textures/CompressedCubeTexture.js'; -export * from './textures/CompressedTexture.js'; -export * from './textures/CubeTexture.js'; -export * from './textures/Data3DTexture.js'; -export * from './textures/DataArrayTexture.js'; -export * from './textures/DataTexture.js'; -export * from './textures/DepthTexture.js'; -export * from './textures/FramebufferTexture.js'; -export * from './textures/Source.js'; -export * from './textures/Texture.js'; -export * from './textures/VideoTexture.js'; -export * from './Three.Legacy.js'; -export { createCanvasElement } from './utils.js'; diff --git a/packages/canvas-three/three/src/animation/AnimationAction.d.ts b/packages/canvas-three/three/src/animation/AnimationAction.d.ts deleted file mode 100644 index 4ab4d5be2..000000000 --- a/packages/canvas-three/three/src/animation/AnimationAction.d.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { AnimationActionLoopStyles, AnimationBlendMode } from '../constants.js'; -import { Object3D } from '../core/Object3D.js'; -import { AnimationClip } from './AnimationClip.js'; -import { AnimationMixer } from './AnimationMixer.js'; -// Animation //////////////////////////////////////////////////////////////////////////////////////// - -export class AnimationAction { - constructor(mixer: AnimationMixer, clip: AnimationClip, localRoot?: Object3D, blendMode?: AnimationBlendMode); - - blendMode: AnimationBlendMode; - - /** - * @default THREE.LoopRepeat - */ - loop: AnimationActionLoopStyles; - - /** - * @default 0 - */ - time: number; - - /** - * @default 1 - */ - timeScale: number; - - /** - * @default 1 - */ - weight: number; - - /** - * @default Infinity - */ - repetitions: number; - - /** - * @default false - */ - paused: boolean; - - /** - * @default true - */ - enabled: boolean; - - /** - * @default false - */ - clampWhenFinished: boolean; - - /** - * @default true - */ - zeroSlopeAtStart: boolean; - - /** - * @default true - */ - zeroSlopeAtEnd: boolean; - - play(): AnimationAction; - stop(): AnimationAction; - reset(): AnimationAction; - isRunning(): boolean; - isScheduled(): boolean; - startAt(time: number): AnimationAction; - setLoop(mode: AnimationActionLoopStyles, repetitions: number): AnimationAction; - setEffectiveWeight(weight: number): AnimationAction; - getEffectiveWeight(): number; - fadeIn(duration: number): AnimationAction; - fadeOut(duration: number): AnimationAction; - crossFadeFrom(fadeOutAction: AnimationAction, duration: number, warp: boolean): AnimationAction; - crossFadeTo(fadeInAction: AnimationAction, duration: number, warp: boolean): AnimationAction; - stopFading(): AnimationAction; - setEffectiveTimeScale(timeScale: number): AnimationAction; - getEffectiveTimeScale(): number; - setDuration(duration: number): AnimationAction; - syncWith(action: AnimationAction): AnimationAction; - halt(duration: number): AnimationAction; - warp(statTimeScale: number, endTimeScale: number, duration: number): AnimationAction; - stopWarping(): AnimationAction; - getMixer(): AnimationMixer; - getClip(): AnimationClip; - getRoot(): Object3D; -} diff --git a/packages/canvas-three/three/src/animation/AnimationClip.d.ts b/packages/canvas-three/three/src/animation/AnimationClip.d.ts deleted file mode 100644 index 3678ca66c..000000000 --- a/packages/canvas-three/three/src/animation/AnimationClip.d.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { AnimationBlendMode } from '../constants.js'; -import { Vector3 } from '../math/Vector3.js'; -import { Bone } from '../objects/Bone.js'; -import { KeyframeTrack, KeyframeTrackJSON } from './KeyframeTrack.js'; - -export interface AnimationClipJSON { - name: string; - duration: number; - tracks: KeyframeTrackJSON[]; - uuid: string; - blendMode: AnimationBlendMode; -} - -export interface MorphTarget { - name: string; - vertices: Vector3[]; -} - -export class AnimationClip { - constructor(name?: string, duration?: number, tracks?: KeyframeTrack[], blendMode?: AnimationBlendMode); - - name: string; - tracks: KeyframeTrack[]; - - /** - * @default THREE.NormalAnimationBlendMode - */ - blendMode: AnimationBlendMode; - - /** - * @default -1 - */ - duration: number; - uuid: string; - results: any[]; - - resetDuration(): AnimationClip; - trim(): AnimationClip; - validate(): boolean; - optimize(): AnimationClip; - clone(): this; - toJSON(clip: AnimationClip): any; - - static CreateFromMorphTargetSequence(name: string, morphTargetSequence: MorphTarget[], fps: number, noLoop: boolean): AnimationClip; - static findByName(clipArray: AnimationClip[], name: string): AnimationClip; - static CreateClipsFromMorphTargetSequences(morphTargets: MorphTarget[], fps: number, noLoop: boolean): AnimationClip[]; - static parse(json: AnimationClipJSON): AnimationClip; - static parseAnimation(animation: AnimationClipJSON, bones: Bone[]): AnimationClip; - static toJSON(clip: AnimationClip): AnimationClipJSON; -} diff --git a/packages/canvas-three/three/src/animation/AnimationMixer.d.ts b/packages/canvas-three/three/src/animation/AnimationMixer.d.ts deleted file mode 100644 index a04f5892c..000000000 --- a/packages/canvas-three/three/src/animation/AnimationMixer.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { AnimationBlendMode } from '../constants.js'; -import { EventDispatcher } from '../core/EventDispatcher.js'; -import { Object3D } from '../core/Object3D.js'; -import { AnimationAction } from './AnimationAction.js'; -import { AnimationClip } from './AnimationClip.js'; -import { AnimationObjectGroup } from './AnimationObjectGroup.js'; - -export interface AnimationMixerEventMap { - loop: { action: AnimationAction; loopDelta: number }; - finished: { action: AnimationAction; direction: number }; -} - -export class AnimationMixer extends EventDispatcher { - constructor(root: Object3D | AnimationObjectGroup); - - /** - * @default 0 - */ - time: number; - - /** - * @default 1.0 - */ - timeScale: number; - - clipAction(clip: AnimationClip, root?: Object3D | AnimationObjectGroup, blendMode?: AnimationBlendMode): AnimationAction; - existingAction(clip: AnimationClip, root?: Object3D | AnimationObjectGroup): AnimationAction | null; - stopAllAction(): AnimationMixer; - update(deltaTime: number): AnimationMixer; - setTime(timeInSeconds: number): AnimationMixer; - getRoot(): Object3D | AnimationObjectGroup; - uncacheClip(clip: AnimationClip): void; - uncacheRoot(root: Object3D | AnimationObjectGroup): void; - uncacheAction(clip: AnimationClip, root?: Object3D | AnimationObjectGroup): void; -} diff --git a/packages/canvas-three/three/src/animation/AnimationObjectGroup.d.ts b/packages/canvas-three/three/src/animation/AnimationObjectGroup.d.ts deleted file mode 100644 index c4ef48563..000000000 --- a/packages/canvas-three/three/src/animation/AnimationObjectGroup.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -export class AnimationObjectGroup { - constructor(...args: any[]); - - uuid: string; - stats: { - bindingsPerObject: number; - objects: { - total: number; - inUse: number; - }; - }; - readonly isAnimationObjectGroup: true; - - add(...args: any[]): void; - remove(...args: any[]): void; - uncache(...args: any[]): void; -} diff --git a/packages/canvas-three/three/src/animation/AnimationUtils.d.ts b/packages/canvas-three/three/src/animation/AnimationUtils.d.ts deleted file mode 100644 index bc605877e..000000000 --- a/packages/canvas-three/three/src/animation/AnimationUtils.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { AnimationClip } from './AnimationClip.js'; - -declare function convertArray(array: any, type: any, forceClone: boolean): any; - -declare function isTypedArray(object: any): boolean; - -declare function getKeyframeOrder(times: number[]): number[]; - -declare function sortedArray(values: any[], stride: number, order: number[]): any[]; - -declare function flattenJSON(jsonKeys: string[], times: any[], values: any[], valuePropertyName: string): void; - -/** - * @param sourceClip - * @param name - * @param startFrame - * @param endFrame - * @param [fps=30] - */ -declare function subclip(sourceClip: AnimationClip, name: string, startFrame: number, endFrame: number, fps?: number): AnimationClip; - -/** - * @param targetClip - * @param [referenceFrame=0] - * @param [referenceClip=targetClip] - * @param [fps=30] - */ -declare function makeClipAdditive(targetClip: AnimationClip, referenceFrame?: number, referenceClip?: AnimationClip, fps?: number): AnimationClip; - -declare const AnimationUtils: { - convertArray: typeof convertArray; - isTypedArray: typeof isTypedArray; - getKeyframeOrder: typeof getKeyframeOrder; - sortedArray: typeof sortedArray; - flattenJSON: typeof flattenJSON; - subclip: typeof subclip; - makeClipAdditive: typeof makeClipAdditive; -}; - -export { AnimationUtils, convertArray, flattenJSON, getKeyframeOrder, isTypedArray, makeClipAdditive, sortedArray, subclip }; diff --git a/packages/canvas-three/three/src/animation/KeyframeTrack.d.ts b/packages/canvas-three/three/src/animation/KeyframeTrack.d.ts deleted file mode 100644 index caf58d543..000000000 --- a/packages/canvas-three/three/src/animation/KeyframeTrack.d.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { InterpolationModes } from '../constants.js'; -import { Interpolant } from '../math/Interpolant.js'; -import { CubicInterpolant } from '../math/interpolants/CubicInterpolant.js'; -import { DiscreteInterpolant } from '../math/interpolants/DiscreteInterpolant.js'; -import { LinearInterpolant } from '../math/interpolants/LinearInterpolant.js'; - -export interface KeyframeTrackJSON { - name: string; - times: number[]; - values: number[]; - interpolation?: InterpolationModes; - type: string; -} - -export class KeyframeTrack { - /** - * @param name - * @param times - * @param values - * @param [interpolation=THREE.InterpolateLinear] - */ - constructor(name: string, times: ArrayLike, values: ArrayLike, interpolation?: InterpolationModes); - - name: string; - times: Float32Array; - values: Float32Array; - - ValueTypeName: string; - TimeBufferType: Float32Array; - ValueBufferType: Float32Array; - - /** - * @default THREE.InterpolateLinear - */ - DefaultInterpolation: InterpolationModes; - - InterpolantFactoryMethodDiscrete(result: any): DiscreteInterpolant; - InterpolantFactoryMethodLinear(result: any): LinearInterpolant; - InterpolantFactoryMethodSmooth(result: any): CubicInterpolant; - - setInterpolation(interpolation: InterpolationModes): KeyframeTrack; - getInterpolation(): InterpolationModes; - createInterpolant(): Interpolant; - - getValueSize(): number; - - shift(timeOffset: number): KeyframeTrack; - scale(timeScale: number): KeyframeTrack; - trim(startTime: number, endTime: number): KeyframeTrack; - validate(): boolean; - optimize(): KeyframeTrack; - clone(): this; - - static toJSON(track: KeyframeTrack): KeyframeTrackJSON; -} diff --git a/packages/canvas-three/three/src/animation/PropertyBinding.d.ts b/packages/canvas-three/three/src/animation/PropertyBinding.d.ts deleted file mode 100644 index c169a5765..000000000 --- a/packages/canvas-three/three/src/animation/PropertyBinding.d.ts +++ /dev/null @@ -1,43 +0,0 @@ -export interface ParseTrackNameResults { - nodeName: string; - objectName: string; - objectIndex: string; - propertyName: string; - propertyIndex: string; -} - -declare class Composite { - constructor(targetGroup: any, path: any, parsedPath?: any); - - getValue(array: any, offset: number): any; - setValue(array: any, offset: number): void; - bind(): void; - unbind(): void; -} - -declare class PropertyBinding { - constructor(rootNode: any, path: string, parsedPath?: any); - - path: string; - parsedPath: any; - node: any; - rootNode: any; - - getValue(targetArray: any, offset: number): any; - setValue(sourceArray: any, offset: number): void; - bind(): void; - unbind(): void; - - BindingType: { [bindingType: string]: number }; - Versioning: { [versioning: string]: number }; - - GetterByBindingType: Array<() => void>; - SetterByBindingTypeAndVersioning: Array void>>; - - static create(root: any, path: any, parsedPath?: any): PropertyBinding | Composite; - static sanitizeNodeName(name: string): string; - static parseTrackName(trackName: string): ParseTrackNameResults; - static findNode(root: any, nodeName: string): any; -} - -export { PropertyBinding }; diff --git a/packages/canvas-three/three/src/animation/PropertyMixer.d.ts b/packages/canvas-three/three/src/animation/PropertyMixer.d.ts deleted file mode 100644 index b78555c1a..000000000 --- a/packages/canvas-three/three/src/animation/PropertyMixer.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -export class PropertyMixer { - constructor(binding: any, typeName: string, valueSize: number); - - binding: any; - valueSize: number; - buffer: any; - cumulativeWeight: number; - cumulativeWeightAdditive: number; - useCount: number; - referenceCount: number; - - accumulate(accuIndex: number, weight: number): void; - accumulateAdditive(weight: number): void; - apply(accuIndex: number): void; - saveOriginalState(): void; - restoreOriginalState(): void; -} diff --git a/packages/canvas-three/three/src/animation/tracks/BooleanKeyframeTrack.d.ts b/packages/canvas-three/three/src/animation/tracks/BooleanKeyframeTrack.d.ts deleted file mode 100644 index 3b82e9863..000000000 --- a/packages/canvas-three/three/src/animation/tracks/BooleanKeyframeTrack.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { KeyframeTrack } from '../KeyframeTrack.js'; - -export class BooleanKeyframeTrack extends KeyframeTrack { - constructor(name: string, times: ArrayLike, values: ArrayLike); - - /** - * @default 'bool' - */ - ValueTypeName: string; -} diff --git a/packages/canvas-three/three/src/animation/tracks/ColorKeyframeTrack.d.ts b/packages/canvas-three/three/src/animation/tracks/ColorKeyframeTrack.d.ts deleted file mode 100644 index fed528ac8..000000000 --- a/packages/canvas-three/three/src/animation/tracks/ColorKeyframeTrack.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { InterpolationModes } from '../../constants.js'; -import { KeyframeTrack } from '../KeyframeTrack.js'; - -export class ColorKeyframeTrack extends KeyframeTrack { - constructor(name: string, times: ArrayLike, values: ArrayLike, interpolation?: InterpolationModes); - - /** - * @default 'color' - */ - ValueTypeName: string; -} diff --git a/packages/canvas-three/three/src/animation/tracks/NumberKeyframeTrack.d.ts b/packages/canvas-three/three/src/animation/tracks/NumberKeyframeTrack.d.ts deleted file mode 100644 index aba355798..000000000 --- a/packages/canvas-three/three/src/animation/tracks/NumberKeyframeTrack.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { InterpolationModes } from '../../constants.js'; -import { KeyframeTrack } from '../KeyframeTrack.js'; - -export class NumberKeyframeTrack extends KeyframeTrack { - constructor(name: string, times: ArrayLike, values: ArrayLike, interpolation?: InterpolationModes); - - /** - * @default 'number' - */ - ValueTypeName: string; -} diff --git a/packages/canvas-three/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts b/packages/canvas-three/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts deleted file mode 100644 index 377a6623f..000000000 --- a/packages/canvas-three/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { InterpolationModes } from '../../constants.js'; -import { KeyframeTrack } from '../KeyframeTrack.js'; - -export class QuaternionKeyframeTrack extends KeyframeTrack { - constructor(name: string, times: ArrayLike, values: ArrayLike, interpolation?: InterpolationModes); - - /** - * @default 'quaternion' - */ - ValueTypeName: string; -} diff --git a/packages/canvas-three/three/src/animation/tracks/StringKeyframeTrack.d.ts b/packages/canvas-three/three/src/animation/tracks/StringKeyframeTrack.d.ts deleted file mode 100644 index aa636cd12..000000000 --- a/packages/canvas-three/three/src/animation/tracks/StringKeyframeTrack.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { KeyframeTrack } from '../KeyframeTrack.js'; - -export class StringKeyframeTrack extends KeyframeTrack { - constructor(name: string, times: ArrayLike, values: ArrayLike); - - /** - * @default 'string' - */ - ValueTypeName: string; -} diff --git a/packages/canvas-three/three/src/animation/tracks/VectorKeyframeTrack.d.ts b/packages/canvas-three/three/src/animation/tracks/VectorKeyframeTrack.d.ts deleted file mode 100644 index 04164d935..000000000 --- a/packages/canvas-three/three/src/animation/tracks/VectorKeyframeTrack.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { InterpolationModes } from '../../constants.js'; -import { KeyframeTrack } from '../KeyframeTrack.js'; - -export class VectorKeyframeTrack extends KeyframeTrack { - constructor(name: string, times: ArrayLike, values: ArrayLike, interpolation?: InterpolationModes); - - /** - * @default 'vector' - */ - ValueTypeName: string; -} diff --git a/packages/canvas-three/three/src/audio/Audio.d.ts b/packages/canvas-three/three/src/audio/Audio.d.ts deleted file mode 100644 index 17201c28d..000000000 --- a/packages/canvas-three/three/src/audio/Audio.d.ts +++ /dev/null @@ -1,270 +0,0 @@ -import { Object3D } from '../core/Object3D.js'; -import { AudioContext } from './AudioContext.js'; -import { AudioListener } from './AudioListener.js'; - -// Extras / Audio ///////////////////////////////////////////////////////////////////// - -/** - * Create a non-positional ( global ) {@link Audio} object. - * This uses the {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API | Web {@link Audio} API}. - * @example - * ```typescript - * // create an AudioListener and add it to the camera - * const listener = new THREE.AudioListener(); - * camera.add(listener); - * // create a global {@link Audio} source - * const sound = new THREE.Audio(listener); - * // load a sound and set it as the {@link Audio} object's buffer - * const audioLoader = new THREE.AudioLoader(); - * audioLoader.load('sounds/ambient.ogg', function (buffer) { - * sound.setBuffer(buffer); - * sound.setLoop(true); - * sound.setVolume(0.5); - * sound.play(); - * }); - * ``` - * @see Example: {@link https://threejs.org/examples/#webaudio_sandbox | webaudio / sandbox } - * @see Example: {@link https://threejs.org/examples/#webaudio_visualizer | webaudio / visualizer } - * @see {@link https://threejs.org/docs/index.html#api/en/audio/Audio | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/audio/Audio.js | Source} - */ -export class Audio extends Object3D { - /** - * Create a new instance of {@link Audio} - * @param listener (required) {@link AudioListener | AudioListener} instance. - */ - constructor(listener: AudioListener); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `Audio` - */ - readonly type: string | 'Audio'; - - /** - * A reference to the listener object of this audio. - */ - listener: AudioListener; - - /** - * The {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioContext | AudioContext} of the {@link AudioListener | listener} given in the constructor. - */ - context: AudioContext; - - /** - * A {@link https://developer.mozilla.org/en-US/docs/Web/API/GainNode | GainNode} created using - * {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createGain | AudioContext.createGain}(). - */ - gain: GainNode; - - /** - * Whether to start playback automatically. - * @defaultValue `false` - */ - autoplay: boolean; - - buffer: AudioBuffer | null; - - /** - * Modify pitch, measured in cents. +/- 100 is a semitone. +/- 1200 is an octave. - * @defaultValue `0` - */ - detune: number; - - /** - * @default false - */ - loop: boolean; - - /** - * @default 0 - */ - loopStart: number; - - /** - * @default 0 - */ - loopEnd: number; - - /** - * An offset to the time within the {@link Audio} buffer that playback should begin. - * Same as the {@link Audio.offset | offset} parameter of {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/start | AudioBufferSourceNode.start()}. - * @defaultValue `0` - */ - offset: number; - - /** - * Overrides the duration of the audio. Same as the {@link Audio.duration | duration} parameter of - * {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/start | AudioBufferSourceNode.start()}. - * @defaultValue `undefined` _to play the whole buffer_. - */ - duration: number | undefined; - - /** - * Speed of playback. - * @defaultValue `1` - */ - playbackRate: number; - - /** - * Whether the {@link Audio} is currently playing. - * @defaultValue `false` - */ - isPlaying: boolean; - - /** - * Whether playback can be controlled using the {@link Audio.play | play}(), {@link Audio.pause | pause}() etc. methods. - * @defaultValue `true` - */ - hasPlaybackControl: boolean; - - /** - * Type of the {@link Audio} source. - * @defaultValue 'empty'. - */ - sourceType: string; - - /** - * An {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode | AudioBufferSourceNode} created using - * {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createBufferSource | AudioContext.createBufferSource()}. - */ - source: AudioScheduledSourceNode | null; - - /** - * Represents an array of {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioNode | AudioNodes}. - * Can be used to apply a variety of low-order filters to create more complex sound effects. - * In most cases, the array contains instances of {@link https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode | BiquadFilterNodes}. - * Filters are set via {@link THREE.Audio.setFilter | Audio.setFilter} or {@link THREE.Audio.setFilters | Audio.setFilters}. - * @defaultValue `[]` - */ - filters: AudioNode[]; - - /** - * Return the {@link Audio.gain | gainNode}. - */ - getOutput(): NodeType; - - /** - * Setup the {@link Audio.source | source} to the audioBuffer, and sets {@link Audio.sourceType | sourceType} to 'audioNode'. - * @remarks Also sets {@link Audio.hasPlaybackControl | hasPlaybackControl} to false. - */ - setNodeSource(audioNode: AudioScheduledSourceNode): this; - - /** - * Applies the given object of type {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement | HTMLMediaElement} as the source of this audio. - * @remarks Also sets {@link Audio.hasPlaybackControl | hasPlaybackControl} to false. - */ - setMediaElementSource(mediaElement: HTMLMediaElement): this; - - /** - * Applies the given object of type {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaStream | MediaStream} as the source of this audio. - * @remarks Also sets {@link Audio.hasPlaybackControl | hasPlaybackControl} to false. - */ - setMediaStreamSource(mediaStream: MediaStream): this; - - /** - * Setup the {@link Audio.source | source} to the audioBuffer, and sets {@link Audio.sourceType | sourceType} to 'buffer'. - * @remarks If {@link Audio.autoplay | autoplay}, also starts playback. - */ - setBuffer(audioBuffer: AudioBuffer): this; - - /** - * If {@link Audio.hasPlaybackControl | hasPlaybackControl} is true, starts playback. - */ - play(delay?: number): this; - /** - * If {@link Audio.hasPlaybackControl | hasPlaybackControl} is true, pauses playback. - */ - pause(): this; - /** - * If {@link Audio.hasPlaybackControl | hasPlaybackControl} is enabled, stops playback. - */ - stop(): this; - - /** - * Called automatically when playback finished. - */ - onEnded(): void; - - /** - * Connect to the {@link THREE.Audio.source | Audio.source} - * @remarks This is used internally on initialisation and when setting / removing filters. - */ - connect(): this; - /** - * Disconnect from the {@link THREE.Audio.source | Audio.source} - * @remarks This is used internally when setting / removing filters. - */ - disconnect(): this; - - /** - * Returns the detuning of oscillation in cents. - */ - getDetune(): number; - /** - * Defines the detuning of oscillation in cents. - * @param value Expects a `Float` - */ - setDetune(value: number): this; - - /** - * Returns the first element of the {@link Audio.filters | filters} array. - */ - getFilter(): AudioNode; - /** - * Applies a single filter node to the audio. - */ - setFilter(filter: AudioNode): this; - - /** - * Returns the {@link Audio.filters | filters} array. - */ - getFilters(): AudioNode[]; - /** - * Applies an array of filter nodes to the audio. - * @param value Arrays of filters. - */ - setFilters(value: AudioNode[]): this; - - /** - * Return the value of {@link Audio.playbackRate | playbackRate}. - */ - getPlaybackRate(): number; - /** - * If {@link Audio.hasPlaybackControl | hasPlaybackControl} is enabled, set the {@link Audio.playbackRate | playbackRate} to `value`. - * @param value Expects a `Float` - */ - setPlaybackRate(value: number): this; - - /** - * Return the value of {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/loop | source.loop} (whether playback should loop). - */ - getLoop(): boolean; - /** - * Set {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/loop | source.loop} to `value` (whether playback should loop). - * @param value - */ - setLoop(value: boolean): this; - - /** - * Set {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/loopStart | source.loopStart} to `value`. - * @param value Expects a `Float` - */ - setLoopStart(value: number): this; - /** - * Set {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/loopEnd | source.loopEnd} to `value`. - * @param value Expects a `Float` - */ - setLoopEnd(value: number): this; - - /** - * Return the current volume. - */ - getVolume(): number; - /** - * Set the volume. - * @param value Expects a `Float` - */ - setVolume(value: number): this; -} diff --git a/packages/canvas-three/three/src/audio/AudioAnalyser.d.ts b/packages/canvas-three/three/src/audio/AudioAnalyser.d.ts deleted file mode 100644 index 17723f7e1..000000000 --- a/packages/canvas-three/three/src/audio/AudioAnalyser.d.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { Audio } from './Audio.js'; - -/** - * Create a {@link AudioAnalyser} object, which uses an {@link https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode | AnalyserNode} to analyse audio data. - * This uses the {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API | Web Audio API}. - * @example - * ```typescript - * // create an AudioListener and add it to the camera - * const listener = new THREE.AudioListener(); - * camera.add(listener); - * // create an Audio source - * const sound = new THREE.Audio(listener); - * // load a sound and set it as the Audio object's buffer - * const audioLoader = new THREE.AudioLoader(); - * audioLoader.load('sounds/ambient.ogg', function (buffer) { - * sound.setBuffer(buffer); - * sound.setLoop(true); - * sound.setVolume(0.5); - * sound.play(); - * }); - * // create an AudioAnalyser, passing in the sound and desired fftSize - * const analyser = new THREE.AudioAnalyser(sound, 32); - * // get the average frequency of the sound - * const data = analyser.getAverageFrequency(); - * ``` - * @see Example: {@link https://threejs.org/examples/#webaudio_sandbox | webaudio / sandbox } - * @see Example: {@link https://threejs.org/examples/#webaudio_visualizer | webaudio / visualizer } - * @see {@link https://threejs.org/docs/index.html#api/en/audio/AudioAnalyser | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/audio/AudioAnalyser.js | Source} - */ -export class AudioAnalyser { - /** - * Create a new {@link {@link AudioAnalyser} | AudioAnalyser}. - * @param audio - * @param fftSize See {@link https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/fftSize | AnalyserNode.fftSize }. Expects a `unsigned integer`. Default `2048`. - */ - constructor(audio: Audio, fftSize?: number); - - /** - * An {@link https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode | AnalyserNode} used to analyze audio. - */ - analyser: AnalyserNode; - - /** - * A Uint8Array with size determined by {@link https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/frequencyBinCount | analyser.frequencyBinCount} used to hold analysis data. - */ - data: Uint8Array; - - /** - * Uses the Web Audio's {@link https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/getByteFrequencyData | getByteFrequencyData} method - */ - getFrequencyData(): Uint8Array; - - /** - * Get the average of the frequencies returned by the {@link AudioAnalyser.getFrequencyData | getFrequencyData} method. - */ - getAverageFrequency(): number; -} diff --git a/packages/canvas-three/three/src/audio/AudioContext.d.ts b/packages/canvas-three/three/src/audio/AudioContext.d.ts deleted file mode 100644 index bf50e448b..000000000 --- a/packages/canvas-three/three/src/audio/AudioContext.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * This contains methods for setting up an {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioContext | AudioContext}. - * Used internally by the {@link AudioListener | AudioListener} and {@link AudioLoader | AudioLoader} classes. - * This uses the {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API | Web Audio API}. - * @see {@link https://threejs.org/docs/index.html#api/en/audio/AudioContext | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/audio/AudioContext.js | Source} - */ -export namespace AudioContext { - /** - * Return the value of the variable `context` in the outer scope, if defined, otherwise set it to a new {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioContext | AudioContext}. - */ - function getContext(): AudioContext; - - /** - * Set the variable `context` in the outer scope to `value`. - * @param value - */ - function setContext(context: AudioContext): void; -} diff --git a/packages/canvas-three/three/src/audio/AudioListener.d.ts b/packages/canvas-three/three/src/audio/AudioListener.d.ts deleted file mode 100644 index ba09b6138..000000000 --- a/packages/canvas-three/three/src/audio/AudioListener.d.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { Object3D } from '../core/Object3D.js'; -import { AudioContext } from './AudioContext.js'; - -/** - * The {@link AudioListener} represents a virtual {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioListener | listener} of the all positional and non-positional audio effects in the scene. - * A three.js application usually creates a single instance of {@link AudioListener} * @remarks - * It is a mandatory construtor parameter for audios entities like {@link Audio | Audio} and {@link PositionalAudio | PositionalAudio}. - * In most cases, the listener object is a child of the camera - * So the 3D transformation of the camera represents the 3D transformation of the listener. - * @example - * ```typescript - * // create an {@link AudioListener} and add it to the camera - * const listener = new THREE.AudioListener(); - * camera.add(listener); - * // create a global audio source - * const sound = new THREE.Audio(listener); - * // load a sound and set it as the Audio object's buffer - * const audioLoader = new THREE.AudioLoader(); - * audioLoader.load('sounds/ambient.ogg', function (buffer) { - * sound.setBuffer(buffer); - * sound.setLoop(true); - * sound.setVolume(0.5); - * sound.play(); - * }); - * ``` - * @see Example: {@link https://threejs.org/examples/#webaudio_sandbox | webaudio / sandbox } - * @see Example: {@link https://threejs.org/examples/#webaudio_timing | webaudio / timing } - * @see Example: {@link https://threejs.org/examples/#webaudio_visualizer | webaudio / visualizer } - * @see {@link https://threejs.org/docs/index.html#api/en/audio/AudioListener | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/audio/AudioListener.js | Source} - */ -export class AudioListener extends Object3D { - /** - * Create a new AudioListener. - */ - constructor(); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `AudioListener` - */ - readonly type: string | 'AudioListener'; - - /** - * The {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioContext | AudioContext} of the {@link {@link AudioListener} | listener} given in the constructor. - */ - context: AudioContext; - - /** - * A {@link https://developer.mozilla.org/en-US/docs/Web/API/GainNode | GainNode} created using - * {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createGain | AudioContext.createGain()}. - */ - gain: GainNode; - - /** - * @defaultValue `null` - */ - filter: AudioNode; - - /** - * Time delta value for audio entities. Use in context of {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioParam/linearRampToValueAtTime | AudioParam.linearRampToValueAtTimeDefault()}. - * @defaultValue `0` - */ - timeDelta: number; - - /** - * Return the {@link AudioListener.gain | gainNode}. - */ - getInput(): GainNode; - /** - * Set the {@link AudioListener.filter | filter} property to `null`. - */ - removeFilter(): this; - - /** - * Returns the value of the {@link AudioListener.filter | filter} property. - */ - getFilter(): AudioNode; - /** - * Set the {@link AudioListener.filter | filter} property to `value`. - * @param value - */ - setFilter(value: AudioNode): this; - - /** - * Return the volume. - */ - getMasterVolume(): number; - - /** - * Set the volume. - * @param value - */ - setMasterVolume(value: number): this; -} diff --git a/packages/canvas-three/three/src/audio/PositionalAudio.d.ts b/packages/canvas-three/three/src/audio/PositionalAudio.d.ts deleted file mode 100644 index 93ee30234..000000000 --- a/packages/canvas-three/three/src/audio/PositionalAudio.d.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { Audio } from './Audio.js'; -import { AudioListener } from './AudioListener.js'; - -/** - * Create a positional audio object. - * This uses the {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API | Web Audio API}. - * @example - * ```typescript - * // create an AudioListener and add it to the camera - * const listener = new THREE.AudioListener(); - * camera.add(listener); - * // create the {@link PositionalAudio} object (passing in the listener) - * const sound = new THREE.PositionalAudio(listener); - * // load a sound and set it as the {@link PositionalAudio} object's buffer - * const audioLoader = new THREE.AudioLoader(); - * audioLoader.load('sounds/song.ogg', function (buffer) { - * sound.setBuffer(buffer); - * sound.setRefDistance(20); - * sound.play(); - * }); - * // create an object for the sound to play from - * const sphere = new THREE.SphereGeometry(20, 32, 16); - * const material = new THREE.MeshPhongMaterial({ - * color: 0xff2200 - * }); - * const mesh = new THREE.Mesh(sphere, material); - * scene.add(mesh); - * // finally add the sound to the mesh - * mesh.add(sound); - * ``` - * @see Example: {@link https://threejs.org/examples/#webaudio_orientation | webaudio / orientation } - * @see Example: {@link https://threejs.org/examples/#webaudio_sandbox | webaudio / sandbox } - * @see Example: {@link https://threejs.org/examples/#webaudio_timing | webaudio / timing } - * @see {@link https://threejs.org/docs/index.html#api/en/audio/PositionalAudio | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/audio/PositionalAudio.js | Source} - */ -export class PositionalAudio extends Audio { - /** - * Create a new instance of {@link PositionalAudio} - * @param listener (required) {@link AudioListener | AudioListener} instance. - */ - constructor(listener: AudioListener); - - /** - * The PositionalAudio's {@link https://developer.mozilla.org/en-US/docs/Web/API/PannerNode | PannerNode}. - */ - panner: PannerNode; - - /** - * Returns the {@link PositionalAudio.panner | panner}. - */ - getOutput(): PannerNode; - - /** - * Returns the value of {@link https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/refDistance | panner.refDistance}. - */ - getRefDistance(): number; - /** - * Sets the value of {@link https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/refDistance | panner.refDistance}. - * @param value Expects a `Float` - */ - setRefDistance(value: number): this; - - /** - * Returns the value of {@link https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/rolloffFactor | panner.rolloffFactor}. - */ - getRolloffFactor(): number; - /** - * Sets the value of {@link https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/rolloffFactor | panner.rolloffFactor}. - * @param value Expects a `Float` - */ - setRolloffFactor(value: number): this; - - /** - * Returns the value of {@link https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/distanceModel | panner.distanceModel}. - */ - getDistanceModel(): string; - /** - * Sets the value of {@link https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/distanceModel | panner.distanceModel}. - * @param value - */ - setDistanceModel(value: string): this; - - /** - * Returns the value of {@link https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/maxDistance | panner.maxDistance}. - */ - getMaxDistance(): number; - /** - * Sets the value of {@link https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/maxDistance | panner.maxDistance}. - * @param value Expects a `Float` - */ - setMaxDistance(value: number): this; - - /** - * This method can be used in order to transform an omnidirectional sound into a {@link https://developer.mozilla.org/en-US/docs/Web/API/PannerNode | directional sound}. - * @param coneInnerAngle Expects a `Float` - * @param coneOuterAngle Expects a `Float` - * @param coneOuterGain Expects a `Float` - */ - setDirectionalCone(coneInnerAngle: number, coneOuterAngle: number, coneOuterGain: number): this; -} diff --git a/packages/canvas-three/three/src/cameras/ArrayCamera.d.ts b/packages/canvas-three/three/src/cameras/ArrayCamera.d.ts deleted file mode 100644 index 2c46f3f9d..000000000 --- a/packages/canvas-three/three/src/cameras/ArrayCamera.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { PerspectiveCamera } from './PerspectiveCamera.js'; - -/** - * {@link ArrayCamera} can be used in order to efficiently render a scene with a predefined set of cameras - * @remarks - * This is an important performance aspect for rendering VR scenes. - * An instance of {@link ArrayCamera} always has an array of sub cameras - * It's mandatory to define for each sub camera the `viewport` property which determines the part of the viewport that is rendered with this camera. - * @see Example: {@link https://threejs.org/examples/#webgl_camera_array | camera / array } - * @see {@link https://threejs.org/docs/index.html#api/en/cameras/ArrayCamera | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/cameras/ArrayCamera.js | Source} - */ -export class ArrayCamera extends PerspectiveCamera { - /** - * An array of cameras. - * @param array. Default `[]`. - */ - constructor(cameras?: PerspectiveCamera[]); - - /** - * Read-only flag to check if a given object is of type {@link ArrayCamera}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isArrayCamera: true; - - /** - * An array of cameras. - * @defaultValue `[]` - */ - cameras: PerspectiveCamera[]; -} diff --git a/packages/canvas-three/three/src/cameras/Camera.d.ts b/packages/canvas-three/three/src/cameras/Camera.d.ts deleted file mode 100644 index b42662170..000000000 --- a/packages/canvas-three/three/src/cameras/Camera.d.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { CoordinateSystem } from '../constants.js'; -import { Layers } from '../core/Layers.js'; -import { Object3D } from '../core/Object3D.js'; -import { Matrix4 } from '../math/Matrix4.js'; -import { Vector3 } from '../math/Vector3.js'; -import { Vector4 } from '../math/Vector4.js'; - -/** - * Abstract base class for cameras - * @remarks - * This class should always be inherited when you build a new camera. - * @see {@link https://threejs.org/docs/index.html#api/en/cameras/Camera | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/cameras/Camera.js | Source} - */ -export class Camera extends Object3D { - /** - * @remarks - * Note that this class is not intended to be called directly; you probably want a - * {@link THREE.PerspectiveCamera | PerspectiveCamera} or - * {@link THREE.OrthographicCamera | OrthographicCamera} instead. - */ - constructor(); - - /** - * Read-only flag to check if a given object is of type {@link Camera}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isCamera: true; - - /** - * @override - * @defaultValue `Camera` - */ - override readonly type: string | 'Camera'; - - /** - * @override - * The {@link THREE.Layers | layers} that the {@link Camera} is a member of. - * @remarks Objects must share at least one layer with the {@link Camera} to be n when the camera's viewpoint is rendered. - * @defaultValue `new THREE.Layers()` - */ - override layers: Layers; - - /** - * This is the inverse of matrixWorld. - * @remarks MatrixWorld contains the Matrix which has the world transform of the {@link Camera} . - * @defaultValue {@link THREE.Matrix4 | `new THREE.Matrix4()`} - */ - matrixWorldInverse: Matrix4; - - /** - * This is the matrix which contains the projection. - * @defaultValue {@link THREE.Matrix4 | `new THREE.Matrix4()`} - */ - projectionMatrix: Matrix4; - - /** - * This is the inverse of projectionMatrix. - * @defaultValue {@link THREE.Matrix4 | `new THREE.Matrix4()`} - */ - projectionMatrixInverse: Matrix4; - - coordinateSystem: CoordinateSystem; - - viewport?: Vector4; - - /** - * Returns a {@link THREE.Vector3 | Vector3} representing the world space direction in which the {@link Camera} is looking. - * @remarks Note: A {@link Camera} looks down its local, negative z-axis. - * @param target The result will be copied into this Vector3. - */ - getWorldDirection(target: Vector3): Vector3; -} diff --git a/packages/canvas-three/three/src/cameras/CubeCamera.d.ts b/packages/canvas-three/three/src/cameras/CubeCamera.d.ts deleted file mode 100644 index fcc6df9f6..000000000 --- a/packages/canvas-three/three/src/cameras/CubeCamera.d.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { CoordinateSystem } from '../constants.js'; -import { Object3D } from '../core/Object3D.js'; -import { WebGLCubeRenderTarget } from '../renderers/WebGLCubeRenderTarget.js'; -import { WebGLRenderer } from '../renderers/WebGLRenderer.js'; - -/** - * Creates **6** {@link THREE.PerspectiveCamera | cameras} that render to a {@link THREE.WebGLCubeRenderTarget | WebGLCubeRenderTarget}. - * @remarks The cameras are added to the {@link children} array. - * @example - * ```typescript - * // Create cube render target - * const cubeRenderTarget = new THREE.WebGLCubeRenderTarget( 128, { generateMipmaps: true, minFilter: THREE.LinearMipmapLinearFilter } ); - * - * // Create cube camera - * const cubeCamera = new THREE.CubeCamera( 1, 100000, cubeRenderTarget ); - * scene.add( cubeCamera ); - * - * // Create car - * const chromeMaterial = new THREE.MeshLambertMaterial( { color: 0xffffff, envMap: cubeRenderTarget.texture } ); - * const car = new THREE.Mesh( carGeometry, chromeMaterial ); - * scene.add( car ); - * - * // Update the render target cube - * car.visible = false; - * cubeCamera.position.copy( car.position ); - * cubeCamera.update( renderer, scene ); - * - * // Render the scene - * car.visible = true; - * renderer.render( scene, camera ); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_materials_cubemap_dynamic | materials / cubemap / dynamic } - * @see {@link https://threejs.org/docs/index.html#api/en/cameras/CubeCamera | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/cameras/CubeCamera.js | Source} - */ -export class CubeCamera extends Object3D { - /** - * Constructs a {@link CubeCamera} that contains 6 {@link PerspectiveCamera | PerspectiveCameras} that render to a {@link THREE.WebGLCubeRenderTarget | WebGLCubeRenderTarget}. - * @param near The near clipping distance. - * @param far The far clipping distance. - * @param renderTarget The destination cube render target. - */ - constructor(near: number, far: number, renderTarget: WebGLCubeRenderTarget); - - /** - * @override - * @defaultValue `CubeCamera` - */ - override readonly type: string | 'CubeCamera'; - - /** - * The destination cube render target. - */ - renderTarget: WebGLCubeRenderTarget; - - coordinateSystem: CoordinateSystem; - - activeMipmapLevel: number; - - updateCoordinateSystem(): void; - - /** - * Call this to update the {@link CubeCamera.renderTarget | renderTarget}. - * @param renderer The current WebGL renderer - * @param scene The current scene - */ - update(renderer: WebGLRenderer, scene: Object3D): void; -} diff --git a/packages/canvas-three/three/src/cameras/OrthographicCamera.d.ts b/packages/canvas-three/three/src/cameras/OrthographicCamera.d.ts deleted file mode 100644 index 352d58450..000000000 --- a/packages/canvas-three/three/src/cameras/OrthographicCamera.d.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { JSONMeta, Object3DJSON, Object3DJSONObject } from '../core/Object3D.js'; -import { Camera } from './Camera.js'; - -export interface OrthographicCameraJSONObject extends Object3DJSONObject { - zoom: number; - left: number; - right: number; - top: number; - bottom: number; - near: number; - far: number; - - view?: { - enabled: boolean; - fullWidth: number; - fullHeight: number; - offsetX: number; - offsetY: number; - width: number; - height: number; - }; -} - -export interface OrthographicCameraJSON extends Object3DJSON { - object: OrthographicCameraJSONObject; -} - -/** - * Camera that uses {@link https://en.wikipedia.org/wiki/Orthographic_projection | orthographic projection}. - * In this projection mode, an object's size in the rendered image stays constant regardless of its distance from the camera. - * This can be useful for rendering 2D scenes and UI elements, amongst other things. - * @example - * ```typescript - * const camera = new THREE.OrthographicCamera(width / -2, width / 2, height / 2, height / -2, 1, 1000); - * scene.add(camera); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_camera | camera } - * @see Example: {@link https://threejs.org/examples/#webgl_interactive_cubes_ortho | interactive / cubes / ortho } - * @see Example: {@link https://threejs.org/examples/#webgl_materials_cubemap_dynamic | materials / cubemap / dynamic } - * @see Example: {@link https://threejs.org/examples/#webgl_postprocessing_advanced | postprocessing / advanced } - * @see Example: {@link https://threejs.org/examples/#webgl_postprocessing_dof2 | postprocessing / dof2 } - * @see Example: {@link https://threejs.org/examples/#webgl_postprocessing_godrays | postprocessing / godrays } - * @see Example: {@link https://threejs.org/examples/#webgl_rtt | rtt } - * @see Example: {@link https://threejs.org/examples/#webgl_shaders_tonemapping | shaders / tonemapping } - * @see Example: {@link https://threejs.org/examples/#webgl_shadowmap | shadowmap } - * @see {@link https://threejs.org/docs/index.html#api/en/cameras/OrthographicCamera | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/cameras/OrthographicCamera.js | Source} - */ -export class OrthographicCamera extends Camera { - /** - * Creates a new {@link OrthographicCamera}. - * @remarks Together these define the camera's {@link https://en.wikipedia.org/wiki/Viewing_frustum | viewing frustum}. - * @param left Camera frustum left plane. Default `-1`. - * @param right Camera frustum right plane. Default `1`. - * @param top Camera frustum top plane. Default `1`. - * @param bottom Camera frustum bottom plane. Default `-1`. - * @param near Camera frustum near plane. Default `0.1`. - * @param far Camera frustum far plane. Default `2000`. - */ - constructor(left?: number, right?: number, top?: number, bottom?: number, near?: number, far?: number); - - /** - * Read-only flag to check if a given object is of type {@link OrthographicCamera}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isOrthographicCamera: true; - - /** - * @override - * @defaultValue `OrthographicCamera` - */ - override readonly type: string | 'OrthographicCamera'; - - /** - * Gets or sets the zoom factor of the camera. - * @defaultValue `1` - */ - zoom: number; - - /** - * Set by {@link setViewOffset | .setViewOffset()}. - * @defaultValue `null` - */ - view: null | { - enabled: boolean; - fullWidth: number; - fullHeight: number; - offsetX: number; - offsetY: number; - width: number; - height: number; - }; - - /** - * Camera frustum left plane. - * @remarks Expects a `Float` - * @defaultValue `-1` - */ - left: number; - - /** - * Camera frustum right plane. - * @remarks Expects a `Float` - * @defaultValue `1` - */ - right: number; - - /** - * Camera frustum top plane. - * @remarks Expects a `Float` - * @defaultValue `1` - */ - top: number; - - /** - * Camera frustum bottom plane. - * @remarks Expects a `Float`. - * @defaultValue `-1` - */ - bottom: number; - - /** - * Camera frustum near plane.`. - * @remarks The valid range is between `0` and the current value of the {@link far | .far} plane. - * @remarks Note that, unlike for the {@link THREE.PerspectiveCamera | PerspectiveCamera}, `0` is a valid value for an {@link THREE.OrthographicCamera | OrthographicCamera's} near plane. - * @remarks Expects a `Float` - * @defaultValue `0.1` - */ - near: number; - - /** - * Camera frustum far plane. - * @remarks Must be greater than the current value of {@link near | .near} plane. - * @remarks Expects a `Float` - * @defaultValue `2000` - */ - far: number; - - /** - * Updates the camera projection matrix - * @remarks Must be called after any change of parameters. - */ - updateProjectionMatrix(): void; - - /** - * Sets an offset in a larger {@link https://en.wikipedia.org/wiki/Viewing_frustum | viewing frustum} - * @remarks - * This is useful for multi-window or multi-monitor/multi-machine setups - * For an example on how to use it see {@link PerspectiveCamera.setViewOffset | PerspectiveCamera}. - * @see {@link THREE.PerspectiveCamera.setViewOffset | PerspectiveCamera}. - * @param fullWidth Full width of multiview setup Expects a `Float`. - * @param fullHeight Full height of multiview setup Expects a `Float`. - * @param x Horizontal offset of subcamera Expects a `Float`. - * @param y Vertical offset of subcamera Expects a `Float`. - * @param width Width of subcamera Expects a `Float`. - * @param height Height of subcamera Expects a `Float`. - */ - setViewOffset(fullWidth: number, fullHeight: number, offsetX: number, offsetY: number, width: number, height: number): void; - - /** - * Removes any offset set by the {@link setViewOffset | .setViewOffset} method. - */ - clearViewOffset(): void; - - toJSON(meta?: JSONMeta): OrthographicCameraJSON; -} diff --git a/packages/canvas-three/three/src/cameras/PerspectiveCamera.d.ts b/packages/canvas-three/three/src/cameras/PerspectiveCamera.d.ts deleted file mode 100644 index 5a37c68de..000000000 --- a/packages/canvas-three/three/src/cameras/PerspectiveCamera.d.ts +++ /dev/null @@ -1,254 +0,0 @@ -import { JSONMeta, Object3DJSON, Object3DJSONObject } from '../core/Object3D.js'; -import { Vector2 } from '../math/Vector2.js'; -import { Camera } from './Camera.js'; - -export interface PerspectiveCameraJSONObject extends Object3DJSONObject { - fov: number; - zoom: number; - - near: number; - far: number; - focus: number; - - aspect: number; - - view?: { - enabled: boolean; - fullWidth: number; - fullHeight: number; - offsetX: number; - offsetY: number; - width: number; - height: number; - }; - - filmGauge: number; - filmOffset: number; -} - -export interface PerspectiveCameraJSON extends Object3DJSON { - object: PerspectiveCameraJSONObject; -} - -/** - * Camera that uses {@link https://en.wikipedia.org/wiki/Perspective_(graphical) | perspective projection}. - * This projection mode is designed to mimic the way the human eye sees - * @remarks - * It is the most common projection mode used for rendering a 3D scene. - * @example - * ```typescript - * const camera = new THREE.PerspectiveCamera(45, width / height, 1, 1000); - * scene.add(camera); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_animation_skinning_blending | animation / skinning / blending } - * @see Example: {@link https://threejs.org/examples/#webgl_animation_skinning_morph | animation / skinning / morph } - * @see Example: {@link https://threejs.org/examples/#webgl_effects_stereo | effects / stereo } - * @see Example: {@link https://threejs.org/examples/#webgl_interactive_cubes | interactive / cubes } - * @see Example: {@link https://threejs.org/examples/#webgl_loader_collada_skinning | loader / collada / skinning } - * @see {@link https://threejs.org/docs/index.html#api/en/cameras/PerspectiveCamera | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/cameras/PerspectiveCamera.js | Source} - */ -export class PerspectiveCamera extends Camera { - /** - * Creates a new {@link PerspectiveCamera}. - * @remarks Together these define the camera's {@link https://en.wikipedia.org/wiki/Viewing_frustum | viewing frustum}. - * @param fov Camera frustum vertical field of view. Default `50`. - * @param aspect Camera frustum aspect ratio. Default `1`. - * @param near Camera frustum near plane. Default `0.1`. - * @param far Camera frustum far plane. Default `2000`. - */ - constructor(fov?: number, aspect?: number, near?: number, far?: number); - - /** - * Read-only flag to check if a given object is of type {@link Camera}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isPerspectiveCamera: true; - - /** - * @override - * @defaultValue `PerspectiveCamera` - */ - override readonly type: string | 'PerspectiveCamera'; - - /** - * Gets or sets the zoom factor of the camera. - * @defaultValue `1` - */ - zoom: number; - - /** - * Camera frustum vertical field of view, from bottom to top of view, in degrees. - * @remarks Expects a `Float` - * @defaultValue `50` - */ - fov: number; - - /** - * Camera frustum aspect ratio, usually the canvas width / canvas height. - * @remarks Expects a `Float` - * @defaultValue `1`, _(square canvas)_. - */ - aspect: number; - - /** - * Camera frustum near plane. - * @remarks The valid range is greater than `0` and less than the current value of the {@link far | .far} plane. - * @remarks Note that, unlike for the {@link THREE.OrthographicCamera | OrthographicCamera}, `0` is **not** a valid value for a {@link PerspectiveCamera |PerspectiveCamera's}. near plane. - * @defaultValue `0.1` - * @remarks Expects a `Float` - */ - near: number; - - /** - * Camera frustum far plane. - * @remarks Must be greater than the current value of {@link near | .near} plane. - * @remarks Expects a `Float` - * @defaultValue `2000` - */ - far: number; - - /** - * Object distance used for stereoscopy and depth-of-field effects. - * @remarks This parameter does not influence the projection matrix unless a {@link THREE.StereoCamera | StereoCamera} is being used. - * @remarks Expects a `Float` - * @defaultValue `10` - */ - focus: number; - - /** - * Frustum window specification or null. - * This is set using the {@link setViewOffset | .setViewOffset} method and cleared using {@link clearViewOffset | .clearViewOffset}. - * @defaultValue `null` - */ - view: null | { - enabled: boolean; - fullWidth: number; - fullHeight: number; - offsetX: number; - offsetY: number; - width: number; - height: number; - }; - - /** - * Film size used for the larger axis. - * This parameter does not influence the projection matrix unless {@link filmOffset | .filmOffset} is set to a nonzero value. - * @remarks Expects a `Float` - * @defaultValue `35`, _millimeters_. - */ - filmGauge: number; - - /** - * Horizontal off-center offset in the same unit as {@link filmGauge | .filmGauge}. - * @remarks Expects a `Float` - * @defaultValue `0` - */ - filmOffset: number; - - /** - * Returns the focal length of the current {@link .fov | fov} in respect to {@link filmGauge | .filmGauge}. - */ - getFocalLength(): number; - - /** - * Sets the FOV by focal length in respect to the current {@link filmGauge | .filmGauge}. - * @remarks By default, the focal length is specified for a `35mm` (full frame) camera. - * @param focalLength Expects a `Float` - */ - setFocalLength(focalLength: number): void; - - /** - * Returns the current vertical field of view angle in degrees considering {@link zoom | .zoom}. - */ - getEffectiveFOV(): number; - - /** - * Returns the width of the image on the film - * @remarks - * If {@link aspect | .aspect}. is greater than or equal to one (landscape format), the result equals {@link filmGauge | .filmGauge}. - */ - getFilmWidth(): number; - - /** - * Returns the height of the image on the film - * @remarks - * If {@link aspect | .aspect}. is less than or equal to one (portrait format), the result equals {@link filmGauge | .filmGauge}. - */ - getFilmHeight(): number; - - /** - * Computes the 2D bounds of the camera's viewable rectangle at a given distance along the viewing direction. - * Sets minTarget and maxTarget to the coordinates of the lower-left and upper-right corners of the view rectangle. - */ - getViewBounds(distance: number, minTarget: Vector2, maxTarget: Vector2): void; - - /** - * Computes the width and height of the camera's viewable rectangle at a given distance along the viewing direction. - * Copies the result into the target Vector2, where x is width and y is height. - */ - getViewSize(distance: number, target: Vector2): Vector2; - - /** - * Sets an offset in a larger frustum. - * @remarks - * This is useful for multi-window or multi-monitor/multi-machine setups. - * - * For example, if you have 3x2 monitors and each monitor is _1920x1080_ and - * the monitors are in grid like this - * ``` - * ┌───┬───┬───┐ - * │ A │ B │ C │ - * ├───┼───┼───┤ - * │ D │ E │ F │ - * └───┴───┴───┘ - * ``` - * then for each monitor you would call it like this - * ```typescript - * const w = 1920; - * const h = 1080; - * const fullWidth = w * 3; - * const fullHeight = h * 2; - * - * // Monitor - A - * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); - * // Monitor - B - * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); - * // Monitor - C - * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); - * // Monitor - D - * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); - * // Monitor - E - * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); - * // Monitor - F - * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); - * ``` - * Note there is no reason monitors have to be the same size or in a grid. - * @param fullWidth Full width of multiview setup Expects a `Float`. - * @param fullHeight Full height of multiview setup Expects a `Float`. - * @param x Horizontal offset of subcamera Expects a `Float`. - * @param y Vertical offset of subcamera Expects a `Float`. - * @param width Width of subcamera Expects a `Float`. - * @param height Height of subcamera Expects a `Float`. - */ - setViewOffset(fullWidth: number, fullHeight: number, x: number, y: number, width: number, height: number): void; - - /** - * Removes any offset set by the {@link setViewOffset | .setViewOffset} method. - */ - clearViewOffset(): void; - - /** - * Updates the camera projection matrix - * @remarks Must be called after any change of parameters. - */ - updateProjectionMatrix(): void; - - /** - * @deprecated Use {@link PerspectiveCamera.setFocalLength | .setFocalLength()} and {@link PerspectiveCamera.filmGauge | .filmGauge} instead. - */ - setLens(focalLength: number, frameHeight?: number): void; - - toJSON(meta?: JSONMeta): PerspectiveCameraJSON; -} diff --git a/packages/canvas-three/three/src/cameras/StereoCamera.d.ts b/packages/canvas-three/three/src/cameras/StereoCamera.d.ts deleted file mode 100644 index f92d6c9a1..000000000 --- a/packages/canvas-three/three/src/cameras/StereoCamera.d.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Camera } from './Camera.js'; -import { PerspectiveCamera } from './PerspectiveCamera.js'; - -/** - * Dual {@link PerspectiveCamera | PerspectiveCamera}s used for effects such as - * {@link https://en.wikipedia.org/wiki/Anaglyph_3D | 3D Anaglyph} or - * {@link https://en.wikipedia.org/wiki/parallax_barrier | Parallax Barrier}. - * @see Example: {@link https://threejs.org/examples/#webgl_effects_anaglyph | effects / anaglyph } - * @see Example: {@link https://threejs.org/examples/#webgl_effects_parallaxbarrier | effects / parallaxbarrier } - * @see Example: {@link https://threejs.org/examples/#webgl_effects_stereo | effects / stereo } - * @see {@link https://threejs.org/docs/index.html#api/en/cameras/StereoCamera | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/cameras/StereoCamera.js | Source} - */ -export class StereoCamera extends Camera { - constructor(); - - type: 'StereoCamera'; - - /** - * @remarks Expects a `Float` - * @defaultValue `1` - */ - aspect: number; - - /** - * @remarks Expects a `Float` - * @defaultValue `0.064` - */ - eyeSep: number; - - /** - * The Left camera. - * A {@link PerspectiveCamera } added to {@link THREE.PerspectiveCamera.layers | layer 1} - * @remarks Objects to be rendered by the **left** camera must also be added to this layer. - */ - cameraL: PerspectiveCamera; - - /** - * The Right camera. - * A {@link PerspectiveCamera } added to {@link THREE.PerspectiveCamera.layers | layer 2} - * @remarks Objects to be rendered by the **right** camera must also be added to this layer. - */ - cameraR: PerspectiveCamera; - - /** - * Update the stereo cameras based on the camera passed in. - * @param camera - */ - update(camera: PerspectiveCamera): void; -} diff --git a/packages/canvas-three/three/src/constants.d.ts b/packages/canvas-three/three/src/constants.d.ts deleted file mode 100644 index 648b8caf1..000000000 --- a/packages/canvas-three/three/src/constants.d.ts +++ /dev/null @@ -1,802 +0,0 @@ -export const REVISION: string; - -// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.button -export enum MOUSE { - LEFT = 0, - MIDDLE = 1, - RIGHT = 2, - ROTATE = 0, - DOLLY = 1, - PAN = 2, -} - -export enum TOUCH { - ROTATE = 0, - PAN = 1, - DOLLY_PAN = 2, - DOLLY_ROTATE = 3, -} - -// GL STATE CONSTANTS -export const CullFaceNone: 0; -export const CullFaceBack: 1; -export const CullFaceFront: 2; -export const CullFaceFrontBack: 3; -export type CullFace = typeof CullFaceNone | typeof CullFaceBack | typeof CullFaceFront | typeof CullFaceFrontBack; - -// Shadowing Type -export const BasicShadowMap: 0; -export const PCFShadowMap: 1; -export const PCFSoftShadowMap: 2; -export const VSMShadowMap: 3; -export type ShadowMapType = typeof BasicShadowMap | typeof PCFShadowMap | typeof PCFSoftShadowMap | typeof VSMShadowMap; - -// MATERIAL CONSTANTS - -// side -export const FrontSide: 0; -export const BackSide: 1; -export const DoubleSide: 2; -/** - * Defines which side of faces will be rendered - front, back or both. - * Default is {@link FrontSide}. - */ -export type Side = typeof FrontSide | typeof BackSide | typeof DoubleSide; - -// blending modes -export const NoBlending: 0; -export const NormalBlending: 1; -export const AdditiveBlending: 2; -export const SubtractiveBlending: 3; -export const MultiplyBlending: 4; -export const CustomBlending: 5; -export type Blending = typeof NoBlending | typeof NormalBlending | typeof AdditiveBlending | typeof SubtractiveBlending | typeof MultiplyBlending | typeof CustomBlending; - -// custom blending equations -// (numbers start from 100 not to clash with other -// mappings to OpenGL constants defined in Texture.js) -export const AddEquation: 100; -export const SubtractEquation: 101; -export const ReverseSubtractEquation: 102; -export const MinEquation: 103; -export const MaxEquation: 104; -export type BlendingEquation = typeof AddEquation | typeof SubtractEquation | typeof ReverseSubtractEquation | typeof MinEquation | typeof MaxEquation; - -// custom blending factors -export const ZeroFactor: 200; -export const OneFactor: 201; -export const SrcColorFactor: 202; -export const OneMinusSrcColorFactor: 203; -export const SrcAlphaFactor: 204; -export const OneMinusSrcAlphaFactor: 205; -export const DstAlphaFactor: 206; -export const OneMinusDstAlphaFactor: 207; -export const DstColorFactor: 208; -export const OneMinusDstColorFactor: 209; -export const SrcAlphaSaturateFactor: 210; -export const ConstantColorFactor: 211; -export const OneMinusConstantColorFactor: 212; -export const ConstantAlphaFactor: 213; -export const OneMinusConstantAlphaFactor: 214; -export type BlendingDstFactor = typeof ZeroFactor | typeof OneFactor | typeof SrcColorFactor | typeof OneMinusSrcColorFactor | typeof SrcAlphaFactor | typeof OneMinusSrcAlphaFactor | typeof DstAlphaFactor | typeof OneMinusDstAlphaFactor | typeof DstColorFactor | typeof OneMinusDstColorFactor | typeof ConstantColorFactor | typeof OneMinusConstantColorFactor | typeof ConstantAlphaFactor | typeof OneMinusConstantAlphaFactor; -export type BlendingSrcFactor = BlendingDstFactor | typeof SrcAlphaSaturateFactor; - -// depth modes -export const NeverDepth: 0; -export const AlwaysDepth: 1; -export const LessDepth: 2; -export const LessEqualDepth: 3; -export const EqualDepth: 4; -export const GreaterEqualDepth: 5; -export const GreaterDepth: 6; -export const NotEqualDepth: 7; -export type DepthModes = typeof NeverDepth | typeof AlwaysDepth | typeof LessDepth | typeof LessEqualDepth | typeof EqualDepth | typeof GreaterEqualDepth | typeof GreaterDepth | typeof NotEqualDepth; - -// TEXTURE CONSTANTS -// Operations -export const MultiplyOperation: 0; -export const MixOperation: 1; -export const AddOperation: 2; -export type Combine = typeof MultiplyOperation | typeof MixOperation | typeof AddOperation; - -// Tone Mapping modes -export const NoToneMapping: 0; -export const LinearToneMapping: 1; -export const ReinhardToneMapping: 2; -export const CineonToneMapping: 3; -export const ACESFilmicToneMapping: 4; -export const CustomToneMapping: 5; -export const AgXToneMapping: 6; -export const NeutralToneMapping: 7; -export type ToneMapping = typeof NoToneMapping | typeof LinearToneMapping | typeof ReinhardToneMapping | typeof CineonToneMapping | typeof ACESFilmicToneMapping | typeof CustomToneMapping | typeof AgXToneMapping | typeof NeutralToneMapping; - -// Bind modes -export const AttachedBindMode: 'attached'; -export const DetachedBindMode: 'detached'; -export type BindMode = typeof AttachedBindMode | typeof DetachedBindMode; - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -// Mapping modes - -/** - * Maps the texture using the mesh's UV coordinates. - * @remarks This is the _default_ value and behaver for Texture Mapping. - */ -export const UVMapping: 300; - -/** - * @remarks This is the _default_ value and behaver for Cube Texture Mapping. - */ -export const CubeReflectionMapping: 301; -export const CubeRefractionMapping: 302; -export const CubeUVReflectionMapping: 306; - -export const EquirectangularReflectionMapping: 303; -export const EquirectangularRefractionMapping: 304; - -/** - * Texture Mapping Modes for non-cube Textures - * @remarks {@link UVMapping} is the _default_ value and behaver for Texture Mapping. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - */ -export type Mapping = typeof UVMapping | typeof EquirectangularReflectionMapping | typeof EquirectangularRefractionMapping; - -/** - * Texture Mapping Modes for cube Textures - * @remarks {@link CubeReflectionMapping} is the _default_ value and behaver for Cube Texture Mapping. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - */ -export type CubeTextureMapping = typeof CubeReflectionMapping | typeof CubeRefractionMapping | typeof CubeUVReflectionMapping; - -/** - * Texture Mapping Modes for any type of Textures - * @see {@link Mapping} and {@link CubeTextureMapping} - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - */ -export type AnyMapping = Mapping | CubeTextureMapping; - -/////////////////////////////////////////////////////////////////////////////// -// Wrapping modes - -/** With {@link RepeatWrapping} the texture will simply repeat to infinity. */ -export const RepeatWrapping: 1000; -/** - * With {@link ClampToEdgeWrapping} the last pixel of the texture stretches to the edge of the mesh. - * @remarks This is the _default_ value and behaver for Wrapping Mapping. - */ -export const ClampToEdgeWrapping: 1001; -/** With {@link MirroredRepeatWrapping} the texture will repeats to infinity, mirroring on each repeat. */ -export const MirroredRepeatWrapping: 1002; - -/** - * Texture Wrapping Modes - * @remarks {@link ClampToEdgeWrapping} is the _default_ value and behaver for Wrapping Mapping. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - */ -export type Wrapping = typeof RepeatWrapping | typeof ClampToEdgeWrapping | typeof MirroredRepeatWrapping; - -/////////////////////////////////////////////////////////////////////////////// -// Filters - -/** {@link NearestFilter} returns the value of the texture element that is nearest (in Manhattan distance) to the specified texture coordinates. */ -export const NearestFilter: 1003; - -/** - * {@link NearestMipmapNearestFilter} chooses the mipmap that most closely matches the size of the pixel being textured - * and uses the {@link NearestFilter} criterion (the texel nearest to the center of the pixel) to produce a texture value. - */ -export const NearestMipmapNearestFilter: 1004; -/** - * {@link NearestMipmapNearestFilter} chooses the mipmap that most closely matches the size of the pixel being textured - * and uses the {@link NearestFilter} criterion (the texel nearest to the center of the pixel) to produce a texture value. - */ -export const NearestMipMapNearestFilter: 1004; - -/** - * {@link NearestMipmapLinearFilter} chooses the two mipmaps that most closely match the size of the pixel being textured - * and uses the {@link NearestFilter} criterion to produce a texture value from each mipmap. - * The final texture value is a weighted average of those two values. - */ -export const NearestMipmapLinearFilter: 1005; -/** - * {@link NearestMipMapLinearFilter} chooses the two mipmaps that most closely match the size of the pixel being textured - * and uses the {@link NearestFilter} criterion to produce a texture value from each mipmap. - * The final texture value is a weighted average of those two values. - */ -export const NearestMipMapLinearFilter: 1005; - -/** - * {@link LinearFilter} returns the weighted average of the four texture elements that are closest to the specified texture coordinates, - * and can include items wrapped or repeated from other parts of a texture, - * depending on the values of {@link THREE.Texture.wrapS | wrapS} and {@link THREE.Texture.wrapT | wrapT}, and on the exact mapping. - */ -export const LinearFilter: 1006; - -/** - * {@link LinearMipmapNearestFilter} chooses the mipmap that most closely matches the size of the pixel being textured and - * uses the {@link LinearFilter} criterion (a weighted average of the four texels that are closest to the center of the pixel) to produce a texture value. - */ -export const LinearMipmapNearestFilter: 1007; -/** - * {@link LinearMipMapNearestFilter} chooses the mipmap that most closely matches the size of the pixel being textured and - * uses the {@link LinearFilter} criterion (a weighted average of the four texels that are closest to the center of the pixel) to produce a texture value. - */ -export const LinearMipMapNearestFilter: 1007; - -/** - * {@link LinearMipmapLinearFilter} is the default and chooses the two mipmaps that most closely match the size of the pixel being textured and - * uses the {@link LinearFilter} criterion to produce a texture value from each mipmap. - * The final texture value is a weighted average of those two values. - */ -export const LinearMipmapLinearFilter: 1008; - -/** - * {@link LinearMipMapLinearFilter} is the default and chooses the two mipmaps that most closely match the size of the pixel being textured and - * uses the {@link LinearFilter} criterion to produce a texture value from each mipmap. - * The final texture value is a weighted average of those two values. - */ -export const LinearMipMapLinearFilter: 1008; - -/** - * Texture Magnification Filter Modes. - * For use with a texture's {@link THREE.Texture.magFilter | magFilter} property, - * these define the texture magnification function to be used when the pixel being textured maps to an area less than or equal to one texture element (texel). - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @see {@link https://sbcode.net/threejs/mipmaps/ | Texture Mipmaps (non-official)} - */ -export type MagnificationTextureFilter = typeof NearestFilter | typeof LinearFilter; - -/** - * Texture Minification Filter Modes. - * For use with a texture's {@link THREE.Texture.minFilter | minFilter} property, - * these define the texture minifying function that is used whenever the pixel being textured maps to an area greater than one texture element (texel). - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @see {@link https://sbcode.net/threejs/mipmaps/ | Texture Mipmaps (non-official)} - */ -export type MinificationTextureFilter = typeof NearestFilter | typeof NearestMipmapNearestFilter | typeof NearestMipMapNearestFilter | typeof NearestMipmapLinearFilter | typeof NearestMipMapLinearFilter | typeof LinearFilter | typeof LinearMipmapNearestFilter | typeof LinearMipMapNearestFilter | typeof LinearMipmapLinearFilter | typeof LinearMipMapLinearFilter; - -/** - * Texture all Magnification and Minification Filter Modes. - * @see {@link MagnificationTextureFilter} and {@link MinificationTextureFilter} - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @see {@link https://sbcode.net/threejs/mipmaps/ | Texture Mipmaps (non-official)} - */ -export type TextureFilter = MagnificationTextureFilter | MinificationTextureFilter; - -/////////////////////////////////////////////////////////////////////////////// -// Data types - -export const UnsignedByteType: 1009; -export const ByteType: 1010; -export const ShortType: 1011; -export const UnsignedShortType: 1012; -export const IntType: 1013; -export const UnsignedIntType: 1014; -export const FloatType: 1015; -export const HalfFloatType: 1016; -export const UnsignedShort4444Type: 1017; -export const UnsignedShort5551Type: 1018; -export const UnsignedInt248Type: 1020; -export const UnsignedInt5999Type: 35902; - -export type AttributeGPUType = typeof FloatType | typeof IntType; - -/** - * Texture Types. - * @remarks Must correspond to the correct {@link PixelFormat | format}. - * @see {@link THREE.Texture.type} - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - */ -export type TextureDataType = typeof UnsignedByteType | typeof ByteType | typeof ShortType | typeof UnsignedShortType | typeof IntType | typeof UnsignedIntType | typeof FloatType | typeof HalfFloatType | typeof UnsignedShort4444Type | typeof UnsignedShort5551Type | typeof UnsignedInt248Type | typeof UnsignedInt5999Type; - -/////////////////////////////////////////////////////////////////////////////// -// Pixel formats - -/** {@link AlphaFormat} discards the red, green and blue components and reads just the alpha component. */ -export const AlphaFormat: 1021; - -export const RGBFormat: 1022; - -/** {@link RGBAFormat} is the default and reads the red, green, blue and alpha components. */ -export const RGBAFormat: 1023; - -/** - * {@link LuminanceFormat} reads each element as a single luminance component. - * This is then converted to a floating point, clamped to the range `[0,1]`, and then assembled into an RGBA element by - * placing the luminance value in the red, green and blue channels, and attaching `1.0` to the alpha channel. - */ -export const LuminanceFormat: 1024; - -/** - * {@link LuminanceAlphaFormat} reads each element as a luminance/alpha double. - * The same process occurs as for the {@link LuminanceFormat}, except that the alpha channel may have values other than `1.0`. - */ -export const LuminanceAlphaFormat: 1025; - -/** - * {@link DepthFormat} reads each element as a single depth value, converts it to floating point, and clamps to the range `[0,1]`. - * @remarks This is the default for {@link THREE.DepthTexture}. - */ -export const DepthFormat: 1026; - -/** - * {@link DepthStencilFormat} reads each element is a pair of depth and stencil values. - * The depth component of the pair is interpreted as in {@link DepthFormat}. - * The stencil component is interpreted based on the depth + stencil internal format. - */ -export const DepthStencilFormat: 1027; - -/** - * {@link RedFormat} discards the green and blue components and reads just the red component. - */ -export const RedFormat: 1028; - -/** - * {@link RedIntegerFormat} discards the green and blue components and reads just the red component. - * The texels are read as integers instead of floating point. - */ -export const RedIntegerFormat: 1029; - -/** - * {@link RGFormat} discards the alpha, and blue components and reads the red, and green components. - */ -export const RGFormat: 1030; - -/** - * {@link RGIntegerFormat} discards the alpha, and blue components and reads the red, and green components. - * The texels are read as integers instead of floating point. - */ -export const RGIntegerFormat: 1031; - -/** - * {@link RGBIntegerFormat} discrads the alpha components and reads the red, green, and blue components. - */ -export const RGBIntegerFormat: 1032; - -/** - * {@link RGBAIntegerFormat} reads the red, green, blue and alpha component - * @remarks This is the default for {@link THREE.Texture}. - */ -export const RGBAIntegerFormat: 1033; - -/** - * All Texture Pixel Formats Modes. - * @remarks Note that the texture must have the correct {@link THREE.Texture.type} set, as described in {@link TextureDataType}. - * @see {@link WebGLRenderingContext.texImage2D} for details. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - */ -export type PixelFormat = typeof AlphaFormat | typeof RGBFormat | typeof RGBAFormat | typeof LuminanceFormat | typeof LuminanceAlphaFormat | typeof DepthFormat | typeof DepthStencilFormat | typeof RedFormat | typeof RedIntegerFormat | typeof RGFormat | typeof RGIntegerFormat | typeof RGBIntegerFormat | typeof RGBAIntegerFormat; - -/** - * All Texture Pixel Formats Modes for {@link THREE.DepthTexture}. - * @see {@link WebGLRenderingContext.texImage2D} for details. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - */ -export type DepthTexturePixelFormat = typeof DepthFormat | typeof DepthStencilFormat; - -/////////////////////////////////////////////////////////////////////////////// -// Compressed texture formats -// DDS / ST3C Compressed texture formats - -/** - * A DXT1-compressed image in an RGB image format. - * @remarks Require support for the _WEBGL_compressed_texture_s3tc_ WebGL extension. - */ -export const RGB_S3TC_DXT1_Format: 33776; -/** - * A DXT1-compressed image in an RGB image format with a simple on/off alpha value. - * @remarks Require support for the _WEBGL_compressed_texture_s3tc_ WebGL extension. - */ -export const RGBA_S3TC_DXT1_Format: 33777; -/** - * A DXT3-compressed image in an RGBA image format. Compared to a 32-bit RGBA texture, it offers 4:1 compression. - * @remarks Require support for the _WEBGL_compressed_texture_s3tc_ WebGL extension. - */ -export const RGBA_S3TC_DXT3_Format: 33778; -/** - * A DXT5-compressed image in an RGBA image format. It also provides a 4:1 compression, but differs to the DXT3 compression in how the alpha compression is done. - * @remarks Require support for the _WEBGL_compressed_texture_s3tc_ WebGL extension. - */ -export const RGBA_S3TC_DXT5_Format: 33779; - -// PVRTC compressed './texture formats - -/** - * RGB compression in 4-bit mode. One block for each 4×4 pixels. - * @remarks Require support for the _WEBGL_compressed_texture_pvrtc_ WebGL extension. - */ -export const RGB_PVRTC_4BPPV1_Format: 35840; -/** - * RGB compression in 2-bit mode. One block for each 8×4 pixels. - * @remarks Require support for the _WEBGL_compressed_texture_pvrtc_ WebGL extension. - */ -export const RGB_PVRTC_2BPPV1_Format: 35841; -/** - * RGBA compression in 4-bit mode. One block for each 4×4 pixels. - * @remarks Require support for the _WEBGL_compressed_texture_pvrtc_ WebGL extension. - */ -export const RGBA_PVRTC_4BPPV1_Format: 35842; -/** - * RGBA compression in 2-bit mode. One block for each 8×4 pixels. - * @remarks Require support for the _WEBGL_compressed_texture_pvrtc_ WebGL extension. - */ -export const RGBA_PVRTC_2BPPV1_Format: 35843; - -// ETC compressed texture formats - -/** - * @remarks Require support for the _WEBGL_compressed_texture_etc1_ (ETC1) or _WEBGL_compressed_texture_etc_ (ETC2) WebGL extension. - */ -export const RGB_ETC1_Format: 36196; -/** - * @remarks Require support for the _WEBGL_compressed_texture_etc1_ (ETC1) or _WEBGL_compressed_texture_etc_ (ETC2) WebGL extension. - */ -export const RGB_ETC2_Format: 37492; -/** - * @remarks Require support for the _WEBGL_compressed_texture_etc1_ (ETC1) or _WEBGL_compressed_texture_etc_ (ETC2) WebGL extension. - */ -export const RGBA_ETC2_EAC_Format: 37496; - -// ASTC compressed texture formats - -/** - * @remarks Require support for the _WEBGL_compressed_texture_astc_ WebGL extension. - */ -export const RGBA_ASTC_4x4_Format: 37808; -/** - * @remarks Require support for the _WEBGL_compressed_texture_astc_ WebGL extension. - */ -export const RGBA_ASTC_5x4_Format: 37809; -/** - * @remarks Require support for the _WEBGL_compressed_texture_astc_ WebGL extension. - */ -export const RGBA_ASTC_5x5_Format: 37810; -/** - * @remarks Require support for the _WEBGL_compressed_texture_astc_ WebGL extension. - */ -export const RGBA_ASTC_6x5_Format: 37811; -/** - * @remarks Require support for the _WEBGL_compressed_texture_astc_ WebGL extension. - */ -export const RGBA_ASTC_6x6_Format: 37812; -/** - * @remarks Require support for the _WEBGL_compressed_texture_astc_ WebGL extension. - */ -export const RGBA_ASTC_8x5_Format: 37813; -/** - * @remarks Require support for the _WEBGL_compressed_texture_astc_ WebGL extension. - */ -export const RGBA_ASTC_8x6_Format: 37814; -/** - * @remarks Require support for the _WEBGL_compressed_texture_astc_ WebGL extension. - */ -export const RGBA_ASTC_8x8_Format: 37815; -/** - * @remarks Require support for the _WEBGL_compressed_texture_astc_ WebGL extension. - */ -export const RGBA_ASTC_10x5_Format: 37816; -/** - * @remarks Require support for the _WEBGL_compressed_texture_astc_ WebGL extension. - */ -export const RGBA_ASTC_10x6_Format: 37817; -/** - * @remarks Require support for the _WEBGL_compressed_texture_astc_ WebGL extension. - */ -export const RGBA_ASTC_10x8_Format: 37818; -/** - * @remarks Require support for the _WEBGL_compressed_texture_astc_ WebGL extension. - */ -export const RGBA_ASTC_10x10_Format: 37819; -/** - * @remarks Require support for the _WEBGL_compressed_texture_astc_ WebGL extension. - */ -export const RGBA_ASTC_12x10_Format: 37820; -/** - * @remarks Require support for the _WEBGL_compressed_texture_astc_ WebGL extension. - */ -export const RGBA_ASTC_12x12_Format: 37821; - -// BPTC compressed texture formats - -/** - * @remarks Require support for the _EXT_texture_compression_bptc_ WebGL extension. - */ -export const RGBA_BPTC_Format: 36492; -export const RGB_BPTC_SIGNED_Format = 36494; -export const RGB_BPTC_UNSIGNED_Format = 36495; - -// RGTC compressed texture formats -export const RED_RGTC1_Format: 36283; -export const SIGNED_RED_RGTC1_Format: 36284; -export const RED_GREEN_RGTC2_Format: 36285; -export const SIGNED_RED_GREEN_RGTC2_Format: 36286; - -/** - * For use with a {@link THREE.CompressedTexture}'s {@link THREE.CompressedTexture.format | .format} property. - * @remarks Compressed Require support for correct WebGL extension. - */ -export type CompressedPixelFormat = - | typeof RGB_S3TC_DXT1_Format - | typeof RGBA_S3TC_DXT1_Format - | typeof RGBA_S3TC_DXT3_Format - | typeof RGBA_S3TC_DXT5_Format - | typeof RGB_PVRTC_4BPPV1_Format - | typeof RGB_PVRTC_2BPPV1_Format - | typeof RGBA_PVRTC_4BPPV1_Format - | typeof RGBA_PVRTC_2BPPV1_Format - | typeof RGB_ETC1_Format - | typeof RGB_ETC2_Format - | typeof RGBA_ETC2_EAC_Format - | typeof RGBA_ASTC_4x4_Format - | typeof RGBA_ASTC_5x4_Format - | typeof RGBA_ASTC_5x5_Format - | typeof RGBA_ASTC_6x5_Format - | typeof RGBA_ASTC_6x6_Format - | typeof RGBA_ASTC_8x5_Format - | typeof RGBA_ASTC_8x6_Format - | typeof RGBA_ASTC_8x8_Format - | typeof RGBA_ASTC_10x5_Format - | typeof RGBA_ASTC_10x6_Format - | typeof RGBA_ASTC_10x8_Format - | typeof RGBA_ASTC_10x10_Format - | typeof RGBA_ASTC_12x10_Format - | typeof RGBA_ASTC_12x12_Format - | typeof RGBA_BPTC_Format - | typeof RGB_BPTC_SIGNED_Format - | typeof RGB_BPTC_UNSIGNED_Format - | typeof RED_RGTC1_Format - | typeof SIGNED_RED_RGTC1_Format - | typeof RED_GREEN_RGTC2_Format - | typeof SIGNED_RED_GREEN_RGTC2_Format; - -/////////////////////////////////////////////////////////////////////////////// - -/** - * All Possible Texture Pixel Formats Modes. For any Type or SubType of Textures. - * @remarks Note that the texture must have the correct {@link THREE.Texture.type} set, as described in {@link TextureDataType}. - * @see {@link WebGLRenderingContext.texImage2D} for details. - * @see {@link PixelFormat} and {@link DepthTexturePixelFormat} and {@link CompressedPixelFormat} - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - */ -export type AnyPixelFormat = PixelFormat | DepthTexturePixelFormat | CompressedPixelFormat; - -/////////////////////////////////////////////////////////////////////////////// -// Loop styles for AnimationAction -export const LoopOnce: 2200; -export const LoopRepeat: 2201; -export const LoopPingPong: 2202; -export type AnimationActionLoopStyles = typeof LoopOnce | typeof LoopRepeat | typeof LoopPingPong; - -// Interpolation -export const InterpolateDiscrete: 2300; -export const InterpolateLinear: 2301; -export const InterpolateSmooth: 2302; -export type InterpolationModes = typeof InterpolateDiscrete | typeof InterpolateLinear | typeof InterpolateSmooth; - -// Interpolant ending modes -export const ZeroCurvatureEnding: 2400; -export const ZeroSlopeEnding: 2401; -export const WrapAroundEnding: 2402; -export type InterpolationEndingModes = typeof ZeroCurvatureEnding | typeof ZeroSlopeEnding | typeof WrapAroundEnding; - -// Animation blending modes -export const NormalAnimationBlendMode: 2500; -export const AdditiveAnimationBlendMode: 2501; -export type AnimationBlendMode = typeof NormalAnimationBlendMode | typeof AdditiveAnimationBlendMode; - -// Triangle Draw modes -export const TrianglesDrawMode: 0; -export const TriangleStripDrawMode: 1; -export const TriangleFanDrawMode: 2; -export type TrianglesDrawModes = typeof TrianglesDrawMode | typeof TriangleStripDrawMode | typeof TriangleFanDrawMode; - -/////////////////////////////////////////////////////////////////////////////// -// Depth packing strategies - -export const BasicDepthPacking: 3200; -export const RGBADepthPacking: 3201; -export const RGBDepthPacking: 3202; -export const RGDepthPacking: 3203; -export type DepthPackingStrategies = typeof BasicDepthPacking | typeof RGBADepthPacking | typeof RGBDepthPacking | typeof RGDepthPacking; - -/////////////////////////////////////////////////////////////////////////////// -// Normal Map types - -export const TangentSpaceNormalMap: 0; -export const ObjectSpaceNormalMap: 1; -export type NormalMapTypes = typeof TangentSpaceNormalMap | typeof ObjectSpaceNormalMap; - -export const NoColorSpace: ''; -export const SRGBColorSpace: 'srgb'; -export const LinearSRGBColorSpace: 'srgb-linear'; -export const DisplayP3ColorSpace: 'display-p3'; -export const LinearDisplayP3ColorSpace = 'display-p3-linear'; -export type ColorSpace = typeof NoColorSpace | typeof SRGBColorSpace | typeof LinearSRGBColorSpace | typeof DisplayP3ColorSpace | typeof LinearDisplayP3ColorSpace; - -export const LinearTransfer: 'linear'; -export const SRGBTransfer: 'srgb'; -export type ColorSpaceTransfer = typeof LinearTransfer | typeof SRGBTransfer; - -export const Rec709Primaries: 'rec709'; -export const P3Primaries: 'p3'; -export type ColorSpacePrimaries = typeof Rec709Primaries | typeof P3Primaries; - -// Stencil Op types -export const ZeroStencilOp: 0; -export const KeepStencilOp: 7680; -export const ReplaceStencilOp: 7681; -export const IncrementStencilOp: 7682; -export const DecrementStencilOp: 7283; -export const IncrementWrapStencilOp: 34055; -export const DecrementWrapStencilOp: 34056; -export const InvertStencilOp: 5386; -export type StencilOp = typeof ZeroStencilOp | typeof KeepStencilOp | typeof ReplaceStencilOp | typeof IncrementStencilOp | typeof DecrementStencilOp | typeof IncrementWrapStencilOp | typeof DecrementWrapStencilOp | typeof InvertStencilOp; - -// Stencil Func types -export const NeverStencilFunc: 512; -export const LessStencilFunc: 513; -export const EqualStencilFunc: 514; -export const LessEqualStencilFunc: 515; -export const GreaterStencilFunc: 516; -export const NotEqualStencilFunc: 517; -export const GreaterEqualStencilFunc: 518; -export const AlwaysStencilFunc: 519; -export type StencilFunc = typeof NeverStencilFunc | typeof LessStencilFunc | typeof EqualStencilFunc | typeof LessEqualStencilFunc | typeof GreaterStencilFunc | typeof NotEqualStencilFunc | typeof GreaterEqualStencilFunc | typeof AlwaysStencilFunc; - -export const NeverCompare: 512; -export const LessCompare: 513; -export const EqualCompare: 514; -export const LessEqualCompare: 515; -export const GreaterCompare: 516; -export const NotEqualCompare: 517; -export const GreaterEqualCompare: 518; -export const AlwaysCompare: 519; -export type TextureComparisonFunction = typeof NeverCompare | typeof LessCompare | typeof EqualCompare | typeof LessEqualCompare | typeof GreaterCompare | typeof NotEqualCompare | typeof GreaterEqualCompare | typeof AlwaysCompare; - -// usage types -export const StaticDrawUsage: 35044; -export const DynamicDrawUsage: 35048; -export const StreamDrawUsage: 35040; -export const StaticReadUsage: 35045; -export const DynamicReadUsage: 35049; -export const StreamReadUsage: 35041; -export const StaticCopyUsage: 35046; -export const DynamicCopyUsage: 35050; -export const StreamCopyUsage: 35042; -export type Usage = typeof StaticDrawUsage | typeof DynamicDrawUsage | typeof StreamDrawUsage | typeof StaticReadUsage | typeof DynamicReadUsage | typeof StreamReadUsage | typeof StaticCopyUsage | typeof DynamicCopyUsage | typeof StreamCopyUsage; - -export const GLSL1: '100'; -export const GLSL3: '300 es'; -export type GLSLVersion = typeof GLSL1 | typeof GLSL3; - -export const WebGLCoordinateSystem: 2000; -export const WebGPUCoordinateSystem: 2001; -export type CoordinateSystem = typeof WebGLCoordinateSystem | typeof WebGPUCoordinateSystem; - -/////////////////////////////////////////////////////////////////////////////// -// Texture - Internal Pixel Formats - -/** - * For use with a texture's {@link THREE.Texture.internalFormat} property, these define how elements of a {@link THREE.Texture}, or texels, are stored on the GPU. - * - `R8` stores the red component on 8 bits. - * - `R8_SNORM` stores the red component on 8 bits. The component is stored as normalized. - * - `R8I` stores the red component on 8 bits. The component is stored as an integer. - * - `R8UI` stores the red component on 8 bits. The component is stored as an unsigned integer. - * - `R16I` stores the red component on 16 bits. The component is stored as an integer. - * - `R16UI` stores the red component on 16 bits. The component is stored as an unsigned integer. - * - `R16F` stores the red component on 16 bits. The component is stored as floating point. - * - `R32I` stores the red component on 32 bits. The component is stored as an integer. - * - `R32UI` stores the red component on 32 bits. The component is stored as an unsigned integer. - * - `R32F` stores the red component on 32 bits. The component is stored as floating point. - * - `RG8` stores the red and green components on 8 bits each. - * - `RG8_SNORM` stores the red and green components on 8 bits each. Every component is stored as normalized. - * - `RG8I` stores the red and green components on 8 bits each. Every component is stored as an integer. - * - `RG8UI` stores the red and green components on 8 bits each. Every component is stored as an unsigned integer. - * - `RG16I` stores the red and green components on 16 bits each. Every component is stored as an integer. - * - `RG16UI` stores the red and green components on 16 bits each. Every component is stored as an unsigned integer. - * - `RG16F` stores the red and green components on 16 bits each. Every component is stored as floating point. - * - `RG32I` stores the red and green components on 32 bits each. Every component is stored as an integer. - * - `RG32UI` stores the red and green components on 32 bits. Every component is stored as an unsigned integer. - * - `RG32F` stores the red and green components on 32 bits. Every component is stored as floating point. - * - `RGB8` stores the red, green, and blue components on 8 bits each. RGB8_SNORM` stores the red, green, and blue components on 8 bits each. Every component is stored as normalized. - * - `RGB8I` stores the red, green, and blue components on 8 bits each. Every component is stored as an integer. - * - `RGB8UI` stores the red, green, and blue components on 8 bits each. Every component is stored as an unsigned integer. - * - `RGB16I` stores the red, green, and blue components on 16 bits each. Every component is stored as an integer. - * - `RGB16UI` stores the red, green, and blue components on 16 bits each. Every component is stored as an unsigned integer. - * - `RGB16F` stores the red, green, and blue components on 16 bits each. Every component is stored as floating point - * - `RGB32I` stores the red, green, and blue components on 32 bits each. Every component is stored as an integer. - * - `RGB32UI` stores the red, green, and blue components on 32 bits each. Every component is stored as an unsigned integer. - * - `RGB32F` stores the red, green, and blue components on 32 bits each. Every component is stored as floating point - * - `R11F_G11F_B10F` stores the red, green, and blue components respectively on 11 bits, 11 bits, and 10bits. Every component is stored as floating point. - * - `RGB565` stores the red, green, and blue components respectively on 5 bits, 6 bits, and 5 bits. - * - `RGB9_E5` stores the red, green, and blue components on 9 bits each. - * - `RGBA8` stores the red, green, blue, and alpha components on 8 bits each. - * - `RGBA8_SNORM` stores the red, green, blue, and alpha components on 8 bits. Every component is stored as normalized. - * - `RGBA8I` stores the red, green, blue, and alpha components on 8 bits each. Every component is stored as an integer. - * - `RGBA8UI` stores the red, green, blue, and alpha components on 8 bits. Every component is stored as an unsigned integer. - * - `RGBA16I` stores the red, green, blue, and alpha components on 16 bits. Every component is stored as an integer. - * - `RGBA16UI` stores the red, green, blue, and alpha components on 16 bits. Every component is stored as an unsigned integer. - * - `RGBA16F` stores the red, green, blue, and alpha components on 16 bits. Every component is stored as floating point. - * - `RGBA32I` stores the red, green, blue, and alpha components on 32 bits. Every component is stored as an integer. - * - `RGBA32UI` stores the red, green, blue, and alpha components on 32 bits. Every component is stored as an unsigned integer. - * - `RGBA32F` stores the red, green, blue, and alpha components on 32 bits. Every component is stored as floating point. - * - `RGB5_A1` stores the red, green, blue, and alpha components respectively on 5 bits, 5 bits, 5 bits, and 1 bit. - * - `RGB10_A2` stores the red, green, blue, and alpha components respectively on 10 bits, 10 bits, 10 bits and 2 bits. - * - `RGB10_A2UI` stores the red, green, blue, and alpha components respectively on 10 bits, 10 bits, 10 bits and 2 bits. Every component is stored as an unsigned integer. - * - `SRGB8` stores the red, green, and blue components on 8 bits each. - * - `SRGB8_ALPHA8` stores the red, green, blue, and alpha components on 8 bits each. - * - `DEPTH_COMPONENT16` stores the depth component on 16bits. - * - `DEPTH_COMPONENT24` stores the depth component on 24bits. - * - `DEPTH_COMPONENT32F` stores the depth component on 32bits. The component is stored as floating point. - * - `DEPTH24_STENCIL8` stores the depth, and stencil components respectively on 24 bits and 8 bits. The stencil component is stored as an unsigned integer. - * - `DEPTH32F_STENCIL8` stores the depth, and stencil components respectively on 32 bits and 8 bits. The depth component is stored as floating point, and the stencil component as an unsigned integer. - * @remark Note that the texture must have the correct {@link THREE.Texture.type} set, as well as the correct {@link THREE.Texture.format}. - * @see {@link WebGLRenderingContext.texImage2D} and {@link WebGLRenderingContext.texImage3D} for more details regarding the possible combination - * of {@link THREE.Texture.format}, {@link THREE.Texture.internalFormat}, and {@link THREE.Texture.type}. - * @see {@link https://registry.khronos.org/webgl/specs/latest/2.0/ | WebGL2 Specification} and - * {@link https://registry.khronos.org/OpenGL/specs/es/3.0/es_spec_3.0.pdf | OpenGL ES 3.0 Specification} For more in-depth information regarding internal formats. - */ -export type PixelFormatGPU = - | 'ALPHA' - | 'RGB' - | 'RGBA' - | 'LUMINANCE' - | 'LUMINANCE_ALPHA' - | 'RED_INTEGER' - | 'R8' - | 'R8_SNORM' - | 'R8I' - | 'R8UI' - | 'R16I' - | 'R16UI' - | 'R16F' - | 'R32I' - | 'R32UI' - | 'R32F' - | 'RG8' - | 'RG8_SNORM' - | 'RG8I' - | 'RG8UI' - | 'RG16I' - | 'RG16UI' - | 'RG16F' - | 'RG32I' - | 'RG32UI' - | 'RG32F' - | 'RGB565' - | 'RGB8' - | 'RGB8_SNORM' - | 'RGB8I' - | 'RGB8UI' - | 'RGB16I' - | 'RGB16UI' - | 'RGB16F' - | 'RGB32I' - | 'RGB32UI' - | 'RGB32F' - | 'RGB9_E5' - | 'SRGB8' - | 'R11F_G11F_B10F' - | 'RGBA4' - | 'RGBA8' - | 'RGBA8_SNORM' - | 'RGBA8I' - | 'RGBA8UI' - | 'RGBA16I' - | 'RGBA16UI' - | 'RGBA16F' - | 'RGBA32I' - | 'RGBA32UI' - | 'RGBA32F' - | 'RGB5_A1' - | 'RGB10_A2' - | 'RGB10_A2UI' - | 'SRGB8_ALPHA8' - | 'SRGB8' - | 'DEPTH_COMPONENT16' - | 'DEPTH_COMPONENT24' - | 'DEPTH_COMPONENT32F' - | 'DEPTH24_STENCIL8' - | 'DEPTH32F_STENCIL8'; diff --git a/packages/canvas-three/three/src/core/BufferAttribute.d.ts b/packages/canvas-three/three/src/core/BufferAttribute.d.ts deleted file mode 100644 index 338d7889e..000000000 --- a/packages/canvas-three/three/src/core/BufferAttribute.d.ts +++ /dev/null @@ -1,592 +0,0 @@ -import { AttributeGPUType, Usage } from '../constants.js'; -import { Matrix3 } from '../math/Matrix3.js'; -import { Matrix4 } from '../math/Matrix4.js'; - -export type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array; - -export interface BufferAttributeJSON { - itemSize: number; - type: string; - array: number[]; - normalized: boolean; - - name?: string; - usage?: Usage; -} - -/** - * This class stores data for an attribute (such as vertex positions, face indices, normals, colors, UVs, and any custom attributes ) - * associated with a {@link THREE.BufferGeometry | BufferGeometry}, which allows for more efficient passing of data to the GPU - * @remarks - * When working with _vector-like_ data, the _`.fromBufferAttribute( attribute, index )`_ helper methods on - * {@link THREE.Vector2.fromBufferAttribute | Vector2}, - * {@link THREE.Vector3.fromBufferAttribute | Vector3}, - * {@link THREE.Vector4.fromBufferAttribute | Vector4}, and - * {@link THREE.Color.fromBufferAttribute | Color} classes may be helpful. - * @see {@link THREE.BufferGeometry | BufferGeometry} for details and a usage examples. - * @see Example: {@link https://threejs.org/examples/#webgl_buffergeometry | WebGL / BufferGeometry - Clean up Memory} - * @see {@link https://threejs.org/docs/index.html#api/en/core/BufferAttribute | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/BufferAttribute.js | Source} - */ -export class BufferAttribute { - /** - * This creates a new {@link THREE.GLBufferAttribute | GLBufferAttribute} object. - * @param array Must be a `TypedArray`. Used to instantiate the buffer. - * This array should have `itemSize * numVertices` elements, where numVertices is the number of vertices in the associated {@link THREE.BufferGeometry | BufferGeometry}. - * @param itemSize the number of values of the {@link array} that should be associated with a particular vertex. - * For instance, if this attribute is storing a 3-component vector (such as a _position_, _normal_, or _color_), - * then itemSize should be `3`. - * @param normalized Applies to integer data only. - * Indicates how the underlying data in the buffer maps to the values in the GLSL code. - * For instance, if {@link array} is an instance of `UInt16Array`, and {@link normalized} is true, - * the values `0` - `+65535` in the array data will be mapped to `0.0f` - `+1.0f` in the GLSL attribute. - * An `Int16Array` (signed) would map from `-32768` - `+32767` to `-1.0f` - `+1.0f`. - * If normalized is false, the values will be converted to floats unmodified, - * i.e. `32767` becomes `32767.0f`. - * Default `false`. - * @throws `TypeError` When the {@link array} is not a `TypedArray`; - */ - constructor(array: TypedArray, itemSize: number, normalized?: boolean); - - /** - * Optional name for this attribute instance. - * @defaultValue '' - */ - name: string; - - /** - * The {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray | TypedArray} holding data stored in the buffer. - * @returns `TypedArray` - */ - array: TypedArray; - - /** - * The length of vectors that are being stored in the {@link BufferAttribute.array | array}. - * @remarks Expects a `Integer` - */ - itemSize: number; - - /** - * Defines the intended usage pattern of the data store for optimization purposes. - * Corresponds to the {@link BufferAttribute.usage | usage} parameter of - * {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bufferData | WebGLRenderingContext.bufferData}. - * @remarks - * After the initial use of a buffer, its usage cannot be changed. Instead, instantiate a new one and set the desired usage before the next render. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/BufferAttributeUsage | Buffer Attribute Usage Constants} for all possible values. - * @see {@link BufferAttribute.setUsage | setUsage} - * @defaultValue {@link THREE.StaticDrawUsage | THREE.StaticDrawUsage}. - */ - usage: Usage; - - /** - * Configures the bound GPU type for use in shaders. Either {@link FloatType} or {@link IntType}, default is {@link FloatType}. - * - * Note: this only has an effect for integer arrays and is not configurable for float arrays. For lower precision - * float types, see https://threejs.org/docs/#api/en/core/bufferAttributeTypes/BufferAttributeTypes. - */ - gpuType: AttributeGPUType; - - /** - * This can be used to only update some components of stored vectors (for example, just the component related to color). - * @defaultValue `{ offset: number = 0; count: number = -1 }` - * @deprecated Will be removed in r169. Use "addUpdateRange()" instead. - */ - updateRange: { - /** - * Position at which to start update. - * @defaultValue `0` - */ - offset: number; - /** @defaultValue `-1`, which means don't use update ranges. */ - count: number; - }; - - /** - * This can be used to only update some components of stored vectors (for example, just the component related to - * color). Use the {@link .addUpdateRange} function to add ranges to this array. - */ - updateRanges: Array<{ - /** - * Position at which to start update. - */ - start: number; - /** - * The number of components to update. - */ - count: number; - }>; - - /** - * A version number, incremented every time the {@link BufferAttribute.needsUpdate | needsUpdate} property is set to true. - * @remarks Expects a `Integer` - * @defaultValue `0` - */ - version: number; - - /** - * Indicates how the underlying data in the buffer maps to the values in the GLSL shader code. - * @see `constructor` above for details. - * @defaultValue `false` - */ - normalized: boolean; - - /** - * Represents the number of items this buffer attribute stores. It is internally computed by dividing the - * {@link BufferAttribute.array | array}'s length by the {@link BufferAttribute.itemSize | itemSize}. Read-only - * property. - */ - readonly count: number; - - /** - * Flag to indicate that this attribute has changed and should be re-sent to the GPU. - * Set this to true when you modify the value of the array. - * @remarks Setting this to true also increments the {@link BufferAttribute.version | version}. - * @remarks _set-only property_. - */ - set needsUpdate(value: boolean); - - /** - * Read-only flag to check if a given object is of type {@link BufferAttribute}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isBufferAttribute: true; - - /** - * A callback function that is executed after the Renderer has transferred the attribute array data to the GPU. - */ - onUploadCallback: () => void; - - /** - * Sets the value of the {@link onUploadCallback} property. - * @see Example: {@link https://threejs.org/examples/#webgl_buffergeometry | WebGL / BufferGeometry} this is used to free memory after the buffer has been transferred to the GPU. - * @see {@link onUploadCallback} - * @param callback function that is executed after the Renderer has transferred the attribute array data to the GPU. - */ - onUpload(callback: () => void): this; - - /** - * Set {@link BufferAttribute.usage | usage} - * @remarks - * After the initial use of a buffer, its usage cannot be changed. Instead, instantiate a new one and set the desired usage before the next render. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/BufferAttributeUsage | Buffer Attribute Usage Constants} for all possible values. - * @see {@link BufferAttribute.usage | usage} - * @param value Corresponds to the {@link BufferAttribute.usage | usage} parameter of - * {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bufferData | WebGLRenderingContext.bufferData}. - */ - setUsage(usage: Usage): this; - - /** - * Adds a range of data in the data array to be updated on the GPU. Adds an object describing the range to the - * {@link .updateRanges} array. - */ - addUpdateRange(start: number, count: number): void; - - /** - * Clears the {@link .updateRanges} array. - */ - clearUpdateRanges(): void; - - /** - * @returns a copy of this {@link BufferAttribute}. - */ - clone(): BufferAttribute; - - /** - * Copies another {@link BufferAttribute} to this {@link BufferAttribute}. - * @param bufferAttribute - */ - copy(source: BufferAttribute): this; - - /** - * Copy a vector from bufferAttribute[index2] to {@link BufferAttribute.array | array}[index1]. - * @param index1 - * @param bufferAttribute - * @param index2 - */ - copyAt(index1: number, attribute: BufferAttribute, index2: number): this; - - /** - * Copy the array given here (which can be a normal array or `TypedArray`) into {@link BufferAttribute.array | array}. - * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set | TypedArray.set} for notes on requirements if copying a `TypedArray`. - */ - copyArray(array: ArrayLike): this; - - /** - * Applies matrix {@link Matrix3 | m} to every Vector3 element of this {@link BufferAttribute}. - * @param m - */ - applyMatrix3(m: Matrix3): this; - - /** - * Applies matrix {@link Matrix4 | m} to every Vector3 element of this {@link BufferAttribute}. - * @param m - */ - applyMatrix4(m: Matrix4): this; - - /** - * Applies normal matrix {@link Matrix3 | m} to every Vector3 element of this {@link BufferAttribute}. - * @param m - */ - applyNormalMatrix(m: Matrix3): this; - - /** - * Applies matrix {@link Matrix4 | m} to every Vector3 element of this {@link BufferAttribute}, interpreting the elements as a direction vectors. - * @param m - */ - transformDirection(m: Matrix4): this; - - /** - * Calls {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set | TypedArray.set}( {@link value}, {@link offset} ) - * on the {@link BufferAttribute.array | array}. - * @param value {@link Array | Array} or `TypedArray` from which to copy values. - * @param offset index of the {@link BufferAttribute.array | array} at which to start copying. Expects a `Integer`. Default `0`. - * @throws `RangeError` When {@link offset} is negative or is too large. - */ - set(value: ArrayLike | ArrayBufferView, offset?: number): this; - - /** - * Returns the given component of the vector at the given index. - */ - getComponent(index: number, component: number): number; - - /** - * Sets the given component of the vector at the given index. - */ - setComponent(index: number, component: number, value: number): void; - - /** - * Returns the x component of the vector at the given index. - * @param index Expects a `Integer` - */ - getX(index: number): number; - - /** - * Sets the x component of the vector at the given index. - * @param index Expects a `Integer` - * @param x - */ - setX(index: number, x: number): this; - - /** - * Returns the y component of the vector at the given index. - * @param index Expects a `Integer` - */ - getY(index: number): number; - - /** - * Sets the y component of the vector at the given index. - * @param index Expects a `Integer` - * @param y - */ - setY(index: number, y: number): this; - - /** - * Returns the z component of the vector at the given index. - * @param index Expects a `Integer` - */ - getZ(index: number): number; - - /** - * Sets the z component of the vector at the given index. - * @param index Expects a `Integer` - * @param z - */ - setZ(index: number, z: number): this; - - /** - * Returns the w component of the vector at the given index. - * @param index Expects a `Integer` - */ - getW(index: number): number; - - /** - * Sets the w component of the vector at the given index. - * @param index Expects a `Integer` - * @param w - */ - setW(index: number, z: number): this; - - /** - * Sets the x and y components of the vector at the given index. - * @param index Expects a `Integer` - * @param x - * @param y - */ - setXY(index: number, x: number, y: number): this; - - /** - * Sets the x, y and z components of the vector at the given index. - * @param index Expects a `Integer` - * @param x - * @param y - * @param z - */ - setXYZ(index: number, x: number, y: number, z: number): this; - - /** - * Sets the x, y, z and w components of the vector at the given index. - * @param index Expects a `Integer` - * @param x - * @param y - * @param z - * @param w - */ - setXYZW(index: number, x: number, y: number, z: number, w: number): this; - - /** - * Convert this object to three.js to the `data.attributes` part of {@link https://github.com/mrdoob/three.js/wiki/JSON-Geometry-format-4 | JSON Geometry format v4}, - */ - toJSON(): BufferAttributeJSON; -} - -/** - * A {@link THREE.BufferAttribute | BufferAttribute} for {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array: Int8Array} - * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects | TypedArray} - * @see {@link THREE.BufferAttribute | BufferAttribute} for details and for inherited methods and properties. - * @see {@link https://threejs.org/docs/index.html#api/en/core/bufferAttributeTypes/BufferAttributeTypes | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/BufferAttribute.js | Source} - */ -export class Int8BufferAttribute extends BufferAttribute { - /** - * This creates a new {@link THREE.Int8BufferAttribute | Int8BufferAttribute} object. - * @param array This can be a typed or untyped (normal) array or an integer length. An array value will be converted to `Int8Array`. - * If a length is given a new `TypedArray` will created, initialized with all elements set to zero. - * @param itemSize the number of values of the {@link array} that should be associated with a particular vertex. - * For instance, if this attribute is storing a 3-component vector (such as a _position_, _normal_, or _color_), - * then itemSize should be `3`. - * @param normalized Applies to integer data only. - * Indicates how the underlying data in the buffer maps to the values in the GLSL code. - * For instance, if {@link array} is an instance of `UInt16Array`, and {@link normalized} is true, - * the values `0` - `+65535` in the array data will be mapped to `0.0f` - `+1.0f` in the GLSL attribute. - * An `Int16Array` (signed) would map from `-32768` - `+32767` to `-1.0f` - `+1.0f`. - * If normalized is false, the values will be converted to floats unmodified, - * i.e. `32767` becomes `32767.0f`. - * Default `false`. - */ - constructor(array: Iterable | ArrayLike | ArrayBuffer | number, itemSize: number, normalized?: boolean); -} - -/** - * A {@link THREE.BufferAttribute | BufferAttribute} for {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array: Uint8Array} - * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects | TypedArray} - * @see {@link THREE.BufferAttribute | BufferAttribute} for details and for inherited methods and properties. - * @see {@link https://threejs.org/docs/index.html#api/en/core/bufferAttributeTypes/BufferAttributeTypes | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/BufferAttribute.js | Source} - */ -export class Uint8BufferAttribute extends BufferAttribute { - /** - * This creates a new {@link THREE.Uint8BufferAttribute | Uint8BufferAttribute} object. - * @param array This can be a typed or untyped (normal) array or an integer length. An array value will be converted to `Uint8Array`. - * If a length is given a new `TypedArray` will created, initialized with all elements set to zero. - * @param itemSize the number of values of the {@link array} that should be associated with a particular vertex. - * For instance, if this attribute is storing a 3-component vector (such as a _position_, _normal_, or _color_), - * then itemSize should be `3`. - * @param normalized Applies to integer data only. - * Indicates how the underlying data in the buffer maps to the values in the GLSL code. - * For instance, if {@link array} is an instance of `UInt16Array`, and {@link normalized} is true, - * the values `0` - `+65535` in the array data will be mapped to `0.0f` - `+1.0f` in the GLSL attribute. - * An `Int16Array` (signed) would map from `-32768` - `+32767` to `-1.0f` - `+1.0f`. - * If normalized is false, the values will be converted to floats unmodified, - * i.e. `32767` becomes `32767.0f`. - * Default `false`. - * @see {@link THREE.BufferAttribute | BufferAttribute} - */ - constructor(array: Iterable | ArrayLike | ArrayBuffer | number, itemSize: number, normalized?: boolean); -} - -/** - * A {@link THREE.BufferAttribute | BufferAttribute} for {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray: Uint8ClampedArray} - * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects | TypedArray} - * @see {@link THREE.BufferAttribute | BufferAttribute} for details and for inherited methods and properties. - * @see {@link https://threejs.org/docs/index.html#api/en/core/bufferAttributeTypes/BufferAttributeTypes | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/BufferAttribute.js | Source} - */ -export class Uint8ClampedBufferAttribute extends BufferAttribute { - /** - * This creates a new {@link THREE.Uint8ClampedBufferAttribute | Uint8ClampedBufferAttribute} object. - * @param array This can be a typed or untyped (normal) array or an integer length. An array value will be converted to `Uint8ClampedArray`. - * If a length is given a new `TypedArray` will created, initialized with all elements set to zero. - * @param itemSize the number of values of the {@link array} that should be associated with a particular vertex. - * For instance, if this attribute is storing a 3-component vector (such as a _position_, _normal_, or _color_), - * then itemSize should be `3`. - * @param normalized Applies to integer data only. - * Indicates how the underlying data in the buffer maps to the values in the GLSL code. - * For instance, if {@link array} is an instance of `UInt16Array`, and {@link normalized} is true, - * the values `0` - `+65535` in the array data will be mapped to `0.0f` - `+1.0f` in the GLSL attribute. - * An `Int16Array` (signed) would map from `-32768` - `+32767` to `-1.0f` - `+1.0f`. - * If normalized is false, the values will be converted to floats unmodified, - * i.e. `32767` becomes `32767.0f`. - * Default `false`. - * @see {@link THREE.BufferAttribute | BufferAttribute} - */ - constructor(array: Iterable | ArrayLike | ArrayBuffer | number, itemSize: number, normalized?: boolean); -} - -/** - * A {@link THREE.BufferAttribute | BufferAttribute} for {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array: Int16Array} - * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects | TypedArray} - * @see {@link THREE.BufferAttribute | BufferAttribute} for details and for inherited methods and properties. - * @see {@link https://threejs.org/docs/index.html#api/en/core/bufferAttributeTypes/BufferAttributeTypes | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/BufferAttribute.js | Source} - */ -export class Int16BufferAttribute extends BufferAttribute { - /** - * This creates a new {@link THREE.Int16BufferAttribute | Int16BufferAttribute} object. - * @param array This can be a typed or untyped (normal) array or an integer length. An array value will be converted to `Int16Array`. - * If a length is given a new `TypedArray` will created, initialized with all elements set to zero. - * @param itemSize the number of values of the {@link array} that should be associated with a particular vertex. - * For instance, if this attribute is storing a 3-component vector (such as a _position_, _normal_, or _color_), - * then itemSize should be `3`. - * @param normalized Applies to integer data only. - * Indicates how the underlying data in the buffer maps to the values in the GLSL code. - * For instance, if {@link array} is an instance of `UInt16Array`, and {@link normalized} is true, - * the values `0` - `+65535` in the array data will be mapped to `0.0f` - `+1.0f` in the GLSL attribute. - * An `Int16Array` (signed) would map from `-32768` - `+32767` to `-1.0f` - `+1.0f`. - * If normalized is false, the values will be converted to floats unmodified, - * i.e. `32767` becomes `32767.0f`. - * Default `false`. - * @see {@link THREE.BufferAttribute | BufferAttribute} - */ - constructor(array: Iterable | ArrayLike | ArrayBuffer | number, itemSize: number, normalized?: boolean); -} - -/** - * A {@link THREE.BufferAttribute | BufferAttribute} for {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array: Uint16Array} - * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects | TypedArray} - * @see {@link THREE.BufferAttribute | BufferAttribute} for details and for inherited methods and properties. - * @see {@link https://threejs.org/docs/index.html#api/en/core/bufferAttributeTypes/BufferAttributeTypes | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/BufferAttribute.js | Source} - */ -export class Uint16BufferAttribute extends BufferAttribute { - /** - * This creates a new {@link THREE.Uint16BufferAttribute | Uint16BufferAttribute} object. - * @param array This can be a typed or untyped (normal) array or an integer length. An array value will be converted to `Uint16Array`. - * If a length is given a new `TypedArray` will created, initialized with all elements set to zero. - * @param itemSize the number of values of the {@link array} that should be associated with a particular vertex. - * For instance, if this attribute is storing a 3-component vector (such as a _position_, _normal_, or _color_), - * then itemSize should be `3`. - * @param normalized Applies to integer data only. - * Indicates how the underlying data in the buffer maps to the values in the GLSL code. - * For instance, if {@link array} is an instance of `UInt16Array`, and {@link normalized} is true, - * the values `0` - `+65535` in the array data will be mapped to `0.0f` - `+1.0f` in the GLSL attribute. - * An `Int16Array` (signed) would map from `-32768` - `+32767` to `-1.0f` - `+1.0f`. - * If normalized is false, the values will be converted to floats unmodified, - * i.e. `32767` becomes `32767.0f`. - * Default `false`. - * @see {@link THREE.BufferAttribute | BufferAttribute} - */ - constructor(array: Iterable | ArrayLike | ArrayBuffer | number, itemSize: number, normalized?: boolean); -} - -/** - * A {@link THREE.BufferAttribute | BufferAttribute} for {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array: Int32Array} - * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects | TypedArray} - * @see {@link THREE.BufferAttribute | BufferAttribute} for details and for inherited methods and properties. - * @see {@link https://threejs.org/docs/index.html#api/en/core/bufferAttributeTypes/BufferAttributeTypes | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/BufferAttribute.js | Source} - */ -export class Int32BufferAttribute extends BufferAttribute { - /** - * This creates a new {@link THREE.Int32BufferAttribute | Int32BufferAttribute} object. - * @param array This can be a typed or untyped (normal) array or an integer length. An array value will be converted to `Int32Array`. - * If a length is given a new `TypedArray` will created, initialized with all elements set to zero. - * @param itemSize the number of values of the {@link array} that should be associated with a particular vertex. - * For instance, if this attribute is storing a 3-component vector (such as a _position_, _normal_, or _color_), - * then itemSize should be `3`. - * @param normalized Applies to integer data only. - * Indicates how the underlying data in the buffer maps to the values in the GLSL code. - * For instance, if {@link array} is an instance of `UInt16Array`, and {@link normalized} is true, - * the values `0` - `+65535` in the array data will be mapped to `0.0f` - `+1.0f` in the GLSL attribute. - * An `Int16Array` (signed) would map from `-32768` - `+32767` to `-1.0f` - `+1.0f`. - * If normalized is false, the values will be converted to floats unmodified, - * i.e. `32767` becomes `32767.0f`. - * Default `false`. - * @see {@link THREE.BufferAttribute | BufferAttribute} - */ - constructor(array: Iterable | ArrayLike | ArrayBuffer | number, itemSize: number, normalized?: boolean); -} - -/** - * A {@link THREE.BufferAttribute | BufferAttribute} for {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array: Uint32Array} - * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects | TypedArray} - * @see {@link THREE.BufferAttribute | BufferAttribute} for details and for inherited methods and properties. - * @see {@link https://threejs.org/docs/index.html#api/en/core/bufferAttributeTypes/BufferAttributeTypes | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/BufferAttribute.js | Source} - */ -export class Uint32BufferAttribute extends BufferAttribute { - /** - * This creates a new {@link THREE.Uint32BufferAttribute | Uint32BufferAttribute} object. - * @param array This can be a typed or untyped (normal) array or an integer length. An array value will be converted to `Uint32Array`. - * If a length is given a new `TypedArray` will created, initialized with all elements set to zero. - * @param itemSize the number of values of the {@link array} that should be associated with a particular vertex. - * For instance, if this attribute is storing a 3-component vector (such as a _position_, _normal_, or _color_), - * then itemSize should be `3`. - * @param normalized Applies to integer data only. - * Indicates how the underlying data in the buffer maps to the values in the GLSL code. - * For instance, if {@link array} is an instance of `UInt16Array`, and {@link normalized} is true, - * the values `0` - `+65535` in the array data will be mapped to `0.0f` - `+1.0f` in the GLSL attribute. - * An `Int16Array` (signed) would map from `-32768` - `+32767` to `-1.0f` - `+1.0f`. - * If normalized is false, the values will be converted to floats unmodified, - * i.e. `32767` becomes `32767.0f`. - * Default `false`. - * @see {@link THREE.BufferAttribute | BufferAttribute} - */ - constructor(array: Iterable | ArrayLike | ArrayBuffer | number, itemSize: number, normalized?: boolean); -} - -/** - * A {@link THREE.BufferAttribute | BufferAttribute} for {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array: Uint16Array} - * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects | TypedArray} - * @see {@link THREE.BufferAttribute | BufferAttribute} for details and for inherited methods and properties. - * @see {@link https://threejs.org/docs/index.html#api/en/core/bufferAttributeTypes/BufferAttributeTypes | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/BufferAttribute.js | Source} - */ -export class Float16BufferAttribute extends BufferAttribute { - /** - * This creates a new {@link THREE.Float16BufferAttribute | Float16BufferAttribute} object. - * @param array This can be a typed or untyped (normal) array or an integer length. An array value will be converted to `Uint16Array`. - * If a length is given a new `TypedArray` will created, initialized with all elements set to zero. - * @param itemSize the number of values of the {@link array} that should be associated with a particular vertex. - * For instance, if this attribute is storing a 3-component vector (such as a _position_, _normal_, or _color_), - * then itemSize should be `3`. - * @param normalized Applies to integer data only. - * Indicates how the underlying data in the buffer maps to the values in the GLSL code. - * For instance, if {@link array} is an instance of `UInt16Array`, and {@link normalized} is true, - * the values `0` - `+65535` in the array data will be mapped to `0.0f` - `+1.0f` in the GLSL attribute. - * An `Int16Array` (signed) would map from `-32768` - `+32767` to `-1.0f` - `+1.0f`. - * If normalized is false, the values will be converted to floats unmodified, - * i.e. `32767` becomes `32767.0f`. - * Default `false`. - * @see {@link THREE.BufferAttribute | BufferAttribute} - */ - constructor(array: Iterable | ArrayLike | ArrayBuffer | number, itemSize: number, normalized?: boolean); -} - -/** - * A {@link THREE.BufferAttribute | BufferAttribute} for {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array: Float32Array} - * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects | TypedArray} - * @see {@link THREE.BufferAttribute | BufferAttribute} for details and for inherited methods and properties. - * @see {@link https://threejs.org/docs/index.html#api/en/core/bufferAttributeTypes/BufferAttributeTypes | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/BufferAttribute.js | Source} - */ -export class Float32BufferAttribute extends BufferAttribute { - /** - * This creates a new {@link THREE.Float32BufferAttribute | Float32BufferAttribute} object. - * @param array This can be a typed or untyped (normal) array or an integer length. An array value will be converted to `Float32Array`. - * If a length is given a new `TypedArray` will created, initialized with all elements set to zero. - * @param itemSize the number of values of the {@link array} that should be associated with a particular vertex. - * For instance, if this attribute is storing a 3-component vector (such as a _position_, _normal_, or _color_), - * then itemSize should be `3`. - * @param normalized Applies to integer data only. - * Indicates how the underlying data in the buffer maps to the values in the GLSL code. - * For instance, if {@link array} is an instance of `UInt16Array`, and {@link normalized} is true, - * the values `0` - `+65535` in the array data will be mapped to `0.0f` - `+1.0f` in the GLSL attribute. - * An `Int16Array` (signed) would map from `-32768` - `+32767` to `-1.0f` - `+1.0f`. - * If normalized is false, the values will be converted to floats unmodified, - * i.e. `32767` becomes `32767.0f`. - * Default `false`. - * @see {@link THREE.BufferAttribute | BufferAttribute} - */ - constructor(array: Iterable | ArrayLike | ArrayBuffer | number, itemSize: number, normalized?: boolean); -} diff --git a/packages/canvas-three/three/src/core/BufferGeometry.d.ts b/packages/canvas-three/three/src/core/BufferGeometry.d.ts deleted file mode 100644 index 564e10cd6..000000000 --- a/packages/canvas-three/three/src/core/BufferGeometry.d.ts +++ /dev/null @@ -1,417 +0,0 @@ -import { Box3 } from '../math/Box3.js'; -import { Matrix4 } from '../math/Matrix4.js'; -import { Quaternion } from '../math/Quaternion.js'; -import { Sphere } from '../math/Sphere.js'; -import { Vector2 } from '../math/Vector2.js'; -import { Vector3, Vector3Tuple } from '../math/Vector3.js'; -import { BufferAttribute, BufferAttributeJSON } from './BufferAttribute.js'; -import { EventDispatcher } from './EventDispatcher.js'; -import { GLBufferAttribute } from './GLBufferAttribute.js'; -import { InterleavedBufferAttribute } from './InterleavedBufferAttribute.js'; - -export type NormalBufferAttributes = Record; -export type NormalOrGLBufferAttributes = Record; - -export interface BufferGeometryJSON { - metadata?: { version: number; type: string; generator: string }; - - uuid: string; - type: string; - - name?: string; - userData?: Record; - - data?: { - attributes: Record; - - index?: { type: string; array: number[] }; - - morphAttributes?: Record; - morphTargetsRelative?: boolean; - - groups?: GeometryGroup[]; - - boundingSphere?: { center: Vector3Tuple; radius: number }; - }; -} - -export interface GeometryGroup { - /** - * Specifies the first element in this draw call – the first vertex for non-indexed geometry, otherwise the first triangle index. - * @remarks Expects a `Integer` - */ - start: number; - /** - * Specifies how many vertices (or indices) are included. - * @remarks Expects a `Integer` - */ - count: number; - /** - * Specifies the material array index to use. - * @remarks Expects a `Integer` - */ - materialIndex?: number | undefined; -} - -/** - * A representation of mesh, line, or point geometry - * Includes vertex positions, face indices, normals, colors, UVs, and custom attributes within buffers, reducing the cost of passing all this data to the GPU. - * @remarks - * To read and edit data in BufferGeometry attributes, see {@link THREE.BufferAttribute | BufferAttribute} documentation. - * @example - * ```typescript - * const geometry = new THREE.BufferGeometry(); - * - * // create a simple square shape. We duplicate the top left and bottom right - * // vertices because each vertex needs to appear once per triangle. - * const vertices = new Float32Array( [ - * -1.0, -1.0, 1.0, // v0 - * 1.0, -1.0, 1.0, // v1 - * 1.0, 1.0, 1.0, // v2 - * - * 1.0, 1.0, 1.0, // v3 - * -1.0, 1.0, 1.0, // v4 - * -1.0, -1.0, 1.0 // v5 - * ] ); - * - * // itemSize = 3 because there are 3 values (components) per vertex - * geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) ); - * const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } ); - * const mesh = new THREE.Mesh( geometry, material ); - * ``` - * @example - * ```typescript - * const geometry = new THREE.BufferGeometry(); - * - * const vertices = new Float32Array( [ - * -1.0, -1.0, 1.0, // v0 - * 1.0, -1.0, 1.0, // v1 - * 1.0, 1.0, 1.0, // v2 - * -1.0, 1.0, 1.0, // v3 - * ] ); - * geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) ); - * - * const indices = [ - * 0, 1, 2, - * 2, 3, 0, - * ]; - * - * geometry.setIndex( indices ); - * geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) ); - * - * const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } ); - * const mesh = new THREE.Mesh( geometry, material ); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_buffergeometry | Mesh with non-indexed faces} - * @see Example: {@link https://threejs.org/examples/#webgl_buffergeometry_indexed | Mesh with indexed faces} - * @see Example: {@link https://threejs.org/examples/#webgl_buffergeometry_lines | Lines} - * @see Example: {@link https://threejs.org/examples/#webgl_buffergeometry_lines_indexed | Indexed Lines} - * @see Example: {@link https://threejs.org/examples/#webgl_buffergeometry_custom_attributes_particles | Particles} - * @see Example: {@link https://threejs.org/examples/#webgl_buffergeometry_rawshader | Raw Shaders} - * @see {@link https://threejs.org/docs/index.html#api/en/core/BufferGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/BufferGeometry.js | Source} - */ -export class BufferGeometry extends EventDispatcher<{ dispose: {} }> { - /** - * This creates a new {@link THREE.BufferGeometry | BufferGeometry} object. - */ - constructor(); - - /** - * Unique number for this {@link THREE.BufferGeometry | BufferGeometry} instance. - * @remarks Expects a `Integer` - */ - id: number; - - /** - * {@link http://en.wikipedia.org/wiki/Universally_unique_identifier | UUID} of this object instance. - * @remarks This gets automatically assigned and shouldn't be edited. - */ - uuid: string; - - /** - * Optional name for this {@link THREE.BufferGeometry | BufferGeometry} instance. - * @defaultValue `''` - */ - name: string; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `BufferGeometry` - */ - readonly type: string | 'BufferGeometry'; - - /** - * Allows for vertices to be re-used across multiple triangles; this is called using "indexed triangles". - * Each triangle is associated with the indices of three vertices. This attribute therefore stores the index of each vertex for each triangular face. - * If this attribute is not set, the {@link THREE.WebGLRenderer | renderer} assumes that each three contiguous positions represent a single triangle. - * @defaultValue `null` - */ - index: BufferAttribute | null; - - /** - * This hashmap has as id the name of the attribute to be set and as value the {@link THREE.BufferAttribute | buffer} to set it to. Rather than accessing this property directly, - * use {@link setAttribute | .setAttribute} and {@link getAttribute | .getAttribute} to access attributes of this geometry. - * @defaultValue `{}` - */ - attributes: Attributes; - - /** - * Hashmap of {@link THREE.BufferAttribute | BufferAttributes} holding details of the geometry's morph targets. - * @remarks - * Once the geometry has been rendered, the morph attribute data cannot be changed. - * You will have to call {@link dispose | .dispose}(), and create a new instance of {@link THREE.BufferGeometry | BufferGeometry}. - * @defaultValue `{}` - */ - morphAttributes: { - [name: string]: Array; // TODO Replace for 'Record<>' - }; - - /** - * Used to control the morph target behavior; when set to true, the morph target data is treated as relative offsets, rather than as absolute positions/normals. - * @defaultValue `false` - */ - morphTargetsRelative: boolean; - - /** - * Split the geometry into groups, each of which will be rendered in a separate WebGL draw call. This allows an array of materials to be used with the geometry. - * @remarks Every vertex and index must belong to exactly one group — groups must not share vertices or indices, and must not leave vertices or indices unused. - * @remarks Use {@link addGroup | .addGroup} to add groups, rather than modifying this array directly. - * @defaultValue `[]` - */ - groups: GeometryGroup[]; - - /** - * Bounding box for the {@link THREE.BufferGeometry | BufferGeometry}, which can be calculated with {@link computeBoundingBox | .computeBoundingBox()}. - * @remarks Bounding boxes aren't computed by default. They need to be explicitly computed, otherwise they are `null`. - * @defaultValue `null` - */ - boundingBox: Box3 | null; - - /** - * Bounding sphere for the {@link THREE.BufferGeometry | BufferGeometry}, which can be calculated with {@link computeBoundingSphere | .computeBoundingSphere()}. - * @remarks bounding spheres aren't computed by default. They need to be explicitly computed, otherwise they are `null`. - * @defaultValue `null` - */ - boundingSphere: Sphere | null; - - /** - * Determines the part of the geometry to render. This should not be set directly, instead use {@link setDrawRange | .setDrawRange(...)}. - * @remarks For non-indexed {@link THREE.BufferGeometry | BufferGeometry}, count is the number of vertices to render. - * @remarks For indexed {@link THREE.BufferGeometry | BufferGeometry}, count is the number of indices to render. - * @defaultValue `{ start: 0, count: Infinity }` - */ - drawRange: { start: number; count: number }; - - /** - * An object that can be used to store custom data about the BufferGeometry. It should not hold references to functions as these will not be cloned. - * @defaultValue `{}` - */ - userData: Record; - - /** - * Read-only flag to check if a given object is of type {@link BufferGeometry}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isBufferGeometry: true; - - /** - * Return the {@link index | .index} buffer. - */ - getIndex(): BufferAttribute | null; - - /** - * Set the {@link THREE.BufferGeometry.index | .index} buffer. - * @param index - */ - setIndex(index: BufferAttribute | number[] | null): this; - - /** - * Sets an {@link attributes | attribute} to this geometry with the specified name. - * @remarks - * Use this rather than the attributes property, because an internal hashmap of {@link attributes | .attributes} is maintained to speed up iterating over attributes. - * @param name - * @param attribute - */ - setAttribute(name: K, attribute: Attributes[K]): this; - - /** - * Returns the {@link attributes | attribute} with the specified name. - * @param name - */ - getAttribute(name: K): Attributes[K]; - - /** - * Deletes the {@link attributes | attribute} with the specified name. - * @param name - */ - deleteAttribute(name: keyof Attributes): this; - - /** - * Returns true if the {@link attributes | attribute} with the specified name exists. - * @param name - */ - hasAttribute(name: keyof Attributes): boolean; - - /** - * Adds a group to this geometry - * @see the {@link BufferGeometry.groups | groups} property for details. - * @param start - * @param count - * @param materialIndex - */ - addGroup(start: number, count: number, materialIndex?: number): void; - - /** - * Clears all groups. - */ - clearGroups(): void; - - /** - * Set the {@link drawRange | .drawRange} property - * @remarks For non-indexed BufferGeometry, count is the number of vertices to render - * @remarks For indexed BufferGeometry, count is the number of indices to render. - * @param start - * @param count is the number of vertices or indices to render. Expects a `Integer` - */ - setDrawRange(start: number, count: number): void; - - /** - * Applies the matrix transform to the geometry. - * @param matrix - */ - applyMatrix4(matrix: Matrix4): this; - - /** - * Applies the rotation represented by the quaternion to the geometry. - * @param quaternion - */ - applyQuaternion(quaternion: Quaternion): this; - - /** - * Rotate the geometry about the X axis. This is typically done as a one time operation, and not during a loop. - * @remarks Use {@link THREE.Object3D.rotation | Object3D.rotation} for typical real-time mesh rotation. - * @param angle radians. Expects a `Float` - */ - rotateX(angle: number): this; - - /** - * Rotate the geometry about the Y axis. - * @remarks This is typically done as a one time operation, and not during a loop. - * @remarks Use {@link THREE.Object3D.rotation | Object3D.rotation} for typical real-time mesh rotation. - * @param angle radians. Expects a `Float` - */ - rotateY(angle: number): this; - - /** - * Rotate the geometry about the Z axis. - * @remarks This is typically done as a one time operation, and not during a loop. - * @remarks Use {@link THREE.Object3D.rotation | Object3D.rotation} for typical real-time mesh rotation. - * @param angle radians. Expects a `Float` - */ - rotateZ(angle: number): this; - - /** - * Translate the geometry. - * @remarks This is typically done as a one time operation, and not during a loop. - * @remarks Use {@link THREE.Object3D.position | Object3D.position} for typical real-time mesh rotation. - * @param x Expects a `Float` - * @param y Expects a `Float` - * @param z Expects a `Float` - */ - translate(x: number, y: number, z: number): this; - - /** - * Scale the geometry data. - * @remarks This is typically done as a one time operation, and not during a loop. - * @remarks Use {@link THREE.Object3D.scale | Object3D.scale} for typical real-time mesh scaling. - * @param x Expects a `Float` - * @param y Expects a `Float` - * @param z Expects a `Float` - */ - scale(x: number, y: number, z: number): this; - - /** - * Rotates the geometry to face a point in space. - * @remarks This is typically done as a one time operation, and not during a loop. - * @remarks Use {@link THREE.Object3D.lookAt | Object3D.lookAt} for typical real-time mesh usage. - * @param vector A world vector to look at. - */ - lookAt(vector: Vector3): this; - - /** - * Center the geometry based on the bounding box. - */ - center(): this; - - /** - * Sets the attributes for this BufferGeometry from an array of points. - * @param points - */ - setFromPoints(points: Vector3[] | Vector2[]): this; - - /** - * Computes the bounding box of the geometry, and updates the {@link .boundingBox} attribute. The bounding box is - * not computed by the engine; it must be computed by your app. You may need to recompute the bounding box if the - * geometry vertices are modified. - */ - computeBoundingBox(): void; - - /** - * Computes the bounding sphere of the geometry, and updates the {@link .boundingSphere} attribute. The engine - * automatically computes the bounding sphere when it is needed, e.g., for ray casting or view frustum culling. You - * may need to recompute the bounding sphere if the geometry vertices are modified. - */ - computeBoundingSphere(): void; - - /** - * Calculates and adds a tangent attribute to this geometry. - * The computation is only supported for indexed geometries and if position, normal, and uv attributes are defined - * @remarks - * When using a tangent space normal map, prefer the MikkTSpace algorithm provided by - * {@link BufferGeometryUtils.computeMikkTSpaceTangents} instead. - */ - computeTangents(): void; - - /** - * Computes vertex normals for the given vertex data. For indexed geometries, the method sets each vertex normal to - * be the average of the face normals of the faces that share that vertex. For non-indexed geometries, vertices are - * not shared, and the method sets each vertex normal to be the same as the face normal. - */ - computeVertexNormals(): void; - - /** - * Every normal vector in a geometry will have a magnitude of 1 - * @remarks This will correct lighting on the geometry surfaces. - */ - normalizeNormals(): void; - - /** - * Return a non-index version of an indexed BufferGeometry. - */ - toNonIndexed(): BufferGeometry; - - /** - * Convert the buffer geometry to three.js {@link https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4 | JSON Object/Scene format}. - */ - toJSON(): BufferGeometryJSON; - - /** - * Creates a clone of this BufferGeometry - */ - clone(): this; - - /** - * Copies another BufferGeometry to this BufferGeometry. - * @param source - */ - copy(source: BufferGeometry): this; - - /** - * Frees the GPU-related resources allocated by this instance. - * @remarks Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/core/Clock.d.ts b/packages/canvas-three/three/src/core/Clock.d.ts deleted file mode 100644 index 31b170e55..000000000 --- a/packages/canvas-three/three/src/core/Clock.d.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Object for keeping track of time - * @remarks - * This uses {@link https://developer.mozilla.org/en-US/docs/Web/API/Performance/now | performance.now} if it is available, - * otherwise it reverts to the less accurate {@link https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/now | Date.now}. - * @see {@link https://threejs.org/docs/index.html#api/en/core/Clock | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/Clock.js | Source} - */ -export class Clock { - /** - * Create a new instance of {@link THREE.Clock | Clock} - * @param autoStart - Whether to automatically start the clock when {@link getDelta | .getDelta()} is called for the first time. Default `true` - */ - constructor(autoStart?: boolean); - - /** - * If set, starts the clock automatically when {@link getDelta | .getDelta()} is called for the first time. - * @defaultValue `true` - */ - autoStart: boolean; - - /** - * Holds the time at which the clock's {@link start | .start()} method was last called. - * @defaultValue `0` - */ - startTime: number; - - /** - * Holds the time at which the clock's {@link start | .start()}, {@link getElapsedTime | .getElapsedTime()} or {@link getDelta | .getDelta()} methods were last called. - * @defaultValue `0` - */ - oldTime: number; - - /** - * Keeps track of the total time that the clock has been running. - * @defaultValue `0` - */ - elapsedTime: number; - - /** - * Whether the clock is running or not. - * @defaultValue `false` - */ - running: boolean; - - /** - * Starts clock. - * @remarks - * Also sets the {@link startTime | .startTime} and {@link oldTime | .oldTime} to the current time, - * sets {@link elapsedTime | .elapsedTime} to `0` and {@link running | .running} to `true`. - */ - start(): void; - - /** - * Stops clock and sets {@link oldTime | oldTime} to the current time. - */ - stop(): void; - - /** - * Get the seconds passed since the clock started and sets {@link oldTime | .oldTime} to the current time. - * @remarks - * If {@link autoStart | .autoStart} is `true` and the clock is not running, also starts the clock. - */ - getElapsedTime(): number; - - /** - * Get the seconds passed since the time {@link oldTime | .oldTime} was set and sets {@link oldTime | .oldTime} to the current time. - * @remarks - * If {@link autoStart | .autoStart} is `true` and the clock is not running, also starts the clock. - */ - getDelta(): number; -} diff --git a/packages/canvas-three/three/src/core/EventDispatcher.d.ts b/packages/canvas-three/three/src/core/EventDispatcher.d.ts deleted file mode 100644 index 1a452a027..000000000 --- a/packages/canvas-three/three/src/core/EventDispatcher.d.ts +++ /dev/null @@ -1,74 +0,0 @@ -/** - * The minimal basic Event that can be dispatched by a {@link EventDispatcher<>}. - */ -export interface BaseEvent { - readonly type: TEventType; -} - -/** - * The minimal expected contract of a fired Event that was dispatched by a {@link EventDispatcher<>}. - */ -export interface Event { - readonly type: TEventType; - readonly target: TTarget; -} - -export type EventListener = (event: TEventData & Event) => void; - -/** - * JavaScript events for custom objects - * @example - * ```typescript - * // Adding events to a custom object - * class Car extends EventDispatcher { - * start() { - * this.dispatchEvent( { type: 'start', message: 'vroom vroom!' } ); - * } - * }; - * // Using events with the custom object - * const car = new Car(); - * car.addEventListener( 'start', ( event ) => { - * alert( event.message ); - * } ); - * car.start(); - * ``` - * @see {@link https://github.com/mrdoob/eventdispatcher.js | mrdoob EventDispatcher on GitHub} - * @see {@link https://threejs.org/docs/index.html#api/en/core/EventDispatcher | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/EventDispatcher.js | Source} - */ -export class EventDispatcher { - /** - * Creates {@link THREE.EventDispatcher | EventDispatcher} object. - */ - constructor(); - - /** - * Adds a listener to an event type. - * @param type The type of event to listen to. - * @param listener The function that gets called when the event is fired. - */ - addEventListener>(type: T, listener: EventListener): void; - addEventListener(type: T, listener: EventListener<{}, T, this>): void; - - /** - * Checks if listener is added to an event type. - * @param type The type of event to listen to. - * @param listener The function that gets called when the event is fired. - */ - hasEventListener>(type: T, listener: EventListener): boolean; - hasEventListener(type: T, listener: EventListener<{}, T, this>): boolean; - - /** - * Removes a listener from an event type. - * @param type The type of the listener that gets removed. - * @param listener The listener function that gets removed. - */ - removeEventListener>(type: T, listener: EventListener): void; - removeEventListener(type: T, listener: EventListener<{}, T, this>): void; - - /** - * Fire an event type. - * @param event The event that gets fired. - */ - dispatchEvent>(event: BaseEvent & TEventMap[T]): void; -} diff --git a/packages/canvas-three/three/src/core/GLBufferAttribute.d.ts b/packages/canvas-three/three/src/core/GLBufferAttribute.d.ts deleted file mode 100644 index 7058d2b9c..000000000 --- a/packages/canvas-three/three/src/core/GLBufferAttribute.d.ts +++ /dev/null @@ -1,121 +0,0 @@ -/** - * This buffer attribute class does not construct a VBO. - * Instead, it uses whatever VBO is passed in constructor and can later be altered via the {@link buffer | .buffer} property. - * @remarks - * It is required to pass additional params alongside the VBO - * Those are: the GL context, the GL data type, the number of components per vertex, the number of bytes per component, and the number of vertices. - * @remarks - * The most common use case for this class is when some kind of GPGPU calculation interferes or even produces the VBOs in question. - * @see Example: {@link https://threejs.org/examples/#webgl_buffergeometry_glbufferattribute | WebGL / buffergeometry / glbufferattribute} - * @see {@link https://threejs.org/docs/index.html#api/en/core/GLBufferAttribute | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/GLBufferAttribute.js | Source} - */ -export class GLBufferAttribute { - /** - * This creates a new GLBufferAttribute object. - * @param buffer Must be a {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLBuffer | WebGLBuffer}. See {@link GLBufferAttribute.buffer | .buffer} - * @param type One of {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Constants#Data_types | WebGL Data Types}. See {@link GLBufferAttribute.type | .type} - * @param itemSize How many values make up each item (vertex). See {@link GLBufferAttribute.itemSize | .itemSize} - * @param elementSize `1`, `2` or `4`. The corresponding size (in bytes) for the given {@link type} param. See {@link GLBufferAttribute.elementSize | .elementSize} - * @param count The expected number of vertices in VBO. See {@link GLBufferAttribute.count | .count} - */ - constructor(buffer: WebGLBuffer, type: GLenum, itemSize: number, elementSize: 1 | 2 | 4, count: number); - - /** - * Read-only flag to check if a given object is of type {@link GLBufferAttribute}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isGLBufferAttribute: true; - - /** - * Optional name for this attribute instance. - * @defaultValue `""` - */ - name: string; - - /** - * The current {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLBuffer | WebGLBuffer} instance. - */ - buffer: WebGLBuffer; - - /** - * A {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Constants#Data_types | WebGL Data Type} describing the underlying VBO contents. - * - * #### WebGL Data Type (`GLenum`) - * - gl.BYTE: 0x1400 - * - gl.UNSIGNED_BYTE: 0x1401 - * - gl.SHORT: 0x1402 - * - gl.UNSIGNED_SHORT: 0x1403 - * - gl.INT: 0x1404 - * - gl.UNSIGNED_INT: 0x1405 - * - gl.FLOAT: 0x1406 - * @remarks Set this property together with {@link elementSize | .elementSize}. The recommended way is using the {@link setType | .setType()} method. - * @remarks Expects a `DataType` `GLenum` _possible values:_ `0x1400` `0x1401` `0x1402` `0x1403` `0x1404` `0x1405` `0x1406` - */ - type: GLenum; - - /** - * How many values make up each item (vertex). - * @remarks The number of values of the array that should be associated with a particular vertex. - * For instance, if this attribute is storing a 3-component vector (such as a position, normal, or color), then itemSize should be 3. - * @remarks Expects a `Integer` - */ - itemSize: number; - - /** - * Stores the corresponding size in bytes for the current {@link type | .type} property value. - * - * The corresponding size (_in bytes_) for the given "type" param. - * #### WebGL Data Type (`GLenum`) - * - gl.BYTE: 1 - * - gl.UNSIGNED_BYTE: 1 - * - gl.SHORT: 2 - * - gl.UNSIGNED_SHORT: 2 - * - gl.INT: 4 - * - gl.UNSIGNED_INT: 4 - * - gl.FLOAT: 4 - * @remarks Set this property together with {@link type | .type}. The recommended way is using the {@link setType | .setType} method. - * @see `constructor`` for a list of known type sizes. - * @remarks Expects a `1`, `2` or `4` - */ - elementSize: 1 | 2 | 4; - - /** - * The expected number of vertices in VBO. - * @remarks Expects a `Integer` - */ - count: number; - - /** - * A version number, incremented every time the needsUpdate property is set to true. - * @remarks Expects a `Integer` - */ - version: number; - - /** - * Setting this to true increments {@link version | .version}. - * @remarks _set-only property_. - */ - set needsUpdate(value: boolean); - - /** - * Sets the {@link buffer | .buffer} property. - */ - setBuffer(buffer: WebGLBuffer): this; - - /** - * Sets the both {@link GLBufferAttribute.type | type} and {@link GLBufferAttribute.elementSize | elementSize} properties. - */ - setType(type: GLenum, elementSize: 1 | 2 | 4): this; - - /** - * Sets the {@link GLBufferAttribute.itemSize | itemSize} property. - */ - setItemSize(itemSize: number): this; - - /** - * Sets the {@link GLBufferAttribute.count | count} property. - */ - setCount(count: number): this; -} diff --git a/packages/canvas-three/three/src/core/InstancedBufferAttribute.d.ts b/packages/canvas-three/three/src/core/InstancedBufferAttribute.d.ts deleted file mode 100644 index ad4ada85a..000000000 --- a/packages/canvas-three/three/src/core/InstancedBufferAttribute.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { BufferAttribute, TypedArray } from './BufferAttribute.js'; - -/** - * An instanced version of {@link THREE.BufferAttribute | BufferAttribute}. - * @see {@link https://threejs.org/docs/index.html#api/en/core/InstancedBufferAttribute | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/InstancedBufferAttribute.js | Source} - */ -export class InstancedBufferAttribute extends BufferAttribute { - /** - * Create a new instance of {@link THREE.InstancedBufferAttribute | InstancedBufferAttribute} - * @param array - * @param itemSize - * @param normalized - * @param meshPerAttribute - */ - constructor(array: TypedArray, itemSize: number, normalized?: boolean, meshPerAttribute?: number); - - /** - * Defines how often a value of this buffer attribute should be repeated. - * A value of one means that each value of the instanced attribute is used for a single instance. - * A value of two means that each value is used for two consecutive instances (and so on). - * @defaultValue `1` - */ - meshPerAttribute: number; - - /** - * Read-only flag to check if a given object is of type {@link InstancedBufferAttribute}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isInstancedBufferAttribute: true; -} diff --git a/packages/canvas-three/three/src/core/InstancedBufferGeometry.d.ts b/packages/canvas-three/three/src/core/InstancedBufferGeometry.d.ts deleted file mode 100644 index 9df22209b..000000000 --- a/packages/canvas-three/three/src/core/InstancedBufferGeometry.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { BufferGeometry } from './BufferGeometry.js'; - -/** - * An instanced version of {@link THREE.BufferGeometry | BufferGeometry}. - * @see {@link https://threejs.org/docs/index.html#api/en/core/InstancedBufferGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/InstancedBufferGeometry.js | Source} - */ -export class InstancedBufferGeometry extends BufferGeometry { - /** - * Create a new instance of {@link InstancedBufferGeometry} - */ - constructor(); - - /** - * @defaultValue `InstancedBufferGeometry` - */ - type: string; - - /** - * Read-only flag to check if a given object is of type {@link InstancedBufferGeometry}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isInstancedBufferGeometry: true; - - /** - * @defaultValue `Infinity` - */ - instanceCount: number; - - /** - * Copies the given {@link InstancedBufferGeometry} to this instance. - * @param source - * @override - */ - copy(source: InstancedBufferGeometry): this; -} diff --git a/packages/canvas-three/three/src/core/InstancedInterleavedBuffer.d.ts b/packages/canvas-three/three/src/core/InstancedInterleavedBuffer.d.ts deleted file mode 100644 index ef65b2e88..000000000 --- a/packages/canvas-three/three/src/core/InstancedInterleavedBuffer.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { TypedArray } from './BufferAttribute.js'; -import { InterleavedBuffer } from './InterleavedBuffer.js'; - -/** - * An instanced version of {@link THREE.InterleavedBuffer | InterleavedBuffer}. - * @see {@link https://threejs.org/docs/index.html#api/en/core/InstancedInterleavedBuffer | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/InstancedInterleavedBuffer.js | Source} - */ -export class InstancedInterleavedBuffer extends InterleavedBuffer { - /** - * Create a new instance of {@link InstancedInterleavedBuffer} - * @param array - * @param itemSize - * @param meshPerAttribute - */ - constructor(array: TypedArray, stride: number, meshPerAttribute?: number); - - /** - * @defaultValue `1` - */ - meshPerAttribute: number; -} diff --git a/packages/canvas-three/three/src/core/InterleavedBuffer.d.ts b/packages/canvas-three/three/src/core/InterleavedBuffer.d.ts deleted file mode 100644 index b92416d08..000000000 --- a/packages/canvas-three/three/src/core/InterleavedBuffer.d.ts +++ /dev/null @@ -1,162 +0,0 @@ -import { Usage } from '../constants.js'; -import { TypedArray } from './BufferAttribute.js'; -import { InterleavedBufferAttribute } from './InterleavedBufferAttribute.js'; - -/** - * **"Interleaved"** means that multiple attributes, possibly of different types, (e.g., _position, normal, uv, color_) are packed into a single array buffer. - * An introduction into interleaved arrays can be found here: {@link https://blog.tojicode.com/2011/05/interleaved-array-basics.html | Interleaved array basics} - * @see Example: {@link https://threejs.org/examples/#webgl_buffergeometry_points_interleaved | webgl / buffergeometry / points / interleaved} - * @see {@link https://threejs.org/docs/index.html#api/en/core/InterleavedBuffer | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/InterleavedBuffer.js | Source} - */ -export class InterleavedBuffer { - readonly isInterleavedBuffer: true; - - /** - * Create a new instance of {@link InterleavedBuffer} - * @param array A {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray | TypedArray} with a shared buffer. Stores the geometry data. - * @param stride The number of typed-array elements per vertex. Expects a `Integer` - */ - constructor(array: TypedArray, stride: number); - - /** - * A {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray | TypedArray} with a shared buffer. Stores the geometry data. - */ - array: TypedArray; - - /** - * The number of {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray | TypedArray} elements per vertex. - * @remarks Expects a `Integer` - */ - stride: number; - - /** - * Defines the intended usage pattern of the data store for optimization purposes. - * Corresponds to the {@link BufferAttribute.usage | usage} parameter of - * {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bufferData | WebGLRenderingContext.bufferData}. - * @remarks - * After the initial use of a buffer, its usage cannot be changed. Instead, instantiate a new one and set the desired usage before the next render. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/BufferAttributeUsage | Buffer Attribute Usage Constants} for all possible values. - * @see {@link BufferAttribute.setUsage | setUsage} - * @defaultValue {@link THREE.StaticDrawUsage | THREE.StaticDrawUsage}. - */ - usage: Usage; - - /** - * Object containing offset and count. - * @defaultValue `{ offset: number = 0; count: number = -1 }` - * @deprecated Will be removed in r169. Use "addUpdateRange()" instead. - */ - updateRange: { - /** @defaultValue `0` */ - offset: number; - /** @defaultValue `-1` */ - count: number; - }; - - /** - * This can be used to only update some components of stored data. Use the {@link .addUpdateRange} function to add - * ranges to this array. - */ - updateRanges: Array<{ - /** - * Position at which to start update. - */ - start: number; - /** - * The number of components to update. - */ - count: number; - }>; - - /** - * A version number, incremented every time the {@link BufferAttribute.needsUpdate | needsUpdate} property is set to true. - * @remarks Expects a `Integer` - * @defaultValue `0` - */ - version: number; - - /** - * Gives the total number of elements in the array. - * @remarks Expects a `Integer` - * @defaultValue 0 - */ - count: number; - - /** - * Flag to indicate that this attribute has changed and should be re-sent to the GPU. - * Set this to true when you modify the value of the array. - * @remarks Setting this to true also increments the {@link BufferAttribute.version | version}. - * @remarks _set-only property_. - */ - set needsUpdate(value: boolean); - - /** - * {@link http://en.wikipedia.org/wiki/Universally_unique_identifier | UUID} of this object instance. - * @remarks This gets automatically assigned and shouldn't be edited. - */ - uuid: string; - - /** - * Calls {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set | TypedArray.set}( {@link value}, {@link offset} ) - * on the {@link BufferAttribute.array | array}. - * @param value The source `TypedArray`. - * @param offset index of the {@link BufferAttribute.array | array} at which to start copying. Expects a `Integer`. Default `0`. - * @throws `RangeError` When {@link offset} is negative or is too large. - */ - set(value: ArrayLike, offset: number): this; - - /** - * Set {@link BufferAttribute.usage | usage} - * @remarks - * After the initial use of a buffer, its usage cannot be changed. Instead, instantiate a new one and set the desired usage before the next render. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/BufferAttributeUsage | Buffer Attribute Usage Constants} for all possible values. - * @see {@link BufferAttribute.usage | usage} - * @param value Corresponds to the {@link BufferAttribute.usage | usage} parameter of - * {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bufferData | WebGLRenderingContext.bufferData}. - */ - setUsage(value: Usage): this; - - /** - * Adds a range of data in the data array to be updated on the GPU. Adds an object describing the range to the - * {@link .updateRanges} array. - */ - addUpdateRange(start: number, count: number): void; - - /** - * Clears the {@link .updateRanges} array. - */ - clearUpdateRanges(): void; - - /** - * Copies another {@link InterleavedBuffer} to this {@link InterleavedBuffer} instance. - * @param source - */ - copy(source: InterleavedBuffer): this; - - /** - * Copies data from {@link attribute}[{@link index2}] to {@link InterleavedBuffer.array | array}[{@link index1}]. - * @param index1 Expects a `Integer` - * @param attribute - * @param index2 Expects a `Integer` - */ - copyAt(index1: number, attribute: InterleavedBufferAttribute, index2: number): this; - - /** - * Creates a clone of this {@link InterleavedBuffer}. - * @param data This object holds shared array buffers required for properly cloning geometries with interleaved attributes. - */ - clone(data: {}): InterleavedBuffer; - - /** - * Serializes this {@link InterleavedBuffer}. - * Converting to {@link https://github.com/mrdoob/three.js/wiki/JSON-Geometry-format-4 | JSON Geometry format v4}, - * @param data This object holds shared array buffers required for properly serializing geometries with interleaved attributes. - */ - toJSON(data: {}): { - uuid: string; - buffer: string; - type: string; - stride: number; - }; -} diff --git a/packages/canvas-three/three/src/core/InterleavedBufferAttribute.d.ts b/packages/canvas-three/three/src/core/InterleavedBufferAttribute.d.ts deleted file mode 100644 index afe41fd99..000000000 --- a/packages/canvas-three/three/src/core/InterleavedBufferAttribute.d.ts +++ /dev/null @@ -1,201 +0,0 @@ -import { Matrix3 } from '../math/Matrix3.js'; -import { Matrix4 } from '../math/Matrix4.js'; -import { BufferAttribute, TypedArray } from './BufferAttribute.js'; -import { InterleavedBuffer } from './InterleavedBuffer.js'; - -/** - * @see {@link https://threejs.org/docs/index.html#api/en/core/InterleavedBufferAttribute | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/InterleavedBufferAttribute.js | Source} - */ -export class InterleavedBufferAttribute { - /** - * Create a new instance of {@link THREE.InterleavedBufferAttribute | InterleavedBufferAttribute}. - * @param interleavedBuffer - * @param itemSize - * @param offset - * @param normalized Default `false`. - */ - constructor(interleavedBuffer: InterleavedBuffer, itemSize: number, offset: number, normalized?: boolean); - - /** - * Optional name for this attribute instance. - * @defaultValue `''` - */ - name: string; - - /** - * The {@link InterleavedBuffer | InterleavedBuffer} instance passed in the constructor. - */ - data: InterleavedBuffer; - - /** - * How many values make up each item. - * @remarks Expects a `Integer` - */ - itemSize: number; - - /** - * The offset in the underlying array buffer where an item starts. - * @remarks Expects a `Integer` - */ - offset: number; - - /** - * @defaultValue `false` - */ - normalized: boolean; - - /** - * The value of {@link data | .data}.{@link InterleavedBuffer.count | count}. - * If the buffer is storing a 3-component item (such as a _position, normal, or color_), then this will count the number of such items stored. - * @remarks _get-only property_. - * @remarks Expects a `Integer` - */ - get count(): number; - - /** - * The value of {@link InterleavedBufferAttribute.data | data}.{@link InterleavedBuffer.array | array}. - * @remarks _get-only property_. - */ - get array(): TypedArray; - - /** - * Flag to indicate that the {@link data | .data} ({@link InterleavedBuffer}) attribute has changed and should be re-sent to the GPU. - * @remarks Setting this to have the same result of setting true also increments the {@link InterleavedBuffer.needsUpdate | InterleavedBuffer.needsUpdate} of {@link data | .data}. - * @remarks Setting this to true also increments the {@link InterleavedBuffer.version | InterleavedBuffer.version}. - * @remarks _set-only property_. - */ - set needsUpdate(value: boolean); - - /** - * Read-only flag to check if a given object is of type {@link InterleavedBufferAttribute}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isInterleavedBufferAttribute: true; - - /** - * Applies matrix {@link Matrix4 | m} to every Vector3 element of this InterleavedBufferAttribute. - * @param m - */ - applyMatrix4(m: Matrix4): this; - - /** - * Applies normal matrix {@link Matrix3 | m} to every Vector3 element of this InterleavedBufferAttribute. - * @param m - */ - applyNormalMatrix(m: Matrix3): this; - - /** - * Applies matrix {@link Matrix4 | m} to every Vector3 element of this InterleavedBufferAttribute, interpreting the elements as a direction vectors. - * @param m - */ - transformDirection(m: Matrix4): this; - - /** - * Returns the given component of the vector at the given index. - */ - getComponent(index: number, component: number): number; - - /** - * Sets the given component of the vector at the given index. - */ - setComponent(index: number, component: number, value: number): this; - - /** - * Returns the x component of the item at the given index. - * @param index Expects a `Integer` - */ - getX(index: number): number; - - /** - * Sets the x component of the item at the given index. - * @param index Expects a `Integer` - * @param x Expects a `Float` - */ - setX(index: number, x: number): this; - - /** - * Returns the y component of the item at the given index. - * @param index Expects a `Integer` - */ - getY(index: number): number; - - /** - * Sets the y component of the item at the given index. - * @param index Expects a `Integer` - * @param y Expects a `Float` - */ - setY(index: number, y: number): this; - - /** - * Returns the z component of the item at the given index. - * @param index Expects a `Integer` - */ - getZ(index: number): number; - - /** - * Sets the z component of the item at the given index. - * @param index Expects a `Integer` - * @param z Expects a `Float` - */ - setZ(index: number, z: number): this; - - /** - * Returns the w component of the item at the given index. - * @param index Expects a `Integer` - */ - getW(index: number): number; - - /** - * Sets the w component of the item at the given index. - * @param index Expects a `Integer` - * @param w Expects a `Float` - */ - setW(index: number, z: number): this; - - /** - * Sets the x and y components of the item at the given index. - * @param index Expects a `Integer` - * @param x Expects a `Float` - * @param y Expects a `Float` - */ - setXY(index: number, x: number, y: number): this; - /** - * Sets the x, y and z components of the item at the given index. - * @param index Expects a `Integer` - * @param x Expects a `Float` - * @param y Expects a `Float` - * @param z Expects a `Float` - */ - setXYZ(index: number, x: number, y: number, z: number): this; - - /** - * Sets the x, y, z and w components of the item at the given index. - * @param index Expects a `Integer` - * @param x Expects a `Float` - * @param y Expects a `Float` - * @param z Expects a `Float` - * @param w Expects a `Float` - */ - setXYZW(index: number, x: number, y: number, z: number, w: number): this; - - /** - * Creates a clone of this {@link InterleavedBufferAttribute}. - * @param data This object holds shared array buffers required for properly cloning geometries with interleaved attributes. - */ - clone(data?: {}): BufferAttribute; - - /** - * Serializes this {@link InterleavedBufferAttribute}. - * Converting to {@link https://github.com/mrdoob/three.js/wiki/JSON-Geometry-format-4 | JSON Geometry format v4}, - * @param data This object holds shared array buffers required for properly serializing geometries with interleaved attributes. - */ - toJSON(data?: {}): { - isInterleavedBufferAttribute: true; - itemSize: number; - data: string; - offset: number; - normalized: boolean; - }; -} diff --git a/packages/canvas-three/three/src/core/Layers.d.ts b/packages/canvas-three/three/src/core/Layers.d.ts deleted file mode 100644 index 3215f0c4f..000000000 --- a/packages/canvas-three/three/src/core/Layers.d.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * A {@link THREE.Layers | Layers} object assigns an {@link THREE.Object3D | Object3D} to 1 or more of 32 layers numbered `0` to `31` - internally the - * layers are stored as a {@link https://en.wikipedia.org/wiki/Mask_(computing) | bit mask}, and - * by default all Object3Ds are a member of layer `0`. - * @remarks - * This can be used to control visibility - an object must share a layer with a {@link Camera | camera} to be visible when that camera's view is rendered. - * @remarks - * All classes that inherit from {@link THREE.Object3D | Object3D} have an {@link THREE.Object3D.layers | Object3D.layers} property which is an instance of this class. - * @see Example: {@link https://threejs.org/examples/#webgl_layers | WebGL / layers} - * @see Example: {@link https://threejs.org/examples/#webxr_vr_layers | Webxr / vr / layers} - * @see {@link https://threejs.org/docs/index.html#api/en/core/Layers | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/Layers.js | Source} - */ -export class Layers { - /** - * Create a new Layers object, with membership initially set to layer 0. - */ - constructor(); - - /** - * A bit mask storing which of the 32 layers this layers object is currently a member of. - * @defaultValue `1 | 0` - * @remarks Expects a `Integer` - */ - mask: number; - - /** - * Set membership to `layer`, and remove membership all other layers. - * @param layer An integer from 0 to 31. - */ - set(layer: number): void; - - /** - * Add membership of this `layer`. - * @param layer An integer from 0 to 31. - */ - enable(layer: number): void; - - /** - * Add membership to all layers. - */ - enableAll(): void; - - /** - * Toggle membership of `layer`. - * @param layer An integer from 0 to 31. - */ - toggle(layer: number): void; - - /** - * Remove membership of this `layer`. - * @param layer An integer from 0 to 31. - */ - disable(layer: number): void; - - /** - * Remove membership from all layers. - */ - disableAll(): void; - - /** - * Returns true if this and the passed `layers` object have at least one layer in common. - * @param layers A Layers object - */ - test(layers: Layers): boolean; - - /** - * Returns true if the given layer is enabled. - * @param layer An integer from 0 to 31. - */ - isEnabled(layer: number): boolean; -} diff --git a/packages/canvas-three/three/src/core/Object3D.d.ts b/packages/canvas-three/three/src/core/Object3D.d.ts deleted file mode 100644 index e10ce0af4..000000000 --- a/packages/canvas-three/three/src/core/Object3D.d.ts +++ /dev/null @@ -1,644 +0,0 @@ -import { AnimationClip, AnimationClipJSON } from '../animation/AnimationClip.js'; -import { Camera } from '../cameras/Camera.js'; -import { ShapeJSON } from '../extras/core/Shape.js'; -import { Material, MaterialJSON } from '../materials/Material.js'; -import { Euler } from '../math/Euler.js'; -import { Matrix3 } from '../math/Matrix3.js'; -import { Matrix4, Matrix4Tuple } from '../math/Matrix4.js'; -import { Quaternion } from '../math/Quaternion.js'; -import { Vector3, Vector3Tuple } from '../math/Vector3.js'; -import { Group } from '../objects/Group.js'; -import { SkeletonJSON } from '../objects/Skeleton.js'; -import { WebGLRenderer } from '../renderers/WebGLRenderer.js'; -import { Scene } from '../scenes/Scene.js'; -import { SourceJSON } from '../textures/Source.js'; -import { TextureJSON } from '../textures/Texture.js'; -import { BufferGeometry, BufferGeometryJSON } from './BufferGeometry.js'; -import { EventDispatcher } from './EventDispatcher.js'; -import { Layers } from './Layers.js'; -import { Intersection, Raycaster } from './Raycaster.js'; - -export interface Object3DJSONObject { - uuid: string; - type: string; - - name?: string; - castShadow?: boolean; - receiveShadow?: boolean; - visible?: boolean; - frustumCulled?: boolean; - renderOrder?: number; - userData?: Record; - - layers: number; - matrix: Matrix4Tuple; - up: Vector3Tuple; - - matrixAutoUpdate?: boolean; - - material?: string | string[]; - - children?: string[]; - - animations?: string[]; -} - -export interface Object3DJSON { - metadata?: { version: number; type: string; generator: string }; - object: Object3DJSONObject; -} - -export interface JSONMeta { - geometries: Record; - materials: Record; - textures: Record; - images: Record; - shapes: Record; - skeletons: Record; - animations: Record; - nodes: Record; -} - -export interface Object3DEventMap { - /** - * Fires when the object has been added to its parent object. - */ - added: {}; - - /** - * Fires when the object has been removed from its parent object. - */ - removed: {}; - - /** - * Fires when a new child object has been added. - */ - childadded: { child: Object3D }; - - /** - * Fires when a new child object has been removed. - */ - childremoved: { child: Object3D }; -} - -/** - * This is the base class for most objects in three.js and provides a set of properties and methods for manipulating objects in 3D space. - * @remarks Note that this can be used for grouping objects via the {@link THREE.Object3D.add | .add()} method which adds the object as a child, - * however it is better to use {@link THREE.Group | Group} for this. - * @see {@link https://threejs.org/docs/index.html#api/en/core/Object3D | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/Object3D.js | Source} - */ -export class Object3D extends EventDispatcher { - /** - * This creates a new {@link Object3D} object. - */ - constructor(); - - /** - * Flag to check if a given object is of type {@link Object3D}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isObject3D: true; - - /** - * Unique number for this {@link Object3D} instance. - * @remarks Note that ids are assigned in chronological order: 1, 2, 3, ..., incrementing by one for each new object. - * Expects a `Integer` - */ - readonly id: number; - - /** - * {@link http://en.wikipedia.org/wiki/Universally_unique_identifier | UUID} of this object instance. - * @remarks This gets automatically assigned and shouldn't be edited. - */ - uuid: string; - - /** - * Optional name of the object - * @remarks _(doesn't need to be unique)_. - * @defaultValue `""` - */ - name: string; - - /** - * A Read-only _string_ to check `this` object type. - * @remarks This can be used to find a specific type of Object3D in a scene. - * Sub-classes will update this value. - * @defaultValue `Object3D` - */ - readonly type: string | 'Object3D'; - - /** - * Object's parent in the {@link https://en.wikipedia.org/wiki/Scene_graph | scene graph}. - * @remarks An object can have at most one parent. - * @defaultValue `null` - */ - parent: Object3D | null; - - /** - * Array with object's children. - * @see {@link THREE.Object3DGroup | Group} for info on manually grouping objects. - * @defaultValue `[]` - */ - - children: Object3D[]; - - /** - * This is used by the {@link lookAt | lookAt} method, for example, to determine the orientation of the result. - * @defaultValue {@link DEFAULT_UP | Object3D.DEFAULT_UP} - that is `(0, 1, 0)`. - */ - up: Vector3; - - /** - * Object's local position. - * @defaultValue `new THREE.Vector3()` - that is `(0, 0, 0)`. - */ - readonly position: Vector3; - - /** - * Object's local rotation ({@link https://en.wikipedia.org/wiki/Euler_angles | Euler angles}), in radians. - * @defaultValue `new THREE.Euler()` - that is `(0, 0, 0, Euler.DEFAULT_ORDER)`. - */ - readonly rotation: Euler; - - /** - * Object's local rotation as a {@link THREE.Quaternion | Quaternion}. - * @defaultValue `new THREE.Quaternion()` - that is `(0, 0, 0, 1)`. - */ - readonly quaternion: Quaternion; - - /** - * The object's local scale. - * @defaultValue `new THREE.Vector3( 1, 1, 1 )` - */ - readonly scale: Vector3; - - /** - * @defaultValue `new THREE.Matrix4()` - */ - readonly modelViewMatrix: Matrix4; - - /** - * @defaultValue `new THREE.Matrix3()` - */ - readonly normalMatrix: Matrix3; - - /** - * The local transform matrix. - * @defaultValue `new THREE.Matrix4()` - */ - matrix: Matrix4; - - /** - * The global transform of the object. - * @remarks If the {@link Object3D} has no parent, then it's identical to the local transform {@link THREE.Object3D.matrix | .matrix}. - * @defaultValue `new THREE.Matrix4()` - */ - matrixWorld: Matrix4; - - /** - * When this is set, it calculates the matrix of position, (rotation or quaternion) and - * scale every frame and also recalculates the matrixWorld property. - * @defaultValue {@link DEFAULT_MATRIX_AUTO_UPDATE} - that is `(true)`. - */ - matrixAutoUpdate: boolean; - - /** - * If set, then the renderer checks every frame if the object and its children need matrix updates. - * When it isn't, then you have to maintain all matrices in the object and its children yourself. - * @defaultValue {@link DEFAULT_MATRIX_WORLD_AUTO_UPDATE} - that is `(true)`. - */ - matrixWorldAutoUpdate: boolean; - - /** - * When this is set, it calculates the matrixWorld in that frame and resets this property to false. - * @defaultValue `false` - */ - matrixWorldNeedsUpdate: boolean; - - /** - * The layer membership of the object. - * @remarks The object is only visible if it has at least one layer in common with the {@link THREE.Object3DCamera | Camera} in use. - * This property can also be used to filter out unwanted objects in ray-intersection tests when using {@link THREE.Raycaster | Raycaster}. - * @defaultValue `new THREE.Layers()` - */ - layers: Layers; - - /** - * Object gets rendered if `true`. - * @defaultValue `true` - */ - visible: boolean; - - /** - * Whether the object gets rendered into shadow map. - * @defaultValue `false` - */ - castShadow: boolean; - - /** - * Whether the material receives shadows. - * @defaultValue `false` - */ - receiveShadow: boolean; - - /** - * When this is set, it checks every frame if the object is in the frustum of the camera before rendering the object. - * If set to `false` the object gets rendered every frame even if it is not in the frustum of the camera. - * @defaultValue `true` - */ - frustumCulled: boolean; - - /** - * This value allows the default rendering order of {@link https://en.wikipedia.org/wiki/Scene_graph | scene graph} - * objects to be overridden although opaque and transparent objects remain sorted independently. - * @remarks When this property is set for an instance of {@link Group | Group}, all descendants objects will be sorted and rendered together. - * Sorting is from lowest to highest renderOrder. - * @defaultValue `0` - */ - renderOrder: number; - - /** - * Array with object's animation clips. - * @defaultValue `[]` - */ - animations: AnimationClip[]; - - /** - * An object that can be used to store custom data about the {@link Object3D}. - * @remarks It should not hold references to _functions_ as these **will not** be cloned. - * @default `{}` - */ - userData: Record; - - /** - * Custom depth material to be used when rendering to the depth map. - * @remarks Can only be used in context of meshes. - * When shadow-casting with a {@link THREE.DirectionalLight | DirectionalLight} or {@link THREE.SpotLight | SpotLight}, - * if you are modifying vertex positions in the vertex shader you must specify a customDepthMaterial for proper shadows. - * @defaultValue `undefined` - */ - customDepthMaterial?: Material | undefined; - - /** - * Same as {@link customDepthMaterial}, but used with {@link THREE.Object3DPointLight | PointLight}. - * @defaultValue `undefined` - */ - customDistanceMaterial?: Material | undefined; - - /** - * An optional callback that is executed immediately before a 3D object is rendered to a shadow map. - * @remarks This function is called with the following parameters: renderer, scene, camera, shadowCamera, geometry, - * depthMaterial, group. - * Please notice that this callback is only executed for `renderable` 3D objects. Meaning 3D objects which - * define their visual appearance with geometries and materials like instances of {@link Mesh}, {@link Line}, - * {@link Points} or {@link Sprite}. Instances of {@link Object3D}, {@link Group} or {@link Bone} are not renderable - * and thus this callback is not executed for such objects. - */ - onBeforeShadow(renderer: WebGLRenderer, scene: Scene, shadowCamera: Camera, geometry: BufferGeometry, depthMaterial: Material, group: Group): void; - - /** - * An optional callback that is executed immediately after a 3D object is rendered to a shadow map. - * @remarks This function is called with the following parameters: renderer, scene, camera, shadowCamera, geometry, - * depthMaterial, group. - * Please notice that this callback is only executed for `renderable` 3D objects. Meaning 3D objects which - * define their visual appearance with geometries and materials like instances of {@link Mesh}, {@link Line}, - * {@link Points} or {@link Sprite}. Instances of {@link Object3D}, {@link Group} or {@link Bone} are not renderable - * and thus this callback is not executed for such objects. - */ - onAfterShadow(renderer: WebGLRenderer, scene: Scene, shadowCamera: Camera, geometry: BufferGeometry, depthMaterial: Material, group: Group): void; - - /** - * An optional callback that is executed immediately before a 3D object is rendered. - * @remarks This function is called with the following parameters: renderer, scene, camera, geometry, material, group. - * Please notice that this callback is only executed for `renderable` 3D objects. Meaning 3D objects which - * define their visual appearance with geometries and materials like instances of {@link Mesh}, {@link Line}, - * {@link Points} or {@link Sprite}. Instances of {@link Object3D}, {@link Group} or {@link Bone} are not renderable - * and thus this callback is not executed for such objects. - */ - onBeforeRender(renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: Group): void; - - /** - * An optional callback that is executed immediately after a 3D object is rendered. - * @remarks This function is called with the following parameters: renderer, scene, camera, geometry, material, group. - * Please notice that this callback is only executed for `renderable` 3D objects. Meaning 3D objects which - * define their visual appearance with geometries and materials like instances of {@link Mesh}, {@link Line}, - * {@link Points} or {@link Sprite}. Instances of {@link Object3D}, {@link Group} or {@link Bone} are not renderable - * and thus this callback is not executed for such objects. - */ - onAfterRender(renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: Group): void; - - /** - * The default {@link up} direction for objects, also used as the default position for {@link THREE.DirectionalLight | DirectionalLight}, - * {@link THREE.HemisphereLight | HemisphereLight} and {@link THREE.Spotlight | Spotlight} (which creates lights shining from the top down). - * @defaultValue `new THREE.Vector3( 0, 1, 0)` - */ - static DEFAULT_UP: Vector3; - - /** - * The default setting for {@link matrixAutoUpdate} for newly created Object3Ds. - * @defaultValue `true` - */ - static DEFAULT_MATRIX_AUTO_UPDATE: boolean; - - /** - * The default setting for {@link matrixWorldAutoUpdate} for newly created Object3Ds. - * @defaultValue `true` - */ - static DEFAULT_MATRIX_WORLD_AUTO_UPDATE: boolean; - - /** - * Applies the matrix transform to the object and updates the object's position, rotation and scale. - * @param matrix - */ - applyMatrix4(matrix: Matrix4): void; - - /** - * Applies the rotation represented by the quaternion to the object. - * @param quaternion - */ - applyQuaternion(quaternion: Quaternion): this; - - /** - * Calls {@link THREE.Quaternion.setFromAxisAngle | setFromAxisAngle}({@link axis}, {@link angle}) on the {@link quaternion | .quaternion}. - * @param axis A normalized vector in object space. - * @param angle Angle in radians. Expects a `Float` - */ - setRotationFromAxisAngle(axis: Vector3, angle: number): void; - - /** - * Calls {@link THREE.Quaternion.setFromEuler | setFromEuler}({@link euler}) on the {@link quaternion | .quaternion}. - * @param euler Euler angle specifying rotation amount. - */ - setRotationFromEuler(euler: Euler): void; - - /** - * Calls {@link THREE.Quaternion.setFromRotationMatrix | setFromRotationMatrix}({@link m}) on the {@link quaternion | .quaternion}. - * @remarks Note that this assumes that the upper 3x3 of m is a pure rotation matrix (i.e, unscaled). - * @param m Rotate the quaternion by the rotation component of the matrix. - */ - setRotationFromMatrix(m: Matrix4): void; - - /** - * Copy the given {@link THREE.Quaternion | Quaternion} into {@link quaternion | .quaternion}. - * @param q Normalized Quaternion. - */ - setRotationFromQuaternion(q: Quaternion): void; - - /** - * Rotate an object along an axis in object space. - * @remarks The axis is assumed to be normalized. - * @param axis A normalized vector in object space. - * @param angle The angle in radians. Expects a `Float` - */ - rotateOnAxis(axis: Vector3, angle: number): this; - - /** - * Rotate an object along an axis in world space. - * @remarks The axis is assumed to be normalized - * Method Assumes no rotated parent. - * @param axis A normalized vector in world space. - * @param angle The angle in radians. Expects a `Float` - */ - rotateOnWorldAxis(axis: Vector3, angle: number): this; - - /** - * Rotates the object around _x_ axis in local space. - * @param rad The angle to rotate in radians. Expects a `Float` - */ - rotateX(angle: number): this; - - /** - * Rotates the object around _y_ axis in local space. - * @param rad The angle to rotate in radians. Expects a `Float` - */ - rotateY(angle: number): this; - - /** - * Rotates the object around _z_ axis in local space. - * @param rad The angle to rotate in radians. Expects a `Float` - */ - rotateZ(angle: number): this; - - /** - * Translate an object by distance along an axis in object space - * @remarks The axis is assumed to be normalized. - * @param axis A normalized vector in object space. - * @param distance The distance to translate. Expects a `Float` - */ - translateOnAxis(axis: Vector3, distance: number): this; - - /** - * Translates object along x axis in object space by {@link distance} units. - * @param distance Expects a `Float` - */ - translateX(distance: number): this; - - /** - * Translates object along _y_ axis in object space by {@link distance} units. - * @param distance Expects a `Float` - */ - translateY(distance: number): this; - - /** - * Translates object along _z_ axis in object space by {@link distance} units. - * @param distance Expects a `Float` - */ - translateZ(distance: number): this; - - /** - * Converts the vector from this object's local space to world space. - * @param vector A vector representing a position in this object's local space. - */ - localToWorld(vector: Vector3): Vector3; - - /** - * Converts the vector from world space to this object's local space. - * @param vector A vector representing a position in world space. - */ - worldToLocal(vector: Vector3): Vector3; - - /** - * Rotates the object to face a point in world space. - * @remarks This method does not support objects having non-uniformly-scaled parent(s). - * @param vector A vector representing a position in world space to look at. - */ - lookAt(vector: Vector3): void; - /** - * Rotates the object to face a point in world space. - * @remarks This method does not support objects having non-uniformly-scaled parent(s). - * @param x Expects a `Float` - * @param y Expects a `Float` - * @param z Expects a `Float` - */ - lookAt(x: number, y: number, z: number): void; - - /** - * Adds another {@link Object3D} as child of this {@link Object3D}. - * @remarks An arbitrary number of objects may be added - * Any current parent on an {@link object} passed in here will be removed, since an {@link Object3D} can have at most one parent. - * @see {@link attach} - * @see {@link THREE.Group | Group} for info on manually grouping objects. - * @param object - */ - add(...object: Object3D[]): this; - - /** - * Removes a {@link Object3D} as child of this {@link Object3D}. - * @remarks An arbitrary number of objects may be removed. - * @see {@link THREE.Group | Group} for info on manually grouping objects. - * @param object - */ - remove(...object: Object3D[]): this; - - /** - * Removes this object from its current parent. - */ - removeFromParent(): this; - - /** - * Removes all child objects. - */ - clear(): this; - - /** - * Adds a {@link Object3D} as a child of this, while maintaining the object's world transform. - * @remarks Note: This method does not support scene graphs having non-uniformly-scaled nodes(s). - * @see {@link add} - * @param object - */ - attach(object: Object3D): this; - - /** - * Searches through an object and its children, starting with the object itself, and returns the first with a matching id. - * @remarks Note that ids are assigned in chronological order: 1, 2, 3, ..., incrementing by one for each new object. - * @see {@link id} - * @param id Unique number of the object instance. Expects a `Integer` - */ - getObjectById(id: number): Object3D | undefined; - - /** - * Searches through an object and its children, starting with the object itself, and returns the first with a matching name. - * @remarks Note that for most objects the name is an empty string by default - * You will have to set it manually to make use of this method. - * @param name String to match to the children's Object3D.name property. - */ - getObjectByName(name: string): Object3D | undefined; - - /** - * Searches through an object and its children, starting with the object itself, - * and returns the first with a property that matches the value given. - * - * @param name - the property name to search for. - * @param value - value of the given property. - */ - getObjectByProperty(name: string, value: any): Object3D | undefined; - - /** - * Searches through an object and its children, starting with the object itself, - * and returns the first with a property that matches the value given. - * @param name The property name to search for. - * @param value Value of the given property. - * @param optionalTarget target to set the result. Otherwise a new Array is instantiated. If set, you must clear - * this array prior to each call (i.e., array.length = 0;). - */ - getObjectsByProperty(name: string, value: any, optionalTarget?: Object3D[]): Object3D[]; - - /** - * Returns a vector representing the position of the object in world space. - * @param target The result will be copied into this Vector3. - */ - getWorldPosition(target: Vector3): Vector3; - - /** - * Returns a quaternion representing the rotation of the object in world space. - * @param target The result will be copied into this Quaternion. - */ - getWorldQuaternion(target: Quaternion): Quaternion; - - /** - * Returns a vector of the scaling factors applied to the object for each axis in world space. - * @param target The result will be copied into this Vector3. - */ - getWorldScale(target: Vector3): Vector3; - - /** - * Returns a vector representing the direction of object's positive z-axis in world space. - * @param target The result will be copied into this Vector3. - */ - getWorldDirection(target: Vector3): Vector3; - - /** - * Abstract (empty) method to get intersections between a casted ray and this object - * @remarks Subclasses such as {@link THREE.Mesh | Mesh}, {@link THREE.Line | Line}, and {@link THREE.Points | Points} implement this method in order to use raycasting. - * @see {@link THREE.Raycaster | Raycaster} - * @param raycaster - * @param intersects - * @defaultValue `() => {}` - */ - raycast(raycaster: Raycaster, intersects: Intersection[]): void; - - /** - * Executes the callback on this object and all descendants. - * @remarks Note: Modifying the scene graph inside the callback is discouraged. - * @param callback A function with as first argument an {@link Object3D} object. - */ - traverse(callback: (object: Object3D) => any): void; - - /** - * Like traverse, but the callback will only be executed for visible objects - * @remarks Descendants of invisible objects are not traversed. - * Note: Modifying the scene graph inside the callback is discouraged. - * @param callback A function with as first argument an {@link Object3D} object. - */ - traverseVisible(callback: (object: Object3D) => any): void; - - /** - * Executes the callback on all ancestors. - * @remarks Note: Modifying the scene graph inside the callback is discouraged. - * @param callback A function with as first argument an {@link Object3D} object. - */ - traverseAncestors(callback: (object: Object3D) => any): void; - - /** - * Updates local transform. - */ - updateMatrix(): void; - - /** - * Updates the global transform of the object. - * And will update the object descendants if {@link matrixWorldNeedsUpdate | .matrixWorldNeedsUpdate} is set to true or if the {@link force} parameter is set to `true`. - * @param force A boolean that can be used to bypass {@link matrixWorldAutoUpdate | .matrixWorldAutoUpdate}, to recalculate the world matrix of the object and descendants on the current frame. - * Useful if you cannot wait for the renderer to update it on the next frame, assuming {@link matrixWorldAutoUpdate | .matrixWorldAutoUpdate} set to `true`. - */ - updateMatrixWorld(force?: boolean): void; - - /** - * Updates the global transform of the object. - * @param updateParents Recursively updates global transform of ancestors. - * @param updateChildren Recursively updates global transform of descendants. - */ - updateWorldMatrix(updateParents: boolean, updateChildren: boolean): void; - - /** - * Convert the object to three.js {@link https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4 | JSON Object/Scene format}. - * @param meta Object containing metadata such as materials, textures or images for the object. - */ - toJSON(meta?: JSONMeta): Object3DJSON; - - /** - * Returns a clone of `this` object and optionally all descendants. - * @param recursive If true, descendants of the object are also cloned. Default `true` - */ - clone(recursive?: boolean): this; - - /** - * Copies the given object into this object. - * @remarks Event listeners and user-defined callbacks ({@link .onAfterRender} and {@link .onBeforeRender}) are not copied. - * @param object - * @param recursive If set to `true`, descendants of the object are copied next to the existing ones. If set to - * `false`, descendants are left unchanged. Default is `true`. - */ - copy(object: Object3D, recursive?: boolean): this; -} diff --git a/packages/canvas-three/three/src/core/Raycaster.d.ts b/packages/canvas-three/three/src/core/Raycaster.d.ts deleted file mode 100644 index fc9ddfbb0..000000000 --- a/packages/canvas-three/three/src/core/Raycaster.d.ts +++ /dev/null @@ -1,199 +0,0 @@ -import { Camera } from '../cameras/Camera.js'; -import { Ray } from '../math/Ray.js'; -import { Vector2 } from '../math/Vector2.js'; -import { Vector3 } from '../math/Vector3.js'; -import { XRTargetRaySpace } from '../renderers/webxr/WebXRController.js'; -import { Layers } from './Layers.js'; -import { Object3D } from './Object3D.js'; - -export interface Face { - a: number; - b: number; - c: number; - normal: Vector3; - materialIndex: number; -} - -export interface Intersection { - /** Distance between the origin of the ray and the intersection */ - distance: number; - distanceToRay?: number | undefined; - /** Point of intersection, in world coordinates */ - point: Vector3; - index?: number | undefined; - /** Intersected face */ - face?: Face | null | undefined; - /** Index of the intersected face */ - faceIndex?: number | undefined; - /** The intersected object */ - object: TIntersected; - uv?: Vector2 | undefined; - uv1?: Vector2 | undefined; - normal?: Vector3; - /** The index number of the instance where the ray intersects the {@link THREE.InstancedMesh | InstancedMesh } */ - instanceId?: number | undefined; - pointOnLine?: Vector3; - batchId?: number; -} - -export interface RaycasterParameters { - Mesh: any; - Line: { threshold: number }; - Line2?: { threshold: number }; - LOD: any; - Points: { threshold: number }; - Sprite: any; -} - -/** - * This class is designed to assist with {@link https://en.wikipedia.org/wiki/Ray_casting | raycasting} - * @remarks - * Raycasting is used for mouse picking (working out what objects in the 3d space the mouse is over) amongst other things. - * @example - * ```typescript - * const raycaster = new THREE.Raycaster(); - * const pointer = new THREE.Vector2(); - * - * function onPointerMove(event) { - * // calculate pointer position in normalized device coordinates (-1 to +1) for both components - * pointer.x = (event.clientX / window.innerWidth) * 2 - 1; - * pointer.y = -(event.clientY / window.innerHeight) * 2 + 1; - * } - * - * function render() { - * // update the picking ray with the camera and pointer position - * raycaster.setFromCamera(pointer, camera); - * // calculate objects intersecting the picking ray - * const intersects = raycaster.intersectObjects(scene.children); - * for (let i = 0; i & lt; intersects.length; i++) { - * intersects[i].object.material.color.set(0xff0000); - * } - * renderer.render(scene, camera); - * } - * window.addEventListener('pointermove', onPointerMove); - * window.requestAnimationFrame(render); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_interactive_cubes | Raycasting to a Mesh} - * @see Example: {@link https://threejs.org/examples/#webgl_interactive_cubes_ortho | Raycasting to a Mesh in using an OrthographicCamera} - * @see Example: {@link https://threejs.org/examples/#webgl_interactive_buffergeometry | Raycasting to a Mesh with BufferGeometry} - * @see Example: {@link https://threejs.org/examples/#webgl_instancing_raycast | Raycasting to a InstancedMesh} - * @see Example: {@link https://threejs.org/examples/#webgl_interactive_lines | Raycasting to a Line} - * @see Example: {@link https://threejs.org/examples/#webgl_interactive_raycasting_points | Raycasting to Points} - * @see Example: {@link https://threejs.org/examples/#webgl_geometry_terrain_raycast | Terrain raycasting} - * @see Example: {@link https://threejs.org/examples/#webgl_interactive_voxelpainter | Raycasting to paint voxels} - * @see Example: {@link https://threejs.org/examples/#webgl_raycaster_texture | Raycast to a Texture} - * @see {@link https://threejs.org/docs/index.html#api/en/core/Raycaster | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/Raycaster.js | Source} - */ -export class Raycaster { - /** - * This creates a new {@link Raycaster} object. - * @param origin The origin vector where the ray casts from. Default `new Vector3()` - * @param direction The direction vector that gives direction to the ray. Should be normalized. Default `new Vector3(0, 0, -1)` - * @param near All results returned are further away than near. Near can't be negative. Expects a `Float`. Default `0` - * @param far All results returned are closer than far. Far can't be lower than near. Expects a `Float`. Default `Infinity` - */ - constructor(origin?: Vector3, direction?: Vector3, near?: number, far?: number); - - /** - * The {@link THREE.RaycasterRay | Ray} used for the raycasting. - */ - ray: Ray; - - /** - * The near factor of the raycaster. This value indicates which objects can be discarded based on the distance. - * This value shouldn't be negative and should be smaller than the far property. - * @remarks Expects a `Float` - * @defaultValue `0` - */ - near: number; - - /** - * The far factor of the raycaster. This value indicates which objects can be discarded based on the distance. - * This value shouldn't be negative and should be larger than the near property. - * @remarks Expects a `Float` - * @defaultValue `Infinity` - */ - far: number; - - /** - * The camera to use when raycasting against view-dependent objects such as billboarded objects like {@link THREE.Sprites | Sprites}. - * This field can be set manually or is set when calling {@link setFromCamera}. - * @defaultValue `null` - */ - camera: Camera; - - /** - * Used by {@link Raycaster} to selectively ignore 3D objects when performing intersection tests. - * The following code example ensures that only 3D objects on layer `1` will be honored by the instance of Raycaster. - * ``` - * raycaster.layers.set( 1 ); - * object.layers.enable( 1 ); - * ``` - * @defaultValue `new THREE.Layers()` - See {@link THREE.Layers | Layers}. - */ - layers: Layers; - - /** - * An data object where threshold is the precision of the {@link Raycaster} when intersecting objects, in world units. - * @defaultValue `{ Mesh: {}, Line: { threshold: 1 }, LOD: {}, Points: { threshold: 1 }, Sprite: {} }` - */ - params: RaycasterParameters; - - /** - * Updates the ray with a new origin and direction - * @remarks - * Please note that this method only copies the values from the arguments. - * @param origin The origin vector where the ray casts from. - * @param direction The normalized direction vector that gives direction to the ray. - */ - set(origin: Vector3, direction: Vector3): void; - - /** - * Updates the ray with a new origin and direction. - * @param coords 2D coordinates of the mouse, in normalized device coordinates (NDC)---X and Y components should be between -1 and 1. - * @param camera camera from which the ray should originate - */ - setFromCamera(coords: Vector2, camera: Camera): void; - - /** - * Updates the ray with a new origin and direction. - * @param controller The controller to copy the position and direction from. - */ - setFromXRController(controller: XRTargetRaySpace): this; - - /** - * Checks all intersection between the ray and the object with or without the descendants - * @remarks Intersections are returned sorted by distance, closest first - * @remarks {@link Raycaster} delegates to the {@link Object3D.raycast | raycast} method of the passed object, when evaluating whether the ray intersects the object or not - * This allows {@link THREE.Mesh | meshes} to respond differently to ray casting than {@link THREE.Line | lines} and {@link THREE.Points | pointclouds}. - * **Note** that for meshes, faces must be pointed towards the origin of the {@link Raycaster.ray | ray} in order to be detected; - * intersections of the ray passing through the back of a face will not be detected - * To raycast against both faces of an object, you'll want to set the {@link Mesh.material | material}'s {@link Material.side | side} property to `THREE.DoubleSide`. - * @see {@link intersectObjects | .intersectObjects()}. - * @param object The object to check for intersection with the ray. - * @param recursive If true, it also checks all descendants. Otherwise it only checks intersection with the object. Default `true` - * @param optionalTarget Target to set the result. Otherwise a new {@link Array | Array} is instantiated. - * If set, you must clear this array prior to each call (i.e., array.length = 0;). Default `[]` - * @returns An array of intersections is returned. - */ - intersectObject(object: Object3D, recursive?: boolean, optionalTarget?: Array>): Array>; - - /** - * Checks all intersection between the ray and the objects with or without the descendants - * @remarks Intersections are returned sorted by distance, closest first - * @remarks Intersections are of the same form as those returned by {@link intersectObject | .intersectObject()}. - * @remarks {@link Raycaster} delegates to the {@link Object3D.raycast | raycast} method of the passed object, when evaluating whether the ray intersects the object or not - * This allows {@link THREE.Mesh | meshes} to respond differently to ray casting than {@link THREE.Line | lines} and {@link THREE.Points | pointclouds}. - * **Note** that for meshes, faces must be pointed towards the origin of the {@link Raycaster.ray | ray} in order to be detected; - * intersections of the ray passing through the back of a face will not be detected - * To raycast against both faces of an object, you'll want to set the {@link Mesh.material | material}'s {@link Material.side | side} property to `THREE.DoubleSide`. - * @see {@link intersectObject | .intersectObject()}. - * @param objects The objects to check for intersection with the ray. - * @param recursive If true, it also checks all descendants of the objects. Otherwise it only checks intersection with the objects. Default `true` - * @param optionalTarget Target to set the result. Otherwise a new {@link Array | Array} is instantiated. - * If set, you must clear this array prior to each call (i.e., array.length = 0;). Default `[]` - * @returns An array of intersections is returned. - */ - intersectObjects(objects: Object3D[], recursive?: boolean, optionalTarget?: Array>): Array>; -} diff --git a/packages/canvas-three/three/src/core/RenderTarget.d.ts b/packages/canvas-three/three/src/core/RenderTarget.d.ts deleted file mode 100644 index c97ea3b4b..000000000 --- a/packages/canvas-three/three/src/core/RenderTarget.d.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { ColorSpace, MagnificationTextureFilter, MinificationTextureFilter, PixelFormatGPU, TextureDataType, Wrapping } from '../constants.js'; -import { Vector4 } from '../math/Vector4.js'; -import { DepthTexture } from '../textures/DepthTexture.js'; -import { Texture } from '../textures/Texture.js'; -import { EventDispatcher } from './EventDispatcher.js'; - -export interface RenderTargetOptions { - wrapS?: Wrapping | undefined; - wrapT?: Wrapping | undefined; - magFilter?: MagnificationTextureFilter | undefined; - minFilter?: MinificationTextureFilter | undefined; - generateMipmaps?: boolean | undefined; // true - format?: number | undefined; // RGBAFormat - type?: TextureDataType | undefined; // UnsignedByteType - anisotropy?: number | undefined; // 1 - colorSpace?: ColorSpace | undefined; - internalFormat?: PixelFormatGPU | null | undefined; // null - depthBuffer?: boolean | undefined; // true - stencilBuffer?: boolean | undefined; // false - resolveDepthBuffer?: boolean | undefined; // true - resolveStencilBuffer?: boolean | undefined; // true - depthTexture?: DepthTexture | null | undefined; // null - /** - * Defines the count of MSAA samples. Can only be used with WebGL 2. Default is **0**. - * @default 0 - */ - samples?: number | undefined; - count?: number | undefined; -} - -export class RenderTarget extends EventDispatcher<{ dispose: {} }> { - readonly isRenderTarget: true; - - width: number; - height: number; - depth: number; - - scissor: Vector4; - /** - * @default false - */ - scissorTest: boolean; - viewport: Vector4; - textures: TTexture[]; - - /** - * @default true - */ - depthBuffer: boolean; - - /** - * @default false - */ - stencilBuffer: boolean; - - /** - * Defines whether the depth buffer should be resolved when rendering into a multisampled render target. - * @default true - */ - resolveDepthBuffer: boolean; - - /** - * Defines whether the stencil buffer should be resolved when rendering into a multisampled render target. - * This property has no effect when {@link .resolveDepthBuffer} is set to `false`. - * @default true - */ - resolveStencilBuffer: boolean; - - /** - * @default null - */ - depthTexture: DepthTexture | null; - - /** - * Defines the count of MSAA samples. Can only be used with WebGL 2. Default is **0**. - * @default 0 - */ - samples: number; - - constructor(width?: number, height?: number, options?: RenderTargetOptions); - - get texture(): TTexture; - set texture(value: TTexture); - - setSize(width: number, height: number, depth?: number): void; - clone(): this; - copy(source: RenderTarget): this; - dispose(): void; -} diff --git a/packages/canvas-three/three/src/core/Uniform.d.ts b/packages/canvas-three/three/src/core/Uniform.d.ts deleted file mode 100644 index c9ee5c5f5..000000000 --- a/packages/canvas-three/three/src/core/Uniform.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Uniforms are global GLSL variables. - * They are passed to shader programs. - * @example - * When declaring a uniform of a {@link THREE.ShaderMaterial | ShaderMaterial}, it is declared by value or by object. - * ```typescript - * uniforms: { - * time: { - * value: 1.0 - * }, - * resolution: new Uniform(new Vector2()) - * }; - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_nodes_materials_instance_uniform | WebGL2 / nodes / materials / instance / uniform} - * @see Example: {@link https://threejs.org/examples/#webgpu_instance_uniform| WebGPU / instance / uniform} - * @see {@link https://threejs.org/docs/index.html#api/en/core/Uniform | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/Uniform.js | Source} - */ -export class Uniform { - /** - * Create a new instance of {@link THREE.Uniform | Uniform} - * @param value An object containing the value to set up the uniform. It's type must be one of the Uniform Types described above. - */ - constructor(value: T); - - /** - * Current value of the uniform. - */ - value: T; - - /** - * Returns a clone of this uniform. - * @remarks - * If the uniform's {@link value} property is an {@link Object | Object} with a `clone()` method, this is used, - * otherwise the value is copied by assignment Array values are **shared** between cloned {@link THREE.UniformUniform | Uniform}s. - */ - clone(): Uniform; -} diff --git a/packages/canvas-three/three/src/core/UniformsGroup.d.ts b/packages/canvas-three/three/src/core/UniformsGroup.d.ts deleted file mode 100644 index c68a11e8c..000000000 --- a/packages/canvas-three/three/src/core/UniformsGroup.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Usage } from '../constants.js'; -import { EventDispatcher } from './EventDispatcher.js'; -import { Uniform } from './Uniform.js'; - -/** - * @see Example: {@link https://threejs.org/examples/#webgl2_ubo | WebGL2 / UBO} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/UniformsGroup.js | Source} - */ -export class UniformsGroup extends EventDispatcher<{ dispose: {} }> { - constructor(); - - readonly isUniformsGroup: true; - - id: number; - - usage: Usage; - - uniforms: Array; - - add(uniform: Uniform | Uniform[]): this; - - remove(uniform: Uniform | Uniform[]): this; - - setName(name: string): this; - - setUsage(value: Usage): this; - - dispose(): this; - - copy(source: UniformsGroup): this; - - clone(): UniformsGroup; -} diff --git a/packages/canvas-three/three/src/extras/DataUtils.d.ts b/packages/canvas-three/three/src/extras/DataUtils.d.ts deleted file mode 100644 index c0357db6e..000000000 --- a/packages/canvas-three/three/src/extras/DataUtils.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Returns a half precision floating point value from the given single precision floating point value. - * @param val A single precision floating point value. - * @see {@link https://threejs.org/docs/index.html#api/en/extras/DataUtils | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/DataUtils.js | Source} - */ -declare function toHalfFloat(val: number): number; - -/** - * Returns a single precision floating point value from the given half precision floating point value. - * @param val A half precision floating point value. - * @see {@link https://threejs.org/docs/index.html#api/en/extras/DataUtils | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/DataUtils.js | Source} - */ -declare function fromHalfFloat(val: number): number; - -declare const DataUtils: { - toHalfFloat: typeof toHalfFloat; - fromHalfFloat: typeof fromHalfFloat; -}; - -export { DataUtils, fromHalfFloat, toHalfFloat }; diff --git a/packages/canvas-three/three/src/extras/Earcut.d.ts b/packages/canvas-three/three/src/extras/Earcut.d.ts deleted file mode 100644 index 49d4b47c4..000000000 --- a/packages/canvas-three/three/src/extras/Earcut.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * An implementation of the {@link Earcut} polygon triangulation algorithm - * @remarks - * The code is a port of {@link https://github.com/mapbox/earcut | mapbox/earcut}. - * @see {@link https://threejs.org/docs/index.html#api/en/extras/Earcut | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/Earcut.js | Source} - */ -export const Earcut: { - /** - * Triangulates the given shape definition by returning an array of triangles - * @remarks - * A triangle is defined by three consecutive integers representing vertex indices. - */ - triangulate(data: number[], holeIndices?: number[], dim?: number): number[]; -}; diff --git a/packages/canvas-three/three/src/extras/ImageUtils.d.ts b/packages/canvas-three/three/src/extras/ImageUtils.d.ts deleted file mode 100644 index db132a9e5..000000000 --- a/packages/canvas-three/three/src/extras/ImageUtils.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * A class containing utility functions for images. - * @see {@link https://threejs.org/docs/index.html#api/en/extras/ImageUtils | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/ImageUtils.js | Source} - */ -declare class ImageUtils { - /** - * Returns a data URI containing a representation of the given image. - * @param image The image object. - */ - static getDataURL(image: HTMLImageElement | HTMLCanvasElement | CanvasImageSource | ImageBitmap | ImageData): string; - - /** - * Converts the given sRGB image data to linear color space. - * @param image - */ - static sRGBToLinear(image: HTMLImageElement | HTMLCanvasElement | ImageBitmap): HTMLCanvasElement; - - /** - * Converts the given sRGB image data to linear color space. - * @param image - */ - static sRGBToLinear(image: ImageData): { - data: ImageData['data']; - width: ImageData['width']; - height: ImageData['height']; - }; -} - -export { ImageUtils }; diff --git a/packages/canvas-three/three/src/extras/PMREMGenerator.d.ts b/packages/canvas-three/three/src/extras/PMREMGenerator.d.ts deleted file mode 100644 index 904699682..000000000 --- a/packages/canvas-three/three/src/extras/PMREMGenerator.d.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { WebGLRenderer } from '../renderers/WebGLRenderer.js'; -import { WebGLRenderTarget } from '../renderers/WebGLRenderTarget.js'; -import { Scene } from '../scenes/Scene.js'; -import { CubeTexture } from '../textures/CubeTexture.js'; -import { Texture } from '../textures/Texture.js'; - -/** - * This class generates a Prefiltered, Mipmapped Radiance Environment Map (PMREM) from a cubeMap environment texture. - * @remarks - * This allows different levels of blur to be quickly accessed based on material roughness - * Unlike a traditional mipmap chain, it only goes down to the LOD_MIN level (above), and then creates extra even more filtered 'mips' at the same LOD_MIN resolution, - * associated with higher roughness levels - * In this way we maintain resolution to smoothly interpolate diffuse lighting while limiting sampling computation. - * @remarks - * Note: The minimum {@link THREE.MeshStandardMaterial | MeshStandardMaterial}'s roughness depends on the size of the provided texture - * If your render has small dimensions or the shiny parts have a lot of curvature, you may still be able to get away with a smaller texture size. - * - * | texture size | minimum roughness | - * |--------------|--------------------| - * | 16 | 0.21 | - * | 32 | 0.15 | - * | 64 | 0.11 | - * | 128 | 0.076 | - * | 256 | 0.054 | - * | 512 | 0.038 | - * | 1024 | 0.027 | - * - * @see {@link https://threejs.org/docs/index.html#api/en/extras/PMREMGenerator | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/PMREMGenerator.js | Source} - */ -export class PMREMGenerator { - /** - * This constructor creates a new PMREMGenerator. - * @param renderer - */ - constructor(renderer: WebGLRenderer); - - /** - * Generates a PMREM from a supplied Scene, which can be faster than using an image if networking bandwidth is low - * @remarks - * Optional near and far planes ensure the scene is rendered in its entirety (the cubeCamera is placed at the origin). - * @param scene The given scene. - * @param sigma Specifies a blur radius in radians to be applied to the scene before PMREM generation. Default `0`. - * @param near The near plane value. Default `0.1`. - * @param far The far plane value. Default `100`. - */ - fromScene(scene: Scene, sigma?: number, near?: number, far?: number): WebGLRenderTarget; - - /** - * Generates a PMREM from an equirectangular texture, which can be either LDR or HDR. The ideal input image size is - * 1k (1024 x 512), as this matches best with the 256 x 256 cubemap output. The smallest supported equirectangular - * image size is 64 x 32. - */ - fromEquirectangular(equirectangular: Texture, renderTarget?: WebGLRenderTarget | null): WebGLRenderTarget; - - /** - * Generates a PMREM from an cubemap texture, which can be either LDR or HDR. The ideal input cube size is - * 256 x 256, as this matches best with the 256 x 256 cubemap output. The smallest supported cube size is 16 x 16. - */ - fromCubemap(cubemap: CubeTexture, renderTarget?: WebGLRenderTarget | null): WebGLRenderTarget; - - /** - * Pre-compiles the cubemap shader - * @remarks - * You can get faster start-up by invoking this method during your texture's network fetch for increased concurrency. - */ - compileCubemapShader(): void; - - /** - * Pre-compiles the equirectangular shader - * @remarks - * You can get faster start-up by invoking this method during your texture's network fetch for increased concurrency. - */ - compileEquirectangularShader(): void; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/extras/ShapeUtils.d.ts b/packages/canvas-three/three/src/extras/ShapeUtils.d.ts deleted file mode 100644 index 0ef76566d..000000000 --- a/packages/canvas-three/three/src/extras/ShapeUtils.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Vector2Like } from '../math/Vector2.js'; - -/** - * A class containing utility functions for shapes. - * @remarks Note that these are all linear functions so it is necessary to calculate separately for x, y (and z, w if present) components of a vector. - * @see {@link https://threejs.org/docs/index.html#api/en/extras/ShapeUtils | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/ShapeUtils.js | Source} - */ -export class ShapeUtils { - /** - * Calculate area of a ( 2D ) contour polygon. - */ - static area(contour: readonly Vector2Like[]): number; - - /** - * Note that this is a linear function so it is necessary to calculate separately for x, y components of a polygon. - * @remarks Used internally by {@link THREE.Path | Path}, {@link THREE.ExtrudeGeometry | ExtrudeGeometry} and {@link THREE.ShapeGeometry | ShapeGeometry}. - */ - static isClockWise(pts: readonly Vector2Like[]): boolean; - - /** - * Used internally by {@link THREE.ExtrudeGeometry | ExtrudeGeometry} and {@link THREE.ShapeGeometry | ShapeGeometry} to calculate faces in shapes with holes. - */ - static triangulateShape(contour: Vector2Like[], holes: Vector2Like[][]): number[][]; -} diff --git a/packages/canvas-three/three/src/extras/TextureUtils.d.ts b/packages/canvas-three/three/src/extras/TextureUtils.d.ts deleted file mode 100644 index c0266d3b9..000000000 --- a/packages/canvas-three/three/src/extras/TextureUtils.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { CompressedPixelFormat, PixelFormat, TextureDataType } from '../constants.js'; -import { Texture } from '../textures/Texture.js'; - -/** - * Scales the texture as large as possible within its surface without cropping or stretching the texture. The method - * preserves the original aspect ratio of the texture. Akin to CSS `object-fit: contain`. - */ -declare function contain(texture: Texture, aspect: number): Texture; - -/** - * Scales the texture to the smallest possible size to fill the surface, leaving no empty space. The method preserves - * the original aspect ratio of the texture. Akin to CSS `object-fit: cover`. - */ -declare function cover(texture: Texture, aspect: number): Texture; - -/** - * Configures the texture to the default transformation. Akin to CSS `object-fit: fill`. - */ -declare function fill(texture: Texture): Texture; - -/** - * Given the width, height, format, and type of a texture. Determines how many bytes must be used to represent the - * texture. - */ -declare function getByteLength(width: number, height: number, format: PixelFormat | CompressedPixelFormat, type: TextureDataType): number; - -/** - * A class containing utility functions for textures. - */ -declare const TextureUtils: { - contain: typeof contain; - cover: typeof cover; - fill: typeof fill; - getByteLength: typeof getByteLength; -}; - -export { contain, cover, fill, getByteLength, TextureUtils }; diff --git a/packages/canvas-three/three/src/extras/core/Curve.d.ts b/packages/canvas-three/three/src/extras/core/Curve.d.ts deleted file mode 100644 index 27d97e492..000000000 --- a/packages/canvas-three/three/src/extras/core/Curve.d.ts +++ /dev/null @@ -1,162 +0,0 @@ -import { Vector2 } from '../../math/Vector2.js'; -import { Vector3 } from '../../math/Vector3.js'; - -export interface CurveJSON { - metadata: { version: number; type: string; generator: string }; - arcLengthDivisions: number; - type: string; -} - -/** - * An abstract base class for creating a {@link Curve} object that contains methods for interpolation - * @remarks - * For an array of Curves see {@link THREE.CurvePath | CurvePath}. - * @remarks - * This following curves inherit from THREE.Curve: - * - * **2D curves** - * - {@link THREE.ArcCurve} - * - {@link THREE.CubicBezierCurve} - * - {@link THREE.EllipseCurve} - * - {@link THREE.LineCurve} - * - {@link THREE.QuadraticBezierCurve} - * - {@link THREE.SplineCurve} - * - * **3D curves** - * - {@link THREE.CatmullRomCurve3} - * - {@link THREE.CubicBezierCurve3} - * - {@link THREE.LineCurve3} - * - {@link THREE.QuadraticBezierCurve3} - * - * @see {@link https://threejs.org/docs/index.html#api/en/extras/core/Curve | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/core/Curve.js | Source} - */ -export abstract class Curve { - protected constructor(); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `Curve` - */ - readonly type: string | 'Curve'; - - /** - * This value determines the amount of divisions when calculating the cumulative segment lengths of a {@link Curve} - * via {@link .getLengths}. - * To ensure precision when using methods like {@link .getSpacedPoints}, it is recommended to increase {@link .arcLengthDivisions} if the {@link Curve} is very large. - * @defaultValue `200` - * @remarks Expects a `Integer` - */ - arcLengthDivisions: number; - - /** - * Returns a vector for a given position on the curve. - * @param t A position on the curve. Must be in the range `[ 0, 1 ]`. Expects a `Float` - * @param optionalTarget If specified, the result will be copied into this Vector, otherwise a new Vector will be created. Default `new T`. - */ - getPoint(t: number, optionalTarget?: TVector): TVector; - - /** - * Returns a vector for a given position on the {@link Curve} according to the arc length. - * @param u A position on the {@link Curve} according to the arc length. Must be in the range `[ 0, 1 ]`. Expects a `Float` - * @param optionalTarget If specified, the result will be copied into this Vector, otherwise a new Vector will be created. Default `new T`. - */ - getPointAt(u: number, optionalTarget?: TVector): TVector; - - /** - * Returns a set of divisions `+1` points using {@link .getPoint | getPoint(t)}. - * @param divisions Number of pieces to divide the {@link Curve} into. Expects a `Integer`. Default `5` - */ - getPoints(divisions?: number): TVector[]; - - /** - * Returns a set of divisions `+1` equi-spaced points using {@link .getPointAt | getPointAt(u)}. - * @param divisions Number of pieces to divide the {@link Curve} into. Expects a `Integer`. Default `5` - */ - getSpacedPoints(divisions?: number): TVector[]; - - /** - * Get total {@link Curve} arc length. - */ - getLength(): number; - - /** - * Get list of cumulative segment lengths. - * @param divisions Expects a `Integer` - */ - getLengths(divisions?: number): number[]; - - /** - * Update the cumulative segment distance cache - * @remarks - * The method must be called every time {@link Curve} parameters are changed - * If an updated {@link Curve} is part of a composed {@link Curve} like {@link THREE.CurvePath | CurvePath}, - * {@link .updateArcLengths}() must be called on the composed curve, too. - */ - updateArcLengths(): void; - - /** - * Given u in the range `[ 0, 1 ]`, - * @remarks - * `u` and `t` can then be used to give you points which are equidistant from the ends of the curve, using {@link .getPoint}. - * @param u Expects a `Float` - * @param distance Expects a `Float` - * @returns `t` also in the range `[ 0, 1 ]`. Expects a `Float`. - */ - getUtoTmapping(u: number, distance: number): number; - - /** - * Returns a unit vector tangent at t - * @remarks - * If the derived {@link Curve} does not implement its tangent derivation, two points a small delta apart will be used to find its gradient which seems to give a reasonable approximation. - * @param t A position on the curve. Must be in the range `[ 0, 1 ]`. Expects a `Float` - * @param optionalTarget If specified, the result will be copied into this Vector, otherwise a new Vector will be created. - */ - getTangent(t: number, optionalTarget?: TVector): TVector; - - /** - * Returns tangent at a point which is equidistant to the ends of the {@link Curve} from the point given in {@link .getTangent}. - * @param u A position on the {@link Curve} according to the arc length. Must be in the range `[ 0, 1 ]`. Expects a `Float` - * @param optionalTarget If specified, the result will be copied into this Vector, otherwise a new Vector will be created. - */ - getTangentAt(u: number, optionalTarget?: TVector): TVector; - - /** - * Generates the Frenet Frames - * @remarks - * Requires a {@link Curve} definition in 3D space - * Used in geometries like {@link THREE.TubeGeometry | TubeGeometry} or {@link THREE.ExtrudeGeometry | ExtrudeGeometry}. - * @param segments Expects a `Integer` - * @param closed - */ - computeFrenetFrames( - segments: number, - closed?: boolean - ): { - tangents: Vector3[]; - normals: Vector3[]; - binormals: Vector3[]; - }; - - /** - * Creates a clone of this instance. - */ - clone(): this; - /** - * Copies another {@link Curve} object to this instance. - * @param source - */ - copy(source: Curve): this; - - /** - * Returns a JSON object representation of this instance. - */ - toJSON(): CurveJSON; - - /** - * Copies the data from the given JSON object to this instance. - * @param json - */ - fromJSON(json: CurveJSON): this; -} diff --git a/packages/canvas-three/three/src/extras/core/CurvePath.d.ts b/packages/canvas-three/three/src/extras/core/CurvePath.d.ts deleted file mode 100644 index 4cb7d0b99..000000000 --- a/packages/canvas-three/three/src/extras/core/CurvePath.d.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Vector2 } from '../../math/Vector2.js'; -import { Vector3 } from '../../math/Vector3.js'; -import { Curve, CurveJSON } from './Curve.js'; - -export interface CurvePathJSON extends CurveJSON { - autoClose: boolean; - curves: CurveJSON[]; -} - -/** - * Curved Path - a curve path is simply a array of connected curves, but retains the api of a curve. - * @remarks - * A {@link CurvePath} is simply an array of connected curves, but retains the api of a curve. - * @see {@link https://threejs.org/docs/index.html#api/en/extras/core/CurvePath | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/core/CurvePath.js | Source} - */ -export class CurvePath extends Curve { - /** - * The constructor take no parameters. - */ - constructor(); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `CurvePath` - */ - override readonly type: string | 'CurvePath'; - - /** - * The array of {@link Curve | Curves}. - * @defaultValue `[]` - */ - curves: Array>; - - /** - * Whether or not to automatically close the path. - * @defaultValue false - */ - autoClose: boolean; - - /** - * Add a curve to the {@link .curves} array. - * @param curve - */ - add(curve: Curve): void; - /** - * Adds a {@link LineCurve | lineCurve} to close the path. - */ - closePath(): this; - - getPoint(t: number, optionalTarget?: TVector): TVector; - - /** - * Get list of cumulative curve lengths of the curves in the {@link .curves} array. - */ - getCurveLengths(): number[]; - - /** - * Returns an array of points representing a sequence of curves - * @remarks - * The `division` parameter defines the number of pieces each curve is divided into - * However, for optimization and quality purposes, the actual sampling resolution for each curve depends on its type - * For example, for a {@link THREE.LineCurve | LineCurve}, the returned number of points is always just 2. - * @param divisions Number of pieces to divide the curve into. Expects a `Integer`. Default `12` - */ - override getPoints(divisions?: number): TVector[]; - - /** - * Returns a set of divisions `+1` equi-spaced points using {@link .getPointAt | getPointAt(u)}. - * @param divisions Number of pieces to divide the curve into. Expects a `Integer`. Default `40` - */ - override getSpacedPoints(divisions?: number): TVector[]; - - toJSON(): CurvePathJSON; - fromJSON(json: CurvePathJSON): this; -} diff --git a/packages/canvas-three/three/src/extras/core/Interpolations.d.ts b/packages/canvas-three/three/src/extras/core/Interpolations.d.ts deleted file mode 100644 index 9f5ed3784..000000000 --- a/packages/canvas-three/three/src/extras/core/Interpolations.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Used internally by {@link THREE.SplineCurve | SplineCurve}. - * @param t Interpolation weight. Expects a `Float` - * @param p0 Expects a `Float` - * @param p1 Expects a `Float` - * @param p2 Expects a `Float` - * @param p3 P0, p1, p2, the points defining the spline curve. Expects a `Float` - * @see {@link https://threejs.org/docs/index.html#api/en/extras/core/Interpolations | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/core/Interpolations.js | Source} - */ -declare function CatmullRom(t: number, p0: number, p1: number, p2: number, p3: number): number; - -/** - * Used internally by {@link THREE.QuadraticBezierCurve3 | QuadraticBezierCurve3} and {@link THREE.QuadraticBezierCurve | QuadraticBezierCurve}. - * @param t Interpolation weight. Expects a `Float` - * @param p0 Expects a `Float` - * @param p1 Expects a `Float` - * @param p2 P0, p1, the starting, control and end points defining the curve. Expects a `Float` - * @see {@link https://threejs.org/docs/index.html#api/en/extras/core/Interpolations | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/core/Interpolations.js | Source} - */ -declare function QuadraticBezier(t: number, p0: number, p1: number, p2: number): number; - -/** - * Used internally by {@link THREE.CubicBezierCurve3 | CubicBezierCurve3} and {@link THREE.CubicBezierCurve | CubicBezierCurve}. - * @param t Interpolation weight. Expects a `Float` - * @param p0 Expects a `Float` - * @param p1 Expects a `Float` - * @param p2 Expects a `Float` - * @param p3 P0, p1, p2, the starting, control(twice) and end points defining the curve. Expects a `Float` - * @see {@link https://threejs.org/docs/index.html#api/en/extras/core/Interpolations | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/core/Interpolations.js | Source} - */ -declare function CubicBezier(t: number, p0: number, p1: number, p2: number, p3: number): number; - -export { CatmullRom, CubicBezier, QuadraticBezier }; diff --git a/packages/canvas-three/three/src/extras/core/Path.d.ts b/packages/canvas-three/three/src/extras/core/Path.d.ts deleted file mode 100644 index ae95f2334..000000000 --- a/packages/canvas-three/three/src/extras/core/Path.d.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { Vector2, Vector2Tuple } from '../../math/Vector2.js'; -import { CurvePath, CurvePathJSON } from './CurvePath.js'; - -export interface PathJSON extends CurvePathJSON { - currentPoint: Vector2Tuple; -} - -/** - * A 2D {@link Path} representation. - * @remarks - * The class provides methods for creating paths and contours of 2D shapes similar to the 2D Canvas API. - * @example - * ```typescript - * const {@link Path} = new THREE.Path(); - * path.lineTo(0, 0.8); - * path.quadraticCurveTo(0, 1, 0.2, 1); - * path.lineTo(1, 1); - * const points = path.getPoints(); - * const geometry = new THREE.BufferGeometry().setFromPoints(points); - * const material = new THREE.LineBasicMaterial({ - * color: 0xffffff - * }); - * const line = new THREE.Line(geometry, material); - * scene.add(line); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/extras/core/Path | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/core/Path.js | Source} - */ -export class Path extends CurvePath { - /** - * Creates a {@link Path} from the points - * @remarks - * The first point defines the offset, then successive points are added to the {@link CurvePath.curves | curves} array as {@link LineCurve | LineCurves}. - * If no points are specified, an empty {@link Path} is created and the {@link .currentPoint} is set to the origin. - * @param points Array of {@link Vector2 | Vector2s}. - */ - constructor(points?: Vector2[]); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `Path` - */ - override readonly type: string | 'Path'; - - /** - * The current offset of the path. Any new {@link THREE.Curve | Curve} added will start here. - * @defaultValue `new THREE.Vector2()` - */ - currentPoint: Vector2; - - /** - * Adds an absolutely positioned {@link THREE.EllipseCurve | EllipseCurve} to the path. - * @param x Expects a `Float` - * @param y X, The absolute center of the arc. Expects a `Float` - * @param radius The radius of the arc. Expects a `Float` - * @param startAngle The start angle in radians. Expects a `Float` - * @param endAngle The end angle in radians. Expects a `Float` - * @param clockwise Sweep the arc clockwise. Default `false` - */ - absarc(aX: number, aY: number, aRadius: number, aStartAngle: number, aEndAngle: number, aClockwise?: boolean): this; - - /** - * Adds an absolutely positioned {@link THREE.EllipseCurve | EllipseCurve} to the path. - * @param x Expects a `Float` - * @param y X, The absolute center of the ellipse. Expects a `Float` - * @param xRadius The radius of the ellipse in the x axis. Expects a `Float` - * @param yRadius The radius of the ellipse in the y axis. Expects a `Float` - * @param startAngle The start angle in radians. Expects a `Float` - * @param endAngle The end angle in radians. Expects a `Float` - * @param clockwise Sweep the ellipse clockwise. Default `false` - * @param rotation The rotation angle of the ellipse in radians, counterclockwise from the positive X axis. Optional, Expects a `Float`. Default `0` - */ - absellipse(aX: number, aY: number, xRadius: number, yRadius: number, aStartAngle: number, aEndAngle: number, aClockwise?: boolean, aRotation?: number): this; - - /** - * Adds an {@link THREE.EllipseCurve | EllipseCurve} to the path, positioned relative to {@link .currentPoint}. - * @param x Expects a `Float` - * @param y X, The center of the arc offset from the last call. Expects a `Float` - * @param radius The radius of the arc. Expects a `Float` - * @param startAngle The start angle in radians. Expects a `Float` - * @param endAngle The end angle in radians. Expects a `Float` - * @param clockwise Sweep the arc clockwise. Default `false` - */ - arc(aX: number, aY: number, aRadius: number, aStartAngle: number, aEndAngle: number, aClockwise?: boolean): this; - - /** - * This creates a bezier curve from {@link .currentPoint} with (cp1X, cp1Y) and (cp2X, cp2Y) as control points and updates {@link .currentPoint} to x and y. - * @param cp1X Expects a `Float` - * @param cp1Y Expects a `Float` - * @param cp2X Expects a `Float` - * @param cp2Y Expects a `Float` - * @param x Expects a `Float` - * @param y Expects a `Float` - */ - bezierCurveTo(aCP1x: number, aCP1y: number, aCP2x: number, aCP2y: number, aX: number, aY: number): this; - - /** - * Adds an {@link THREE.EllipseCurve | EllipseCurve} to the path, positioned relative to {@link .currentPoint}. - * @param x Expects a `Float` - * @param y X, The center of the ellipse offset from the last call. Expects a `Float` - * @param xRadius The radius of the ellipse in the x axis. Expects a `Float` - * @param yRadius The radius of the ellipse in the y axis. Expects a `Float` - * @param startAngle The start angle in radians. Expects a `Float` - * @param endAngle The end angle in radians. Expects a `Float` - * @param clockwise Sweep the ellipse clockwise. Default `false` - * @param rotation The rotation angle of the ellipse in radians, counterclockwise from the positive X axis. Optional, Expects a `Float`. Default `0` - */ - ellipse(aX: number, aY: number, xRadius: number, yRadius: number, aStartAngle: number, aEndAngle: number, aClockwise?: boolean, aRotation?: number): this; - - /** - * Connects a {@link THREE.LineCurve | LineCurve} from {@link .currentPoint} to x, y onto the path. - * @param x Expects a `Float` - * @param y Expects a `Float` - */ - lineTo(x: number, y: number): this; - - /** - * Move the {@link .currentPoint} to x, y. - * @param x Expects a `Float` - * @param y Expects a `Float` - */ - moveTo(x: number, y: number): this; - - /** - * Creates a quadratic curve from {@link .currentPoint} with cpX and cpY as control point and updates {@link .currentPoint} to x and y. - * @param cpX Expects a `Float` - * @param cpY Expects a `Float` - * @param x Expects a `Float` - * @param y Expects a `Float` - */ - quadraticCurveTo(aCPx: number, aCPy: number, aX: number, aY: number): this; - - /** - * Points are added to the {@link CurvePath.curves | curves} array as {@link THREE.LineCurve | LineCurves}. - * @param vector2s - */ - setFromPoints(vectors: Vector2[]): this; - - /** - * Connects a new {@link THREE.SplineCurve | SplineCurve} onto the path. - * @param points An array of {@link Vector2 | Vector2's} - */ - splineThru(pts: Vector2[]): this; - - toJSON(): PathJSON; - fromJSON(json: PathJSON): this; -} diff --git a/packages/canvas-three/three/src/extras/core/Shape.d.ts b/packages/canvas-three/three/src/extras/core/Shape.d.ts deleted file mode 100644 index de001ba1e..000000000 --- a/packages/canvas-three/three/src/extras/core/Shape.d.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { Vector2 } from '../../math/Vector2.js'; -import { Path, PathJSON } from './Path.js'; - -export interface ShapeJSON extends PathJSON { - uuid: string; - holes: PathJSON[]; -} - -/** - * Defines an arbitrary 2d {@link Shape} plane using paths with optional holes - * @remarks - * It can be used with {@link THREE.ExtrudeGeometry | ExtrudeGeometry}, {@link THREE.ShapeGeometry | ShapeGeometry}, to get points, or to get triangulated faces. - * @example - * ```typescript - * const heartShape = new THREE.Shape(); - * heartShape.moveTo(25, 25); - * heartShape.bezierCurveTo(25, 25, 20, 0, 0, 0); - * heartShape.bezierCurveTo(-30, 0, -30, 35, -30, 35); - * heartShape.bezierCurveTo(-30, 55, -10, 77, 25, 95); - * heartShape.bezierCurveTo(60, 77, 80, 55, 80, 35); - * heartShape.bezierCurveTo(80, 35, 80, 0, 50, 0); - * heartShape.bezierCurveTo(35, 0, 25, 25, 25, 25); - * const extrudeSettings = { - * depth: 8, - * bevelEnabled: true, - * bevelSegments: 2, - * steps: 2, - * bevelSize: 1, - * bevelThickness: 1 - * }; - * const geometry = new THREE.ExtrudeGeometry(heartShape, extrudeSettings); - * const mesh = new THREE.Mesh(geometry, new THREE.MeshPhongMaterial()); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_geometry_shapes | geometry / shapes } - * @see Example: {@link https://threejs.org/examples/#webgl_geometry_extrude_shapes | geometry / extrude / shapes } - * @see Example: {@link https://threejs.org/examples/#webgl_geometry_extrude_shapes2 | geometry / extrude / shapes2 } - * @see {@link https://threejs.org/docs/index.html#api/en/extras/core/Shape | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/core/Shape.js | Source} - */ -export class Shape extends Path { - /** - * Creates a {@link Shape} from the points - * @remarks - * The first point defines the offset, then successive points are added to the {@link CurvePath.curves | curves} array as {@link THREE.LineCurve | LineCurves}. - * If no points are specified, an empty {@link Shape} is created and the {@link .currentPoint} is set to the origin. - * @param points Array of {@link Vector2 | Vector2s}. - */ - constructor(points?: Vector2[]); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `Shape` - */ - override readonly type: string | 'Shape'; - - /** - * {@link http://en.wikipedia.org/wiki/Universally_unique_identifier | UUID} of this object instance. - * @remarks This gets automatically assigned and shouldn't be edited. - */ - uuid: string; - - /** - * An array of {@link Path | paths} that define the holes in the shape. - * @defaultValue `[]` - */ - holes: Path[]; - - /** - * Call {@link THREE.Curve.getPoints | getPoints} on the {@link Shape} and the {@link holes} array - * @param divisions The fineness of the result. Expects a `Integer` - */ - extractPoints(divisions: number): { - shape: Vector2[]; - holes: Vector2[][]; - }; - - /** - * Get an array of {@link Vector2 | Vector2's} that represent the holes in the shape. - * @param divisions The fineness of the result. Expects a `Integer` - */ - getPointsHoles(divisions: number): Vector2[][]; - - toJSON(): ShapeJSON; - fromJSON(json: ShapeJSON): this; -} diff --git a/packages/canvas-three/three/src/extras/core/ShapePath.d.ts b/packages/canvas-three/three/src/extras/core/ShapePath.d.ts deleted file mode 100644 index 764cf78a5..000000000 --- a/packages/canvas-three/three/src/extras/core/ShapePath.d.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { Color } from '../../math/Color.js'; -import { Vector2 } from '../../math/Vector2.js'; -import { Path } from './Path.js'; -import { Shape } from './Shape.js'; - -/** - * This class is used to convert a series of shapes to an array of {@link THREE.Path | Path's}, - * for example an SVG shape to a path. - * @see {@link https://threejs.org/docs/index.html#api/en/extras/core/ShapePath | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/core/ShapePath.js | Source} - */ -export class ShapePath { - /** - * Creates a new {@link ShapePath} - * @remarks - * Unlike a {@link THREE.Path | Path}, no points are passed in as the {@link ShapePath} is designed to be generated after creation. - */ - constructor(); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `ShapePath` - */ - readonly type: 'ShapePath'; - - /** - * Array of {@link THREE.Path | Path's}s. - * @defaultValue `[]` - */ - subPaths: Path[]; - - /** - * The current {@link THREE.Path | Path} that is being generated. - * @defaultValue `null` - */ - readonly currentPath: Path | null; - - /** - * {@link THREE.Color | Color} of the shape, by default set to white _(0xffffff)_. - * @defaultValue `new THREE.Color()` - */ - color: Color; - - /** - * Starts a new {@link THREE.Path | Path} and calls {@link THREE.Path.moveTo | Path.moveTo}( x, y ) on that {@link THREE.Path | Path} - * @remarks - * Also points {@link ShapePath.currentPath | currentPath} to that {@link THREE.Path | Path}. - * @param x Expects a `Float` - * @param y Expects a `Float` - */ - moveTo(x: number, y: number): this; - - /** - * This creates a line from the {@link ShapePath.currentPath | currentPath}'s offset to X and Y and updates the offset to X and Y. - * @param x Expects a `Float` - * @param y Expects a `Float` - */ - lineTo(x: number, y: number): this; - - /** - * This creates a quadratic curve from the {@link ShapePath.currentPath | currentPath}'s - * offset to _x_ and _y_ with _cpX_ and _cpY_ as control point and updates the {@link ShapePath.currentPath | currentPath}'s offset to _x_ and _y_. - * @param cpX Expects a `Float` - * @param cpY Expects a `Float` - * @param x Expects a `Float` - * @param y Expects a `Float` - */ - quadraticCurveTo(aCPx: number, aCPy: number, aX: number, aY: number): this; - - /** - * This creates a bezier curve from the {@link ShapePath.currentPath | currentPath}'s - * offset to _x_ and _y_ with _cp1X_, _cp1Y_ and _cp2X_, _cp2Y_ as control points and - * updates the {@link ShapePath.currentPath | currentPath}'s offset to _x_ and _y_. - * @param cp1X Expects a `Float` - * @param cp1Y Expects a `Float` - * @param cp2X Expects a `Float` - * @param cp2Y Expects a `Float` - * @param x Expects a `Float` - * @param y Expects a `Float` - */ - bezierCurveTo(aCP1x: number, aCP1y: number, aCP2x: number, aCP2y: number, aX: number, aY: number): this; - - /** - * Connects a new {@link THREE.SplineCurve | SplineCurve} onto the {@link ShapePath.currentPath | currentPath}. - * @param points An array of {@link THREE.Vector2 | Vector2}s - */ - splineThru(pts: Vector2[]): this; - - /** - * Converts the {@link ShapePath.subPaths | subPaths} array into an array of Shapes - * @remarks - * By default solid shapes are defined clockwise (CW) and holes are defined counterclockwise (CCW) - * If isCCW is set to true, then those are flipped. - * @param isCCW Changes how solids and holes are generated - */ - toShapes(isCCW: boolean): Shape[]; -} diff --git a/packages/canvas-three/three/src/extras/curves/ArcCurve.d.ts b/packages/canvas-three/three/src/extras/curves/ArcCurve.d.ts deleted file mode 100644 index 210b786cf..000000000 --- a/packages/canvas-three/three/src/extras/curves/ArcCurve.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { EllipseCurve } from './EllipseCurve.js'; - -/** - * Alias for {@link THREE.EllipseCurve | EllipseCurve}. - * @see {@link https://threejs.org/docs/index.html#api/en/extras/curves/ArcCurve | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/curves/ArcCurve.js | Source} - */ -export class ArcCurve extends EllipseCurve { - /** - * This constructor creates a new {@link ArcCurve}. - * @param aX The X center of the ellipse. Expects a `Float`. Default is `0`. - * @param aY The Y center of the ellipse. Expects a `Float`. Default is `0`. - * @param xRadius The radius of the ellipse in the x direction. Expects a `Float`. Default is `1`. - * @param yRadius The radius of the ellipse in the y direction. Expects a `Float`. Default is `1`. - * @param aStartAngle The start angle of the curve in radians starting from the positive X axis. Default is `0`. - * @param aEndAngle The end angle of the curve in radians starting from the positive X axis. Default is `2 x Math.PI`. - * @param aClockwise Whether the ellipse is drawn clockwise. Default is `false`. - */ - constructor(aX?: number, aY?: number, aRadius?: number, aStartAngle?: number, aEndAngle?: number, aClockwise?: boolean); - - /** - * Read-only flag to check if a given object is of type {@link ArcCurve}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isArcCurve = true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `ArcCurve` - */ - override readonly type: string | 'ArcCurve'; -} diff --git a/packages/canvas-three/three/src/extras/curves/CatmullRomCurve3.d.ts b/packages/canvas-three/three/src/extras/curves/CatmullRomCurve3.d.ts deleted file mode 100644 index ff4bb0b8b..000000000 --- a/packages/canvas-three/three/src/extras/curves/CatmullRomCurve3.d.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Vector3 } from '../../math/Vector3.js'; -import { Curve } from '../core/Curve.js'; - -export type CurveType = 'centripetal' | 'chordal' | 'catmullrom'; - -/** - * Create a smooth **3D** spline curve from a series of points using the {@link https://en.wikipedia.org/wiki/Centripetal_Catmull-Rom_spline | Catmull-Rom} algorithm. - * @example - * ```typescript - * //Create a closed wavey loop - * const curve = new THREE.CatmullRomCurve3([ - * new THREE.Vector3(-10, 0, 10), - * new THREE.Vector3(-5, 5, 5), - * new THREE.Vector3(0, 0, 0), - * new THREE.Vector3(5, -5, 5), - * new THREE.Vector3(10, 0, 10)]); - * const points = curve.getPoints(50); - * const geometry = new THREE.BufferGeometry().setFromPoints(points); - * const material = new THREE.LineBasicMaterial({ - * color: 0xff0000 - * }); - * // Create the final object to add to the scene - * const curveObject = new THREE.Line(geometry, material); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_geometry_extrude_splines | WebGL / geometry / extrude / splines} - * @see {@link https://threejs.org/docs/index.html#api/en/extras/curves/CatmullRomCurve3 | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/curves/CatmullRomCurve3.js | Source} - */ -export class CatmullRomCurve3 extends Curve { - /** - * This constructor creates a new {@link CatmullRomCurve3}. - * @param points An array of {@link THREE.Vector3 | Vector3} points - * @param closed Whether the curve is closed. Default `false` - * @param curveType Type of the curve. Default `centripetal` - * @param tension Tension of the curve. Expects a `Float`. Default `0.5` - */ - constructor(points?: Vector3[], closed?: boolean, curveType?: CurveType, tension?: number); - - /** - * Read-only flag to check if a given object is of type {@link CatmullRomCurve3}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isCatmullRomCurve3 = true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `CatmullRomCurve3` - */ - override readonly type: string | 'CatmullRomCurve3'; - - /** - * The curve will loop back onto itself when this is true. - * @defaultValue `false` - */ - closed: boolean; - - /** - * The array of {@link THREE.Vector3 | Vector3} points that define the curve. - * @remarks It needs at least two entries. - * @defaultValue `[]` - */ - points: Vector3[]; - - /** - * Possible values are `centripetal`, `chordal` and `catmullrom`. - * @defaultValue `centripetal` - */ - curveType: CurveType; - - /** - * When {@link .curveType} is `catmullrom`, defines catmullrom's tension. - * @remarks Expects a `Float` - */ - tension: number; -} diff --git a/packages/canvas-three/three/src/extras/curves/CubicBezierCurve.d.ts b/packages/canvas-three/three/src/extras/curves/CubicBezierCurve.d.ts deleted file mode 100644 index f3ca3acf9..000000000 --- a/packages/canvas-three/three/src/extras/curves/CubicBezierCurve.d.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Vector2 } from '../../math/Vector2.js'; -import { Curve } from '../core/Curve.js'; - -/** - * Create a smooth **2D** {@link http://en.wikipedia.org/wiki/B%C3%A9zier_curve#mediaviewer/File:Bezier_curve.svg | cubic bezier curve}, - * defined by a start point, endpoint and two control points. - * @example - * ```typescript - * const curve = new THREE.CubicBezierCurve( - * new THREE.Vector2(-10, 0), - * new THREE.Vector2(-5, 15), - * new THREE.Vector2(20, 15), - * new THREE.Vector2(10, 0)); - * const points = curve.getPoints(50); - * const geometry = new THREE.BufferGeometry().setFromPoints(points); - * const material = new THREE.LineBasicMaterial({ - * color: 0xff0000 - * }); - * // Create the final object to add to the scene - * const curveObject = new THREE.Line(geometry, material); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/extras/curves/CubicBezierCurve | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/curves/CubicBezierCurve.js | Source} - */ -export class CubicBezierCurve extends Curve { - /** - * This constructor creates a new {@link CubicBezierCurve}. - * @param v0 The starting point. Default is `new THREE.Vector2()`. - * @param v1 The first control point. Default is `new THREE.Vector2()`. - * @param v2 The second control point. Default is `new THREE.Vector2()`. - * @param v3 The ending point. Default is `new THREE.Vector2()`. - */ - constructor(v0?: Vector2, v1?: Vector2, v2?: Vector2, v3?: Vector2); - - /** - * Read-only flag to check if a given object is of type {@link CubicBezierCurve}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isCubicBezierCurve = true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `CubicBezierCurve` - */ - override readonly type: string | 'CubicBezierCurve'; - - /** - * The starting point. - * @defaultValue `new THREE.Vector2()` - */ - v0: Vector2; - - /** - * The first control point. - * @defaultValue `new THREE.Vector2()` - */ - v1: Vector2; - - /** - * The second control point. - * @defaultValue `new THREE.Vector2()` - */ - v2: Vector2; - - /** - * The ending point. - * @defaultValue `new THREE.Vector2()` - */ - v3: Vector2; -} diff --git a/packages/canvas-three/three/src/extras/curves/CubicBezierCurve3.d.ts b/packages/canvas-three/three/src/extras/curves/CubicBezierCurve3.d.ts deleted file mode 100644 index 77a9685b0..000000000 --- a/packages/canvas-three/three/src/extras/curves/CubicBezierCurve3.d.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Vector3 } from '../../math/Vector3.js'; -import { Curve } from '../core/Curve.js'; - -/** - * Create a smooth **3D** {@link http://en.wikipedia.org/wiki/B%C3%A9zier_curve#mediaviewer/File:Bezier_curve.svg | cubic bezier curve}, - * defined by a start point, endpoint and two control points. - * @example - * ```typescript - * const curve = new THREE.CubicBezierCurve( - * new THREE.Vector2(-10, 0), - * new THREE.Vector2(-5, 15), - * new THREE.Vector2(20, 15), - * new THREE.Vector2(10, 0)); - * const points = curve.getPoints(50); - * const geometry = new THREE.BufferGeometry().setFromPoints(points); - * const material = new THREE.LineBasicMaterial({ - * color: 0xff0000 - * }); - * // Create the final object to add to the scene - * const curveObject = new THREE.Line(geometry, material); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/extras/curves/CubicBezierCurve | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/curves/CubicBezierCurve.js | Source} - */ -export class CubicBezierCurve3 extends Curve { - /** - * This constructor creates a new {@link CubicBezierCurve3}. - * @param v0 The starting point. Default is `new THREE.Vector3()`. - * @param v1 The first control point. Default is `new THREE.Vector3()`. - * @param v2 The second control point. Default is `new THREE.Vector3()`. - * @param v3 The ending point. Default is `new THREE.Vector3()`. - */ - constructor(v0?: Vector3, v1?: Vector3, v2?: Vector3, v3?: Vector3); - - /** - * Read-only flag to check if a given object is of type {@link CubicBezierCurve3}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isCubicBezierCurve3 = true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `CubicBezierCurve3` - */ - override readonly type: string | 'CubicBezierCurve3'; - - /** - * The starting point. - * @defaultValue `new THREE.Vector3()`. - */ - v0: Vector3; - - /** - * The first control point. - * @defaultValue `new THREE.Vector3()`. - */ - v1: Vector3; - - /** - * The second control point. - * @defaultValue `new THREE.Vector3()`. - */ - v2: Vector3; - - /** - * The ending point. - * @defaultValue `new THREE.Vector3()`. - */ - v3: Vector3; -} diff --git a/packages/canvas-three/three/src/extras/curves/Curves.d.ts b/packages/canvas-three/three/src/extras/curves/Curves.d.ts deleted file mode 100644 index 9c4d8c0f9..000000000 --- a/packages/canvas-three/three/src/extras/curves/Curves.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export * from './ArcCurve.js'; -export * from './CatmullRomCurve3.js'; -export * from './CubicBezierCurve.js'; -export * from './CubicBezierCurve3.js'; -export * from './EllipseCurve.js'; -export * from './LineCurve.js'; -export * from './LineCurve3.js'; -export * from './QuadraticBezierCurve.js'; -export * from './QuadraticBezierCurve3.js'; -export * from './SplineCurve.js'; diff --git a/packages/canvas-three/three/src/extras/curves/EllipseCurve.d.ts b/packages/canvas-three/three/src/extras/curves/EllipseCurve.d.ts deleted file mode 100644 index 4c64ab9e3..000000000 --- a/packages/canvas-three/three/src/extras/curves/EllipseCurve.d.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { Vector2 } from '../../math/Vector2.js'; -import { Curve } from '../core/Curve.js'; - -/** - * Creates a 2d curve in the shape of an ellipse - * @remarks - * Setting the {@link xRadius} equal to the {@link yRadius} will result in a circle. - * @example - * ```typescript - * const curve = new THREE.EllipseCurve( - * 0, 0, // ax, aY - * 10, 10, // xRadius, yRadius - * 0, 2 * Math.PI, // aStartAngle, aEndAngle - * false, // aClockwise - * 0 // aRotation - * ); - * const points = curve.getPoints(50); - * const geometry = new THREE.BufferGeometry().setFromPoints(points); - * const material = new THREE.LineBasicMaterial({ color: 0xff0000 }); - * // Create the final object to add to the scene - * const ellipse = new THREE.Line(geometry, material); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/extras/curves/EllipseCurve | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/curves/EllipseCurve.js | Source} - */ -export class EllipseCurve extends Curve { - /** - * This constructor creates a new {@link EllipseCurve}. - * @param aX The X center of the ellipse. Expects a `Float`. Default is `0`. - * @param aY The Y center of the ellipse. Expects a `Float`. Default is `0`. - * @param xRadius The radius of the ellipse in the x direction. Expects a `Float`. Default is `1`. - * @param yRadius The radius of the ellipse in the y direction. Expects a `Float`. Default is `1`. - * @param aStartAngle The start angle of the curve in radians starting from the positive X axis. Default is `0`. - * @param aEndAngle The end angle of the curve in radians starting from the positive X axis. Default is `2 x Math.PI`. - * @param aClockwise Whether the ellipse is drawn clockwise. Default is `false`. - * @param aRotation The rotation angle of the ellipse in radians, counterclockwise from the positive X axis. Default is `0`. - */ - constructor(aX?: number, aY?: number, xRadius?: number, yRadius?: number, aStartAngle?: number, aEndAngle?: number, aClockwise?: boolean, aRotation?: number); - - /** - * Read-only flag to check if a given object is of type {@link EllipseCurve}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isEllipseCurve = true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `EllipseCurve` - */ - override readonly type: string | 'EllipseCurve'; - - /** - * The X center of the ellipse. - * @remarks Expects a `Float` - * @defaultValue `0` - */ - aX: number; - - /** - * The Y center of the ellipse. - * @remarks Expects a `Float` - * @defaultValue `0` - */ - aY: number; - - /** - * The radius of the ellipse in the x direction. - * @defaultValue `1` - */ - xRadius: number; - - /** - * The radius of the ellipse in the y direction. - * @defaultValue `1` - */ - yRadius: number; - - /** - * The start angle of the curve in radians starting from the middle right side. - * @remarks Expects a `Float` - * @defaultValue `0` - */ - aStartAngle: number; - - /** - * The end angle of the curve in radians starting from the middle right side. - * @remarks Expects a `Float` - * @defaultValue `2 * Math.PI` - */ - aEndAngle: number; - - /** - * Whether the ellipse is drawn clockwise. - * @defaultValue `false`` - */ - aClockwise: boolean; - - /** - * The rotation angle of the ellipse in radians, counterclockwise from the positive X axis (optional). - * @remarks Expects a `Float` - * @defaultValue `0` - */ - aRotation: number; -} diff --git a/packages/canvas-three/three/src/extras/curves/LineCurve.d.ts b/packages/canvas-three/three/src/extras/curves/LineCurve.d.ts deleted file mode 100644 index c9b1df383..000000000 --- a/packages/canvas-three/three/src/extras/curves/LineCurve.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Vector2 } from '../../math/Vector2.js'; -import { Curve } from '../core/Curve.js'; - -/** - * A curve representing a **2D** line segment. - * @see {@link https://threejs.org/docs/index.html#api/en/extras/curves/LineCurve | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/curves/LineCurve.js | Source} - */ -export class LineCurve extends Curve { - /** - * This constructor creates a new {@link LineCurve}. - * @param v1 The start point. Default is `new THREE.Vector2()`. - * @param v2 The end point. Default is `new THREE.Vector2()`. - */ - constructor(v1?: Vector2, v2?: Vector2); - - /** - * Read-only flag to check if a given object is of type {@link LineCurve}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isLineCurve = true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `LineCurve` - */ - override readonly type: string | 'LineCurve'; - - /** - * The start point. - * @defaultValue `new THREE.Vector2()` - */ - v1: Vector2; - - /** - * The end point - * @defaultValue `new THREE.Vector2()` - */ - v2: Vector2; -} diff --git a/packages/canvas-three/three/src/extras/curves/LineCurve3.d.ts b/packages/canvas-three/three/src/extras/curves/LineCurve3.d.ts deleted file mode 100644 index c173f15a3..000000000 --- a/packages/canvas-three/three/src/extras/curves/LineCurve3.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Vector3 } from '../../math/Vector3.js'; -import { Curve } from '../core/Curve.js'; - -/** - * A curve representing a **3D** line segment. - * @see {@link https://threejs.org/docs/index.html#api/en/extras/curves/LineCurve3 | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/curves/LineCurve3.js | Source} - */ -export class LineCurve3 extends Curve { - /** - * This constructor creates a new {@link LineCurve3}. - * @param v1 The start point. Default is `new THREE.Vector3()`. - * @param v2 The end point. Default is `new THREE.Vector3()`. - */ - constructor(v1?: Vector3, v2?: Vector3); - - /** - * Read-only flag to check if a given object is of type {@link LineCurve3}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isLineCurve3 = true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `LineCurve3` - */ - override readonly type: string | 'LineCurve3'; - - /** - * The start point. - * @defaultValue `new THREE.Vector3()`. - */ - v1: Vector3; - - /** - * The end point. - * @defaultValue `new THREE.Vector3()`. - */ - v2: Vector3; -} diff --git a/packages/canvas-three/three/src/extras/curves/QuadraticBezierCurve.d.ts b/packages/canvas-three/three/src/extras/curves/QuadraticBezierCurve.d.ts deleted file mode 100644 index 9ed1145cf..000000000 --- a/packages/canvas-three/three/src/extras/curves/QuadraticBezierCurve.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Vector2 } from '../../math/Vector2.js'; -import { Curve } from '../core/Curve.js'; - -/** - * Create a smooth **2D** {@link http://en.wikipedia.org/wiki/B%C3%A9zier_curve#mediaviewer/File:B%C3%A9zier_2_big.gif | quadratic bezier curve}, - * defined by a start point, end point and a single control point. - * @example - * ```typescript - * const curve = new THREE.QuadraticBezierCurve( - * new THREE.Vector2(-10, 0), - * new THREE.Vector2(20, 15), - * new THREE.Vector2(10, 0)); - * const points = curve.getPoints(50); - * const geometry = new THREE.BufferGeometry().setFromPoints(points); - * const material = new THREE.LineBasicMaterial({ - * color: 0xff0000 - * }); - * // Create the final object to add to the scene - * const curveObject = new THREE.Line(geometry, material); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/extras/curves/QuadraticBezierCurve | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/curves/QuadraticBezierCurve.js | Source} - */ -export class QuadraticBezierCurve extends Curve { - /** - * This constructor creates a new {@link QuadraticBezierCurve}. - * @param v0 The start point. Default is `new THREE.Vector2()`. - * @param v1 The control point. Default is `new THREE.Vector2()`. - * @param v2 The end point. Default is `new THREE.Vector2()`. - */ - constructor(v0?: Vector2, v1?: Vector2, v2?: Vector2); - - /** - * Read-only flag to check if a given object is of type {@link LineCurve3}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isQuadraticBezierCurve = true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `QuadraticBezierCurve` - */ - override readonly type: string | 'QuadraticBezierCurve'; - - /** - * The start point. - * @defaultValue `new THREE.Vector2()` - */ - v0: Vector2; - - /** - * The control point. - * @defaultValue `new THREE.Vector2()` - */ - v1: Vector2; - - /** - * The end point. - * @defaultValue `new THREE.Vector2()` - */ - v2: Vector2; -} diff --git a/packages/canvas-three/three/src/extras/curves/QuadraticBezierCurve3.d.ts b/packages/canvas-three/three/src/extras/curves/QuadraticBezierCurve3.d.ts deleted file mode 100644 index 17063c79a..000000000 --- a/packages/canvas-three/three/src/extras/curves/QuadraticBezierCurve3.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Vector3 } from '../../math/Vector3.js'; -import { Curve } from '../core/Curve.js'; - -/** - * Create a smooth **3D** {@link http://en.wikipedia.org/wiki/B%C3%A9zier_curve#mediaviewer/File:B%C3%A9zier_2_big.gif | quadratic bezier curve}, - * defined by a start point, end point and a single control point. - * @example - * ```typescript - * const curve = new THREE.QuadraticBezierCurve3( - * new THREE.Vector3(-10, 0, 0), - * new THREE.Vector3(20, 15, 0), - * new THREE.Vector3(10, 0, 0)); - * const points = curve.getPoints(50); - * const geometry = new THREE.BufferGeometry().setFromPoints(points); - * const material = new THREE.LineBasicMaterial({ - * color: 0xff0000 - * }); - * // Create the final object to add to the scene - * const curveObject = new THREE.Line(geometry, material); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/extras/curves/QuadraticBezierCurve3 | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/curves/QuadraticBezierCurve3.js | Source} - */ -export class QuadraticBezierCurve3 extends Curve { - /** - * This constructor creates a new {@link QuadraticBezierCurve}. - * @param v0 The start point. Default is `new THREE.Vector3()`. - * @param v1 The control point. Default is `new THREE.Vector3()`. - * @param v2 The end point. Default is `new THREE.Vector3()`. - */ - constructor(v0?: Vector3, v1?: Vector3, v2?: Vector3); - - /** - * Read-only flag to check if a given object is of type {@link QuadraticBezierCurve3}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isQuadraticBezierCurve3 = true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `QuadraticBezierCurve3` - */ - override readonly type: string | 'QuadraticBezierCurve3'; - - /** - * The start point. - * @defaultValue `new THREE.Vector3()` - */ - v0: Vector3; - - /** - * The control point. - * @defaultValue `new THREE.Vector3()` - */ - v1: Vector3; - - /** - * The end point. - * @defaultValue `new THREE.Vector3()` - */ - v2: Vector3; -} diff --git a/packages/canvas-three/three/src/extras/curves/SplineCurve.d.ts b/packages/canvas-three/three/src/extras/curves/SplineCurve.d.ts deleted file mode 100644 index e168c8520..000000000 --- a/packages/canvas-three/three/src/extras/curves/SplineCurve.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Vector2 } from '../../math/Vector2.js'; -import { Curve } from '../core/Curve.js'; - -/** - * Create a smooth **2D** spline curve from a series of points. - * @example - * ```typescript - * // Create a sine-like wave - * const curve = new THREE.SplineCurve([ - * new THREE.Vector2(-10, 0), - * new THREE.Vector2(-5, 5), - * new THREE.Vector2(0, 0), - * new THREE.Vector2(5, -5), - * new THREE.Vector2(10, 0)]); - * const points = curve.getPoints(50); - * const geometry = new THREE.BufferGeometry().setFromPoints(points); - * const material = new THREE.LineBasicMaterial({ - * color: 0xff0000 - * }); - * // Create the final object to add to the scene - * const splineObject = new THREE.Line(geometry, material); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/extras/curves/SplineCurve | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/extras/curves/SplineCurve.js | Source} - */ -export class SplineCurve extends Curve { - /** - * This constructor creates a new {@link SplineCurve}. - * @param points An array of {@link THREE.Vector2 | Vector2} points that define the curve. Default `[]` - */ - constructor(points?: Vector2[]); - - /** - * Read-only flag to check if a given object is of type {@link SplineCurve}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isSplineCurve = true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `SplineCurve` - */ - override readonly type: string | 'SplineCurve'; - - /** - * The array of {@link THREE.Vector2 | Vector2} points that define the curve. - * @defaultValue `[]` - */ - points: Vector2[]; -} diff --git a/packages/canvas-three/three/src/geometries/BoxGeometry.d.ts b/packages/canvas-three/three/src/geometries/BoxGeometry.d.ts deleted file mode 100644 index 06baeedd7..000000000 --- a/packages/canvas-three/three/src/geometries/BoxGeometry.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; - -/** - * {@link BoxGeometry} is a geometry class for a rectangular cuboid with a given 'width', 'height', and 'depth' - * @remarks On creation, the cuboid is centred on the origin, with each edge parallel to one of the axes. - * @example - * ```typescript - * const geometry = new THREE.BoxGeometry(1, 1, 1); - * const material = new THREE.MeshBasicMaterial({ - * color: 0x00ff00 - * }); - * const cube = new THREE.Mesh(geometry, material); - * scene.add(cube); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/BoxGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/BoxGeometry.js | Source} - */ -export class BoxGeometry extends BufferGeometry { - /** - * Create a new instance of {@link BoxGeometry} - * @param width Width; that is, the length of the edges parallel to the X axis. Optional; Expects a `Float`. Default `1` - * @param height Height; that is, the length of the edges parallel to the Y axis. Optional; Expects a `Float`. Default `1` - * @param depth Depth; that is, the length of the edges parallel to the Z axis. Optional; Expects a `Float`. Default `1` - * @param widthSegments Number of segmented rectangular faces along the width of the sides. Optional; Expects a `Integer`. Default `1` - * @param heightSegments Number of segmented rectangular faces along the height of the sides. Optional; Expects a `Integer`. Default `1` - * @param depthSegments Number of segmented rectangular faces along the depth of the sides. Optional; Expects a `Integer`. Default `1` - */ - constructor(width?: number, height?: number, depth?: number, widthSegments?: number, heightSegments?: number, depthSegments?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `BoxGeometry` - */ - override readonly type: string | 'BoxGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly width: number; - readonly height: number; - readonly depth: number; - readonly widthSegments: number; - readonly heightSegments: number; - readonly depthSegments: number; - }; - - /** @internal */ - static fromJSON(data: {}): BoxGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/CapsuleGeometry.d.ts b/packages/canvas-three/three/src/geometries/CapsuleGeometry.d.ts deleted file mode 100644 index 811688b2f..000000000 --- a/packages/canvas-three/three/src/geometries/CapsuleGeometry.d.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; - -/** - * {@link CapsuleGeometry} is a geometry class for a capsule with given radii and height - * @remarks It is constructed using a lathe. - * @example - * ```typescript - * const geometry = new THREE.CapsuleGeometry(1, 1, 4, 8); - * const material = new THREE.MeshBasicMaterial({ - * color: 0x00ff00 - * }); - * const capsule = new THREE.Mesh(geometry, material); - * scene.add(capsule); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/CapsuleGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/CapsuleGeometry.js | Source} - */ -export class CapsuleGeometry extends BufferGeometry { - /** - * Create a new instance of {@link CapsuleGeometry} - * @param radius Radius of the capsule. Expects a `Float`. Default `1` - * @param length Length of the middle section. Expects a `Float`. Default `1` - * @param capSegments Number of curve segments used to build the caps. Expects a `Integer`. Default `4` - * @param radialSegments Number of segmented faces around the circumference of the capsule. Expects a `Integer`. Default `8` - */ - constructor(radius?: number, length?: number, capSegments?: number, radialSegments?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `CapsuleGeometry` - */ - override readonly type: string | 'CapsuleGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly radius: number; - readonly length: number; - readonly capSegments: number; - readonly radialSegments: number; - }; - - /** @internal */ - static fromJSON(data: {}): CapsuleGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/CircleGeometry.d.ts b/packages/canvas-three/three/src/geometries/CircleGeometry.d.ts deleted file mode 100644 index 254c26a23..000000000 --- a/packages/canvas-three/three/src/geometries/CircleGeometry.d.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; - -/** - * {@link CircleGeometry} is a simple shape of Euclidean geometry - * @remarks - * It is constructed from a number of triangular segments that are oriented around a central point and extend as far out as a given radius - * It is built counter-clockwise from a start angle and a given central angle - * It can also be used to create regular polygons, where the number of segments determines the number of sides. - * @example - * ```typescript - * const geometry = new THREE.CircleGeometry(5, 32); - * const material = new THREE.MeshBasicMaterial({ - * color: 0xffff00 - * }); - * const circle = new THREE.Mesh(geometry, material); - * scene.add(circle); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/CircleGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/CircleGeometry.js | Source} - */ -export class CircleGeometry extends BufferGeometry { - /** - * Create a new instance of {@link CircleGeometry} - * @param radius Radius of the circle. Expects a `Float`. Default `1` - * @param segments Number of segments (triangles). Expects a `Integer`. Minimum `3`. Default `32` - * @param thetaStart Start angle for first segment. Expects a `Float`. Default `0`, _(three o'clock position)_. - * @param thetaLength The central angle, often called theta, of the circular sector. Expects a `Float`. Default `Math.PI * 2`, _which makes for a complete circle_. - */ - constructor(radius?: number, segments?: number, thetaStart?: number, thetaLength?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `CircleGeometry` - */ - override readonly type: string | 'CircleGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly radius: number; - readonly segments: number; - readonly thetaStart: number; - readonly thetaLength: number; - }; - - /** @internal */ - static fromJSON(data: {}): CircleGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/ConeGeometry.d.ts b/packages/canvas-three/three/src/geometries/ConeGeometry.d.ts deleted file mode 100644 index 318449474..000000000 --- a/packages/canvas-three/three/src/geometries/ConeGeometry.d.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { CylinderGeometry } from './CylinderGeometry.js'; - -/** - * A class for generating cone geometries. - * @example - * ```typescript - * const geometry = new THREE.ConeGeometry(5, 20, 32); - * const material = new THREE.MeshBasicMaterial({ - * color: 0xffff00 - * }); - * const cone = new THREE.Mesh(geometry, material); - * scene.add(cone); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/ConeGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/ConeGeometry.js | Source} - */ -export class ConeGeometry extends CylinderGeometry { - /** - * Create a new instance of {@link ConeGeometry} - * @param radius Radius of the cone base. Expects a `Float`. Default `1` - * @param height Height of the cone. Expects a `Float`. Default `1` - * @param radialSegments Number of segmented faces around the circumference of the cone. Expects a `Integer`. Default `32` - * @param heightSegments Number of rows of faces along the height of the cone. Expects a `Integer`. Default `1` - * @param openEnded A Boolean indicating whether the base of the cone is open or capped. Default `false`, _meaning capped_. - * @param thetaStart Start angle for first segment. Expects a `Float`. Default `0`, _(three o'clock position)_. - * @param thetaLength The central angle, often called theta, of the circular sector. Expects a `Float`. Default `Math.PI * 2`, _which makes for a complete cone_. - */ - constructor(radius?: number, height?: number, radialSegments?: number, heightSegments?: number, openEnded?: boolean, thetaStart?: number, thetaLength?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `ConeGeometry` - */ - override readonly type: string | 'ConeGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks {@link radiusTop} and {@link radiusBottom} are from base {@link THREE.CylinderGeometry} class. - * @remarks Any modification after instantiation does not change the geometry. - */ - override readonly parameters: { - readonly radius: number; - readonly radiusTop: number; - readonly radiusBottom: number; - readonly height: number; - readonly radialSegments: number; - readonly heightSegments: number; - readonly openEnded: boolean; - readonly thetaStart: number; - readonly thetaLength: number; - }; - - /** @internal */ - static fromJSON(data: {}): ConeGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/CylinderGeometry.d.ts b/packages/canvas-three/three/src/geometries/CylinderGeometry.d.ts deleted file mode 100644 index 80b36364c..000000000 --- a/packages/canvas-three/three/src/geometries/CylinderGeometry.d.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; - -/** - * A class for generating cylinder geometries. - * @example - * ```typescript - * const geometry = new THREE.CylinderGeometry(5, 5, 20, 32); - * const material = new THREE.MeshBasicMaterial({ - * color: 0xffff00 - * }); - * const cylinder = new THREE.Mesh(geometry, material); - * scene.add(cylinder); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/CylinderGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/CylinderGeometry.js | Source} - */ -export class CylinderGeometry extends BufferGeometry { - /** - * Create a new instance of {@link CylinderGeometry} - * @param radiusTop Radius of the cylinder at the top. Default `1` - * @param radiusBottom Radius of the cylinder at the bottom. Default `1` - * @param height Height of the cylinder. Default `1` - * @param radialSegments Number of segmented faces around the circumference of the cylinder. Default `32` - * @param heightSegments Number of rows of faces along the height of the cylinder. Expects a `Integer`. Default `1` - * @param openEnded A Boolean indicating whether the ends of the cylinder are open or capped. Default `false`, _meaning capped_. - * @param thetaStart Start angle for first segment. Default `0`, _(three o'clock position)_. - * @param thetaLength The central angle, often called theta, of the circular sector. Default `Math.PI * 2`, _which makes for a complete cylinder. - */ - constructor(radiusTop?: number, radiusBottom?: number, height?: number, radialSegments?: number, heightSegments?: number, openEnded?: boolean, thetaStart?: number, thetaLength?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `CylinderGeometry` - */ - override readonly type: string | 'CylinderGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly radiusTop: number; - readonly radiusBottom: number; - readonly height: number; - readonly radialSegments: number; - readonly heightSegments: number; - readonly openEnded: boolean; - readonly thetaStart: number; - readonly thetaLength: number; - }; - - /** @internal */ - static fromJSON(data: any): CylinderGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/DodecahedronGeometry.d.ts b/packages/canvas-three/three/src/geometries/DodecahedronGeometry.d.ts deleted file mode 100644 index 494f24715..000000000 --- a/packages/canvas-three/three/src/geometries/DodecahedronGeometry.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { PolyhedronGeometry } from './PolyhedronGeometry.js'; - -/** - * A class for generating a dodecahedron geometries. - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/DodecahedronGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/DodecahedronGeometry.js | Source} - */ -export class DodecahedronGeometry extends PolyhedronGeometry { - /** - * Create a new instance of {@link DodecahedronGeometry} - * @param radius Radius of the dodecahedron. Expects a `Float`. Default `1` - * @param detail Setting this to a value greater than 0 adds vertices making it no longer a dodecahedron. Expects a `Integer`. Default `0` - */ - constructor(radius?: number, detail?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `DodecahedronGeometry` - */ - override readonly type: string | 'DodecahedronGeometry'; - - /** @internal */ - static fromJSON(data: {}): DodecahedronGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/EdgesGeometry.d.ts b/packages/canvas-three/three/src/geometries/EdgesGeometry.d.ts deleted file mode 100644 index eac80e273..000000000 --- a/packages/canvas-three/three/src/geometries/EdgesGeometry.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; - -/** - * This can be used as a helper object to view the edges of a {@link THREE.BufferGeometry | geometry}. - * @example - * ```typescript - * const geometry = new THREE.BoxGeometry(100, 100, 100); - * const edges = new THREE.EdgesGeometry(geometry); - * const line = new THREE.LineSegments(edges, new THREE.LineBasicMaterial({ - * color: 0xffffff - * })); - * scene.add(line); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_helpers | helpers} - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/EdgesGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/EdgesGeometry.js | Source} - */ -export class EdgesGeometry extends BufferGeometry { - /** - * Create a new instance of {@link EdgesGeometry} - * @param geometry Any geometry object. Default `null`. - * @param thresholdAngle An edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. Expects a `Integer`. Default `1` _degree_. - */ - constructor(geometry?: TBufferGeometry | null, thresholdAngle?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `EdgesGeometry` - */ - override readonly type: string | 'EdgesGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly geometry: TBufferGeometry | null; - readonly thresholdAngle: number; - }; -} diff --git a/packages/canvas-three/three/src/geometries/ExtrudeGeometry.d.ts b/packages/canvas-three/three/src/geometries/ExtrudeGeometry.d.ts deleted file mode 100644 index b5272f53e..000000000 --- a/packages/canvas-three/three/src/geometries/ExtrudeGeometry.d.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { Curve } from '../extras/core/Curve.js'; -import { Shape } from '../extras/core/Shape.js'; -import { Vector2 } from '../math/Vector2.js'; -import { Vector3 } from '../math/Vector3.js'; - -export interface ExtrudeGeometryOptions { - /** - * Number of points on the curves. - * Expects a `Integer`. - * @defaultValue `12` - */ - curveSegments?: number | undefined; - - /** - * Number of points used for subdividing segments along the depth of the extruded spline. - * @defaultValue `1` - */ - steps?: number | undefined; - - /** - * Depth to extrude the shape. - * @defaultValue `1` - */ - depth?: number | undefined; - - /** - * Turn on bevel. Applying beveling to the shape. - * @defaultValue `true` - */ - bevelEnabled?: boolean | undefined; - - /** - * How deep into the original shape the bevel goes. - * Expects a `Float`. - * @defaultValue `0.2` - */ - bevelThickness?: number | undefined; - - /** - * Distance from the shape outline that the bevel extends - * Expects a `Float`. - * @defaultValue `bevelThickness - 0.1` - */ - bevelSize?: number | undefined; - - /** - * Distance from the shape outline that the bevel starts. - * Expects a `Float`. - * @defaultValue `0` - */ - bevelOffset?: number | undefined; - - /** - * Number of bevel layers/segments. - * Expects a `Integer`. - * @defaultValue `3` - */ - bevelSegments?: number | undefined; - - /** - * A 3D spline path along which the shape should be extruded. - * @remarks Bevels not supported for path extrusion. - */ - extrudePath?: Curve | undefined; - - /** - * A object that provides UV generator functions. - */ - UVGenerator?: UVGenerator | undefined; -} - -export interface UVGenerator { - generateTopUV(geometry: ExtrudeGeometry, vertices: number[], indexA: number, indexB: number, indexC: number): Vector2[]; - generateSideWallUV(geometry: ExtrudeGeometry, vertices: number[], indexA: number, indexB: number, indexC: number, indexD: number): Vector2[]; -} - -/** - * Creates extruded geometry from a path shape. - * @remarks This object extrudes a 2D shape to a 3D geometry. - * @remarks When creating a Mesh with this geometry, if you'd like to have a separate material used for its face and its extruded sides, you can use an array of materials - * @remarks The first material will be applied to the face; the second material will be applied to the sides. - * @example - * ```typescript - * const length = 12, width = 8; - * const shape = new THREE.Shape(); - * shape.moveTo(0, 0); - * shape.lineTo(0, width); - * shape.lineTo(length, width); - * shape.lineTo(length, 0); - * shape.lineTo(0, 0); - * const extrudeSettings = { - * steps: 2, - * depth: 16, - * bevelEnabled: true, - * bevelThickness: 1, - * bevelSize: 1, - * bevelOffset: 0, - * bevelSegments: 1 - * }; - * const geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings); - * const material = new THREE.MeshBasicMaterial({ - * color: 0x00ff00 - * }); - * const mesh = new THREE.Mesh(geometry, material); - * scene.add(mesh); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/ExtrudeGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/ExtrudeGeometry.js | Source} - */ -export class ExtrudeGeometry extends BufferGeometry { - /** - * Create a new instance of {@link ExtrudeGeometry} - * @param shapes Shape or an array of shapes. Default `new Shape([new Vector2(0.5, 0.5), new Vector2(-0.5, 0.5), new Vector2(-0.5, -0.5), new Vector2(0.5, -0.5)])`. - * @param options Object that can contain the following parameters. @see {@link ExtrudeGeometryOptions} for defaults. - */ - constructor(shapes?: Shape | Shape[], options?: ExtrudeGeometryOptions); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `ExtrudeGeometry` - */ - override readonly type: string | 'ExtrudeGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly shapes: Shape | Shape[]; - readonly options: ExtrudeGeometryOptions; - }; - - addShape(shape: Shape): void; - - /** @internal */ - static fromJSON(data: {}, shapes: unknown): ExtrudeGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/Geometries.d.ts b/packages/canvas-three/three/src/geometries/Geometries.d.ts deleted file mode 100644 index b3e327a27..000000000 --- a/packages/canvas-three/three/src/geometries/Geometries.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -export * from './BoxGeometry.js'; -export * from './CapsuleGeometry.js'; -export * from './CircleGeometry.js'; -export * from './ConeGeometry.js'; -export * from './CylinderGeometry.js'; -export * from './DodecahedronGeometry.js'; -export * from './EdgesGeometry.js'; -export * from './ExtrudeGeometry.js'; -export * from './IcosahedronGeometry.js'; -export * from './LatheGeometry.js'; -export * from './OctahedronGeometry.js'; -export * from './PlaneGeometry.js'; -export * from './PolyhedronGeometry.js'; -export * from './RingGeometry.js'; -export * from './ShapeGeometry.js'; -export * from './SphereGeometry.js'; -export * from './TetrahedronGeometry.js'; -export * from './TorusGeometry.js'; -export * from './TorusKnotGeometry.js'; -export * from './TubeGeometry.js'; -export * from './WireframeGeometry.js'; diff --git a/packages/canvas-three/three/src/geometries/IcosahedronGeometry.d.ts b/packages/canvas-three/three/src/geometries/IcosahedronGeometry.d.ts deleted file mode 100644 index ef60b0806..000000000 --- a/packages/canvas-three/three/src/geometries/IcosahedronGeometry.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { PolyhedronGeometry } from './PolyhedronGeometry.js'; - -/** - * A class for generating an icosahedron geometry. - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/IcosahedronGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/IcosahedronGeometry.js | Source} - */ -export class IcosahedronGeometry extends PolyhedronGeometry { - /** - * Create a new instance of {@link IcosahedronGeometry} - * @param radius Expects a `Float`. Default `1` - * @param detail Setting this to a value greater than 0 adds more vertices making it no longer an icosahedron. - * When detail is greater than 1, it's effectively a sphere. Expects a `Integer`. Default `0` - */ - constructor(radius?: number, detail?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `IcosahedronGeometry` - */ - override readonly type: string | 'IcosahedronGeometry'; - - /** @internal */ - static fromJSON(data: {}): IcosahedronGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/LatheGeometry.d.ts b/packages/canvas-three/three/src/geometries/LatheGeometry.d.ts deleted file mode 100644 index ca0f42f2a..000000000 --- a/packages/canvas-three/three/src/geometries/LatheGeometry.d.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { Vector2 } from '../math/Vector2.js'; - -/** - * Creates meshes with axial symmetry like vases - * @remarks - * The lathe rotates around the Y axis. - * @example - * ```typescript - * const points = []; - * for (let i = 0; i & lt; 10; i++) { - * points.push(new THREE.Vector2(Math.sin(i * 0.2) * 10 + 5, (i - 5) * 2)); - * } - * const geometry = new THREE.LatheGeometry(points); - * const material = new THREE.MeshBasicMaterial({ - * color: 0xffff00 - * }); - * const lathe = new THREE.Mesh(geometry, material); - * scene.add(lathe); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/LatheGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/LatheGeometry.js | Source} - */ -export class LatheGeometry extends BufferGeometry { - /** - * This creates a {@link LatheGeometry} based on the parameters. - * @param points Array of Vector2s. The x-coordinate of each point must be greater than zero. - * Default `[new Vector2(0, -0.5), new Vector2(0.5, 0), new Vector2(0, 0.5)]` _which creates a simple diamond shape_. - * @param segments The number of circumference segments to generate. Expects a `Integer`. Default `12`. - * @param phiStart The starting angle in radians. Expects a `Float`. Default `0`. - * @param phiLength The radian (0 to 2*PI) range of the lathed section 2*PI is a closed lathe, less than 2PI is a portion. Expects a `Float`. Default `Math.PI * 2`. - */ - constructor(points?: Vector2[], segments?: number, phiStart?: number, phiLength?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `LatheGeometry` - */ - override readonly type: string | 'LatheGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly points: Vector2[]; - readonly segments: number; - readonly phiStart: number; - readonly phiLength: number; - }; - - /** @internal */ - static fromJSON(data: {}): LatheGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/OctahedronGeometry.d.ts b/packages/canvas-three/three/src/geometries/OctahedronGeometry.d.ts deleted file mode 100644 index c2cb36368..000000000 --- a/packages/canvas-three/three/src/geometries/OctahedronGeometry.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { PolyhedronGeometry } from './PolyhedronGeometry.js'; - -/** - * A class for generating an octahedron geometry. - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/OctahedronGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/OctahedronGeometry.js | Source} - */ -export class OctahedronGeometry extends PolyhedronGeometry { - /** - * Create a new instance of {@link OctahedronGeometry} - * @param radius Radius of the octahedron. Expects a `Float`. Default `1` - * @param detail Setting this to a value greater than zero add vertices making it no longer an octahedron. Expects a `Integer`. Default `0` - */ - constructor(radius?: number, detail?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `OctahedronGeometry` - */ - override readonly type: string | 'OctahedronGeometry'; - - /** @internal */ - static fromJSON(data: {}): OctahedronGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/PlaneGeometry.d.ts b/packages/canvas-three/three/src/geometries/PlaneGeometry.d.ts deleted file mode 100644 index f51824f16..000000000 --- a/packages/canvas-three/three/src/geometries/PlaneGeometry.d.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; - -/** - * A class for generating plane geometries. - * @example - * ```typescript - * const geometry = new THREE.PlaneGeometry(1, 1); - * const material = new THREE.MeshBasicMaterial({ - * color: 0xffff00, - * side: THREE.DoubleSide - * }); - * const plane = new THREE.Mesh(geometry, material); - * scene.add(plane); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/PlaneGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/PlaneGeometry.js | Source} - */ -export class PlaneGeometry extends BufferGeometry { - /** - * Create a new instance of {@link PlaneGeometry} - * @param width Width along the X axis. Expects a `Float`. Default `1` - * @param height Height along the Y axis. Expects a `Float`. Default `1` - * @param widthSegments Number of segmented faces along the width of the sides. Expects a `Integer`. Default `1` - * @param heightSegments Number of segmented faces along the height of the sides. Expects a `Integer`. Default `1` - */ - constructor(width?: number, height?: number, widthSegments?: number, heightSegments?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `PlaneGeometry` - */ - override readonly type: string | 'PlaneGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly width: number; - readonly height: number; - readonly widthSegments: number; - readonly heightSegments: number; - }; - - /** @internal */ - static fromJSON(data: {}): PlaneGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/PolyhedronGeometry.d.ts b/packages/canvas-three/three/src/geometries/PolyhedronGeometry.d.ts deleted file mode 100644 index 51777fd0b..000000000 --- a/packages/canvas-three/three/src/geometries/PolyhedronGeometry.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; - -/** - * A polyhedron is a solid in three dimensions with flat faces - * @remarks - * This class will take an array of vertices, project them onto a sphere, and then divide them up to the desired level of detail - * This class is used by {@link THREE.DodecahedronGeometry | DodecahedronGeometry}, {@link THREE.IcosahedronGeometry | IcosahedronGeometry}, - * {@link THREE.OctahedronGeometry | OctahedronGeometry}, and {@link THREE.TetrahedronGeometry | TetrahedronGeometry} to generate their respective geometries. - * @example - * ```typescript - * const verticesOfCube = [-1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, ]; - * const indicesOfFaces = [ - * 2, 1, 0, 0, 3, 2, - * 0, 4, 7, 7, 3, 0, - * 0, 1, 5, 5, 4, 0, - * 1, 2, 6, 6, 5, 1, - * 2, 3, 7, 7, 6, 2, - * 4, 5, 6, 6, 7, 4]; - * const geometry = new THREE.PolyhedronGeometry(verticesOfCube, indicesOfFaces, 6, 2); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/PolyhedronGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/PolyhedronGeometry.js | Source} - */ -export class PolyhedronGeometry extends BufferGeometry { - /** - * Create a new instance of {@link PolyhedronGeometry} - * @param vertices Array of points of the form [1,1,1, -1,-1,-1, ... ]. Default `[]`. - * @param indices Array of indices that make up the faces of the form [0,1,2, 2,3,0, ... ]. Default `[]`. - * @param radius [page:The radius of the final shape Expects a `Float`. Default `1` - * @param detail [page:How many levels to subdivide the geometry. The more detail, the smoother the shape. Expects a `Integer`. Default `0` - */ - constructor(vertices?: number[], indices?: number[], radius?: number, detail?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `PolyhedronGeometry` - */ - override readonly type: string | 'PolyhedronGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly vertices: number[]; - readonly indices: number[]; - readonly radius: number; - readonly detail: number; - }; - - /** @internal */ - static fromJSON(data: {}): PolyhedronGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/RingGeometry.d.ts b/packages/canvas-three/three/src/geometries/RingGeometry.d.ts deleted file mode 100644 index 40ee70ef4..000000000 --- a/packages/canvas-three/three/src/geometries/RingGeometry.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; - -/** - * A class for generating a two-dimensional ring geometry. - * @example - * ```typescript - * const geometry = new THREE.RingGeometry(1, 5, 32); - * const material = new THREE.MeshBasicMaterial({ - * color: 0xffff00, - * side: THREE.DoubleSide - * }); - * const mesh = new THREE.Mesh(geometry, material); - * scene.add(mesh); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/RingGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/RingGeometry.js | Source} - */ -export class RingGeometry extends BufferGeometry { - /** - * Create a new instance of {@link RingGeometry} - * @param innerRadius Expects a `Float`. Default `0.5`. - * @param outerRadius Expects a `Float`. Default `1`. - * @param thetaSegments Number of segments. A higher number means the ring will be more round. Minimum is 3. Expects a `Integer`. Default `32`. - * @param phiSegments Number of segments per ring segment. Minimum is `1`. Expects a `Integer`. Default `1`. - * @param thetaStart Starting angle. Expects a `Float`. Default `0`. - * @param thetaLength Central angle. Expects a `Float`. Default `Math.PI * 2`. - */ - constructor(innerRadius?: number, outerRadius?: number, thetaSegments?: number, phiSegments?: number, thetaStart?: number, thetaLength?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `RingGeometry` - */ - override readonly type: string | 'RingGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly innerRadius: number; - readonly outerRadius: number; - readonly thetaSegments: number; - readonly phiSegments: number; - readonly thetaStart: number; - readonly thetaLength: number; - }; - - /** @internal */ - static fromJSON(data: {}): RingGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/ShapeGeometry.d.ts b/packages/canvas-three/three/src/geometries/ShapeGeometry.d.ts deleted file mode 100644 index 4bee14862..000000000 --- a/packages/canvas-three/three/src/geometries/ShapeGeometry.d.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { Shape } from '../extras/core/Shape.js'; - -/** - * Creates an one-sided polygonal geometry from one or more path shapes. - * @example - * ```typescript - * const x = 0, y = 0; - * const heartShape = new THREE.Shape(); - * heartShape.moveTo(x + 5, y + 5); - * heartShape.bezierCurveTo(x + 5, y + 5, x + 4, y, x, y); - * heartShape.bezierCurveTo(x - 6, y, x - 6, y + 7, x - 6, y + 7); - * heartShape.bezierCurveTo(x - 6, y + 11, x - 3, y + 15.4, x + 5, y + 19); - * heartShape.bezierCurveTo(x + 12, y + 15.4, x + 16, y + 11, x + 16, y + 7); - * heartShape.bezierCurveTo(x + 16, y + 7, x + 16, y, x + 10, y); - * heartShape.bezierCurveTo(x + 7, y, x + 5, y + 5, x + 5, y + 5); - * const geometry = new THREE.ShapeGeometry(heartShape); - * const material = new THREE.MeshBasicMaterial({ - * color: 0x00ff00 - * }); - * const mesh = new THREE.Mesh(geometry, material); - * scene.add(mesh); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/ShapeGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/ShapeGeometry.js | Source} - */ -export class ShapeGeometry extends BufferGeometry { - /** - * Create a new instance of {@link ShapeGeometry} - * @param shapes Array of shapes or a single {@link THREE.Shape | Shape}. Default `new Shape([new Vector2(0, 0.5), new Vector2(-0.5, -0.5), new Vector2(0.5, -0.5)])`, _a single triangle shape_. - * @param curveSegments Number of segments per shape. Expects a `Integer`. Default `12` - */ - constructor(shapes?: Shape | Shape[], curveSegments?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `ShapeGeometry` - */ - override readonly type: string | 'ShapeGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly shapes: Shape | Shape[]; - readonly curveSegments: number; - }; - - /** @internal */ - static fromJSON(data: {}): ShapeGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/SphereGeometry.d.ts b/packages/canvas-three/three/src/geometries/SphereGeometry.d.ts deleted file mode 100644 index bc9cd9500..000000000 --- a/packages/canvas-three/three/src/geometries/SphereGeometry.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; - -/** - * A class for generating sphere geometries. - * @example - * ```typescript - * const geometry = new THREE.SphereGeometry(15, 32, 16); - * const material = new THREE.MeshBasicMaterial({ - * color: 0xffff00 - * }); - * const sphere = new THREE.Mesh(geometry, material); - * scene.add(sphere); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/SphereGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/SphereGeometry.js | Source} - */ -export class SphereGeometry extends BufferGeometry { - /** - * Create a new instance of {@link SphereGeometry} - * @remarks - * The geometry is created by sweeping and calculating vertexes - * around the **Y** axis (horizontal sweep) and the **Z** axis (vertical sweep) - * Thus, incomplete spheres (akin to `'sphere slices'`) can be created - * through the use of different values of {@link phiStart}, {@link phiLength}, {@link thetaStart} and {@link thetaLength}, - * in order to define the points in which we start (or end) calculating those vertices. - * @param radius Sphere radius. Expects a `Float`. Default `1` - * @param widthSegments Number of horizontal segments. Minimum value is 3, and the Expects a `Integer`. Default `32` - * @param heightSegments Number of vertical segments. Minimum value is 2, and the Expects a `Integer`. Default `16` - * @param phiStart Specify horizontal starting angle. Expects a `Float`. Default `0` - * @param phiLength Specify horizontal sweep angle size. Expects a `Float`. Default `Math.PI * 2` - * @param thetaStart Specify vertical starting angle. Expects a `Float`. Default `0` - * @param thetaLength Specify vertical sweep angle size. Expects a `Float`. Default `Math.PI` - */ - constructor(radius?: number, widthSegments?: number, heightSegments?: number, phiStart?: number, phiLength?: number, thetaStart?: number, thetaLength?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `SphereGeometry` - */ - override readonly type: string | 'SphereGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly radius: number; - readonly widthSegments: number; - readonly heightSegments: number; - readonly phiStart: number; - readonly phiLength: number; - readonly thetaStart: number; - readonly thetaLength: number; - }; - - /** @internal */ - static fromJSON(data: {}): SphereGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/TetrahedronGeometry.d.ts b/packages/canvas-three/three/src/geometries/TetrahedronGeometry.d.ts deleted file mode 100644 index 984e87466..000000000 --- a/packages/canvas-three/three/src/geometries/TetrahedronGeometry.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { PolyhedronGeometry } from './PolyhedronGeometry.js'; - -/** - * A class for generating a tetrahedron geometries. - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/TetrahedronGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/TetrahedronGeometry.js | Source} - */ -export class TetrahedronGeometry extends PolyhedronGeometry { - /** - * Create a new instance of {@link TetrahedronGeometry} - * @param radius Radius of the tetrahedron. Expects a `Float`. Default `1` - * @param detail Setting this to a value greater than 0 adds vertices making it no longer a tetrahedron. Expects a `Integer`. Default `0` - */ - constructor(radius?: number, detail?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `TetrahedronGeometry` - */ - override readonly type: string | 'TetrahedronGeometry'; - - /** @internal */ - static fromJSON(data: {}): TetrahedronGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/TorusGeometry.d.ts b/packages/canvas-three/three/src/geometries/TorusGeometry.d.ts deleted file mode 100644 index d95ebbac0..000000000 --- a/packages/canvas-three/three/src/geometries/TorusGeometry.d.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; - -/** - * A class for generating torus geometries. - * @example - * ```typescript - * const geometry = new THREE.TorusGeometry(10, 3, 16, 100); - * const material = new THREE.MeshBasicMaterial({ - * color: 0xffff00 - * }); - * const torus = new THREE.Mesh(geometry, material); - * scene.add(torus); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/TorusGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/TorusGeometry.js | Source} - */ -export class TorusGeometry extends BufferGeometry { - /** - * Create a new instance of {@link TorusGeometry} - * @param radius Radius of the torus, from the center of the torus to the center of the tube. Expects a `Float`. Default `1`. - * @param tube Radius of the tube. Expects a `Float`. Default `0.4`. - * @param radialSegments Expects a `Integer`.Default is `12`. - * @param tubularSegments Expects a `Integer`. Default `48`. - * @param arc Central angle. Expects a `Float`. Default `Math.PI * 2` - */ - constructor(radius?: number, tube?: number, radialSegments?: number, tubularSegments?: number, arc?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `TorusGeometry` - */ - override readonly type: string | 'TorusGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly radius: number; - readonly tube: number; - readonly radialSegments: number; - readonly tubularSegments: number; - readonly arc: number; - }; - - /** @internal */ - static fromJSON(data: any): TorusGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/TorusKnotGeometry.d.ts b/packages/canvas-three/three/src/geometries/TorusKnotGeometry.d.ts deleted file mode 100644 index 5f1d4a147..000000000 --- a/packages/canvas-three/three/src/geometries/TorusKnotGeometry.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; - -/** - * Creates a torus knot, the particular shape of which is defined by a pair of coprime integers, p and q - * If p and q are not coprime, the result will be a torus link. - * @example - * ```typescript - * const geometry = new THREE.TorusKnotGeometry(10, 3, 100, 16); - * const material = new THREE.MeshBasicMaterial({ - * color: 0xffff00 - * }); - * const torusKnot = new THREE.Mesh(geometry, material); - * scene.add(torusKnot); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/TorusKnotGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/TorusKnotGeometry.js | Source} - */ -export class TorusKnotGeometry extends BufferGeometry { - /** - * Create a new instance of {@link TorusKnotGeometry} - * @param radius Radius of the torus.. Default `1`. - * @param tube Expects a `Float`. Default `0.4`. - * @param tubularSegments Expects a `Integer`. Default `64`. - * @param radialSegments Expects a `Integer`. Default `8`. - * @param p This value determines, how many times the geometry winds around its axis of rotational symmetry. Expects a `Integer`. Default `2`. - * @param q This value determines, how many times the geometry winds around a circle in the interior of the torus. Expects a `Integer`. Default `3`. - */ - constructor(radius?: number, tube?: number, tubularSegments?: number, radialSegments?: number, p?: number, q?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `TorusKnotGeometry` - */ - override readonly type: string | 'TorusKnotGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly radius: number; - readonly tube: number; - readonly tubularSegments: number; - readonly radialSegments: number; - readonly p: number; - readonly q: number; - }; - - /** @internal */ - static fromJSON(data: {}): TorusKnotGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/TubeGeometry.d.ts b/packages/canvas-three/three/src/geometries/TubeGeometry.d.ts deleted file mode 100644 index 3ff7fea22..000000000 --- a/packages/canvas-three/three/src/geometries/TubeGeometry.d.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { Curve } from '../extras/core/Curve.js'; -import { Vector3 } from '../math/Vector3.js'; - -/** - * Creates a tube that extrudes along a 3d curve. - * @example - * ```typescript - * class CustomSinCurve extends THREE.Curve { - * constructor(scale = 1) { - * super(); - * this.scale = scale; - * } - * getPoint(t, optionalTarget = new THREE.Vector3()) { - * const tx = t * 3 - 1.5; - * const ty = Math.sin(2 * Math.PI * t); - * const tz = 0; - * return optionalTarget.set(tx, ty, tz).multiplyScalar(this.scale); - * } - * } - * const path = new CustomSinCurve(10); - * const geometry = new THREE.TubeGeometry(path, 20, 2, 8, false); - * const material = new THREE.MeshBasicMaterial({ - * color: 0x00ff00 - * }); - * const mesh = new THREE.Mesh(geometry, material); - * scene.add(mesh); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/TubeGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/TubeGeometry.js | Source} - */ -export class TubeGeometry extends BufferGeometry { - /** - * Create a new instance of {@link TubeGeometry} - * @param path A 3D path that inherits from the {@link THREE.Curve | Curve} base class. - * Default {@link THREE.QuadraticBezierCurve3 | new THREE.QuadraticBezierCurve3(new Vector3(-1, -1, 0 ), new Vector3(-1, 1, 0), new Vector3(1, 1, 0))}. - * @param tubularSegments The number of segments that make up the tube. Expects a `Integer`. Default `64`. - * @param radius The radius of the tube. Expects a `Float`. Default `1`. - * @param radialSegments The number of segments that make up the cross-section. Expects a `Integer`. Default `8`. - * @param closed Is the tube open or closed. Default `false`. - */ - constructor(path?: Curve, tubularSegments?: number, radius?: number, radialSegments?: number, closed?: boolean); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `TubeGeometry` - */ - override readonly type: string | 'TubeGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly path: Curve; - readonly tubularSegments: number; - readonly radius: number; - readonly radialSegments: number; - readonly closed: boolean; - }; - - /** - * An array of {@link THREE.Vector3 | Vector3} tangents - */ - tangents: Vector3[]; - - /** - * An array of {@link THREE.Vector3 | Vector3} normals - */ - normals: Vector3[]; - - /** - * An array of {@link THREE.Vector3 | Vector3} binormals - */ - binormals: Vector3[]; - - /** @internal */ - static fromJSON(data: {}): TubeGeometry; -} diff --git a/packages/canvas-three/three/src/geometries/WireframeGeometry.d.ts b/packages/canvas-three/three/src/geometries/WireframeGeometry.d.ts deleted file mode 100644 index 3feb81b70..000000000 --- a/packages/canvas-three/three/src/geometries/WireframeGeometry.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; - -/** - * This can be used as a helper object to view a {@link BufferGeometry | geometry} as a wireframe. - * @example - * ```typescript - * const geometry = new THREE.SphereGeometry(100, 100, 100); - * const wireframe = new THREE.WireframeGeometry(geometry); - * const line = new THREE.LineSegments(wireframe); - * line.material.depthTest = false; - * line.material.opacity = 0.25; - * line.material.transparent = true; - * scene.add(line); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_helpers | helpers} - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/WireframeGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/WireframeGeometry.js | Source} - */ -export class WireframeGeometry extends BufferGeometry { - /** - * Create a new instance of {@link WireframeGeometry} - * @param geometry Any geometry object. Default `null`. - */ - constructor(geometry?: TBufferGeometry); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `WireframeGeometry` - */ - override readonly type: string | 'WireframeGeometry'; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. - */ - readonly parameters: { - readonly geometry: TBufferGeometry; - }; -} diff --git a/packages/canvas-three/three/src/helpers/ArrowHelper.d.ts b/packages/canvas-three/three/src/helpers/ArrowHelper.d.ts deleted file mode 100644 index a04cb6d23..000000000 --- a/packages/canvas-three/three/src/helpers/ArrowHelper.d.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { Object3D } from '../core/Object3D.js'; -import { ColorRepresentation } from '../math/Color.js'; -import { Vector3 } from '../math/Vector3.js'; -import { Line } from '../objects/Line.js'; -import { Mesh } from '../objects/Mesh.js'; - -/** - * An 3D arrow object for visualizing directions. - * @example - * ```typescript - * const dir = new THREE.Vector3(1, 2, 0); - * //normalize the direction vector (convert to vector of length 1) - * dir.normalize(); - * const origin = new THREE.Vector3(0, 0, 0); - * const length = 1; - * const hex = 0xffff00; - * const {@link ArrowHelper} = new THREE.ArrowHelper(dir, origin, length, hex); - * scene.add(arrowHelper); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_shadowmesh | WebGL / shadowmesh} - * @see {@link https://threejs.org/docs/index.html#api/en/helpers/ArrowHelper | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/helpers/ArrowHelper.js | Source} - */ -export class ArrowHelper extends Object3D { - /** - * Create a new instance of {@link ArrowHelper} - * @param dir Direction from origin. Must be a unit vector. Default `new THREE.Vector3(0, 0, 1)` - * @param origin Point at which the arrow starts. Default `new THREE.Vector3(0, 0, 0)` - * @param length Length of the arrow. Default `1` - * @param hex Hexadecimal value to define color. Default `0xffff00` - * @param headLength The length of the head of the arrow. Default `0.2 * length` - * @param headWidth The width of the head of the arrow. Default `0.2 * headLength` - */ - constructor(dir?: Vector3, origin?: Vector3, length?: number, color?: ColorRepresentation, headLength?: number, headWidth?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @override - * @defaultValue `ArrowHelper` - */ - override readonly type: string | 'ArrowHelper'; - - /** - * Contains the line part of the arrowHelper. - */ - line: Line; - - /** - * Contains the cone part of the arrowHelper. - */ - cone: Mesh; - - /** - * Sets the color of the arrowHelper. - * @param color The desired color. - */ - setColor(color: ColorRepresentation): void; - - /** - * @param dir The desired direction. Must be a unit vector. - */ - setDirection(dir: Vector3): void; - - /** - * Sets the length of the arrowhelper. - * @param length The desired length. - * @param headLength The length of the head of the arrow. Default `0.2 * length` - * @param headWidth The width of the head of the arrow. Default `0.2 * headLength` - */ - setLength(length: number, headLength?: number, headWidth?: number): void; - - /** - * Copy the given object into this object - * @remarks Note: event listeners and user-defined callbacks ({@link onAfterRender | .onAfterRender} and {@link onBeforeRender | .onBeforeRender}) are not copied. - * @param source - */ - override copy(source: this): this; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/helpers/AxesHelper.d.ts b/packages/canvas-three/three/src/helpers/AxesHelper.d.ts deleted file mode 100644 index 84a42cbb2..000000000 --- a/packages/canvas-three/three/src/helpers/AxesHelper.d.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { ColorRepresentation } from '../math/Color.js'; -import { LineSegments } from '../objects/LineSegments.js'; - -/** - * An axis object to visualize the 3 axes in a simple way. - * @remarks - * The X axis is red - * The Y axis is green - * The Z axis is blue. - * @example - * ```typescript - * const {@link AxesHelper} = new THREE.AxesHelper(5); - * scene.add(axesHelper); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_buffergeometry_compression | WebGL / buffergeometry / compression} - * @see Example: {@link https://threejs.org/examples/#webgl_geometry_convex | WebGL / geometry / convex} - * @see Example: {@link https://threejs.org/examples/#webgl_loader_nrrd | WebGL / loader / nrrd} - * @see {@link https://threejs.org/docs/index.html#api/en/helpers/AxesHelper | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/helpers/AxesHelper.js | Source} - */ -export class AxesHelper extends LineSegments { - /** - * Create a new instance of {@link AxesHelper} - * @param size Size of the lines representing the axes. Default `1` - */ - constructor(size?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @override - * @defaultValue `AxesHelper` - */ - override readonly type: string | 'AxesHelper'; - - /** - * Sets the axes colors to {@link Color | xAxisColor}, {@link Color | yAxisColor}, {@link Color | zAxisColor}. - * @param xAxisColor - * @param yAxisColor - * @param zAxisColor - */ - setColors(xAxisColor: ColorRepresentation, yAxisColor: ColorRepresentation, zAxisColor: ColorRepresentation): this; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/helpers/Box3Helper.d.ts b/packages/canvas-three/three/src/helpers/Box3Helper.d.ts deleted file mode 100644 index 1f7571cf4..000000000 --- a/packages/canvas-three/three/src/helpers/Box3Helper.d.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Box3 } from '../math/Box3.js'; -import { ColorRepresentation } from '../math/Color.js'; -import { LineSegments } from '../objects/LineSegments.js'; - -/** - * Helper object to visualize a {@link THREE.Box3 | Box3}. - * @example - * ```typescript - * const box = new THREE.Box3(); - * box.setFromCenterAndSize(new THREE.Vector3(1, 1, 1), new THREE.Vector3(2, 1, 3)); - * const helper = new THREE.Box3Helper(box, 0xffff00); - * scene.add(helper); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/helpers/Box3Helper | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/helpers/Box3Helper.js | Source} - */ -export class Box3Helper extends LineSegments { - /** - * Creates a new wireframe box that represents the passed Box3. - * @param box The Box3 to show. - * @param color The box's color. Default `0xffff00` - */ - constructor(box: Box3, color?: ColorRepresentation); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @override - * @defaultValue `Box3Helper` - */ - override readonly type: string | 'Box3Helper'; - - /** - * The Box3 being visualized. - */ - box: Box3; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/helpers/BoxHelper.d.ts b/packages/canvas-three/three/src/helpers/BoxHelper.d.ts deleted file mode 100644 index 89ac7ee0b..000000000 --- a/packages/canvas-three/three/src/helpers/BoxHelper.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { Object3D } from '../core/Object3D.js'; -import { LineBasicMaterial } from '../materials/LineBasicMaterial.js'; -import { ColorRepresentation } from '../math/Color.js'; -import { LineSegments } from '../objects/LineSegments.js'; - -/** - * Helper object to graphically show the world-axis-aligned bounding box around an object - * @remarks - * The actual bounding box is handled with {@link THREE.Box3 | Box3}, this is just a visual helper for debugging - * It can be automatically resized with the {@link THREE.BoxHelper.update | BoxHelper.update} method when the object it's created from is transformed - * Note that the object must have a {@link THREE.BufferGeometry | BufferGeometry} for this to work, so it won't work with {@link Sprite | Sprites}. - * @example - * ```typescript - * const sphere = new THREE.SphereGeometry(); - * const object = new THREE.Mesh(sphere, new THREE.MeshBasicMaterial(0xff0000)); - * const box = new THREE.BoxHelper(object, 0xffff00); - * scene.add(box); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_helpers | WebGL / helpers} - * @see Example: {@link https://threejs.org/examples/#webgl_loader_nrrd | WebGL / loader / nrrd} - * @see Example: {@link https://threejs.org/examples/#webgl_buffergeometry_drawrange | WebGL / buffergeometry / drawrange} - * @see {@link https://threejs.org/docs/index.html#api/en/helpers/BoxHelper | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/helpers/BoxHelper.js | Source} - */ -export class BoxHelper extends LineSegments { - /** - * Creates a new wireframe box that bounds the passed object - * @remarks - * Internally this uses {@link THREE.Box3.setFromObject | Box3.setFromObject} to calculate the dimensions - * Note that this includes any children. - * @param object The object3D to show the world-axis-aligned bounding box. - * @param color Hexadecimal value that defines the box's color. Default `0xffff00` - */ - constructor(object: Object3D, color?: ColorRepresentation); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @override - * @defaultValue `BoxHelper` - */ - override readonly type: string | 'BoxHelper'; - - /** - * Updates the helper's geometry to match the dimensions of the object, including any children - * @remarks - * See {@link THREE.Box3.setFromObject | Box3.setFromObject}. - */ - update(object?: Object3D): void; - - /** - * Updates the wireframe box for the passed object. - * @param object {@link THREE.Object3D | Object3D} to create the helper of. - */ - setFromObject(object: Object3D): this; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/helpers/CameraHelper.d.ts b/packages/canvas-three/three/src/helpers/CameraHelper.d.ts deleted file mode 100644 index f26d7850e..000000000 --- a/packages/canvas-three/three/src/helpers/CameraHelper.d.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { Camera } from '../cameras/Camera.js'; -import { Color } from '../math/Color.js'; -import { Matrix4 } from '../math/Matrix4.js'; -import { LineSegments } from '../objects/LineSegments.js'; - -/** - * This helps with visualizing what a camera contains in its frustum - * @remarks - * It visualizes the frustum of a camera using a {@link THREE.LineSegments | LineSegments}. - * @remarks {@link CameraHelper} must be a child of the scene. - * @example - * ```typescript - * const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); - * const helper = new THREE.CameraHelper(camera); - * scene.add(helper); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_camera | WebGL / camera} - * @see Example: {@link https://threejs.org/examples/#webgl_geometry_extrude_splines | WebGL / extrude / splines} - * @see {@link https://threejs.org/docs/index.html#api/en/helpers/CameraHelper | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/helpers/CameraHelper.js | Source} - */ -export class CameraHelper extends LineSegments { - /** - * This create a new {@link CameraHelper} for the specified camera. - * @param camera The camera to visualize. - */ - constructor(camera: Camera); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @override - * @defaultValue `CameraHelper` - */ - override readonly type: string | 'CameraHelper'; - - /** - * The camera being visualized. - */ - camera: Camera; - - /** - * This contains the points used to visualize the camera. - */ - pointMap: { [id: string]: number[] }; - - /** - * Reference to the {@link THREE.Camera.matrixWorld | camera.matrixWorld}. - */ - matrix: Matrix4; - - /** - * Is set to `false`, as the helper is using the {@link THREE.Camera.matrixWorld | camera.matrixWorld}. - * @see {@link THREE.Object3D.matrixAutoUpdate | Object3D.matrixAutoUpdate}. - * @defaultValue `false`. - */ - override matrixAutoUpdate: boolean; - - /** - * Defines the colors of the helper. - * @param frustum - * @param cone - * @param up - * @param target - * @param cross - */ - setColors(frustum: Color, cone: Color, up: Color, target: Color, cross: Color): this; - - /** - * Updates the helper based on the projectionMatrix of the camera. - */ - update(): void; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/helpers/DirectionalLightHelper.d.ts b/packages/canvas-three/three/src/helpers/DirectionalLightHelper.d.ts deleted file mode 100644 index b75b1fa51..000000000 --- a/packages/canvas-three/three/src/helpers/DirectionalLightHelper.d.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { Object3D } from '../core/Object3D.js'; -import { DirectionalLight } from '../lights/DirectionalLight.js'; -import { ColorRepresentation } from '../math/Color.js'; -import { Matrix4 } from '../math/Matrix4.js'; -import { Line } from '../objects/Line.js'; - -/** - * Helper object to assist with visualizing a {@link THREE.DirectionalLight | DirectionalLight}'s effect on the scene - * @remarks - * This consists of plane and a line representing the light's position and direction. - * @example - * ```typescript - * const light = new THREE.DirectionalLight(0xFFFFFF); - * scene.add(light); - * - * const helper = new THREE.DirectionalLightHelper(light, 5); - * scene.add(helper); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/helpers/DirectionalLightHelper | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/helpers/DirectionalLightHelper.js | Source} - */ -export class DirectionalLightHelper extends Object3D { - /** - * Create a new instance of {@link DirectionalLightHelper} - * @param light The light to be visualized. - * @param size Dimensions of the plane. Default `1` - * @param color If this is not the set the helper will take the color of the light. Default `light.color` - */ - constructor(light: DirectionalLight, size?: number, color?: ColorRepresentation); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @override - * @defaultValue `DirectionalLightHelper` - */ - override readonly type: string | 'DirectionalLightHelper'; - - /** - * Contains the line mesh showing the location of the directional light. - */ - lightPlane: Line; - - /** - * Reference to the {@link THREE.DirectionalLight | directionalLight} being visualized. - */ - light: DirectionalLight; - - /** - * Reference to the {@link THREE.DirectionalLight.matrixWorld | light.matrixWorld}. - */ - matrix: Matrix4; - - /** - * Is set to `false`, as the helper is using the {@link THREE.DirectionalLight.matrixWorld | light.matrixWorld}. - * @see {@link THREE.Object3D.matrixAutoUpdate | Object3D.matrixAutoUpdate}. - * @defaultValue `false`. - */ - override matrixAutoUpdate: boolean; - - /** - * The color parameter passed in the constructor. - * @remarks If this is changed, the helper's color will update the next time {@link update} is called. - * @defaultValue `undefined` - */ - color: ColorRepresentation | undefined; - - targetLine: Line; // TODO: Double check if this need to be exposed or not. - - /** - * Updates the helper to match the position and direction of the {@link light | DirectionalLight} being visualized. - */ - update(): void; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/helpers/GridHelper.d.ts b/packages/canvas-three/three/src/helpers/GridHelper.d.ts deleted file mode 100644 index 8c6e3fb32..000000000 --- a/packages/canvas-three/three/src/helpers/GridHelper.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { LineBasicMaterial } from '../materials/LineBasicMaterial.js'; -import { ColorRepresentation } from '../math/Color.js'; -import { LineSegments } from '../objects/LineSegments.js'; - -/** - * The {@link GridHelper} is an object to define grids - * @remarks - * Grids are two-dimensional arrays of lines. - * @example - * ```typescript - * const size = 10; - * const divisions = 10; - * const {@link GridHelper} = new THREE.GridHelper(size, divisions); - * scene.add(gridHelper); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_helpers | WebGL / helpers} - * @see {@link https://threejs.org/docs/index.html#api/en/helpers/GridHelper | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/helpers/GridHelper.js | Source} - */ -export class GridHelper extends LineSegments { - /** - * Creates a new {@link GridHelper} of size 'size' and divided into 'divisions' segments per side - * @remarks - * Colors are optional. - * @param size The size of the grid. Default `10` - * @param divisions The number of divisions across the grid. Default `10` - * @param colorCenterLine The color of the centerline. This can be a {@link THREE.Color | Color}, a hexadecimal value and an CSS-Color name. Default `0x444444` - * @param colorGrid The color of the lines of the grid. This can be a {@link THREE.Color | Color}, a hexadecimal value and an CSS-Color name. Default `0x888888` - */ - constructor(size?: number, divisions?: number, color1?: ColorRepresentation, color2?: ColorRepresentation); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @override - * @defaultValue `GridHelper` - */ - override readonly type: string | 'GridHelper'; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/helpers/HemisphereLightHelper.d.ts b/packages/canvas-three/three/src/helpers/HemisphereLightHelper.d.ts deleted file mode 100644 index e5273fa17..000000000 --- a/packages/canvas-three/three/src/helpers/HemisphereLightHelper.d.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Object3D } from '../core/Object3D.js'; -import { HemisphereLight } from '../lights/HemisphereLight.js'; -import { MeshBasicMaterial } from '../materials/MeshBasicMaterial.js'; -import { ColorRepresentation } from '../math/Color.js'; -import { Matrix4 } from '../math/Matrix4.js'; - -/** - * Creates a visual aid consisting of a spherical {@link THREE.Mesh | Mesh} for a {@link THREE.HemisphereLight | HemisphereLight}. - * @example - * ```typescript - * const light = new THREE.HemisphereLight(0xffffbb, 0x080820, 1); - * const helper = new THREE.HemisphereLightHelper(light, 5); - * scene.add(helper); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/helpers/HemisphereLightHelper | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/helpers/HemisphereLightHelper.js | Source} - */ -export class HemisphereLightHelper extends Object3D { - /** - * Create a new instance of {@link HemisphereLightHelper} - * @param light The light being visualized. - * @param size Thr sphere size - * @param color If this is not the set the helper will take the color of the light. - */ - constructor(light: HemisphereLight, size: number, color?: ColorRepresentation); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @override - * @defaultValue `HemisphereLightHelper` - */ - override readonly type: string | 'HemisphereLightHelper'; - - /** - * Reference to the HemisphereLight being visualized. - */ - light: HemisphereLight; - - /** - * Reference to the {@link THREE.HemisphereLight.matrixWorld | light.matrixWorld}. - */ - matrix: Matrix4; - - /** - * Is set to `false`, as the helper is using the {@link THREE.HemisphereLight.matrixWorld | light.matrixWorld}. - * @see {@link THREE.Object3D.matrixAutoUpdate | Object3D.matrixAutoUpdate}. - * @defaultValue `false`. - */ - override matrixAutoUpdate: boolean; - - material: MeshBasicMaterial; // TODO: Double check if this need to be exposed or not. - - /** - * The color parameter passed in the constructor. - * @remarks If this is changed, the helper's color will update the next time {@link update} is called. - * @defaultValue `undefined` - */ - color: ColorRepresentation | undefined; - - /** - * Updates the helper to match the position and direction of the {@link .light | HemisphereLight}. - */ - update(): void; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/helpers/PlaneHelper.d.ts b/packages/canvas-three/three/src/helpers/PlaneHelper.d.ts deleted file mode 100644 index 2ce798691..000000000 --- a/packages/canvas-three/three/src/helpers/PlaneHelper.d.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Plane } from '../math/Plane.js'; -import { LineSegments } from '../objects/LineSegments.js'; - -/** - * Helper object to visualize a {@link THREE.Plane | Plane}. - * @example - * ```typescript - * const plane = new THREE.Plane(new THREE.Vector3(1, 1, 0.2), 3); - * const helper = new THREE.PlaneHelper(plane, 1, 0xffff00); - * scene.add(helper); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/helpers/PlaneHelper | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/helpers/PlaneHelper.js | Source} - */ -export class PlaneHelper extends LineSegments { - /** - * Creates a new wireframe representation of the passed plane. - * @param plane The plane to visualize. - * @param size Side length of plane helper. Expects a `Float`. Default `1` - * @param hex Color. Default `0xffff00` - */ - constructor(plane: Plane, size?: number, hex?: number); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @override - * @defaultValue `PlaneHelper` - */ - override readonly type: string | 'PlaneHelper'; - - /** - * The {@link Plane | plane} being visualized. - */ - plane: Plane; - - /** - * The side lengths of plane helper. - * @remarks Expects a `Float` - * @defaultValue `1` - */ - size: number; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/helpers/PointLightHelper.d.ts b/packages/canvas-three/three/src/helpers/PointLightHelper.d.ts deleted file mode 100644 index 1abcf5d4d..000000000 --- a/packages/canvas-three/three/src/helpers/PointLightHelper.d.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { Object3D } from '../core/Object3D.js'; -import { PointLight } from '../lights/PointLight.js'; -import { ColorRepresentation } from '../math/Color.js'; -import { Matrix4 } from '../math/Matrix4.js'; - -/** - * This displays a helper object consisting of a spherical {@link THREE.Mesh | Mesh} for visualizing a {@link THREE.PointLight | PointLight}. - * @example - * ```typescript - * const pointLight = new THREE.PointLight(0xff0000, 1, 100); - * pointLight.position.set(10, 10, 10); - * scene.add(pointLight); - * const sphereSize = 1; - * const {@link PointLightHelper} = new THREE.PointLightHelper(pointLight, sphereSize); - * scene.add(pointLightHelper); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_helpers | WebGL / helpers} - * @see {@link https://threejs.org/docs/index.html#api/en/helpers/PointLightHelper | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/helpers/PointLightHelper.js | Source} - */ -export class PointLightHelper extends Object3D { - /** - * Create a new instance of {@link PointLightHelper} - * @param light The light to be visualized. - * @param sphereSize The size of the sphere helper. Expects a `Float`. Default `1` - * @param color If this is not the set the helper will take the color of the light. - */ - constructor(light: PointLight, sphereSize?: number, color?: ColorRepresentation); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @override - * @defaultValue `PointLightHelper` - */ - override readonly type: string | 'PointLightHelper'; - - /** - * The {@link THREE.PointLight | PointLight} that is being visualized. - */ - light: PointLight; - - /** - * Reference to the {@link THREE.PointLight.matrixWorld | light.matrixWorld}. - */ - matrix: Matrix4; - - /** - * The color parameter passed in the constructor. - * @remarks If this is changed, the helper's color will update the next time {@link update} is called. - * @defaultValue `undefined` - */ - color: ColorRepresentation | undefined; - - /** - * Is set to `false`, as the helper is using the {@link THREE.PointLight.matrixWorld | light.matrixWorld}. - * @see {@link THREE.Object3D.matrixAutoUpdate | Object3D.matrixAutoUpdate}. - * @defaultValue `false`. - */ - override matrixAutoUpdate: boolean; - - /** - * Updates the helper to match the position of the {@link THREE..light | .light}. - */ - update(): void; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/helpers/PolarGridHelper.d.ts b/packages/canvas-three/three/src/helpers/PolarGridHelper.d.ts deleted file mode 100644 index a835922e5..000000000 --- a/packages/canvas-three/three/src/helpers/PolarGridHelper.d.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { ColorRepresentation } from '../math/Color.js'; -import { LineSegments } from '../objects/LineSegments.js'; - -/** - * The {@link PolarGridHelper} is an object to define polar grids - * @remarks - * Grids are two-dimensional arrays of lines. - * @example - * ```typescript - * const radius = 10; - * const sectors = 16; - * const rings = 8; - * const divisions = 64; - * const helper = new THREE.PolarGridHelper(radius, sectors, rings, divisions); - * scene.add(helper); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_helpers | WebGL / helpers} - * @see {@link https://threejs.org/docs/index.html#api/en/helpers/PolarGridHelper | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/helpers/PolarGridHelper.js | Source} - */ -export class PolarGridHelper extends LineSegments { - /** - * Creates a new {@link PolarGridHelper} of radius 'radius' with 'sectors' number of sectors and 'rings' number of rings, where each circle is smoothed into 'divisions' number of line segments. - * @remarks Colors are optional. - * @param radius The radius of the polar grid. This can be any positive number. Default `10`. - * @param sectors The number of sectors the grid will be divided into. This can be any positive integer. Default `16`. - * @param rings The number of rings. This can be any positive integer. Default `8`. - * @param divisions The number of line segments used for each circle. This can be any positive integer that is 3 or greater. Default `64`. - * @param color1 The first color used for grid elements. This can be a {@link THREE.Color | Color}, a hexadecimal value and an CSS-Color name. Default `0x444444`. - * @param color2 The second color used for grid elements. This can be a {@link THREE.Color | Color}, a hexadecimal value and an CSS-Color name. Default `0x888888`. - */ - constructor(radius?: number, radials?: number, circles?: number, divisions?: number, color1?: ColorRepresentation, color2?: ColorRepresentation); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @override - * @defaultValue `PolarGridHelper` - */ - override readonly type: string | 'PolarGridHelper'; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/helpers/SkeletonHelper.d.ts b/packages/canvas-three/three/src/helpers/SkeletonHelper.d.ts deleted file mode 100644 index 78f4e8933..000000000 --- a/packages/canvas-three/three/src/helpers/SkeletonHelper.d.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { Object3D } from '../core/Object3D.js'; -import { Matrix4 } from '../math/Matrix4.js'; -import { Bone } from '../objects/Bone.js'; -import { LineSegments } from '../objects/LineSegments.js'; -import { SkinnedMesh } from '../objects/SkinnedMesh.js'; - -/** - * A helper object to assist with visualizing a {@link Skeleton | Skeleton} - * @remarks - * The helper is rendered using a {@link LineBasicMaterial | LineBasicMaterial}. - * @example - * ```typescript - * const helper = new THREE.SkeletonHelper(skinnedMesh); - * scene.add(helper); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_animation_skinning_blending | WebGL / animation / skinning / blending} - * @see Example: {@link https://threejs.org/examples/#webgl_animation_skinning_morph | WebGL / animation / skinning / morph} - * @see Example: {@link https://threejs.org/examples/#webgl_loader_bvh | WebGL / loader / bvh } - * @see {@link https://threejs.org/docs/index.html#api/en/helpers/SkeletonHelper | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/helpers/SkeletonHelper.js | Source} - */ -export class SkeletonHelper extends LineSegments { - /** - * Create a new instance of {@link SkeletonHelper} - * @param object Usually an instance of {@link THREE.SkinnedMesh | SkinnedMesh}. - * However, any instance of {@link THREE.Object3D | Object3D} can be used if it represents a hierarchy of {@link Bone | Bone}s (via {@link THREE.Object3D.children | Object3D.children}). - */ - constructor(object: SkinnedMesh | Object3D); - - /** - * Read-only flag to check if a given object is of type {@link SkeletonHelper}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isSkeletonHelper = true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @override - * @defaultValue `SkeletonHelper` - */ - override readonly type: string | 'SkeletonHelper'; - - /** - * The list of bones that the helper renders as {@link Line | Lines}. - */ - bones: Bone[]; - - /** - * The object passed in the constructor. - */ - root: SkinnedMesh | Object3D; - - /** - * Reference to the {@link THREE.Object3D.matrixWorld | root.matrixWorld}. - */ - matrix: Matrix4; - - /** - * Is set to `false`, as the helper is using the {@link THREE.Object3D.matrixWorld | root.matrixWorld}. - * @see {@link THREE.Object3D.matrixAutoUpdate | Object3D.matrixAutoUpdate}. - * @defaultValue `false`. - */ - override matrixAutoUpdate: boolean; - - /** - * Updates the helper. - */ - update(): void; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/helpers/SpotLightHelper.d.ts b/packages/canvas-three/three/src/helpers/SpotLightHelper.d.ts deleted file mode 100644 index 2f881edbb..000000000 --- a/packages/canvas-three/three/src/helpers/SpotLightHelper.d.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Object3D } from '../core/Object3D.js'; -import { Light } from '../lights/Light.js'; -import { ColorRepresentation } from '../math/Color.js'; -import { Matrix4 } from '../math/Matrix4.js'; -import { LineSegments } from '../objects/LineSegments.js'; - -/** - * This displays a cone shaped helper object for a {@link THREE.SpotLight | SpotLight}. - * @example - * ```typescript - * const spotLight = new THREE.SpotLight(0xffffff); - * spotLight.position.set(10, 10, 10); - * scene.add(spotLight); - * const {@link SpotLightHelper} = new THREE.SpotLightHelper(spotLight); - * scene.add(spotLightHelper); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_lights_spotlights | WebGL/ lights / spotlights } - * @see {@link https://threejs.org/docs/index.html#api/en/helpers/SpotLightHelper | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/helpers/SpotLightHelper.js | Source} - */ -export class SpotLightHelper extends Object3D { - /** - * Create a new instance of {@link SpotLightHelper} - * @param light The {@link THREE.SpotLight | SpotLight} to be visualized. - * @param color If this is not the set the helper will take the color of the light. Default `light.color` - */ - constructor(light: Light, color?: ColorRepresentation); - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @override - * @defaultValue `SpotLightHelper` - */ - override readonly type: string | 'SpotLightHelper'; - - /** - * {@link THREE.LineSegments | LineSegments} used to visualize the light. - */ - cone: LineSegments; - - /** - * Reference to the {@link THREE.SpotLight | SpotLight} being visualized. - */ - light: Light; - - /** - * Reference to the spotLight's {@link Object3D.matrixWorld | matrixWorld}. - */ - matrix: Matrix4; - - /** - * The color parameter passed in the constructor. - * If this is changed, the helper's color will update the next time {@link SpotLightHelper.update | update} is called. - * @defaultValue `undefined` - */ - color: ColorRepresentation | undefined; - - /** - * Is set to `false`, as the helper is using the {@link THREE.Light.matrixWorld | light.matrixWorld}. - * @see {@link THREE.Object3D.matrixAutoUpdate | Object3D.matrixAutoUpdate}. - * @defaultValue `false`. - */ - override matrixAutoUpdate: boolean; - - /** - * Updates the light helper. - */ - update(): void; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/lights/AmbientLight.d.ts b/packages/canvas-three/three/src/lights/AmbientLight.d.ts deleted file mode 100644 index 1d5b77e84..000000000 --- a/packages/canvas-three/three/src/lights/AmbientLight.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { ColorRepresentation } from '../math/Color.js'; -import { Light } from './Light.js'; - -/** - * This light globally illuminates all objects in the scene equally. - * @remarks This light cannot be used to cast shadows as it does not have a direction. - * @example - * ```typescript - * const light = new THREE.AmbientLight(0x404040); // soft white light - * scene.add(light); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/lights/AmbientLight | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/lights/AmbientLight.js | Source} - */ -export class AmbientLight extends Light { - /** - * Creates a new {@link AmbientLight}. - * @param color Numeric value of the RGB component of the color. Default `0xffffff` - * @param intensity Numeric value of the light's strength/intensity. Expects a `Float`. Default `1` - */ - constructor(color?: ColorRepresentation, intensity?: number); - - /** - * Read-only flag to check if a given object is of type {@link AmbientLight}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isAmbientLight: true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `AmbientLight` - */ - override readonly type: string | 'AmbientLight'; -} diff --git a/packages/canvas-three/three/src/lights/DirectionalLight.d.ts b/packages/canvas-three/three/src/lights/DirectionalLight.d.ts deleted file mode 100644 index 69fab2be7..000000000 --- a/packages/canvas-three/three/src/lights/DirectionalLight.d.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { Object3D } from '../core/Object3D.js'; -import { ColorRepresentation } from '../math/Color.js'; -import { Vector3 } from '../math/Vector3.js'; -import { DirectionalLightShadow } from './DirectionalLightShadow.js'; -import { Light } from './Light.js'; - -/** - * A light that gets emitted in a specific direction - * @remarks - * This light will behave as though it is infinitely far away and the rays produced from it are all parallel - * The common use case for this is to simulate daylight; the sun is far enough away that its position can be considered to be infinite, and all light rays coming from it are parallel. - * A common point of confusion for directional lights is that setting the rotation has no effect - * @remarks - * This is because three.js's {@link DirectionalLight} is the equivalent to what is often called a 'Target Direct Light' in other applications. - * This means that its direction is calculated as pointing from the light's {@link THREE.Object3D.position | position} to the {@link THREE.DirectionalLight.target | target}'s - * position (as opposed to a 'Free Direct Light' that just has a rotation component). - * See the {@link THREE.DirectionalLight.target | target} property below for details on updating the target. - * @example - * ```typescript - * // White directional light at half intensity shining from the top. - * const {@link DirectionalLight} = new THREE.DirectionalLight(0xffffff, 0.5); - * scene.add(directionalLight); - * ``` - * @see Example: {@link https://threejs.org/examples/#misc_controls_fly | controls / fly } - * @see Example: {@link https://threejs.org/examples/#webgl_effects_parallaxbarrier | effects / parallaxbarrier } - * @see Example: {@link https://threejs.org/examples/#webgl_effects_stereo | effects / stereo } - * @see Example: {@link https://threejs.org/examples/#webgl_geometry_extrude_splines | geometry / extrude / splines } - * @see Example: {@link https://threejs.org/examples/#webgl_materials_bumpmap | materials / bumpmap } - * @see {@link https://threejs.org/docs/index.html#api/en/lights/DirectionalLight | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/lights/DirectionalLight.js | Source} - */ -export class DirectionalLight extends Light { - /** - * Creates a new {@link DirectionalLight}. - * @param color Hexadecimal color of the light. Default `0xffffff` _(white)_. - * @param intensity Numeric value of the light's strength/intensity. Expects a `Float`. Default `1` - */ - constructor(color?: ColorRepresentation, intensity?: number); - - /** - * Read-only flag to check if a given object is of type {@link DirectionalLight}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isDirectionalLight: true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `DirectionalLight` - */ - override readonly type: string | 'DirectionalLight'; - - /** - * Whether the object gets rendered into shadow map. - * @remarks - * If set to `true` light will cast dynamic shadows. - * **Warning**: This is expensive and requires tweaking to get shadows looking right. - * @see {@link THREE.DirectionalLightShadow | DirectionalLightShadow} for details. - * @defaultValue `false` - */ - override castShadow: boolean; - - /** - * This is set equal to {@link THREE.Object3D.DEFAULT_UP}, so that the light shines from the top down. - * @defaultValue {@link Object3D.DEFAULT_UP} _(0, 1, 0)_ - */ - override readonly position: Vector3; - - /** - * A {@link THREE.DirectionalLightShadow | DirectionalLightShadow} used to calculate shadows for this light. - * @defaultValue `new THREE.DirectionalLightShadow()` - */ - shadow: DirectionalLightShadow; - - /** - * The {@link DirectionalLight} points from its {@link DirectionalLight.position | position} to target.position. - * @remarks **Note**: For the target's position to be changed to anything other than the default, - * it must be added to the {@link THREE.Scene | scene} using - * ```typescript - * Scene.add( light.target ); - * ``` - * This is so that the target's {@link THREE.Object3D.matrixWorld | matrixWorld} gets automatically updated each frame. - * - * It is also possible to set the target to be another object in the scene (anything with a {@link THREE.Object3D.position | position} property), - * like so: - * ```typescript - * const targetObject = new THREE.Object3D(); - * scene.add(targetObject); - * light.target = targetObject; - * ``` - * The {@link DirectionalLight} will now track the target object. - * @defaultValue `new THREE.Object3D()` at _(0, 0, 0)_ - */ - target: Object3D; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/lights/DirectionalLightShadow.d.ts b/packages/canvas-three/three/src/lights/DirectionalLightShadow.d.ts deleted file mode 100644 index 12172e938..000000000 --- a/packages/canvas-three/three/src/lights/DirectionalLightShadow.d.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { OrthographicCamera } from '../cameras/OrthographicCamera.js'; -import { LightShadow } from './LightShadow.js'; - -/** - * This is used internally by {@link DirectionalLight | DirectionalLights} for calculating shadows. - * Unlike the other shadow classes, this uses an {@link THREE.OrthographicCamera | OrthographicCamera} to calculate the shadows, - * rather than a {@link THREE.PerspectiveCamera | PerspectiveCamera} - * @remarks - * This is because light rays from a {@link THREE.DirectionalLight | DirectionalLight} are parallel. - * @example - * ```typescript - * //Create a WebGLRenderer and turn on shadows in the renderer - * const renderer = new THREE.WebGLRenderer(); - * renderer.shadowMap.enabled = true; - * renderer.shadowMap.type = THREE.PCFSoftShadowMap; // default THREE.PCFShadowMap - * //Create a DirectionalLight and turn on shadows for the light - * const light = new THREE.DirectionalLight(0xffffff, 1); - * light.position.set(0, 1, 0); //default; light shining from top - * light.castShadow = true; // default false - * scene.add(light); - * //Set up shadow properties for the light - * light.shadow.mapSize.width = 512; // default - * light.shadow.mapSize.height = 512; // default - * light.shadow.camera.near = 0.5; // default - * light.shadow.camera.far = 500; // default - * //Create a sphere that cast shadows (but does not receive them) - * const sphereGeometry = new THREE.SphereGeometry(5, 32, 32); - * const sphereMaterial = new THREE.MeshStandardMaterial({ - * color: 0xff0000 - * }); - * const sphere = new THREE.Mesh(sphereGeometry, sphereMaterial); - * sphere.castShadow = true; //default is false - * sphere.receiveShadow = false; //default - * scene.add(sphere); - * //Create a plane that receives shadows (but does not cast them) - * const planeGeometry = new THREE.PlaneGeometry(20, 20, 32, 32); - * const planeMaterial = new THREE.MeshStandardMaterial({ - * color: 0x00ff00 - * }) - * const plane = new THREE.Mesh(planeGeometry, planeMaterial); - * plane.receiveShadow = true; - * scene.add(plane); - * //Create a helper for the shadow camera (optional) - * const helper = new THREE.CameraHelper(light.shadow.camera); - * scene.add(helper); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/lights/shadows/DirectionalLightShadow | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/lights/DirectionalLightShadow.js | Source} - */ -export class DirectionalLightShadow extends LightShadow { - /** - * Create a new instance of {@link DirectionalLightShadow} - */ - constructor(); - - /** - * Read-only flag to check if a given object is of type {@link DirectionalLightShadow}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isDirectionalLightShadow: true; - - /** - * The light's view of the world. - * @remarks This is used to generate a depth map of the scene; objects behind other objects from the light's perspective will be in shadow. - * @defaultValue is an {@link THREE.OrthographicCamera | OrthographicCamera} with - * {@link OrthographicCamera.left | left} and {@link OrthographicCamera.bottom | bottom} set to -5, - * {@link OrthographicCamera.right | right} and {@link OrthographicCamera.top | top} set to 5, - * the {@link OrthographicCamera.near | near} clipping plane at 0.5 and - * the {@link OrthographicCamera.far | far} clipping plane at 500. - */ - camera: OrthographicCamera; -} diff --git a/packages/canvas-three/three/src/lights/HemisphereLight.d.ts b/packages/canvas-three/three/src/lights/HemisphereLight.d.ts deleted file mode 100644 index c80b4a97c..000000000 --- a/packages/canvas-three/three/src/lights/HemisphereLight.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Color, ColorRepresentation } from '../math/Color.js'; -import { Vector3 } from '../math/Vector3.js'; -import { Light } from './Light.js'; - -/** - * A light source positioned directly above the scene, with color fading from the sky color to the ground color. - * @remarks This light cannot be used to cast shadows. - * @example - * ```typescript - * const light = new THREE.HemisphereLight(0xffffbb, 0x080820, 1); - * scene.add(light); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_animation_skinning_blending | animation / skinning / blending } - * @see Example: {@link https://threejs.org/examples/#webgl_lights_hemisphere | lights / hemisphere } - * @see Example: {@link https://threejs.org/examples/#misc_controls_pointerlock | controls / pointerlock } - * @see Example: {@link https://threejs.org/examples/#webgl_loader_collada_kinematics | loader / collada / kinematics } - * @see Example: {@link https://threejs.org/examples/#webgl_loader_stl | loader / stl } - * @see {@link https://threejs.org/docs/index.html#api/en/lights/HemisphereLight | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/lights/HemisphereLight.js | Source} - */ -export class HemisphereLight extends Light { - /** - * Creates a new {@link HemisphereLight}. - * @param skyColor Hexadecimal color of the sky. Expects a `Integer`. Default `0xffffff` _(white)_. - * @param groundColor Hexadecimal color of the ground. Expects a `Integer`. Default `0xffffff` _(white)_. - * @param intensity Numeric value of the light's strength/intensity. Expects a `Float`. Default `1`. - */ - constructor(skyColor?: ColorRepresentation, groundColor?: ColorRepresentation, intensity?: number); - - /** - * Read-only flag to check if a given object is of type {@link HemisphereLight}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isHemisphereLight: true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `HemisphereLight` - */ - override readonly type: string | 'HemisphereLight'; - - /** - * This is set equal to {@link THREE.Object3D.DEFAULT_UP}, so that the light shines from the top down. - * @defaultValue {@link Object3D.DEFAULT_UP} _(0, 1, 0)_ - */ - override readonly position: Vector3; - - /** - * The light's sky color, as passed in the constructor. - * @defaultValue `new THREE.Color()` set to white _(0xffffff)_. - */ - override color: Color; - - /** - * The light's ground color, as passed in the constructor. - * @defaultValue `new THREE.Color()` set to white _(0xffffff)_. - */ - groundColor: Color; -} diff --git a/packages/canvas-three/three/src/lights/Light.d.ts b/packages/canvas-three/three/src/lights/Light.d.ts deleted file mode 100644 index b4a4e3b39..000000000 --- a/packages/canvas-three/three/src/lights/Light.d.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { JSONMeta, Object3D, Object3DJSON } from '../core/Object3D.js'; -import { Color, ColorRepresentation } from '../math/Color.js'; -import { LightShadow, LightShadowJSON } from './LightShadow.js'; - -export interface LightJSON extends Object3DJSON { - color: number; - intensity: number; - - groundColor?: number; - - distance?: number; - angle?: number; - decay?: number; - penumbra?: number; - - shadow?: LightShadowJSON; - target?: string; -} - -/** - * Abstract base class for lights. - * @remarks All other light types inherit the properties and methods described here. - */ -export abstract class Light extends Object3D { - /** - * Creates a new {@link Light} - * @remarks - * **Note** that this is not intended to be called directly (use one of derived classes instead). - * @param color Hexadecimal color of the light. Default `0xffffff` _(white)_. - * @param intensity Numeric value of the light's strength/intensity. Expects a `Float`. Default `1`. - */ - constructor(color?: ColorRepresentation, intensity?: number); - - /** - * Read-only flag to check if a given object is of type {@link HemisphereLight}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isLight: true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `Light` - */ - override readonly type: string | 'Light'; - - /** - * Color of the light. \ - * @defaultValue `new THREE.Color(0xffffff)` _(white)_. - */ - color: Color; - - /** - * The light's intensity, or strength. - * The units of intensity depend on the type of light. - * @defaultValue `1` - */ - intensity: number; - - /** - * A {@link THREE.LightShadow | LightShadow} used to calculate shadows for this light. - * @remarks Available only on Light's that support shadows. - */ - shadow: TShadowSupport; - - /** - * Copies value of all the properties from the {@link Light | source} to this instance. - * @param source - * @param recursive - */ - copy(source: this, recursive?: boolean): this; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; - - toJSON(meta?: JSONMeta): LightJSON; -} diff --git a/packages/canvas-three/three/src/lights/LightProbe.d.ts b/packages/canvas-three/three/src/lights/LightProbe.d.ts deleted file mode 100644 index e32870692..000000000 --- a/packages/canvas-three/three/src/lights/LightProbe.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { SphericalHarmonics3 } from '../math/SphericalHarmonics3.js'; -import { Light } from './Light.js'; - -/** - * Light probes are an alternative way of adding light to a 3D scene. - * @remarks - * Unlike classical light sources (e.g - * directional, point or spot lights), light probes do not emit light - * Instead they store information about light passing through 3D space - * During rendering, the light that hits a 3D object is approximated by using the data from the light probe. - * Light probes are usually created from (radiance) environment maps - * The class {@link THREE.LightProbeGenerator | LightProbeGenerator} can be used to create light probes from - * instances of {@link THREE.CubeTexture | CubeTexture} or {@link THREE.WebGLCubeRenderTarget | WebGLCubeRenderTarget} - * However, light estimation data could also be provided in other forms e.g - * by WebXR - * This enables the rendering of augmented reality content that reacts to real world lighting. - * The current probe implementation in three.js supports so-called diffuse light probes - * This type of light probe is functionally equivalent to an irradiance environment map. - * @see Example: {@link https://threejs.org/examples/#webgl_lightprobe | WebGL / light probe } - * @see Example: {@link https://threejs.org/examples/#webgl_lightprobe_cubecamera | WebGL / light probe / cube camera } - * @see {@link https://threejs.org/docs/index.html#api/en/lights/LightProbe | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/lights/LightProbe.js | Source} - */ -export class LightProbe extends Light { - /** - * Creates a new LightProbe. - * @param sh An instance of {@link THREE.SphericalHarmonics3 | SphericalHarmonics3}. Default `new THREE.SphericalHarmonics3()``. - * @param intensity Numeric value of the light probe's intensity. Expects a `Float`. Default `1`. - */ - constructor(sh?: SphericalHarmonics3, intensity?: number); - - /** - * Read-only flag to check if a given object is of type {@link DirectionalLight}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isLightProbe: true; - - /** - * A light probe uses spherical harmonics to encode lighting information. - * @defaultValue `new THREE.SphericalHarmonics3()` - */ - sh: SphericalHarmonics3; - - /** @internal */ - fromJSON(json: {}): LightProbe; -} diff --git a/packages/canvas-three/three/src/lights/LightShadow.d.ts b/packages/canvas-three/three/src/lights/LightShadow.d.ts deleted file mode 100644 index 150fbd700..000000000 --- a/packages/canvas-three/three/src/lights/LightShadow.d.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { Camera } from '../cameras/Camera.js'; -import { Object3DJSONObject } from '../core/Object3D.js'; -import { Frustum } from '../math/Frustum.js'; -import { Matrix4 } from '../math/Matrix4.js'; -import { Vector2, Vector2Tuple } from '../math/Vector2.js'; -import { Vector4 } from '../math/Vector4.js'; -import { WebGLRenderTarget } from '../renderers/WebGLRenderTarget.js'; -import { Light } from './Light.js'; - -export interface LightShadowJSON { - intensity?: number; - bias?: number; - normalBias?: number; - radius?: number; - mapSize?: Vector2Tuple; - - camera: Omit; -} - -/** - * Serves as a base class for the other shadow classes. - * @see {@link https://threejs.org/docs/index.html#api/en/lights/shadows/LightShadow | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/lights/LightShadow.js | Source} - */ -export class LightShadow { - /** - * Create a new instance of {@link LightShadow} - * @param camera The light's view of the world. - */ - constructor(camera: TCamera); - - /** - * The light's view of the world. - * @remark This is used to generate a depth map of the scene; objects behind other objects from the light's perspective will be in shadow. - */ - camera: TCamera; - - /** - * The intensity of the shadow. The default is `1`. Valid values are in the range `[0, 1]`. - */ - intensity: number; - - /** - * Shadow map bias, how much to add or subtract from the normalized depth when deciding whether a surface is in shadow. - * @remark The Very tiny adjustments here (in the order of 0.0001) may help reduce artifacts in shadows. - * @remarks Expects a `Float` - * @defaultValue `0` - */ - bias: number; - - /** - * Defines how much the position used to query the shadow map is offset along the object normal. - * @remark The Increasing this value can be used to reduce shadow acne especially in large scenes where light shines onto geometry at a shallow angle. - * @remark The cost is that shadows may appear distorted. - * @remarks Expects a `Float` - * @defaultValue `0` - */ - normalBias: number; - - /** - * Setting this to values greater than 1 will blur the edges of the shadow.toi - * @remark High values will cause unwanted banding effects in the shadows - a greater {@link LightShadow.mapSize | mapSize - * will allow for a higher value to be used here before these effects become visible. - * @remark If {@link THREE.WebGLRenderer.shadowMap.type | WebGLRenderer.shadowMap.type} is set to {@link Renderer | PCFSoftShadowMap}, - * radius has no effect and it is recommended to increase softness by decreasing {@link LightShadow.mapSize | mapSize} instead. - * @remark Note that this has no effect if the {@link THREE.WebGLRenderer.shadowMap | WebGLRenderer.shadowMap}.{@link THREE.WebGLShadowMap.type | type} - * is set to {@link THREE.BasicShadowMap | BasicShadowMap}. - * @remarks Expects a `Float` - * @defaultValue `1` - */ - radius: number; - - /** - * The amount of samples to use when blurring a VSM shadow map. - * @remarks Expects a `Integer` - * @defaultValue `8` - */ - blurSamples: number; - - /** - * A {@link THREE.Vector2 | Vector2} defining the width and height of the shadow map. - * @remarks Higher values give better quality shadows at the cost of computation time. - * @remarks Values must be powers of 2, up to the {@link THREE.WebGLRenderer.capabilities | WebGLRenderer.capabilities}.maxTextureSize for a given device, - * although the width and height don't have to be the same (so, for example, (512, 1024) is valid). - * @defaultValue `new THREE.Vector2(512, 512)` - */ - mapSize: Vector2; - - /** - * The depth map generated using the internal camera; a location beyond a pixel's depth is in shadow. Computed internally during rendering. - * @defaultValue null - */ - map: WebGLRenderTarget | null; - - /** - * The distribution map generated using the internal camera; an occlusion is calculated based on the distribution of depths. Computed internally during rendering. - * @defaultValue null - */ - mapPass: WebGLRenderTarget | null; - - /** - * Model to shadow camera space, to compute location and depth in shadow map. - * Stored in a {@link Matrix4 | Matrix4}. - * @remarks This is computed internally during rendering. - * @defaultValue new THREE.Matrix4() - */ - matrix: Matrix4; - - /** - * Enables automatic updates of the light's shadow. If you do not require dynamic lighting / shadows, you may set this to `false`. - * @defaultValue `true` - */ - autoUpdate: boolean; - - /** - * When set to `true`, shadow maps will be updated in the next `render` call. - * If you have set {@link autoUpdate} to `false`, you will need to set this property to `true` and then make a render call to update the light's shadow. - * @defaultValue `false` - */ - needsUpdate: boolean; - - /** - * Used internally by the renderer to get the number of viewports that need to be rendered for this shadow. - */ - getViewportCount(): number; - - /** - * Copies value of all the properties from the {@link {@link LightShadow} | source} to this Light. - * @param source - */ - copy(source: LightShadow): this; - - /** - * Creates a new {@link LightShadow} with the same properties as this one. - */ - clone(recursive?: boolean): this; - - /** - * Serialize this LightShadow. - */ - toJSON(): LightShadowJSON; - - /** - * Gets the shadow cameras frustum - * @remarks - * Used internally by the renderer to cull objects. - */ - getFrustum(): Frustum; - - /** - * Update the matrices for the camera and shadow, used internally by the renderer. - * @param light The light for which the shadow is being rendered. - */ - updateMatrices(light: Light): void; - - getViewport(viewportIndex: number): Vector4; - - /** - * Used internally by the renderer to extend the shadow map to contain all viewports - */ - getFrameExtents(): Vector2; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/lights/PointLight.d.ts b/packages/canvas-three/three/src/lights/PointLight.d.ts deleted file mode 100644 index 9eec98d13..000000000 --- a/packages/canvas-three/three/src/lights/PointLight.d.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { ColorRepresentation } from '../math/Color.js'; -import { Light } from './Light.js'; -import { PointLightShadow } from './PointLightShadow.js'; - -/** - * A light that gets emitted from a single point in all directions - * @remarks - * A common use case for this is to replicate the light emitted from a bare lightbulb. - * @example - * ```typescript - * const light = new THREE.PointLight(0xff0000, 1, 100); - * light.position.set(50, 50, 50); - * scene.add(light); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_lights_pointlights | lights / pointlights } - * @see Example: {@link https://threejs.org/examples/#webgl_effects_anaglyph | effects / anaglyph } - * @see Example: {@link https://threejs.org/examples/#webgl_geometry_text | geometry / text } - * @see Example: {@link https://threejs.org/examples/#webgl_lensflares | lensflares } - * @see {@link https://threejs.org/docs/index.html#api/en/lights/PointLight | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/lights/PointLight.js | Source} - */ -export class PointLight extends Light { - /** - * Creates a new PointLight. - * @param color Hexadecimal color of the light. Default is 0xffffff (white). Expects a `Integer` - * @param intensity Numeric value of the light's strength/intensity. Expects a `Float`. Default `1` - * @param distance Maximum range of the light. Default is 0 (no limit). - * @param decay The amount the light dims along the distance of the light. Expects a `Float`. Default `2` - */ - constructor(color?: ColorRepresentation, intensity?: number, distance?: number, decay?: number); - - /** - * Read-only flag to check if a given object is of type {@link PointLight}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isPointLight: true; - - /** - * @default 'PointLight' - */ - type: string; - - /** - * The light's intensity. - * - * When **{@link WebGLRenderer.useLegacyLights | legacy lighting mode} is disabled** — intensity is the luminous intensity of the light measured in candela (cd). - * @remarks Changing the intensity will also change the light's power. - * @remarks Expects a `Float` - * @defaultValue `1` - */ - intensity: number; - - /** - * When **Default mode** — When distance is zero, light does not attenuate. When distance is non-zero, - * light will attenuate linearly from maximum intensity at the light's position down to zero at this distance from the light. - * - * When **{@link WebGLRenderer.useLegacyLights | legacy lighting mode} is disabled** — When distance is zero, - * light will attenuate according to inverse-square law to infinite distance. - * When distance is non-zero, light will attenuate according to inverse-square law until near the distance cutoff, - * where it will then attenuate quickly and smoothly to 0. Inherently, cutoffs are not physically correct. - * - * @defaultValue `0.0` - * @remarks Expects a `Float` - */ - distance: number; - - /** - * If set to `true` light will cast dynamic shadows. - * **Warning**: This is expensive and requires tweaking to get shadows looking right. - * @see {@link THREE.PointLightShadow | PointLightShadow} for details. - * @defaultValue `false` - */ - castShadow: boolean; - - /** - * The amount the light dims along the distance of the light. - * In context of physically-correct rendering the default value should not be changed. - * @remarks Expects a `Float` - * @defaultValue `2` - */ - decay: number; - - /** - * A {@link THREE.PointLightShadow | PointLightShadow} used to calculate shadows for this light. - * The lightShadow's {@link LightShadow.camera | camera} is set to - * a {@link THREE.PerspectiveCamera | PerspectiveCamera} with {@link PerspectiveCamera.fov | fov} of 90, - * {@link PerspectiveCamera.aspect | aspect} of 1, - * {@link PerspectiveCamera.near | near} clipping plane at 0.5 - * and {@link PerspectiveCamera.far | far} clipping plane at 500. - * @defaultValue new THREE.PointLightShadow() - */ - shadow: PointLightShadow; - - /** - * The light's power. - * When **{@link WebGLRenderer.useLegacyLights | legacy lighting mode} is disabled** — power is the luminous power of the light measured in lumens (lm). - * @remarks Changing the power will also change the light's intensity. - * @remarks Expects a `Float` - */ - power: number; -} diff --git a/packages/canvas-three/three/src/lights/PointLightShadow.d.ts b/packages/canvas-three/three/src/lights/PointLightShadow.d.ts deleted file mode 100644 index 98e103f5b..000000000 --- a/packages/canvas-three/three/src/lights/PointLightShadow.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { PerspectiveCamera } from '../cameras/PerspectiveCamera.js'; -import { Light } from './Light.js'; -import { LightShadow } from './LightShadow.js'; - -/** - * Shadow for {@link THREE.PointLight | PointLight} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/lights/PointLightShadow.js | Source} - */ -export class PointLightShadow extends LightShadow { - /** - * Read-only flag to check if a given object is of type {@link PointLightShadow}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isPointLightShadow = true; - - /** - * Update the matrices for the camera and shadow, used internally by the renderer. - * @param light The light for which the shadow is being rendered. - */ - override updateMatrices(light: Light, viewportIndex?: number): void; -} diff --git a/packages/canvas-three/three/src/lights/RectAreaLight.d.ts b/packages/canvas-three/three/src/lights/RectAreaLight.d.ts deleted file mode 100644 index 6fa06ff44..000000000 --- a/packages/canvas-three/three/src/lights/RectAreaLight.d.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { ColorRepresentation } from '../math/Color.js'; -import { Light } from './Light.js'; - -/** - * {@link RectAreaLight} emits light uniformly across the face a rectangular plane - * @remarks - * This light type can be used to simulate light sources such as bright windows or strip lighting. - * Important Notes: - * - There is no shadow support. - * - Only {@link MeshStandardMaterial | MeshStandardMaterial} and {@link MeshPhysicalMaterial | MeshPhysicalMaterial} are supported. - * - You have to include {@link https://threejs.org/examples/jsm/lights/RectAreaLightUniformsLib.js | RectAreaLightUniformsLib} into your scene and call `init()`. - * @example - * ```typescript - * const width = 10; - * const height = 10; - * const intensity = 1; - * const rectLight = new THREE.RectAreaLight(0xffffff, intensity, width, height); - * rectLight.position.set(5, 5, 0); - * rectLight.lookAt(0, 0, 0); - * scene.add(rectLight) - * const rectLightHelper = new RectAreaLightHelper(rectLight); - * rectLight.add(rectLightHelper); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_lights_rectarealight | WebGL / {@link RectAreaLight} } - * @see {@link https://threejs.org/docs/index.html#api/en/lights/RectAreaLight | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/lights/RectAreaLight.js | Source} - */ -export class RectAreaLight extends Light { - /** - * Creates a new {@link RectAreaLight}. - * @param color Hexadecimal color of the light. Default `0xffffff` _(white)_. - * @param intensity The light's intensity, or brightness. Expects a `Float`. Default `1` - * @param width Width of the light. Expects a `Float`. Default `10` - * @param height Height of the light. Expects a `Float`. Default `10` - */ - constructor(color?: ColorRepresentation, intensity?: number, width?: number, height?: number); - - /** - * Read-only flag to check if a given object is of type {@link RectAreaLight}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isRectAreaLight: true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `RectAreaLight` - */ - override readonly type: string | 'RectAreaLight'; - - /** - * The width of the light. - * @remarks Expects a `Float` - * @defaultValue `10` - */ - width: number; - - /** - * The height of the light. - * @remarks Expects a `Float` - * @defaultValue `10` - */ - height: number; - - /** - * The light's intensity. - * @remarks Changing the intensity will also change the light's power. - * When **{@link WebGLRenderer.useLegacyLights | legacy lighting mode} is disabled** — intensity is the luminance (brightness) of the light measured in nits (cd/m^2). - * @remarks Expects a `Float` - * @defaultValue `1` - */ - intensity: number; - - /** - * The light's power. - * @remarks Changing the power will also change the light's intensity. - * When **{@link WebGLRenderer.useLegacyLights | legacy lighting mode} is disabled** — power is the luminous power of the light measured in lumens (lm). - * @remarks Expects a `Float` - */ - power: number; -} diff --git a/packages/canvas-three/three/src/lights/SpotLight.d.ts b/packages/canvas-three/three/src/lights/SpotLight.d.ts deleted file mode 100644 index 876c9e28d..000000000 --- a/packages/canvas-three/three/src/lights/SpotLight.d.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { Object3D } from '../core/Object3D.js'; -import { ColorRepresentation } from '../math/Color.js'; -import { Vector3 } from '../math/Vector3.js'; -import { Texture } from '../textures/Texture.js'; -import { Light } from './Light.js'; -import { SpotLightShadow } from './SpotLightShadow.js'; - -/** - * This light gets emitted from a single point in one direction, along a cone that increases in size the further from the light it gets. - * @example - * ```typescript - * // white {@link SpotLight} shining from the side, modulated by a texture, casting a shadow - * const {@link SpotLight} = new THREE.SpotLight(0xffffff); - * spotLight.position.set(100, 1000, 100); - * spotLight.map = new THREE.TextureLoader().load(url); - * spotLight.castShadow = true; - * spotLight.shadow.mapSize.width = 1024; - * spotLight.shadow.mapSize.height = 1024; - * spotLight.shadow.camera.near = 500; - * spotLight.shadow.camera.far = 4000; - * spotLight.shadow.camera.fov = 30; - * scene.add(spotLight); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_lights_spotlight | lights / {@link SpotLight} } - * @see Example: {@link https://threejs.org/examples/#webgl_lights_spotlights | lights / spotlights } - * @see {@link https://threejs.org/docs/index.html#api/en/lights/SpotLight | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/lights/SpotLight.js | Source} - */ -export class SpotLight extends Light { - /** - * Creates a new SpotLight. - * @param color Hexadecimal color of the light. Default `0xffffff` _(white)_. - * @param intensity Numeric value of the light's strength/intensity. Expects a `Float`. Default `1`. - * @param distance Maximum range of the light. Default is 0 (no limit). Expects a `Float`. - * @param angle Maximum angle of light dispersion from its direction whose upper bound is Math.PI/2. - * @param penumbra Percent of the {@link SpotLight} cone that is attenuated due to penumbra. Takes values between zero and 1. Expects a `Float`. Default `0`. - * @param decay The amount the light dims along the distance of the light. Expects a `Float`. Default `2`. - */ - constructor(color?: ColorRepresentation, intensity?: number, distance?: number, angle?: number, penumbra?: number, decay?: number); - - /** - * Read-only flag to check if a given object is of type {@link SpotLight}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isSpotLight: true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `SpotLight` - */ - override readonly type: string | 'SpotLight'; - - /** - * This is set equal to {@link THREE.Object3D.DEFAULT_UP | Object3D.DEFAULT_UP} (0, 1, 0), so that the light shines from the top down. - * @defaultValue `{@link Object3D.DEFAULT_UP}` - */ - readonly position: Vector3; - - /** - * The {@link SpotLight} points from its {@link SpotLight.position | position} to target.position. - * @remarks - * **Note**: For the target's position to be changed to anything other than the default, - * it must be added to the {@link Scene | scene} using - * - * ```typescript - * scene.add( light.target ); - * ``` - * - * This is so that the target's {@link Object3D.matrixWorld | matrixWorld} gets automatically updated each frame. - * It is also possible to set the target to be another object in the scene (anything with a {@link THREE.Object3D.position | position} property), like so: - * ```typescript - * const targetObject = new THREE.Object3D(); - * scene.add(targetObject); - * light.target = targetObject; - * ``` - * The {@link SpotLight} will now track the target object. - * @defaultValue `new THREE.Object3D()` _The default position of the target is *(0, 0, 0)*._ - */ - target: Object3D; - - /** - * If set to `true` light will cast dynamic shadows. - * @remarks **Warning**: This is expensive and requires tweaking to get shadows looking right. the {@link THREE.SpotLightShadow | SpotLightShadow} for details. - * @defaultValue `false` - */ - override castShadow: boolean; - - /** - * The light's intensity. - * @remarks Changing the intensity will also change the light's power. - * When **{@link WebGLRenderer.useLegacyLights | legacy lighting mode} is disabled** — intensity is the luminous intensity of the light measured in candela (cd). - * @remarks Expects a `Float` - * @defaultValue `1` - */ - intensity: number; - - /** - * When **Default mode** — When distance is zero, light does not attenuate. When distance is non-zero, - * light will attenuate linearly from maximum intensity at the light's position down to zero at this distance from the light. - * - * When **{@link WebGLRenderer.useLegacyLights | legacy lighting mode} is disabled** — When distance is zero, - * light will attenuate according to inverse-square law to infinite distance. - * When distance is non-zero, light will attenuate according to inverse-square law until near the distance cutoff, - * where it will then attenuate quickly and smoothly to `0`. Inherently, cutoffs are not physically correct. - * @remarks Expects a `Float` - * @defaultValue `0.0` - */ - distance: number; - - /** - * Maximum extent of the spotlight, in radians, from its direction. - * @remarks Should be no more than `Math.PI/2`. - * @remarks Expects a `Float` - * @defaultValue `Math.PI / 3` - */ - angle: number; - - /** - * The amount the light dims along the distance of the light. - * In context of physically-correct rendering the default value should not be changed. - * @remarks Expects a `Float` - * @defaultValue `2` - */ - decay: number; - - /** - * A {@link THREE.SpotLightShadow | SpotLightShadow} used to calculate shadows for this light. - * @defaultValue `new THREE.SpotLightShadow()` - */ - shadow: SpotLightShadow; - - /** - * The light's power. - * @remarks Changing the power will also change the light's intensity. - * When **{@link WebGLRenderer.useLegacyLights | legacy lighting mode} is disabled** — power is the luminous power of the light measured in lumens (lm). - * @remarks Expects a `Float` - */ - power: number; - - /** - * Percent of the {@link SpotLight} cone that is attenuated due to penumbra. - * @remarks Takes values between zero and 1. - * @remarks Expects a `Float` - * @defaultValue `0.0` - */ - penumbra: number; - - /** - * A {@link THREE.Texture | Texture} used to modulate the color of the light. - * The spot light color is mixed with the _RGB_ value of this texture, with a ratio corresponding to its alpha value. - * The cookie-like masking effect is reproduced using pixel values (0, 0, 0, 1-cookie_value). - * @remarks **Warning**: {@link SpotLight.map} is disabled if {@link SpotLight.castShadow} is `false`. - */ - map: Texture | null; -} diff --git a/packages/canvas-three/three/src/lights/SpotLightShadow.d.ts b/packages/canvas-three/three/src/lights/SpotLightShadow.d.ts deleted file mode 100644 index 4e657b973..000000000 --- a/packages/canvas-three/three/src/lights/SpotLightShadow.d.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { PerspectiveCamera } from '../cameras/PerspectiveCamera.js'; -import { LightShadow } from './LightShadow.js'; - -/** - * This is used internally by {@link SpotLight | SpotLights} for calculating shadows. - * @example - * ```typescript - * //Create a WebGLRenderer and turn on shadows in the renderer - * const renderer = new THREE.WebGLRenderer(); - * renderer.shadowMap.enabled = true; - * renderer.shadowMap.type = THREE.PCFSoftShadowMap; // default THREE.PCFShadowMap - * //Create a SpotLight and turn on shadows for the light - * const light = new THREE.SpotLight(0xffffff); - * light.castShadow = true; // default false - * scene.add(light); - * //Set up shadow properties for the light - * light.shadow.mapSize.width = 512; // default - * light.shadow.mapSize.height = 512; // default - * light.shadow.camera.near = 0.5; // default - * light.shadow.camera.far = 500; // default - * light.shadow.focus = 1; // default - * //Create a sphere that cast shadows (but does not receive them) - * const sphereGeometry = new THREE.SphereGeometry(5, 32, 32); - * const sphereMaterial = new THREE.MeshStandardMaterial({ - * color: 0xff0000 - * }); - * const sphere = new THREE.Mesh(sphereGeometry, sphereMaterial); - * sphere.castShadow = true; //default is false - * sphere.receiveShadow = false; //default - * scene.add(sphere); - * //Create a plane that receives shadows (but does not cast them) - * const planeGeometry = new THREE.PlaneGeometry(20, 20, 32, 32); - * const planeMaterial = new THREE.MeshStandardMaterial({ - * color: 0x00ff00 - * }) - * const plane = new THREE.Mesh(planeGeometry, planeMaterial); - * plane.receiveShadow = true; - * scene.add(plane); - * //Create a helper for the shadow camera (optional) - * const helper = new THREE.CameraHelper(light.shadow.camera); - * scene.add(helper); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/lights/shadows/SpotLightShadow | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/lights/SpotLightShadow.js | Source} - */ -export class SpotLightShadow extends LightShadow { - /** - * Read-only flag to check if a given object is of type {@link SpotLightShadow}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isSpotLightShadow: true; - - /** - * The light's view of the world. - * @remarks This is used to generate a depth map of the scene; objects behind other objects from the light's perspective will be in shadow. - * @remarks - * The {@link THREE.PerspectiveCamera.fov | fov} will track the {@link THREE.SpotLight.angle | angle} property - * of the owning {@link SpotLight | SpotLight} via the {@link SpotLightShadow.update | update} method. - * Similarly, the {@link THREE.PerspectiveCamera.aspect | aspect} property will track the aspect of the {@link LightShadow.mapSize | mapSize}. - * If the {@link SpotLight.distance | distance} property of the light is set, the {@link THREE.PerspectiveCamera.far | far} clipping plane will track that, otherwise it defaults to `500`. - * @defaultValue is a {@link THREE.PerspectiveCamera | PerspectiveCamera} with {@link THREE.PerspectiveCamera.near | near} clipping plane at `0.5`. - */ - camera: PerspectiveCamera; - - /** - * Used to focus the shadow camera. - * @remarks The camera's field of view is set as a percentage of the spotlight's field-of-view. Range is `[0, 1]`. 0`. - * @defaultValue `1` - */ - focus: number; -} diff --git a/packages/canvas-three/three/src/lights/webgpu/IESSpotLight.d.ts b/packages/canvas-three/three/src/lights/webgpu/IESSpotLight.d.ts deleted file mode 100644 index cf0b0624e..000000000 --- a/packages/canvas-three/three/src/lights/webgpu/IESSpotLight.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Texture } from '../../textures/Texture.js'; -import { SpotLight } from '../SpotLight.js'; - -export default class IESSpotLight extends SpotLight { - iesMap: Texture | null; -} diff --git a/packages/canvas-three/three/src/loaders/AnimationLoader.d.ts b/packages/canvas-three/three/src/loaders/AnimationLoader.d.ts deleted file mode 100644 index 734f97130..000000000 --- a/packages/canvas-three/three/src/loaders/AnimationLoader.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { AnimationClip } from '../animation/AnimationClip.js'; -import { Loader } from './Loader.js'; -import { LoadingManager } from './LoadingManager.js'; - -export class AnimationLoader extends Loader { - constructor(manager?: LoadingManager); - - parse(json: readonly unknown[]): AnimationClip[]; -} diff --git a/packages/canvas-three/three/src/loaders/AudioLoader.d.ts b/packages/canvas-three/three/src/loaders/AudioLoader.d.ts deleted file mode 100644 index fc192b3f5..000000000 --- a/packages/canvas-three/three/src/loaders/AudioLoader.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Loader } from './Loader.js'; -import { LoadingManager } from './LoadingManager.js'; - -export class AudioLoader extends Loader { - constructor(manager?: LoadingManager); -} diff --git a/packages/canvas-three/three/src/loaders/BufferGeometryLoader.d.ts b/packages/canvas-three/three/src/loaders/BufferGeometryLoader.d.ts deleted file mode 100644 index 989073137..000000000 --- a/packages/canvas-three/three/src/loaders/BufferGeometryLoader.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { InstancedBufferGeometry } from '../core/InstancedBufferGeometry.js'; -import { Loader } from './Loader.js'; -import { LoadingManager } from './LoadingManager.js'; - -export class BufferGeometryLoader extends Loader { - constructor(manager?: LoadingManager); - - parse(json: unknown): InstancedBufferGeometry | BufferGeometry; -} diff --git a/packages/canvas-three/three/src/loaders/Cache.d.ts b/packages/canvas-three/three/src/loaders/Cache.d.ts deleted file mode 100644 index 666605c05..000000000 --- a/packages/canvas-three/three/src/loaders/Cache.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -declare const Cache: { - /** - * @default false - */ - enabled: boolean; - - /** - * @default {} - */ - files: any; - - add(key: string, file: any): void; - - get(key: string): any; - - remove(key: string): void; - - clear(): void; -}; - -export { Cache }; diff --git a/packages/canvas-three/three/src/loaders/CompressedTextureLoader.d.ts b/packages/canvas-three/three/src/loaders/CompressedTextureLoader.d.ts deleted file mode 100644 index 01e6f4e5a..000000000 --- a/packages/canvas-three/three/src/loaders/CompressedTextureLoader.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { CompressedTexture } from '../textures/CompressedTexture.js'; -import { Loader } from './Loader.js'; -import { LoadingManager } from './LoadingManager.js'; - -export class CompressedTextureLoader extends Loader { - constructor(manager?: LoadingManager); - - load(url: string, onLoad?: (data: CompressedTexture) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): CompressedTexture; -} diff --git a/packages/canvas-three/three/src/loaders/CubeTextureLoader.d.ts b/packages/canvas-three/three/src/loaders/CubeTextureLoader.d.ts deleted file mode 100644 index de1add837..000000000 --- a/packages/canvas-three/three/src/loaders/CubeTextureLoader.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { CubeTexture } from '../textures/CubeTexture.js'; -import { Loader } from './Loader.js'; -import { LoadingManager } from './LoadingManager.js'; - -export class CubeTextureLoader extends Loader { - constructor(manager?: LoadingManager); - - load(url: readonly string[], onLoad?: (data: CubeTexture) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): CubeTexture; -} diff --git a/packages/canvas-three/three/src/loaders/DataTextureLoader.d.ts b/packages/canvas-three/three/src/loaders/DataTextureLoader.d.ts deleted file mode 100644 index 8f0c614bb..000000000 --- a/packages/canvas-three/three/src/loaders/DataTextureLoader.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { DataTexture } from '../textures/DataTexture.js'; -import { Loader } from './Loader.js'; -import { LoadingManager } from './LoadingManager.js'; - -export class DataTextureLoader extends Loader { - constructor(manager?: LoadingManager); - - load(url: string, onLoad?: (data: DataTexture, texData: object) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): DataTexture; -} diff --git a/packages/canvas-three/three/src/loaders/FileLoader.d.ts b/packages/canvas-three/three/src/loaders/FileLoader.d.ts deleted file mode 100644 index a741006be..000000000 --- a/packages/canvas-three/three/src/loaders/FileLoader.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Loader } from './Loader.js'; -import { LoadingManager } from './LoadingManager.js'; - -export class FileLoader extends Loader { - constructor(manager?: LoadingManager); - - load(url: string, onLoad?: (data: string | ArrayBuffer) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): void; - - mimeType: undefined | MimeType; - responseType: undefined | string; - - setMimeType(mimeType: MimeType): FileLoader; - setResponseType(responseType: string): FileLoader; -} diff --git a/packages/canvas-three/three/src/loaders/ImageBitmapLoader.d.ts b/packages/canvas-three/three/src/loaders/ImageBitmapLoader.d.ts deleted file mode 100644 index 7114943b0..000000000 --- a/packages/canvas-three/three/src/loaders/ImageBitmapLoader.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Loader } from './Loader.js'; -import { LoadingManager } from './LoadingManager.js'; - -export class ImageBitmapLoader extends Loader { - constructor(manager?: LoadingManager); - - load(url: string, onLoad?: (data: ImageBitmap) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): void; - - /** - * @default { premultiplyAlpha: 'none' } - */ - options: undefined | object; - - readonly isImageBitmapLoader: true; - - setOptions(options: object): ImageBitmapLoader; -} diff --git a/packages/canvas-three/three/src/loaders/ImageLoader.d.ts b/packages/canvas-three/three/src/loaders/ImageLoader.d.ts deleted file mode 100644 index 59b7010c2..000000000 --- a/packages/canvas-three/three/src/loaders/ImageLoader.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Loader } from './Loader.js'; -import { LoadingManager } from './LoadingManager.js'; - -/** - * A loader for loading an image. - * Unlike other loaders, this one emits events instead of using predefined callbacks. So if you're interested in getting notified when things happen, you need to add listeners to the object. - */ -export class ImageLoader extends Loader { - constructor(manager?: LoadingManager); - - load(url: string, onLoad?: (data: HTMLImageElement) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): HTMLImageElement; -} diff --git a/packages/canvas-three/three/src/loaders/Loader.d.ts b/packages/canvas-three/three/src/loaders/Loader.d.ts deleted file mode 100644 index 76663789c..000000000 --- a/packages/canvas-three/three/src/loaders/Loader.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { LoadingManager } from './LoadingManager.js'; - -/** - * Base class for implementing loaders. - */ -export class Loader { - constructor(manager?: LoadingManager); - - /** - * @default 'anonymous' - */ - crossOrigin: string; - - /** - * @default false - */ - withCredentials: boolean; - - /** - * @default '' - */ - path: string; - - /** - * @default '' - */ - resourcePath: string; - manager: LoadingManager; - - /** - * @default {} - */ - requestHeader: { [header: string]: string }; - - load(url: TUrl, onLoad: (data: TData) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): void; - loadAsync(url: TUrl, onProgress?: (event: ProgressEvent) => void): Promise; - - setCrossOrigin(crossOrigin: string): this; - setWithCredentials(value: boolean): this; - setPath(path: string): this; - setResourcePath(resourcePath: string): this; - setRequestHeader(requestHeader: { [header: string]: string }): this; - - static DEFAULT_MATERIAL_NAME: string; -} diff --git a/packages/canvas-three/three/src/loaders/LoaderUtils.d.ts b/packages/canvas-three/three/src/loaders/LoaderUtils.d.ts deleted file mode 100644 index 45cdbe638..000000000 --- a/packages/canvas-three/three/src/loaders/LoaderUtils.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export class LoaderUtils { - /** - * @deprecated decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead. - */ - static decodeText(array: BufferSource): string; - - static extractUrlBase(url: string): string; - - static resolveURL(url: string, path: string): string; -} diff --git a/packages/canvas-three/three/src/loaders/LoadingManager.d.ts b/packages/canvas-three/three/src/loaders/LoadingManager.d.ts deleted file mode 100644 index c7e4c1de2..000000000 --- a/packages/canvas-three/three/src/loaders/LoadingManager.d.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Loader } from './Loader.js'; - -export const DefaultLoadingManager: LoadingManager; - -/** - * Handles and keeps track of loaded and pending data. - */ -export class LoadingManager { - constructor(onLoad?: () => void, onProgress?: (url: string, loaded: number, total: number) => void, onError?: (url: string) => void); - - /** - * Will be called when loading of an item starts. - * @param url The url of the item that started loading. - * @param loaded The number of items already loaded so far. - * @param total The total amount of items to be loaded. - */ - onStart?: ((url: string, loaded: number, total: number) => void) | undefined; - - /** - * Will be called when all items finish loading. - * The default is a function with empty body. - */ - onLoad: () => void; - - /** - * Will be called for each loaded item. - * The default is a function with empty body. - * @param url The url of the item just loaded. - * @param loaded The number of items already loaded so far. - * @param total The total amount of items to be loaded. - */ - onProgress: (url: string, loaded: number, total: number) => void; - - /** - * Will be called when item loading fails. - * The default is a function with empty body. - * @param url The url of the item that errored. - */ - onError: (url: string) => void; - - /** - * If provided, the callback will be passed each resource URL before a request is sent. - * The callback may return the original URL, or a new URL to override loading behavior. - * This behavior can be used to load assets from .ZIP files, drag-and-drop APIs, and Data URIs. - * @param callback URL modifier callback. Called with url argument, and must return resolvedURL. - */ - setURLModifier(callback?: (url: string) => string): this; - - /** - * Given a URL, uses the URL modifier callback (if any) and returns a resolved URL. - * If no URL modifier is set, returns the original URL. - * @param url the url to load - */ - resolveURL(url: string): string; - - itemStart(url: string): void; - itemEnd(url: string): void; - itemError(url: string): void; - - // handlers - - addHandler(regex: RegExp, loader: Loader): this; - removeHandler(regex: RegExp): this; - getHandler(file: string): Loader | null; -} diff --git a/packages/canvas-three/three/src/loaders/MaterialLoader.d.ts b/packages/canvas-three/three/src/loaders/MaterialLoader.d.ts deleted file mode 100644 index 610778ea4..000000000 --- a/packages/canvas-three/three/src/loaders/MaterialLoader.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Material } from '../materials/Material.js'; -import { Texture } from '../textures/Texture.js'; -import { Loader } from './Loader.js'; -import { LoadingManager } from './LoadingManager.js'; - -export class MaterialLoader extends Loader { - /** - * @default {} - */ - textures: { [key: string]: Texture }; - - constructor(manager?: LoadingManager); - - parse(json: unknown): Material; - - setTextures(textures: { [key: string]: Texture }): this; - - static createMaterialFromType(type: string): Material; -} diff --git a/packages/canvas-three/three/src/loaders/ObjectLoader.d.ts b/packages/canvas-three/three/src/loaders/ObjectLoader.d.ts deleted file mode 100644 index 56e436519..000000000 --- a/packages/canvas-three/three/src/loaders/ObjectLoader.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { AnimationClip } from '../animation/AnimationClip.js'; -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { InstancedBufferGeometry } from '../core/InstancedBufferGeometry.js'; -import { Object3D } from '../core/Object3D.js'; -import { Material } from '../materials/Material.js'; -import { Source } from '../textures/Source.js'; -import { Texture } from '../textures/Texture.js'; -import { Loader } from './Loader.js'; -import { LoadingManager } from './LoadingManager.js'; - -export class ObjectLoader extends Loader { - constructor(manager?: LoadingManager); - - load(url: string, onLoad?: (data: Object3D) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): void; - - parse(json: unknown, onLoad?: (object: Object3D) => void): Object3D; - parseAsync(json: unknown): Promise; - parseGeometries(json: unknown): { [key: string]: InstancedBufferGeometry | BufferGeometry }; - parseMaterials(json: unknown, textures: { [key: string]: Texture }): { [key: string]: Material }; - parseAnimations(json: unknown): { [key: string]: AnimationClip }; - parseImages(json: unknown, onLoad?: () => void): { [key: string]: Source }; - parseImagesAsync(json: unknown): Promise<{ [key: string]: Source }>; - parseTextures(json: unknown, images: { [key: string]: Source }): { [key: string]: Texture }; - parseObject(data: unknown, geometries: { [key: string]: InstancedBufferGeometry | BufferGeometry }, materials: { [key: string]: Material }, animations: { [key: string]: AnimationClip }): Object3D; -} diff --git a/packages/canvas-three/three/src/loaders/TextureLoader.d.ts b/packages/canvas-three/three/src/loaders/TextureLoader.d.ts deleted file mode 100644 index ac0622c08..000000000 --- a/packages/canvas-three/three/src/loaders/TextureLoader.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Texture } from '../textures/Texture.js'; -import { Loader } from './Loader.js'; -import { LoadingManager } from './LoadingManager.js'; - -/** - * Class for loading a texture. - * Unlike other loaders, this one emits events instead of using predefined callbacks. So if you're interested in getting notified when things happen, you need to add listeners to the object. - */ -export class TextureLoader extends Loader { - constructor(manager?: LoadingManager); - - load(url: string, onLoad?: (data: Texture) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): Texture; -} diff --git a/packages/canvas-three/three/src/materials/LineBasicMaterial.d.ts b/packages/canvas-three/three/src/materials/LineBasicMaterial.d.ts deleted file mode 100644 index 65a855cfa..000000000 --- a/packages/canvas-three/three/src/materials/LineBasicMaterial.d.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Color, ColorRepresentation } from '../math/Color.js'; -import { Texture } from '../textures/Texture.js'; -import { Material, MaterialParameters } from './Material.js'; - -export interface LineBasicMaterialParameters extends MaterialParameters { - color?: ColorRepresentation | undefined; - fog?: boolean | undefined; - linewidth?: number | undefined; - linecap?: string | undefined; - linejoin?: string | undefined; -} - -export class LineBasicMaterial extends Material { - constructor(parameters?: LineBasicMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link LineBasicMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isLineBasicMaterial: true; - - /** - * @default 'LineBasicMaterial' - */ - type: string; - - /** - * @default 0xffffff - */ - color: Color; - - /** - * Whether the material is affected by fog. Default is true. - * @default true - */ - fog: boolean; - - /** - * @default 1 - */ - linewidth: number; - - /** - * @default 'round' - */ - linecap: string; - - /** - * @default 'round' - */ - linejoin: string; - - /** - * Sets the color of the lines using data from a {@link Texture}. - */ - map: Texture | null; - - setValues(parameters: LineBasicMaterialParameters): void; -} diff --git a/packages/canvas-three/three/src/materials/LineDashedMaterial.d.ts b/packages/canvas-three/three/src/materials/LineDashedMaterial.d.ts deleted file mode 100644 index b9730ae8a..000000000 --- a/packages/canvas-three/three/src/materials/LineDashedMaterial.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { LineBasicMaterial, LineBasicMaterialParameters } from './LineBasicMaterial.js'; - -export interface LineDashedMaterialParameters extends LineBasicMaterialParameters { - scale?: number | undefined; - dashSize?: number | undefined; - gapSize?: number | undefined; -} - -export class LineDashedMaterial extends LineBasicMaterial { - constructor(parameters?: LineDashedMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link LineDashedMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isLineDashedMaterial: true; - - /** - * @default 'LineDashedMaterial' - */ - type: string; - - /** - * @default 1 - */ - scale: number; - - /** - * @default 1 - */ - dashSize: number; - - /** - * @default 1 - */ - gapSize: number; - - setValues(parameters: LineDashedMaterialParameters): void; -} diff --git a/packages/canvas-three/three/src/materials/Material.d.ts b/packages/canvas-three/three/src/materials/Material.d.ts deleted file mode 100644 index 8dae9948f..000000000 --- a/packages/canvas-three/three/src/materials/Material.d.ts +++ /dev/null @@ -1,608 +0,0 @@ -import { Camera } from '../cameras/Camera.js'; -import { Blending, BlendingDstFactor, BlendingEquation, BlendingSrcFactor, Combine, DepthModes, NormalMapTypes, PixelFormat, Side, StencilFunc, StencilOp } from '../constants.js'; -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { EventDispatcher } from '../core/EventDispatcher.js'; -import { JSONMeta, Object3D } from '../core/Object3D.js'; -import { Color, ColorRepresentation } from '../math/Color.js'; -import { Plane } from '../math/Plane.js'; -import { Group } from '../objects/Group.js'; -import { WebGLProgramParametersWithUniforms } from '../renderers/webgl/WebGLPrograms.js'; -import { WebGLRenderer } from '../renderers/WebGLRenderer.js'; -import { Scene } from '../scenes/Scene.js'; -import { EulerTuple, SourceJSON, TextureJSON, Vector2Tuple } from '../Three.js'; - -export interface MaterialParameters { - alphaHash?: boolean | undefined; - alphaTest?: number | undefined; - alphaToCoverage?: boolean | undefined; - blendAlpha?: number | undefined; - blendColor?: ColorRepresentation | undefined; - blendDst?: BlendingDstFactor | undefined; - blendDstAlpha?: number | undefined; - blendEquation?: BlendingEquation | undefined; - blendEquationAlpha?: number | undefined; - blending?: Blending | undefined; - blendSrc?: BlendingSrcFactor | BlendingDstFactor | undefined; - blendSrcAlpha?: number | undefined; - clipIntersection?: boolean | undefined; - clippingPlanes?: Plane[] | undefined; - clipShadows?: boolean | undefined; - colorWrite?: boolean | undefined; - defines?: any; - depthFunc?: DepthModes | undefined; - depthTest?: boolean | undefined; - depthWrite?: boolean | undefined; - name?: string | undefined; - opacity?: number | undefined; - polygonOffset?: boolean | undefined; - polygonOffsetFactor?: number | undefined; - polygonOffsetUnits?: number | undefined; - precision?: 'highp' | 'mediump' | 'lowp' | null | undefined; - premultipliedAlpha?: boolean | undefined; - forceSinglePass?: boolean | undefined; - dithering?: boolean | undefined; - side?: Side | undefined; - shadowSide?: Side | undefined; - toneMapped?: boolean | undefined; - transparent?: boolean | undefined; - vertexColors?: boolean | undefined; - visible?: boolean | undefined; - format?: PixelFormat | undefined; - stencilWrite?: boolean | undefined; - stencilFunc?: StencilFunc | undefined; - stencilRef?: number | undefined; - stencilWriteMask?: number | undefined; - stencilFuncMask?: number | undefined; - stencilFail?: StencilOp | undefined; - stencilZFail?: StencilOp | undefined; - stencilZPass?: StencilOp | undefined; - userData?: Record | undefined; -} - -export interface MaterialJSON { - metadata: { version: number; type: string; generator: string }; - - uuid: string; - type: string; - - name?: string; - - color?: number; - roughness?: number; - metalness?: number; - - sheen?: number; - sheenColor?: number; - sheenRoughness?: number; - emissive?: number; - emissiveIntensity?: number; - - specular?: number; - specularIntensity?: number; - specularColor?: number; - shininess?: number; - clearcoat?: number; - clearcoatRoughness?: number; - clearcoatMap?: string; - clearcoatRoughnessMap?: string; - clearcoatNormalMap?: string; - clearcoatNormalScale?: Vector2Tuple; - - dispersion?: number; - - iridescence?: number; - iridescenceIOR?: number; - iridescenceThicknessRange?: number; - iridescenceMap?: string; - iridescenceThicknessMap?: string; - - anisotropy?: number; - anisotropyRotation?: number; - anisotropyMap?: string; - - map?: string; - matcap?: string; - alphaMap?: string; - - lightMap?: string; - lightMapIntensity?: number; - - aoMap?: string; - aoMapIntensity?: number; - - bumpMap?: string; - bumpScale?: number; - - normalMap?: string; - normalMapType?: NormalMapTypes; - normalScale?: Vector2Tuple; - - displacementMap?: string; - displacementScale?: number; - displacementBias?: number; - - roughnessMap?: string; - metalnessMap?: string; - - emissiveMap?: string; - specularMap?: string; - specularIntensityMap?: string; - specularColorMap?: string; - - envMap?: string; - combine?: Combine; - - envMapRotation?: EulerTuple; - envMapIntensity?: number; - reflectivity?: number; - refractionRatio?: number; - - gradientMap?: string; - - transmission?: number; - transmissionMap?: string; - thickness?: number; - thicknessMap?: string; - attenuationDistance?: number; - attenuationColor?: number; - - size?: number; - shadowSide?: number; - sizeAttenuation?: boolean; - - blending?: Blending; - side?: Side; - vertexColors?: boolean; - - opacity?: number; - transparent?: boolean; - - blendSrc?: BlendingSrcFactor; - blendDst?: BlendingDstFactor; - blendEquation?: BlendingEquation; - blendSrcAlpha?: number | null; - blendDstAlpha?: number | null; - blendEquationAlpha?: number | null; - blendColor?: number; - blendAlpha?: number; - - depthFunc?: DepthModes; - depthTest?: boolean; - depthWrite?: boolean; - colorWrite?: boolean; - - stencilWriteMask?: number; - stencilFunc?: StencilFunc; - stencilRef?: number; - stencilFuncMask?: number; - stencilFail?: StencilOp; - stencilZFail?: StencilOp; - stencilZPass?: StencilOp; - stencilWrite?: boolean; - - rotation?: number; - - polygonOffset?: boolean; - polygonOffsetFactor?: number; - polygonOffsetUnits?: number; - - linewidth?: number; - dashSize?: number; - gapSize?: number; - scale?: number; - - dithering?: boolean; - - alphaTest?: number; - alphaHash?: boolean; - alphaToCoverage?: boolean; - premultipliedAlpha?: boolean; - forceSinglePass?: boolean; - - wireframe?: boolean; - wireframeLinewidth?: number; - wireframeLinecap?: string; - wireframeLinejoin?: string; - - flatShading?: boolean; - - visible?: boolean; - - toneMapped?: boolean; - - fog?: boolean; - - userData?: Record; - - textures?: Array>; - images?: SourceJSON[]; -} - -/** - * Materials describe the appearance of objects. They are defined in a (mostly) renderer-independent way, so you don't have to rewrite materials if you decide to use a different renderer. - */ -export class Material extends EventDispatcher<{ dispose: {} }> { - constructor(); - - /** - * Read-only flag to check if a given object is of type {@link Material}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isMaterial: true; - - /** - * Enables alpha hashed transparency, an alternative to {@link .transparent} or {@link .alphaTest}. The material - * will not be rendered if opacity is lower than a random threshold. Randomization introduces some grain or noise, - * but approximates alpha blending without the associated problems of sorting. Using TAARenderPass can reduce the - * resulting noise. - */ - alphaHash: boolean; - - /** - * Enables alpha to coverage. Can only be used with MSAA-enabled rendering contexts (meaning when the renderer was - * created with *antialias* parameter set to `true`). Enabling this will smooth aliasing on clip plane edges and - * alphaTest-clipped edges. - * @default false - */ - alphaToCoverage: boolean; - - /** - * Represents the alpha value of the constant blend color. This property has only an effect when using custom - * blending with {@link ConstantAlphaFactor} or {@link OneMinusConstantAlphaFactor}. - * @default 0 - */ - blendAlpha: number; - - /** - * Represent the RGB values of the constant blend color. This property has only an effect when using custom - * blending with {@link ConstantColorFactor} or {@link OneMinusConstantColorFactor}. - * @default 0x000000 - */ - blendColor: Color; - - /** - * Blending destination. It's one of the blending mode constants defined in Three.js. Default is {@link OneMinusSrcAlphaFactor}. - * @default THREE.OneMinusSrcAlphaFactor - */ - blendDst: BlendingDstFactor; - - /** - * The tranparency of the .blendDst. Default is null. - * @default null - */ - blendDstAlpha: number | null; - - /** - * Blending equation to use when applying blending. It's one of the constants defined in Three.js. Default is {@link AddEquation}. - * @default THREE.AddEquation - */ - blendEquation: BlendingEquation; - - /** - * The tranparency of the .blendEquation. Default is null. - * @default null - */ - blendEquationAlpha: number | null; - - /** - * Which blending to use when displaying objects with this material. Default is {@link NormalBlending}. - * @default THREE.NormalBlending - */ - blending: Blending; - - /** - * Blending source. It's one of the blending mode constants defined in Three.js. Default is {@link SrcAlphaFactor}. - * @default THREE.SrcAlphaFactor - */ - blendSrc: BlendingSrcFactor | BlendingDstFactor; - - /** - * The tranparency of the .blendSrc. Default is null. - * @default null - */ - blendSrcAlpha: number | null; - - /** - * Changes the behavior of clipping planes so that only their intersection is clipped, rather than their union. Default is false. - * @default false - */ - clipIntersection: boolean; - - /** - * User-defined clipping planes specified as THREE.Plane objects in world space. - * These planes apply to the objects this material is attached to. - * Points in space whose signed distance to the plane is negative are clipped (not rendered). - * See the WebGL / clipping /intersection example. Default is null. - * @default null - */ - clippingPlanes: Plane[] | null; - - /** - * Defines whether to clip shadows according to the clipping planes specified on this material. Default is false. - * @default false - */ - clipShadows: boolean; - - /** - * Whether to render the material's color. This can be used in conjunction with a mesh's .renderOrder property to create invisible objects that occlude other objects. Default is true. - * @default true - */ - colorWrite: boolean; - - /** - * Custom defines to be injected into the shader. These are passed in form of an object literal, with key/value pairs. { MY_CUSTOM_DEFINE: '' , PI2: Math.PI * 2 }. - * The pairs are defined in both vertex and fragment shaders. Default is undefined. - * @default undefined - */ - defines: undefined | { [key: string]: any }; - - /** - * Which depth function to use. Default is {@link LessEqualDepth}. See the depth mode constants for all possible values. - * @default THREE.LessEqualDepth - */ - depthFunc: DepthModes; - - /** - * Whether to have depth test enabled when rendering this material. When the depth test is disabled, the depth write - * will also be implicitly disabled. - * @default true - */ - depthTest: boolean; - - /** - * Whether rendering this material has any effect on the depth buffer. Default is true. - * When drawing 2D overlays it can be useful to disable the depth writing in order to layer several things together without creating z-index artifacts. - * @default true - */ - depthWrite: boolean; - - /** - * Unique number of this material instance. - */ - id: number; - - /** - * Whether rendering this material has any effect on the stencil buffer. Default is *false*. - * @default false - */ - stencilWrite: boolean; - - /** - * The stencil comparison function to use. Default is {@link AlwaysStencilFunc}. See stencil operation constants for all possible values. - * @default THREE.AlwaysStencilFunc - */ - stencilFunc: StencilFunc; - - /** - * The value to use when performing stencil comparisons or stencil operations. Default is *0*. - * @default 0 - */ - stencilRef: number; - - /** - * The bit mask to use when writing to the stencil buffer. Default is *0xFF*. - * @default 0xff - */ - stencilWriteMask: number; - - /** - * The bit mask to use when comparing against the stencil buffer. Default is *0xFF*. - * @default 0xff - */ - stencilFuncMask: number; - - /** - * Which stencil operation to perform when the comparison function returns false. Default is {@link KeepStencilOp}. See the stencil operation constants for all possible values. - * @default THREE.KeepStencilOp - */ - stencilFail: StencilOp; - - /** - * Which stencil operation to perform when the comparison function returns true but the depth test fails. - * Default is {@link KeepStencilOp}. - * See the stencil operation constants for all possible values. - * @default THREE.KeepStencilOp - */ - stencilZFail: StencilOp; - - /** - * Which stencil operation to perform when the comparison function returns true and the depth test passes. - * Default is {@link KeepStencilOp}. - * See the stencil operation constants for all possible values. - * @default THREE.KeepStencilOp - */ - stencilZPass: StencilOp; - - /** - * Material name. Default is an empty string. - * @default '' - */ - name: string; - - /** - * Opacity. Default is 1. - * @default 1 - */ - opacity: number; - - /** - * Whether to use polygon offset. Default is false. This corresponds to the POLYGON_OFFSET_FILL WebGL feature. - * @default false - */ - polygonOffset: boolean; - - /** - * Sets the polygon offset factor. Default is 0. - * @default 0 - */ - polygonOffsetFactor: number; - - /** - * Sets the polygon offset units. Default is 0. - * @default 0 - */ - polygonOffsetUnits: number; - - /** - * Override the renderer's default precision for this material. Can be "highp", "mediump" or "lowp". Defaults is null. - * @default null - */ - precision: 'highp' | 'mediump' | 'lowp' | null; - - /** - * Whether to premultiply the alpha (transparency) value. See WebGL / Materials / Transparency for an example of the difference. Default is false. - * @default false - */ - premultipliedAlpha: boolean; - - /** - * @default false - */ - forceSinglePass: boolean; - - /** - * Whether to apply dithering to the color to remove the appearance of banding. Default is false. - * @default false - */ - dithering: boolean; - - /** - * Defines which of the face sides will be rendered - front, back or both. - * Default is {@link THREE.FrontSide}. Other options are {@link THREE.BackSide} and {@link THREE.DoubleSide}. - * - * @default {@link THREE.FrontSide} - */ - side: Side; - - /** - * Defines which of the face sides will cast shadows. Default is *null*. - * If *null*, the value is opposite that of side, above. - * @default null - */ - shadowSide: Side | null; - - /** - * Defines whether this material is tone mapped according to the renderer's - * {@link WebGLRenderer.toneMapping toneMapping} setting. It is ignored when rendering to a render target or using - * post processing. - * @default true - */ - toneMapped: boolean; - - /** - * Defines whether this material is transparent. This has an effect on rendering as transparent objects need special treatment and are rendered after non-transparent objects. - * When set to true, the extent to which the material is transparent is controlled by setting it's .opacity property. - * @default false - */ - transparent: boolean; - - /** - * Value is the string 'Material'. This shouldn't be changed, and can be used to find all objects of this type in a scene. - * @default 'Material' - */ - type: string; - - /** - * UUID of this material instance. This gets automatically assigned, so this shouldn't be edited. - */ - uuid: string; - - /** - * Defines whether vertex coloring is used. Default is false. - * @default false - */ - vertexColors: boolean; - - /** - * Defines whether this material is visible. Default is true. - * @default true - */ - visible: boolean; - - /** - * An object that can be used to store custom data about the Material. It should not hold references to functions as these will not be cloned. - * @default {} - */ - userData: Record; - - /** - * This starts at 0 and counts how many times .needsUpdate is set to true. - * @default 0 - */ - version: number; - - /** - * Gets the alpha value to be used when running an alpha test. Default is 0. - * @default 0 - */ - get alphaTest(): number; - - /** - * Sets the alpha value to be used when running an alpha test. Default is 0. - * @default 0 - */ - set alphaTest(value: number); - - /** - * An optional callback that is executed immediately before the shader program is compiled. - * This function is called with the associated WebGL program parameters and renderer. - * Useful for the modification of built-in materials. - * @param parameters WebGL program parameters - * @param renderer WebGLRenderer context that is initializing the material - */ - onBeforeCompile(parameters: WebGLProgramParametersWithUniforms, renderer: WebGLRenderer): void; - - /** - * In case onBeforeCompile is used, this callback can be used to identify values of settings used in onBeforeCompile, so three.js can reuse a cached shader or recompile the shader as needed. - */ - customProgramCacheKey(): string; - - /** - * Sets the properties based on the values. - * @param values A container with parameters. - */ - setValues(values: MaterialParameters): void; - - /** - * Convert the material to three.js JSON format. - * @param meta Object containing metadata such as textures or images for the material. - */ - toJSON(meta?: JSONMeta): MaterialJSON; - - /** - * Return a new material with the same parameters as this material. - */ - clone(): this; - - /** - * Copy the parameters from the passed material into this material. - * @param material - */ - copy(material: Material): this; - - /** - * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer - * used in your app. - * - * Material textures must be disposed of by the dispose() method of {@link Texture}. - */ - dispose(): void; - - /** - * Specifies that the material needs to be updated, WebGL wise. Set it to true if you made changes that need to be reflected in WebGL. - * This property is automatically set to true when instancing a new material. - * @default false - */ - set needsUpdate(value: boolean); - - /** - * @deprecated onBuild() has been removed. - */ - onBuild(object: Object3D, parameters: WebGLProgramParametersWithUniforms, renderer: WebGLRenderer): void; - - /** - * @deprecated onBeforeRender() has been removed. - */ - onBeforeRender(renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, object: Object3D, group: Group): void; -} diff --git a/packages/canvas-three/three/src/materials/Materials.d.ts b/packages/canvas-three/three/src/materials/Materials.d.ts deleted file mode 100644 index b55a4496d..000000000 --- a/packages/canvas-three/three/src/materials/Materials.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -export * from './LineBasicMaterial.js'; -export * from './LineDashedMaterial.js'; -export * from './Material.js'; -export * from './MeshBasicMaterial.js'; -export * from './MeshDepthMaterial.js'; -export * from './MeshDistanceMaterial.js'; -export * from './MeshLambertMaterial.js'; -export * from './MeshMatcapMaterial.js'; -export * from './MeshNormalMaterial.js'; -export * from './MeshPhongMaterial.js'; -export * from './MeshPhysicalMaterial.js'; -export * from './MeshStandardMaterial.js'; -export * from './MeshToonMaterial.js'; -export * from './PointsMaterial.js'; -export * from './RawShaderMaterial.js'; -export * from './ShaderMaterial.js'; -export * from './ShadowMaterial.js'; -export * from './SpriteMaterial.js'; diff --git a/packages/canvas-three/three/src/materials/MeshBasicMaterial.d.ts b/packages/canvas-three/three/src/materials/MeshBasicMaterial.d.ts deleted file mode 100644 index 3ab72f57f..000000000 --- a/packages/canvas-three/three/src/materials/MeshBasicMaterial.d.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { Combine } from '../constants.js'; -import { Color, ColorRepresentation } from '../math/Color.js'; -import { Euler } from '../math/Euler.js'; -import { Texture } from '../textures/Texture.js'; -import { Material, MaterialParameters } from './Material.js'; - -/** - * parameters is an object with one or more properties defining the material's appearance. - */ -export interface MeshBasicMaterialParameters extends MaterialParameters { - color?: ColorRepresentation | undefined; - opacity?: number | undefined; - map?: Texture | null | undefined; - lightMap?: Texture | null; - lightMapIntensity?: number | undefined; - aoMap?: Texture | null | undefined; - aoMapIntensity?: number | undefined; - specularMap?: Texture | null | undefined; - alphaMap?: Texture | null | undefined; - fog?: boolean | undefined; - envMap?: Texture | null | undefined; - envMapRotation?: Euler | undefined; - combine?: Combine | undefined; - reflectivity?: number | undefined; - refractionRatio?: number | undefined; - wireframe?: boolean | undefined; - wireframeLinewidth?: number | undefined; - wireframeLinecap?: string | undefined; - wireframeLinejoin?: string | undefined; -} - -export class MeshBasicMaterial extends Material { - constructor(parameters?: MeshBasicMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link MeshBasicMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isMeshBasicMaterial: true; - - /** - * @default 'MeshBasicMaterial' - */ - type: string; - - /** - * @default new THREE.Color( 0xffffff ) - */ - color: Color; - - /** - * @default null - */ - map: Texture | null; - - /** - * @default null - */ - lightMap: Texture | null; - - /** - * @default 1 - */ - lightMapIntensity: number; - - /** - * @default null - */ - aoMap: Texture | null; - - /** - * @default 1 - */ - aoMapIntensity: number; - - /** - * @default null - */ - specularMap: Texture | null; - - /** - * @default null - */ - alphaMap: Texture | null; - - /** - * @default null - */ - envMap: Texture | null; - - /** - * The rotation of the environment map in radians. Default is `(0,0,0)`. - */ - envMapRotation: Euler; - - /** - * @default THREE.MultiplyOperation - */ - combine: Combine; - - /** - * @default 1 - */ - reflectivity: number; - - /** - * @default 0.98 - */ - refractionRatio: number; - - /** - * @default false - */ - wireframe: boolean; - - /** - * @default 1 - */ - wireframeLinewidth: number; - - /** - * @default 'round' - */ - wireframeLinecap: string; - - /** - * @default 'round' - */ - wireframeLinejoin: string; - - /** - * Whether the material is affected by fog. Default is true. - * @default fog - */ - fog: boolean; - - setValues(parameters: MeshBasicMaterialParameters): void; -} diff --git a/packages/canvas-three/three/src/materials/MeshDepthMaterial.d.ts b/packages/canvas-three/three/src/materials/MeshDepthMaterial.d.ts deleted file mode 100644 index 2eb5d1264..000000000 --- a/packages/canvas-three/three/src/materials/MeshDepthMaterial.d.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { DepthPackingStrategies } from '../constants.js'; -import { Texture } from '../textures/Texture.js'; -import { Material, MaterialParameters } from './Material.js'; - -export interface MeshDepthMaterialParameters extends MaterialParameters { - map?: Texture | null | undefined; - alphaMap?: Texture | null | undefined; - depthPacking?: DepthPackingStrategies | undefined; - displacementMap?: Texture | null | undefined; - displacementScale?: number | undefined; - displacementBias?: number | undefined; - wireframe?: boolean | undefined; - wireframeLinewidth?: number | undefined; -} - -export class MeshDepthMaterial extends Material { - constructor(parameters?: MeshDepthMaterialParameters); - /** - * Read-only flag to check if a given object is of type {@link MeshDepthMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isMeshDepthMaterial: true; - - /** - * @default 'MeshDepthMaterial' - */ - type: string; - - /** - * @default null - */ - map: Texture | null; - - /** - * @default null - */ - alphaMap: Texture | null; - - /** - * @default THREE.BasicDepthPacking - */ - depthPacking: DepthPackingStrategies; - - /** - * @default null - */ - displacementMap: Texture | null; - - /** - * @default 1 - */ - displacementScale: number; - - /** - * @default 0 - */ - displacementBias: number; - - /** - * @default false - */ - wireframe: boolean; - - /** - * @default 1 - */ - wireframeLinewidth: number; - - /** - * @default false - */ - fog: boolean; - - setValues(parameters: MeshDepthMaterialParameters): void; -} diff --git a/packages/canvas-three/three/src/materials/MeshDistanceMaterial.d.ts b/packages/canvas-three/three/src/materials/MeshDistanceMaterial.d.ts deleted file mode 100644 index 41d92eed8..000000000 --- a/packages/canvas-three/three/src/materials/MeshDistanceMaterial.d.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { Vector3 } from '../math/Vector3.js'; -import { Texture } from '../textures/Texture.js'; -import { Material, MaterialParameters } from './Material.js'; - -export interface MeshDistanceMaterialParameters extends MaterialParameters { - map?: Texture | null | undefined; - alphaMap?: Texture | null | undefined; - displacementMap?: Texture | null | undefined; - displacementScale?: number | undefined; - displacementBias?: number | undefined; - farDistance?: number | undefined; - nearDistance?: number | undefined; - referencePosition?: Vector3 | undefined; -} - -export class MeshDistanceMaterial extends Material { - constructor(parameters?: MeshDistanceMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link MeshDistanceMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isMeshDistanceMaterial: true; - - /** - * @default 'MeshDistanceMaterial' - */ - type: string; - - /** - * @default null - */ - map: Texture | null; - - /** - * @default null - */ - alphaMap: Texture | null; - - /** - * @default null - */ - displacementMap: Texture | null; - - /** - * @default 1 - */ - displacementScale: number; - - /** - * @default 0 - */ - displacementBias: number; - - /** - * @default false - */ - fog: boolean; - - setValues(parameters: MeshDistanceMaterialParameters): void; -} diff --git a/packages/canvas-three/three/src/materials/MeshLambertMaterial.d.ts b/packages/canvas-three/three/src/materials/MeshLambertMaterial.d.ts deleted file mode 100644 index 04f8ed287..000000000 --- a/packages/canvas-three/three/src/materials/MeshLambertMaterial.d.ts +++ /dev/null @@ -1,204 +0,0 @@ -import { Combine, NormalMapTypes } from '../constants.js'; -import { Color, ColorRepresentation } from '../math/Color.js'; -import { Euler } from '../math/Euler.js'; -import { Vector2 } from '../math/Vector2.js'; -import { Texture } from '../textures/Texture.js'; -import { Material, MaterialParameters } from './Material.js'; - -export interface MeshLambertMaterialParameters extends MaterialParameters { - bumpMap?: Texture | undefined; - bumpScale?: number | undefined; - color?: ColorRepresentation | undefined; - displacementMap?: Texture | undefined; - displacementScale?: number | undefined; - displacementBias?: number | undefined; - emissive?: ColorRepresentation | undefined; - emissiveIntensity?: number | undefined; - emissiveMap?: Texture | null | undefined; - flatShading?: boolean | undefined; - map?: Texture | null | undefined; - lightMap?: Texture | null | undefined; - lightMapIntensity?: number | undefined; - normalMap?: Texture | undefined; - normalScale?: Vector2 | undefined; - aoMap?: Texture | null | undefined; - aoMapIntensity?: number | undefined; - specularMap?: Texture | null | undefined; - alphaMap?: Texture | null | undefined; - envMap?: Texture | null | undefined; - envMapRotation?: Euler | undefined; - combine?: Combine | undefined; - reflectivity?: number | undefined; - refractionRatio?: number | undefined; - wireframe?: boolean | undefined; - wireframeLinewidth?: number | undefined; - wireframeLinecap?: string | undefined; - wireframeLinejoin?: string | undefined; - fog?: boolean | undefined; -} - -export class MeshLambertMaterial extends Material { - constructor(parameters?: MeshLambertMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link MeshLambertMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isMeshLambertMaterial: true; - - /** - * @default 'MeshLambertMaterial' - */ - type: string; - - /** - * @default new THREE.Color( 0xffffff ) - */ - color: Color; - - /** - * @default null - */ - bumpMap: Texture | null; - - /** - * @default 1 - */ - bumpScale: number; - - /** - * @default null - */ - displacementMap: Texture | null; - - /** - * @default 1 - */ - displacementScale: number; - - /** - * @default 0 - */ - displacementBias: number; - - /** - * @default new THREE.Color( 0x000000 ) - */ - emissive: Color; - - /** - * @default 1 - */ - emissiveIntensity: number; - - /** - * @default null - */ - emissiveMap: Texture | null; - - /** - * @default false - */ - flatShading: boolean; - - /** - * @default null - */ - map: Texture | null; - - /** - * @default null - */ - lightMap: Texture | null; - - /** - * @default 1 - */ - lightMapIntensity: number; - - /** - * @default null - */ - normalMap: Texture | null; - - normalMapType: NormalMapTypes; - - /** - * @default new THREE.Vector2( 1, 1 ) - */ - normalScale: Vector2; - - /** - * @default null - */ - aoMap: Texture | null; - - /** - * @default 1 - */ - aoMapIntensity: number; - - /** - * @default null - */ - specularMap: Texture | null; - - /** - * @default null - */ - alphaMap: Texture | null; - - /** - * @default null - */ - envMap: Texture | null; - - /** - * The rotation of the environment map in radians. Default is `(0,0,0)`. - */ - envMapRotation: Euler; - - /** - * @default THREE.MultiplyOperation - */ - combine: Combine; - - /** - * @default 1 - */ - reflectivity: number; - - /** - * @default 0.98 - */ - refractionRatio: number; - - /** - * @default false - */ - wireframe: boolean; - - /** - * @default 1 - */ - wireframeLinewidth: number; - - /** - * @default 'round' - */ - wireframeLinecap: string; - - /** - * @default 'round' - */ - wireframeLinejoin: string; - - /** - * Whether the material is affected by fog. Default is true. - * @default fog - */ - fog: boolean; - - setValues(parameters: MeshLambertMaterialParameters): void; -} diff --git a/packages/canvas-three/three/src/materials/MeshMatcapMaterial.d.ts b/packages/canvas-three/three/src/materials/MeshMatcapMaterial.d.ts deleted file mode 100644 index 962da45cc..000000000 --- a/packages/canvas-three/three/src/materials/MeshMatcapMaterial.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { NormalMapTypes } from '../constants.js'; -import { Color, ColorRepresentation } from '../math/Color.js'; -import { Vector2 } from '../math/Vector2.js'; -import { Texture } from '../textures/Texture.js'; -import { Material, MaterialParameters } from './Material.js'; - -export interface MeshMatcapMaterialParameters extends MaterialParameters { - color?: ColorRepresentation | undefined; - matcap?: Texture | null | undefined; - map?: Texture | null | undefined; - bumpMap?: Texture | null | undefined; - bumpScale?: number | undefined; - normalMap?: Texture | null | undefined; - normalMapType?: NormalMapTypes | undefined; - normalScale?: Vector2 | undefined; - displacementMap?: Texture | null | undefined; - displacementScale?: number | undefined; - displacementBias?: number | undefined; - alphaMap?: Texture | null | undefined; - fog?: boolean | undefined; - flatShading?: boolean | undefined; -} - -export class MeshMatcapMaterial extends Material { - constructor(parameters?: MeshMatcapMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link MeshMatcapMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isMeshMatcapMaterial: true; - - /** - * @default 'MeshMatcapMaterial' - */ - type: string; - - /** - * @default { 'MATCAP': '' } - */ - defines: { [key: string]: any }; - - /** - * @default new THREE.Color( 0xffffff ) - */ - color: Color; - - /** - * @default null - */ - matcap: Texture | null; - - /** - * @default null - */ - map: Texture | null; - - /** - * @default null - */ - bumpMap: Texture | null; - - /** - * @default 1 - */ - bumpScale: number; - - /** - * @default null - */ - normalMap: Texture | null; - - /** - * @default THREE.TangentSpaceNormalMap - */ - normalMapType: NormalMapTypes; - - /** - * @default new Vector2( 1, 1 ) - */ - normalScale: Vector2; - - /** - * @default null - */ - displacementMap: Texture | null; - - /** - * @default 1 - */ - displacementScale: number; - - /** - * @default 0 - */ - displacementBias: number; - - /** - * @default null - */ - alphaMap: Texture | null; - - /** - * Define whether the material is rendered with flat shading. Default is false. - * @default false - */ - flatShading: boolean; - - /** - * Whether the material is affected by fog. Default is true. - * @default fog - */ - fog: boolean; - - setValues(parameters: MeshMatcapMaterialParameters): void; -} diff --git a/packages/canvas-three/three/src/materials/MeshNormalMaterial.d.ts b/packages/canvas-three/three/src/materials/MeshNormalMaterial.d.ts deleted file mode 100644 index 11eff90c8..000000000 --- a/packages/canvas-three/three/src/materials/MeshNormalMaterial.d.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { NormalMapTypes } from '../constants.js'; -import { Vector2 } from '../math/Vector2.js'; -import { Texture } from '../textures/Texture.js'; -import { Material, MaterialParameters } from './Material.js'; - -export interface MeshNormalMaterialParameters extends MaterialParameters { - bumpMap?: Texture | null | undefined; - bumpScale?: number | undefined; - normalMap?: Texture | null | undefined; - normalMapType?: NormalMapTypes | undefined; - normalScale?: Vector2 | undefined; - displacementMap?: Texture | null | undefined; - displacementScale?: number | undefined; - displacementBias?: number | undefined; - wireframe?: boolean | undefined; - wireframeLinewidth?: number | undefined; - - flatShading?: boolean | undefined; -} - -export class MeshNormalMaterial extends Material { - constructor(parameters?: MeshNormalMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link MeshNormalMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isMeshNormalMaterial: true; - - /** - * @default 'MeshNormalMaterial' - */ - type: string; - - /** - * @default null - */ - bumpMap: Texture | null; - - /** - * @default 1 - */ - bumpScale: number; - - /** - * @default null - */ - normalMap: Texture | null; - - /** - * @default THREE.TangentSpaceNormalMap - */ - normalMapType: NormalMapTypes; - - /** - * @default new THREE.Vector2( 1, 1 ) - */ - normalScale: Vector2; - - /** - * @default null - */ - displacementMap: Texture | null; - - /** - * @default 1 - */ - displacementScale: number; - - /** - * @default 0 - */ - displacementBias: number; - - /** - * @default false - */ - wireframe: boolean; - - /** - * @default 1 - */ - wireframeLinewidth: number; - - /** - * Define whether the material is rendered with flat shading. Default is false. - * @default false - */ - flatShading: boolean; - - setValues(parameters: MeshNormalMaterialParameters): void; -} diff --git a/packages/canvas-three/three/src/materials/MeshPhongMaterial.d.ts b/packages/canvas-three/three/src/materials/MeshPhongMaterial.d.ts deleted file mode 100644 index 0d971df82..000000000 --- a/packages/canvas-three/three/src/materials/MeshPhongMaterial.d.ts +++ /dev/null @@ -1,228 +0,0 @@ -import { Combine, NormalMapTypes } from '../constants.js'; -import { Color, ColorRepresentation } from '../math/Color.js'; -import { Euler } from '../math/Euler.js'; -import { Vector2 } from '../math/Vector2.js'; -import { Texture } from '../textures/Texture.js'; -import { Material, MaterialParameters } from './Material.js'; - -export interface MeshPhongMaterialParameters extends MaterialParameters { - /** geometry color in hexadecimal. Default is 0xffffff. */ - color?: ColorRepresentation | undefined; - specular?: ColorRepresentation | undefined; - shininess?: number | undefined; - opacity?: number | undefined; - map?: Texture | null | undefined; - lightMap?: Texture | null | undefined; - lightMapIntensity?: number | undefined; - aoMap?: Texture | null | undefined; - aoMapIntensity?: number | undefined; - emissive?: ColorRepresentation | undefined; - emissiveIntensity?: number | undefined; - emissiveMap?: Texture | null | undefined; - bumpMap?: Texture | null | undefined; - bumpScale?: number | undefined; - normalMap?: Texture | null | undefined; - normalMapType?: NormalMapTypes | undefined; - normalScale?: Vector2 | undefined; - displacementMap?: Texture | null | undefined; - displacementScale?: number | undefined; - displacementBias?: number | undefined; - specularMap?: Texture | null | undefined; - alphaMap?: Texture | null | undefined; - envMap?: Texture | null | undefined; - envMapRotation?: Euler | undefined; - combine?: Combine | undefined; - reflectivity?: number | undefined; - refractionRatio?: number | undefined; - wireframe?: boolean | undefined; - wireframeLinewidth?: number | undefined; - wireframeLinecap?: string | undefined; - wireframeLinejoin?: string | undefined; - fog?: boolean | undefined; - flatShading?: boolean | undefined; -} - -export class MeshPhongMaterial extends Material { - constructor(parameters?: MeshPhongMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link MeshPhongMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isMeshPhongMaterial: true; - - /** - * @default 'MeshNormalMaterial' - */ - type: string; - - /** - * @default new THREE.Color( 0xffffff ) - */ - color: Color; - - /** - * @default new THREE.Color( 0x111111 ) - */ - specular: Color; - - /** - * @default 30 - */ - shininess: number; - - /** - * @default null - */ - map: Texture | null; - - /** - * @default null - */ - lightMap: Texture | null; - - /** - * @default null - */ - lightMapIntensity: number; - - /** - * @default null - */ - aoMap: Texture | null; - - /** - * @default null - */ - aoMapIntensity: number; - - /** - * @default new THREE.Color( 0x000000 ) - */ - emissive: Color; - - /** - * @default 1 - */ - emissiveIntensity: number; - - /** - * @default null - */ - emissiveMap: Texture | null; - - /** - * @default null - */ - bumpMap: Texture | null; - - /** - * @default 1 - */ - bumpScale: number; - - /** - * @default null - */ - normalMap: Texture | null; - - /** - * @default THREE.TangentSpaceNormalMap - */ - normalMapType: NormalMapTypes; - - /** - * @default new Vector2( 1, 1 ) - */ - normalScale: Vector2; - - /** - * @default null - */ - displacementMap: Texture | null; - - /** - * @default 1 - */ - displacementScale: number; - - /** - * @default 0 - */ - displacementBias: number; - - /** - * @default null - */ - specularMap: Texture | null; - - /** - * @default null - */ - alphaMap: Texture | null; - - /** - * @default null - */ - envMap: Texture | null; - - /** - * The rotation of the environment map in radians. Default is `(0,0,0)`. - */ - envMapRotation: Euler; - - /** - * @default THREE.MultiplyOperation - */ - combine: Combine; - - /** - * @default 1 - */ - reflectivity: number; - - /** - * @default 0.98 - */ - refractionRatio: number; - - /** - * @default false - */ - wireframe: boolean; - - /** - * @default 1 - */ - wireframeLinewidth: number; - - /** - * @default 'round' - */ - wireframeLinecap: string; - - /** - * @default 'round' - */ - wireframeLinejoin: string; - - /** - * Define whether the material is rendered with flat shading. Default is false. - * @default false - */ - flatShading: boolean; - - /** - * @deprecated Use {@link MeshStandardMaterial THREE.MeshStandardMaterial} instead. - */ - metal: boolean; - - /** - * Whether the material is affected by fog. Default is true. - * @default fog - */ - fog: boolean; - - setValues(parameters: MeshPhongMaterialParameters): void; -} diff --git a/packages/canvas-three/three/src/materials/MeshPhysicalMaterial.d.ts b/packages/canvas-three/three/src/materials/MeshPhysicalMaterial.d.ts deleted file mode 100644 index 0c2d5588a..000000000 --- a/packages/canvas-three/three/src/materials/MeshPhysicalMaterial.d.ts +++ /dev/null @@ -1,236 +0,0 @@ -import { Color, ColorRepresentation } from '../math/Color.js'; -import { Vector2 } from '../math/Vector2.js'; -import { Texture } from '../textures/Texture.js'; -import { MeshStandardMaterial, MeshStandardMaterialParameters } from './MeshStandardMaterial.js'; - -export interface MeshPhysicalMaterialParameters extends MeshStandardMaterialParameters { - anisotropyRotation?: number | undefined; - anisotropyMap?: Texture | null | undefined; - - clearcoatMap?: Texture | null | undefined; - clearcoatRoughness?: number | undefined; - clearcoatRoughnessMap?: Texture | null | undefined; - clearcoatNormalScale?: Vector2 | undefined; - clearcoatNormalMap?: Texture | null | undefined; - - ior?: number | undefined; - - reflectivity?: number | undefined; - - iridescenceMap?: Texture | null | undefined; - iridescenceIOR?: number | undefined; - iridescenceThicknessRange?: [number, number] | undefined; - iridescenceThicknessMap?: Texture | null | undefined; - - sheenColor?: ColorRepresentation | undefined; - sheenColorMap?: Texture | null | undefined; - sheenRoughness?: number | undefined; - sheenRoughnessMap?: Texture | null | undefined; - - transmissionMap?: Texture | null | undefined; - - thickness?: number | undefined; - thicknessMap?: Texture | null | undefined; - attenuationDistance?: number | undefined; - attenuationColor?: ColorRepresentation | undefined; - - specularIntensity?: number | undefined; - specularIntensityMap?: Texture | null | undefined; - specularColor?: ColorRepresentation | undefined; - specularColorMap?: Texture | null | undefined; - - anisotropy?: number | undefined; - clearcoat?: number | undefined; - iridescence?: number | undefined; - dispersion?: number | undefined; - sheen?: number | undefined; - transmission?: number | undefined; -} - -export class MeshPhysicalMaterial extends MeshStandardMaterial { - constructor(parameters?: MeshPhysicalMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link MeshPhysicalMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isMeshPhysicalMaterial: true; - - /** - * @default { 'STANDARD': '', 'PHYSICAL': '' } - */ - defines: { [key: string]: any }; - - /** - * @default 'MeshPhysicalMaterial' - */ - type: string; - - /** - * @default 0 - */ - anisotropyRotation?: number; - - /** - * @default null - */ - anisotropyMap?: Texture | null; - - /** - * @default null - */ - clearcoatMap: Texture | null; - - /** - * @default 0 - */ - clearcoatRoughness: number; - - /** - * @default null - */ - clearcoatRoughnessMap: Texture | null; - - /** - * @default new THREE.Vector2( 1, 1 ) - */ - clearcoatNormalScale: Vector2; - - /** - * @default null - */ - clearcoatNormalMap: Texture | null; - - /** - * @default 1.5 - */ - ior: number; - - /** - * @default 0.5 - */ - get reflectivity(): number; - set reflectivity(reflectivity: number); - - /** - * @default null - */ - iridescenceMap: Texture | null; - - /** - * @default 1.3 - */ - iridescenceIOR: number; - - /** - * @default [100, 400] - */ - iridescenceThicknessRange: [number, number]; - - /** - * @default null - */ - iridescenceThicknessMap: Texture | null; - - /** - * @default Color( 0x000000 ) - */ - sheenColor: Color; - - /** - * @default null - */ - sheenColorMap: Texture | null; - - /** - * @default 1.0 - */ - sheenRoughness: number; - - /** - * @default null - */ - sheenRoughnessMap: Texture | null; - - /** - * @default null - */ - transmissionMap: Texture | null; - - /** - * @default 0.01 - */ - thickness: number; - - /** - * @default null - */ - thicknessMap: Texture | null; - - /** - * @default 0.0 - */ - attenuationDistance: number; - - /** - * @default Color( 1, 1, 1 ) - */ - attenuationColor: Color; - - /** - * @default 1.0 - */ - specularIntensity: number; - - /** - * @default null - */ - specularIntensityMap: Texture | null; - - /** - * @default Color(1, 1, 1) - */ - specularColor: Color; - - /** - * @default null - */ - specularColorMap: Texture | null; - - /** - * @default 0 - */ - get anisotropy(): number; - set anisotropy(value: number); - - /** - * @default 0 - */ - get clearcoat(): number; - set clearcoat(value: number); - - /** - * @default 0 - */ - get iridescence(): number; - set iridescence(value: number); - - /** - * @default 0 - */ - get dispersion(): number; - set dispersion(value: number); - - /** - * @default 0.0 - */ - get sheen(): number; - set sheen(value: number); - - /** - * @default 0 - */ - get transmission(): number; - set transmission(value: number); -} diff --git a/packages/canvas-three/three/src/materials/MeshStandardMaterial.d.ts b/packages/canvas-three/three/src/materials/MeshStandardMaterial.d.ts deleted file mode 100644 index 7138ce29c..000000000 --- a/packages/canvas-three/three/src/materials/MeshStandardMaterial.d.ts +++ /dev/null @@ -1,218 +0,0 @@ -import { NormalMapTypes } from '../constants.js'; -import { Color, ColorRepresentation } from '../math/Color.js'; -import { Euler } from '../math/Euler.js'; -import { Vector2 } from '../math/Vector2.js'; -import { Texture } from '../textures/Texture.js'; -import { Material, MaterialParameters } from './Material.js'; - -export interface MeshStandardMaterialParameters extends MaterialParameters { - color?: ColorRepresentation | undefined; - roughness?: number | undefined; - metalness?: number | undefined; - map?: Texture | null | undefined; - lightMap?: Texture | null | undefined; - lightMapIntensity?: number | undefined; - aoMap?: Texture | null | undefined; - aoMapIntensity?: number | undefined; - emissive?: ColorRepresentation | undefined; - emissiveIntensity?: number | undefined; - emissiveMap?: Texture | null | undefined; - bumpMap?: Texture | null | undefined; - bumpScale?: number | undefined; - normalMap?: Texture | null | undefined; - normalMapType?: NormalMapTypes | undefined; - normalScale?: Vector2 | undefined; - displacementMap?: Texture | null | undefined; - displacementScale?: number | undefined; - displacementBias?: number | undefined; - roughnessMap?: Texture | null | undefined; - metalnessMap?: Texture | null | undefined; - alphaMap?: Texture | null | undefined; - envMap?: Texture | null | undefined; - envMapRotation?: Euler | undefined; - envMapIntensity?: number | undefined; - wireframe?: boolean | undefined; - wireframeLinewidth?: number | undefined; - fog?: boolean | undefined; - flatShading?: boolean | undefined; -} - -export class MeshStandardMaterial extends Material { - constructor(parameters?: MeshStandardMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link MeshStandardMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isMeshStandardMaterial: true; - - /** - * @default 'MeshStandardMaterial' - */ - type: string; - - /** - * @default { 'STANDARD': '' } - */ - defines: { [key: string]: any }; - - /** - * @default new THREE.Color( 0xffffff ) - */ - color: Color; - - /** - * @default 1 - */ - roughness: number; - - /** - * @default 0 - */ - metalness: number; - - /** - * @default null - */ - map: Texture | null; - - /** - * @default null - */ - lightMap: Texture | null; - - /** - * @default 1 - */ - lightMapIntensity: number; - - /** - * @default null - */ - aoMap: Texture | null; - - /** - * @default 1 - */ - aoMapIntensity: number; - - /** - * @default new THREE.Color( 0x000000 ) - */ - emissive: Color; - - /** - * @default 1 - */ - emissiveIntensity: number; - - /** - * @default null - */ - emissiveMap: Texture | null; - - /** - * @default null - */ - bumpMap: Texture | null; - - /** - * @default 1 - */ - bumpScale: number; - - /** - * @default null - */ - normalMap: Texture | null; - - /** - * @default THREE.TangentSpaceNormalMap - */ - normalMapType: NormalMapTypes; - - /** - * @default new THREE.Vector2( 1, 1 ) - */ - normalScale: Vector2; - - /** - * @default null - */ - displacementMap: Texture | null; - - /** - * @default 1 - */ - displacementScale: number; - - /** - * @default 0 - */ - displacementBias: number; - - /** - * @default null - */ - roughnessMap: Texture | null; - - /** - * @default null - */ - metalnessMap: Texture | null; - - /** - * @default null - */ - alphaMap: Texture | null; - - /** - * @default null - */ - envMap: Texture | null; - - /** - * The rotation of the environment map in radians. Default is `(0,0,0)`. - */ - envMapRotation: Euler; - - /** - * @default 1 - */ - envMapIntensity: number; - - /** - * @default false - */ - wireframe: boolean; - - /** - * @default 1 - */ - wireframeLinewidth: number; - - /** - * @default 'round' - */ - wireframeLinecap: string; - - /** - * @default 'round' - */ - wireframeLinejoin: string; - - /** - * Define whether the material is rendered with flat shading. Default is false. - * @default false - */ - flatShading: boolean; - - /** - * Whether the material is affected by fog. Default is true. - * @default fog - */ - fog: boolean; - - setValues(parameters: MeshStandardMaterialParameters): void; -} diff --git a/packages/canvas-three/three/src/materials/MeshToonMaterial.d.ts b/packages/canvas-three/three/src/materials/MeshToonMaterial.d.ts deleted file mode 100644 index 3c70e8cc5..000000000 --- a/packages/canvas-three/three/src/materials/MeshToonMaterial.d.ts +++ /dev/null @@ -1,178 +0,0 @@ -import { NormalMapTypes } from '../constants.js'; -import { Color, ColorRepresentation } from '../math/Color.js'; -import { Vector2 } from '../math/Vector2.js'; -import { Texture } from '../textures/Texture.js'; -import { Material, MaterialParameters } from './Material.js'; - -export interface MeshToonMaterialParameters extends MaterialParameters { - /** geometry color in hexadecimal. Default is 0xffffff. */ - color?: ColorRepresentation | undefined; - opacity?: number | undefined; - gradientMap?: Texture | null | undefined; - map?: Texture | null | undefined; - lightMap?: Texture | null | undefined; - lightMapIntensity?: number | undefined; - aoMap?: Texture | null | undefined; - aoMapIntensity?: number | undefined; - emissive?: ColorRepresentation | undefined; - emissiveIntensity?: number | undefined; - emissiveMap?: Texture | null | undefined; - bumpMap?: Texture | null | undefined; - bumpScale?: number | undefined; - normalMap?: Texture | null | undefined; - normalMapType?: NormalMapTypes | undefined; - normalScale?: Vector2 | undefined; - displacementMap?: Texture | null | undefined; - displacementScale?: number | undefined; - displacementBias?: number | undefined; - alphaMap?: Texture | null | undefined; - wireframe?: boolean | undefined; - wireframeLinewidth?: number | undefined; - wireframeLinecap?: string | undefined; - wireframeLinejoin?: string | undefined; - fog?: boolean | undefined; -} - -export class MeshToonMaterial extends Material { - constructor(parameters?: MeshToonMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link MeshToonMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isMeshToonMaterial: true; - - /** - * @default 'MeshToonMaterial' - */ - type: string; - - /** - * @default { 'TOON': '' } - */ - defines: { [key: string]: any }; - - /** - * @default new THREE.Color( 0xffffff ) - */ - color: Color; - - /** - * @default null - */ - gradientMap: Texture | null; - - /** - * @default null - */ - map: Texture | null; - - /** - * @default null - */ - lightMap: Texture | null; - - /** - * @default 1 - */ - lightMapIntensity: number; - - /** - * @default null - */ - aoMap: Texture | null; - - /** - * @default 1 - */ - aoMapIntensity: number; - - /** - * @default new THREE.Color( 0x000000 ) - */ - emissive: Color; - - /** - * @default 1 - */ - emissiveIntensity: number; - - /** - * @default null - */ - emissiveMap: Texture | null; - - /** - * @default null - */ - bumpMap: Texture | null; - - /** - * @default 1 - */ - bumpScale: number; - - /** - * @default null - */ - normalMap: Texture | null; - - /** - * @default THREE.TangentSpaceNormalMap - */ - normalMapType: NormalMapTypes; - - /** - * @default new THREE.Vector2( 1, 1 ) - */ - normalScale: Vector2; - - /** - * @default null - */ - displacementMap: Texture | null; - - /** - * @default 1 - */ - displacementScale: number; - - /** - * @default 0 - */ - displacementBias: number; - - /** - * @default null - */ - alphaMap: Texture | null; - - /** - * @default false - */ - wireframe: boolean; - - /** - * @default 1 - */ - wireframeLinewidth: number; - - /** - * @default 'round' - */ - wireframeLinecap: string; - - /** - * @default 'round' - */ - wireframeLinejoin: string; - - /** - * Whether the material is affected by fog. Default is true. - * @default fog - */ - fog: boolean; - - setValues(parameters: MeshToonMaterialParameters): void; -} diff --git a/packages/canvas-three/three/src/materials/PointsMaterial.d.ts b/packages/canvas-three/three/src/materials/PointsMaterial.d.ts deleted file mode 100644 index 9ca034ed9..000000000 --- a/packages/canvas-three/three/src/materials/PointsMaterial.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Color, ColorRepresentation } from '../math/Color.js'; -import { Texture } from '../textures/Texture.js'; -import { Material, MaterialParameters } from './Material.js'; - -export interface PointsMaterialParameters extends MaterialParameters { - color?: ColorRepresentation | undefined; - map?: Texture | null | undefined; - alphaMap?: Texture | null | undefined; - size?: number | undefined; - sizeAttenuation?: boolean | undefined; - fog?: boolean | undefined; -} - -export class PointsMaterial extends Material { - constructor(parameters?: PointsMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link PointsMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isPointsMaterial: true; - - /** - * @default 'PointsMaterial' - */ - type: string; - - /** - * @default new THREE.Color( 0xffffff ) - */ - color: Color; - - /** - * @default null - */ - map: Texture | null; - - /** - * @default null - */ - alphaMap: Texture | null; - - /** - * @default 1 - */ - size: number; - - /** - * @default true - */ - sizeAttenuation: boolean; - - /** - * Whether the material is affected by fog. Default is true. - * @default fog - */ - fog: boolean; - - setValues(parameters: PointsMaterialParameters): void; -} diff --git a/packages/canvas-three/three/src/materials/RawShaderMaterial.d.ts b/packages/canvas-three/three/src/materials/RawShaderMaterial.d.ts deleted file mode 100644 index e16692267..000000000 --- a/packages/canvas-three/three/src/materials/RawShaderMaterial.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ShaderMaterial, ShaderMaterialParameters } from './ShaderMaterial.js'; - -export class RawShaderMaterial extends ShaderMaterial { - constructor(parameters?: ShaderMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link RawShaderMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isRawShaderMaterial: true; - - override readonly type: 'RawShaderMaterial'; -} diff --git a/packages/canvas-three/three/src/materials/ShaderMaterial.d.ts b/packages/canvas-three/three/src/materials/ShaderMaterial.d.ts deleted file mode 100644 index 14a6e8bf5..000000000 --- a/packages/canvas-three/three/src/materials/ShaderMaterial.d.ts +++ /dev/null @@ -1,175 +0,0 @@ -import { GLSLVersion } from '../constants.js'; -import { JSONMeta } from '../core/Object3D.js'; -import { UniformsGroup } from '../core/UniformsGroup.js'; -import { Matrix3, Matrix3Tuple } from '../math/Matrix3.js'; -import { Matrix4, Matrix4Tuple } from '../math/Matrix4.js'; -import { Vector2Tuple } from '../math/Vector2.js'; -import { Vector3Tuple } from '../math/Vector3.js'; -import { Vector4Tuple } from '../math/Vector4.js'; -import { IUniform } from '../renderers/shaders/UniformsLib.js'; -import { Material, MaterialJSON, MaterialParameters } from './Material.js'; - -export interface ShaderMaterialParameters extends MaterialParameters { - uniforms?: { [uniform: string]: IUniform } | undefined; - uniformsGroups?: UniformsGroup[] | undefined; - vertexShader?: string | undefined; - fragmentShader?: string | undefined; - linewidth?: number | undefined; - wireframe?: boolean | undefined; - wireframeLinewidth?: number | undefined; - lights?: boolean | undefined; - clipping?: boolean | undefined; - fog?: boolean | undefined; - extensions?: - | { - clipCullDistance?: boolean | undefined; - multiDraw?: boolean | undefined; - } - | undefined; - glslVersion?: GLSLVersion | undefined; -} - -export type ShaderMaterialUniformJSON = - | { - type: 't'; - value: string; - } - | { - type: 'c'; - value: number; - } - | { - type: 'v2'; - value: Vector2Tuple; - } - | { - type: 'v3'; - value: Vector3Tuple; - } - | { - type: 'v4'; - value: Vector4Tuple; - } - | { - type: 'm3'; - value: Matrix3Tuple; - } - | { - type: 'm4'; - value: Matrix4Tuple; - } - | { - value: unknown; - }; - -export interface ShaderMaterialJSON extends MaterialJSON { - glslVersion: number | null; - uniforms: Record; - - defines?: Record; - - vertexShader: string; - ragmentShader: string; - - lights: boolean; - clipping: boolean; - - extensions?: Record; -} - -export class ShaderMaterial extends Material { - constructor(parameters?: ShaderMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link ShaderMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isShaderMaterial: true; - - /** - * @default 'ShaderMaterial' - */ - type: string; - - /** - * @default {} - */ - defines: { [key: string]: any }; - - /** - * @default {} - */ - uniforms: { [uniform: string]: IUniform }; - - uniformsGroups: UniformsGroup[]; - - vertexShader: string; - - fragmentShader: string; - - /** - * @default 1 - */ - linewidth: number; - - /** - * @default false - */ - wireframe: boolean; - - /** - * @default 1 - */ - wireframeLinewidth: number; - - /** - * @default false - */ - fog: boolean; - - /** - * @default false - */ - lights: boolean; - - /** - * @default false - */ - clipping: boolean; - - /** - * @default { - * clipCullDistance: false, - * multiDraw: false - * } - */ - extensions: { - clipCullDistance: boolean; - multiDraw: boolean; - }; - - /** - * @default { 'color': [ 1, 1, 1 ], 'uv': [ 0, 0 ], 'uv1': [ 0, 0 ] } - */ - defaultAttributeValues: any; - - /** - * @default undefined - */ - index0AttributeName: string | undefined; - - /** - * @default false - */ - uniformsNeedUpdate: boolean; - - /** - * @default null - */ - glslVersion: GLSLVersion | null; - - setValues(parameters: ShaderMaterialParameters): void; - - toJSON(meta?: JSONMeta): ShaderMaterialJSON; -} diff --git a/packages/canvas-three/three/src/materials/ShadowMaterial.d.ts b/packages/canvas-three/three/src/materials/ShadowMaterial.d.ts deleted file mode 100644 index f9162fe88..000000000 --- a/packages/canvas-three/three/src/materials/ShadowMaterial.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Color, ColorRepresentation } from '../math/Color.js'; -import { Material, MaterialParameters } from './Material.js'; - -export interface ShadowMaterialParameters extends MaterialParameters { - color?: ColorRepresentation | undefined; - fog?: boolean | undefined; -} - -export class ShadowMaterial extends Material { - constructor(parameters?: ShadowMaterialParameters); - - /** - * Read-only flag to check if a given object is of type {@link ShadowMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isShadowMaterial: true; - - /** - * @default 'ShadowMaterial' - */ - type: string; - - /** - * @default new THREE.Color( 0x000000 ) - */ - color: Color; - - /** - * @default true - */ - transparent: boolean; - - /** - * Whether the material is affected by fog. Default is true. - * @default fog - */ - fog: boolean; -} diff --git a/packages/canvas-three/three/src/materials/SpriteMaterial.d.ts b/packages/canvas-three/three/src/materials/SpriteMaterial.d.ts deleted file mode 100644 index d72c10863..000000000 --- a/packages/canvas-three/three/src/materials/SpriteMaterial.d.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Color, ColorRepresentation } from '../math/Color.js'; -import { Texture } from '../textures/Texture.js'; -import { Material, MaterialParameters } from './Material.js'; - -export interface SpriteMaterialParameters extends MaterialParameters { - color?: ColorRepresentation | undefined; - map?: Texture | null | undefined; - alphaMap?: Texture | null | undefined; - rotation?: number | undefined; - sizeAttenuation?: boolean | undefined; - fog?: boolean | undefined; -} - -export class SpriteMaterial extends Material { - constructor(parameters?: SpriteMaterialParameters); - /** - * Read-only flag to check if a given object is of type {@link SpriteMaterial}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isSpriteMaterial: true; - - /** - * @default 'SpriteMaterial' - */ - type: string; - - /** - * @default new THREE.Color( 0xffffff ) - */ - color: Color; - - /** - * @default null - */ - map: Texture | null; - - /** - * @default null - */ - alphaMap: Texture | null; - - /** - * @default 0 - */ - rotation: number; - - /** - * @default true - */ - sizeAttenuation: boolean; - - /** - * @default true - */ - transparent: boolean; - - /** - * Whether the material is affected by fog. Default is true. - * @default fog - */ - fog: boolean; - - setValues(parameters: SpriteMaterialParameters): void; - copy(source: SpriteMaterial): this; -} diff --git a/packages/canvas-three/three/src/math/Box2.d.ts b/packages/canvas-three/three/src/math/Box2.d.ts deleted file mode 100644 index 8f4f8071e..000000000 --- a/packages/canvas-three/three/src/math/Box2.d.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Vector2 } from './Vector2.js'; - -// Math ////////////////////////////////////////////////////////////////////////////////// - -export class Box2 { - constructor(min?: Vector2, max?: Vector2); - - /** - * @default new THREE.Vector2( + Infinity, + Infinity ) - */ - min: Vector2; - - /** - * @default new THREE.Vector2( - Infinity, - Infinity ) - */ - max: Vector2; - - set(min: Vector2, max: Vector2): Box2; - setFromPoints(points: Vector2[]): Box2; - setFromCenterAndSize(center: Vector2, size: Vector2): Box2; - clone(): this; - copy(box: Box2): this; - makeEmpty(): Box2; - isEmpty(): boolean; - getCenter(target: Vector2): Vector2; - getSize(target: Vector2): Vector2; - expandByPoint(point: Vector2): Box2; - expandByVector(vector: Vector2): Box2; - expandByScalar(scalar: number): Box2; - containsPoint(point: Vector2): boolean; - containsBox(box: Box2): boolean; - getParameter(point: Vector2, target: Vector2): Vector2; - intersectsBox(box: Box2): boolean; - clampPoint(point: Vector2, target: Vector2): Vector2; - distanceToPoint(point: Vector2): number; - intersect(box: Box2): Box2; - union(box: Box2): Box2; - translate(offset: Vector2): Box2; - equals(box: Box2): boolean; - /** - * @deprecated Use {@link Box2#isEmpty .isEmpty()} instead. - */ - empty(): any; - /** - * @deprecated Use {@link Box2#intersectsBox .intersectsBox()} instead. - */ - isIntersectionBox(b: any): any; -} diff --git a/packages/canvas-three/three/src/math/Box3.d.ts b/packages/canvas-three/three/src/math/Box3.d.ts deleted file mode 100644 index 7bf18508b..000000000 --- a/packages/canvas-three/three/src/math/Box3.d.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { BufferAttribute } from '../core/BufferAttribute.js'; -import { Object3D } from '../core/Object3D.js'; -import { Matrix4 } from './Matrix4.js'; -import { Plane } from './Plane.js'; -import { Sphere } from './Sphere.js'; -import { Triangle } from './Triangle.js'; -import { Vector3 } from './Vector3.js'; - -export class Box3 { - constructor(min?: Vector3, max?: Vector3); - - /** - * @default new THREE.Vector3( + Infinity, + Infinity, + Infinity ) - */ - min: Vector3; - - /** - * @default new THREE.Vector3( - Infinity, - Infinity, - Infinity ) - */ - max: Vector3; - readonly isBox3: true; - - set(min: Vector3, max: Vector3): this; - setFromArray(array: ArrayLike): this; - setFromBufferAttribute(bufferAttribute: BufferAttribute): this; - setFromPoints(points: Vector3[]): this; - setFromCenterAndSize(center: Vector3, size: Vector3): this; - setFromObject(object: Object3D, precise?: boolean): this; - clone(): this; - copy(box: Box3): this; - makeEmpty(): this; - isEmpty(): boolean; - getCenter(target: Vector3): Vector3; - getSize(target: Vector3): Vector3; - expandByPoint(point: Vector3): this; - expandByVector(vector: Vector3): this; - expandByScalar(scalar: number): this; - expandByObject(object: Object3D, precise?: boolean): this; - containsPoint(point: Vector3): boolean; - containsBox(box: Box3): boolean; - getParameter(point: Vector3, target: Vector3): Vector3; - intersectsBox(box: Box3): boolean; - intersectsSphere(sphere: Sphere): boolean; - intersectsPlane(plane: Plane): boolean; - intersectsTriangle(triangle: Triangle): boolean; - clampPoint(point: Vector3, target: Vector3): Vector3; - distanceToPoint(point: Vector3): number; - getBoundingSphere(target: Sphere): Sphere; - intersect(box: Box3): this; - union(box: Box3): this; - applyMatrix4(matrix: Matrix4): this; - translate(offset: Vector3): this; - equals(box: Box3): boolean; - /** - * @deprecated Use {@link Box3#isEmpty .isEmpty()} instead. - */ - empty(): any; - /** - * @deprecated Use {@link Box3#intersectsBox .intersectsBox()} instead. - */ - isIntersectionBox(b: any): any; - /** - * @deprecated Use {@link Box3#intersectsSphere .intersectsSphere()} instead. - */ - isIntersectionSphere(s: any): any; -} diff --git a/packages/canvas-three/three/src/math/Color.d.ts b/packages/canvas-three/three/src/math/Color.d.ts deleted file mode 100644 index 550928709..000000000 --- a/packages/canvas-three/three/src/math/Color.d.ts +++ /dev/null @@ -1,358 +0,0 @@ -import { ColorSpace } from '../constants.js'; -import { Matrix3 } from './Matrix3.js'; -import { Vector3 } from './Vector3.js'; - -import { BufferAttribute } from '../core/BufferAttribute.js'; -import { InterleavedBufferAttribute } from '../core/InterleavedBufferAttribute.js'; - -export { SRGBToLinear } from './ColorManagement.js'; - -declare const _colorKeywords: { - aliceblue: 0xf0f8ff; - antiquewhite: 0xfaebd7; - aqua: 0x00ffff; - aquamarine: 0x7fffd4; - azure: 0xf0ffff; - beige: 0xf5f5dc; - bisque: 0xffe4c4; - black: 0x000000; - blanchedalmond: 0xffebcd; - blue: 0x0000ff; - blueviolet: 0x8a2be2; - brown: 0xa52a2a; - burlywood: 0xdeb887; - cadetblue: 0x5f9ea0; - chartreuse: 0x7fff00; - chocolate: 0xd2691e; - coral: 0xff7f50; - cornflowerblue: 0x6495ed; - cornsilk: 0xfff8dc; - crimson: 0xdc143c; - cyan: 0x00ffff; - darkblue: 0x00008b; - darkcyan: 0x008b8b; - darkgoldenrod: 0xb8860b; - darkgray: 0xa9a9a9; - darkgreen: 0x006400; - darkgrey: 0xa9a9a9; - darkkhaki: 0xbdb76b; - darkmagenta: 0x8b008b; - darkolivegreen: 0x556b2f; - darkorange: 0xff8c00; - darkorchid: 0x9932cc; - darkred: 0x8b0000; - darksalmon: 0xe9967a; - darkseagreen: 0x8fbc8f; - darkslateblue: 0x483d8b; - darkslategray: 0x2f4f4f; - darkslategrey: 0x2f4f4f; - darkturquoise: 0x00ced1; - darkviolet: 0x9400d3; - deeppink: 0xff1493; - deepskyblue: 0x00bfff; - dimgray: 0x696969; - dimgrey: 0x696969; - dodgerblue: 0x1e90ff; - firebrick: 0xb22222; - floralwhite: 0xfffaf0; - forestgreen: 0x228b22; - fuchsia: 0xff00ff; - gainsboro: 0xdcdcdc; - ghostwhite: 0xf8f8ff; - gold: 0xffd700; - goldenrod: 0xdaa520; - gray: 0x808080; - green: 0x008000; - greenyellow: 0xadff2f; - grey: 0x808080; - honeydew: 0xf0fff0; - hotpink: 0xff69b4; - indianred: 0xcd5c5c; - indigo: 0x4b0082; - ivory: 0xfffff0; - khaki: 0xf0e68c; - lavender: 0xe6e6fa; - lavenderblush: 0xfff0f5; - lawngreen: 0x7cfc00; - lemonchiffon: 0xfffacd; - lightblue: 0xadd8e6; - lightcoral: 0xf08080; - lightcyan: 0xe0ffff; - lightgoldenrodyellow: 0xfafad2; - lightgray: 0xd3d3d3; - lightgreen: 0x90ee90; - lightgrey: 0xd3d3d3; - lightpink: 0xffb6c1; - lightsalmon: 0xffa07a; - lightseagreen: 0x20b2aa; - lightskyblue: 0x87cefa; - lightslategray: 0x778899; - lightslategrey: 0x778899; - lightsteelblue: 0xb0c4de; - lightyellow: 0xffffe0; - lime: 0x00ff00; - limegreen: 0x32cd32; - linen: 0xfaf0e6; - magenta: 0xff00ff; - maroon: 0x800000; - mediumaquamarine: 0x66cdaa; - mediumblue: 0x0000cd; - mediumorchid: 0xba55d3; - mediumpurple: 0x9370db; - mediumseagreen: 0x3cb371; - mediumslateblue: 0x7b68ee; - mediumspringgreen: 0x00fa9a; - mediumturquoise: 0x48d1cc; - mediumvioletred: 0xc71585; - midnightblue: 0x191970; - mintcream: 0xf5fffa; - mistyrose: 0xffe4e1; - moccasin: 0xffe4b5; - navajowhite: 0xffdead; - navy: 0x000080; - oldlace: 0xfdf5e6; - olive: 0x808000; - olivedrab: 0x6b8e23; - orange: 0xffa500; - orangered: 0xff4500; - orchid: 0xda70d6; - palegoldenrod: 0xeee8aa; - palegreen: 0x98fb98; - paleturquoise: 0xafeeee; - palevioletred: 0xdb7093; - papayawhip: 0xffefd5; - peachpuff: 0xffdab9; - peru: 0xcd853f; - pink: 0xffc0cb; - plum: 0xdda0dd; - powderblue: 0xb0e0e6; - purple: 0x800080; - rebeccapurple: 0x663399; - red: 0xff0000; - rosybrown: 0xbc8f8f; - royalblue: 0x4169e1; - saddlebrown: 0x8b4513; - salmon: 0xfa8072; - sandybrown: 0xf4a460; - seagreen: 0x2e8b57; - seashell: 0xfff5ee; - sienna: 0xa0522d; - silver: 0xc0c0c0; - skyblue: 0x87ceeb; - slateblue: 0x6a5acd; - slategray: 0x708090; - slategrey: 0x708090; - snow: 0xfffafa; - springgreen: 0x00ff7f; - steelblue: 0x4682b4; - tan: 0xd2b48c; - teal: 0x008080; - thistle: 0xd8bfd8; - tomato: 0xff6347; - turquoise: 0x40e0d0; - violet: 0xee82ee; - wheat: 0xf5deb3; - white: 0xffffff; - whitesmoke: 0xf5f5f5; - yellow: 0xffff00; - yellowgreen: 0x9acd32; -}; - -export type ColorRepresentation = Color | string | number; - -export interface HSL { - h: number; - s: number; - l: number; -} - -export interface RGB { - r: number; - g: number; - b: number; -} - -/** - * Represents a color. See also {@link ColorUtils}. - * - * see {@link https://github.com/mrdoob/three.js/blob/master/src/math/Color.js|src/math/Color.js} - * - * @example - * const color = new THREE.Color( 0xff0000 ); - */ -export class Color { - constructor(color?: ColorRepresentation); - constructor(r: number, g: number, b: number); - - readonly isColor: true; - - /** - * Red channel value between 0 and 1. Default is 1. - * @default 1 - */ - r: number; - - /** - * Green channel value between 0 and 1. Default is 1. - * @default 1 - */ - g: number; - - /** - * Blue channel value between 0 and 1. Default is 1. - * @default 1 - */ - b: number; - - set(...args: [color: ColorRepresentation] | [r: number, g: number, b: number]): this; - - /** - * Sets this color's {@link r}, {@link g} and {@link b} components from the x, y, and z components of the specified - * {@link Vector3 | vector}. - */ - setFromVector3(vector: Vector3): this; - - setScalar(scalar: number): Color; - setHex(hex: number, colorSpace?: ColorSpace): Color; - - /** - * Sets this color from RGB values. - * @param r Red channel value between 0 and 1. - * @param g Green channel value between 0 and 1. - * @param b Blue channel value between 0 and 1. - */ - setRGB(r: number, g: number, b: number, colorSpace?: ColorSpace): Color; - - /** - * Sets this color from HSL values. - * Based on MochiKit implementation by Bob Ippolito. - * - * @param h Hue channel value between 0 and 1. - * @param s Saturation value channel between 0 and 1. - * @param l Value channel value between 0 and 1. - */ - setHSL(h: number, s: number, l: number, colorSpace?: ColorSpace): Color; - - /** - * Sets this color from a CSS context style string. - * @param contextStyle Color in CSS context style format. - */ - setStyle(style: string, colorSpace?: ColorSpace): Color; - - /** - * Sets this color from a color name. - * Faster than {@link Color#setStyle .setStyle()} method if you don't need the other CSS-style formats. - * @param style Color name in X11 format. - */ - setColorName(style: string, colorSpace?: ColorSpace): Color; - - /** - * Clones this color. - */ - clone(): this; - - /** - * Copies given color. - * @param color Color to copy. - */ - copy(color: Color): this; - - /** - * Copies given color making conversion from sRGB to linear space. - * @param color Color to copy. - */ - copySRGBToLinear(color: Color): Color; - - /** - * Copies given color making conversion from linear to sRGB space. - * @param color Color to copy. - */ - copyLinearToSRGB(color: Color): Color; - - /** - * Converts this color from sRGB to linear space. - */ - convertSRGBToLinear(): Color; - - /** - * Converts this color from linear to sRGB space. - */ - convertLinearToSRGB(): Color; - - /** - * Returns the hexadecimal value of this color. - */ - getHex(colorSpace?: ColorSpace): number; - - /** - * Returns the string formated hexadecimal value of this color. - */ - getHexString(colorSpace?: ColorSpace): string; - - getHSL(target: HSL, colorSpace?: ColorSpace): HSL; - - getRGB(target: RGB, colorSpace?: ColorSpace): RGB; - - /** - * Returns the value of this color in CSS context style. - * Example: rgb(r, g, b) - */ - getStyle(colorSpace?: ColorSpace): string; - - offsetHSL(h: number, s: number, l: number): this; - - add(color: Color): this; - addColors(color1: Color, color2: Color): this; - addScalar(s: number): this; - - /** - * Applies the transform {@link Matrix3 | m} to this color's RGB components. - */ - applyMatrix3(m: Matrix3): this; - - sub(color: Color): this; - multiply(color: Color): this; - multiplyScalar(s: number): this; - lerp(color: Color, alpha: number): this; - lerpColors(color1: Color, color2: Color, alpha: number): this; - lerpHSL(color: Color, alpha: number): this; - equals(color: Color): boolean; - - /** - * Sets this color's red, green and blue value from the provided array or array-like. - * @param array the source array or array-like. - * @param offset (optional) offset into the array-like. Default is 0. - */ - fromArray(array: number[] | ArrayLike, offset?: number): this; - - /** - * Returns an array [red, green, blue], or copies red, green and blue into the provided array. - * @param array (optional) array to store the color to. If this is not provided, a new array will be created. - * @param offset (optional) optional offset into the array. - * @return The created or provided array. - */ - toArray(array?: number[], offset?: number): number[]; - - /** - * Copies red, green and blue into the provided array-like. - * @param array array-like to store the color to. - * @param offset (optional) optional offset into the array-like. - * @return The provided array-like. - */ - toArray(xyz: ArrayLike, offset?: number): ArrayLike; - - /** - * This method defines the serialization result of Color. - * @return The color as a hexadecimal value. - */ - toJSON(): number; - - fromBufferAttribute(attribute: BufferAttribute | InterleavedBufferAttribute, index: number): this; - - [Symbol.iterator](): Generator; - - /** - * List of X11 color names. - */ - static NAMES: typeof _colorKeywords; -} diff --git a/packages/canvas-three/three/src/math/ColorManagement.d.ts b/packages/canvas-three/three/src/math/ColorManagement.d.ts deleted file mode 100644 index 14c883ff2..000000000 --- a/packages/canvas-three/three/src/math/ColorManagement.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { ColorSpace, ColorSpacePrimaries, ColorSpaceTransfer, DisplayP3ColorSpace, LinearDisplayP3ColorSpace, LinearSRGBColorSpace, SRGBColorSpace } from '../constants.js'; -import { Color } from './Color.js'; -import { Vector3 } from './Vector3.js'; - -export type WorkingColorSpace = typeof LinearSRGBColorSpace | typeof LinearDisplayP3ColorSpace; -export type DefinedColorSpace = typeof LinearSRGBColorSpace | typeof SRGBColorSpace | typeof LinearDisplayP3ColorSpace | typeof DisplayP3ColorSpace; - -export interface ColorManagement { - /** - * @default false - */ - enabled: boolean; - - /** - * @default LinearSRGBColorSpace - */ - get workingColorSpace(): WorkingColorSpace; - set workingColorSpace(colorSpace: WorkingColorSpace); - - convert: (color: Color, sourceColorSpace: DefinedColorSpace, targetColorSpace: DefinedColorSpace) => Color; - - fromWorkingColorSpace: (color: Color, targetColorSpace: DefinedColorSpace) => Color; - - toWorkingColorSpace: (color: Color, sourceColorSpace: DefinedColorSpace) => Color; - - getPrimaries: (colorSpace: DefinedColorSpace) => ColorSpacePrimaries; - - getTransfer: (colorSpace: ColorSpace) => ColorSpaceTransfer; - - getLuminanceCoefficients: (target: Vector3, colorSpace?: ColorSpace) => Vector3; -} - -export const ColorManagement: ColorManagement; - -export function SRGBToLinear(c: number): number; - -export function LinearToSRGB(c: number): number; diff --git a/packages/canvas-three/three/src/math/Cylindrical.d.ts b/packages/canvas-three/three/src/math/Cylindrical.d.ts deleted file mode 100644 index d970d40bc..000000000 --- a/packages/canvas-three/three/src/math/Cylindrical.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Vector3 } from './Vector3.js'; - -export class Cylindrical { - constructor(radius?: number, theta?: number, y?: number); - - /** - * @default 1 - */ - radius: number; - - /** - * @default 0 - */ - theta: number; - - /** - * @default 0 - */ - y: number; - - clone(): this; - copy(other: Cylindrical): this; - set(radius: number, theta: number, y: number): this; - setFromVector3(vec3: Vector3): this; - setFromCartesianCoords(x: number, y: number, z: number): this; -} diff --git a/packages/canvas-three/three/src/math/Euler.d.ts b/packages/canvas-three/three/src/math/Euler.d.ts deleted file mode 100644 index 9982f280f..000000000 --- a/packages/canvas-three/three/src/math/Euler.d.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Matrix4 } from './Matrix4.js'; -import { Quaternion } from './Quaternion.js'; -import { Vector3 } from './Vector3.js'; - -export type EulerOrder = 'XYZ' | 'YXZ' | 'ZXY' | 'ZYX' | 'YZX' | 'XZY'; - -export type EulerTuple = [x: number, y: number, z: number, order?: EulerOrder]; - -export class Euler { - constructor(x?: number, y?: number, z?: number, order?: EulerOrder); - - /** - * @default 0 - */ - x: number; - - /** - * @default 0 - */ - y: number; - - /** - * @default 0 - */ - z: number; - - /** - * @default THREE.Euler.DEFAULT_ORDER - */ - order: EulerOrder; - readonly isEuler: true; - - _onChangeCallback: () => void; - - set(x: number, y: number, z: number, order?: EulerOrder): Euler; - clone(): this; - copy(euler: Euler): this; - setFromRotationMatrix(m: Matrix4, order?: EulerOrder, update?: boolean): Euler; - setFromQuaternion(q: Quaternion, order?: EulerOrder, update?: boolean): Euler; - setFromVector3(v: Vector3, order?: EulerOrder): Euler; - reorder(newOrder: EulerOrder): Euler; - equals(euler: Euler): boolean; - fromArray(array: EulerTuple): Euler; - toArray(array?: Partial, offset?: number): EulerTuple; - _onChange(callback: () => void): this; - - static DEFAULT_ORDER: 'XYZ'; - - [Symbol.iterator](): Generator; -} diff --git a/packages/canvas-three/three/src/math/Frustum.d.ts b/packages/canvas-three/three/src/math/Frustum.d.ts deleted file mode 100644 index ac9751188..000000000 --- a/packages/canvas-three/three/src/math/Frustum.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { CoordinateSystem } from '../constants.js'; -import { Object3D } from '../core/Object3D.js'; -import { Sprite } from '../objects/Sprite.js'; -import { Box3 } from './Box3.js'; -import { Matrix4 } from './Matrix4.js'; -import { Plane } from './Plane.js'; -import { Sphere } from './Sphere.js'; -import { Vector3 } from './Vector3.js'; - -/** - * Frustums are used to determine what is inside the camera's field of view. They help speed up the rendering process. - */ -export class Frustum { - constructor(p0?: Plane, p1?: Plane, p2?: Plane, p3?: Plane, p4?: Plane, p5?: Plane); - - /** - * Array of 6 vectors. - */ - planes: Plane[]; - - set(p0: Plane, p1: Plane, p2: Plane, p3: Plane, p4: Plane, p5: Plane): Frustum; - clone(): this; - copy(frustum: Frustum): this; - setFromProjectionMatrix(m: Matrix4, coordinateSystem?: CoordinateSystem): this; - intersectsObject(object: Object3D): boolean; - intersectsSprite(sprite: Sprite): boolean; - intersectsSphere(sphere: Sphere): boolean; - intersectsBox(box: Box3): boolean; - containsPoint(point: Vector3): boolean; -} diff --git a/packages/canvas-three/three/src/math/Interpolant.d.ts b/packages/canvas-three/three/src/math/Interpolant.d.ts deleted file mode 100644 index aa3d4791e..000000000 --- a/packages/canvas-three/three/src/math/Interpolant.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export abstract class Interpolant { - constructor(parameterPositions: any, sampleValues: any, sampleSize: number, resultBuffer?: any); - - parameterPositions: any; - sampleValues: any; - valueSize: number; - resultBuffer: any; - - evaluate(time: number): any; -} diff --git a/packages/canvas-three/three/src/math/Line3.d.ts b/packages/canvas-three/three/src/math/Line3.d.ts deleted file mode 100644 index 4e38f1853..000000000 --- a/packages/canvas-three/three/src/math/Line3.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Matrix4 } from './Matrix4.js'; -import { Vector3 } from './Vector3.js'; - -export class Line3 { - constructor(start?: Vector3, end?: Vector3); - - /** - * @default new THREE.Vector3() - */ - start: Vector3; - - /** - * @default new THREE.Vector3() - */ - end: Vector3; - - set(start?: Vector3, end?: Vector3): Line3; - clone(): this; - copy(line: Line3): this; - getCenter(target: Vector3): Vector3; - delta(target: Vector3): Vector3; - distanceSq(): number; - distance(): number; - at(t: number, target: Vector3): Vector3; - closestPointToPointParameter(point: Vector3, clampToLine?: boolean): number; - closestPointToPoint(point: Vector3, clampToLine: boolean, target: Vector3): Vector3; - applyMatrix4(matrix: Matrix4): Line3; - equals(line: Line3): boolean; -} diff --git a/packages/canvas-three/three/src/math/MathUtils.d.ts b/packages/canvas-three/three/src/math/MathUtils.d.ts deleted file mode 100644 index 1d6d33ceb..000000000 --- a/packages/canvas-three/three/src/math/MathUtils.d.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { Quaternion } from './Quaternion.js'; - -/** - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/math/MathUtils.js|src/math/MathUtils.js} - */ - -export const DEG2RAD: number; - -export const RAD2DEG: number; - -export function generateUUID(): string; - -/** - * Clamps the x to be between a and b. - * - * @param value Value to be clamped. - * @param min Minimum value. - * @param max Maximum value. - */ -export function clamp(value: number, min: number, max: number): number; - -export function euclideanModulo(n: number, m: number): number; - -/** - * Linear mapping of x from range [a1, a2] to range [b1, b2]. - * - * @param x Value to be mapped. - * @param a1 Minimum value for range A. - * @param a2 Maximum value for range A. - * @param b1 Minimum value for range B. - * @param b2 Maximum value for range B. - */ -export function mapLinear(x: number, a1: number, a2: number, b1: number, b2: number): number; - -export function inverseLerp(x: number, y: number, t: number): number; - -/** - * Returns a value linearly interpolated from two known points based - * on the given interval - t = 0 will return x and t = 1 will return y. - * - * @param x Start point. - * @param y End point. - * @param t interpolation factor in the closed interval [0, 1] - */ -export function lerp(x: number, y: number, t: number): number; - -/** - * Smoothly interpolate a number from x toward y in a spring-like - * manner using the dt to maintain frame rate independent movement. - * - * @param x Current point. - * @param y Target point. - * @param lambda A higher lambda value will make the movement more sudden, and a lower value will make the movement more gradual. - * @param dt Delta time in seconds. - */ -export function damp(x: number, y: number, lambda: number, dt: number): number; - -/** - * Returns a value that alternates between 0 and length. - * - * @param x The value to pingpong. - * @param length The positive value the export function will pingpong to. Default is 1. - */ -export function pingpong(x: number, length?: number): number; - -export function smoothstep(x: number, min: number, max: number): number; - -export function smootherstep(x: number, min: number, max: number): number; - -/** - * Random integer from low to high interval. - */ -export function randInt(low: number, high: number): number; - -/** - * Random float from low to high interval. - */ -export function randFloat(low: number, high: number): number; - -/** - * Random float from - range / 2 to range / 2 interval. - */ -export function randFloatSpread(range: number): number; - -/** - * Deterministic pseudo-random float in the interval [ 0, 1 ]. - */ -export function seededRandom(seed?: number): number; - -export function degToRad(degrees: number): number; - -export function radToDeg(radians: number): number; - -export function isPowerOfTwo(value: number): boolean; - -export function ceilPowerOfTwo(value: number): number; - -export function floorPowerOfTwo(value: number): number; - -export function setQuaternionFromProperEuler(q: Quaternion, a: number, b: number, c: number, order: string): void; - -export function denormalize(value: number, array: Float32Array | Uint32Array | Uint16Array | Uint8Array | Int32Array | Int16Array | Int8Array): number; - -export function normalize(value: number, array: Float32Array | Uint32Array | Uint16Array | Uint8Array | Int32Array | Int16Array | Int8Array): number; - -export const MathUtils: { - DEG2RAD: typeof DEG2RAD; - RAD2DEG: typeof RAD2DEG; - generateUUID: typeof generateUUID; - clamp: typeof clamp; - euclideanModulo: typeof euclideanModulo; - mapLinear: typeof mapLinear; - inverseLerp: typeof inverseLerp; - lerp: typeof lerp; - damp: typeof damp; - pingpong: typeof pingpong; - smoothstep: typeof smoothstep; - smootherstep: typeof smootherstep; - randInt: typeof randInt; - randFloat: typeof randFloat; - randFloatSpread: typeof randFloatSpread; - seededRandom: typeof seededRandom; - degToRad: typeof degToRad; - radToDeg: typeof radToDeg; - isPowerOfTwo: typeof isPowerOfTwo; - ceilPowerOfTwo: typeof ceilPowerOfTwo; - floorPowerOfTwo: typeof floorPowerOfTwo; - setQuaternionFromProperEuler: typeof setQuaternionFromProperEuler; - normalize: typeof normalize; - denormalize: typeof denormalize; -}; diff --git a/packages/canvas-three/three/src/math/Matrix2.d.ts b/packages/canvas-three/three/src/math/Matrix2.d.ts deleted file mode 100644 index 7e9e23707..000000000 --- a/packages/canvas-three/three/src/math/Matrix2.d.ts +++ /dev/null @@ -1,48 +0,0 @@ -export type Matrix2Tuple = [n11: number, n12: number, n21: number, n22: number]; - -/** - * A class representing a 2x2 {@link https://en.wikipedia.org/wiki/Matrix_(mathematics) matrix}. - * - * @example - * const m = new Matrix2(); - */ -export class Matrix2 { - readonly isMatrix2: true; - - /** - * A {@link https://en.wikipedia.org/wiki/Row-_and_column-major_order column-major} list of matrix values. - */ - elements: Matrix2Tuple; - - /** - * Creates a 2x2 {@link https://en.wikipedia.org/wiki/Identity_matrix identity matrix}. - */ - constructor(); - - /** - * Creates a 2x2 matrix with the given arguments in row-major order. - */ - constructor(n11: number, n12: number, n21: number, n22: number); - - /** - * Resets this matrix to the 2x2 identity matrix: - */ - identity(): this; - - /** - * Sets the elements of this matrix based on an array in - * {@link https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order column-major} format. - * - * @param array the array to read the elements from - * @param offset (optional) index of first element in the array. Default is `0`. - */ - fromArray(array: ArrayLike, offset?: number): this; - - /** - * Sets the 2x2 matrix values to the given - * {@link https://en.wikipedia.org/wiki/Row-_and_column-major_order row-major} sequence of values: - * [n11, n12, - * n21, n22] - */ - set(n11: number, n12: number, n21: number, n22: number): this; -} diff --git a/packages/canvas-three/three/src/math/Matrix3.d.ts b/packages/canvas-three/three/src/math/Matrix3.d.ts deleted file mode 100644 index 85ceb6a3d..000000000 --- a/packages/canvas-three/three/src/math/Matrix3.d.ts +++ /dev/null @@ -1,154 +0,0 @@ -// https://threejs.org/docs/#api/en/math/Matrix3 - -import { Matrix4 } from './Matrix4.js'; -import { Vector2 } from './Vector2.js'; -import { Vector3 } from './Vector3.js'; - -export type Matrix3Tuple = [n11: number, n12: number, n13: number, n21: number, n22: number, n23: number, n31: number, n32: number, n33: number]; - -export class Matrix3 { - readonly isMatrix3: true; - - /** - * Array with matrix values. - * @default [1, 0, 0, 0, 1, 0, 0, 0, 1] - */ - elements: Matrix3Tuple; - - /** - * Creates an identity matrix. - */ - constructor(); - /** - * Creates a 3x3 matrix with the given arguments in row-major order. - */ - constructor(n11: number, n12: number, n13: number, n21: number, n22: number, n23: number, n31: number, n32: number, n33: number); - - set(n11: number, n12: number, n13: number, n21: number, n22: number, n23: number, n31: number, n32: number, n33: number): Matrix3; - - identity(): this; - - copy(m: Matrix3): this; - - extractBasis(xAxis: Vector3, yAxis: Vector3, zAxis: Vector3): this; - - setFromMatrix4(m: Matrix4): Matrix3; - - /** - * Multiplies this matrix by m. - */ - multiply(m: Matrix3): this; - - premultiply(m: Matrix3): this; - - /** - * Sets this matrix to a x b. - */ - multiplyMatrices(a: Matrix3, b: Matrix3): this; - - multiplyScalar(s: number): this; - - determinant(): number; - - /** - * Inverts this matrix in place. - */ - invert(): this; - - /** - * Transposes this matrix in place. - */ - transpose(): this; - - getNormalMatrix(matrix4: Matrix4): this; - - /** - * Transposes this matrix into the supplied array r, and returns itself. - */ - transposeIntoArray(r: number[]): this; - - setUvTransform(tx: number, ty: number, sx: number, sy: number, rotation: number, cx: number, cy: number): this; - - scale(sx: number, sy: number): this; - - rotate(theta: number): this; - - translate(tx: number, ty: number): this; - - /** - * Sets this matrix as a 2D translation transform: - * - * ``` - * 1, 0, x, - * 0, 1, y, - * 0, 0, 1 - * ``` - * - * @param v the amount to translate. - */ - makeTranslation(v: Vector2): this; - /** - * Sets this matrix as a 2D translation transform: - * - * ``` - * 1, 0, x, - * 0, 1, y, - * 0, 0, 1 - * ``` - * - * @param x the amount to translate in the X axis. - * @param y the amount to translate in the Y axis. - */ - makeTranslation(x: number, y: number): this; - - /** - * Sets this matrix as a 2D rotational transformation by theta radians. The resulting matrix will be: - * - * ``` - * cos(θ) -sin(θ) 0 - * sin(θ) cos(θ) 0 - * 0 0 1 - * ``` - * - * @param theta Rotation angle in radians. Positive values rotate counterclockwise. - */ - makeRotation(theta: number): this; - - /** - * Sets this matrix as a 2D scale transform: - * - * ``` - * x, 0, 0, - * 0, y, 0, - * 0, 0, 1 - * ``` - * - * @param x the amount to scale in the X axis. - * @param y the amount to scale in the Y axis. - */ - makeScale(x: number, y: number): this; - - equals(matrix: Matrix3): boolean; - - /** - * Sets the values of this matrix from the provided array or array-like. - * @param array the source array or array-like. - * @param offset (optional) offset into the array-like. Default is 0. - */ - fromArray(array: ArrayLike, offset?: number): this; - - /** - * Writes the elements of this matrix to an array in - * {@link https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order column-major} format. - */ - toArray(): Matrix3Tuple; - /** - * Writes the elements of this matrix to an array in - * {@link https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order column-major} format. - * @param array array to store the resulting vector in. If not given a new array will be created. - * @param offset (optional) offset in the array at which to put the result. - */ - toArray>(array: TArray, offset?: number): TArray; - - clone(): this; -} diff --git a/packages/canvas-three/three/src/math/Matrix4.d.ts b/packages/canvas-three/three/src/math/Matrix4.d.ts deleted file mode 100644 index 639f04ab3..000000000 --- a/packages/canvas-three/three/src/math/Matrix4.d.ts +++ /dev/null @@ -1,217 +0,0 @@ -import { CoordinateSystem } from '../constants.js'; -import { Euler } from './Euler.js'; -import { Matrix3 } from './Matrix3.js'; -import { Quaternion } from './Quaternion.js'; -import { Vector3 } from './Vector3.js'; - -export type Matrix4Tuple = [n11: number, n12: number, n13: number, n14: number, n21: number, n22: number, n23: number, n24: number, n31: number, n32: number, n33: number, n34: number, n41: number, n42: number, n43: number, n44: number]; - -/** - * A 4x4 Matrix. - * - * @example - * // Simple rig for rotating around 3 axes - * const m = new THREE.Matrix4(); - * const m1 = new THREE.Matrix4(); - * const m2 = new THREE.Matrix4(); - * const m3 = new THREE.Matrix4(); - * const alpha = 0; - * const beta = Math.PI; - * const gamma = Math.PI/2; - * m1.makeRotationX( alpha ); - * m2.makeRotationY( beta ); - * m3.makeRotationZ( gamma ); - * m.multiplyMatrices( m1, m2 ); - * m.multiply( m3 ); - */ -export class Matrix4 { - readonly isMatrix4: true; - - /** - * Array with matrix values. - * @default [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] - */ - elements: Matrix4Tuple; - - /** - * Creates an identity matrix. - */ - constructor(); - /** - * Creates a 4x4 matrix with the given arguments in row-major order. - */ - constructor(n11: number, n12: number, n13: number, n14: number, n21: number, n22: number, n23: number, n24: number, n31: number, n32: number, n33: number, n34: number, n41: number, n42: number, n43: number, n44: number); - - /** - * Sets all fields of this matrix. - */ - set(n11: number, n12: number, n13: number, n14: number, n21: number, n22: number, n23: number, n24: number, n31: number, n32: number, n33: number, n34: number, n41: number, n42: number, n43: number, n44: number): this; - - /** - * Resets this matrix to identity. - */ - identity(): this; - - clone(): Matrix4; - - copy(m: Matrix4): this; - - copyPosition(m: Matrix4): this; - - /** - * Set the upper 3x3 elements of this matrix to the values of the Matrix3 m. - */ - setFromMatrix3(m: Matrix3): this; - - extractBasis(xAxis: Vector3, yAxis: Vector3, zAxis: Vector3): this; - - makeBasis(xAxis: Vector3, yAxis: Vector3, zAxis: Vector3): this; - - /** - * Copies the rotation component of the supplied matrix m into this matrix rotation component. - */ - extractRotation(m: Matrix4): this; - - makeRotationFromEuler(euler: Euler): this; - - makeRotationFromQuaternion(q: Quaternion): this; - - /** - * Constructs a rotation matrix, looking from eye towards center with defined up vector. - */ - lookAt(eye: Vector3, target: Vector3, up: Vector3): this; - - /** - * Multiplies this matrix by m. - */ - multiply(m: Matrix4): this; - - premultiply(m: Matrix4): this; - - /** - * Sets this matrix to a x b. - */ - multiplyMatrices(a: Matrix4, b: Matrix4): this; - - /** - * Multiplies this matrix by s. - */ - multiplyScalar(s: number): this; - - /** - * Computes determinant of this matrix. - * Based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm - */ - determinant(): number; - - /** - * Transposes this matrix. - */ - transpose(): this; - - /** - * Sets the position component for this matrix from vector v. - */ - setPosition(v: Vector3): this; - setPosition(x: number, y: number, z: number): this; - - /** - * Inverts this matrix. - */ - invert(): this; - - /** - * Multiplies the columns of this matrix by vector v. - */ - scale(v: Vector3): this; - - getMaxScaleOnAxis(): number; - - /** - * Sets this matrix as translation transform. - */ - makeTranslation(v: Vector3): this; - makeTranslation(x: number, y: number, z: number): this; - - /** - * Sets this matrix as rotation transform around x axis by theta radians. - * - * @param theta Rotation angle in radians. - */ - makeRotationX(theta: number): this; - - /** - * Sets this matrix as rotation transform around y axis by theta radians. - * - * @param theta Rotation angle in radians. - */ - makeRotationY(theta: number): this; - - /** - * Sets this matrix as rotation transform around z axis by theta radians. - * - * @param theta Rotation angle in radians. - */ - makeRotationZ(theta: number): this; - - /** - * Sets this matrix as rotation transform around axis by angle radians. - * Based on http://www.gamedev.net/reference/articles/article1199.asp. - * - * @param axis Rotation axis. - * @param angle Rotation angle in radians. - */ - makeRotationAxis(axis: Vector3, angle: number): this; - - /** - * Sets this matrix as scale transform. - */ - makeScale(x: number, y: number, z: number): this; - - /** - * Sets this matrix as shear transform. - */ - makeShear(xy: number, xz: number, yx: number, yz: number, zx: number, zy: number): this; - - /** - * Sets this matrix to the transformation composed of translation, rotation and scale. - */ - compose(position: Vector3, quaternion: Quaternion, scale: Vector3): this; - - /** - * Decomposes this matrix into it's position, quaternion and scale components. - */ - decompose(position: Vector3, quaternion: Quaternion, scale: Vector3): this; - - /** - * Creates a perspective projection matrix. - */ - makePerspective(left: number, right: number, top: number, bottom: number, near: number, far: number, coordinateSystem?: CoordinateSystem): this; - - /** - * Creates an orthographic projection matrix. - */ - makeOrthographic(left: number, right: number, top: number, bottom: number, near: number, far: number, coordinateSystem?: CoordinateSystem): this; - - equals(matrix: Matrix4): boolean; - - /** - * Sets the values of this matrix from the provided array or array-like. - * @param array the source array or array-like. - * @param offset (optional) offset into the array-like. Default is 0. - */ - fromArray(array: ArrayLike, offset?: number): this; - - /** - * Writes the elements of this matrix to an array in - * {@link https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order column-major} format. - */ - toArray(): Matrix4Tuple; - /** - * Writes the elements of this matrix to an array in - * {@link https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order column-major} format. - * @param array array to store the resulting vector in. - * @param offset (optional) offset in the array at which to put the result. - */ - toArray>(array: TArray, offset?: number): TArray; -} diff --git a/packages/canvas-three/three/src/math/Plane.d.ts b/packages/canvas-three/three/src/math/Plane.d.ts deleted file mode 100644 index 4683dfb0e..000000000 --- a/packages/canvas-three/three/src/math/Plane.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Box3 } from './Box3.js'; -import { Line3 } from './Line3.js'; -import { Matrix3 } from './Matrix3.js'; -import { Matrix4 } from './Matrix4.js'; -import { Sphere } from './Sphere.js'; -import { Vector3 } from './Vector3.js'; - -export class Plane { - constructor(normal?: Vector3, constant?: number); - - /** - * @default new THREE.Vector3( 1, 0, 0 ) - */ - normal: Vector3; - - /** - * @default 0 - */ - constant: number; - - readonly isPlane: true; - - set(normal: Vector3, constant: number): Plane; - setComponents(x: number, y: number, z: number, w: number): Plane; - setFromNormalAndCoplanarPoint(normal: Vector3, point: Vector3): Plane; - setFromCoplanarPoints(a: Vector3, b: Vector3, c: Vector3): Plane; - clone(): this; - copy(plane: Plane): this; - normalize(): Plane; - negate(): Plane; - distanceToPoint(point: Vector3): number; - distanceToSphere(sphere: Sphere): number; - projectPoint(point: Vector3, target: Vector3): Vector3; - intersectLine(line: Line3, target: Vector3): Vector3 | null; - intersectsLine(line: Line3): boolean; - intersectsBox(box: Box3): boolean; - intersectsSphere(sphere: Sphere): boolean; - coplanarPoint(target: Vector3): Vector3; - applyMatrix4(matrix: Matrix4, optionalNormalMatrix?: Matrix3): Plane; - translate(offset: Vector3): Plane; - equals(plane: Plane): boolean; - - /** - * @deprecated Use {@link Plane#intersectsLine .intersectsLine()} instead. - */ - isIntersectionLine(l: any): any; -} diff --git a/packages/canvas-three/three/src/math/Quaternion.d.ts b/packages/canvas-three/three/src/math/Quaternion.d.ts deleted file mode 100644 index 6c80db67b..000000000 --- a/packages/canvas-three/three/src/math/Quaternion.d.ts +++ /dev/null @@ -1,173 +0,0 @@ -import { BufferAttribute } from '../core/BufferAttribute.js'; -import { InterleavedBufferAttribute } from '../core/InterleavedBufferAttribute.js'; -import { Euler } from './Euler.js'; -import { Matrix4 } from './Matrix4.js'; -import { Vector3, Vector3Like } from './Vector3.js'; - -export interface QuaternionLike { - readonly x: number; - readonly y: number; - readonly z: number; - readonly w: number; -} - -export type QuaternionTuple = [x: number, y: number, z: number, w: number]; - -/** - * Implementation of a quaternion. This is used for rotating things without incurring in the dreaded gimbal lock issue, amongst other advantages. - * - * @example - * const quaternion = new THREE.Quaternion(); - * quaternion.setFromAxisAngle( new THREE.Vector3( 0, 1, 0 ), Math.PI / 2 ); - * const vector = new THREE.Vector3( 1, 0, 0 ); - * vector.applyQuaternion( quaternion ); - */ -export class Quaternion { - /** - * @param x x coordinate - * @param y y coordinate - * @param z z coordinate - * @param w w coordinate - */ - constructor(x?: number, y?: number, z?: number, w?: number); - - /** - * @default 0 - */ - x: number; - - /** - * @default 0 - */ - y: number; - - /** - * @default 0 - */ - z: number; - - /** - * @default 1 - */ - w: number; - readonly isQuaternion: true; - - /** - * Sets values of this quaternion. - */ - set(x: number, y: number, z: number, w: number): this; - - /** - * Clones this quaternion. - */ - clone(): this; - - /** - * Copies values of q to this quaternion. - */ - copy(q: QuaternionLike): this; - - /** - * Sets this quaternion from rotation specified by Euler angles. - */ - setFromEuler(euler: Euler, update?: boolean): this; - - /** - * Sets this quaternion from rotation specified by axis and angle. - * Adapted from http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm. - * Axis have to be normalized, angle is in radians. - */ - setFromAxisAngle(axis: Vector3Like, angle: number): this; - - /** - * Sets this quaternion from rotation component of m. Adapted from http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm. - */ - setFromRotationMatrix(m: Matrix4): this; - setFromUnitVectors(vFrom: Vector3, vTo: Vector3Like): this; - angleTo(q: Quaternion): number; - rotateTowards(q: Quaternion, step: number): this; - - identity(): this; - - /** - * Inverts this quaternion. - */ - invert(): this; - - conjugate(): this; - dot(v: Quaternion): number; - lengthSq(): number; - - /** - * Computes length of this quaternion. - */ - length(): number; - - /** - * Normalizes this quaternion. - */ - normalize(): this; - - /** - * Multiplies this quaternion by b. - */ - multiply(q: Quaternion): this; - premultiply(q: Quaternion): this; - - /** - * Sets this quaternion to a x b - * Adapted from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm. - */ - multiplyQuaternions(a: Quaternion, b: Quaternion): this; - - slerp(qb: Quaternion, t: number): this; - slerpQuaternions(qa: Quaternion, qb: Quaternion, t: number): this; - equals(v: Quaternion): boolean; - - /** - * Sets this quaternion's x, y, z and w value from the provided array or array-like. - * @param array the source array or array-like. - * @param offset (optional) offset into the array. Default is 0. - */ - fromArray(array: QuaternionTuple, offset?: number): this; - - /** - * Returns an array [x, y, z, w], or copies x, y, z and w into the provided array. - * @param array (optional) array to store the quaternion to. If this is not provided, a new array will be created. - * @param offset (optional) optional offset into the array. - * @return The created or provided array. - */ - toArray(array?: number[], offset?: number): QuaternionTuple; - - /** - * Copies x, y, z and w into the provided array-like. - * @param array array-like to store the quaternion to. - * @param offset (optional) optional offset into the array. - * @return The provided array-like. - */ - toArray(array: ArrayLike, offset?: number): QuaternionTuple; - - /** - * This method defines the serialization result of Quaternion. - * @return The numerical elements of this quaternion in an array of format [x, y, z, w]. - */ - toJSON(): [number, number, number, number]; - - /** - * Sets x, y, z, w properties of this quaternion from the attribute. - * @param attribute the source attribute. - * @param index index in the attribute. - */ - fromBufferAttribute(attribute: BufferAttribute | InterleavedBufferAttribute, index: number): this; - - _onChange(callback: () => void): this; - _onChangeCallback: () => void; - - static slerpFlat(dst: number[], dstOffset: number, src0: number[], srcOffset: number, src1: number[], stcOffset1: number, t: number): void; - - static multiplyQuaternionsFlat(dst: number[], dstOffset: number, src0: number[], srcOffset: number, src1: number[], stcOffset1: number): number[]; - - random(): this; - - [Symbol.iterator](): Generator; -} diff --git a/packages/canvas-three/three/src/math/Ray.d.ts b/packages/canvas-three/three/src/math/Ray.d.ts deleted file mode 100644 index 485ddf2e9..000000000 --- a/packages/canvas-three/three/src/math/Ray.d.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Box3 } from './Box3.js'; -import { Matrix4 } from './Matrix4.js'; -import { Plane } from './Plane.js'; -import { Sphere } from './Sphere.js'; -import { Vector3 } from './Vector3.js'; - -export class Ray { - constructor(origin?: Vector3, direction?: Vector3); - - /** - * @default new THREE.Vector3() - */ - origin: Vector3; - - /** - * @default new THREE.Vector3( 0, 0, - 1 ) - */ - direction: Vector3; - - set(origin: Vector3, direction: Vector3): Ray; - clone(): this; - copy(ray: Ray): this; - at(t: number, target: Vector3): Vector3; - lookAt(v: Vector3): Ray; - recast(t: number): Ray; - closestPointToPoint(point: Vector3, target: Vector3): Vector3; - distanceToPoint(point: Vector3): number; - distanceSqToPoint(point: Vector3): number; - distanceSqToSegment(v0: Vector3, v1: Vector3, optionalPointOnRay?: Vector3, optionalPointOnSegment?: Vector3): number; - intersectSphere(sphere: Sphere, target: Vector3): Vector3 | null; - intersectsSphere(sphere: Sphere): boolean; - distanceToPlane(plane: Plane): number; - intersectPlane(plane: Plane, target: Vector3): Vector3 | null; - intersectsPlane(plane: Plane): boolean; - intersectBox(box: Box3, target: Vector3): Vector3 | null; - intersectsBox(box: Box3): boolean; - intersectTriangle(a: Vector3, b: Vector3, c: Vector3, backfaceCulling: boolean, target: Vector3): Vector3 | null; - applyMatrix4(matrix4: Matrix4): Ray; - equals(ray: Ray): boolean; - - /** - * @deprecated Use {@link Ray#intersectsBox .intersectsBox()} instead. - */ - isIntersectionBox(b: any): any; - - /** - * @deprecated Use {@link Ray#intersectsPlane .intersectsPlane()} instead. - */ - isIntersectionPlane(p: any): any; - - /** - * @deprecated Use {@link Ray#intersectsSphere .intersectsSphere()} instead. - */ - isIntersectionSphere(s: any): any; -} diff --git a/packages/canvas-three/three/src/math/Sphere.d.ts b/packages/canvas-three/three/src/math/Sphere.d.ts deleted file mode 100644 index e8eba027c..000000000 --- a/packages/canvas-three/three/src/math/Sphere.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Box3 } from './Box3.js'; -import { Matrix4 } from './Matrix4.js'; -import { Plane } from './Plane.js'; -import { Vector3 } from './Vector3.js'; - -export class Sphere { - constructor(center?: Vector3, radius?: number); - - /** - * Read-only flag to check if a given object is of type {@link Sphere}. - */ - readonly isSphere: true; - - /** - * @default new Vector3() - */ - center: Vector3; - - /** - * @default 1 - */ - radius: number; - - set(center: Vector3, radius: number): Sphere; - setFromPoints(points: Vector3[], optionalCenter?: Vector3): Sphere; - clone(): this; - copy(sphere: Sphere): this; - expandByPoint(point: Vector3): this; - isEmpty(): boolean; - makeEmpty(): this; - containsPoint(point: Vector3): boolean; - distanceToPoint(point: Vector3): number; - intersectsSphere(sphere: Sphere): boolean; - intersectsBox(box: Box3): boolean; - intersectsPlane(plane: Plane): boolean; - clampPoint(point: Vector3, target: Vector3): Vector3; - getBoundingBox(target: Box3): Box3; - applyMatrix4(matrix: Matrix4): Sphere; - translate(offset: Vector3): Sphere; - equals(sphere: Sphere): boolean; - union(sphere: Sphere): this; - - /** - * @deprecated Use {@link Sphere#isEmpty .isEmpty()} instead. - */ - empty(): any; -} diff --git a/packages/canvas-three/three/src/math/Spherical.d.ts b/packages/canvas-three/three/src/math/Spherical.d.ts deleted file mode 100644 index fbaf60a59..000000000 --- a/packages/canvas-three/three/src/math/Spherical.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Vector3 } from './Vector3.js'; - -export class Spherical { - constructor(radius?: number, phi?: number, theta?: number); - - /** - * @default 1 - */ - radius: number; - - /** - * @default 0 - */ - phi: number; - - /** - * @default 0 - */ - theta: number; - - set(radius: number, phi: number, theta: number): this; - clone(): this; - copy(other: Spherical): this; - makeSafe(): this; - setFromVector3(v: Vector3): this; - setFromCartesianCoords(x: number, y: number, z: number): this; -} diff --git a/packages/canvas-three/three/src/math/SphericalHarmonics3.d.ts b/packages/canvas-three/three/src/math/SphericalHarmonics3.d.ts deleted file mode 100644 index 9350fd18a..000000000 --- a/packages/canvas-three/three/src/math/SphericalHarmonics3.d.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Vector3 } from './Vector3.js'; - -export class SphericalHarmonics3 { - constructor(); - - /** - * @default [new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), - * new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3()] - */ - coefficients: Vector3[]; - readonly isSphericalHarmonics3: true; - - set(coefficients: Vector3[]): SphericalHarmonics3; - zero(): SphericalHarmonics3; - add(sh: SphericalHarmonics3): SphericalHarmonics3; - addScaledSH(sh: SphericalHarmonics3, s: number): SphericalHarmonics3; - scale(s: number): SphericalHarmonics3; - lerp(sh: SphericalHarmonics3, alpha: number): SphericalHarmonics3; - equals(sh: SphericalHarmonics3): boolean; - copy(sh: SphericalHarmonics3): SphericalHarmonics3; - clone(): this; - - /** - * Sets the values of this spherical harmonics from the provided array or array-like. - * @param array the source array or array-like. - * @param offset (optional) offset into the array. Default is 0. - */ - fromArray(array: number[] | ArrayLike, offset?: number): this; - - /** - * Returns an array with the values of this spherical harmonics, or copies them into the provided array. - * @param array (optional) array to store the spherical harmonics to. If this is not provided, a new array will be created. - * @param offset (optional) optional offset into the array. - * @return The created or provided array. - */ - toArray(array?: number[], offset?: number): number[]; - - /** - * Returns an array with the values of this spherical harmonics, or copies them into the provided array-like. - * @param array array-like to store the spherical harmonics to. - * @param offset (optional) optional offset into the array-like. - * @return The provided array-like. - */ - toArray(array: ArrayLike, offset?: number): ArrayLike; - - getAt(normal: Vector3, target: Vector3): Vector3; - getIrradianceAt(normal: Vector3, target: Vector3): Vector3; - - static getBasisAt(normal: Vector3, shBasis: number[]): void; -} diff --git a/packages/canvas-three/three/src/math/Triangle.d.ts b/packages/canvas-three/three/src/math/Triangle.d.ts deleted file mode 100644 index 153660479..000000000 --- a/packages/canvas-three/three/src/math/Triangle.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Box3 } from './Box3.js'; -import { Plane } from './Plane.js'; -import { Vector2 } from './Vector2.js'; -import { Vector3 } from './Vector3.js'; -import { Vector4 } from './Vector4.js'; - -import { BufferAttribute } from '../core/BufferAttribute.js'; -import { InterleavedBufferAttribute } from '../core/InterleavedBufferAttribute.js'; - -export class Triangle { - constructor(a?: Vector3, b?: Vector3, c?: Vector3); - - /** - * @default new THREE.Vector3() - */ - a: Vector3; - - /** - * @default new THREE.Vector3() - */ - b: Vector3; - - /** - * @default new THREE.Vector3() - */ - c: Vector3; - - set(a: Vector3, b: Vector3, c: Vector3): Triangle; - setFromPointsAndIndices(points: Vector3[], i0: number, i1: number, i2: number): this; - setFromAttributeAndIndices(attribute: BufferAttribute | InterleavedBufferAttribute, i0: number, i1: number, i2: number): this; - clone(): this; - copy(triangle: Triangle): this; - getArea(): number; - getMidpoint(target: Vector3): Vector3; - getNormal(target: Vector3): Vector3; - getPlane(target: Plane): Plane; - getBarycoord(point: Vector3, target: Vector3): Vector3 | null; - getInterpolation(point: Vector3, v1: Vector2, v2: Vector2, v3: Vector2, target: Vector2): Vector2 | null; - getInterpolation(point: Vector3, v1: Vector3, v2: Vector3, v3: Vector3, target: Vector3): Vector3 | null; - getInterpolation(point: Vector3, v1: Vector4, v2: Vector4, v3: Vector4, target: Vector4): Vector4 | null; - containsPoint(point: Vector3): boolean; - intersectsBox(box: Box3): boolean; - isFrontFacing(direction: Vector3): boolean; - closestPointToPoint(point: Vector3, target: Vector3): Vector3; - equals(triangle: Triangle): boolean; - - static getNormal(a: Vector3, b: Vector3, c: Vector3, target: Vector3): Vector3; - static getBarycoord(point: Vector3, a: Vector3, b: Vector3, c: Vector3, target: Vector3): Vector3 | null; - static containsPoint(point: Vector3, a: Vector3, b: Vector3, c: Vector3): boolean; - static getInterpolation(point: Vector3, p1: Vector3, p2: Vector3, p3: Vector3, v1: Vector2, v2: Vector2, v3: Vector2, target: Vector2): Vector2 | null; - static getInterpolation(point: Vector3, p1: Vector3, p2: Vector3, p3: Vector3, v1: Vector3, v2: Vector3, v3: Vector3, target: Vector3): Vector3 | null; - static getInterpolation(point: Vector3, p1: Vector3, p2: Vector3, p3: Vector3, v1: Vector4, v2: Vector4, v3: Vector4, target: Vector4): Vector4 | null; - static isFrontFacing(a: Vector3, b: Vector3, c: Vector3, direction: Vector3): boolean; -} diff --git a/packages/canvas-three/three/src/math/Vector2.d.ts b/packages/canvas-three/three/src/math/Vector2.d.ts deleted file mode 100644 index dfdeb465b..000000000 --- a/packages/canvas-three/three/src/math/Vector2.d.ts +++ /dev/null @@ -1,321 +0,0 @@ -import { BufferAttribute } from '../core/BufferAttribute.js'; -import { Matrix3 } from './Matrix3.js'; - -export type Vector2Tuple = [x: number, y: number]; - -export interface Vector2Like { - readonly x: number; - readonly y: number; -} - -/** - * 2D vector. - */ -export class Vector2 { - constructor(x?: number, y?: number); - - /** - * @default 0 - */ - x: number; - - /** - * @default 0 - */ - y: number; - width: number; - height: number; - readonly isVector2: true; - - /** - * Sets value of this vector. - */ - set(x: number, y: number): this; - - /** - * Sets the x and y values of this vector both equal to scalar. - */ - setScalar(scalar: number): this; - - /** - * Sets X component of this vector. - */ - setX(x: number): this; - - /** - * Sets Y component of this vector. - */ - setY(y: number): this; - - /** - * Sets a component of this vector. - */ - setComponent(index: number, value: number): this; - - /** - * Gets a component of this vector. - */ - getComponent(index: number): number; - - /** - * Returns a new Vector2 instance with the same `x` and `y` values. - */ - clone(): this; - - /** - * Copies value of v to this vector. - */ - copy(v: Vector2Like): this; - - /** - * Adds v to this vector. - */ - add(v: Vector2Like): this; - - /** - * Adds the scalar value s to this vector's x and y values. - */ - addScalar(s: number): this; - - /** - * Sets this vector to a + b. - */ - addVectors(a: Vector2Like, b: Vector2Like): this; - - /** - * Adds the multiple of v and s to this vector. - */ - addScaledVector(v: Vector2Like, s: number): this; - - /** - * Subtracts v from this vector. - */ - sub(v: Vector2Like): this; - - /** - * Subtracts s from this vector's x and y components. - */ - subScalar(s: number): this; - - /** - * Sets this vector to a - b. - */ - subVectors(a: Vector2Like, b: Vector2Like): this; - - /** - * Multiplies this vector by v. - */ - multiply(v: Vector2Like): this; - - /** - * Multiplies this vector by scalar s. - */ - multiplyScalar(scalar: number): this; - - /** - * Divides this vector by v. - */ - divide(v: Vector2Like): this; - - /** - * Divides this vector by scalar s. - * Set vector to ( 0, 0 ) if s == 0. - */ - divideScalar(s: number): this; - - /** - * Multiplies this vector (with an implicit 1 as the 3rd component) by m. - */ - applyMatrix3(m: Matrix3): this; - - /** - * If this vector's x or y value is greater than v's x or y value, replace that value with the corresponding min value. - */ - min(v: Vector2Like): this; - - /** - * If this vector's x or y value is less than v's x or y value, replace that value with the corresponding max value. - */ - max(v: Vector2Like): this; - - /** - * If this vector's x or y value is greater than the max vector's x or y value, it is replaced by the corresponding value. - * If this vector's x or y value is less than the min vector's x or y value, it is replaced by the corresponding value. - * @param min the minimum x and y values. - * @param max the maximum x and y values in the desired range. - */ - clamp(min: Vector2Like, max: Vector2Like): this; - - /** - * If this vector's x or y values are greater than the max value, they are replaced by the max value. - * If this vector's x or y values are less than the min value, they are replaced by the min value. - * @param min the minimum value the components will be clamped to. - * @param max the maximum value the components will be clamped to. - */ - clampScalar(min: number, max: number): this; - - /** - * If this vector's length is greater than the max value, it is replaced by the max value. - * If this vector's length is less than the min value, it is replaced by the min value. - * @param min the minimum value the length will be clamped to. - * @param max the maximum value the length will be clamped to. - */ - clampLength(min: number, max: number): this; - - /** - * The components of the vector are rounded down to the nearest integer value. - */ - floor(): this; - - /** - * The x and y components of the vector are rounded up to the nearest integer value. - */ - ceil(): this; - - /** - * The components of the vector are rounded to the nearest integer value. - */ - round(): this; - - /** - * The components of the vector are rounded towards zero (up if negative, down if positive) to an integer value. - */ - roundToZero(): this; - - /** - * Inverts this vector. - */ - negate(): this; - - /** - * Computes dot product of this vector and v. - */ - dot(v: Vector2Like): number; - - /** - * Computes cross product of this vector and v. - */ - cross(v: Vector2Like): number; - - /** - * Computes squared length of this vector. - */ - lengthSq(): number; - - /** - * Computes length of this vector. - */ - length(): number; - - /** - * Computes the Manhattan length of this vector. - * - * see {@link http://en.wikipedia.org/wiki/Taxicab_geometry|Wikipedia: Taxicab Geometry} - */ - manhattanLength(): number; - - /** - * Normalizes this vector. - */ - normalize(): this; - - /** - * computes the angle in radians with respect to the positive x-axis - */ - angle(): number; - - /** - * Returns the angle between this vector and vector {@link Vector2 | v} in radians. - */ - angleTo(v: Vector2): number; - - /** - * Computes distance of this vector to v. - */ - distanceTo(v: Vector2Like): number; - - /** - * Computes squared distance of this vector to v. - */ - distanceToSquared(v: Vector2Like): number; - - /** - * Computes the Manhattan length (distance) from this vector to the given vector v - * - * see {@link http://en.wikipedia.org/wiki/Taxicab_geometry|Wikipedia: Taxicab Geometry} - */ - manhattanDistanceTo(v: Vector2Like): number; - - /** - * Normalizes this vector and multiplies it by l. - */ - setLength(length: number): this; - - /** - * Linearly interpolates between this vector and v, where alpha is the distance along the line - alpha = 0 will be this vector, and alpha = 1 will be v. - * @param v vector to interpolate towards. - * @param alpha interpolation factor in the closed interval [0, 1]. - */ - lerp(v: Vector2Like, alpha: number): this; - - /** - * Sets this vector to be the vector linearly interpolated between v1 and v2 where alpha is the distance along the line connecting the two vectors - alpha = 0 will be v1, and alpha = 1 will be v2. - * @param v1 the starting vector. - * @param v2 vector to interpolate towards. - * @param alpha interpolation factor in the closed interval [0, 1]. - */ - lerpVectors(v1: Vector2Like, v2: Vector2Like, alpha: number): this; - - /** - * Checks for strict equality of this vector and v. - */ - equals(v: Vector2Like): boolean; - - /** - * Sets this vector's x and y value from the provided array or array-like. - * @param array the source array or array-like. - * @param offset (optional) offset into the array. Default is 0. - */ - fromArray(array: number[] | ArrayLike, offset?: number): this; - - /** - * Returns an array [x, y], or copies x and y into the provided array. - * @param array (optional) array to store the vector to. If this is not provided, a new array will be created. - * @param offset (optional) optional offset into the array. - * @return The created or provided array. - */ - toArray(array?: number[], offset?: number): number[]; - toArray(array?: Vector2Tuple, offset?: 0): Vector2Tuple; - - /** - * Copies x and y into the provided array-like. - * @param array array-like to store the vector to. - * @param offset (optional) optional offset into the array. - * @return The provided array-like. - */ - toArray(array: ArrayLike, offset?: number): ArrayLike; - - /** - * Sets this vector's x and y values from the attribute. - * @param attribute the source attribute. - * @param index index in the attribute. - */ - fromBufferAttribute(attribute: BufferAttribute, index: number): this; - - /** - * Rotates the vector around center by angle radians. - * @param center the point around which to rotate. - * @param angle the angle to rotate, in radians. - */ - rotateAround(center: Vector2Like, angle: number): this; - - /** - * Sets this vector's x and y from Math.random - */ - random(): this; - - /** - * Iterating through a Vector2 instance will yield its components (x, y) in the corresponding order. - */ - [Symbol.iterator](): Iterator; -} diff --git a/packages/canvas-three/three/src/math/Vector3.d.ts b/packages/canvas-three/three/src/math/Vector3.d.ts deleted file mode 100644 index 327612218..000000000 --- a/packages/canvas-three/three/src/math/Vector3.d.ts +++ /dev/null @@ -1,301 +0,0 @@ -import { Camera } from '../cameras/Camera.js'; -import { BufferAttribute } from '../core/BufferAttribute.js'; -import { InterleavedBufferAttribute } from '../core/InterleavedBufferAttribute.js'; -import { RGB } from './Color.js'; -import { Cylindrical } from './Cylindrical.js'; -import { Euler } from './Euler.js'; -import { Matrix3 } from './Matrix3.js'; -import { Matrix4 } from './Matrix4.js'; -import { QuaternionLike } from './Quaternion.js'; -import { Spherical } from './Spherical.js'; - -export type Vector3Tuple = [number, number, number]; - -export interface Vector3Like { - readonly x: number; - readonly y: number; - readonly z: number; -} - -/** - * 3D vector. - * - * see {@link https://github.com/mrdoob/three.js/blob/master/src/math/Vector3.js} - * - * @example - * const a = new THREE.Vector3( 1, 0, 0 ); - * const b = new THREE.Vector3( 0, 1, 0 ); - * const c = new THREE.Vector3(); - * c.crossVectors( a, b ); - */ -export class Vector3 { - constructor(x?: number, y?: number, z?: number); - - /** - * @default 0 - */ - x: number; - - /** - * @default 0 - */ - y: number; - - /** - * @default 0 - */ - z: number; - readonly isVector3: true; - - /** - * Sets value of this vector. - */ - set(x: number, y: number, z: number): this; - - /** - * Sets all values of this vector. - */ - setScalar(scalar: number): this; - - /** - * Sets x value of this vector. - */ - setX(x: number): this; - - /** - * Sets y value of this vector. - */ - setY(y: number): this; - - /** - * Sets z value of this vector. - */ - setZ(z: number): this; - - setComponent(index: number, value: number): this; - - getComponent(index: number): number; - - /** - * Clones this vector. - */ - clone(): this; - - /** - * Copies value of v to this vector. - */ - copy(v: Vector3Like): this; - - /** - * Adds v to this vector. - */ - add(v: Vector3Like): this; - - addScalar(s: number): this; - - /** - * Sets this vector to a + b. - */ - addVectors(a: Vector3Like, b: Vector3Like): this; - - addScaledVector(v: Vector3, s: number): this; - - /** - * Subtracts v from this vector. - */ - sub(a: Vector3Like): this; - - subScalar(s: number): this; - - /** - * Sets this vector to a - b. - */ - subVectors(a: Vector3Like, b: Vector3Like): this; - - multiply(v: Vector3Like): this; - - /** - * Multiplies this vector by scalar s. - */ - multiplyScalar(s: number): this; - - multiplyVectors(a: Vector3Like, b: Vector3Like): this; - - applyEuler(euler: Euler): this; - - applyAxisAngle(axis: Vector3, angle: number): this; - - applyMatrix3(m: Matrix3): this; - - applyNormalMatrix(m: Matrix3): this; - - applyMatrix4(m: Matrix4): this; - - applyQuaternion(q: QuaternionLike): this; - - project(camera: Camera): this; - - unproject(camera: Camera): this; - - transformDirection(m: Matrix4): this; - - divide(v: Vector3Like): this; - - /** - * Divides this vector by scalar s. - * Set vector to ( 0, 0, 0 ) if s == 0. - */ - divideScalar(s: number): this; - - min(v: Vector3Like): this; - - max(v: Vector3Like): this; - - clamp(min: Vector3Like, max: Vector3Like): this; - - clampScalar(min: number, max: number): this; - - clampLength(min: number, max: number): this; - - floor(): this; - - ceil(): this; - - round(): this; - - roundToZero(): this; - - /** - * Inverts this vector. - */ - negate(): this; - - /** - * Computes dot product of this vector and v. - */ - dot(v: Vector3Like): number; - - /** - * Computes squared length of this vector. - */ - lengthSq(): number; - - /** - * Computes length of this vector. - */ - length(): number; - - /** - * Computes the Manhattan length of this vector. - * - * see {@link http://en.wikipedia.org/wiki/Taxicab_geometry|Wikipedia: Taxicab Geometry} - */ - manhattanLength(): number; - - /** - * Normalizes this vector. - */ - normalize(): this; - - /** - * Normalizes this vector and multiplies it by l. - */ - setLength(l: number): this; - lerp(v: Vector3Like, alpha: number): this; - - lerpVectors(v1: Vector3Like, v2: Vector3Like, alpha: number): this; - - /** - * Sets this vector to cross product of itself and v. - */ - cross(a: Vector3Like): this; - - /** - * Sets this vector to cross product of a and b. - */ - crossVectors(a: Vector3Like, b: Vector3Like): this; - projectOnVector(v: Vector3): this; - projectOnPlane(planeNormal: Vector3): this; - reflect(vector: Vector3Like): this; - angleTo(v: Vector3): number; - - /** - * Computes distance of this vector to v. - */ - distanceTo(v: Vector3Like): number; - - /** - * Computes squared distance of this vector to v. - */ - distanceToSquared(v: Vector3Like): number; - - /** - * Computes the Manhattan length (distance) from this vector to the given vector v - * - * see {@link http://en.wikipedia.org/wiki/Taxicab_geometry|Wikipedia: Taxicab Geometry} - */ - manhattanDistanceTo(v: Vector3Like): number; - - setFromSpherical(s: Spherical): this; - setFromSphericalCoords(r: number, phi: number, theta: number): this; - setFromCylindrical(s: Cylindrical): this; - setFromCylindricalCoords(radius: number, theta: number, y: number): this; - setFromMatrixPosition(m: Matrix4): this; - setFromMatrixScale(m: Matrix4): this; - setFromMatrixColumn(matrix: Matrix4, index: number): this; - setFromMatrix3Column(matrix: Matrix3, index: number): this; - - /** - * Sets this vector's {@link x}, {@link y} and {@link z} components from the x, y, and z components of the specified {@link Euler Euler Angle}. - */ - setFromEuler(e: Euler): this; - - /** - * Sets this vector's {@link x}, {@link y} and {@link z} components from the r, g, and b components of the specified - * {@link Color | color}. - */ - setFromColor(color: RGB): this; - - /** - * Checks for strict equality of this vector and v. - */ - equals(v: Vector3Like): boolean; - - /** - * Sets this vector's x, y and z value from the provided array or array-like. - * @param array the source array or array-like. - * @param offset (optional) offset into the array. Default is 0. - */ - fromArray(array: number[] | ArrayLike, offset?: number): this; - - /** - * Returns an array [x, y, z], or copies x, y and z into the provided array. - * @param array (optional) array to store the vector to. If this is not provided, a new array will be created. - * @param offset (optional) optional offset into the array. - * @return The created or provided array. - */ - toArray(array?: number[], offset?: number): number[]; - toArray(array?: Vector3Tuple, offset?: 0): Vector3Tuple; - - /** - * Copies x, y and z into the provided array-like. - * @param array array-like to store the vector to. - * @param offset (optional) optional offset into the array-like. - * @return The provided array-like. - */ - toArray(array: ArrayLike, offset?: number): ArrayLike; - - fromBufferAttribute(attribute: BufferAttribute | InterleavedBufferAttribute, index: number): this; - - /** - * Sets this vector's x, y and z from Math.random - */ - random(): this; - - randomDirection(): this; - - /** - * Iterating through a Vector3 instance will yield its components (x, y, z) in the corresponding order. - */ - [Symbol.iterator](): Iterator; -} diff --git a/packages/canvas-three/three/src/math/Vector4.d.ts b/packages/canvas-three/three/src/math/Vector4.d.ts deleted file mode 100644 index 862362740..000000000 --- a/packages/canvas-three/three/src/math/Vector4.d.ts +++ /dev/null @@ -1,239 +0,0 @@ -import { BufferAttribute } from '../core/BufferAttribute.js'; -import { Matrix4 } from './Matrix4.js'; -import { QuaternionLike } from './Quaternion.js'; - -export type Vector4Tuple = [number, number, number, number]; - -export interface Vector4Like { - readonly x: number; - readonly y: number; - readonly z: number; - readonly w: number; -} - -/** - * 4D vector. - */ -export class Vector4 { - constructor(x?: number, y?: number, z?: number, w?: number); - - /** - * @default 0 - */ - x: number; - - /** - * @default 0 - */ - y: number; - - /** - * @default 0 - */ - z: number; - - /** - * @default 0 - */ - w: number; - - width: number; - height: number; - readonly isVector4: true; - - /** - * Sets value of this vector. - */ - set(x: number, y: number, z: number, w: number): this; - - /** - * Sets all values of this vector. - */ - setScalar(scalar: number): this; - - /** - * Sets X component of this vector. - */ - setX(x: number): this; - - /** - * Sets Y component of this vector. - */ - setY(y: number): this; - - /** - * Sets Z component of this vector. - */ - setZ(z: number): this; - - /** - * Sets w component of this vector. - */ - setW(w: number): this; - - setComponent(index: number, value: number): this; - - getComponent(index: number): number; - - /** - * Clones this vector. - */ - clone(): this; - - /** - * Copies value of v to this vector. - */ - copy(v: Vector4Like): this; - - /** - * Adds v to this vector. - */ - add(v: Vector4Like): this; - - addScalar(scalar: number): this; - - /** - * Sets this vector to a + b. - */ - addVectors(a: Vector4Like, b: Vector4Like): this; - - addScaledVector(v: Vector4Like, s: number): this; - /** - * Subtracts v from this vector. - */ - sub(v: Vector4Like): this; - - subScalar(s: number): this; - - /** - * Sets this vector to a - b. - */ - subVectors(a: Vector4Like, b: Vector4Like): this; - - multiply(v: Vector4Like): this; - - /** - * Multiplies this vector by scalar s. - */ - multiplyScalar(s: number): this; - - applyMatrix4(m: Matrix4): this; - - /** - * Divides this vector by scalar s. - * Set vector to ( 0, 0, 0 ) if s == 0. - */ - divideScalar(s: number): this; - - /** - * http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm - * @param q is assumed to be normalized - */ - setAxisAngleFromQuaternion(q: QuaternionLike): this; - - /** - * http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm - * @param m assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) - */ - setAxisAngleFromRotationMatrix(m: Matrix4): this; - - /** - * Sets this vector to the position elements of the - * [transformation matrix]{@link https://en.wikipedia.org/wiki/Transformation_matrix} m. - */ - setFromMatrixPosition(m: Matrix4): this; - - min(v: Vector4Like): this; - max(v: Vector4Like): this; - clamp(min: Vector4Like, max: Vector4Like): this; - clampScalar(min: number, max: number): this; - floor(): this; - ceil(): this; - round(): this; - roundToZero(): this; - - /** - * Inverts this vector. - */ - negate(): this; - - /** - * Computes dot product of this vector and v. - */ - dot(v: Vector4Like): number; - - /** - * Computes squared length of this vector. - */ - lengthSq(): number; - - /** - * Computes length of this vector. - */ - length(): number; - - /** - * Computes the Manhattan length of this vector. - * - * see {@link http://en.wikipedia.org/wiki/Taxicab_geometry|Wikipedia: Taxicab Geometry} - */ - manhattanLength(): number; - - /** - * Normalizes this vector. - */ - normalize(): this; - - /** - * Normalizes this vector and multiplies it by l. - */ - setLength(length: number): this; - - /** - * Linearly interpolate between this vector and v with alpha factor. - */ - lerp(v: Vector4Like, alpha: number): this; - - lerpVectors(v1: Vector4Like, v2: Vector4Like, alpha: number): this; - - /** - * Checks for strict equality of this vector and v. - */ - equals(v: Vector4Like): boolean; - - /** - * Sets this vector's x, y, z and w value from the provided array or array-like. - * @param array the source array or array-like. - * @param offset (optional) offset into the array. Default is 0. - */ - fromArray(array: number[] | ArrayLike, offset?: number): this; - - /** - * Returns an array [x, y, z, w], or copies x, y, z and w into the provided array. - * @param array (optional) array to store the vector to. If this is not provided, a new array will be created. - * @param offset (optional) optional offset into the array. - * @return The created or provided array. - */ - toArray(array?: number[], offset?: number): number[]; - toArray(array?: Vector4Tuple, offset?: 0): Vector4Tuple; - - /** - * Copies x, y, z and w into the provided array-like. - * @param array array-like to store the vector to. - * @param offset (optional) optional offset into the array-like. - * @return The provided array-like. - */ - toArray(array: ArrayLike, offset?: number): ArrayLike; - - fromBufferAttribute(attribute: BufferAttribute, index: number): this; - - /** - * Sets this vector's x, y, z and w from Math.random - */ - random(): this; - - /** - * Iterating through a Vector4 instance will yield its components (x, y, z, w) in the corresponding order. - */ - [Symbol.iterator](): Iterator; -} diff --git a/packages/canvas-three/three/src/math/interpolants/CubicInterpolant.d.ts b/packages/canvas-three/three/src/math/interpolants/CubicInterpolant.d.ts deleted file mode 100644 index 4960532d6..000000000 --- a/packages/canvas-three/three/src/math/interpolants/CubicInterpolant.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Interpolant } from '../Interpolant.js'; - -export class CubicInterpolant extends Interpolant { - constructor(parameterPositions: any, samplesValues: any, sampleSize: number, resultBuffer?: any); - - interpolate_(i1: number, t0: number, t: number, t1: number): any; -} diff --git a/packages/canvas-three/three/src/math/interpolants/DiscreteInterpolant.d.ts b/packages/canvas-three/three/src/math/interpolants/DiscreteInterpolant.d.ts deleted file mode 100644 index 45b48f333..000000000 --- a/packages/canvas-three/three/src/math/interpolants/DiscreteInterpolant.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Interpolant } from '../Interpolant.js'; - -export class DiscreteInterpolant extends Interpolant { - constructor(parameterPositions: any, samplesValues: any, sampleSize: number, resultBuffer?: any); - - interpolate_(i1: number, t0: number, t: number, t1: number): any; -} diff --git a/packages/canvas-three/three/src/math/interpolants/LinearInterpolant.d.ts b/packages/canvas-three/three/src/math/interpolants/LinearInterpolant.d.ts deleted file mode 100644 index 846e73736..000000000 --- a/packages/canvas-three/three/src/math/interpolants/LinearInterpolant.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Interpolant } from '../Interpolant.js'; - -export class LinearInterpolant extends Interpolant { - constructor(parameterPositions: any, samplesValues: any, sampleSize: number, resultBuffer?: any); - - interpolate_(i1: number, t0: number, t: number, t1: number): any; -} diff --git a/packages/canvas-three/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts b/packages/canvas-three/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts deleted file mode 100644 index b00700ecd..000000000 --- a/packages/canvas-three/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Interpolant } from '../Interpolant.js'; - -export class QuaternionLinearInterpolant extends Interpolant { - constructor(parameterPositions: any, samplesValues: any, sampleSize: number, resultBuffer?: any); - - interpolate_(i1: number, t0: number, t: number, t1: number): any; -} diff --git a/packages/canvas-three/three/src/nodes/Nodes.d.ts b/packages/canvas-three/three/src/nodes/Nodes.d.ts deleted file mode 100644 index 1ddbaf66d..000000000 --- a/packages/canvas-three/three/src/nodes/Nodes.d.ts +++ /dev/null @@ -1,231 +0,0 @@ -// constants -export * from './core/constants.js'; - -// core -export { assign, default as AssignNode } from './core/AssignNode.js'; -export { attribute, default as AttributeNode } from './core/AttributeNode.js'; -export { bypass, default as BypassNode } from './core/BypassNode.js'; -export { cache, default as CacheNode } from './core/CacheNode.js'; -export { default as ConstNode } from './core/ConstNode.js'; -export { context, default as ContextNode, label } from './core/ContextNode.js'; -export { default as IndexNode, drawIndex, IndexNodeScope, instanceIndex, vertexIndex } from './core/IndexNode.js'; -export { default as LightingModel, LightingModelDirectInput, LightingModelIndirectInput, LightingModelReflectedLight } from './core/LightingModel.js'; -export { default as MRTNode, mrt } from './core/MRTNode.js'; -export { default as Node } from './core/Node.js'; -export { default as NodeAttribute } from './core/NodeAttribute.js'; -export { default as NodeBuilder } from './core/NodeBuilder.js'; -export { default as NodeCache } from './core/NodeCache.js'; -export { default as NodeCode } from './core/NodeCode.js'; -export { default as NodeFrame } from './core/NodeFrame.js'; -export { default as NodeFunctionInput } from './core/NodeFunctionInput.js'; -export { default as NodeKeywords } from './core/NodeKeywords.js'; -export { default as NodeUniform } from './core/NodeUniform.js'; -export { default as NodeVar } from './core/NodeVar.js'; -export { default as NodeVarying } from './core/NodeVarying.js'; -export { default as OutputStructNode, outputStruct } from './core/OutputStructNode.js'; -export { alphaT, anisotropy, anisotropyB, anisotropyT, clearcoat, clearcoatRoughness, dashSize, default as PropertyNode, diffuseColor, emissive, gapSize, iridescence, iridescenceIOR, iridescenceThickness, metalness, output, pointWidth, property, roughness, sheen, sheenRoughness, shininess, specularColor, varyingProperty } from './core/PropertyNode.js'; -export { default as StackNode } from './core/StackNode.js'; -export { default as TempNode } from './core/TempNode.js'; -export { default as UniformGroupNode, frameGroup, objectGroup, renderGroup, uniformGroup } from './core/UniformGroupNode.js'; -export { default as UniformNode, uniform } from './core/UniformNode.js'; -export { default as VarNode, temp } from './core/VarNode.js'; -export { default as VaryingNode, varying } from './core/VaryingNode.js'; - -import * as NodeUtils from './core/NodeUtils.js'; -export { NodeUtils }; - -// math -export { abs, acos, all, any, asin, atan, atan2, bitcast, cbrt, ceil, clamp, cos, cross, default as MathNode, degrees, dFdx, dFdy, difference, distance, dot, EPSILON, equals, exp, exp2, faceForward, floor, fract, fwidth, INFINITY, inverseSqrt, length, lengthSq, log, log2, MathNodeMethod, MathNodeMethod1, MathNodeMethod2, MathNodeMethod3, max, min, mix, mod, negate, normalize, oneMinus, PI, PI2, pow, pow2, pow3, pow4, radians, rand, reciprocal, reflect, refract, round, saturate, sign, sin, smoothstep, sqrt, step, tan, transformDirection, transpose, trunc } from './math/MathNode.js'; - -export { cond, default as CondNode } from './math/CondNode.js'; -export { default as HashNode, hash } from './math/HashNode.js'; -export { add, and, bitAnd, bitNot, bitOr, bitXor, default as OperatorNode, div, equal, greaterThan, greaterThanEqual, lessThan, lessThanEqual, mul, not, OperatorNodeOp, or, remainder, shiftLeft, shiftRight, sub, xor } from './math/OperatorNode.js'; - -// math utils -export { gain, parabola, pcurve, sinc } from './math/MathUtils.js'; -export { triNoise3D } from './math/TriNoise3D.js'; - -// utils -export { default as ArrayElementNode } from './utils/ArrayElementNode.js'; -export { default as ConvertNode } from './utils/ConvertNode.js'; -export { default as DiscardNode, discard, Return } from './utils/DiscardNode.js'; -export { default as EquirectUVNode, equirectUV } from './utils/EquirectUVNode.js'; -export { default as JoinNode } from './utils/JoinNode.js'; -export { default as MatcapUVNode, matcapUV } from './utils/MatcapUVNode.js'; -export { default as MaxMipLevelNode, maxMipLevel } from './utils/MaxMipLevelNode.js'; -export { default as OscNode, OscNodeMethod, oscSawtooth, oscSine, oscSquare, oscTriangle } from './utils/OscNode.js'; -export { colorToDirection, default as PackingNode, directionToColor } from './utils/PackingNode.js'; -export { default as ReflectorNode, reflector, ReflectorNodeParameters } from './utils/ReflectorNode.js'; -export { default as RemapNode, remap, remapClamp } from './utils/RemapNode.js'; -export { default as RotateNode, rotate } from './utils/RotateNode.js'; -export { default as RotateUVNode, rotateUV } from './utils/RotateUVNode.js'; -export { default as RTTNode, rtt, RTTNodeOptions } from './utils/RTTNode.js'; -export { default as SplitNode } from './utils/SplitNode.js'; -export { default as SpriteSheetUVNode, spritesheetUV } from './utils/SpriteSheetUVNode.js'; -export { default as StorageArrayElementNode } from './utils/SpriteSheetUVNode.js'; -export { default as TimerNode, frameId, timerDelta, timerGlobal, timerLocal, TimerNodeScope } from './utils/TimerNode.js'; -export { default as TriplanarTexturesNode, triplanarTexture, triplanarTextures } from './utils/TriplanarTexturesNode.js'; - -// shader node -export * from './shadernode/ShaderNode.js'; - -// accessors -export { parallaxDirection, parallaxUV, TBNViewMatrix, transformedBentNormalView } from './accessors/AccessorsUtils.js'; -export { batch, default as BatchNode } from './accessors/BatchNode.js'; -export * from './accessors/BitangentNode.js'; -export { buffer, default as BufferNode } from './accessors/BufferNode.js'; -export * from './accessors/CameraNode.js'; -export { cubeTexture, default as CubeTextureNode } from './accessors/CubeTextureNode.js'; -export { default as InstanceNode, instance } from './accessors/InstanceNode.js'; -export { - default as MaterialNode, - materialAlphaTest, - materialAnisotropy, - materialAnisotropyVector, - materialAOMap, - materialClearcoat, - materialClearcoatNormal, - materialClearcoatRoughness, - materialColor, - materialDispersion, - materialEmissive, - materialIridescence, - materialIridescenceIOR, - materialIridescenceThickness, - materialLightMap, - materialLineDashOffset, - materialLineDashSize, - materialLineGapSize, - materialLineScale, - materialLineWidth, - materialMetalness, - MaterialNodeScope, - materialNormal, - materialOpacity, - materialPointWidth, - materialReflectivity, - materialRotation, - materialRoughness, - materialSheen, - materialSheenRoughness, - materialShininess, - materialSpecular, - materialSpecularStrength, -} from './accessors/MaterialNode.js'; -export { default as MaterialReferenceNode, materialReference } from './accessors/MaterialReferenceNode.js'; -export { default as ModelNode, modelDirection, modelNormalMatrix, modelPosition, modelScale, modelViewMatrix, modelViewPosition, modelWorldMatrix, modelWorldMatrixInverse } from './accessors/ModelNode.js'; -export { default as ModelViewProjectionNode, modelViewProjection } from './accessors/ModelViewProjectionNode.js'; -export * from './accessors/NormalNode.js'; -export { default as Object3DNode, objectDirection, objectNormalMatrix, objectPosition, objectScale, objectViewMatrix, objectViewPosition, objectWorldMatrix } from './accessors/Object3DNode.js'; -export { default as PointUVNode, pointUV } from './accessors/PointUVNode.js'; -export * from './accessors/PositionNode.js'; -export { default as ReferenceNode, reference, referenceBuffer } from './accessors/ReferenceNode.js'; -export * from './accessors/ReflectVectorNode.js'; -export { default as RendererReferenceNode, rendererReference } from './accessors/RendererReferenceNode.js'; -export { default as SkinningNode, skinning, skinningReference } from './accessors/SkinningNode.js'; -export { default as StorageBufferNode, storage, storageObject } from './accessors/StorageBufferNode.js'; -export { default as StorageTextureNode, storageTexture, textureStore } from './accessors/StorageTextureNode.js'; -export * from './accessors/TangentNode.js'; -export { default as Texture3DNode, texture3D } from './accessors/Texture3DNode.js'; -export { default as TextureBicubicNode, textureBicubic } from './accessors/TextureBicubicNode.js'; -export { default as TextureNode, sampler, texture } from './accessors/TextureNode.js'; -export { default as UniformsNode, uniforms } from './accessors/UniformsNode.js'; -export { default as UserDataNode, userData } from './accessors/UserDataNode.js'; -export * from './accessors/UVNode.js'; -export { default as VertexColorNode, vertexColor } from './accessors/VertexColorNode.js'; - -// display -export { afterImage, default as AfterImageNode } from './display/AfterImageNode.js'; -export { anamorphic, default as AnamorphicNode } from './display/AnamorphicNode.js'; -export { BlendMode, burn, default as BlendModeNode, dodge, overlay, screen } from './display/BlendModeNode.js'; -export { bloom, default as BloomNode } from './display/BloomNode.js'; -export { ColorAdjustmentMethod, default as ColorAdjustmentNode, hue, luminance, saturation, threshold, vibrance } from './display/ColorAdjustmentNode.js'; -export { ColorSpaceNodeMethod, colorSpaceToLinear, default as ColorSpaceNode, linearToColorSpace, linearTosRGB, sRGBToLinear } from './display/ColorSpaceNode.js'; -export { default as DenoiseNode, denoise } from './display/DenoiseNode.js'; -export { default as DepthOfFieldNode, dof } from './display/DepthOfFieldNode.js'; -export { default as DotScreenNode, dotScreen } from './display/DotScreenNode.js'; -export { default as FilmNode, film } from './display/FilmNode.js'; -export { default as FrontFacingNode, faceDirection, frontFacing } from './display/FrontFacingNode.js'; -export { default as FXAANode, fxaa } from './display/FXAANode.js'; -export { default as GaussianBlurNode, gaussianBlur } from './display/GaussianBlurNode.js'; -export { ao, default as GTAONode } from './display/GTAONode.js'; -export { default as Lut3DNode, lut3D } from './display/Lut3DNode.js'; -export { default as NormalMapNode, normalMap } from './display/NormalMapNode.js'; -export { default as PixelationPassNode, pixelationPass } from './display/PixelationPassNode.js'; -export { default as PosterizeNode, posterize } from './display/PosterizeNode.js'; -export { default as RenderOutputNode, renderOutput } from './display/RenderOutputNode.js'; -export { default as RGBShiftNode, rgbShift } from './display/RGBShiftNode.js'; -export { default as SobelOperatorNode, sobel } from './display/SobelOperatorNode.js'; -export { default as ToneMappingNode, toneMapping } from './display/ToneMappingNode.js'; -export { default as TransitionNode, transition } from './display/TransitionNode.js'; -export { default as ViewportDepthNode, depth, linearDepth, orthographicDepthToViewZ, perspectiveDepthToViewZ, ViewportDepthNodeScope, viewportLinearDepth, viewZToOrthographicDepth, viewZToPerspectiveDepth } from './display/ViewportDepthNode.js'; -export { default as ViewportDepthTextureNode, viewportDepthTexture } from './display/ViewportDepthTextureNode.js'; -export { default as ViewportNode, viewportBottomLeft, viewportBottomRight, viewportCoordinate, viewportResolution, viewportTopLeft, viewportTopRight } from './display/ViewportNode.js'; -export { default as ViewportSharedTextureNode, viewportSharedTexture } from './display/ViewportSharedTextureNode.js'; -export { default as ViewportTextureNode, viewportMipTexture, viewportTexture } from './display/ViewportTextureNode.js'; - -export { default as PassNode, depthPass, pass, PassNodeScope, passTexture } from './display/PassNode.js'; - -// code -export { code, CodeNodeInclude, default as CodeNode, glsl, js, wgsl } from './code/CodeNode.js'; -export { default as ExpressionNode, expression } from './code/ExpressionNode.js'; -export { call, default as FunctionCallNode } from './code/FunctionCallNode.js'; -export { default as FunctionNode, Fn, FunctionNodeArguments, glslFn, wgslFn } from './code/FunctionNode.js'; - -// fog -export { default as FogExp2Node, densityFog } from './fog/FogExp2Node.js'; -export { default as FogNode, fog } from './fog/FogNode.js'; -export { default as FogRangeNode, rangeFog } from './fog/FogRangeNode.js'; - -// geometry -export { default as RangeNode, range, RangeModeBound } from './geometry/RangeNode.js'; - -// gpgpu -export { compute, default as ComputeNode } from './gpgpu/ComputeNode.js'; - -// lighting -export { default as AnalyticLightNode } from './lighting/AnalyticLightNode.js'; -export { default as AONode } from './lighting/AONode.js'; -export { default as BasicEnvironmentNode } from './lighting/BasicEnvironmentNode.js'; -export { default as EnvironmentNode } from './lighting/EnvironmentNode.js'; -export { default as HemisphereLightNode } from './lighting/HemisphereLightNode.js'; -export { default as IrradianceNode } from './lighting/IrradianceNode.js'; -export { default as LightingContextNode, lightingContext } from './lighting/LightingContextNode.js'; -export { default as LightingNode } from './lighting/LightingNode.js'; -export { default as LightsNode, lights } from './lighting/LightsNode.js'; -export { default as PointLightNode } from './lighting/PointLightNode.js'; -export { default as RectAreaLightNode, RectAreaLightTexturesLib } from './lighting/RectAreaLightNode.js'; -export { default as SpotLightNode } from './lighting/SpotLightNode.js'; - -// pmrem -export { default as PMREMNode, pmremTexture } from './pmrem/PMREMNode.js'; - -// procedural -export { checker, default as CheckerNode } from './procedural/CheckerNode.js'; - -// loaders -export { default as NodeLoader } from './loaders/NodeLoader.js'; -export { default as NodeMaterialLoader } from './loaders/NodeMaterialLoader.js'; -export { default as NodeObjectLoader } from './loaders/NodeObjectLoader.js'; - -// materials -export * from './materials/Materials.js'; - -// materialX -export * from './materialx/MaterialXNodes.js'; - -// functions -export { default as BRDF_GGX } from './functions/BSDF/BRDF_GGX.js'; -export { default as BRDF_Lambert } from './functions/BSDF/BRDF_Lambert.js'; -export { default as D_GGX } from './functions/BSDF/D_GGX.js'; -export { default as DFGApprox } from './functions/BSDF/DFGApprox.js'; -export { default as F_Schlick } from './functions/BSDF/F_Schlick.js'; -export { default as V_GGX_SmithCorrelated } from './functions/BSDF/V_GGX_SmithCorrelated.js'; - -export { getDistanceAttenuation } from './lighting/LightUtils.js'; - -export { default as getGeometryRoughness } from './functions/material/getGeometryRoughness.js'; -export { default as getRoughness } from './functions/material/getRoughness.js'; - -export { default as PhongLightingModel } from './functions/PhongLightingModel.js'; -export { default as PhysicalLightingModel } from './functions/PhysicalLightingModel.js'; diff --git a/packages/canvas-three/three/src/nodes/accessors/AccessorsUtils.d.ts b/packages/canvas-three/three/src/nodes/accessors/AccessorsUtils.d.ts deleted file mode 100644 index 6841b7001..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/AccessorsUtils.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export const TBNViewMatrix: ShaderNodeObject; - -export const parallaxDirection: ShaderNodeObject; -export const parallaxUV: (uv: ShaderNodeObject, scale: NodeRepresentation) => ShaderNodeObject; - -export const transformedBentNormalView: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/BatchNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/BatchNode.d.ts deleted file mode 100644 index ede061b68..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/BatchNode.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { BatchedMesh } from '../../objects/BatchedMesh.js'; -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class BatchNode extends Node { - batchMesh: BatchedMesh; - - instanceColorNode: Node | null; - batchingIdNode: Node | null; - - constructor(batchMesh: BatchedMesh); -} - -export const batch: (batchMesh: BatchedMesh) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/BitangentNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/BitangentNode.d.ts deleted file mode 100644 index bdd686cd7..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/BitangentNode.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import MathNode from '../math/MathNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export const bitangentGeometry: ShaderNodeObject; -export const bitangentLocal: ShaderNodeObject; -export const bitangentView: ShaderNodeObject; -export const bitangentWorld: ShaderNodeObject; -export const transformedBitangentView: ShaderNodeObject; -export const transformedBitangentWorld: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/BufferAttributeNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/BufferAttributeNode.d.ts deleted file mode 100644 index fe545d41f..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/BufferAttributeNode.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Usage } from '../../constants.js'; -import { BufferAttribute, TypedArray } from '../../core/BufferAttribute.js'; -import { InterleavedBuffer } from '../../core/InterleavedBuffer.js'; -import { InterleavedBufferAttribute } from '../../core/InterleavedBufferAttribute.js'; -import InputNode from '../core/InputNode.js'; -import NodeBuilder from '../core/NodeBuilder.js'; -declare class BufferAttributeNode extends InputNode { - readonly isBufferNode: true; - bufferType: string | null; - bufferStride: number; - bufferOffset: number; - usage: Usage; - instanced: boolean; - attribute: BufferAttribute | InterleavedBufferAttribute | null; - constructor(value: TypedArray | InterleavedBuffer | BufferAttribute, bufferType?: string | null, bufferStride?: number, bufferOffset?: number); - getHash(builder: NodeBuilder): string; - getNodeType(builder: NodeBuilder): string | null; - setup(builder: NodeBuilder): void; - generate(builder: NodeBuilder): string | null | undefined; - getInputType(): string; - setUsage(value: Usage): this; - setInstanced(value: boolean): this; -} -export default BufferAttributeNode; -export declare const bufferAttribute: (array: TypedArray | InterleavedBuffer | BufferAttribute, type?: string | null, stride?: number, offset?: number) => import('../shadernode/ShaderNode.js').ShaderNodeObject; -export declare const dynamicBufferAttribute: (array: TypedArray | InterleavedBuffer | BufferAttribute, type?: string | null, stride?: number, offset?: number) => import('../shadernode/ShaderNode.js').ShaderNodeObject; -export declare const instancedBufferAttribute: (array: TypedArray | InterleavedBuffer | BufferAttribute, type?: string | null, stride?: number, offset?: number) => import('../shadernode/ShaderNode.js').ShaderNodeObject; -export declare const instancedDynamicBufferAttribute: (array: TypedArray | InterleavedBuffer | BufferAttribute, type?: string | null, stride?: number, offset?: number) => import('../shadernode/ShaderNode.js').ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/BufferNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/BufferNode.d.ts deleted file mode 100644 index a04774a4b..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/BufferNode.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import UniformNode from '../core/UniformNode.js'; -import { NodeOrType, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class BufferNode extends UniformNode { - isBufferNode: true; - - bufferType: string; - bufferCount: number; - - constructor(value: unknown, bufferType: string, bufferCount?: number); -} - -export const buffer: (value: unknown, nodeOrType: NodeOrType, count: number) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/CameraNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/CameraNode.d.ts deleted file mode 100644 index 13c05e6a3..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/CameraNode.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Matrix3 } from '../../math/Matrix3.js'; -import { Matrix4 } from '../../math/Matrix4.js'; -import { Vector3 } from '../../math/Vector3.js'; -import UniformNode from '../core/UniformNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export const cameraNear: ShaderNodeObject>; -export const cameraFar: ShaderNodeObject>; -export const cameraLogDepth: ShaderNodeObject>; -export const cameraProjectionMatrix: ShaderNodeObject>; -export const cameraProjectionMatrixInverse: ShaderNodeObject>; -export const cameraViewMatrix: ShaderNodeObject>; -export const cameraWorldMatrix: ShaderNodeObject>; -export const cameraNormalMatrix: ShaderNodeObject>; -export const cameraPosition: ShaderNodeObject>; diff --git a/packages/canvas-three/three/src/nodes/accessors/ClippingNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/ClippingNode.d.ts deleted file mode 100644 index 23029fde2..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/ClippingNode.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export type ClippingNodeScope = typeof ClippingNode.ALPHA_TO_COVERAGE | typeof ClippingNode.DEFAULT; - -export default class ClippingNode extends Node { - scope: ClippingNodeScope; - - constructor(scope?: ClippingNodeScope); - - static ALPHA_TO_COVERAGE: 'alphaToCoverage'; - static DEFAULT: 'default'; -} - -export const clipping: () => ShaderNodeObject; -export const clippingAlpha: () => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/CubeTextureNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/CubeTextureNode.d.ts deleted file mode 100644 index 8a53b3310..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/CubeTextureNode.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { CubeTexture } from '../../textures/CubeTexture.js'; -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import TextureNode from './TextureNode.js'; - -declare class CubeTextureNode extends TextureNode { - isCubeTextureNode: boolean; - uvNode: ShaderNodeObject | null; - levelNode: ShaderNodeObject | null; - - constructor(value: CubeTexture, uvNode?: ShaderNodeObject | null, levelNode?: ShaderNodeObject | null, biasNode?: ShaderNodeObject | null); - - getDefaultUV(): Node; -} - -export default CubeTextureNode; - -export const cubeTexture: (value: CubeTexture, uvNode?: NodeRepresentation, levelNode?: NodeRepresentation, biasNode?: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - cubeTexture: typeof cubeTexture; - } -} diff --git a/packages/canvas-three/three/src/nodes/accessors/InstanceNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/InstanceNode.d.ts deleted file mode 100644 index 7efe6be75..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/InstanceNode.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { InstancedMesh } from '../../objects/InstancedMesh.js'; -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class InstanceNode extends Node { - instanceMesh: InstancedMesh; - instanceMatrixNode: Node | null; - instanceColorNode: Node | null; - - constructor(instanceMesh: InstancedMesh); -} - -export const instance: (instanceMesh: InstancedMesh) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/MaterialNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/MaterialNode.d.ts deleted file mode 100644 index a4f96ddf2..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/MaterialNode.d.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { Vector2 } from '../../math/Vector2.js'; -import Node from '../core/Node.js'; -import UniformNode from '../core/UniformNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export type MaterialNodeScope = - | typeof MaterialNode.ALPHA_TEST - | typeof MaterialNode.COLOR - | typeof MaterialNode.OPACITY - | typeof MaterialNode.SHININESS - | typeof MaterialNode.SPECULAR - | typeof MaterialNode.SPECULAR_STRENGTH - | typeof MaterialNode.SPECULAR_INTENSITY - | typeof MaterialNode.SPECULAR_COLOR - | typeof MaterialNode.REFLECTIVITY - | typeof MaterialNode.ROUGHNESS - | typeof MaterialNode.METALNESS - | typeof MaterialNode.NORMAL - | typeof MaterialNode.CLEARCOAT - | typeof MaterialNode.CLEARCOAT_ROUGHNESS - | typeof MaterialNode.CLEARCOAT_NORMAL - | typeof MaterialNode.EMISSIVE - | typeof MaterialNode.ROTATION - | typeof MaterialNode.SHEEN - | typeof MaterialNode.SHEEN_ROUGHNESS - | typeof MaterialNode.ANISOTROPY - | typeof MaterialNode.IRIDESCENCE - | typeof MaterialNode.IRIDESCENCE_IOR - | typeof MaterialNode.IRIDESCENCE_THICKNESS - | typeof MaterialNode.IOR - | typeof MaterialNode.TRANSMISSION - | typeof MaterialNode.THICKNESS - | typeof MaterialNode.ATTENUATION_DISTANCE - | typeof MaterialNode.ATTENUATION_COLOR - | typeof MaterialNode.LINE_SCALE - | typeof MaterialNode.LINE_DASH_SIZE - | typeof MaterialNode.LINE_GAP_SIZE - | typeof MaterialNode.LINE_WIDTH - | typeof MaterialNode.LINE_DASH_OFFSET - | typeof MaterialNode.POINT_WIDTH - | typeof MaterialNode.DISPERSION - | typeof MaterialNode.LIGHT_MAP - | typeof MaterialNode.AO_MAP - | typeof MaterialNode.REFRACTION_RATIO; - -export default class MaterialNode extends Node { - static ALPHA_TEST: 'alphaTest'; - static COLOR: 'color'; - static OPACITY: 'opacity'; - static SHININESS: 'shininess'; - static SPECULAR: 'specular'; - static SPECULAR_STRENGTH: 'specularStrength'; - static SPECULAR_INTENSITY: 'specularIntensity'; - static SPECULAR_COLOR: 'specularColor'; - static REFLECTIVITY: 'reflectivity'; - static ROUGHNESS: 'roughness'; - static METALNESS: 'metalness'; - static NORMAL: 'normal'; - static CLEARCOAT: 'clearcoat'; - static CLEARCOAT_ROUGHNESS: 'clearcoatRoughness'; - static CLEARCOAT_NORMAL: 'clearcoatNormal'; - static EMISSIVE: 'emissive'; - static ROTATION: 'rotation'; - static SHEEN: 'sheen'; - static SHEEN_ROUGHNESS: 'sheenRoughness'; - static ANISOTROPY: 'anisotropy'; - static IRIDESCENCE: 'iridescence'; - static IRIDESCENCE_IOR: 'iridescenceIOR'; - static IRIDESCENCE_THICKNESS: 'iridescenceThickness'; - static IOR: 'ior'; - static TRANSMISSION: 'transmission'; - static THICKNESS: 'thickness'; - static ATTENUATION_DISTANCE: 'attenuationDistance'; - static ATTENUATION_COLOR: 'attenuationColor'; - static LINE_SCALE: 'scale'; - static LINE_DASH_SIZE: 'dashSize'; - static LINE_GAP_SIZE: 'gapSize'; - static LINE_WIDTH: 'linewidth'; - static LINE_DASH_OFFSET: 'dashOffset'; - static POINT_WIDTH: 'pointWidth'; - static DISPERSION: 'dispersion'; - static LIGHT_MAP: 'light'; - static AO_MAP: 'ao'; - static REFRACTION_RATIO: 'refractionRatio'; - - scope: MaterialNodeScope; - constructor(scope?: MaterialNodeScope); -} - -export const materialAlphaTest: ShaderNodeObject; -export const materialColor: ShaderNodeObject; -export const materialShininess: ShaderNodeObject; -export const materialEmissive: ShaderNodeObject; -export const materialOpacity: ShaderNodeObject; -export const materialSpecular: ShaderNodeObject; - -export const materialSpecularIntensity: ShaderNodeObject; -export const materialSpecularColor: ShaderNodeObject; - -export const materialSpecularStrength: ShaderNodeObject; -export const materialReflectivity: ShaderNodeObject; -export const materialRoughness: ShaderNodeObject; -export const materialMetalness: ShaderNodeObject; -export const materialNormal: ShaderNodeObject; -export const materialClearcoat: ShaderNodeObject; -export const materialClearcoatRoughness: ShaderNodeObject; -export const materialClearcoatNormal: ShaderNodeObject; -export const materialRotation: ShaderNodeObject; -export const materialSheen: ShaderNodeObject; -export const materialSheenRoughness: ShaderNodeObject; -export const materialAnisotropy: ShaderNodeObject; -export const materialIridescence: ShaderNodeObject; -export const materialIridescenceIOR: ShaderNodeObject; -export const materialIridescenceThickness: ShaderNodeObject; -export const materialTransmission: ShaderNodeObject; -export const materialThickness: ShaderNodeObject; -export const materialIOR: ShaderNodeObject; -export const materialAttenuationDistance: ShaderNodeObject; -export const materialAttenuationColor: ShaderNodeObject; -export const materialLineScale: ShaderNodeObject; -export const materialLineDashSize: ShaderNodeObject; -export const materialLineGapSize: ShaderNodeObject; -export const materialLineWidth: ShaderNodeObject; -export const materialLineDashOffset: ShaderNodeObject; -export const materialPointWidth: ShaderNodeObject; -export const materialDispersion: ShaderNodeObject; -export const materialLightMap: ShaderNodeObject; -export const materialAOMap: ShaderNodeObject; -export const materialRefractionRatio: ShaderNodeObject; -export const materialAnisotropyVector: ShaderNodeObject>; diff --git a/packages/canvas-three/three/src/nodes/accessors/MaterialReferenceNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/MaterialReferenceNode.d.ts deleted file mode 100644 index 9eac39dca..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/MaterialReferenceNode.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Material } from '../../materials/Material.js'; -import { NodeOrType, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import ReferenceNode from './ReferenceNode.js'; - -export default class MaterialReferenceNode extends ReferenceNode { - constructor(property: string, inputType: string, material?: Material | null); -} - -export const materialReference: (name: string, nodeOrType: NodeOrType, material?: Material | null) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/ModelNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/ModelNode.d.ts deleted file mode 100644 index 3c1320e2f..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/ModelNode.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Matrix4 } from '../../math/Matrix4.js'; -import { UniformNode } from '../Nodes.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import Object3DNode from './Object3DNode.js'; - -/** - * Similar to {@link Object3DNode} but the object comes from {@link NodeFrame} - */ -export default class ModelNode extends Object3DNode { - constructor(scope?: string); -} - -export const modelDirection: ShaderNodeObject; -export const modelViewMatrix: ShaderNodeObject; -export const modelNormalMatrix: ShaderNodeObject; -export const modelWorldMatrix: ShaderNodeObject; -export const modelPosition: ShaderNodeObject; -export const modelScale: ShaderNodeObject; -export const modelViewPosition: ShaderNodeObject; -export const modelWorldMatrixInverse: ShaderNodeObject>; diff --git a/packages/canvas-three/three/src/nodes/accessors/ModelViewProjectionNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/ModelViewProjectionNode.d.ts deleted file mode 100644 index 15d265a11..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/ModelViewProjectionNode.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class ModelViewProjectionNode extends Node { - constructor(positionNode?: Node); -} - -export const modelViewProjection: (position?: NodeRepresentation) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/NormalNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/NormalNode.d.ts deleted file mode 100644 index 6bc42e7ff..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/NormalNode.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import AttributeNode from '../core/AttributeNode.js'; -import PropertyNode from '../core/PropertyNode.js'; -import VarNode from '../core/VarNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export const normalGeometry: ShaderNodeObject; -export const normalLocal: ShaderNodeObject; -export const normalView: ShaderNodeObject; -export const normalWorld: ShaderNodeObject; -export const transformedNormalView: ShaderNodeObject; -export const transformedNormalWorld: ShaderNodeObject; -export const transformedClearcoatNormalView: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/Object3DNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/Object3DNode.d.ts deleted file mode 100644 index 87eb9531d..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/Object3DNode.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Object3D } from '../../core/Object3D.js'; -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class Object3DNode extends Node { - scope: string; - object3d: Object3D | null; - - constructor(scope?: string, object3d?: Object3D | null); - - static VIEW_MATRIX: 'viewMatrix'; - static NORMAL_MATRIX: 'normalMatrix'; - static WORLD_MATRIX: 'worldMatrix'; - static POSITION: 'position'; - static SCALE: 'scale'; - static VIEW_POSITION: 'viewPosition'; - static DIRECTION: 'direction'; -} - -export const objectDirection: (object3d: Object3D) => ShaderNodeObject; -export const objectViewMatrix: (object3d: Object3D) => ShaderNodeObject; -export const objectNormalMatrix: (object3d: Object3D) => ShaderNodeObject; -export const objectWorldMatrix: (object3d: Object3D) => ShaderNodeObject; -export const objectPosition: (object3d: Object3D) => ShaderNodeObject; -export const objectScale: (object3d: Object3D) => ShaderNodeObject; -export const objectViewPosition: (object3d: Object3D) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/PointUVNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/PointUVNode.d.ts deleted file mode 100644 index 68969dab9..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/PointUVNode.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class PointUVNode extends Node { - isPointUVNode: true; - - constructor(); -} - -export const pointUV: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/PositionNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/PositionNode.d.ts deleted file mode 100644 index 5aa2358dc..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/PositionNode.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export const positionGeometry: ShaderNodeObject; -export const positionLocal: ShaderNodeObject; -export const positionWorld: ShaderNodeObject; -export const positionWorldDirection: ShaderNodeObject; -export const positionView: ShaderNodeObject; -export const positionViewDirection: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/ReferenceNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/ReferenceNode.d.ts deleted file mode 100644 index 8af6dc108..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/ReferenceNode.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import Node from '../core/Node.js'; -import { NodeOrType, NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class ReferenceNode extends Node { - property: string; - - uniformType: string; - - object: T; - count: number | null; - - properties: string[]; - reference: T | null; - node: Node | null; - - constructor(property: string, uniformType: string, object?: T | null, count?: number | null); - - setNodeType(uniformType: string): void; -} - -export const reference: (name: string, nodeOrType: NodeOrType, object: T) => ShaderNodeObject>; -export const referenceBuffer: (name: string, nodeOrType: NodeOrType, count: NodeRepresentation, object: T) => ShaderNodeObject>; diff --git a/packages/canvas-three/three/src/nodes/accessors/ReflectVectorNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/ReflectVectorNode.d.ts deleted file mode 100644 index a9046b66f..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/ReflectVectorNode.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import Node from '../core/Node.js'; -import VarNode from '../core/VarNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export const reflectView: ShaderNodeObject; -export const refractView: ShaderNodeObject; - -export const reflectVector: ShaderNodeObject; -export const refractVector: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/RendererReferenceNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/RendererReferenceNode.d.ts deleted file mode 100644 index 13a5a3e5e..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/RendererReferenceNode.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import Renderer from '../../renderers/common/Renderer.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import ReferenceNode from './ReferenceNode.js'; - -export default class RendererReferenceNode extends ReferenceNode { - renderer: Renderer | null; - - constructor(property: string, inputType: string, renderer?: Renderer | null); -} - -export const rendererReference: (name: string, type: string, renderer?: Renderer | null) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/SkinningNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/SkinningNode.d.ts deleted file mode 100644 index 45defeaa5..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/SkinningNode.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { SkinnedMesh } from '../../objects/SkinnedMesh.js'; -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class SkinningNode extends Node { - skinnedMesh: SkinnedMesh; - useReference: boolean; - - skinIndexNode: Node; - skinWeightNode: Node; - - bindMatrixNode: Node; - bindMatrixInverseNode: Node; - boneMatricesNode: Node; - - constructor(skinnedMesh: SkinnedMesh, useReference?: boolean); -} - -export const skinning: (skinnedMesh: SkinnedMesh) => ShaderNodeObject; -export const skinningReference: (skinnedMesh: SkinnedMesh) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/StorageBufferNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/StorageBufferNode.d.ts deleted file mode 100644 index 6b9afff21..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/StorageBufferNode.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import StorageBufferAttribute from '../../renderers/common/StorageBufferAttribute.js'; -import StorageInstancedBufferAttribute from '../../renderers/common/StorageInstancedBufferAttribute.js'; -import { GPUBufferBindingType } from '../../renderers/webgpu/utils/WebGPUConstants.js'; -import { NodeOrType, NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import StorageArrayElementNode from '../utils/StoargeArrayElementNode.js'; -import BufferNode from './BufferNode.js'; - -export default class StorageBufferNode extends BufferNode { - readonly isStorageBufferNode: true; - bufferObject: boolean; - - access: GPUBufferBindingType; - - constructor(value: StorageBufferAttribute | StorageInstancedBufferAttribute, bufferType: string, bufferCount?: number); - - element(indexNode: NodeRepresentation): ShaderNodeObject; - - setBufferObject(value: boolean): this; - - setAccess(value: GPUBufferBindingType): this; - - toReadOnly(): this; -} - -export const storage: (value: StorageBufferAttribute | StorageInstancedBufferAttribute, nodeOrType: NodeOrType, count: number) => ShaderNodeObject; -export const storageObject: (value: StorageBufferAttribute | StorageInstancedBufferAttribute, nodeOrType: NodeOrType, count: number) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/StorageTextureNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/StorageTextureNode.d.ts deleted file mode 100644 index 4c100468a..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/StorageTextureNode.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { GPUStorageTextureAccess } from '../../renderers/webgpu/utils/WebGPUConstants.js'; -import { Texture } from '../../textures/Texture.js'; -import Node from '../core/Node.js'; -import NodeBuilder from '../core/NodeBuilder.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import TextureNode from './TextureNode.js'; - -export default class StorageTextureNode extends TextureNode { - storeNode: Node | null; - - readonly isStorageTextureNode: true; - - access: GPUStorageTextureAccess; - - constructor(value: Texture, uvNode?: ShaderNodeObject | null, storeNode?: Node | null); - - setAccess(value: GPUStorageTextureAccess): this; - - toReadOnly(): this; - - toWriteOnly(): this; - - generateStore(builder: NodeBuilder): void; -} - -export const storageTexture: (value: Texture, uvNode?: NodeRepresentation, storeNode?: NodeRepresentation) => ShaderNodeObject; - -export const textureStore: (value: Texture, uvNode?: NodeRepresentation, storeNode?: NodeRepresentation) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/TangentNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/TangentNode.d.ts deleted file mode 100644 index 2eb59528f..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/TangentNode.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import AttributeNode from '../core/AttributeNode.js'; -import VarNode from '../core/VarNode.js'; -import VaryingNode from '../core/VaryingNode.js'; -import MathNode from '../math/MathNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export const tangentGeometry: ShaderNodeObject; -export const tangentLocal: ShaderNodeObject; -export const tangentView: ShaderNodeObject; -export const tangentWorld: ShaderNodeObject; -export const transformedTangentView: ShaderNodeObject; -export const transformedTangentWorld: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/Texture3DNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/Texture3DNode.d.ts deleted file mode 100644 index 875a09d3b..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/Texture3DNode.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { CubeTexture } from '../../textures/CubeTexture.js'; -import { Texture } from '../../textures/Texture.js'; -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import TextureNode from './TextureNode.js'; - -export default class Texture3DNode extends TextureNode { - readonly isTexture3DNode: true; - - constructor(value: Texture, uvNode?: ShaderNodeObject | null, levelNode?: ShaderNodeObject | null); -} - -export const texture3D: (value: Texture, uvNode?: NodeRepresentation, levelNode?: NodeRepresentation) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/TextureBicubicNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/TextureBicubicNode.d.ts deleted file mode 100644 index 18abed628..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/TextureBicubicNode.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class TextureBicubicNode extends TempNode { - textureNode: Node; - blurNode: Node; - - constructor(textureNode: Node, blurNode?: Node); -} - -export const textureBicubic: (textureNode: Node, blurNode?: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - bicubic: typeof textureBicubic; - } -} diff --git a/packages/canvas-three/three/src/nodes/accessors/TextureNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/TextureNode.d.ts deleted file mode 100644 index 50fc8a3b3..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/TextureNode.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Texture } from '../../textures/Texture.js'; -import Node from '../core/Node.js'; -import UniformNode from '../core/UniformNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class TextureNode extends UniformNode { - readonly isTextureNode: true; - - uvNode: ShaderNodeObject | null; - levelNode: ShaderNodeObject | null; - biasNode: ShaderNodeObject | null; - compareNode: Node | null; - depthNode: Node | null; - gradNode: Node | null; - - sampler: boolean; - updateMatrix: boolean; - - referenceNode: Node | null; - - constructor(value: Texture, uvNode?: ShaderNodeObject | null, levelNode?: ShaderNodeObject | null, biasNode?: ShaderNodeObject | null); - - getDefaultUV(): Node; - - grad(gradeNodeX: NodeRepresentation, gradeNodeY: NodeRepresentation): ShaderNodeObject; - - clone(): this; -} - -export const texture: (value: Texture, uvNode?: NodeRepresentation, levelNode?: NodeRepresentation, biasNode?: NodeRepresentation) => ShaderNodeObject; -export const sampler: (aTexture: Texture | TextureNode) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - texture: typeof texture; - } -} diff --git a/packages/canvas-three/three/src/nodes/accessors/UVNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/UVNode.d.ts deleted file mode 100644 index 26d0e687c..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/UVNode.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import AttributeNode from '../core/AttributeNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export const uv: (index?: number) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/UniformsNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/UniformsNode.d.ts deleted file mode 100644 index bfe5a9b23..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/UniformsNode.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import ArrayElementNode from '../utils/ArrayElementNode.js'; -import BufferNode from './BufferNode.js'; - -declare class UniformsElementNode extends ArrayElementNode { - constructor(arrayBuffer: Node, indexNode: Node); -} - -export default class UniformsNode extends BufferNode { - array: unknown[]; - elementType: string | null; - - readonly isArrayBufferNode: true; - - constructor(value: unknown[], elementType?: string | null); - - getElementLength(): number; - - element(indexNode: number): ShaderNodeObject; -} - -export const uniforms: (values: unknown[], nodeType?: string | null) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/UserDataNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/UserDataNode.d.ts deleted file mode 100644 index 02459cb7a..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/UserDataNode.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import ReferenceNode from './ReferenceNode.js'; - -export type NodeUserData = Record; - -export default class UserDataNode extends ReferenceNode { - userData: NodeUserData | null; - constructor(property: string, inputType: string, userData?: NodeUserData | null); -} - -export const userData: (name: string, inputType: string, userData?: NodeUserData) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/accessors/VertexColorNode.d.ts b/packages/canvas-three/three/src/nodes/accessors/VertexColorNode.d.ts deleted file mode 100644 index 9a386bebd..000000000 --- a/packages/canvas-three/three/src/nodes/accessors/VertexColorNode.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import AttributeNode from '../core/AttributeNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class VertexColorNode extends AttributeNode { - readonly isVertexColorNode: true; - - index: number; - - constructor(index?: number); -} - -export const vertexColor: (index?: number) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/code/CodeNode.d.ts b/packages/canvas-three/three/src/nodes/code/CodeNode.d.ts deleted file mode 100644 index acb693423..000000000 --- a/packages/canvas-three/three/src/nodes/code/CodeNode.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import Node from '../core/Node.js'; -import NodeBuilder from '../core/NodeBuilder.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export interface CodeNodeInclude { - build(builder: NodeBuilder): void; -} - -export default class CodeNode extends Node { - isCodeNode: true; - code: string; - language: string; - - constructor(code?: string, includes?: CodeNodeInclude[], language?: string); - - setIncludes(includes: CodeNodeInclude[]): this; - getIncludes(builder: NodeBuilder): CodeNodeInclude[]; -} - -export const code: (code: string, includes?: CodeNodeInclude[], language?: string) => ShaderNodeObject; -export const js: (src: string, includes?: CodeNodeInclude[]) => ShaderNodeObject; -export const wgsl: (src: string, includes?: CodeNodeInclude[]) => ShaderNodeObject; -export const glsl: (src: string, includes?: CodeNodeInclude[]) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/code/ExpressionNode.d.ts b/packages/canvas-three/three/src/nodes/code/ExpressionNode.d.ts deleted file mode 100644 index c81275c7b..000000000 --- a/packages/canvas-three/three/src/nodes/code/ExpressionNode.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import TempNode from '../core/TempNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class ExpressionNode extends TempNode { - snipped: string; /* sic */ - constructor(snipped?: string, nodeType?: string); -} - -export const expression: (snipped?: string, nodeType?: string) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/code/FunctionCallNode.d.ts b/packages/canvas-three/three/src/nodes/code/FunctionCallNode.d.ts deleted file mode 100644 index 7dd6c14c8..000000000 --- a/packages/canvas-three/three/src/nodes/code/FunctionCallNode.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { ProxiedObject, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import FunctionNode, { FunctionNodeArguments } from './FunctionNode.js'; - -export default class FunctionCallNode

extends TempNode { - functionNode: FunctionNode

; - parameters: { [name: string]: Node }; - - constructor(functionNode?: FunctionNode

, parameters?: P); - - setParameters(parameters: P): this; - getParameters(): P; -} - -export const call:

(functionNode?: FunctionNode

, parameters?: ProxiedObject

) => ShaderNodeObject>; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - call: typeof call; - } -} diff --git a/packages/canvas-three/three/src/nodes/code/FunctionNode.d.ts b/packages/canvas-three/three/src/nodes/code/FunctionNode.d.ts deleted file mode 100644 index 03443afa7..000000000 --- a/packages/canvas-three/three/src/nodes/code/FunctionNode.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -import Node from '../core/Node.js'; -import NodeBuilder from '../core/NodeBuilder.js'; -import NodeFunction from '../core/NodeFunction.js'; -import NodeFunctionInput from '../core/NodeFunctionInput.js'; -import { ProxiedObject, ProxiedTuple, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import CodeNode, { CodeNodeInclude } from './CodeNode.js'; -import FunctionCallNode from './FunctionCallNode.js'; - -export type FunctionNodeArguments = Node[] | { [name: string]: Node }; - -export default class FunctionNode

extends CodeNode { - keywords: { [key: string]: Node }; - constructor(code?: string, includes?: CodeNodeInclude[], language?: string); - - getInputs(builder: NodeBuilder): NodeFunctionInput[]; - getNodeFunction(builder: NodeBuilder): NodeFunction; - call(parameters: P): FunctionCallNode

; -} - -export type Fn

= P extends readonly [...unknown[]] ? ProxiedTuple

: readonly [ProxiedObject

]; - -export const nativeFn:

( - code: string, - includes?: CodeNodeInclude[], - language?: string - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics -) => (...params: Fn

) => ShaderNodeObject; - -export const glslFn:

( - code: string, - includes?: CodeNodeInclude[] - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics -) => (...params: Fn

) => ShaderNodeObject; -export const wgslFn:

( - code: string, - includes?: CodeNodeInclude[] - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics -) => (...params: Fn

) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/core/AssignNode.d.ts b/packages/canvas-three/three/src/nodes/core/AssignNode.d.ts deleted file mode 100644 index 1f9c9c7bb..000000000 --- a/packages/canvas-three/three/src/nodes/core/AssignNode.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import Node from './Node.js'; -import NodeBuilder from './NodeBuilder.js'; -import TempNode from './TempNode.js'; - -export default class AssignNode extends TempNode { - constructor(targetNode: Node, sourceNode: Node); - - needsSplitAssign(builder: NodeBuilder): boolean; -} - -export const assign: (targetNode: NodeRepresentation, sourceNode: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - assign: typeof assign; - } -} diff --git a/packages/canvas-three/three/src/nodes/core/AttributeNode.d.ts b/packages/canvas-three/three/src/nodes/core/AttributeNode.d.ts deleted file mode 100644 index 9209ec83c..000000000 --- a/packages/canvas-three/three/src/nodes/core/AttributeNode.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import Node from './Node.js'; -import NodeBuilder from './NodeBuilder.js'; - -export default class AttributeNode extends Node { - defaultNode: Node | null; - - constructor(attributeName: string, nodeType?: string | null, defaultNode?: Node | null); - - setAttributeName(attributeName: string): this; - - getAttributeName(builder: NodeBuilder): string; -} - -export const attribute: (name: string, nodeType?: string | null, defaultNode?: NodeRepresentation) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/core/BypassNode.d.ts b/packages/canvas-three/three/src/nodes/core/BypassNode.d.ts deleted file mode 100644 index 8ca6bf0bf..000000000 --- a/packages/canvas-three/three/src/nodes/core/BypassNode.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import Node from './Node.js'; - -export default class BypassNode extends Node { - isBypassNode: true; - outputNode: Node; - callNode: Node; - - constructor(returnNode: Node, callNode: Node); -} - -export const bypass: (returnNode: NodeRepresentation, callNode: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - bypass: typeof bypass; - } -} diff --git a/packages/canvas-three/three/src/nodes/core/CacheNode.d.ts b/packages/canvas-three/three/src/nodes/core/CacheNode.d.ts deleted file mode 100644 index 5906e04f9..000000000 --- a/packages/canvas-three/three/src/nodes/core/CacheNode.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import Node from './Node.js'; -import NodeCache from './NodeCache.js'; - -export default class CacheNode extends Node { - node: Node; - parent: boolean; - - readonly isCacheNode: true; - - constructor(node: Node, parent?: boolean); -} - -export const cache: (node: Node, cache?: NodeCache) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - cache: typeof cache; - } -} diff --git a/packages/canvas-three/three/src/nodes/core/ConstNode.d.ts b/packages/canvas-three/three/src/nodes/core/ConstNode.d.ts deleted file mode 100644 index 6e98afc35..000000000 --- a/packages/canvas-three/three/src/nodes/core/ConstNode.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import InputNode from './InputNode.js'; -import NodeBuilder from './NodeBuilder.js'; - -export default class ConstNode extends InputNode { - isConstNode: true; - constructor(value: Value, nodeType?: string | null); - - generateConst(builder: NodeBuilder): string; -} diff --git a/packages/canvas-three/three/src/nodes/core/ContextNode.d.ts b/packages/canvas-three/three/src/nodes/core/ContextNode.d.ts deleted file mode 100644 index f8936ed56..000000000 --- a/packages/canvas-three/three/src/nodes/core/ContextNode.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import Node from './Node.js'; -import { NodeBuilderContext } from './NodeBuilder.js'; - -export default class ContextNode extends Node { - isContextNode: true; - node: Node; - context: NodeBuilderContext; - - constructor(node: Node, context: NodeBuilderContext); -} - -export const context: (node: NodeRepresentation, context: NodeBuilderContext) => ShaderNodeObject; -export const label: (node: NodeRepresentation, label: string) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - context: typeof context; - label: typeof label; - } -} diff --git a/packages/canvas-three/three/src/nodes/core/IndexNode.d.ts b/packages/canvas-three/three/src/nodes/core/IndexNode.d.ts deleted file mode 100644 index 16e4eaf05..000000000 --- a/packages/canvas-three/three/src/nodes/core/IndexNode.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import Node from './Node.js'; - -export type IndexNodeScope = typeof IndexNode.VERTEX | typeof IndexNode.INSTANCE | typeof IndexNode.DRAW; - -export default class IndexNode extends Node { - scope: IndexNodeScope; - - readonly isInstanceNode: true; - - constructor(scope: IndexNodeScope); - - static VERTEX: 'vertex'; - static INSTANCE: 'instance'; - static DRAW: 'draw'; -} - -export const vertexIndex: ShaderNodeObject; -export const instanceIndex: ShaderNodeObject; -export const drawIndex: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/core/InputNode.d.ts b/packages/canvas-three/three/src/nodes/core/InputNode.d.ts deleted file mode 100644 index 78a1f733b..000000000 --- a/packages/canvas-three/three/src/nodes/core/InputNode.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import Node from './Node.js'; -import NodeBuilder from './NodeBuilder.js'; - -export type Precision = 'low' | 'medium' | 'high'; - -export default abstract class InputNode extends Node { - isInputNode: true; - value: Value; - precision: Precision | null; - - constructor(value: Value, nodeType?: string | null); - - getInputType(builder: NodeBuilder): string | null; - setPrecision(precision: Precision): this; -} diff --git a/packages/canvas-three/three/src/nodes/core/LightingModel.d.ts b/packages/canvas-three/three/src/nodes/core/LightingModel.d.ts deleted file mode 100644 index 5b868513d..000000000 --- a/packages/canvas-three/three/src/nodes/core/LightingModel.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -import Node from './Node.js'; -import NodeBuilder from './NodeBuilder.js'; -import StackNode from './StackNode.js'; - -export interface LightingModelReflectedLight { - directDiffuse: Node; - directSpecular: Node; - indirectDiffuse: Node; - indirectSpecular: Node; -} - -export interface LightingModelDirectInput { - lightDirection: Node; - lightColor: Node; - reflectedLight: LightingModelReflectedLight; -} - -export interface LightingModelDirectRectAreaInput { - lightColor: Node; - lightPosition: Node; - halfWidth: Node; - halfHeight: Node; - reflectedLight: LightingModelReflectedLight; - ltc_1: Node; - ltc_2: Node; -} - -export interface LightingModelIndirectInput { - radiance: Node; - irradiance: Node; - iblIrradiance: Node; - ambientOcclusion: Node; - reflectedLight: LightingModelReflectedLight; - backdrop: Node; - backdropAlpha: Node; - outgoingLight: Node; -} - -export default class LightingModel { - start(input: LightingModelIndirectInput, stack: StackNode, builder: NodeBuilder): void; - finish(input: LightingModelIndirectInput, stack: StackNode, builder: NodeBuilder): void; - direct(input: LightingModelDirectInput, stack: StackNode, builder: NodeBuilder): void; - directRectArea(input: LightingModelDirectRectAreaInput, stack: StackNode, builder: NodeBuilder): void; - indirect(input: LightingModelIndirectInput, stack: StackNode, builder: NodeBuilder): void; - ambientOcclusion(input: LightingModelIndirectInput, stack: StackNode, builder: NodeBuilder): void; -} diff --git a/packages/canvas-three/three/src/nodes/core/MRTNode.d.ts b/packages/canvas-three/three/src/nodes/core/MRTNode.d.ts deleted file mode 100644 index 073aa413d..000000000 --- a/packages/canvas-three/three/src/nodes/core/MRTNode.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Node } from '../Nodes.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import OutputStructNode from './OutputStructNode.js'; - -declare class MRTNode extends OutputStructNode { - outputNodes: { [name: string]: Node }; - - readonly isMRTNode: true; - - constructor(outputNodes: { [name: string]: Node }); - - getNode(name: string): Node; - - merge(mrtNode: MRTNode): ShaderNodeObject; -} - -export default MRTNode; - -export const mrt: (outputNodes: { [name: string]: Node }) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/core/Node.d.ts b/packages/canvas-three/three/src/nodes/core/Node.d.ts deleted file mode 100644 index 87d013ddf..000000000 --- a/packages/canvas-three/three/src/nodes/core/Node.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { EventDispatcher } from '../../core/EventDispatcher.js'; -import { NodeUpdateType } from './constants.js'; -import NodeBuilder from './NodeBuilder.js'; -import NodeFrame from './NodeFrame.js'; -interface NodeJSONMeta { - textures: { - [key: string]: unknown; - }; - images: { - [key: string]: unknown; - }; - nodes: { - [key: string]: NodeJSONIntermediateOutputData; - }; -} -interface NodeJSONMetadata { - version: number; - type: 'Node'; - generator: 'Node.toJSON'; -} -interface NodeJSONInputNodes { - [property: string]: - | string[] - | { - [index: string]: string | undefined; - } - | string - | undefined; -} -export interface NodeJSONInputData { - inputNodes?: NodeJSONInputNodes | undefined; - meta: { - textures: { - [key: string]: unknown; - }; - nodes: { - [key: string]: Node; - }; - }; -} -export interface NodeJSONIntermediateOutputData { - uuid: string; - type: string | undefined; - meta?: NodeJSONMeta | undefined; - metadata?: NodeJSONMetadata; - inputNodes?: NodeJSONInputNodes | undefined; - textures?: unknown[]; - images?: unknown[]; - nodes?: NodeJSONIntermediateOutputData[]; -} -interface NodeJSONOutputData { - uuid: string; - type: string | undefined; - metadata?: NodeJSONMetadata; - inputNodes?: NodeJSONInputNodes | undefined; - textures?: unknown[]; - images?: unknown[]; - nodes?: NodeJSONOutputData[]; -} -declare class Node extends EventDispatcher<{ - dispose: {}; -}> { - nodeType: string | null; - updateType: NodeUpdateType; - updateBeforeType: NodeUpdateType; - updateAfterType: NodeUpdateType; - uuid: string; - version: number; - _cacheKey: string | null; - _cacheKeyVersion: number; - global: boolean; - readonly isNode: true; - readonly id: number; - self?: this; - constructor(nodeType?: string | null); - set needsUpdate(value: boolean); - get type(): string | undefined; - onUpdate(callback: (this: this, frame: NodeFrame) => unknown, updateType: NodeUpdateType): this; - onFrameUpdate(callback: (this: this, frame: NodeFrame) => void): this; - onRenderUpdate(callback: (this: this, frame: NodeFrame) => void): this; - onObjectUpdate(callback: (this: this, frame: NodeFrame) => void): this; - onReference(callback: (this: this, frame: NodeBuilder | NodeFrame) => unknown): this; - getSelf(): this; - updateReference(state: NodeBuilder | NodeFrame): unknown; - isGlobal(builder: NodeBuilder): boolean; - getChildren(): Generator; - dispose(): void; - traverse(callback: (node: Node) => void): void; - getCacheKey(force?: boolean): string; - getHash(builder: NodeBuilder): string; - getUpdateType(): NodeUpdateType; - getUpdateBeforeType(): NodeUpdateType; - getUpdateAfterType(): NodeUpdateType; - getElementType(builder: NodeBuilder): 'bool' | 'int' | 'float' | 'vec2' | 'vec3' | 'vec4' | 'uint' | null; - getNodeType(builder: NodeBuilder): string | null; - getShared(builder: NodeBuilder): Node; - setup(builder: NodeBuilder): unknown; - increaseUsage(builder: NodeBuilder): number; - analyze(builder: NodeBuilder): void; - generate(builder: NodeBuilder, output?: string | null): string | null | undefined; - updateBefore(frame: NodeFrame): void; - updateAfter(frame: NodeFrame): void; - update(frame: NodeFrame): void; - build(builder: NodeBuilder, output?: string | null): string | null; - getSerializeChildren(): Generator; - serialize(json: NodeJSONIntermediateOutputData): void; - deserialize(json: NodeJSONInputData): void; - toJSON(meta?: NodeJSONMeta | string): NodeJSONOutputData; -} -export default Node; -export declare function addNodeClass( - type: string, - nodeClass: { - new (...args: any[]): Node; - } -): void; -export declare function createNodeFromType(type: string): Node | undefined; diff --git a/packages/canvas-three/three/src/nodes/core/NodeAttribute.d.ts b/packages/canvas-three/three/src/nodes/core/NodeAttribute.d.ts deleted file mode 100644 index c180fc279..000000000 --- a/packages/canvas-three/three/src/nodes/core/NodeAttribute.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import Node from './Node.js'; -declare class NodeAttribute { - readonly isNodeAttribute: true; - name: string; - type: string | null; - node: Node | null; - constructor(name: string, type: string | null, node?: Node | null); -} -export default NodeAttribute; diff --git a/packages/canvas-three/three/src/nodes/core/NodeBuilder.d.ts b/packages/canvas-three/three/src/nodes/core/NodeBuilder.d.ts deleted file mode 100644 index dbb62f640..000000000 --- a/packages/canvas-three/three/src/nodes/core/NodeBuilder.d.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { BufferGeometry } from '../../core/BufferGeometry.js'; -import { Object3D } from '../../core/Object3D.js'; -import { Material } from '../../materials/Material.js'; -import Renderer from '../../renderers/common/Renderer.js'; -import { Texture } from '../../textures/Texture.js'; -import FogNode from '../fog/FogNode.js'; -import LightsNode from '../lighting/LightsNode.js'; -import { NodeShaderStage } from './constants.js'; -import Node from './Node.js'; -import NodeAttribute from './NodeAttribute.js'; -import NodeCache from './NodeCache.js'; -import NodeParser from './NodeParser.js'; -import NodeUniform from './NodeUniform.js'; -import NodeVar from './NodeVar.js'; -import NodeVarying from './NodeVarying.js'; -import StackNode from './StackNode.js'; - -export type BuildStageOption = 'construct' | 'analyze' | 'generate'; - -export interface FlowData { - code: string; -} - -export interface NodeData { - vertex: { [key: string]: unknown }; - fragment: { [key: string]: unknown }; - compute: { [key: string]: unknown }; -} - -export type NodeBuilderContext = { [key: string]: unknown }; - -export default abstract class NodeBuilder { - object: Object3D; - material: Material; - geometry: BufferGeometry; - renderer: Renderer; - parser: NodeParser; - - nodes: Node[]; - updateNodes: Node[]; - hashNodes: { [hash: string]: Node }; - - lightsNode: LightsNode; - fogNode: FogNode; - - vertexShader: string; - fragmentShader: string; - computeShader: string; - - cache: NodeCache; - globalCache: NodeCache; - - /** - * @TODO used to be missing. check the actual type later - */ - flowsData: any; - - shaderStage: NodeShaderStage | null; - buildStage: BuildStageOption | null; - stack: StackNode; - - setHashNode(node: Node, hash: string): void; - addNode(node: Node): void; - get currentNode(): Node; - isFilteredTexture(texture: Texture): boolean; - getMethod(method: string): string; - getNodeFromHash(hash: string): Node; - - addFlow(shaderStage: NodeShaderStage, node: Node): Node; - - setContext(context: NodeBuilderContext): void; - getContext(): NodeBuilderContext; - setCache(cache: NodeCache): void; - getCache(): NodeCache; - getCacheFromNode(node: Node, parent?: boolean): NodeCache; - isAvailable(name: string): boolean; - - abstract getInstanceIndex(): string; - - abstract getDrawIndex(): string | null; - - abstract getFrontFacing(): string; - - abstract getFragCoord(): string; - - isFlipY(): boolean; - - // @TODO: rename to .generateConst() - getConst(type: string, value?: unknown): Node; - getType(type: string): string; - - generateMethod(method: string): string; - - getAttribute(name: string, type: string): NodeAttribute; - - getPropertyName(node: NodeVar | NodeUniform, shaderStage: NodeShaderStage): string; - isVector(type: string): boolean; - - isMatrix(type: string): boolean; - isReference(type: string): boolean; - getElementType(type: string): string | null; - getComponentType(type: string): string | null; - getVectorType(type: string): string; - getTypeFromLength(length: number): string; - getTypeLength(type: string): number; - getVectorFromMatrix(type: string): string; - getDataFromNode(node: Node, shaderStage?: NodeShaderStage): NodeData; - getNodeProperties(node: Node, shaderStage?: NodeShaderStage): { [key: string]: unknown }; - getUniformFromNode(node: Node, type: string, shaderStage?: NodeShaderStage, name?: string | null): NodeUniform; - getVarFromNode(node: Node, type: string, shaderStage?: NodeShaderStage): NodeVar; - getVaryFromNode(node: Node, type: string): NodeVarying; - getCodeFromNode(node: Node, type: string, shaderStage?: NodeShaderStage): string; - addFlowCode(code: string): void; - getFlowData(node: Node, shaderStage: NodeShaderStage): FlowData; - flowNode(node: Node): FlowData; - flowChildNode(node: Node, output?: string | null): FlowData; - flowNodeFromShaderStage(shaderStage: NodeShaderStage, node: Node, output?: string | null, propertyName?: string): FlowData; - hasGeometryAttribute(name: string): boolean; - abstract getAttributes(shaderStage: NodeShaderStage): string; - abstract getVaryings(shaderStage: NodeShaderStage): string; - getVars(shaderStage: NodeShaderStage): string; - abstract getUniforms(stage: NodeShaderStage): string; - getCodes(shaderStage: NodeShaderStage): string; - getHash(): string; - setShaderStage(shaderStage: NodeShaderStage): void; - getShaderStage(): NodeShaderStage; - setBuildStage(buildStage: BuildStageOption): void; - getBuildStage(): BuildStageOption; - abstract buildCode(): void; - build(): this; - format(snippet: string, fromType: string, toType: string): string; - getSignature(): string; -} diff --git a/packages/canvas-three/three/src/nodes/core/NodeCache.d.ts b/packages/canvas-three/three/src/nodes/core/NodeCache.d.ts deleted file mode 100644 index acca1a5a7..000000000 --- a/packages/canvas-three/three/src/nodes/core/NodeCache.d.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { BufferAttribute, TypedArray } from '../../core/BufferAttribute.js'; -import { InterleavedBuffer } from '../../core/InterleavedBuffer.js'; -import BufferAttributeNode from '../accessors/BufferAttributeNode.js'; -import Node from './Node.js'; -import NodeAttribute from './NodeAttribute.js'; -import NodeCode from './NodeCode.js'; -import NodeUniform from './NodeUniform.js'; -import NodeVar from './NodeVar.js'; -import NodeVarying from './NodeVarying.js'; -export interface ShaderStageNodeData { - properties?: - | ({ - outputNode: Node | null; - initialized?: boolean | undefined; - } & { - [K in `node${string}`]?: Node | undefined; - }) - | undefined; - bufferAttribute?: NodeAttribute | undefined; - structType?: Node | undefined; - uniform?: NodeUniform | undefined; - variable?: NodeVar | undefined; - varying?: NodeVarying | undefined; - code?: NodeCode | undefined; - usageCount?: number | undefined; - snippet?: string | undefined; - propertyName?: string | undefined; - propertySizeName?: string | undefined; -} -interface NodeData { - vertex?: ShaderStageNodeData | undefined; - fragment?: ShaderStageNodeData | undefined; - compute?: ShaderStageNodeData | undefined; - any?: ShaderStageNodeData | undefined; -} -interface BufferAttributeData { - node: BufferAttributeNode; -} -declare class NodeCache { - id: number; - nodesData: WeakMap; - parent: NodeCache | null; - constructor(parent?: NodeCache | null); - getData(node: Node): NodeData | undefined; - getData(node: TypedArray | InterleavedBuffer | BufferAttribute): BufferAttributeData | undefined; - setData(node: Node, data: NodeData): void; - setData(node: TypedArray | InterleavedBuffer | BufferAttribute, data: BufferAttributeData): void; -} -export default NodeCache; diff --git a/packages/canvas-three/three/src/nodes/core/NodeCode.d.ts b/packages/canvas-three/three/src/nodes/core/NodeCode.d.ts deleted file mode 100644 index a2f50b64d..000000000 --- a/packages/canvas-three/three/src/nodes/core/NodeCode.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default class NodeCode { - isNodeCode: true; - constructor(name: string, type: string, code?: string); -} diff --git a/packages/canvas-three/three/src/nodes/core/NodeFrame.d.ts b/packages/canvas-three/three/src/nodes/core/NodeFrame.d.ts deleted file mode 100644 index 6cc320e18..000000000 --- a/packages/canvas-three/three/src/nodes/core/NodeFrame.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { Object3D } from '../../core/Object3D.js'; -import { Material } from '../../materials/Material.js'; -import Renderer from '../../renderers/common/Renderer.js'; -import { Scene } from '../../scenes/Scene.js'; -import Node from './Node.js'; - -export default class NodeFrame { - time: number; - deltaTime: number; - - frameId: number; - renderId: number; - - startTime: number | null; - - frameMap: WeakMap; - frameBeforeMap: WeakMap; - renderMap: WeakMap; - renderBeforeMap: WeakMap; - - renderer: Renderer | null; - material: Material | null; - camera: Camera | null; - object: Object3D | null; - scene: Scene | null; - - constructor(); - - updateBeforeNode(node: Node): void; - - updateNode(node: Node): void; - update(): void; -} diff --git a/packages/canvas-three/three/src/nodes/core/NodeFunction.d.ts b/packages/canvas-three/three/src/nodes/core/NodeFunction.d.ts deleted file mode 100644 index b0eda0027..000000000 --- a/packages/canvas-three/three/src/nodes/core/NodeFunction.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import NodeFunctionInput from './NodeFunctionInput.js'; - -export default abstract class NodeFunction { - isNodeFunction: true; - type: string; - inputs: NodeFunctionInput[]; - name: string; - precision: string; - - constructor(type: string, inputs: NodeFunctionInput[], name?: string, precision?: string); - - abstract getCode(name?: string): string; -} diff --git a/packages/canvas-three/three/src/nodes/core/NodeFunctionInput.d.ts b/packages/canvas-three/three/src/nodes/core/NodeFunctionInput.d.ts deleted file mode 100644 index 7eccd7b5a..000000000 --- a/packages/canvas-three/three/src/nodes/core/NodeFunctionInput.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export default class NodeFunctionInput { - isNodeFunctionInput: true; - count: null | number; - qualifier: string; - isConst: boolean; - constructor(type: string, name: string, count?: number, qualifier?: string, isConst?: boolean); -} diff --git a/packages/canvas-three/three/src/nodes/core/NodeKeywords.d.ts b/packages/canvas-three/three/src/nodes/core/NodeKeywords.d.ts deleted file mode 100644 index 7811579c5..000000000 --- a/packages/canvas-three/three/src/nodes/core/NodeKeywords.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import Node from './Node.js'; -import NodeBuilder from './NodeBuilder.js'; -declare class NodeKeywords { - keywords: string[]; - nodes: { - [name: string]: Node; - }; - keywordsCallback: { - [name: string]: (name: string) => Node; - }; - constructor(); - getNode(name: string): Node; - addKeyword(name: string, callback: (name: string) => Node): this; - parse(code: string): Node[]; - include(builder: NodeBuilder, code: string): void; -} -export default NodeKeywords; diff --git a/packages/canvas-three/three/src/nodes/core/NodeParser.d.ts b/packages/canvas-three/three/src/nodes/core/NodeParser.d.ts deleted file mode 100644 index 25f5f9548..000000000 --- a/packages/canvas-three/three/src/nodes/core/NodeParser.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import NodeFunction from './NodeFunction.js'; -declare abstract class NodeParser { - abstract parseFunction(source: string): NodeFunction; -} -export default NodeParser; diff --git a/packages/canvas-three/three/src/nodes/core/NodeUniform.d.ts b/packages/canvas-three/three/src/nodes/core/NodeUniform.d.ts deleted file mode 100644 index 0267dec76..000000000 --- a/packages/canvas-three/three/src/nodes/core/NodeUniform.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import UniformNode from './UniformNode.js'; -declare class NodeUniform { - readonly isNodeUniform: true; - name: string; - type: string | null; - node: UniformNode; - needsUpdate: boolean | undefined; - constructor(name: string, type: string | null, node: UniformNode); - get value(): TValue; - set value(val: TValue); - get id(): number; - get groupNode(): import('./UniformGroupNode.js').default; -} -export default NodeUniform; diff --git a/packages/canvas-three/three/src/nodes/core/NodeUtils.d.ts b/packages/canvas-three/three/src/nodes/core/NodeUtils.d.ts deleted file mode 100644 index b286c85cc..000000000 --- a/packages/canvas-three/three/src/nodes/core/NodeUtils.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Color } from '../../math/Color.js'; -import { Matrix3 } from '../../math/Matrix3.js'; -import { Matrix4 } from '../../math/Matrix4.js'; -import { Vector2 } from '../../math/Vector2.js'; -import { Vector3 } from '../../math/Vector3.js'; -import { Vector4 } from '../../math/Vector4.js'; -import Node from './Node.js'; - -export interface NodeChild { - property: string; - index?: number | string; - childNode: Node; -} - -export function getCacheKey(object: Node, force?: boolean): string; -export function getNodeChildren(object: Node): Generator; -export function getValueType(value: unknown): string | null; -export function getValueFromType(type: string, ...params: number[]): Color | Vector2 | Vector3 | Vector4 | Matrix3 | Matrix4 | boolean | number | string | ArrayBufferLike | null; diff --git a/packages/canvas-three/three/src/nodes/core/NodeVar.d.ts b/packages/canvas-three/three/src/nodes/core/NodeVar.d.ts deleted file mode 100644 index 8d05467a6..000000000 --- a/packages/canvas-three/three/src/nodes/core/NodeVar.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare class NodeVar { - readonly isNodeVar: true; - name: string; - type: string | null; - constructor(name: string, type: string | null); -} -export default NodeVar; diff --git a/packages/canvas-three/three/src/nodes/core/NodeVarying.d.ts b/packages/canvas-three/three/src/nodes/core/NodeVarying.d.ts deleted file mode 100644 index 1149028d3..000000000 --- a/packages/canvas-three/three/src/nodes/core/NodeVarying.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import NodeVar from './NodeVar.js'; -declare class NodeVarying extends NodeVar { - needsInterpolation: boolean; - readonly isNodeVarying: true; - constructor(name: string, type: string | null); -} -export default NodeVarying; diff --git a/packages/canvas-three/three/src/nodes/core/OutputStructNode.d.ts b/packages/canvas-three/three/src/nodes/core/OutputStructNode.d.ts deleted file mode 100644 index dad2dfa79..000000000 --- a/packages/canvas-three/three/src/nodes/core/OutputStructNode.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import Node from './Node.js'; - -export default class OutputStructNode extends Node { - members: Node[]; - - readonly isOutputStructNode: true; - - constructor(...members: Node[]); -} - -export const outputStruct: (...members: Node[]) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/core/PropertyNode.d.ts b/packages/canvas-three/three/src/nodes/core/PropertyNode.d.ts deleted file mode 100644 index c5f594ca1..000000000 --- a/packages/canvas-three/three/src/nodes/core/PropertyNode.d.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import Node from './Node.js'; - -export default class PropertyNode extends Node { - name: string | null; - varying: boolean; - - readonly isPropertyNode: true; - - constructor(nodeType?: string | null, name?: string | null, varying?: boolean); -} - -export const property: (type?: string | null, name?: string | null) => ShaderNodeObject; -export const varyingProperty: (type?: string | null, name?: string | null) => ShaderNodeObject; - -export const diffuseColor: ShaderNodeObject; -export const emissive: ShaderNodeObject; -export const roughness: ShaderNodeObject; -export const metalness: ShaderNodeObject; -export const clearcoat: ShaderNodeObject; -export const clearcoatRoughness: ShaderNodeObject; -export const sheen: ShaderNodeObject; -export const sheenRoughness: ShaderNodeObject; -export const iridescence: ShaderNodeObject; -export const iridescenceIOR: ShaderNodeObject; -export const iridescenceThickness: ShaderNodeObject; -export const alphaT: ShaderNodeObject; -export const anisotropy: ShaderNodeObject; -export const anisotropyT: ShaderNodeObject; -export const anisotropyB: ShaderNodeObject; -export const specularColor: ShaderNodeObject; -export const specularF90: ShaderNodeObject; -export const shininess: ShaderNodeObject; -export const output: ShaderNodeObject; -export const dashSize: ShaderNodeObject; -export const gapSize: ShaderNodeObject; -export const pointWidth: ShaderNodeObject; -export const ior: ShaderNodeObject; -export const transmission: ShaderNodeObject; -export const thickness: ShaderNodeObject; -export const attenuationDistance: ShaderNodeObject; -export const attenuationColor: ShaderNodeObject; -export const dispersion: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/core/StackNode.d.ts b/packages/canvas-three/three/src/nodes/core/StackNode.d.ts deleted file mode 100644 index 7a6b12ff7..000000000 --- a/packages/canvas-three/three/src/nodes/core/StackNode.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import Node from './Node.js'; - -export default class StackNode extends Node { - isStackNode: true; - nodes: Node[]; - outputNode: Node | null; - - constructor(); - - add(node: Node): this; - - if(boolNode: Node, method: () => void): this; - - elseIf(node: Node, method: () => void): this; - - else(node: Node, method: () => void): this; -} diff --git a/packages/canvas-three/three/src/nodes/core/StructTypeNode.d.ts b/packages/canvas-three/three/src/nodes/core/StructTypeNode.d.ts deleted file mode 100644 index c91884e0d..000000000 --- a/packages/canvas-three/three/src/nodes/core/StructTypeNode.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Node from './Node.js'; -declare class StructTypeNode extends Node { - types: string[]; - readonly isStructTypeNode: true; - constructor(types: string[]); - getMemberTypes(): string[]; -} -export default StructTypeNode; diff --git a/packages/canvas-three/three/src/nodes/core/TempNode.d.ts b/packages/canvas-three/three/src/nodes/core/TempNode.d.ts deleted file mode 100644 index a5ebf5743..000000000 --- a/packages/canvas-three/three/src/nodes/core/TempNode.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Node from './Node.js'; -import NodeBuilder from './NodeBuilder.js'; - -export default class TempNode extends Node { - isTempNode: true; - - constructor(type: string | null); - - hasDependencies(builder: NodeBuilder): boolean; -} diff --git a/packages/canvas-three/three/src/nodes/core/UniformGroup.d.ts b/packages/canvas-three/three/src/nodes/core/UniformGroup.d.ts deleted file mode 100644 index f0b554818..000000000 --- a/packages/canvas-three/three/src/nodes/core/UniformGroup.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export default class UniformGroup { - name: string; - - readonly isUniformGroup: true; - - constructor(name: string); -} diff --git a/packages/canvas-three/three/src/nodes/core/UniformGroupNode.d.ts b/packages/canvas-three/three/src/nodes/core/UniformGroupNode.d.ts deleted file mode 100644 index 37f89b59b..000000000 --- a/packages/canvas-three/three/src/nodes/core/UniformGroupNode.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import Node from './Node.js'; - -export default class UniformGroupNode extends Node { - name: string; - version: number; - - shared: boolean; - - readonly isUniformGroup: true; - - constructor(name: string, shared?: boolean); - - set needsUpdate(value: boolean); -} - -export const uniformGroup: (name: string) => UniformGroupNode; -export const sharedUniformGroup: (name: string) => UniformGroupNode; - -export const frameGroup: UniformGroupNode; -export const renderGroup: UniformGroupNode; -export const objectGroup: UniformGroupNode; diff --git a/packages/canvas-three/three/src/nodes/core/UniformNode.d.ts b/packages/canvas-three/three/src/nodes/core/UniformNode.d.ts deleted file mode 100644 index 0344ebbaf..000000000 --- a/packages/canvas-three/three/src/nodes/core/UniformNode.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NodeUpdateType } from './constants.js'; -import InputNode from './InputNode.js'; -import Node from './Node.js'; -import NodeBuilder from './NodeBuilder.js'; -import NodeFrame from './NodeFrame.js'; -import UniformGroupNode from './UniformGroupNode.js'; -declare class UniformNode extends InputNode { - readonly isUniformNode: true; - name: string; - groupNode: UniformGroupNode; - constructor(value: TValue, nodeType?: string | null); - label(name: string): this; - setGroup(group: UniformGroupNode): this; - getGroup(): UniformGroupNode; - getUniformHash(builder: NodeBuilder): string; - onUpdate(callback: (frame: NodeFrame, self: this) => TValue | undefined, updateType: NodeUpdateType): this; - generate(builder: NodeBuilder, output: string | null): string; -} -export default UniformNode; -export declare const uniform: (arg1: InputNode | TValue, arg2?: Node | string) => import('../shadernode/ShaderNode.js').ShaderNodeObject>; diff --git a/packages/canvas-three/three/src/nodes/core/VarNode.d.ts b/packages/canvas-three/three/src/nodes/core/VarNode.d.ts deleted file mode 100644 index 009c3e87a..000000000 --- a/packages/canvas-three/three/src/nodes/core/VarNode.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { OperatorNodeOp } from '../math/OperatorNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import Node from './Node.js'; - -export default class VarNode extends Node { - node: Node; - name: string | null; - - readonly isVarNode: true; - - constructor(node: Node, name?: string | null); - - op(op: OperatorNodeOp, ...params: Node[]): this; - assign(...params: Node[]): this; - add(...params: Node[]): this; - sub(...params: Node[]): this; - mul(...params: Node[]): this; - div(...params: Node[]): this; -} - -export const temp: (node: NodeRepresentation, name?: string | null) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - temp: typeof temp; - toVar: typeof temp; - } -} diff --git a/packages/canvas-three/three/src/nodes/core/VaryingNode.d.ts b/packages/canvas-three/three/src/nodes/core/VaryingNode.d.ts deleted file mode 100644 index d054c83f0..000000000 --- a/packages/canvas-three/three/src/nodes/core/VaryingNode.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import Node from './Node.js'; -import NodeBuilder from './NodeBuilder.js'; -import NodeVarying from './NodeVarying.js'; - -export default class VaryingNode extends Node { - node: Node; - name: string | null; - - constructor(node: Node, name?: string | null); - - setupVarying(builder: NodeBuilder): NodeVarying; -} - -export const varying: (node: NodeRepresentation, name?: string) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - varying: typeof varying; - } -} diff --git a/packages/canvas-three/three/src/nodes/core/constants.d.ts b/packages/canvas-three/three/src/nodes/core/constants.d.ts deleted file mode 100644 index 1f85223c3..000000000 --- a/packages/canvas-three/three/src/nodes/core/constants.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -export declare const NodeShaderStage: { - readonly VERTEX: 'vertex'; - readonly FRAGMENT: 'fragment'; -}; -export declare const NodeUpdateType: { - readonly NONE: 'none'; - readonly FRAME: 'frame'; - readonly RENDER: 'render'; - readonly OBJECT: 'object'; -}; -export declare const NodeType: { - readonly BOOLEAN: 'bool'; - readonly INTEGER: 'int'; - readonly FLOAT: 'float'; - readonly VECTOR2: 'vec2'; - readonly VECTOR3: 'vec3'; - readonly VECTOR4: 'vec4'; - readonly MATRIX2: 'mat2'; - readonly MATRIX3: 'mat3'; - readonly MATRIX4: 'mat4'; -}; -export type NodeShaderStage = 'vertex' | 'fragment' | 'compute'; -export type NodeUpdateType = 'none' | 'frame' | 'render' | 'object'; -export declare const defaultShaderStages: NodeShaderStage[]; -export declare const defaultBuildStages: string[]; -export declare const shaderStages: NodeShaderStage[]; -export declare const vectorComponents: string[]; diff --git a/packages/canvas-three/three/src/nodes/display/AfterImageNode.d.ts b/packages/canvas-three/three/src/nodes/display/AfterImageNode.d.ts deleted file mode 100644 index 54bd78ffe..000000000 --- a/packages/canvas-three/three/src/nodes/display/AfterImageNode.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import TextureNode from '../accessors/TextureNode.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import UniformNode from '../core/UniformNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class AfterImageNode extends TempNode { - textureNode: TextureNode; - textureNodeOld: Node; - damp: UniformNode; - - constructor(textureNode: Node, damp?: number); - - getTextureNode(): TextureNode; - - setSize(width: number, height: number): void; -} - -export const afterImage: (node: Node, damp?: number) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - afterImage: typeof afterImage; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/AnamorphicNode.d.ts b/packages/canvas-three/three/src/nodes/display/AnamorphicNode.d.ts deleted file mode 100644 index 47d2c4433..000000000 --- a/packages/canvas-three/three/src/nodes/display/AnamorphicNode.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Vector2 } from '../../math/Vector2.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class AnamorphicNode extends TempNode { - textureNode: Node; - thresholdNode: Node; - scaleNode: Node; - samples: number; - resolution: Vector2; - - constructor(textureNode: Node, thresholdNode: Node, scaleNode: Node, samples: number); - - getTextureNode(): Node; - - setSize(width: number, height: number): void; -} - -export const anamorphic: (node: Node, threshold?: NodeRepresentation, scale?: NodeRepresentation, samples?: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - anamorphic: typeof anamorphic; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/BlendModeNode.d.ts b/packages/canvas-three/three/src/nodes/display/BlendModeNode.d.ts deleted file mode 100644 index fb86b66fd..000000000 --- a/packages/canvas-three/three/src/nodes/display/BlendModeNode.d.ts +++ /dev/null @@ -1,43 +0,0 @@ -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { JoinNode } from '../Nodes.js'; -import { NodeRepresentation, ShaderNode, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export const BurnNode: (args: { base: Node; blend: Node }) => ShaderNodeObject; - -export const DodgeNode: (args: { base: Node; blend: Node }) => ShaderNodeObject; - -export const ScreenNode: (args: { base: Node; blend: Node }) => ShaderNodeObject; - -export const OverlayNode: (args: { base: Node; blend: Node }) => ShaderNodeObject; - -export type BlendMode = typeof BlendModeNode.BURN | typeof BlendModeNode.DODGE | typeof BlendModeNode.SCREEN | typeof BlendModeNode.OVERLAY; - -export default class BlendModeNode extends TempNode { - static BURN: 'burn'; - static DODGE: 'dodge'; - static SCREEN: 'screen'; - static OVERLAY: 'overlay'; - - baseNode: Node; - blendMode: BlendMode; - blendNode: Node; - - constructor(blendMode: BlendMode, baseNode: Node, blendNode: Node); - - setup(): Node; -} - -export const burn: (baseNode: NodeRepresentation, blendNode?: NodeRepresentation) => ShaderNodeObject; -export const dodge: (baseNode: NodeRepresentation, blendNode?: NodeRepresentation) => ShaderNodeObject; -export const overlay: (baseNode: NodeRepresentation, blendNode?: NodeRepresentation) => ShaderNodeObject; -export const screen: (baseNode: NodeRepresentation, blendNode?: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - burn: typeof burn; - dodge: typeof dodge; - overlay: typeof overlay; - screen: typeof screen; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/BloomNode.d.ts b/packages/canvas-three/three/src/nodes/display/BloomNode.d.ts deleted file mode 100644 index 8e331c145..000000000 --- a/packages/canvas-three/three/src/nodes/display/BloomNode.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import TextureNode from '../accessors/TextureNode.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import UniformNode from '../core/UniformNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -declare class BloomNode extends TempNode { - inputNode: Node; - strength: UniformNode; - radius: UniformNode; - threshold: UniformNode; - - smoothWidth: UniformNode; - - constructor(inputNode: Node, strength?: number, radius?: number, threshold?: number); - - getTexture(): ShaderNodeObject; - - setSize(width: number, height: number): void; -} - -export const bloom: (node: NodeRepresentation, strength?: number, radius?: number, threshold?: number) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - bloom: typeof bloom; - } -} - -export default BloomNode; diff --git a/packages/canvas-three/three/src/nodes/display/ColorAdjustmentNode.d.ts b/packages/canvas-three/three/src/nodes/display/ColorAdjustmentNode.d.ts deleted file mode 100644 index a608a4319..000000000 --- a/packages/canvas-three/three/src/nodes/display/ColorAdjustmentNode.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import TempNode from '../core/TempNode.js'; -import MathNode from '../math/MathNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export type ColorAdjustmentMethod = typeof ColorAdjustmentNode.SATURATION | typeof ColorAdjustmentNode.VIBRANCE | typeof ColorAdjustmentNode.HUE; - -export default class ColorAdjustmentNode extends TempNode { - static SATURATION: 'saturation'; - static VIBRANCE: 'vibrance'; - static HUE: 'hue'; - - method: ColorAdjustmentMethod; - - colorNode: Node; - adjustmentNode: Node; - - constructor(method: ColorAdjustmentMethod, colorNode: Node, adjustmentNode?: Node); -} - -export const saturation: (colorNode: NodeRepresentation, adjustmentNode?: NodeRepresentation) => ShaderNodeObject; -export const vibrance: (colorNode: NodeRepresentation, adjustmentNode?: NodeRepresentation) => ShaderNodeObject; -export const hue: (colorNode: NodeRepresentation, adjustmentNode?: NodeRepresentation) => ShaderNodeObject; - -export const luminance: (a: NodeRepresentation, b: NodeRepresentation) => ShaderNodeObject; - -export const threshold: (color: NodeRepresentation, thershold: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - saturation: typeof saturation; - vibrance: typeof vibrance; - hue: typeof hue; - threshold: typeof threshold; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/ColorSpaceNode.d.ts b/packages/canvas-three/three/src/nodes/display/ColorSpaceNode.d.ts deleted file mode 100644 index abc60257f..000000000 --- a/packages/canvas-three/three/src/nodes/display/ColorSpaceNode.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { ColorSpace } from '../../constants.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export type ColorSpaceNodeMethod = typeof ColorSpaceNode.LINEAR_TO_LINEAR | typeof ColorSpaceNode.LINEAR_TO_sRGB | typeof ColorSpaceNode.sRGB_TO_LINEAR; - -export default class ColorSpaceNode extends TempNode { - static LINEAR_TO_LINEAR: 'LinearToLinear'; - static LINEAR_TO_sRGB: 'LinearTosRGB'; - static sRGB_TO_LINEAR: 'sRGBToLinear'; - - method: ColorSpaceNodeMethod; - node: Node; - - constructor(method: ColorSpaceNodeMethod | null, node: Node); -} - -export const linearToColorSpace: (node: NodeRepresentation, colorSpace: ColorSpace) => ShaderNodeObject; -export const colorSpaceToLinear: (node: NodeRepresentation, colorSpace: ColorSpace) => ShaderNodeObject; - -export const linearTosRGB: (node: NodeRepresentation) => ShaderNodeObject; -export const sRGBToLinear: (node: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - linearTosRGB: typeof linearTosRGB; - sRGBToLinear: typeof sRGBToLinear; - linearToColorSpace: typeof linearToColorSpace; - colorSpaceToLinear: typeof colorSpaceToLinear; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/DenoiseNode.d.ts b/packages/canvas-three/three/src/nodes/display/DenoiseNode.d.ts deleted file mode 100644 index afc285537..000000000 --- a/packages/canvas-three/three/src/nodes/display/DenoiseNode.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { Matrix4 } from '../../math/Matrix4.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import UniformNode from '../core/UniformNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -declare class DenoiseNode extends TempNode { - textureNode: Node; - depthNode: Node; - normalNode: Node; - noiseNode: Node; - - cameraProjectionMatrixInversion: UniformNode; - lumaPhi: UniformNode; - depthPhi: UniformNode; - normalPhi: UniformNode; - radius: UniformNode; - index: UniformNode; - - constructor(textureNode: Node, depthNode: Node, normalNode: Node, noiseNode: Node, camera: Camera); -} - -export const denoise: (node: NodeRepresentation, depthNode: NodeRepresentation, normalNode: NodeRepresentation, noiseNode: NodeRepresentation, camera: Camera) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - denoise: typeof denoise; - } -} - -export default DenoiseNode; diff --git a/packages/canvas-three/three/src/nodes/display/DepthOfFieldNode.d.ts b/packages/canvas-three/three/src/nodes/display/DepthOfFieldNode.d.ts deleted file mode 100644 index f8b88c029..000000000 --- a/packages/canvas-three/three/src/nodes/display/DepthOfFieldNode.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import TextureNode from '../accessors/TextureNode.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import UniformNode from '../core/UniformNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class DepthOfFieldNode extends TempNode { - textureNode: TextureNode; - viewZNode: Node; - - focus: UniformNode; - aperture: UniformNode; - maxblur: UniformNode; - - constructor(textureNode: TextureNode, viewZNode: Node, focusNode: Node, apertureNode: Node, maxblurNode: Node); -} - -export const dof: (node: NodeRepresentation, viewZNode: NodeRepresentation, focus?: NodeRepresentation, aperture?: NodeRepresentation, maxblur?: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - dof: typeof dof; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/DotScreenNode.d.ts b/packages/canvas-three/three/src/nodes/display/DotScreenNode.d.ts deleted file mode 100644 index 465de6217..000000000 --- a/packages/canvas-three/three/src/nodes/display/DotScreenNode.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Vector2 } from '../../math/Vector2.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import UniformNode from '../core/UniformNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class DotScreenNode extends TempNode { - inputNode: Node; - center: UniformNode; - angle: UniformNode; - scale: UniformNode; - - constructor(inputNode: Node, center?: Vector2, angle?: number, scale?: number); -} - -export const dotScreen: (node: NodeRepresentation, center?: Vector2, angle?: number, scale?: number) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - dotScreen: typeof dotScreen; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/FXAANode.d.ts b/packages/canvas-three/three/src/nodes/display/FXAANode.d.ts deleted file mode 100644 index e85fb80ec..000000000 --- a/packages/canvas-three/three/src/nodes/display/FXAANode.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import TextureNode from '../accessors/TextureNode.js'; -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -declare class FXAANode extends TempNode { - textureNode: TextureNode; - - constructor(textureNode: TextureNode); -} - -export const fxaa: (node: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - fxaa: typeof fxaa; - } -} - -export default FXAANode; diff --git a/packages/canvas-three/three/src/nodes/display/FilmNode.d.ts b/packages/canvas-three/three/src/nodes/display/FilmNode.d.ts deleted file mode 100644 index 476ec70ca..000000000 --- a/packages/canvas-three/three/src/nodes/display/FilmNode.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -declare class FilmNode extends TempNode { - inputNode: Node; - intensityNode: Node | null; - uvNode: Node | null; - - constructor(inputNode: Node, intensityNode?: Node | null, uvNode?: Node | null); -} - -export const film: (inputNode: NodeRepresentation, intensityNode?: NodeRepresentation | null, uvNode?: NodeRepresentation | null) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - film: typeof film; - } -} - -export default FilmNode; diff --git a/packages/canvas-three/three/src/nodes/display/FrontFacingNode.d.ts b/packages/canvas-three/three/src/nodes/display/FrontFacingNode.d.ts deleted file mode 100644 index 5c1cc04d6..000000000 --- a/packages/canvas-three/three/src/nodes/display/FrontFacingNode.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class FrontFacingNode extends Node { - isFrontFacingNode: true; - constructor(); -} - -export const frontFacing: ShaderNodeObject; -export const faceDirection: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/display/GTAONode.d.ts b/packages/canvas-three/three/src/nodes/display/GTAONode.d.ts deleted file mode 100644 index 4eb5d2793..000000000 --- a/packages/canvas-three/three/src/nodes/display/GTAONode.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { Matrix4 } from '../../math/Matrix4.js'; -import { Vector2 } from '../../math/Vector2.js'; -import TextureNode from '../accessors/TextureNode.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import UniformNode from '../core/UniformNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -declare class GTAONode extends TempNode { - depthNode: Node; - normalNode: Node; - - radius: ShaderNodeObject>; - resolution: ShaderNodeObject>; - thickness: ShaderNodeObject>; - distanceExponent: ShaderNodeObject>; - distanceFallOff: ShaderNodeObject>; - scale: ShaderNodeObject>; - noiseNode: ShaderNodeObject; - - cameraProjectionMatrix: ShaderNodeObject>; - cameraProjectionMatrixInverse: ShaderNodeObject>; - - SAMPLES: ShaderNodeObject>; - - constructor(depthNode: Node, normalNode: Node, camera: Camera); - - getTextureNode(): ShaderNodeObject; - - setSize(width: number, height: number): void; -} - -export const ao: (depthNode: NodeRepresentation, normalNode: NodeRepresentation, camera: Camera) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - ao: typeof ao; - } -} - -export default GTAONode; diff --git a/packages/canvas-three/three/src/nodes/display/GaussianBlurNode.d.ts b/packages/canvas-three/three/src/nodes/display/GaussianBlurNode.d.ts deleted file mode 100644 index 54bb0d239..000000000 --- a/packages/canvas-three/three/src/nodes/display/GaussianBlurNode.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Vector2 } from '../../math/Vector2.js'; -import TextureNode from '../accessors/TextureNode.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class GaussianBlurNode extends TempNode { - textureNode: TextureNode; - directionNode: Node | null; - sigma: number; - - resolution: Vector2; - - constructor(textureNode: TextureNode, directionNode?: Node | null, sigma?: number); - - setSize(width: number, height: number): void; - - getTextureNode(): TextureNode; -} - -export const gaussianBlur: (node: NodeRepresentation, directionNode?: NodeRepresentation | null, sigma?: number) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - gaussianBlur: typeof gaussianBlur; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/Lut3DNode.d.ts b/packages/canvas-three/three/src/nodes/display/Lut3DNode.d.ts deleted file mode 100644 index 6d88b7959..000000000 --- a/packages/canvas-three/three/src/nodes/display/Lut3DNode.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Data3DTexture } from '../../textures/Data3DTexture.js'; -import Texture3DNode from '../accessors/Texture3DNode.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import UniformNode from '../core/UniformNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -declare class Lut3DNode extends TempNode { - inputNode: Node; - lutNode: Texture3DNode; - size: ShaderNodeObject>; - intensityNode: UniformNode; - - constructor(inputNode: Node, lutNode: UniformNode, size: number, intensityNode: UniformNode); -} - -export const lut3D: (node: NodeRepresentation, lut: NodeRepresentation, size: number, intensity: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - lut3D: typeof lut3D; - } -} - -export default Lut3DNode; diff --git a/packages/canvas-three/three/src/nodes/display/NormalMapNode.d.ts b/packages/canvas-three/three/src/nodes/display/NormalMapNode.d.ts deleted file mode 100644 index b0ebbcac3..000000000 --- a/packages/canvas-three/three/src/nodes/display/NormalMapNode.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { NormalMapTypes } from '../../constants.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class NormalMapNode extends TempNode { - node: Node; - scaleNode: Node | null; - - normalMapType: NormalMapTypes; - - constructor(node: Node, scaleNode?: Node | null); -} - -export const normalMap: (node: Node, scaleNode?: Node) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - normalMap: typeof normalMap; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/PassNode.d.ts b/packages/canvas-three/three/src/nodes/display/PassNode.d.ts deleted file mode 100644 index bfb55fb8f..000000000 --- a/packages/canvas-three/three/src/nodes/display/PassNode.d.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { RenderTarget, RenderTargetOptions } from '../../core/RenderTarget.js'; -import { Scene } from '../../scenes/Scene.js'; -import { Texture } from '../../textures/Texture.js'; -import TextureNode from '../accessors/TextureNode.js'; -import MRTNode from '../core/MRTNode.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -declare class PassTextureNode extends TextureNode { - passNode: PassNode; - - constructor(passNode: PassNode, texture: Texture); -} - -declare class PassMultipleTextureNode extends PassTextureNode { - textureName: string; - - constructor(passNode: PassNode, textureName: string); -} - -declare class PassNode extends TempNode { - scope: PassNodeScope; - scene: Scene; - camera: Camera; - - renderTarget: RenderTarget; - - readonly isPassNode: true; - - constructor(scope: PassNodeScope, scene: Scene, camera: Camera, options?: RenderTargetOptions); - - setMRT(mrt: MRTNode | null): this; - - getMRT(): MRTNode | null; - - getTexture(name: string): Texture; - - getTextureNode(name?: string): ShaderNodeObject; - - getViewZNode(name?: string): ShaderNodeObject; - - getLinearDepthNode(name?: string): ShaderNodeObject; - - setSize(width: number, height: number): void; - - setPixelRatio(pixelRatio: number): void; - - dispose(): void; - - static COLOR: 'color'; - static DEPTH: 'depth'; -} - -export type PassNodeScope = typeof PassNode.COLOR | typeof PassNode.DEPTH; - -export default PassNode; - -export const pass: (scene: Scene, camera: Camera, options?: RenderTargetOptions) => ShaderNodeObject; -export const passTexture: (pass: PassNode, texture: Texture) => ShaderNodeObject; -export const depthPass: (scene: Scene, camera: Camera) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/display/PixelationPassNode.d.ts b/packages/canvas-three/three/src/nodes/display/PixelationPassNode.d.ts deleted file mode 100644 index cc156d7b2..000000000 --- a/packages/canvas-three/three/src/nodes/display/PixelationPassNode.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { Scene } from '../../scenes/Scene.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import UniformNode from '../core/UniformNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import PassNode from './PassNode.js'; - -declare class PixelationNode extends TempNode { - textureNode: Node; - depthNode: Node; - normalNode: Node; - - pixelSize: Node; - normalEdgeStrength: Node; - depthEdgeStrength: Node; - - constructor(textureNode: Node, depthNode: Node, normalNode: Node, pixelSize: Node, normalEdgeStrength: Node, depthEdgeStrength: Node); -} - -declare const pixelation: (node: NodeRepresentation, depthNode: NodeRepresentation, normalNode: NodeRepresentation, pixelSize?: number, normalEdgeStrength?: number, depthEdgeStrength?: number) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - pixelation: typeof pixelation; - } -} - -declare class PixelationPassNode extends PassNode { - pixelSize: UniformNode; - normalEdgeStrength: UniformNode; - depthEdgeStrength: UniformNode; - - readonly isPixelationPassNode: true; - - constructor(scene: Scene, camera: Camera, pixelSize: number, normalEdgeStrength: number, depthEdgeStrength: number); -} - -export const pixelationPass: (scene: Scene, camera: Camera, pixelSize: UniformNode, normalEdgeStrength: UniformNode, depthEdgeStrength: UniformNode) => ShaderNodeObject; - -export default PixelationPassNode; diff --git a/packages/canvas-three/three/src/nodes/display/PosterizeNode.d.ts b/packages/canvas-three/three/src/nodes/display/PosterizeNode.d.ts deleted file mode 100644 index 1821a9ba1..000000000 --- a/packages/canvas-three/three/src/nodes/display/PosterizeNode.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class PosterizeNode extends Node { - sourceNode: Node; - stepsNode: Node; - - constructor(sourceNode: Node, stepsNode: Node); -} - -export const posterize: (sourceNode: NodeRepresentation, stepsNode: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - posterize: typeof posterize; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/RGBShiftNode.d.ts b/packages/canvas-three/three/src/nodes/display/RGBShiftNode.d.ts deleted file mode 100644 index a100e013d..000000000 --- a/packages/canvas-three/three/src/nodes/display/RGBShiftNode.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import TextureNode from '../accessors/TextureNode.js'; -import TempNode from '../core/TempNode.js'; -import UniformNode from '../core/UniformNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class RGBShiftNode extends TempNode { - textureNode: TextureNode; - amount: UniformNode; - angle: UniformNode; - - constructor(textureNode: TextureNode, amount?: number, angle?: number); - - getTextureNode(): TextureNode; - - setSize(width: number, height: number): void; -} - -export const rgbShift: (node: NodeRepresentation, amount?: number, angle?: number) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - rgbShift: typeof rgbShift; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/RenderOutputNode.d.ts b/packages/canvas-three/three/src/nodes/display/RenderOutputNode.d.ts deleted file mode 100644 index 641360946..000000000 --- a/packages/canvas-three/three/src/nodes/display/RenderOutputNode.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { ColorSpace, ToneMapping } from '../../constants.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -declare class RenderOutputNode extends TempNode { - colorNode: Node; - toneMapping: ToneMapping | null; - outputColorSpace: ColorSpace | null; - - readonly isRenderOutput: true; - - constructor(colorNode: Node, toneMapping?: ToneMapping | null, outputColorSpace?: ColorSpace | null); -} - -export default RenderOutputNode; - -export const renderOutput: (color: NodeRepresentation, toneMapping?: ToneMapping | null, outputColorSpace?: ColorSpace | null) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - renderOutput: typeof renderOutput; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/SobelOperatorNode.d.ts b/packages/canvas-three/three/src/nodes/display/SobelOperatorNode.d.ts deleted file mode 100644 index 1f03366cf..000000000 --- a/packages/canvas-three/three/src/nodes/display/SobelOperatorNode.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import TextureNode from '../accessors/TextureNode.js'; -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class SobelOperatorNode extends TempNode { - textureNode: TextureNode; - - constructor(textureNode: TextureNode); -} - -export const sobel: (node: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - sobel: typeof sobel; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/ToneMappingNode.d.ts b/packages/canvas-three/three/src/nodes/display/ToneMappingNode.d.ts deleted file mode 100644 index 8d9a72402..000000000 --- a/packages/canvas-three/three/src/nodes/display/ToneMappingNode.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ToneMapping } from '../../constants.js'; -import RendererReferenceNode from '../accessors/RendererReferenceNode.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -// exposure only -export const LinearToneMappingNode: Node; - -export default class ToneMappingNode extends TempNode { - toneMapping: ToneMapping; - exposureNode: Node; - colorNode: Node | null; - - constructor(toneMapping: ToneMapping, exposureNode?: Node, colorNode?: Node | null); -} - -export const toneMapping: (mapping: ToneMapping, exposure: NodeRepresentation, color?: NodeRepresentation) => ShaderNodeObject; -export const toneMappingExposure: ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - toneMapping: (color: NodeRepresentation, mapping?: NodeRepresentation, exposure?: NodeRepresentation) => ShaderNodeObject; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/TransitionNode.d.ts b/packages/canvas-three/three/src/nodes/display/TransitionNode.d.ts deleted file mode 100644 index 98a9cca09..000000000 --- a/packages/canvas-three/three/src/nodes/display/TransitionNode.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import TextureNode from '../accessors/TextureNode.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import UniformNode from '../core/UniformNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -declare class TransitionNode extends TempNode { - textureNodeA: TextureNode; - textureNodeB: TextureNode; - mixTextureNode: TextureNode; - - mixRatioNode: Node; - thresholdNode: Node; - useTextureNode: Node; - - constructor(textureNodeA: TextureNode, textureNodeB: TextureNode, mixTextureNode: TextureNode, mixRatioNode: Node, thresholdNode: Node, useTextureNode: Node); -} - -export const transition: (node: NodeRepresentation, nodeB: NodeRepresentation, mixTexture: NodeRepresentation, mixRatio: UniformNode, threshold: UniformNode, useTexture: UniformNode) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - transition: typeof transition; - } -} - -export default TransitionNode; diff --git a/packages/canvas-three/three/src/nodes/display/ViewportDepthNode.d.ts b/packages/canvas-three/three/src/nodes/display/ViewportDepthNode.d.ts deleted file mode 100644 index dd2ad9349..000000000 --- a/packages/canvas-three/three/src/nodes/display/ViewportDepthNode.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class ViewportDepthNode extends Node { - scope: ViewportDepthNodeScope; - valueNode: Node; - - readonly isViewportDepthNode: true; - - constructor(scope: ViewportDepthNodeScope, valueNode?: Node | null); - - static DEPTH: 'depth'; - static LINEAR_DEPTH: 'linearDepth'; -} - -export type ViewportDepthNodeScope = typeof ViewportDepthNode.DEPTH | typeof ViewportDepthNode.LINEAR_DEPTH; - -export const viewZToOrthographicDepth: (viewZ: Node, near: Node, far: Node) => Node; - -export const orthographicDepthToViewZ: (depth: Node, near: Node, far: Node) => Node; - -export const viewZToPerspectiveDepth: (viewZ: Node, near: Node, far: Node) => Node; - -export const perspectiveDepthToViewZ: (depth: Node, near: Node, far: Node) => Node; - -export const depth: ShaderNodeObject; -export const linearDepth: (valueNode?: Node | null) => ShaderNodeObject; -export const viewportLinearDepth: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/display/ViewportDepthTextureNode.d.ts b/packages/canvas-three/three/src/nodes/display/ViewportDepthTextureNode.d.ts deleted file mode 100644 index 6a9831573..000000000 --- a/packages/canvas-three/three/src/nodes/display/ViewportDepthTextureNode.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import ViewportTextureNode from './ViewportTextureNode.js'; - -export default class ViewportDepthTextureNode extends ViewportTextureNode { - constructor(uvNode?: Node, levelNode?: Node | null); -} - -export const viewportDepthTexture: (uvNode?: NodeRepresentation, levelNode?: NodeRepresentation) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/display/ViewportNode.d.ts b/packages/canvas-three/three/src/nodes/display/ViewportNode.d.ts deleted file mode 100644 index 70976f279..000000000 --- a/packages/canvas-three/three/src/nodes/display/ViewportNode.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export type ViewportNodeScope = typeof ViewportNode.COORDINATE | typeof ViewportNode.RESOLUTION | typeof ViewportNode.TOP_LEFT | typeof ViewportNode.BOTTOM_LEFT | typeof ViewportNode.TOP_RIGHT | typeof ViewportNode.BOTTOM_RIGHT; - -export default class ViewportNode extends Node { - static COORDINATE: 'coordinate'; - static RESOLUTION: 'resolution'; - static TOP_LEFT: 'topLeft'; - static BOTTOM_LEFT: 'bottomLeft'; - static TOP_RIGHT: 'topRight'; - static BOTTOM_RIGHT: 'bottomRight'; - - scope: ViewportNodeScope; - isViewportNode: true; - - constructor(scope: ViewportNodeScope); -} - -export const viewportCoordinate: ShaderNodeObject; -export const viewportResolution: ShaderNodeObject; -export const viewportTopLeft: ShaderNodeObject; -export const viewportBottomLeft: ShaderNodeObject; -export const viewportTopRight: ShaderNodeObject; -export const viewportBottomRight: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/display/ViewportSharedTextureNode.d.ts b/packages/canvas-three/three/src/nodes/display/ViewportSharedTextureNode.d.ts deleted file mode 100644 index 17b9d4553..000000000 --- a/packages/canvas-three/three/src/nodes/display/ViewportSharedTextureNode.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import ViewportTextureNode from './ViewportTextureNode.js'; - -export default class ViewportSharedTextureNode extends ViewportTextureNode { - constructor(uvNode?: Node, levelNode?: Node | null); -} - -export const viewportSharedTexture: (uvNode?: Node, levelNode?: Node | null) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - viewportSharedTexture: typeof viewportSharedTexture; - } -} diff --git a/packages/canvas-three/three/src/nodes/display/ViewportTextureNode.d.ts b/packages/canvas-three/three/src/nodes/display/ViewportTextureNode.d.ts deleted file mode 100644 index 8dabb44e9..000000000 --- a/packages/canvas-three/three/src/nodes/display/ViewportTextureNode.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { FramebufferTexture } from '../../textures/FramebufferTexture.js'; -import TextureNode from '../accessors/TextureNode.js'; -import { NodeUpdateType } from '../core/constants.js'; -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class ViewportTextureNode extends TextureNode { - generateMipmaps: boolean; - - readonly isOutputTextureNode: true; - - updateBeforeType: NodeUpdateType; - - constructor(uvNode?: Node, levelNode?: Node | null, framebufferTexture?: FramebufferTexture | null); -} - -export const viewportTexture: (uvNode?: Node, levelNode?: Node | null, framebufferTexture?: FramebufferTexture | null) => ShaderNodeObject; -export const viewportMipTexture: (uvNode?: Node, levelNode?: Node | null, framebufferTexture?: FramebufferTexture | null) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - viewportTexture: typeof viewportTexture; - viewportMipTexture: typeof viewportMipTexture; - } -} diff --git a/packages/canvas-three/three/src/nodes/fog/FogExp2Node.d.ts b/packages/canvas-three/three/src/nodes/fog/FogExp2Node.d.ts deleted file mode 100644 index a916c19cf..000000000 --- a/packages/canvas-three/three/src/nodes/fog/FogExp2Node.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import FogNode from './FogNode.js'; - -export default class FogExp2Node extends FogNode { - isFogExp2Node: true; - densityNode: Node; - - constructor(colorNode: Node, densityNode: Node); -} - -export const densityFog: (colorNode: Node, densityNode: Node) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - densityFog: typeof densityFog; - } -} diff --git a/packages/canvas-three/three/src/nodes/fog/FogNode.d.ts b/packages/canvas-three/three/src/nodes/fog/FogNode.d.ts deleted file mode 100644 index 5313581bc..000000000 --- a/packages/canvas-three/three/src/nodes/fog/FogNode.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import Node from '../core/Node.js'; -import NodeBuilder from '../core/NodeBuilder.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class FogNode extends Node { - isFogNode: true; - colorNode: Node | null; - factorNode: Node | null; - - constructor(colorNode: Node | null, factorNode: Node | null); - - getViewZNode(builder: NodeBuilder): Node; -} - -export const fog: (colorNode: NodeRepresentation | null, factorNode: NodeRepresentation | null) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - fog: typeof fog; - } -} diff --git a/packages/canvas-three/three/src/nodes/fog/FogRangeNode.d.ts b/packages/canvas-three/three/src/nodes/fog/FogRangeNode.d.ts deleted file mode 100644 index 5c443b3e3..000000000 --- a/packages/canvas-three/three/src/nodes/fog/FogRangeNode.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import FogNode from './FogNode.js'; - -export default class FogRangeNode extends FogNode { - isFogRangeNode: true; - nearNode: Node | null; - farNode: Node | null; - - constructor(colorNode: Node | null, nearNode: Node | null, farNode: Node | null); -} - -export const rangeFog: (colorNode: NodeRepresentation | null, nearNode: NodeRepresentation | null, farNode: NodeRepresentation | null) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - rangeFog: typeof rangeFog; - } -} diff --git a/packages/canvas-three/three/src/nodes/functions/BSDF/BRDF_GGX.d.ts b/packages/canvas-three/three/src/nodes/functions/BSDF/BRDF_GGX.d.ts deleted file mode 100644 index 2dd7edb60..000000000 --- a/packages/canvas-three/three/src/nodes/functions/BSDF/BRDF_GGX.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Node from '../../core/Node.js'; -import OperatorNode from '../../math/OperatorNode.js'; -import { ShaderNodeObject } from '../../shadernode/ShaderNode.js'; - -declare const BRDF_GGX: (args: { lightDirection: Node; f0: Node; f90: Node; roughness: Node; f?: Node; USE_IRIDESCENCE?: Node; USE_ANISOTROPY?: Node }) => ShaderNodeObject; - -export default BRDF_GGX; diff --git a/packages/canvas-three/three/src/nodes/functions/BSDF/BRDF_Lambert.d.ts b/packages/canvas-three/three/src/nodes/functions/BSDF/BRDF_Lambert.d.ts deleted file mode 100644 index deafa94b9..000000000 --- a/packages/canvas-three/three/src/nodes/functions/BSDF/BRDF_Lambert.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Node from '../../core/Node.js'; -import OperatorNode from '../../math/OperatorNode.js'; -import { ShaderNodeObject } from '../../shadernode/ShaderNode.js'; - -declare const BRDF_Lambert: (args: { diffuseColor: Node }) => ShaderNodeObject; - -export default BRDF_Lambert; diff --git a/packages/canvas-three/three/src/nodes/functions/BSDF/BRDF_Sheen.d.ts b/packages/canvas-three/three/src/nodes/functions/BSDF/BRDF_Sheen.d.ts deleted file mode 100644 index 9dcf29d4b..000000000 --- a/packages/canvas-three/three/src/nodes/functions/BSDF/BRDF_Sheen.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Node from '../../core/Node.js'; -import OperatorNode from '../../math/OperatorNode.js'; -import { ShaderNodeObject } from '../../shadernode/ShaderNode.js'; - -declare const BRDF_Sheen: (args: { lightDirection: Node }) => ShaderNodeObject; - -export default BRDF_Sheen; diff --git a/packages/canvas-three/three/src/nodes/functions/BSDF/DFGApprox.d.ts b/packages/canvas-three/three/src/nodes/functions/BSDF/DFGApprox.d.ts deleted file mode 100644 index f56ccac59..000000000 --- a/packages/canvas-three/three/src/nodes/functions/BSDF/DFGApprox.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import Node from '../../core/Node.js'; -import OperatorNode from '../../math/OperatorNode.js'; -import { ShaderNodeObject } from '../../shadernode/ShaderNode.js'; - -// Analytical approximation of the DFG LUT, one half of the -// split-sum approximation used in indirect specular lighting. -// via 'environmentBRDF' from "Physically Based Shading on Mobile" -// https://www.unrealengine.com/blog/physically-based-shading-on-mobile -declare const DFGApprox: (args: { roughness: Node; dotNV: Node }) => ShaderNodeObject; - -export default DFGApprox; diff --git a/packages/canvas-three/three/src/nodes/functions/BSDF/D_GGX.d.ts b/packages/canvas-three/three/src/nodes/functions/BSDF/D_GGX.d.ts deleted file mode 100644 index 286c6be01..000000000 --- a/packages/canvas-three/three/src/nodes/functions/BSDF/D_GGX.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Node from '../../core/Node.js'; -import OperatorNode from '../../math/OperatorNode.js'; -import { ShaderNodeObject } from '../../shadernode/ShaderNode.js'; - -// Microfacet Models for Refraction through Rough Surfaces - equation (33) -// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html -// alpha is "roughness squared" in Disney’s reparameterization -declare const D_GGX: (args: { alpha: Node; dotNH: Node }) => ShaderNodeObject; - -export default D_GGX; diff --git a/packages/canvas-three/three/src/nodes/functions/BSDF/D_GGX_Anisotropic.d.ts b/packages/canvas-three/three/src/nodes/functions/BSDF/D_GGX_Anisotropic.d.ts deleted file mode 100644 index 82bdd09ea..000000000 --- a/packages/canvas-three/three/src/nodes/functions/BSDF/D_GGX_Anisotropic.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Node from '../../core/Node.js'; -import OperatorNode from '../../math/OperatorNode.js'; -import { ShaderNodeObject } from '../../shadernode/ShaderNode.js'; - -// https://google.github.io/filament/Filament.md.html#materialsystem/anisotropicmodel/anisotropicspecularbrdf -declare const D_GGX_Anisotropic: (args: { alphaT: Node; alphaB: Node; dotNH: Node; dotTH: Node; dotBH: Node }) => ShaderNodeObject; - -export default D_GGX_Anisotropic; diff --git a/packages/canvas-three/three/src/nodes/functions/BSDF/F_Schlick.d.ts b/packages/canvas-three/three/src/nodes/functions/BSDF/F_Schlick.d.ts deleted file mode 100644 index 04723c10d..000000000 --- a/packages/canvas-three/three/src/nodes/functions/BSDF/F_Schlick.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Node from '../../core/Node.js'; -import OperatorNode from '../../math/OperatorNode.js'; -import { ShaderNodeObject } from '../../shadernode/ShaderNode.js'; - -declare const F_Schlick: (args: { f0: Node; f90: Node; dotVH: Node }) => ShaderNodeObject; - -export default F_Schlick; diff --git a/packages/canvas-three/three/src/nodes/functions/BSDF/LTC.d.ts b/packages/canvas-three/three/src/nodes/functions/BSDF/LTC.d.ts deleted file mode 100644 index 738f18517..000000000 --- a/packages/canvas-three/three/src/nodes/functions/BSDF/LTC.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Node from '../../core/Node.js'; - -declare const LTC_Uv: (args: { N: Node; V: Node; roughness: Node }) => Node; - -declare const LTC_Evaluate: (args: { N: Node; V: Node; P: Node; mInv: Node; p0: Node; p1: Node; p2: Node; p3: Node }) => Node; - -export { LTC_Evaluate, LTC_Uv }; diff --git a/packages/canvas-three/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.d.ts b/packages/canvas-three/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.d.ts deleted file mode 100644 index d43f635f2..000000000 --- a/packages/canvas-three/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Node from '../../core/Node.js'; -import OperatorNode from '../../math/OperatorNode.js'; -import { ShaderNodeObject } from '../../shadernode/ShaderNode.js'; - -declare const V_GGX_SmithCorrelated: (inputs: { alpha: Node; dotNL: Node; dotNV: Node }) => ShaderNodeObject; - -export default V_GGX_SmithCorrelated; diff --git a/packages/canvas-three/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.d.ts b/packages/canvas-three/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.d.ts deleted file mode 100644 index ef29023c7..000000000 --- a/packages/canvas-three/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Node from '../../core/Node.js'; -import MathNode from '../../math/MathNode.js'; -import { ShaderNodeObject } from '../../shadernode/ShaderNode.js'; - -declare const V_GGX_SmithCorrelated: (inputs: { alphaT: Node; alphaB: Node; dotTV: Node; dotBV: Node; dotTL: Node; dotBL: Node; dotNV: Node; dotNL: Node }) => ShaderNodeObject; - -export default V_GGX_SmithCorrelated; diff --git a/packages/canvas-three/three/src/nodes/functions/BasicLightingModel.d.ts b/packages/canvas-three/three/src/nodes/functions/BasicLightingModel.d.ts deleted file mode 100644 index 9b7117134..000000000 --- a/packages/canvas-three/three/src/nodes/functions/BasicLightingModel.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import LightingModel from '../core/LightingModel.js'; - -declare class BasicLightingModel extends LightingModel { - constructor(); -} - -export default BasicLightingModel; diff --git a/packages/canvas-three/three/src/nodes/functions/PhongLightingModel.d.ts b/packages/canvas-three/three/src/nodes/functions/PhongLightingModel.d.ts deleted file mode 100644 index 3c030388a..000000000 --- a/packages/canvas-three/three/src/nodes/functions/PhongLightingModel.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import BasicLightingModel from './BasicLightingModel.js'; - -export default class PhongLightingModel extends BasicLightingModel { - specular: boolean; - - constructor(specular?: boolean); -} diff --git a/packages/canvas-three/three/src/nodes/functions/PhysicalLightingModel.d.ts b/packages/canvas-three/three/src/nodes/functions/PhysicalLightingModel.d.ts deleted file mode 100644 index e3217d1f0..000000000 --- a/packages/canvas-three/three/src/nodes/functions/PhysicalLightingModel.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import LightingModel from '../core/LightingModel.js'; -import Node from '../core/Node.js'; - -export default class PhysicalLightingModel extends LightingModel { - clearcoat: boolean; - sheen: boolean; - iridescence: boolean; - anisotropy: boolean; - transmission: boolean; - dispersion: boolean; - - clearcoatRadiance: Node | null; - clearcoatSpecularDirect: Node | null; - clearcoatSpecularIndirect: Node | null; - sheenSpecularDirect: Node | null; - sheenSpecularIndirect: Node | null; - iridescenceFresnel: Node | null; - iridescenceF0: Node | null; - - constructor(clearcoat?: boolean, sheen?: boolean, iridescence?: boolean, anisotropy?: boolean, transmission?: boolean, dispersion?: boolean); - - computeMultiscattering(singleScatter: Node, multiScatter: Node, specularF90: Node): void; -} diff --git a/packages/canvas-three/three/src/nodes/functions/ShadowMaskModel.d.ts b/packages/canvas-three/three/src/nodes/functions/ShadowMaskModel.d.ts deleted file mode 100644 index a9e276581..000000000 --- a/packages/canvas-three/three/src/nodes/functions/ShadowMaskModel.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import LightingModel from '../core/LightingModel.js'; -import VarNode from '../core/VarNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class ShadowMaskModel extends LightingModel { - shadowNode: ShaderNodeObject; - - constructor(); -} diff --git a/packages/canvas-three/three/src/nodes/functions/ToonLightingModel.d.ts b/packages/canvas-three/three/src/nodes/functions/ToonLightingModel.d.ts deleted file mode 100644 index 66ada9e1d..000000000 --- a/packages/canvas-three/three/src/nodes/functions/ToonLightingModel.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import LightingModel from '../core/LightingModel.js'; - -export default class ToonLightingModel extends LightingModel {} diff --git a/packages/canvas-three/three/src/nodes/functions/material/getGeometryRoughness.d.ts b/packages/canvas-three/three/src/nodes/functions/material/getGeometryRoughness.d.ts deleted file mode 100644 index 254313969..000000000 --- a/packages/canvas-three/three/src/nodes/functions/material/getGeometryRoughness.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import MathNode from '../../math/MathNode.js'; -import { ShaderNodeObject } from '../../shadernode/ShaderNode.js'; - -declare const getGeometryRoughness: () => ShaderNodeObject; - -export default getGeometryRoughness; diff --git a/packages/canvas-three/three/src/nodes/functions/material/getRoughness.d.ts b/packages/canvas-three/three/src/nodes/functions/material/getRoughness.d.ts deleted file mode 100644 index 510c36471..000000000 --- a/packages/canvas-three/three/src/nodes/functions/material/getRoughness.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Node from '../../core/Node.js'; -import MathNode from '../../math/MathNode.js'; -import { ShaderNodeObject } from '../../shadernode/ShaderNode.js'; - -declare const getRoughness: (args: { roughness: Node }) => ShaderNodeObject; - -export default getRoughness; diff --git a/packages/canvas-three/three/src/nodes/geometry/RangeNode.d.ts b/packages/canvas-three/three/src/nodes/geometry/RangeNode.d.ts deleted file mode 100644 index 29fc4648d..000000000 --- a/packages/canvas-three/three/src/nodes/geometry/RangeNode.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Color } from '../../math/Color.js'; -import { Vector2 } from '../../math/Vector2.js'; -import { Vector3 } from '../../math/Vector3.js'; -import { Vector4 } from '../../math/Vector4.js'; -import Node from '../core/Node.js'; -import NodeBuilder from '../core/NodeBuilder.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export type RangeModeBound = number | Color | Vector2 | Vector3 | Vector4; - -export default class RangeNode extends Node { - min: RangeModeBound; - max: RangeModeBound; - - constructor(min: RangeModeBound, max: RangeModeBound); - getVectorLength(builder: NodeBuilder): number; -} - -export const range: (min: RangeModeBound, max: RangeModeBound) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/gpgpu/ComputeNode.d.ts b/packages/canvas-three/three/src/nodes/gpgpu/ComputeNode.d.ts deleted file mode 100644 index b0adda7ea..000000000 --- a/packages/canvas-three/three/src/nodes/gpgpu/ComputeNode.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class ComputeNode extends Node { - isComputeNode: true; - - count: number; - workgroupSize: number[]; - dispatchCount: number; - - constructor(computeNode: Node, count: number, workgroupSize?: number[]); -} - -export const compute: (node: NodeRepresentation, count: number, workgroupSize: number[]) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - compute: typeof compute; - } -} diff --git a/packages/canvas-three/three/src/nodes/lighting/AONode.d.ts b/packages/canvas-three/three/src/nodes/lighting/AONode.d.ts deleted file mode 100644 index ca633056a..000000000 --- a/packages/canvas-three/three/src/nodes/lighting/AONode.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Node from '../core/Node.js'; -import LightingNode from './LightingNode.js'; - -export default class AONode extends LightingNode { - aoNode: Node | null; - - constructor(aoNode?: Node | null); -} diff --git a/packages/canvas-three/three/src/nodes/lighting/AnalyticLightNode.d.ts b/packages/canvas-three/three/src/nodes/lighting/AnalyticLightNode.d.ts deleted file mode 100644 index 2a91f2ac8..000000000 --- a/packages/canvas-three/three/src/nodes/lighting/AnalyticLightNode.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Light } from '../../lights/Light.js'; -import LightingNode from './LightingNode.js'; - -export default class AnalyticLightNode extends LightingNode { - light: T | null; - - constructor(light?: T | null); -} diff --git a/packages/canvas-three/three/src/nodes/lighting/BasicEnvironmentNode.d.ts b/packages/canvas-three/three/src/nodes/lighting/BasicEnvironmentNode.d.ts deleted file mode 100644 index 751d49aaa..000000000 --- a/packages/canvas-three/three/src/nodes/lighting/BasicEnvironmentNode.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Node from '../core/Node.js'; -import LightingNode from './LightingNode.js'; - -declare class BasicEnvironmentNode extends LightingNode { - envNode: Node | null; - - constructor(envNode?: Node | null); -} - -export default BasicEnvironmentNode; diff --git a/packages/canvas-three/three/src/nodes/lighting/BasicLightMapNode.d.ts b/packages/canvas-three/three/src/nodes/lighting/BasicLightMapNode.d.ts deleted file mode 100644 index 3328b9f6e..000000000 --- a/packages/canvas-three/three/src/nodes/lighting/BasicLightMapNode.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Node from '../core/Node.js'; -import LightingNode from './LightingNode.js'; - -declare class BasicLightMapNode extends LightingNode { - constructor(lightMapNode?: Node | null); -} - -export default BasicLightMapNode; diff --git a/packages/canvas-three/three/src/nodes/lighting/EnvironmentNode.d.ts b/packages/canvas-three/three/src/nodes/lighting/EnvironmentNode.d.ts deleted file mode 100644 index c761af0ff..000000000 --- a/packages/canvas-three/three/src/nodes/lighting/EnvironmentNode.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Node from '../core/Node.js'; -import LightingNode from './LightingNode.js'; - -export default class EnvironmentNode extends LightingNode { - envNode: Node | null; - - constructor(envNode?: Node | null); -} diff --git a/packages/canvas-three/three/src/nodes/lighting/HemisphereLightNode.d.ts b/packages/canvas-three/three/src/nodes/lighting/HemisphereLightNode.d.ts deleted file mode 100644 index 20677ff2e..000000000 --- a/packages/canvas-three/three/src/nodes/lighting/HemisphereLightNode.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HemisphereLight } from '../../lights/HemisphereLight.js'; -import Object3DNode from '../accessors/Object3DNode.js'; -import Node from '../core/Node.js'; -import AnalyticLightNode from './AnalyticLightNode.js'; - -export default class HemisphereLightNode extends AnalyticLightNode { - lightPositionNode: Object3DNode; - lightDirectionNode: Node; - - groundColorNode: Node; - - constructor(light?: HemisphereLight | null); -} diff --git a/packages/canvas-three/three/src/nodes/lighting/IrradianceNode.d.ts b/packages/canvas-three/three/src/nodes/lighting/IrradianceNode.d.ts deleted file mode 100644 index 7d738b2ca..000000000 --- a/packages/canvas-three/three/src/nodes/lighting/IrradianceNode.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Node from '../core/Node.js'; -import LightingNode from './LightingNode.js'; - -export default class IrradianceNode extends LightingNode { - node: Node | null; - - constructor(node?: Node | null); -} diff --git a/packages/canvas-three/three/src/nodes/lighting/LightUtils.d.ts b/packages/canvas-three/three/src/nodes/lighting/LightUtils.d.ts deleted file mode 100644 index 4e918be17..000000000 --- a/packages/canvas-three/three/src/nodes/lighting/LightUtils.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import Node from '../core/Node.js'; -import CondNode from '../math/CondNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export const getDistanceAttenuation: (args: { lightDistance: Node; cutoffDistance: Node; decayExponent: Node }) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/lighting/LightingContextNode.d.ts b/packages/canvas-three/three/src/nodes/lighting/LightingContextNode.d.ts deleted file mode 100644 index 8afd93ff7..000000000 --- a/packages/canvas-three/three/src/nodes/lighting/LightingContextNode.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import ContextNode from '../core/ContextNode.js'; -import LightingModel, { LightingModelIndirectInput } from '../core/LightingModel.js'; -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class LightingContextNode extends ContextNode { - lightingModelNode: LightingModel | null; - backdropNode: Node | null; - backdropAlphaNode: Node | null; - - constructor(node: Node, lightingModel?: LightingModel | null, backdropNode?: Node | null, backdropAlphaNode?: Node | null); - - getContext(): LightingModelIndirectInput; -} - -export const lightingContext: (node: Node, lightingModelNode?: LightingModel) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - lightingContext: typeof lightingContext; - } -} diff --git a/packages/canvas-three/three/src/nodes/lighting/LightingNode.d.ts b/packages/canvas-three/three/src/nodes/lighting/LightingNode.d.ts deleted file mode 100644 index 6a14a3367..000000000 --- a/packages/canvas-three/three/src/nodes/lighting/LightingNode.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Node from '../core/Node.js'; - -export default abstract class LightingNode extends Node { - readonly isLightingNode: true; - - constructor(); -} diff --git a/packages/canvas-three/three/src/nodes/lighting/LightsNode.d.ts b/packages/canvas-three/three/src/nodes/lighting/LightsNode.d.ts deleted file mode 100644 index 30a0eaaf6..000000000 --- a/packages/canvas-three/three/src/nodes/lighting/LightsNode.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Light } from '../../lights/Light.js'; -import Node from '../core/Node.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import LightingNode from './LightingNode.js'; - -export default class LightsNode extends Node { - lightNodes: LightingNode[]; - - constructor(lightNodes?: LightingNode[]); - - get hasLight(): boolean; - getLightNodeByHash(hash: string): LightingNode | null; - - fromLights(lights: Light[]): this; - - static setReference(lightClass: { new (): T }, lightNodeClass: { new (light: T): LightingNode }): void; -} - -export const lights: (lights: Light[]) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/lighting/PointLightNode.d.ts b/packages/canvas-three/three/src/nodes/lighting/PointLightNode.d.ts deleted file mode 100644 index 7cf144633..000000000 --- a/packages/canvas-three/three/src/nodes/lighting/PointLightNode.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { PointLight } from '../../lights/PointLight.js'; -import Node from '../core/Node.js'; -import AnalyticLightNode from './AnalyticLightNode.js'; - -export default class PointLightNode extends AnalyticLightNode { - cutoffDistanceNode: Node; - decayExponentNode: Node; - - constructor(light?: PointLight | null); -} diff --git a/packages/canvas-three/three/src/nodes/lighting/RectAreaLightNode.d.ts b/packages/canvas-three/three/src/nodes/lighting/RectAreaLightNode.d.ts deleted file mode 100644 index 2753ae88e..000000000 --- a/packages/canvas-three/three/src/nodes/lighting/RectAreaLightNode.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { RectAreaLight } from '../../lights/RectAreaLight.js'; -import { DataTexture } from '../../textures/DataTexture.js'; -import Node from '../core/Node.js'; -import AnalyticLightNode from './AnalyticLightNode.js'; - -export interface RectAreaLightTexturesLib { - LTC_HALF_1: DataTexture; - LTC_HALF_2: DataTexture; - - LTC_FLOAT_1: DataTexture; - LTC_FLOAT_2: DataTexture; -} - -export default class RectAreaLightNode extends AnalyticLightNode { - halfHeight: Node; - halfWidth: Node; - - constructor(light?: RectAreaLight | null); - - static setLTC(ltc: RectAreaLightTexturesLib): void; -} diff --git a/packages/canvas-three/three/src/nodes/lighting/SpotLightNode.d.ts b/packages/canvas-three/three/src/nodes/lighting/SpotLightNode.d.ts deleted file mode 100644 index c2933ac56..000000000 --- a/packages/canvas-three/three/src/nodes/lighting/SpotLightNode.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { SpotLight } from '../../lights/SpotLight.js'; -import Node from '../core/Node.js'; -import AnalyticLightNode from './AnalyticLightNode.js'; - -export default class PointLightNode extends AnalyticLightNode { - directionNode: Node; - - coneCosNode: Node; - penumbraCosNode: Node; - - cutoffDistanceNode: Node; - decayExponentNode: Node; - - constructor(light?: SpotLight | null); -} diff --git a/packages/canvas-three/three/src/nodes/loaders/NodeLoader.d.ts b/packages/canvas-three/three/src/nodes/loaders/NodeLoader.d.ts deleted file mode 100644 index 2467b834f..000000000 --- a/packages/canvas-three/three/src/nodes/loaders/NodeLoader.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Loader } from '../../loaders/Loader.js'; -import { LoadingManager } from '../../loaders/LoadingManager.js'; -import { Texture } from '../../textures/Texture.js'; -import { Node } from '../Nodes.js'; - -export interface NodeLoaderResult { - [hash: string]: Node; -} - -export default class NodeLoader extends Loader { - constructor(manager?: LoadingManager); - - parseNodes(json: unknown): NodeLoaderResult; - parse(json: unknown): Node; - setTextures(textures: { [key: string]: Texture }): this; -} diff --git a/packages/canvas-three/three/src/nodes/loaders/NodeMaterialLoader.d.ts b/packages/canvas-three/three/src/nodes/loaders/NodeMaterialLoader.d.ts deleted file mode 100644 index 37ffb4fdd..000000000 --- a/packages/canvas-three/three/src/nodes/loaders/NodeMaterialLoader.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { MaterialLoader } from '../../loaders/MaterialLoader.js'; -import { NodeLoaderResult } from './NodeLoader.js'; - -export default class NodeMaterialLoader extends MaterialLoader { - nodes: NodeLoaderResult; - - setNodes(value: NodeLoaderResult): this; -} diff --git a/packages/canvas-three/three/src/nodes/loaders/NodeObjectLoader.d.ts b/packages/canvas-three/three/src/nodes/loaders/NodeObjectLoader.d.ts deleted file mode 100644 index 62566f7a1..000000000 --- a/packages/canvas-three/three/src/nodes/loaders/NodeObjectLoader.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ObjectLoader } from '../../loaders/ObjectLoader.js'; -import { Material } from '../../materials/Material.js'; -import { Texture } from '../../textures/Texture.js'; -import { NodeLoaderResult } from './NodeLoader.js'; - -export default class NodeObjectLoader extends ObjectLoader { - parseNodes(json: unknown, textures: { [key: string]: Texture }): NodeLoaderResult; - - parseMaterials(json: unknown, textures: { [key: string]: Texture }): { [key: string]: Material }; -} diff --git a/packages/canvas-three/three/src/nodes/materials/Line2NodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/Line2NodeMaterial.d.ts deleted file mode 100644 index 2043f92d9..000000000 --- a/packages/canvas-three/three/src/nodes/materials/Line2NodeMaterial.d.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { LineDashedMaterialParameters } from '../../materials/LineDashedMaterial.js'; -import { Color } from '../../math/Color.js'; -import { Texture } from '../../textures/Texture.js'; -import Node from '../core/Node.js'; -import NodeMaterial, { NodeMaterialParameters } from './NodeMaterial.js'; - -export interface Line2NodeMaterialParameters extends NodeMaterialParameters, LineDashedMaterialParameters { - dashed?: boolean | undefined; -} - -export default class Line2NodeMaterial extends NodeMaterial { - lights: boolean; - - // Properties from LineDashedMaterial - readonly isLineDashedMaterial: true; - scale: number; - dashSize: number; - gapSize: number; - - // Properties from LineBasicMaterial - readonly isLineBasicMaterial: true; - color: Color; - fog: boolean; - linewidth: number; - linecap: string; - linejoin: string; - map: Texture | null; - - useAlphaToCoverage: boolean; - useColor: boolean; - useDash: boolean; - useWorldUnits: boolean; - - dashOffset: number; - lineWidth: number; - - lineColorNode: Node | null; - - offsetNode: Node | null; - dashScaleNode: Node | null; - dashSizeNode: Node | null; - gapSizeNode: Node | null; - - constructor(parameters?: Line2NodeMaterialParameters); - - setupShaders(): void; - - get worldUnits(): boolean; - set worldUnits(value: boolean); - - get dashed(): boolean; - set dashed(value: boolean); -} diff --git a/packages/canvas-three/three/src/nodes/materials/LineBasicNodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/LineBasicNodeMaterial.d.ts deleted file mode 100644 index 8141a9830..000000000 --- a/packages/canvas-three/three/src/nodes/materials/LineBasicNodeMaterial.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { LineBasicMaterialParameters } from '../../materials/LineBasicMaterial.js'; -import { Color } from '../../math/Color.js'; -import { Texture } from '../../textures/Texture.js'; -import NodeMaterial, { NodeMaterialParameters } from './NodeMaterial.js'; - -export interface LineBasicNodeMaterialParameters extends NodeMaterialParameters, LineBasicMaterialParameters {} - -export default class LineBasicNodeMaterial extends NodeMaterial { - readonly isLineBasicNodeMaterial: true; - - // Properties from LineBasicMaterial - readonly isLineBasicMaterial: true; - color: Color; - fog: boolean; - linewidth: number; - linecap: string; - linejoin: string; - map: Texture | null; - - constructor(parameters?: LineBasicNodeMaterialParameters); -} diff --git a/packages/canvas-three/three/src/nodes/materials/Materials.d.ts b/packages/canvas-three/three/src/nodes/materials/Materials.d.ts deleted file mode 100644 index b7e4a64d7..000000000 --- a/packages/canvas-three/three/src/nodes/materials/Materials.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -export { default as Line2NodeMaterial } from './Line2NodeMaterial.js'; -export { default as LineBasicNodeMaterial } from './LineBasicNodeMaterial.js'; -export { default as MeshBasicNodeMaterial } from './MeshBasicNodeMaterial.js'; -export { default as MeshMatcapNodeMaterial } from './MeshMatcapNodeMaterial.js'; -export { default as MeshNormalNodeMaterial } from './MeshNormalNodeMaterial.js'; -export { default as MeshPhongNodeMaterial } from './MeshPhongNodeMaterial.js'; -export { default as MeshPhysicalNodeMaterial } from './MeshPhysicalNodeMaterial.js'; -export { default as MeshSSSPhysicalNodeMaterial } from './MeshSSSNodeMaterial.js'; -export { default as MeshStandardNodeMaterial } from './MeshStandardNodeMaterial.js'; -export { default as MeshToonNodeMaterial } from './MeshToonNodeMaterial.js'; -export { addNodeMaterial, createNodeMaterialFromType, default as NodeMaterial } from './NodeMaterial.js'; -export { default as PointsNodeMaterial } from './PointsNodeMaterial.js'; -export { default as ShadowNodeMaterial } from './ShadowNodeMaterial.js'; -export { default as SpriteNodeMaterial } from './SpriteNodeMaterial.js'; -export { default as VolumeNodeMaterial } from './VolumeNodeMaterial.js'; diff --git a/packages/canvas-three/three/src/nodes/materials/MeshBasicNodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/MeshBasicNodeMaterial.d.ts deleted file mode 100644 index a81d0f0ae..000000000 --- a/packages/canvas-three/three/src/nodes/materials/MeshBasicNodeMaterial.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Combine } from '../../constants.js'; -import { MeshBasicMaterialParameters } from '../../materials/MeshBasicMaterial.js'; -import { Color } from '../../math/Color.js'; -import { Euler } from '../../math/Euler.js'; -import { Texture } from '../../textures/Texture.js'; -import NodeMaterial, { NodeMaterialParameters } from './NodeMaterial.js'; - -export interface MeshBasicNodeMaterialParameters extends NodeMaterialParameters, MeshBasicMaterialParameters {} - -export default class MeshBasicNodeMaterial extends NodeMaterial { - readonly isMeshBasicNodeMaterial: true; - - // Properties from MeshBasicMaterial - readonly isMeshBasicMaterial: true; - color: Color; - map: Texture | null; - lightMap: Texture | null; - lightMapIntensity: number; - aoMap: Texture | null; - aoMapIntensity: number; - specularMap: Texture | null; - alphaMap: Texture | null; - envMap: Texture | null; - envMapRotation: Euler; - combine: Combine; - reflectivity: number; - refractionRatio: number; - wireframe: boolean; - wireframeLinewidth: number; - wireframeLinecap: string; - wireframeLinejoin: string; - fog: boolean; - - constructor(parameters?: MeshBasicNodeMaterialParameters); -} diff --git a/packages/canvas-three/three/src/nodes/materials/MeshMatcapNodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/MeshMatcapNodeMaterial.d.ts deleted file mode 100644 index dcc749afa..000000000 --- a/packages/canvas-three/three/src/nodes/materials/MeshMatcapNodeMaterial.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { NormalMapTypes } from '../../constants.js'; -import { MeshMatcapMaterialParameters } from '../../materials/MeshMatcapMaterial.js'; -import { Color } from '../../math/Color.js'; -import { Vector2 } from '../../math/Vector2.js'; -import { Texture } from '../../textures/Texture.js'; -import NodeMaterial, { NodeMaterialParameters } from './NodeMaterial.js'; - -export interface MeshMatcapNodeMaterialParameters extends NodeMaterialParameters, MeshMatcapMaterialParameters {} - -export default class MeshMatcapNodeMaterial extends NodeMaterial { - readonly isMeshMatcapNodeMaterial: true; - - // Properties from MeshMatcapMaterial - readonly isMeshMatcapMaterial: true; - color: Color; - matcap: Texture | null; - map: Texture | null; - bumpMap: Texture | null; - bumpScale: number; - normalMap: Texture | null; - normalMapType: NormalMapTypes; - normalScale: Vector2; - displacementMap: Texture | null; - displacementScale: number; - displacementBias: number; - alphaMap: Texture | null; - flatShading: boolean; - fog: boolean; - - constructor(paramters: MeshMatcapNodeMaterialParameters); -} diff --git a/packages/canvas-three/three/src/nodes/materials/MeshNormalNodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/MeshNormalNodeMaterial.d.ts deleted file mode 100644 index c2aa71cf7..000000000 --- a/packages/canvas-three/three/src/nodes/materials/MeshNormalNodeMaterial.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { NormalMapTypes } from '../../constants.js'; -import { MeshNormalMaterialParameters } from '../../materials/MeshNormalMaterial.js'; -import { Vector2 } from '../../math/Vector2.js'; -import { Texture } from '../../textures/Texture.js'; -import NodeMaterial, { NodeMaterialParameters } from './NodeMaterial.js'; - -export interface MeshBasicNodeMaterialParameters extends NodeMaterialParameters, MeshNormalMaterialParameters {} - -export default class MeshNormalNodeMaterial extends NodeMaterial { - readonly isMeshNormalNodeMaterial: true; - - // Properties from MeshNormalMaterial - readonly isMeshNormalMaterial: true; - bumpMap: Texture | null; - bumpScale: number; - normalMap: Texture | null; - normalMapType: NormalMapTypes; - normalScale: Vector2; - displacementMap: Texture | null; - displacementScale: number; - displacementBias: number; - wireframe: boolean; - wireframeLinewidth: number; - flatShading: boolean; - - constructor(parameters?: MeshBasicNodeMaterialParameters); -} diff --git a/packages/canvas-three/three/src/nodes/materials/MeshPhongNodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/MeshPhongNodeMaterial.d.ts deleted file mode 100644 index 33532035f..000000000 --- a/packages/canvas-three/three/src/nodes/materials/MeshPhongNodeMaterial.d.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Combine, NormalMapTypes } from '../../constants.js'; -import { MeshPhongMaterialParameters } from '../../materials/MeshPhongMaterial.js'; -import { Color } from '../../math/Color.js'; -import { Euler } from '../../math/Euler.js'; -import { Vector2 } from '../../math/Vector2.js'; -import { Texture } from '../../textures/Texture.js'; -import Node from '../core/Node.js'; -import NodeMaterial, { NodeMaterialParameters } from './NodeMaterial.js'; - -export interface MeshPhongNodeMaterialParameters extends NodeMaterialParameters, MeshPhongMaterialParameters {} - -export default class MeshPhongNodeMaterial extends NodeMaterial { - readonly isMeshPhongNodeMaterial: true; - - shininessNode: Node | null; - specularNode: Node | null; - - // Properties from MeshPhongMaterial - readonly isMeshPhongMaterial: true; - color: Color; - specular: Color; - shininess: number; - map: Texture | null; - lightMap: Texture | null; - lightMapIntensity: number; - aoMap: Texture | null; - aoMapIntensity: number; - emissive: Color; - emissiveIntensity: number; - emissiveMap: Texture | null; - bumpMap: Texture | null; - bumpScale: number; - normalMap: Texture | null; - normalMapType: NormalMapTypes; - normalScale: Vector2; - displacementMap: Texture | null; - displacementScale: number; - displacementBias: number; - specularMap: Texture | null; - alphaMap: Texture | null; - envMap: Texture | null; - envMapRotation: Euler; - combine: Combine; - reflectivity: number; - refractionRatio: number; - wireframe: boolean; - wireframeLinewidth: number; - wireframeLinecap: string; - wireframeLinejoin: string; - flatShading: boolean; - metal: boolean; - fog: boolean; - - constructor(parameters?: MeshPhongNodeMaterialParameters); -} diff --git a/packages/canvas-three/three/src/nodes/materials/MeshPhysicalNodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/MeshPhysicalNodeMaterial.d.ts deleted file mode 100644 index f926ee15f..000000000 --- a/packages/canvas-three/three/src/nodes/materials/MeshPhysicalNodeMaterial.d.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { MeshPhysicalMaterialParameters } from '../../materials/MeshPhysicalMaterial.js'; -import { Color } from '../../math/Color.js'; -import { Vector2 } from '../../math/Vector2.js'; -import { Texture } from '../../textures/Texture.js'; -import Node from '../core/Node.js'; -import MeshStandardNodeMaterial, { MeshStandardNodeMaterialParameters } from './MeshStandardNodeMaterial.js'; - -export interface MeshPhysicalNodeMaterialParameters extends MeshStandardNodeMaterialParameters, MeshPhysicalMaterialParameters {} - -export default class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial { - readonly isMeshPhysicalNodeMaterial: true; - - clearcoatNode: Node | null; - clearcoatRoughnessNode: Node | null; - clearcoatNormalNode: Node | null; - - sheenNode: Node | null; - sheenRoughnessNode: Node | null; - - iridescenceNode: Node | null; - iridescenceIORNode: Node | null; - iridescenceThicknessNode: Node | null; - - iorNode: Node | null; - - specularIntensityNode: Node | null; - specularColorNode: Node | null; - - transmissionNode: Node | null; - thicknessNode: Node | null; - attenuationDistanceNode: Node | null; - attenuationColorNode: Node | null; - dispersionNode: Node | null; - - anisotropyNode: Node | null; - - // Properties from MeshPhysicalMaterial - readonly isMeshPhysicalMaterial: true; - anisotropyRotation: number; - anisotropyMap: Texture | null; - clearcoatMap: Texture | null; - clearcoatRoughness: number; - clearcoatRoughnessMap: Texture | null; - clearcoatNormalScale: Vector2; - clearcoatNormalMap: Texture | null; - ior: number; - get reflectivity(): number; - set reflectivity(reflectivity: number); - iridescenceMap: Texture | null; - iridescenceIOR: number; - iridescenceThicknessRange: [number, number]; - iridescenceThicknessMap: Texture | null; - sheenColor: Color; - sheenColorMap: Texture | null; - sheenRoughness: number; - sheenRoughnessMap: Texture | null; - transmissionMap: Texture | null; - thickness: number; - thicknessMap: Texture | null; - attenuationDistance: number; - attenuationColor: Color; - specularIntensity: number; - specularIntensityMap: Texture | null; - specularColor: Color; - specularColorMap: Texture | null; - get anisotropy(): number; - set anisotropy(value: number); - get clearcoat(): number; - set clearcoat(value: number); - get iridescence(): number; - set iridescence(value: number); - get dispersion(): number; - set dispersion(value: number); - get sheen(): number; - set sheen(value: number); - get transmission(): number; - set transmission(value: number); - - constructor(parameters?: MeshPhysicalNodeMaterialParameters); - - get useClearcoat(): boolean; - get useIridescence(): boolean; - get useSheen(): boolean; - get useAnisotropy(): boolean; - get useTransmission(): boolean; - get useDispersion(): boolean; -} diff --git a/packages/canvas-three/three/src/nodes/materials/MeshSSSNodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/MeshSSSNodeMaterial.d.ts deleted file mode 100644 index f6cb38d63..000000000 --- a/packages/canvas-three/three/src/nodes/materials/MeshSSSNodeMaterial.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import ConstNode from '../core/ConstNode.js'; -import Node from '../core/Node.js'; -import MeshPhysicalNodeMaterial, { MeshPhysicalNodeMaterialParameters } from './MeshPhysicalNodeMaterial.js'; - -export default class MeshSSSNodeMaterial extends MeshPhysicalNodeMaterial { - thicknessColorNode: Node | null; - thicknessDistortionNode: ConstNode; - thicknessAmbientNode: ConstNode; - thicknessAttenuationNode: ConstNode; - thicknessPowerNode: ConstNode; - thicknessScaleNode: ConstNode; - - constructor(parameters?: MeshPhysicalNodeMaterialParameters); - - get useSSS(): boolean; -} diff --git a/packages/canvas-three/three/src/nodes/materials/MeshStandardNodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/MeshStandardNodeMaterial.d.ts deleted file mode 100644 index 3b2c00397..000000000 --- a/packages/canvas-three/three/src/nodes/materials/MeshStandardNodeMaterial.d.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { NormalMapTypes } from '../../constants.js'; -import { MeshStandardMaterialParameters } from '../../materials/MeshStandardMaterial.js'; -import { Color } from '../../math/Color.js'; -import { Euler } from '../../math/Euler.js'; -import { Vector2 } from '../../math/Vector2.js'; -import { Texture } from '../../textures/Texture.js'; -import Node from '../core/Node.js'; -import NodeMaterial, { NodeMaterialParameters } from './NodeMaterial.js'; - -export interface MeshStandardNodeMaterialParameters extends NodeMaterialParameters, MeshStandardMaterialParameters {} - -export default class MeshStandardNodeMaterial extends NodeMaterial { - readonly isMeshStandardNodeMaterial: true; - - emissiveNode: Node | null; - - metalnessNode: Node | null; - roughnessNode: Node | null; - - // Properties from MeshStandardMaterial - readonly isMeshStandardMaterial: true; - color: Color; - roughness: number; - metalness: number; - map: Texture | null; - lightMap: Texture | null; - lightMapIntensity: number; - aoMap: Texture | null; - aoMapIntensity: number; - emissive: Color; - emissiveIntensity: number; - emissiveMap: Texture | null; - bumpMap: Texture | null; - bumpScale: number; - normalMap: Texture | null; - normalMapType: NormalMapTypes; - normalScale: Vector2; - displacementMap: Texture | null; - displacementScale: number; - displacementBias: number; - roughnessMap: Texture | null; - metalnessMap: Texture | null; - alphaMap: Texture | null; - envMap: Texture | null; - envMapRotation: Euler; - envMapIntensity: number; - wireframe: boolean; - wireframeLinewidth: number; - wireframeLinecap: string; - wireframeLinejoin: string; - flatShading: boolean; - fog: boolean; - - constructor(paramters?: MeshStandardNodeMaterialParameters); -} diff --git a/packages/canvas-three/three/src/nodes/materials/MeshToonNodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/MeshToonNodeMaterial.d.ts deleted file mode 100644 index 50ae60694..000000000 --- a/packages/canvas-three/three/src/nodes/materials/MeshToonNodeMaterial.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { NormalMapTypes } from '../../constants.js'; -import { MeshToonMaterialParameters } from '../../materials/MeshToonMaterial.js'; -import { Color } from '../../math/Color.js'; -import { Vector2 } from '../../math/Vector2.js'; -import { Texture } from '../../textures/Texture.js'; -import NodeMaterial, { NodeMaterialParameters } from './NodeMaterial.js'; - -export interface MeshToonNodeMaterialParameters extends NodeMaterialParameters, MeshToonMaterialParameters {} - -export default class MeshToonNodeMaterial extends NodeMaterial { - readonly isMeshToonNodeMaterial: true; - - // Properties from MeshToonMaterial - readonly isMeshToonMaterial: true; - color: Color; - gradientMap: Texture | null; - map: Texture | null; - lightMap: Texture | null; - lightMapIntensity: number; - aoMap: Texture | null; - aoMapIntensity: number; - emissive: Color; - emissiveIntensity: number; - emissiveMap: Texture | null; - bumpMap: Texture | null; - bumpScale: number; - normalMap: Texture | null; - normalMapType: NormalMapTypes; - normalScale: Vector2; - displacementMap: Texture | null; - displacementScale: number; - displacementBias: number; - alphaMap: Texture | null; - wireframe: boolean; - wireframeLinewidth: number; - wireframeLinecap: string; - wireframeLinejoin: string; - fog: boolean; - - constructor(paramters: MeshToonNodeMaterialParameters); -} diff --git a/packages/canvas-three/three/src/nodes/materials/NodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/NodeMaterial.d.ts deleted file mode 100644 index 68b813d45..000000000 --- a/packages/canvas-three/three/src/nodes/materials/NodeMaterial.d.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { LineBasicMaterial } from '../../materials/LineBasicMaterial.js'; -import { Material, MaterialParameters } from '../../materials/Material.js'; -import { MeshBasicMaterial } from '../../materials/MeshBasicMaterial.js'; -import { MeshMatcapMaterial } from '../../materials/MeshMatcapMaterial.js'; -import { MeshNormalMaterial } from '../../materials/MeshNormalMaterial.js'; -import { MeshPhongMaterial } from '../../materials/MeshPhongMaterial.js'; -import { MeshPhysicalMaterial } from '../../materials/MeshPhysicalMaterial.js'; -import { MeshStandardMaterial } from '../../materials/MeshStandardMaterial.js'; -import { MeshToonMaterial } from '../../materials/MeshToonMaterial.js'; -import { PointsMaterial } from '../../materials/PointsMaterial.js'; -import { ShadowMaterial } from '../../materials/ShadowMaterial.js'; -import { SpriteMaterial } from '../../materials/SpriteMaterial.js'; -import ClippingNode from '../accessors/ClippingNode.js'; -import LightingModel from '../core/LightingModel.js'; -import MRTNode from '../core/MRTNode.js'; -import Node from '../core/Node.js'; -import NodeBuilder from '../core/NodeBuilder.js'; -import LightsNode from '../lighting/LightsNode.js'; -import LineBasicNodeMaterial from './LineBasicNodeMaterial.js'; -import MeshBasicNodeMaterial from './MeshBasicNodeMaterial.js'; -import MeshMatcapNodeMaterial from './MeshMatcapNodeMaterial.js'; -import MeshNormalNodeMaterial from './MeshNormalNodeMaterial.js'; -import MeshPhongNodeMaterial from './MeshPhongNodeMaterial.js'; -import MeshPhysicalNodeMaterial from './MeshPhysicalNodeMaterial.js'; -import MeshStandardNodeMaterial from './MeshStandardNodeMaterial.js'; -import MeshToonNodeMaterial from './MeshToonNodeMaterial.js'; -import PointsNodeMaterial from './PointsNodeMaterial.js'; -import ShadowNodeMaterial from './ShadowNodeMaterial.js'; -import SpriteNodeMaterial from './SpriteNodeMaterial.js'; - -export interface NodeMaterialParameters extends MaterialParameters { - normals?: boolean | undefined; - - colorSpaced?: boolean | undefined; - - lightsNode?: LightsNode | null | undefined; - envNode?: Node | null | undefined; - aoNode?: Node | null | undefined; - - colorNode?: Node | null | undefined; - normalNode?: Node | null | undefined; - opacityNode?: Node | null | undefined; - backdropNode?: Node | null | undefined; - backdropAlphaNode?: Node | null | undefined; - alphaTestNode?: Node | null | undefined; - - positionNode?: Node | null | undefined; - - depthNode?: Node | null | undefined; - shadowNode?: Node | null | undefined; - - outputNode?: Node | null | undefined; - - fragmentNode?: Node | null | undefined; - vertexNode?: Node | null | undefined; -} - -export default class NodeMaterial extends Material { - readonly isNodeMaterial: true; - - fog: boolean; - lights: boolean; - normals: boolean; - - lightsNode: LightsNode | null; - envNode: Node | null; - aoNode: Node | null; - - colorNode: Node | null; - normalNode: Node | null; - opacityNode: Node | null; - backdropNode: Node | null; - backdropAlphaNode: Node | null; - alphaTestNode: Node | null; - - positionNode: Node | null; - - depthNode: Node | null; - shadowNode: Node | null; - shadowPositionNode: Node | null; - - outputNode: Node | null; - mrtNode: MRTNode | null; - - fragmentNode: Node | null; - vertexNode: Node | null; - - constructor(); - - build(builder: NodeBuilder): void; - setup(builder: NodeBuilder): void; - setupClipping(builder: NodeBuilder): ClippingNode | null; - setupDepth(builder: NodeBuilder): void; - setupPosition(builder: NodeBuilder): Node; - setupDiffuseColor(builder: NodeBuilder): void; - setupVariants(builder: NodeBuilder): void; - setupNormal(builder: NodeBuilder): void; - setupEnvironment(builder: NodeBuilder): Node | null; - setupLightMap(builder: NodeBuilder): Node | null; - setupLights(builder: NodeBuilder): LightsNode; - setupOutgoingLight(): Node; - setupLightingModel(builder: NodeBuilder): LightingModel; - setupLighting(builder: NodeBuilder): Node; - setupOutput(builder: NodeBuilder, outputNode: Node): Node; - - setDefaultValues(material: Material): void; - - static fromMaterial(material: LineBasicMaterial): LineBasicNodeMaterial; - static fromMaterial(material: MeshBasicMaterial): MeshBasicNodeMaterial; - static fromMaterial(material: MeshMatcapMaterial): MeshMatcapNodeMaterial; - static fromMaterial(material: MeshNormalMaterial): MeshNormalNodeMaterial; - static fromMaterial(material: MeshPhongMaterial): MeshPhongNodeMaterial; - static fromMaterial(material: MeshPhysicalMaterial): MeshPhysicalNodeMaterial; - static fromMaterial(material: MeshStandardMaterial): MeshStandardNodeMaterial; - static fromMaterial(material: MeshToonMaterial): MeshToonNodeMaterial; - static fromMaterial(material: PointsMaterial): PointsNodeMaterial; - static fromMaterial(material: ShadowMaterial): ShadowNodeMaterial; - static fromMaterial(material: SpriteMaterial): SpriteNodeMaterial; - static fromMaterial(material: NodeMaterial): NodeMaterial; - static fromMaterial(material: Material): NodeMaterial; -} - -export function addNodeMaterial(type: string, nodeMaterial: typeof NodeMaterial): void; -export function createNodeMaterialFromType(type: string): NodeMaterial; diff --git a/packages/canvas-three/three/src/nodes/materials/PointsNodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/PointsNodeMaterial.d.ts deleted file mode 100644 index c0887d3dd..000000000 --- a/packages/canvas-three/three/src/nodes/materials/PointsNodeMaterial.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { PointsMaterialParameters } from '../../materials/PointsMaterial.js'; -import { Color } from '../../math/Color.js'; -import { Texture } from '../../textures/Texture.js'; -import NodeMaterial, { NodeMaterialParameters } from './NodeMaterial.js'; - -export interface PointsNodeMaterialParameters extends NodeMaterialParameters, PointsMaterialParameters {} - -export default class PointsNodeMaterial extends NodeMaterial { - readonly isPointsNodeMaterial: true; - - // Properties from PointsMaterial - readonly isPointsMaterial: true; - color: Color; - map: Texture | null; - alphaMap: Texture | null; - size: number; - sizeAttenuation: boolean; - fog: boolean; - - constructor(parameters?: PointsNodeMaterialParameters); -} diff --git a/packages/canvas-three/three/src/nodes/materials/ShadowNodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/ShadowNodeMaterial.d.ts deleted file mode 100644 index c0e3c7b8f..000000000 --- a/packages/canvas-three/three/src/nodes/materials/ShadowNodeMaterial.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ShadowMaterialParameters } from '../../materials/ShadowMaterial.js'; -import { Color } from '../../math/Color.js'; -import NodeMaterial, { NodeMaterialParameters } from './NodeMaterial.js'; - -export interface ShadowNodeMaterialParameters extends NodeMaterialParameters, ShadowMaterialParameters {} - -export default class ShadowNodeMaterial extends NodeMaterial { - readonly isShadowNodeMaterial: true; - - // Properties from ShadowMaterial - readonly isShadowMaterial: true; - color: Color; - fog: boolean; - - constructor(parameters?: ShadowNodeMaterialParameters); -} diff --git a/packages/canvas-three/three/src/nodes/materials/SpriteNodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/SpriteNodeMaterial.d.ts deleted file mode 100644 index 05bfaa98f..000000000 --- a/packages/canvas-three/three/src/nodes/materials/SpriteNodeMaterial.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { SpriteMaterialParameters } from '../../materials/SpriteMaterial.js'; -import { Color } from '../../math/Color.js'; -import { Texture } from '../../textures/Texture.js'; -import Node from '../core/Node.js'; -import NodeMaterial, { NodeMaterialParameters } from './NodeMaterial.js'; - -export interface SpriteNodeMaterialParameters extends NodeMaterialParameters, SpriteMaterialParameters {} - -export default class SpriteNodeMaterial extends NodeMaterial { - isSpriteNodeMaterial: true; - - rotationNode: Node | null; - scaleNode: Node | null; - - // Properties from SpriteMaterial - readonly isSpriteMaterial: true; - color: Color; - map: Texture | null; - alphaMap: Texture | null; - rotation: number; - sizeAttenuation: boolean; - fog: boolean; - - constructor(parameters?: SpriteNodeMaterialParameters); -} diff --git a/packages/canvas-three/three/src/nodes/materials/VolumeNodeMaterial.d.ts b/packages/canvas-three/three/src/nodes/materials/VolumeNodeMaterial.d.ts deleted file mode 100644 index 37a603f18..000000000 --- a/packages/canvas-three/three/src/nodes/materials/VolumeNodeMaterial.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Node from '../core/Node.js'; -import NodeMaterial, { NodeMaterialParameters } from './NodeMaterial.js'; - -export default class VolumeNodeMaterial extends NodeMaterial { - lights: boolean; - readonly isVolumeNodeMaterial: true; - testNode: Node | null; - - constructor(parameters?: NodeMaterialParameters); -} diff --git a/packages/canvas-three/three/src/nodes/materialx/MaterialXNodes.d.ts b/packages/canvas-three/three/src/nodes/materialx/MaterialXNodes.d.ts deleted file mode 100644 index cf280c8bf..000000000 --- a/packages/canvas-three/three/src/nodes/materialx/MaterialXNodes.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import Node from '../core/Node.js'; -import MathNode from '../math/MathNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import { mx_hsvtorgb, mx_rgbtohsv } from './lib/mx_hsv.js'; -import { mx_srgb_texture_to_lin_rec709 } from './lib/mx_transform_color.js'; - -export function mx_aastep(threshold: NodeRepresentation, value: NodeRepresentation): ShaderNodeObject; - -export function mx_ramplr(valuel: NodeRepresentation, valuer: NodeRepresentation, texcoord?: NodeRepresentation): ShaderNodeObject; -export function mx_ramptb(valuet: NodeRepresentation, valueb: NodeRepresentation, texcoord?: NodeRepresentation): ShaderNodeObject; - -export function mx_splitlr(valuel: NodeRepresentation, valuer: NodeRepresentation, center: NodeRepresentation, texcoord?: NodeRepresentation): ShaderNodeObject; -export function mx_splittb(valuet: NodeRepresentation, valueb: NodeRepresentation, center: NodeRepresentation, texcoord?: NodeRepresentation): ShaderNodeObject; - -export function mx_transform_uv(uv_scale?: NodeRepresentation, uv_offset?: NodeRepresentation, uv_geo?: NodeRepresentation): ShaderNodeObject; - -export function mx_safepower(in1: NodeRepresentation, in2?: NodeRepresentation): ShaderNodeObject; - -export function mx_contrast(input: NodeRepresentation, amount?: NodeRepresentation, pivot?: NodeRepresentation): ShaderNodeObject; - -export function mx_noise_float(texcoord?: NodeRepresentation, amplitude?: NodeRepresentation, pivot?: NodeRepresentation): ShaderNodeObject; -export function mx_noise_vec3(texcoord?: NodeRepresentation, amplitude?: NodeRepresentation, pivot?: NodeRepresentation): ShaderNodeObject; -export function mx_noise_vec4(texcoord?: NodeRepresentation, amplitude?: NodeRepresentation, pivot?: NodeRepresentation): ShaderNodeObject; - -export function mx_worley_noise_float(texcoord?: NodeRepresentation, jitter?: NodeRepresentation): ShaderNodeObject; -export function mx_worley_noise_vec2(texcoord?: NodeRepresentation, jitter?: NodeRepresentation): ShaderNodeObject; -export function mx_worley_noise_vec3(texcoord?: NodeRepresentation, jitter?: NodeRepresentation): ShaderNodeObject; - -export function mx_cell_noise_float(texcoord?: NodeRepresentation): ShaderNodeObject; - -export function mx_fractal_noise_float(position?: NodeRepresentation, octaves?: NodeRepresentation, lacunarity?: NodeRepresentation, diminish?: NodeRepresentation, amplitude?: NodeRepresentation): ShaderNodeObject; -export function mx_fractal_noise_vec2(position?: NodeRepresentation, octaves?: NodeRepresentation, lacunarity?: NodeRepresentation, diminish?: NodeRepresentation, amplitude?: NodeRepresentation): ShaderNodeObject; -export function mx_fractal_noise_vec3(position?: NodeRepresentation, octaves?: NodeRepresentation, lacunarity?: NodeRepresentation, diminish?: NodeRepresentation, amplitude?: NodeRepresentation): ShaderNodeObject; -export function mx_fractal_noise_vec4(position?: NodeRepresentation, octaves?: NodeRepresentation, lacunarity?: NodeRepresentation, diminish?: NodeRepresentation, amplitude?: NodeRepresentation): ShaderNodeObject; - -export { mx_hsvtorgb, mx_rgbtohsv, mx_srgb_texture_to_lin_rec709 }; diff --git a/packages/canvas-three/three/src/nodes/materialx/lib/mx_hsv.d.ts b/packages/canvas-three/three/src/nodes/materialx/lib/mx_hsv.d.ts deleted file mode 100644 index e63151272..000000000 --- a/packages/canvas-three/three/src/nodes/materialx/lib/mx_hsv.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import Node from '../../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../../shadernode/ShaderNode.js'; - -export const mx_hsvtorgb: (hsv_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_rgbtohsv: (c_immutable: NodeRepresentation) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/materialx/lib/mx_noise.d.ts b/packages/canvas-three/three/src/nodes/materialx/lib/mx_noise.d.ts deleted file mode 100644 index f92b86d2b..000000000 --- a/packages/canvas-three/three/src/nodes/materialx/lib/mx_noise.d.ts +++ /dev/null @@ -1,139 +0,0 @@ -import Node from '../../core/Node.js'; -import VarNode from '../../core/VarNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../../shadernode/ShaderNode.js'; - -export const mx_select: (b_immutable: NodeRepresentation, t_immutable: NodeRepresentation, f_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_negate_if: (val_immutable: NodeRepresentation, b_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_floor: (x_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_floorfrac: (x_immutable: NodeRepresentation, i: ShaderNodeObject) => ShaderNodeObject; - -export const mx_bilerp_0: (v0_immutable: NodeRepresentation, v1_immutable: NodeRepresentation, v2_immutable: NodeRepresentation, v3_immutable: NodeRepresentation, s_immutable: NodeRepresentation, t_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_bilerp_1: (v0_immutable: NodeRepresentation, v1_immutable: NodeRepresentation, v2_immutable: NodeRepresentation, v3_immutable: NodeRepresentation, s_immutable: NodeRepresentation, t_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_bilerp: (v0_immutable: NodeRepresentation, v1_immutable: NodeRepresentation, v2_immutable: NodeRepresentation, v3_immutable: NodeRepresentation, s_immutable: NodeRepresentation, t_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_trilerp_0: (v0_immutable: NodeRepresentation, v1_immutable: NodeRepresentation, v2_immutable: NodeRepresentation, v3_immutable: NodeRepresentation, v4_immutable: NodeRepresentation, v5_immutable: NodeRepresentation, v6_immutable: NodeRepresentation, v7_immutable: NodeRepresentation, s_immutable: NodeRepresentation, t_immutable: NodeRepresentation, r_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_trilerp_1: (v0_immutable: NodeRepresentation, v1_immutable: NodeRepresentation, v2_immutable: NodeRepresentation, v3_immutable: NodeRepresentation, v4_immutable: NodeRepresentation, v5_immutable: NodeRepresentation, v6_immutable: NodeRepresentation, v7_immutable: NodeRepresentation, s_immutable: NodeRepresentation, t_immutable: NodeRepresentation, r_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_trilerp: (v0_immutable: NodeRepresentation, v1_immutable: NodeRepresentation, v2_immutable: NodeRepresentation, v3_immutable: NodeRepresentation, v4_immutable: NodeRepresentation, v5_immutable: NodeRepresentation, v6_immutable: NodeRepresentation, v7_immutable: NodeRepresentation, s_immutable: NodeRepresentation, t_immutable: NodeRepresentation, r_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_gradient_float_0: (hash_immutable: NodeRepresentation, x_immutable: NodeRepresentation, y_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_gradient_float_1: (hash_immutable: NodeRepresentation, x_immutable: NodeRepresentation, y_immutable: NodeRepresentation, z_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_gradient_float: (hash_immutable: NodeRepresentation, x_immutable: NodeRepresentation, y_immutable: NodeRepresentation, z_immutable?: NodeRepresentation) => ShaderNodeObject; - -export const mx_gradient_vec3_0: (hash_immutable: NodeRepresentation, x_immutable: NodeRepresentation, y_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_gradient_vec3_1: (hash_immutable: NodeRepresentation, x_immutable: NodeRepresentation, y_immutable: NodeRepresentation, z_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_gradient_vec3: (hash_immutable: NodeRepresentation, x_immutable: NodeRepresentation, y_immutable: NodeRepresentation, z_immutable?: NodeRepresentation) => ShaderNodeObject; - -export const mx_gradient_scale2d_0: (v_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_gradient_scale3d_0: (v_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_gradient_scale2d_1: (v_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_gradient_scale2d: (v_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_gradient_scale3d_1: (v_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_gradient_scale3d: (v_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_rotl32: (x_immutable: NodeRepresentation, k_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_bjmix: (a: ShaderNodeObject, b: ShaderNodeObject, c: ShaderNodeObject) => ShaderNodeObject; - -export const mx_bjfinal: (a_immutable: NodeRepresentation, b_immutable: NodeRepresentation, c_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_bits_to_01: (bits_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_fade: (t_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_hash_int_0: (x_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_hash_int_1: (x_immutable: NodeRepresentation, y_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_hash_int_2: (x_immutable: NodeRepresentation, y_immutable: NodeRepresentation, z_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_hash_int_3: (x_immutable: NodeRepresentation, y_immutable: NodeRepresentation, z_immutable: NodeRepresentation, xx_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_hash_int_4: (x_immutable: NodeRepresentation, y_immutable: NodeRepresentation, z_immutable: NodeRepresentation, xx_immutable: NodeRepresentation, yy_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_hash_int: (x_immutable: NodeRepresentation, y_immutable?: NodeRepresentation, z_immutable?: NodeRepresentation, xx_immutable?: NodeRepresentation, yy_immutable?: NodeRepresentation) => ShaderNodeObject; - -export const mx_hash_vec3_0: (x_immutable: NodeRepresentation, y_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_hash_vec3_1: (x_immutable: NodeRepresentation, y_immutable: NodeRepresentation, z_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_hash_vec3: (x_immutable: NodeRepresentation, y_immutable: NodeRepresentation, z_immutable?: NodeRepresentation) => ShaderNodeObject; - -export const mx_perlin_noise_float_0: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_perlin_noise_float_1: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_perlin_noise_float: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_perlin_noise_vec3_0: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_perlin_noise_vec3_1: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_perlin_noise_vec3: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_cell_noise_float_0: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_cell_noise_float_1: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_cell_noise_float_2: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_cell_noise_float_3: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_cell_noise_float: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_cell_noise_vec3_0: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_cell_noise_vec3_1: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_cell_noise_vec3_2: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_cell_noise_vec3_3: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_cell_noise_vec3: (p_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_fractal_noise_float: (p_immutable: NodeRepresentation, octaves_immutable: NodeRepresentation, lacunarity_immutable: NodeRepresentation, diminish_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_fractal_noise_vec3: (p_immutable: NodeRepresentation, octaves_immutable: NodeRepresentation, lacunarity_immutable: NodeRepresentation, diminish_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_fractal_noise_vec2: (p_immutable: NodeRepresentation, octaves_immutable: NodeRepresentation, lacunarity_immutable: NodeRepresentation, diminish_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_fractal_noise_vec4: (p_immutable: NodeRepresentation, octaves_immutable: NodeRepresentation, lacunarity_immutable: NodeRepresentation, diminish_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_worley_distance_0: (p_immutable: NodeRepresentation, x_immutable: NodeRepresentation, y_immutable: NodeRepresentation, z_immutable: NodeRepresentation, xoff_immutable: NodeRepresentation, yoff_immutable: NodeRepresentation, jitter_immutable: NodeRepresentation, metric_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_worley_distance_1: (p_immutable: NodeRepresentation, x_immutable: NodeRepresentation, y_immutable: NodeRepresentation, z_immutable: NodeRepresentation, xoff_immutable: NodeRepresentation, yoff_immutable: NodeRepresentation, zoff_immutable: NodeRepresentation, jitter_immutable: NodeRepresentation, metric_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_worley_distance: (p_immutable: NodeRepresentation, x_immutable: NodeRepresentation, y_immutable: NodeRepresentation, z_immutable: NodeRepresentation, xoff_immutable: NodeRepresentation, yoff_immutable: NodeRepresentation, zoff_immutable: NodeRepresentation, jitter_immutable: NodeRepresentation, metric_immutable?: NodeRepresentation) => ShaderNodeObject; - -export const mx_worley_noise_float_0: (p_immutable: NodeRepresentation, jitter_immutable: NodeRepresentation, metric_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_worley_noise_vec2_0: (p_immutable: NodeRepresentation, jitter_immutable: NodeRepresentation, metric_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_worley_noise_vec3_0: (p_immutable: NodeRepresentation, jitter_immutable: NodeRepresentation, metric_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_worley_noise_float_1: (p_immutable: NodeRepresentation, jitter_immutable: NodeRepresentation, metric_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_worley_noise_float: (p_immutable: NodeRepresentation, jitter_immutable: NodeRepresentation, metric_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_worley_noise_vec2_1: (p_immutable: NodeRepresentation, jitter_immutable: NodeRepresentation, metric_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_worley_noise_vec2: (p_immutable: NodeRepresentation, jitter_immutable: NodeRepresentation, metric_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_worley_noise_vec3_1: (p_immutable: NodeRepresentation, jitter_immutable: NodeRepresentation, metric_immutable: NodeRepresentation) => ShaderNodeObject; - -export const mx_worley_noise_vec3: (p_immutable: NodeRepresentation, jitter_immutable: NodeRepresentation, metric_immutable: NodeRepresentation) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/materialx/lib/mx_transform_color.d.ts b/packages/canvas-three/three/src/nodes/materialx/lib/mx_transform_color.d.ts deleted file mode 100644 index f8bc24fdf..000000000 --- a/packages/canvas-three/three/src/nodes/materialx/lib/mx_transform_color.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import Node from '../../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../../shadernode/ShaderNode.js'; - -export const mx_srgb_texture_to_lin_rec709: (color_immutable: NodeRepresentation) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/math/CondNode.d.ts b/packages/canvas-three/three/src/nodes/math/CondNode.d.ts deleted file mode 100644 index 891102189..000000000 --- a/packages/canvas-three/three/src/nodes/math/CondNode.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class CondNode extends Node { - condNode: Node; - ifNode: Node; - elseNode: Node; - - constructor(condNode: Node, ifNode: Node, elseNode: Node); -} - -export function cond(condNode: NodeRepresentation, ifNode: NodeRepresentation, elseNode: NodeRepresentation): ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - cond: typeof cond; - } -} diff --git a/packages/canvas-three/three/src/nodes/math/HashNode.d.ts b/packages/canvas-three/three/src/nodes/math/HashNode.d.ts deleted file mode 100644 index 657541832..000000000 --- a/packages/canvas-three/three/src/nodes/math/HashNode.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class HashNode extends Node { - seedNode: Node; - - constructor(seedNode: Node); -} - -export const hash: (seedNode: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - hash: typeof hash; - } -} diff --git a/packages/canvas-three/three/src/nodes/math/MathNode.d.ts b/packages/canvas-three/three/src/nodes/math/MathNode.d.ts deleted file mode 100644 index 2bb9eae9b..000000000 --- a/packages/canvas-three/three/src/nodes/math/MathNode.d.ts +++ /dev/null @@ -1,253 +0,0 @@ -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import OperatorNode from './OperatorNode.js'; - -export type MathNodeMethod1 = - | typeof MathNode.RADIANS - | typeof MathNode.DEGREES - | typeof MathNode.EXP - | typeof MathNode.EXP2 - | typeof MathNode.LOG - | typeof MathNode.LOG2 - | typeof MathNode.SQRT - | typeof MathNode.INVERSE_SQRT - | typeof MathNode.FLOOR - | typeof MathNode.CEIL - | typeof MathNode.NORMALIZE - | typeof MathNode.FRACT - | typeof MathNode.SIN - | typeof MathNode.COS - | typeof MathNode.TAN - | typeof MathNode.ASIN - | typeof MathNode.ACOS - | typeof MathNode.ATAN - | typeof MathNode.ABS - | typeof MathNode.SIGN - | typeof MathNode.LENGTH - | typeof MathNode.NEGATE - | typeof MathNode.ONE_MINUS - | typeof MathNode.DFDX - | typeof MathNode.DFDY - | typeof MathNode.ROUND - | typeof MathNode.RECIPROCAL - | typeof MathNode.TRUNC - | typeof MathNode.FWIDTH - | typeof MathNode.BITCAST - | typeof MathNode.TRANSPOSE; - -export type MathNodeMethod2 = typeof MathNode.ATAN2 | typeof MathNode.MIN | typeof MathNode.MAX | typeof MathNode.MOD | typeof MathNode.STEP | typeof MathNode.REFLECT | typeof MathNode.DISTANCE | typeof MathNode.DOT | typeof MathNode.CROSS | typeof MathNode.POW | typeof MathNode.TRANSFORM_DIRECTION; - -export type MathNodeMethod3 = typeof MathNode.MIX | typeof MathNode.CLAMP | typeof MathNode.REFRACT | typeof MathNode.SMOOTHSTEP | typeof MathNode.FACEFORWARD; - -export type MathNodeMethod = MathNodeMethod1 | MathNodeMethod2 | MathNodeMethod3; - -export default class MathNode extends TempNode { - // 1 input - - static ALL: 'all'; - static ANY: 'any'; - static EQUALS: 'equals'; - - static RADIANS: 'radians'; - static DEGREES: 'degrees'; - static EXP: 'exp'; - static EXP2: 'exp2'; - static LOG: 'log'; - static LOG2: 'log2'; - static SQRT: 'sqrt'; - static INVERSE_SQRT: 'inversesqrt'; - static FLOOR: 'floor'; - static CEIL: 'ceil'; - static NORMALIZE: 'normalize'; - static FRACT: 'fract'; - static SIN: 'sin'; - static COS: 'cos'; - static TAN: 'tan'; - static ASIN: 'asin'; - static ACOS: 'acos'; - static ATAN: 'atan'; - static ABS: 'abs'; - static SIGN: 'sign'; - static LENGTH: 'length'; - static NEGATE: 'negate'; - static ONE_MINUS: 'oneMinus'; - static DFDX: 'dFdx'; - static DFDY: 'dFdy'; - static ROUND: 'round'; - static RECIPROCAL: 'reciprocal'; - static TRUNC: 'trunc'; - static FWIDTH: 'fwidth'; - static BITCAST: 'bitcast'; - static TRANSPOSE: 'transpose'; - - // 2 inputs - - static ATAN2: 'atan2'; - static MIN: 'min'; - static MAX: 'max'; - static MOD: 'mod'; - static STEP: 'step'; - static REFLECT: 'reflect'; - static DISTANCE: 'distance'; - static DOT: 'dot'; - static CROSS: 'cross'; - static POW: 'pow'; - static TRANSFORM_DIRECTION: 'transformDirection'; - - // 3 inputs - - static MIX: 'mix'; - static CLAMP: 'clamp'; - static REFRACT: 'refract'; - static SMOOTHSTEP: 'smoothstep'; - static FACEFORWARD: 'faceforward'; - - method: MathNodeMethod; - aNode: Node; - bNode: Node | null; - cNode: Node | null; - - constructor(method: MathNodeMethod1, aNode: Node); - constructor(method: MathNodeMethod2, aNode: Node, bNode: Node); - constructor(method: MathNodeMethod3, aNode: Node, bNode: Node, cNode: Node); -} - -export const EPSILON: ShaderNodeObject; -export const INFINITY: ShaderNodeObject; -export const PI: ShaderNodeObject; -export const PI2: ShaderNodeObject; - -type Unary = (a: NodeRepresentation) => ShaderNodeObject; - -export const all: Unary; -export const any: Unary; -export const equals: Unary; - -export const radians: Unary; -export const degrees: Unary; -export const exp: Unary; -export const exp2: Unary; -export const log: Unary; -export const log2: Unary; -export const sqrt: Unary; -export const inverseSqrt: Unary; -export const floor: Unary; -export const ceil: Unary; -export const normalize: Unary; -export const fract: Unary; -export const sin: Unary; -export const cos: Unary; -export const tan: Unary; -export const asin: Unary; -export const acos: Unary; -export const atan: Unary; -export const abs: Unary; -export const sign: Unary; -export const length: Unary; -export const negate: Unary; -export const oneMinus: Unary; -export const dFdx: Unary; -export const dFdy: Unary; -export const round: Unary; -export const reciprocal: Unary; -export const trunc: Unary; -export const fwidth: Unary; -export const bitcast: Unary; -export const transpose: Unary; - -type Binary = (a: NodeRepresentation, b: NodeRepresentation) => ShaderNodeObject; - -export const atan2: Binary; -export const min: Binary; -export const max: Binary; -export const mod: Binary; -export const step: Binary; -export const reflect: Binary; -export const distance: Binary; -export const difference: Binary; -export const dot: Binary; -export const cross: Binary; -export const pow: Binary; -export const pow2: Binary; -export const pow3: Binary; -export const pow4: Binary; -export const transformDirection: Binary; - -type Ternary = (a: NodeRepresentation, b: NodeRepresentation, c: NodeRepresentation) => ShaderNodeObject; - -export const cbrt: Unary; -export const lengthSq: Unary; -export const mix: Ternary; -export const clamp: (a: NodeRepresentation, b?: NodeRepresentation, c?: NodeRepresentation) => ShaderNodeObject; -export const saturate: Unary; -export const refract: Ternary; -export const smoothstep: Ternary; -export const faceForward: Ternary; - -export const rand: (uv: NodeRepresentation) => ShaderNodeObject; - -export const mixElement: Ternary; -export const smoothstepElement: Ternary; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - all: typeof all; - any: typeof any; - equals: typeof equals; - radians: typeof radians; - degrees: typeof degrees; - exp: typeof exp; - exp2: typeof exp2; - log: typeof log; - log2: typeof log2; - sqrt: typeof sqrt; - inverseSqrt: typeof inverseSqrt; - floor: typeof floor; - ceil: typeof ceil; - normalize: typeof normalize; - fract: typeof fract; - sin: typeof sin; - cos: typeof cos; - tan: typeof tan; - asin: typeof asin; - acos: typeof acos; - atan: typeof atan; - abs: typeof abs; - sign: typeof sign; - length: typeof length; - lengthSq: typeof lengthSq; - negate: typeof negate; - oneMinus: typeof oneMinus; - dFdx: typeof dFdx; - dFdy: typeof dFdy; - round: typeof round; - reciprocal: typeof reciprocal; - trunc: typeof trunc; - fwidth: typeof fwidth; - atan2: typeof atan2; - min: typeof min; - max: typeof max; - mod: typeof mod; - step: typeof step; - reflect: typeof reflect; - distance: typeof distance; - dot: typeof dot; - cross: typeof cross; - pow: typeof pow; - pow2: typeof pow2; - pow3: typeof pow3; - pow4: typeof pow4; - transformDirection: typeof transformDirection; - mix: typeof mixElement; - clamp: typeof clamp; - refract: typeof refract; - smoothstep: typeof smoothstepElement; - faceForward: typeof faceForward; - difference: typeof difference; - saturate: typeof saturate; - cbrt: typeof cbrt; - transpose: typeof transpose; - rand: typeof rand; - } -} diff --git a/packages/canvas-three/three/src/nodes/math/MathUtils.d.ts b/packages/canvas-three/three/src/nodes/math/MathUtils.d.ts deleted file mode 100644 index de3513e94..000000000 --- a/packages/canvas-three/three/src/nodes/math/MathUtils.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Binary, Ternary } from './MathNode.js'; - -// remapping functions -export const parabola: Binary; -export const gain: Binary; -export const pcurve: Ternary; -export const sinc: Binary; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - parabola: typeof parabola; - gain: typeof gain; - pcurve: typeof pcurve; - sinc: typeof sinc; - } -} diff --git a/packages/canvas-three/three/src/nodes/math/OperatorNode.d.ts b/packages/canvas-three/three/src/nodes/math/OperatorNode.d.ts deleted file mode 100644 index dfa7ff600..000000000 --- a/packages/canvas-three/three/src/nodes/math/OperatorNode.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export type OperatorNodeOp = '%' | '&' | '|' | '^' | '>>' | '<<' | '==' | '&&' | '||' | '^^' | '<' | '>' | '<=' | '>=' | '+' | '-' | '*' | '/'; - -export default class OperatorNode extends TempNode { - aNode: Node; - bNode: Node; - op: OperatorNodeOp; - - constructor(op: OperatorNodeOp, ...params: [Node, Node, ...Node[]]); -} - -type Operator = (a: NodeRepresentation, b: NodeRepresentation, ...others: NodeRepresentation[]) => ShaderNodeObject; - -export const add: Operator; -export const sub: Operator; -export const mul: Operator; -export const div: Operator; -export const remainder: Operator; -export const equal: Operator; -export const lessThan: Operator; -export const greaterThan: Operator; -export const lessThanEqual: Operator; -export const greaterThanEqual: Operator; -export const and: Operator; -export const or: Operator; -export const not: (a: NodeRepresentation) => ShaderNodeObject; -export const xor: Operator; -export const bitAnd: Operator; -export const bitNot: (a: NodeRepresentation) => ShaderNodeObject; -export const bitOr: Operator; -export const bitXor: Operator; -export const shiftLeft: Operator; -export const shiftRight: Operator; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - add: typeof add; - sub: typeof sub; - mul: typeof mul; - div: typeof div; - remainder: typeof remainder; - equal: typeof equal; - lessThan: typeof lessThan; - greaterThan: typeof greaterThan; - lessThanEqual: typeof lessThanEqual; - greaterThanEqual: typeof greaterThanEqual; - and: typeof and; - or: typeof or; - not: typeof not; - xor: typeof xor; - bitAnd: typeof bitAnd; - bitNot: typeof bitNot; - bitOr: typeof bitOr; - bitXor: typeof bitXor; - shiftLeft: typeof shiftLeft; - shiftRight: typeof shiftRight; - } -} diff --git a/packages/canvas-three/three/src/nodes/math/TriNoise3D.d.ts b/packages/canvas-three/three/src/nodes/math/TriNoise3D.d.ts deleted file mode 100644 index 301b726af..000000000 --- a/packages/canvas-three/three/src/nodes/math/TriNoise3D.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export const tri: (x: NodeRepresentation) => ShaderNodeObject; - -export const tri3: (p: NodeRepresentation) => ShaderNodeObject; - -export const triNoise3D: (p_immutable: NodeRepresentation, spd: NodeRepresentation, time: NodeRepresentation) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/pmrem/PMREMNode.d.ts b/packages/canvas-three/three/src/nodes/pmrem/PMREMNode.d.ts deleted file mode 100644 index 5c172bb29..000000000 --- a/packages/canvas-three/three/src/nodes/pmrem/PMREMNode.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Texture } from '../../textures/Texture.js'; -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class PMREMNode extends TempNode { - uvNode: Node | null; - levelNode: Node | null; - - constructor(value: Texture, uvNode?: Node | null, levelNode?: Node | null); - - set value(value: Texture); - get value(): Texture; -} - -export const pmremTexture: (value: Texture, uvNode?: NodeRepresentation, levelNode?: NodeRepresentation) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/procedural/CheckerNode.d.ts b/packages/canvas-three/three/src/nodes/procedural/CheckerNode.d.ts deleted file mode 100644 index a2ed66ffe..000000000 --- a/packages/canvas-three/three/src/nodes/procedural/CheckerNode.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class CheckerNode extends TempNode { - uvNode: Node; - constructor(uvNode?: Node); -} - -export const checker: (uvNode?: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - checker: typeof checker; - } -} diff --git a/packages/canvas-three/three/src/nodes/shadernode/ShaderNode.d.ts b/packages/canvas-three/three/src/nodes/shadernode/ShaderNode.d.ts deleted file mode 100644 index bfd80605d..000000000 --- a/packages/canvas-three/three/src/nodes/shadernode/ShaderNode.d.ts +++ /dev/null @@ -1,226 +0,0 @@ -import ConstNode from '../core/ConstNode.js'; -import Node from '../core/Node.js'; -import NodeBuilder from '../core/NodeBuilder.js'; -import StackNode from '../core/StackNode.js'; - -export interface NodeElements { - toGlobal: (node: Node) => Node; - - append: typeof append; - - toColor: typeof color; - toFloat: typeof float; - toInt: typeof int; - toUint: typeof uint; - toBool: typeof bool; - toVec2: typeof vec2; - toIvec2: typeof ivec2; - toUvec2: typeof uvec2; - toBvec2: typeof bvec2; - toVec3: typeof vec3; - toIvec3: typeof ivec3; - toUvec3: typeof uvec3; - toBvec3: typeof bvec3; - toVec4: typeof vec4; - toIvec4: typeof ivec4; - toUvec4: typeof uvec4; - toBvec4: typeof bvec4; - toMat2: typeof mat2; - toImat2: typeof imat2; - toUmat2: typeof umat2; - toBmat2: typeof bmat2; - toMat3: typeof mat3; - toImat3: typeof imat3; - toUmat3: typeof umat3; - toBmat3: typeof bmat3; - toMat4: typeof mat4; - toImat4: typeof imat4; - toUmat4: typeof umat4; - toBmat4: typeof bmat4; - - element: typeof element; - convert: typeof convert; -} - -export function addNodeElement(name: string, nodeElement: unknown): void; - -export type SwizzleCharacter = 'x' | 'y' | 'z' | 'w' | 'r' | 'g' | 'b' | 'a' | 's' | 't' | 'p' | 'q'; - -export type SwizzleOption = Exclude<`${SwizzleCharacter}` | `${SwizzleCharacter}${SwizzleCharacter}` | `${SwizzleCharacter}${SwizzleCharacter}${SwizzleCharacter}` | `${SwizzleCharacter}${SwizzleCharacter}${SwizzleCharacter}${SwizzleCharacter}`, 'abs' | 'sqrt'>; - -export type Swizzable = T & { - [key in SwizzleOption | number]: ShaderNodeObject; -}; - -export type ShaderNodeObject = T & { - [Key in keyof NodeElements]: T extends { [K in Key]: infer M } ? M : NodeElements[Key] extends (node: T, ...args: infer Args) => infer R ? (...args: Args) => R : never; -} & { - [Key in keyof NodeElements as `${Key}Assign`]: T extends { [K in Key]: infer M } ? M : NodeElements[Key] extends (node: T, ...args: infer Args) => unknown ? (...args: Args) => ShaderNodeObject : never; -} & Swizzable; - -/** anything that can be passed to {@link nodeObject} and returns a proxy */ -export type NodeRepresentation = number | boolean | Node | ShaderNodeObject; - -/** anything that can be passed to {@link nodeObject} */ -export type NodeObjectOption = NodeRepresentation | string; - -// same logic as in ShaderNodeObject: number,boolean,node->ShaderNodeObject, otherwise do nothing -export type NodeObject = T extends Node ? ShaderNodeObject : T extends number | boolean ? ShaderNodeObject> : T; - -// opposite of NodeObject: node -> node|ShaderNodeObject|boolean|number, otherwise do nothing -type Proxied = T extends Node ? NodeRepresentation : T; -// https://github.com/microsoft/TypeScript/issues/42435#issuecomment-765557874 -export type ProxiedTuple = [...{ [index in keyof T]: Proxied }]; -export type ProxiedObject = { [index in keyof T]: Proxied }; -type RemoveTail = T extends [unknown, ...infer X] ? X : []; -type RemoveHeadAndTail = T extends [unknown, ...infer X, unknown] ? X : []; - -/** - * Temporary type to save signatures of 4 constructors. Each element may be tuple or undefined. - * - * We use an object instead of tuple or union as it makes stuff easier, especially in Typescript 4.0. - */ -interface Construtors { - a: A; - b: B; - c: C; - d: D; -} - -/** - * Returns all constructors - * - * - * - */ -type OverloadedConstructorsOf = T extends { - new (...args: infer A1): unknown; - new (...args: infer A2): unknown; - new (...args: infer A3): unknown; - new (...args: infer A4): unknown; -} - ? Construtors - : T extends { - new (...args: infer A1): unknown; - new (...args: infer A2): unknown; - new (...args: infer A3): unknown; - } - ? Construtors - : T extends { - new (...args: infer A1): unknown; - new (...args: infer A2): unknown; - } - ? Construtors - : T extends new (...args: infer A) => unknown - ? Construtors - : Construtors; - -type AnyConstructors = Construtors; - -/** - * Returns all constructors where the first paramter is assignable to given "scope" - */ -// eslint-disable-next-line @typescript-eslint/consistent-type-definitions -type FilterConstructorsByScope = { - a: S extends T['a'][0] ? T['a'] : undefined; - b: S extends T['b'][0] ? T['b'] : undefined; - c: S extends T['c'][0] ? T['c'] : undefined; - d: S extends T['d'][0] ? T['d'] : undefined; -}; -/** - * "flattens" the tuple into an union type - */ -type ConstructorUnion = Exclude | Exclude | Exclude | Exclude; - -/** - * Extract list of possible scopes - union of the first paramter - * of all constructors, should it be string - */ -type ExtractScopes = (T['a'][0] extends string ? T['a'][0] : never) | (T['b'][0] extends string ? T['b'][0] : never) | (T['c'][0] extends string ? T['c'][0] : never) | (T['d'][0] extends string ? T['d'][0] : never); - -type GetConstructorsByScope = ConstructorUnion, S>>; -type GetConstructors = ConstructorUnion>; -type GetPossibleScopes = ExtractScopes>; - -export type ConvertType = (...params: unknown[]) => ShaderNodeObject; - -type NodeArray = { [index in keyof T]: NodeObject }; -type NodeObjects = { [key in keyof T]: T[key] extends NodeObjectOption ? NodeObject : T[key] }; -type ConstructedNode = T extends new (...args: any[]) => infer R ? (R extends Node ? R : never) : never; - -export type NodeOrType = Node | string; - -export const getConstNodeType: (value: NodeOrType) => string | null; - -export class ShaderNode { - constructor(jsFunc: (inputs: NodeObjects, builder: NodeBuilder) => NodeRepresentation); - call: (inputs: { [key in keyof T]: T[key] extends NodeRepresentation ? ShaderNodeObject | Node : T[key] }, builder?: NodeBuilder) => ShaderNodeObject; -} - -export function nodeObject(obj: T): NodeObject; -export function nodeObjects(obj: T): NodeObjects; - -export function nodeArray(obj: readonly [...T]): NodeArray; - -export function nodeProxy(nodeClass: T): (...params: ProxiedTuple>) => ShaderNodeObject>; - -export function nodeProxy>(nodeClass: T, scope: S): (...params: ProxiedTuple>>) => ShaderNodeObject>; - -export function nodeProxy>(nodeClass: T, scope: S, factor: NodeObjectOption): (...params: ProxiedTuple>>) => ShaderNodeObject>; - -export function nodeImmutable(nodeClass: T, ...params: ProxiedTuple>): ShaderNodeObject>; - -export function tslFn>(jsFunc: () => R): () => R; -export function tslFn>(jsFunc: (args: T) => R): (...args: ProxiedTuple) => R; -export function tslFn>(jsFunc: (args: T) => R): (args: ProxiedObject) => R; - -export const setCurrentStack: (stack: StackNode | null) => void; - -export const getCurrentStack: () => StackNode | null; - -export const If: (boolNode: Node, method: () => void) => void; - -export function append(node: Node): Node; - -export const color: ConvertType; - -export const float: ConvertType; -export const int: ConvertType; -export const uint: ConvertType; -export const bool: ConvertType; - -export const vec2: ConvertType; -export const ivec2: ConvertType; -export const uvec2: ConvertType; -export const bvec2: ConvertType; - -export const vec3: ConvertType; -export const ivec3: ConvertType; -export const uvec3: ConvertType; -export const bvec3: ConvertType; - -export const vec4: ConvertType; -export const ivec4: ConvertType; -export const uvec4: ConvertType; -export const bvec4: ConvertType; - -export const mat2: ConvertType; -export const imat2: ConvertType; -export const umat2: ConvertType; -export const bmat2: ConvertType; - -export const mat3: ConvertType; -export const imat3: ConvertType; -export const umat3: ConvertType; -export const bmat3: ConvertType; - -export const mat4: ConvertType; -export const imat4: ConvertType; -export const umat4: ConvertType; -export const bmat4: ConvertType; - -export const string: (value?: string) => ShaderNodeObject>; -export const arrayBuffer: (value: ArrayBuffer) => ShaderNodeObject>; - -export const element: (node: NodeRepresentation, indexNode: NodeRepresentation) => ShaderNodeObject; -export const convert: (node: NodeRepresentation, types: string) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/utils/ArrayElementNode.d.ts b/packages/canvas-three/three/src/nodes/utils/ArrayElementNode.d.ts deleted file mode 100644 index 952505238..000000000 --- a/packages/canvas-three/three/src/nodes/utils/ArrayElementNode.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import Node from '../core/Node.js'; -import { TempNode } from '../Nodes.js'; - -export default class ArrayElementNode extends TempNode { - node: Node; - indexNode: Node; - - constructor(node: Node, indexNode: Node); -} diff --git a/packages/canvas-three/three/src/nodes/utils/ConvertNode.d.ts b/packages/canvas-three/three/src/nodes/utils/ConvertNode.d.ts deleted file mode 100644 index 8c4f6aa65..000000000 --- a/packages/canvas-three/three/src/nodes/utils/ConvertNode.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Node from '../core/Node.js'; - -export default class ConvertNode extends Node { - node: Node; - convertTo: string; - constructor(node: Node, convertTo: string); -} diff --git a/packages/canvas-three/three/src/nodes/utils/DiscardNode.d.ts b/packages/canvas-three/three/src/nodes/utils/DiscardNode.d.ts deleted file mode 100644 index f9d742db3..000000000 --- a/packages/canvas-three/three/src/nodes/utils/DiscardNode.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import Node from '../core/Node.js'; -import CondNode from '../math/CondNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class DiscardNode extends CondNode { - constructor(condNode: Node); -} - -export const inlineDiscard: (condNode: NodeRepresentation) => ShaderNodeObject; -export const discard: (condNode: NodeRepresentation) => ShaderNodeObject; -export const Return: (condNode: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - discard: typeof discard; - } -} diff --git a/packages/canvas-three/three/src/nodes/utils/EquirectUVNode.d.ts b/packages/canvas-three/three/src/nodes/utils/EquirectUVNode.d.ts deleted file mode 100644 index 852881e9e..000000000 --- a/packages/canvas-three/three/src/nodes/utils/EquirectUVNode.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Node, TempNode } from '../Nodes.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class EquirectUVNode extends TempNode { - constructor(dirNode?: ShaderNodeObject); -} - -export const equirectUV: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/utils/JoinNode.d.ts b/packages/canvas-three/three/src/nodes/utils/JoinNode.d.ts deleted file mode 100644 index e7c246758..000000000 --- a/packages/canvas-three/three/src/nodes/utils/JoinNode.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Node from '../core/Node.js'; -import { TempNode } from '../Nodes.js'; - -/** - * This node constructs given type from elements, like vec3(a,b,c) - */ -export default class JoinNode extends TempNode { - nodes: Node[]; - constructor(nodes: Node[]); -} diff --git a/packages/canvas-three/three/src/nodes/utils/MatcapUVNode.d.ts b/packages/canvas-three/three/src/nodes/utils/MatcapUVNode.d.ts deleted file mode 100644 index a0563285f..000000000 --- a/packages/canvas-three/three/src/nodes/utils/MatcapUVNode.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import TempNode from '../core/TempNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class MatcapUVNode extends TempNode { - constructor(); -} - -export const matcapUV: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/utils/MaxMipLevelNode.d.ts b/packages/canvas-three/three/src/nodes/utils/MaxMipLevelNode.d.ts deleted file mode 100644 index 9b5577e87..000000000 --- a/packages/canvas-three/three/src/nodes/utils/MaxMipLevelNode.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Texture } from '../../textures/Texture.js'; -import TextureNode from '../accessors/TextureNode.js'; -import UniformNode from '../core/UniformNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class MaxMipLevelNode extends UniformNode<0> { - constructor(textureNode: TextureNode); - - get textureNode(): TextureNode; - - get texture(): Texture; -} - -export const maxMipLevel: (texture: Texture) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/utils/OscNode.d.ts b/packages/canvas-three/three/src/nodes/utils/OscNode.d.ts deleted file mode 100644 index d2a5356be..000000000 --- a/packages/canvas-three/three/src/nodes/utils/OscNode.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export type OscNodeMethod = typeof OscNode.SINE | typeof OscNode.SQUARE | typeof OscNode.TRIANGLE | typeof OscNode.SAWTOOTH; - -export default class OscNode extends Node { - static SINE: 'sine'; - static SQUARE: 'square'; - static TRIANGLE: 'triangle'; - static SAWTOOTH: 'sawtooth'; - - method: OscNodeMethod; - timeNode: Node; - - constructor(method: OscNodeMethod, timeNode?: Node); -} - -export const oscSine: (timeNode?: NodeRepresentation) => ShaderNodeObject; -export const oscSquare: (timeNode?: NodeRepresentation) => ShaderNodeObject; -export const oscTriangle: (timeNode?: NodeRepresentation) => ShaderNodeObject; -export const oscSawtooth: (timeNode?: NodeRepresentation) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/utils/PackingNode.d.ts b/packages/canvas-three/three/src/nodes/utils/PackingNode.d.ts deleted file mode 100644 index 4fde069c8..000000000 --- a/packages/canvas-three/three/src/nodes/utils/PackingNode.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export type PackingNodeScope = typeof PackingNode.DIRECTION_TO_COLOR | typeof PackingNode.COLOR_TO_DIRECTION; - -declare class PackingNode extends TempNode { - constructor(scope: PackingNodeScope, node: Node); - - static DIRECTION_TO_COLOR: 'directionToColor'; - static COLOR_TO_DIRECTION: 'colorToDirection'; -} - -export default PackingNode; - -export const directionToColor: (node: NodeRepresentation) => ShaderNodeObject; -export const colorToDirection: (node: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - directionToColor: typeof directionToColor; - colorToDirection: typeof colorToDirection; - } -} diff --git a/packages/canvas-three/three/src/nodes/utils/RTTNode.d.ts b/packages/canvas-three/three/src/nodes/utils/RTTNode.d.ts deleted file mode 100644 index bab79a653..000000000 --- a/packages/canvas-three/three/src/nodes/utils/RTTNode.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { TextureDataType } from '../../constants.js'; -import { RenderTarget } from '../../core/RenderTarget.js'; -import TextureNode from '../accessors/TextureNode.js'; -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export interface RTTNodeOptions { - type: TextureDataType; -} - -declare class RTTNode extends TextureNode { - node: Node; - width: number | null; - height: number | null; - - renderTarget: RenderTarget | null; - - textureNeedsUpdate: boolean; - autoUpdate: boolean; - - pixelRatio?: number; - - constructor(node: Node, width?: number | null, height?: number | null, options?: RTTNodeOptions); - - get autoSize(): boolean; - - setSize(width: number | null, height: number | null): void; - - setPixelRatio(pixelRatio: number): void; -} - -export default RTTNode; - -export const rtt: (node: NodeRepresentation, width?: number | null, height?: number | null, options?: RTTNodeOptions) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - toTexture: typeof rtt; - } -} diff --git a/packages/canvas-three/three/src/nodes/utils/ReflectorNode.d.ts b/packages/canvas-three/three/src/nodes/utils/ReflectorNode.d.ts deleted file mode 100644 index a618e4b1f..000000000 --- a/packages/canvas-three/three/src/nodes/utils/ReflectorNode.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { Object3D } from '../../core/Object3D.js'; -import { RenderTarget } from '../../core/RenderTarget.js'; -import TextureNode from '../accessors/TextureNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export interface ReflectorNodeParameters { - target?: Object3D | undefined; - resolution?: number | undefined; - generateMipmaps?: boolean | undefined; - bounces?: boolean | undefined; -} - -export default class ReflectorNode extends TextureNode { - target: Object3D; - resolution: number; - generateMipmaps: boolean; - bounces: boolean; - - virtualCameras: WeakMap; - renderTargets: WeakMap; - - constructor(parameters?: ReflectorNodeParameters); - - getTextureNode(): TextureNode; - - getVirtualCamera(camera: Camera): Camera; - - getRenderTarget(camera: Camera): RenderTarget; -} - -export const reflector: (parameters?: ReflectorNodeParameters) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/utils/RemapNode.d.ts b/packages/canvas-three/three/src/nodes/utils/RemapNode.d.ts deleted file mode 100644 index a23cd9079..000000000 --- a/packages/canvas-three/three/src/nodes/utils/RemapNode.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class RemapNode extends Node { - node: Node; - inLowNode: Node; - inHighNode: Node; - outLowNode: Node; - outHighNode: Node; - - doClamp: boolean; - - constructor(node: Node, inLowNode: Node, inHighNode: Node, outLowNode?: Node, outHighNode?: Node); -} - -export const remap: (node: Node, inLowNode: NodeRepresentation, inHighNode: NodeRepresentation, outLowNode?: NodeRepresentation, outHighNode?: NodeRepresentation) => ShaderNodeObject; -export const remapClamp: (node: Node, inLowNode: NodeRepresentation, inHighNode: NodeRepresentation, outLowNode?: NodeRepresentation, outHighNode?: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - remap: typeof remap; - remapClamp: typeof remapClamp; - } -} diff --git a/packages/canvas-three/three/src/nodes/utils/RotateNode.d.ts b/packages/canvas-three/three/src/nodes/utils/RotateNode.d.ts deleted file mode 100644 index 9a86fa279..000000000 --- a/packages/canvas-three/three/src/nodes/utils/RotateNode.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class RotateNode extends TempNode { - positionNode: Node; - rotationNode: Node; - - constructor(positionNode: Node, rotationNode: Node); -} - -export const rotate: (positionNode: NodeRepresentation, rotationNode: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - rotate: typeof rotate; - } -} diff --git a/packages/canvas-three/three/src/nodes/utils/RotateUVNode.d.ts b/packages/canvas-three/three/src/nodes/utils/RotateUVNode.d.ts deleted file mode 100644 index 3714caa65..000000000 --- a/packages/canvas-three/three/src/nodes/utils/RotateUVNode.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import Node from '../core/Node.js'; -import TempNode from '../core/TempNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class RotateUVNode extends TempNode { - uvNode: Node; - rotationNode: Node; - centerNode: Node; - - constructor(uvNode: Node, rotationNode: Node, centerNode?: Node); -} - -export const rotateUV: (uvNode: Node, rotationNode: Node, centerNode?: Node) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - rotateUV: typeof rotateUV; - } -} diff --git a/packages/canvas-three/three/src/nodes/utils/SplitNode.d.ts b/packages/canvas-three/three/src/nodes/utils/SplitNode.d.ts deleted file mode 100644 index a0eef0076..000000000 --- a/packages/canvas-three/three/src/nodes/utils/SplitNode.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import Node from '../core/Node.js'; -import { SwizzleOption } from '../shadernode/ShaderNode.js'; - -/** swizzle node */ -export default class SplitNode extends Node { - node: Node; - components: string; - - /** - * @param node the input node - * @param components swizzle like string, default = "x" - */ - constructor(node: Node, components?: SwizzleOption); - getVectorLength(): number; -} diff --git a/packages/canvas-three/three/src/nodes/utils/SpriteSheetUVNode.d.ts b/packages/canvas-three/three/src/nodes/utils/SpriteSheetUVNode.d.ts deleted file mode 100644 index 6406b1207..000000000 --- a/packages/canvas-three/three/src/nodes/utils/SpriteSheetUVNode.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class SpriteSheetUVNode extends Node { - countNode: Node; - uvNode: Node; - frameNode: Node; - - constructor(countNode: Node, uvNode?: Node, frameNode?: Node); -} - -export const spritesheetUV: (countNode: NodeRepresentation, uvNode?: NodeRepresentation, frameNode?: NodeRepresentation) => ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/utils/StoargeArrayElementNode.d.ts b/packages/canvas-three/three/src/nodes/utils/StoargeArrayElementNode.d.ts deleted file mode 100644 index e59bab296..000000000 --- a/packages/canvas-three/three/src/nodes/utils/StoargeArrayElementNode.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import StorageBufferNode from '../accessors/StorageBufferNode.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; -import ArrayElementNode from './ArrayElementNode.js'; - -export default class StorageArrayElementNode extends ArrayElementNode { - node: StorageBufferNode; - - readonly isStorageArrayElementNode: true; - - constructor(storageBufferNode: StorageBufferNode, indexNode: Node); - - get storageBufferNode(): StorageBufferNode; - set storageBufferNode(value: StorageBufferNode); -} - -export const storageElement: (storageBufferNode: NodeRepresentation, indexNode: NodeRepresentation) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - storageElement: typeof storageElement; - } -} diff --git a/packages/canvas-three/three/src/nodes/utils/TimerNode.d.ts b/packages/canvas-three/three/src/nodes/utils/TimerNode.d.ts deleted file mode 100644 index 9a5971dc7..000000000 --- a/packages/canvas-three/three/src/nodes/utils/TimerNode.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import UniformNode from '../core/UniformNode.js'; -import { ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export type TimerNodeScope = typeof TimerNode.LOCAL | typeof TimerNode.GLOBAL | typeof TimerNode.DELTA | typeof TimerNode.FRAME; - -export default class TimerNode extends UniformNode { - static LOCAL: 'local'; - static GLOBAL: 'global'; - static DELTA: 'delta'; - static FRAME: 'frame'; - - scope: TimerNodeScope; - scale: number; - - constructor(scope?: TimerNodeScope, scale?: number, value?: number); -} - -export const timerLocal: (timeScale?: number, value?: number) => ShaderNodeObject; -export const timerGlobal: (timeScale?: number, value?: number) => ShaderNodeObject; -export const timerDelta: (timeScale?: number, value?: number) => ShaderNodeObject; -export const frameId: ShaderNodeObject; diff --git a/packages/canvas-three/three/src/nodes/utils/TriplanarTexturesNode.d.ts b/packages/canvas-three/three/src/nodes/utils/TriplanarTexturesNode.d.ts deleted file mode 100644 index c8a08178e..000000000 --- a/packages/canvas-three/three/src/nodes/utils/TriplanarTexturesNode.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import TextureNode from '../accessors/TextureNode.js'; -import Node from '../core/Node.js'; -import { NodeRepresentation, ShaderNodeObject } from '../shadernode/ShaderNode.js'; - -export default class TriplanarTexturesNode extends Node { - textureXNode: TextureNode; - textureYNode: TextureNode | null; - textureZNode: TextureNode | null; - - scaleNode: ShaderNodeObject; - - positionNode: ShaderNodeObject; - normalNode: ShaderNodeObject; - - constructor(textureXNode: Node, textureYNode?: TextureNode | null, textureZNode?: TextureNode | null, scaleNode?: ShaderNodeObject, positionNode?: ShaderNodeObject, normalNode?: ShaderNodeObject); -} - -export const triplanarTextures: (textureXNode: NodeRepresentation, textureYNode?: NodeRepresentation, textureZNode?: NodeRepresentation, scaleNode?: NodeRepresentation, positionNode?: NodeRepresentation, normalNode?: NodeRepresentation) => ShaderNodeObject; -export const triplanarTexture: (texture: NodeRepresentation, ...params: NodeRepresentation[]) => ShaderNodeObject; - -declare module '../shadernode/ShaderNode.js' { - interface NodeElements { - triplanarTexture: typeof triplanarTexture; - } -} diff --git a/packages/canvas-three/three/src/objects/BatchedMesh.d.ts b/packages/canvas-three/three/src/objects/BatchedMesh.d.ts deleted file mode 100644 index edd0f61ae..000000000 --- a/packages/canvas-three/three/src/objects/BatchedMesh.d.ts +++ /dev/null @@ -1,193 +0,0 @@ -import { Camera } from '../cameras/Camera.js'; -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { Material } from '../materials/Material.js'; -import { Box3 } from '../math/Box3.js'; -import { Color } from '../math/Color.js'; -import { Matrix4 } from '../math/Matrix4.js'; -import { Sphere } from '../math/Sphere.js'; -import { Mesh } from './Mesh.js'; - -/** - * A special version of {@link Mesh} with multi draw batch rendering support. Use {@link BatchedMesh} if you have to - * render a large number of objects with the same material but with different world transformations. The usage of - * {@link BatchedMesh} will help you to reduce the number of draw calls and thus improve the overall rendering - * performance in your application. - * - * If the {@link https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_multi_draw WEBGL_multi_draw extension} is not - * supported then a less performant fallback is used. - * - * @example - * const box = new THREE.BoxGeometry( 1, 1, 1 ); - * const sphere = new THREE.SphereGeometry( 1, 12, 12 ); - * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } ); - * - * // initialize and add geometries into the batched mesh - * const batchedMesh = new BatchedMesh( 10, 5000, 10000, material ); - * const boxGeometryId = batchedMesh.addGeometry( box ); - * const sphereGeometryId = batchedMesh.addGeometry( sphere ); - * - * // create instances of those geometries - * const boxInstancedId1 = batchedMesh.addInstance( boxGeometryId ); - * const boxInstancedId2 = batchedMesh.addInstance( boxGeometryId ); - * - * const sphereInstancedId1 = batchedMesh.addInstance( sphereGeometryId ); - * const sphereInstancedId2 = batchedMesh.addInstance( sphereGeometryId ); - * - * // position the geometries - * batchedMesh.setMatrixAt( boxInstancedId1, boxMatrix1 ); - * batchedMesh.setMatrixAt( boxInstancedId2, boxMatrix2 ); - * - * batchedMesh.setMatrixAt( sphereInstancedId1, sphereMatrix1 ); - * batchedMesh.setMatrixAt( sphereInstancedId2, sphereMatrix2 ); - * - * scene.add( batchedMesh ); - * - * @also Example: {@link https://threejs.org/examples/#webgl_mesh_batch WebGL / mesh / batch} - */ -declare class BatchedMesh extends Mesh { - /** - * This bounding box encloses all instances of the {@link BatchedMesh}. Can be calculated with - * {@link .computeBoundingBox()}. - * @default null - */ - boundingBox: Box3 | null; - - /** - * This bounding sphere encloses all instances of the {@link BatchedMesh}. Can be calculated with - * {@link .computeBoundingSphere()}. - * @default null - */ - boundingSphere: Sphere | null; - - customSort: ((this: this, list: Array<{ start: number; count: number; z: number }>, camera: Camera) => void) | null; - - /** - * If true then the individual objects within the {@link BatchedMesh} are frustum culled. - * @default true - */ - perObjectFrustumCulled: boolean; - - /** - * If true then the individual objects within the {@link BatchedMesh} are sorted to improve overdraw-related - * artifacts. If the material is marked as "transparent" objects are rendered back to front and if not then they are - * rendered front to back. - * @default true - */ - sortObjects: boolean; - - /** - * The maximum number of individual geometries that can be stored in the {@link BatchedMesh}. Read only. - */ - get maxInstanceCount(): number; - - /** - * Read-only flag to check if a given object is of type {@link BatchedMesh}. - */ - readonly isBatchedMesh: true; - - /** - * @param maxInstanceCount the max number of individual geometries planned to be added. - * @param maxVertexCount the max number of vertices to be used by all geometries. - * @param maxIndexCount the max number of indices to be used by all geometries. - * @param material an instance of {@link Material}. Default is a new {@link MeshBasicMaterial}. - */ - constructor(maxInstanceCount: number, maxVertexCount: number, maxIndexCount?: number, material?: Material); - - /** - * Computes the bounding box, updating {@link .boundingBox} attribute. - * Bounding boxes aren't computed by default. They need to be explicitly computed, otherwise they are `null`. - */ - computeBoundingBox(): void; - - /** - * Computes the bounding sphere, updating {@link .boundingSphere} attribute. - * Bounding spheres aren't computed by default. They need to be explicitly computed, otherwise they are `null`. - */ - computeBoundingSphere(): void; - - /** - * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer - * used in your app. - */ - dispose(): this; - - /** - * Takes a sort a function that is run before render. The function takes a list of instances to sort and a camera. - * The objects in the list include a "z" field to perform a depth-ordered sort with. - */ - setCustomSort(sortFunction: ((this: this, list: Array<{ start: number; count: number; z: number }>, camera: Camera) => void) | null): this; - - /** - * Get the color of the defined geometry. - * @param instanceId The id of an instance to get the color of. - * @param target The target object to copy the color in to. - */ - getColorAt(instanceId: number, target: Color): void; - - /** - * Get the local transformation matrix of the defined instance. - * @param instanceId The id of an instance to get the matrix of. - * @param target This 4x4 matrix will be set to the local transformation matrix of the defined instance. - */ - getMatrixAt(instanceId: number, target: Matrix4): Matrix4; - - /** - * Get whether the given instance is marked as "visible" or not. - * @param instanceId The id of an instance to get the visibility state of. - */ - getVisibleAt(instanceId: number): boolean; - - /** - * Sets the given color to the defined geometry instance. - * @param instanceId The id of the instance to set the color of. - * @param color The color to set the instance to. - */ - setColorAt(instanceId: number, color: Color): void; - - /** - * Sets the given local transformation matrix to the defined instance. - * @param instanceId The id of an instance to set the matrix of. - * @param matrix A 4x4 matrix representing the local transformation of a single instance. - */ - setMatrixAt(instanceId: number, matrix: Matrix4): this; - - /** - * Sets the visibility of the instance at the given index. - * @param instanceId The id of the instance to set the visibility of. - * @param visible A boolean value indicating the visibility state. - */ - setVisibleAt(instanceId: number, visible: boolean): this; - - /** - * Adds the given geometry to the {@link BatchedMesh} and returns the associated index referring to it. - * @param geometry The geometry to add into the {@link BatchedMesh}. - * @param reservedVertexRange Optional parameter specifying the amount of vertex buffer space to reserve for the - * added geometry. This is necessary if it is planned to set a new geometry at this index at a later time that is - * larger than the original geometry. Defaults to the length of the given geometry vertex buffer. - * @param reservedIndexRange Optional parameter specifying the amount of index buffer space to reserve for the added - * geometry. This is necessary if it is planned to set a new geometry at this index at a later time that is larger - * than the original geometry. Defaults to the length of the given geometry index buffer. - */ - addGeometry(geometry: BufferGeometry, reservedVertexRange?: number, reservedIndexRange?: number): number; - - /** - * Adds a new instance to the {@link BatchedMesh} using the geometry of the given geometryId and returns a new id - * referring to the new instance to be used by other functions. - * @param geometryId The id of a previously added geometry via "addGeometry" to add into the {@link BatchedMesh} to - * render. - */ - addInstance(geometryId: number): number; - - /** - * Replaces the geometry at `geometryId` with the provided geometry. Throws an error if there is not enough space - * reserved for geometry. Calling this will change all instances that are rendering that geometry. - * @param geometryId Which geometry id to replace with this geometry. - * @param geometry The geometry to substitute at the given geometry id. - */ - setGeometryAt(geometryId: number, geometry: BufferGeometry): number; - - getBoundingBoxAt(geometryId: number, target: Box3): Box3 | null; - getBoundingSphereAt(geometryId: number, target: Sphere): Sphere | null; -} - -export { BatchedMesh }; diff --git a/packages/canvas-three/three/src/objects/Bone.d.ts b/packages/canvas-three/three/src/objects/Bone.d.ts deleted file mode 100644 index f9cf30b33..000000000 --- a/packages/canvas-three/three/src/objects/Bone.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Object3D, Object3DEventMap } from '../core/Object3D.js'; - -/** - * A {@link Bone} which is part of a {@link THREE.Skeleton | Skeleton} - * @remarks - * The skeleton in turn is used by the {@link THREE.SkinnedMesh | SkinnedMesh} - * Bones are almost identical to a blank {@link THREE.Object3D | Object3D}. - * @example - * ```typescript - * const root = new THREE.Bone(); - * const child = new THREE.Bone(); - * root.add(child); - * child.position.y = 5; - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/objects/Bone | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/objects/Bone.js | Source} - */ -export class Bone extends Object3D { - /** - * Creates a new {@link Bone}. - */ - constructor(); - - /** - * Read-only flag to check if a given object is of type {@link Bone}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isBone: true; - - /** - * @override - * @defaultValue `Bone` - */ - override readonly type: string | 'Bone'; -} diff --git a/packages/canvas-three/three/src/objects/Group.d.ts b/packages/canvas-three/three/src/objects/Group.d.ts deleted file mode 100644 index 5ab33165c..000000000 --- a/packages/canvas-three/three/src/objects/Group.d.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Object3D, Object3DEventMap } from '../core/Object3D.js'; - -/** - * Its purpose is to make working with groups of objects syntactically clearer. - * @remarks This is almost identical to an {@link Object3D | Object3D} - * @example - * ```typescript - * const geometry = new THREE.BoxGeometry(1, 1, 1); - * const material = new THREE.MeshBasicMaterial({ - * color: 0x00ff00 - * }); - * const cubeA = new THREE.Mesh(geometry, material); - * cubeA.position.set(100, 100, 0); - * const cubeB = new THREE.Mesh(geometry, material); - * cubeB.position.set(-100, -100, 0); - * //create a {@link Group} and add the two cubes - * //These cubes can now be rotated / scaled etc as a {@link Group} * const {@link Group} = new THREE.Group(); - * group.add(cubeA); - * group.add(cubeB); - * scene.add(group); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/objects/Group | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/objects/Group.js | Source} - */ -export class Group extends Object3D { - /** - * Creates a new {@link Group}. - */ - constructor(); - - /** - * Read-only flag to check if a given object is of type {@link Group}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isGroup: true; - - /** - * @override - * @defaultValue `Group` - */ - override readonly type: string | 'Group'; -} diff --git a/packages/canvas-three/three/src/objects/InstancedMesh.d.ts b/packages/canvas-three/three/src/objects/InstancedMesh.d.ts deleted file mode 100644 index 6ddff4fb5..000000000 --- a/packages/canvas-three/three/src/objects/InstancedMesh.d.ts +++ /dev/null @@ -1,175 +0,0 @@ -import { BufferAttributeJSON } from './../core/BufferAttribute.js'; -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { InstancedBufferAttribute } from '../core/InstancedBufferAttribute.js'; -import { JSONMeta, Object3DEventMap } from '../core/Object3D.js'; -import { Material } from '../materials/Material.js'; -import { Box3 } from '../math/Box3.js'; -import { Color } from '../math/Color.js'; -import { Matrix4 } from '../math/Matrix4.js'; -import { Sphere } from '../math/Sphere.js'; -import { DataTexture } from '../textures/DataTexture.js'; -import { Mesh, MeshJSONObject } from './Mesh.js'; - -export interface InstancedMeshJSONObject extends MeshJSONObject { - count: number; - instanceMatrix: BufferAttributeJSON; - instanceColor?: BufferAttributeJSON; -} - -export interface InstancedMeshJSON extends MeshJSONObject { - object: InstancedMeshJSONObject; -} - -export interface InstancedMeshEventMap extends Object3DEventMap { - dispose: {}; -} - -/** - * A special version of {@link THREE.Mesh | Mesh} with instanced rendering support - * @remarks - * Use {@link InstancedMesh} if you have to render a large number of objects with the same geometry and material(s) but with different world transformations - * @remarks - * The usage of {@link InstancedMesh} will help you to reduce the number of draw calls and thus improve the overall rendering performance in your application. - * @see Example: {@link https://threejs.org/examples/#webgl_instancing_dynamic | WebGL / instancing / dynamic} - * @see Example: {@link https://threejs.org/examples/#webgl_instancing_performance | WebGL / instancing / performance} - * @see Example: {@link https://threejs.org/examples/#webgl_instancing_scatter | WebGL / instancing / scatter} - * @see Example: {@link https://threejs.org/examples/#webgl_instancing_raycast | WebGL / instancing / raycast} - * @see {@link https://threejs.org/docs/index.html#api/en/objects/InstancedMesh | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/objects/InstancedMesh.js | Source} - */ -export class InstancedMesh extends Mesh { - /** - * Create a new instance of {@link InstancedMesh} - * @param geometry An instance of {@link BufferGeometry}. - * @param material A single or an array of {@link Material}. Default is a new {@link MeshBasicMaterial}. - * @param count The **maximum** number of instances of this Mesh. Expects a `Integer` - */ - constructor(geometry: TGeometry | undefined, material: TMaterial | undefined, count: number); - - /** - * Read-only flag to check if a given object is of type {@link InstancedMesh}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isInstancedMesh: true; - - /** - * This bounding box encloses all instances of the {@link InstancedMesh},, which can be calculated with {@link computeBoundingBox | .computeBoundingBox()}. - * @remarks Bounding boxes aren't computed by default. They need to be explicitly computed, otherwise they are `null`. - * @defaultValue `null` - */ - boundingBox: Box3 | null; - - /** - * This bounding sphere encloses all instances of the {@link InstancedMesh}, which can be calculated with {@link computeBoundingSphere | .computeBoundingSphere()}. - * @remarks bounding spheres aren't computed by default. They need to be explicitly computed, otherwise they are `null`. - * @defaultValue `null` - */ - boundingSphere: Sphere | null; - - /** - * The number of instances. - * @remarks - * The `count` value passed into the {@link InstancedMesh | constructor} represents the **maximum** number of instances of this mesh. - * You can change the number of instances at runtime to an integer value in the range `[0, count]`. - * @remarks If you need more instances than the original `count` value, you have to create a new InstancedMesh. - * @remarks Expects a `Integer` - */ - count: number; - - /** - * Represents the colors of all instances. - * You have to set {@link InstancedBufferAttribute.needsUpdate | .instanceColor.needsUpdate()} flag to `true` if you modify instanced data via {@link setColorAt | .setColorAt()}. - * @defaultValue `null` - */ - instanceColor: InstancedBufferAttribute | null; - - /** - * Represents the local transformation of all instances. - * You have to set {@link InstancedBufferAttribute.needsUpdate | .instanceMatrix.needsUpdate()} flag to `true` if you modify instanced data via {@link setMatrixAt | .setMatrixAt()}. - */ - instanceMatrix: InstancedBufferAttribute; - - /** - * Represents the morph target weights of all instances. You have to set its {@link .needsUpdate} flag to true if - * you modify instanced data via {@link .setMorphAt}. - */ - morphTexture: DataTexture | null; - - /** - * Computes the bounding box of the instanced mesh, and updates the {@link .boundingBox} attribute. The bounding box - * is not computed by the engine; it must be computed by your app. You may need to recompute the bounding box if an - * instance is transformed via {@link .setMatrixAt()}. - */ - computeBoundingBox(): void; - - /** - * Computes the bounding sphere of the instanced mesh, and updates the {@link .boundingSphere} attribute. The engine - * automatically computes the bounding sphere when it is needed, e.g., for ray casting or view frustum culling. You - * may need to recompute the bounding sphere if an instance is transformed via [page:.setMatrixAt](). - */ - computeBoundingSphere(): void; - - /** - * Get the color of the defined instance. - * @param index The index of an instance. Values have to be in the range `[0, count]`. Expects a `Integer` - * @param color This color object will be set to the color of the defined instance. - */ - getColorAt(index: number, color: Color): void; - - /** - * Sets the given color to the defined instance - * @remarks - * Make sure you set {@link InstancedBufferAttribute.needsUpdate | .instanceColor.needsUpdate()} to `true` after updating all the colors. - * @param index The index of an instance. Values have to be in the range `[0, count]`. Expects a `Integer` - * @param color The color of a single instance. - */ - setColorAt(index: number, color: Color): void; - - /** - * Get the local transformation matrix of the defined instance. - * @param index The index of an instance Values have to be in the range `[0, count]`. Expects a `Integer` - * @param matrix This 4x4 matrix will be set to the local transformation matrix of the defined instance. - */ - getMatrixAt(index: number, matrix: Matrix4): void; - - /** - * Get the morph target weights of the defined instance. - * @param index The index of an instance. Values have to be in the range [0, count]. - * @param mesh The {@link .morphTargetInfluences} property of this mesh will be filled with the morph target weights of the defined instance. - */ - getMorphAt(index: number, mesh: Mesh): void; - - /** - * Sets the given local transformation matrix to the defined instance. - * @remarks - * Make sure you set {@link InstancedBufferAttribute.needsUpdate | .instanceMatrix.needsUpdate()} flag to `true` after updating all the matrices. - * @param index The index of an instance. Values have to be in the range `[0, count]`. Expects a `Integer` - * @param matrix A 4x4 matrix representing the local transformation of a single instance. - */ - setMatrixAt(index: number, matrix: Matrix4): void; - - /** - * Sets the morph target weights to the defined instance. Make sure you set {@link .morphTexture}{@link .needsUpdate} - * to true after updating all the influences. - * @param index The index of an instance. Values have to be in the range [0, count]. - * @param mesh A mesh with {@link .morphTargetInfluences} property containing the morph target weights of a single instance. - */ - setMorphAt(index: number, mesh: Mesh): void; - - /** - * No effect in {@link InstancedMesh}. - * @ignore - * @hidden - */ - override updateMorphTargets(): void; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): this; - - toJSON(meta?: JSONMeta): InstancedMeshJSON; -} diff --git a/packages/canvas-three/three/src/objects/LOD.d.ts b/packages/canvas-three/three/src/objects/LOD.d.ts deleted file mode 100644 index 82097b847..000000000 --- a/packages/canvas-three/three/src/objects/LOD.d.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { Camera } from '../cameras/Camera.js'; -import { JSONMeta, Object3D, Object3DEventMap, Object3DJSON, Object3DJSONObject } from '../core/Object3D.js'; - -export interface LODJSONObject extends Object3DJSONObject { - autoUpdate?: boolean; - - levels: Array<{ - object: string; - distance: number; - hysteresis: number; - }>; -} - -export interface LODJSON extends Object3DJSON { - object: LODJSONObject; -} - -/** - * Every level is associated with an object, and rendering can be switched between them at the distances specified - * @remarks - * Typically you would create, say, three meshes, one for far away (low detail), one for mid range (medium detail) and one for close up (high detail). - * @example - * ```typescript - * const {@link LOD} = new THREE.LOD(); - * //Create spheres with 3 levels of detail and create new {@link LOD} levels for them - * for (let i = 0; i & lt; 3; i++) { - * const geometry = new THREE.IcosahedronGeometry(10, 3 - i) - * const mesh = new THREE.Mesh(geometry, material); - * lod.addLevel(mesh, i * 75); - * } - * scene.add(lod); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_lod | webgl / {@link LOD} } - * @see {@link https://threejs.org/docs/index.html#api/en/objects/LOD | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/objects/LOD.js | Source} - */ -export class LOD extends Object3D { - /** - * Creates a new {@link LOD}. - */ - constructor(); - - /** - * Read-only flag to check if a given object is of type {@link LOD}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isLOD: true; - - /** - * @override - * @defaultValue `LOD` - */ - override readonly type: string | 'LOD'; - - /** - * An array of level objects - */ - levels: Array<{ - /** The Object3D to display at this level. */ - object: Object3D; - /** The distance at which to display this level of detail. Expects a `Float`. */ - distance: number; - /** Threshold used to avoid flickering at LOD boundaries, as a fraction of distance. Expects a `Float`. */ - hysteresis: number; - }>; - - /** - * Whether the {@link LOD} object is updated automatically by the renderer per frame or not. - * If set to `false`, you have to call {@link update | .update()} in the render loop by yourself. - * @defaultValue `true` - */ - autoUpdate: boolean; - - /** - * Adds a mesh that will display at a certain distance and greater. Typically the further away the distance, the lower the detail on the mesh. - * - * @param object The Object3D to display at this level. - * @param distance The distance at which to display this level of detail. Expects a `Float`. Default `0.0`. - * @param hysteresis Threshold used to avoid flickering at LOD boundaries, as a fraction of distance. Expects a `Float`. Default `0.0`. - */ - addLevel(object: Object3D, distance?: number, hysteresis?: number): this; - - /** - * Get the currently active {@link LOD} level - * @remarks - * As index of the levels array. - */ - getCurrentLevel(): number; - - /** - * Get a reference to the first {@link THREE.Object3D | Object3D} (mesh) that is greater than {@link distance}. - * @param distance Expects a `Float` - */ - getObjectForDistance(distance: number): Object3D | null; - - /** - * Set the visibility of each {@link levels | level}'s {@link THREE.Object3D | object} based on distance from the {@link THREE.Camera | camera}. - * @param camera - */ - update(camera: Camera): void; - - toJSON(meta?: JSONMeta): LODJSON; -} diff --git a/packages/canvas-three/three/src/objects/Line.d.ts b/packages/canvas-three/three/src/objects/Line.d.ts deleted file mode 100644 index f1211371b..000000000 --- a/packages/canvas-three/three/src/objects/Line.d.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { Object3D, Object3DEventMap } from '../core/Object3D.js'; -import { Material } from '../materials/Material.js'; - -/** - * A continuous line. - * @remarks - * This is nearly the same as {@link THREE.LineSegments | LineSegments}, - * the only difference is that it is rendered using {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/drawElements | gl.LINE_STRIP} - * instead of {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/drawElements | gl.LINES} - * @example - * ```typescript - * const material = new THREE.LineBasicMaterial({ - * color: 0x0000ff - * }); - * const points = []; - * points.push(new THREE.Vector3(-10, 0, 0)); - * points.push(new THREE.Vector3(0, 10, 0)); - * points.push(new THREE.Vector3(10, 0, 0)); - * const geometry = new THREE.BufferGeometry().setFromPoints(points); - * const {@link Line} = new THREE.Line(geometry, material); - * scene.add(line); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/objects/Line | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/objects/Line.js | Source} - */ -export class Line extends Object3D { - /** - * Create a new instance of {@link Line} - * @param geometry Vertices representing the {@link Line} segment(s). Default {@link THREE.BufferGeometry | `new THREE.BufferGeometry()`}. - * @param material Material for the line. Default {@link THREE.LineBasicMaterial | `new THREE.LineBasicMaterial()`}. - */ - constructor(geometry?: TGeometry, material?: TMaterial); - - /** - * Read-only flag to check if a given object is of type {@link Line}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isLine: true; - - /** - * @override - * @defaultValue `Line` - */ - override readonly type: string | 'Line'; - - /** - * Vertices representing the {@link Line} segment(s). - */ - geometry: TGeometry; - - /** - * Material for the line. - */ - material: TMaterial; - - /** - * An array of weights typically from `0-1` that specify how much of the morph is applied. - * @defaultValue `undefined`, but reset to a blank array by {@link updateMorphTargets | .updateMorphTargets()}. - */ - morphTargetInfluences?: number[] | undefined; - - /** - * A dictionary of morphTargets based on the `morphTarget.name` property. - * @defaultValue `undefined`, but reset to a blank array by {@link updateMorphTargets | .updateMorphTargets()}. - */ - morphTargetDictionary?: { [key: string]: number } | undefined; - - /** - * Computes an array of distance values which are necessary for {@link THREE.LineDashedMaterial | LineDashedMaterial} - * @remarks - * For each vertex in the geometry, the method calculates the cumulative length from the current point to the very beginning of the line. - */ - computeLineDistances(): this; - - /** - * Updates the morphTargets to have no influence on the object - * @remarks - * Resets the {@link morphTargetInfluences | .morphTargetInfluences} and {@link morphTargetDictionary | .morphTargetDictionary} properties. - */ - updateMorphTargets(): void; -} diff --git a/packages/canvas-three/three/src/objects/LineLoop.d.ts b/packages/canvas-three/three/src/objects/LineLoop.d.ts deleted file mode 100644 index 2cb52ee8a..000000000 --- a/packages/canvas-three/three/src/objects/LineLoop.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { Object3DEventMap } from '../core/Object3D.js'; -import { Material } from '../materials/Material.js'; -import { Line } from './Line.js'; - -/** - * A continuous line that connects back to the start. - * @remarks - * This is nearly the same as {@link THREE.Line | Line}, - * the only difference is that it is rendered using {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/drawElements | gl.LINE_LOOP} - * instead of {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/drawElements | gl.LINE_STRIP}, - * which draws a straight line to the next vertex, and connects the last vertex back to the first. - * @see {@link https://threejs.org/docs/index.html#api/en/objects/LineLoop | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/objects/LineLoop.js | Source} - */ -export class LineLoop extends Line { - /** - * Create a new instance of {@link LineLoop} - * @param geometry List of vertices representing points on the line loop. Default {@link THREE.BufferGeometry | `new THREE.BufferGeometry()`}. - * @param material Material for the line. Default {@link THREE.LineBasicMaterial | `new THREE.LineBasicMaterial()`}. - */ - constructor(geometry?: TGeometry, material?: TMaterial); - - /** - * Read-only flag to check if a given object is of type {@link LineLoop}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isLineLoop: true; - - /** - * @override - * @defaultValue `LineLoop` - */ - override readonly type: string | 'LineLoop'; -} diff --git a/packages/canvas-three/three/src/objects/LineSegments.d.ts b/packages/canvas-three/three/src/objects/LineSegments.d.ts deleted file mode 100644 index f18558be4..000000000 --- a/packages/canvas-three/three/src/objects/LineSegments.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { Object3DEventMap } from '../core/Object3D.js'; -import { Material } from '../materials/Material.js'; -import { Line } from './Line.js'; - -/** - * A series of lines drawn between pairs of vertices. - * @remarks - * This is nearly the same as {@link THREE.Line | Line}, - * the only difference is that it is rendered using {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/drawElements | gl.LINES} - * instead of {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/drawElements | gl.LINE_STRIP}. - * @see {@link https://threejs.org/docs/index.html#api/en/objects/LineSegments | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/objects/LineSegments.js | Source} - */ -export class LineSegments extends Line { - /** - * Create a new instance of {@link LineSegments} - * @param geometry Pair(s) of vertices representing each line segment(s). Default {@link THREE.BufferGeometry | `new THREE.BufferGeometry()`}. - * @param material Material for the line. Default {@link THREE.LineBasicMaterial | `new THREE.LineBasicMaterial()`}. - */ - constructor(geometry?: TGeometry, material?: TMaterial); - - /** - * Read-only flag to check if a given object is of type {@link LineSegments}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isLineSegments: true; - - /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @override - * @defaultValue `LineSegments` - */ - override readonly type: string | 'LineSegments'; -} diff --git a/packages/canvas-three/three/src/objects/Mesh.d.ts b/packages/canvas-three/three/src/objects/Mesh.d.ts deleted file mode 100644 index d80c83f4b..000000000 --- a/packages/canvas-three/three/src/objects/Mesh.d.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { JSONMeta, Object3D, Object3DEventMap, Object3DJSON, Object3DJSONObject } from '../core/Object3D.js'; -import { Material } from '../materials/Material.js'; -import { Vector3 } from '../math/Vector3.js'; - -export interface MeshJSONObject extends Object3DJSONObject { - geometry: string; -} - -export interface MeshJSON extends Object3DJSON { - object: MeshJSONObject; -} - -/** - * Class representing triangular {@link https://en.wikipedia.org/wiki/Polygon_mesh | polygon mesh} based objects. - * @remarks - * Also serves as a base for other classes such as {@link THREE.SkinnedMesh | SkinnedMesh}, {@link THREE.InstancedMesh | InstancedMesh}. - * @example - * ```typescript - * const geometry = new THREE.BoxGeometry(1, 1, 1); - * const material = new THREE.MeshBasicMaterial({ - * color: 0xffff00 - * }); - * const {@link Mesh} = new THREE.Mesh(geometry, material); - * scene.add(mesh); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/objects/Mesh | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/objects/Mesh.js | Source} - */ -export class Mesh extends Object3D { - /** - * Create a new instance of {@link Mesh} - * @param geometry An instance of {@link THREE.BufferGeometry | BufferGeometry}. Default {@link THREE.BufferGeometry | `new THREE.BufferGeometry()`}. - * @param material A single or an array of {@link THREE.Material | Material}. Default {@link THREE.MeshBasicMaterial | `new THREE.MeshBasicMaterial()`}. - */ - constructor(geometry?: TGeometry, material?: TMaterial); - - /** - * Read-only flag to check if a given object is of type {@link Mesh}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isMesh: true; - - /** - * @override - * @defaultValue `Mesh` - */ - override readonly type: string | 'Mesh'; - - /** - * An instance of {@link THREE.BufferGeometry | BufferGeometry} (or derived classes), defining the object's structure. - * @defaultValue {@link THREE.BufferGeometry | `new THREE.BufferGeometry()`}. - */ - geometry: TGeometry; - - /** - * An instance of material derived from the {@link THREE.Material | Material} base class or an array of materials, defining the object's appearance. - * @defaultValue {@link THREE.MeshBasicMaterial | `new THREE.MeshBasicMaterial()`}. - */ - material: TMaterial; - - /** - * An array of weights typically from `0-1` that specify how much of the morph is applied. - * @defaultValue `undefined`, _but reset to a blank array by {@link updateMorphTargets | .updateMorphTargets()}._ - */ - morphTargetInfluences?: number[] | undefined; - - /** - * A dictionary of morphTargets based on the `morphTarget.name` property. - * @defaultValue `undefined`, _but rebuilt by {@link updateMorphTargets | .updateMorphTargets()}._ - */ - morphTargetDictionary?: { [key: string]: number } | undefined; - - /** - * Updates the morphTargets to have no influence on the object - * @remarks Resets the {@link morphTargetInfluences} and {@link morphTargetDictionary} properties. - */ - updateMorphTargets(): void; - - /** - * Get the local-space position of the vertex at the given index, - * taking into account the current animation state of both morph targets and skinning. - * @param index Expects a `Integer` - * @param target - */ - getVertexPosition(index: number, target: Vector3): Vector3; - - toJSON(meta?: JSONMeta): MeshJSON; -} diff --git a/packages/canvas-three/three/src/objects/Points.d.ts b/packages/canvas-three/three/src/objects/Points.d.ts deleted file mode 100644 index 82eaea03e..000000000 --- a/packages/canvas-three/three/src/objects/Points.d.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { BufferGeometry, NormalOrGLBufferAttributes } from '../core/BufferGeometry.js'; -import { Object3D, Object3DEventMap } from '../core/Object3D.js'; -import { Material } from '../materials/Material.js'; - -/** - * A class for displaying {@link Points} - * @remarks - * The {@link Points} are rendered by the {@link THREE.WebGLRenderer | WebGLRenderer} using {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/drawElements | gl.POINTS}. - * @see {@link https://threejs.org/docs/index.html#api/en/objects/Points | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/objects/Points.js | Source} - */ -export class Points = BufferGeometry, TMaterial extends Material | Material[] = Material | Material[], TEventMap extends Object3DEventMap = Object3DEventMap> extends Object3D { - /** - * Create a new instance of {@link Points} - * @param geometry An instance of {@link THREE.BufferGeometry | BufferGeometry}. Default {@link THREE.BufferGeometry | `new THREE.BufferGeometry()`}. - * @param material A single or an array of {@link THREE.Material | Material}. Default {@link THREE.PointsMaterial | `new THREE.PointsMaterial()`}. - */ - constructor(geometry?: TGeometry, material?: TMaterial); - - /** - * Read-only flag to check if a given object is of type {@link Points}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isPoints: true; - - /** - * @override - * @defaultValue `Points` - */ - override readonly type: string | 'Points'; - - /** - * An array of weights typically from `0-1` that specify how much of the morph is applied. - * @defaultValue `undefined`, _but reset to a blank array by {@link updateMorphTargets | .updateMorphTargets()}._ - */ - morphTargetInfluences?: number[] | undefined; - - /** - * A dictionary of morphTargets based on the `morphTarget.name` property. - * @defaultValue `undefined`, _but rebuilt by {@link updateMorphTargets | .updateMorphTargets()}._ - */ - morphTargetDictionary?: { [key: string]: number } | undefined; - - /** - * An instance of {@link THREE.BufferGeometry | BufferGeometry} (or derived classes), defining the object's structure. - * @remarks each vertex designates the position of a particle in the system. - */ - geometry: TGeometry; - - /** - * An instance of {@link THREE.Material | Material}, defining the object's appearance. - * @defaultValue {@link THREE.PointsMaterial | `new THREE.PointsMaterial()`}, _with randomised colour_. - */ - material: TMaterial; - - /** - * Updates the morphTargets to have no influence on the object - * @remarks Resets the {@link morphTargetInfluences} and {@link morphTargetDictionary} properties. - */ - updateMorphTargets(): void; -} diff --git a/packages/canvas-three/three/src/objects/Skeleton.d.ts b/packages/canvas-three/three/src/objects/Skeleton.d.ts deleted file mode 100644 index 5d77c4117..000000000 --- a/packages/canvas-three/three/src/objects/Skeleton.d.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { Matrix4, Matrix4Tuple } from '../math/Matrix4.js'; -import { DataTexture } from '../textures/DataTexture.js'; -import { Bone } from './Bone.js'; - -export interface SkeletonJSON { - metadata: { version: number; type: string; generator: string }; - bones: string[]; - boneInverses: Matrix4Tuple[]; - uuid: string; -} - -/** - * Use an array of {@link Bone | bones} to create a {@link Skeleton} that can be used by a {@link THREE.SkinnedMesh | SkinnedMesh}. - * @example - * ```typescript - * // Create a simple "arm" - * const bones = []; - * const shoulder = new THREE.Bone(); - * const elbow = new THREE.Bone(); - * const hand = new THREE.Bone(); - * shoulder.add(elbow); - * elbow.add(hand); - * bones.push(shoulder); - * bones.push(elbow); - * bones.push(hand); - * shoulder.position.y = -5; - * elbow.position.y = 0; - * hand.position.y = 5; - * const armSkeleton = new THREE.Skeleton(bones); - * See the[page: SkinnedMesh] page - * for an example of usage with standard[page: BufferGeometry]. - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/objects/Skeleton | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/objects/Skeleton.js | Source} - */ -export class Skeleton { - /** - * Creates a new Skeleton. - * @param bones The array of {@link THREE.Bone | bones}. Default `[]`. - * @param boneInverses An array of {@link THREE.Matrix4 | Matrix4s}. Default `[]`. - */ - constructor(bones?: Bone[], boneInverses?: Matrix4[]); - - /** - * {@link http://en.wikipedia.org/wiki/Universally_unique_identifier | UUID} of this object instance. - * @remarks This gets automatically assigned and shouldn't be edited. - */ - uuid: string; - - /** - * The array of {@link THREE.Bone | Bones}. - * @remarks Note this is a copy of the original array, not a reference, so you can modify the original array without effecting this one. - */ - bones: Bone[]; - - /** - * An array of {@link Matrix4 | Matrix4s} that represent the inverse of the {@link THREE.Matrix4 | matrixWorld} of the individual bones. - */ - boneInverses: Matrix4[]; - - /** - * The array buffer holding the bone data when using a vertex texture. - */ - boneMatrices: Float32Array; - - /** - * The {@link THREE.DataTexture | DataTexture} holding the bone data when using a vertex texture. - */ - boneTexture: null | DataTexture; - - frame: number; - - init(): void; - - /** - * Generates the {@link boneInverses} array if not provided in the constructor. - */ - calculateInverses(): void; - - /** - * Computes an instance of {@link THREE.DataTexture | DataTexture} in order to pass the bone data more efficiently to the shader - * @remarks - * The texture is assigned to {@link boneTexture}. - */ - computeBoneTexture(): this; - - /** - * Returns the skeleton to the base pose. - */ - pose(): void; - - /** - * Updates the {@link boneMatrices} and {@link boneTexture} after changing the bones - * @remarks - * This is called automatically by the {@link THREE.WebGLRenderer | WebGLRenderer} if the {@link Skeleton} is used with a {@link THREE.SkinnedMesh | SkinnedMesh}. - */ - update(): void; - - /** - * Returns a clone of this {@link Skeleton} object. - */ - clone(): Skeleton; - - /** - * Searches through the skeleton's bone array and returns the first with a matching name. - * @param name String to match to the Bone's {@link THREE.Bone.name | .name} property. - */ - getBoneByName(name: string): undefined | Bone; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks - * Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; - - toJSON(): SkeletonJSON; - - fromJSON(json: SkeletonJSON, bones: Record): void; -} diff --git a/packages/canvas-three/three/src/objects/SkinnedMesh.d.ts b/packages/canvas-three/three/src/objects/SkinnedMesh.d.ts deleted file mode 100644 index ef9668fdb..000000000 --- a/packages/canvas-three/three/src/objects/SkinnedMesh.d.ts +++ /dev/null @@ -1,156 +0,0 @@ -import { BindMode } from '../constants.js'; -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { JSONMeta, Object3DEventMap } from '../core/Object3D.js'; -import { Material } from '../materials/Material.js'; -import { Box3 } from '../math/Box3.js'; -import { Matrix4, Matrix4Tuple } from '../math/Matrix4.js'; -import { Sphere } from '../math/Sphere.js'; -import { Vector3 } from '../math/Vector3.js'; -import { Mesh, MeshJSON, MeshJSONObject } from './Mesh.js'; -import { Skeleton } from './Skeleton.js'; - -export interface SkinnedMeshJSONObject extends MeshJSONObject { - bindMode: BindMode; - bindMatrix: Matrix4Tuple; - skeleton?: string; -} - -export interface SkinnedMeshJSON extends MeshJSON { - object: SkinnedMeshJSONObject; -} - -/** - * A mesh that has a {@link THREE.Skeleton | Skeleton} with {@link Bone | bones} that can then be used to animate the vertices of the geometry. - * @example - * ```typescript - * const geometry = new THREE.CylinderGeometry(5, 5, 5, 5, 15, 5, 30); - * // create the skin indices and skin weights manually - * // (typically a loader would read this data from a 3D model for you) - * const position = geometry.attributes.position; - * const vertex = new THREE.Vector3(); - * const skinIndices = []; - * const skinWeights = []; - * for (let i = 0; i & lt; position.count; i++) { - * vertex.fromBufferAttribute(position, i); - * // compute skinIndex and skinWeight based on some configuration data - * const y = (vertex.y + sizing.halfHeight); - * const skinIndex = Math.floor(y / sizing.segmentHeight); - * const skinWeight = (y % sizing.segmentHeight) / sizing.segmentHeight; - * skinIndices.push(skinIndex, skinIndex + 1, 0, 0); - * skinWeights.push(1 - skinWeight, skinWeight, 0, 0); - * } - * geometry.setAttribute('skinIndex', new THREE.Uint16BufferAttribute(skinIndices, 4)); - * geometry.setAttribute('skinWeight', new THREE.Float32BufferAttribute(skinWeights, 4)); - * // create skinned mesh and skeleton - * const mesh = new THREE.SkinnedMesh(geometry, material); - * const skeleton = new THREE.Skeleton(bones); - * // see example from THREE.Skeleton - * const rootBone = skeleton.bones[0]; - * mesh.add(rootBone); - * // bind the skeleton to the mesh - * mesh.bind(skeleton); - * // move the bones and manipulate the model - * skeleton.bones[0].rotation.x = -0.1; - * skeleton.bones[1].rotation.x = 0.2; - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/objects/SkinnedMesh | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/objects/SkinnedMesh.js | Source} - */ -export class SkinnedMesh extends Mesh { - /** - * Create a new instance of {@link SkinnedMesh} - * @param geometry An instance of {@link THREE.BufferGeometry | BufferGeometry}. Default {@link THREE.BufferGeometry | `new THREE.BufferGeometry()`}. - * @param material A single or an array of {@link THREE.Material | Material}. Default {@link THREE.MeshBasicMaterial | `new THREE.MeshBasicMaterial()`}. - */ - constructor(geometry?: TGeometry, material?: TMaterial, useVertexTexture?: boolean); - - /** - * Read-only flag to check if a given object is of type {@link SkinnedMesh}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isSkinnedMesh: true; - - /** - * @override - * @defaultValue `SkinnedMesh` - */ - override readonly type: string | 'SkinnedMesh'; - - /** - * Either {@link AttachedBindMode} or {@link DetachedBindMode}. {@link AttachedBindMode} means the skinned mesh - * shares the same world space as the skeleton. This is not true when using {@link DetachedBindMode} which is useful - * when sharing a skeleton across multiple skinned meshes. - * @defaultValue `AttachedBindMode` - */ - bindMode: BindMode; - - /** - * The base matrix that is used for the bound bone transforms. - */ - bindMatrix: Matrix4; - /** - * The base matrix that is used for resetting the bound bone transforms. - */ - bindMatrixInverse: Matrix4; - - /** - * The bounding box of the SkinnedMesh. Can be calculated with {@link computeBoundingBox | .computeBoundingBox()}. - * @default `null` - */ - boundingBox: Box3; - - /** - * The bounding box of the SkinnedMesh. Can be calculated with {@link computeBoundingSphere | .computeBoundingSphere()}. - * @default `null` - */ - boundingSphere: Sphere; - - /** - * {@link THREE.Skeleton | Skeleton} representing the bone hierarchy of the skinned mesh. - */ - skeleton: Skeleton; - - /** - * Bind a skeleton to the skinned mesh - * @remarks - * The bindMatrix gets saved to .bindMatrix property and the .bindMatrixInverse gets calculated. - * @param skeleton {@link THREE.Skeleton | Skeleton} created from a {@link Bone | Bones} tree. - * @param bindMatrix {@link THREE.Matrix4 | Matrix4} that represents the base transform of the skeleton. - */ - bind(skeleton: Skeleton, bindMatrix?: Matrix4): void; - - /** - * Computes the bounding box of the skinned mesh, and updates the {@link .boundingBox} attribute. The bounding box - * is not computed by the engine; it must be computed by your app. If the skinned mesh is animated, the bounding box - * should be recomputed per frame. - */ - computeBoundingBox(): void; - - /** - * Computes the bounding sphere of the skinned mesh, and updates the {@link .boundingSphere} attribute. The bounding - * sphere is automatically computed by the engine when it is needed, e.g., for ray casting and view frustum culling. - * If the skinned mesh is animated, the bounding sphere should be recomputed per frame. - */ - computeBoundingSphere(): void; - - /** - * This method sets the skinned mesh in the rest pose (resets the pose). - */ - pose(): void; - - /** - * Normalizes the skin weights. - */ - normalizeSkinWeights(): void; - - /** - * Applies the bone transform associated with the given index to the given position vector - * @remarks Returns the updated vector. - * @param index Expects a `Integer` - * @param vector - */ - applyBoneTransform(index: number, vector: Vector3): Vector3; - - toJSON(meta?: JSONMeta): SkinnedMeshJSON; -} diff --git a/packages/canvas-three/three/src/objects/Sprite.d.ts b/packages/canvas-three/three/src/objects/Sprite.d.ts deleted file mode 100644 index ee428d0b6..000000000 --- a/packages/canvas-three/three/src/objects/Sprite.d.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { Object3D, Object3DEventMap } from '../core/Object3D.js'; -import { SpriteMaterial } from '../materials/Materials.js'; -import { Vector2 } from '../math/Vector2.js'; - -/** - * A {@link Sprite} is a plane that always faces towards the camera, generally with a partially transparent texture applied. - * @remarks Sprites do not cast shadows, setting `castShadow = true` will have no effect. - * @example - * ```typescript - * const map = new THREE.TextureLoader().load('sprite.png'); - * const material = new THREE.SpriteMaterial({ - * map: map - * }); - * const {@link Sprite} = new THREE.Sprite(material); - * scene.add(sprite); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/objects/Sprite | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/objects/Sprite.js | Source} - */ -export class Sprite extends Object3D { - /** - * Creates a new Sprite. - * @param material An instance of {@link THREE.SpriteMaterial | SpriteMaterial}. Default {@link THREE.SpriteMaterial | `new SpriteMaterial()`}, _with white color_. - */ - constructor(material?: SpriteMaterial); - - /** - * Read-only flag to check if a given object is of type {@link Sprite}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isSprite: true; - - /** - * @override - * @defaultValue `Sprite` - */ - override readonly type: string | 'Sprite'; - - /** - * Whether the object gets rendered into shadow map. - * No effect in {@link Sprite}. - * @ignore - * @hidden - * @defaultValue `false` - */ - override castShadow: false; - - geometry: BufferGeometry; - - /** - * An instance of {@link THREE.SpriteMaterial | SpriteMaterial}, defining the object's appearance. - * @defaultValue {@link THREE.SpriteMaterial | `new SpriteMaterial()`}, _with white color_. - */ - material: SpriteMaterial; - - /** - * The sprite's anchor point, and the point around which the {@link Sprite} rotates. - * A value of (0.5, 0.5) corresponds to the midpoint of the sprite. - * A value of (0, 0) corresponds to the lower left corner of the sprite. - * @defaultValue {@link THREE.Vector2 | `new Vector2(0.5, 0.5)`}. - */ - center: Vector2; -} diff --git a/packages/canvas-three/three/src/renderers/WebGL3DRenderTarget.d.ts b/packages/canvas-three/three/src/renderers/WebGL3DRenderTarget.d.ts deleted file mode 100644 index 3a9e78a04..000000000 --- a/packages/canvas-three/three/src/renderers/WebGL3DRenderTarget.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { RenderTargetOptions } from '../core/RenderTarget.js'; -import { Data3DTexture } from '../textures/Data3DTexture.js'; -import { WebGLRenderTarget } from './WebGLRenderTarget.js'; - -/** - * Represents a three-dimensional render target. - */ -export class WebGL3DRenderTarget extends WebGLRenderTarget { - /** - * Creates a new WebGL3DRenderTarget. - * - * @param width the width of the render target, in pixels. Default is `1`. - * @param height the height of the render target, in pixels. Default is `1`. - * @param depth the depth of the render target. Default is `1`. - * @param options optional object that holds texture parameters for an auto-generated target texture and - * depthBuffer/stencilBuffer booleans. See {@link WebGLRenderTarget} for details. - */ - constructor(width?: number, height?: number, depth?: number, options?: RenderTargetOptions); - - textures: Data3DTexture[]; - - /** - * The texture property is overwritten with an instance of {@link Data3DTexture}. - */ - get texture(): Data3DTexture; - set texture(value: Data3DTexture); - - readonly isWebGL3DRenderTarget: true; -} diff --git a/packages/canvas-three/three/src/renderers/WebGLArrayRenderTarget.d.ts b/packages/canvas-three/three/src/renderers/WebGLArrayRenderTarget.d.ts deleted file mode 100644 index 7373ea9a7..000000000 --- a/packages/canvas-three/three/src/renderers/WebGLArrayRenderTarget.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { RenderTargetOptions } from '../core/RenderTarget.js'; -import { DataArrayTexture } from '../textures/DataArrayTexture.js'; -import { WebGLRenderTarget } from './WebGLRenderTarget.js'; - -/** - * This type of render target represents an array of textures. - */ -export class WebGLArrayRenderTarget extends WebGLRenderTarget { - /** - * Creates a new WebGLArrayRenderTarget. - * - * @param width the width of the render target, in pixels. Default is `1`. - * @param height the height of the render target, in pixels. Default is `1`. - * @param depth the depth/layer count of the render target. Default is `1`. - * @param options optional object that holds texture parameters for an auto-generated target texture and - * depthBuffer/stencilBuffer booleans. See {@link WebGLRenderTarget} for details. - */ - constructor(width?: number, height?: number, depth?: number, options?: RenderTargetOptions); - - textures: DataArrayTexture[]; - - /** - * The texture property is overwritten with an instance of {@link DataArrayTexture}. - */ - get texture(): DataArrayTexture; - set texture(value: DataArrayTexture); - - readonly isWebGLArrayRenderTarget: true; -} diff --git a/packages/canvas-three/three/src/renderers/WebGLCubeRenderTarget.d.ts b/packages/canvas-three/three/src/renderers/WebGLCubeRenderTarget.d.ts deleted file mode 100644 index 509eb729c..000000000 --- a/packages/canvas-three/three/src/renderers/WebGLCubeRenderTarget.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { RenderTargetOptions } from '../core/RenderTarget.js'; -import { CubeTexture } from '../textures/CubeTexture.js'; -import { Texture } from '../textures/Texture.js'; -import { WebGLRenderer } from './WebGLRenderer.js'; -import { WebGLRenderTarget } from './WebGLRenderTarget.js'; - -export class WebGLCubeRenderTarget extends WebGLRenderTarget { - constructor(size?: number, options?: RenderTargetOptions); - - textures: CubeTexture[]; - - get texture(): CubeTexture; - set texture(value: CubeTexture); - - fromEquirectangularTexture(renderer: WebGLRenderer, texture: Texture): this; - - clear(renderer: WebGLRenderer, color: boolean, depth: boolean, stencil: boolean): void; -} diff --git a/packages/canvas-three/three/src/renderers/WebGLRenderTarget.d.ts b/packages/canvas-three/three/src/renderers/WebGLRenderTarget.d.ts deleted file mode 100644 index b44a8a66e..000000000 --- a/packages/canvas-three/three/src/renderers/WebGLRenderTarget.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { RenderTarget, RenderTargetOptions } from '../core/RenderTarget.js'; -import { Texture } from '../textures/Texture.js'; - -export class WebGLRenderTarget extends RenderTarget { - constructor(width?: number, height?: number, options?: RenderTargetOptions); - - readonly isWebGLRenderTarget: true; -} diff --git a/packages/canvas-three/three/src/renderers/WebGLRenderer.d.ts b/packages/canvas-three/three/src/renderers/WebGLRenderer.d.ts deleted file mode 100644 index dc72751e5..000000000 --- a/packages/canvas-three/three/src/renderers/WebGLRenderer.d.ts +++ /dev/null @@ -1,516 +0,0 @@ -import { Camera } from '../cameras/Camera.js'; -import { ColorSpace, CullFace, ShadowMapType, ToneMapping, WebGLCoordinateSystem } from '../constants.js'; -import { TypedArray } from '../core/BufferAttribute.js'; -import { BufferGeometry } from '../core/BufferGeometry.js'; -import { Object3D } from '../core/Object3D.js'; -import { Material } from '../materials/Material.js'; -import { Box2 } from '../math/Box2.js'; -import { Box3 } from '../math/Box3.js'; -import { Color, ColorRepresentation } from '../math/Color.js'; -import { Plane } from '../math/Plane.js'; -import { Vector2 } from '../math/Vector2.js'; -import { Vector3 } from '../math/Vector3.js'; -import { Vector4 } from '../math/Vector4.js'; -import { Scene } from '../scenes/Scene.js'; -import { Data3DTexture } from '../textures/Data3DTexture.js'; -import { DataArrayTexture } from '../textures/DataArrayTexture.js'; -import { OffscreenCanvas, Texture } from '../textures/Texture.js'; -import { WebGLCapabilities } from './webgl/WebGLCapabilities.js'; -import { WebGLExtensions } from './webgl/WebGLExtensions.js'; -import { WebGLInfo } from './webgl/WebGLInfo.js'; -import { WebGLProgram } from './webgl/WebGLProgram.js'; -import { WebGLProperties } from './webgl/WebGLProperties.js'; -import { WebGLRenderLists } from './webgl/WebGLRenderLists.js'; -import { WebGLShadowMap } from './webgl/WebGLShadowMap.js'; -import { WebGLState } from './webgl/WebGLState.js'; -import { WebGLRenderTarget } from './WebGLRenderTarget.js'; -import { WebXRManager } from './webxr/WebXRManager.js'; - -export interface Renderer { - domElement: HTMLCanvasElement; - - render(scene: Object3D, camera: Camera): void; - setSize(width: number, height: number, updateStyle?: boolean): void; -} - -export interface WebGLRendererParameters { - /** - * A Canvas where the renderer draws its output. - */ - canvas?: HTMLCanvasElement | OffscreenCanvas | undefined; - - /** - * A WebGL Rendering Context. - * (https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext) - * Default is null - */ - context?: WebGLRenderingContext | undefined; - - /** - * shader precision. Can be "highp", "mediump" or "lowp". - */ - precision?: string | undefined; - - /** - * default is false. - */ - alpha?: boolean | undefined; - - /** - * default is true. - */ - premultipliedAlpha?: boolean | undefined; - - /** - * default is false. - */ - antialias?: boolean | undefined; - - /** - * default is false. - */ - stencil?: boolean | undefined; - - /** - * default is false. - */ - preserveDrawingBuffer?: boolean | undefined; - - /** - * Can be "high-performance", "low-power" or "default" - */ - powerPreference?: string | undefined; - - /** - * default is true. - */ - depth?: boolean | undefined; - - /** - * default is false. - */ - logarithmicDepthBuffer?: boolean | undefined; - - /** - * default is false. - */ - failIfMajorPerformanceCaveat?: boolean | undefined; -} - -export interface WebGLDebug { - /** - * Enables error checking and reporting when shader programs are being compiled. - */ - checkShaderErrors: boolean; - - /** - * A callback function that can be used for custom error reporting. The callback receives the WebGL context, an - * instance of WebGLProgram as well two instances of WebGLShader representing the vertex and fragment shader. - * Assigning a custom function disables the default error reporting. - * @default `null` - */ - onShaderError: ((gl: WebGLRenderingContext, program: WebGLProgram, glVertexShader: WebGLShader, glFragmentShader: WebGLShader) => void) | null; -} - -/** - * The WebGL renderer displays your beautifully crafted scenes using WebGL, if your device supports it. - * This renderer has way better performance than CanvasRenderer. - * - * see {@link https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLRenderer.js|src/renderers/WebGLRenderer.js} - */ -export class WebGLRenderer implements Renderer { - /** - * parameters is an optional object with properties defining the renderer's behavior. - * The constructor also accepts no parameters at all. - * In all cases, it will assume sane defaults when parameters are missing. - */ - constructor(parameters?: WebGLRendererParameters); - - /** - * A Canvas where the renderer draws its output. - * This is automatically created by the renderer in the constructor (if not provided already); you just need to add it to your page. - * @default document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ) - */ - domElement: HTMLCanvasElement; - - /** - * Defines whether the renderer should automatically clear its output before rendering. - * @default true - */ - autoClear: boolean; - - /** - * If autoClear is true, defines whether the renderer should clear the color buffer. Default is true. - * @default true - */ - autoClearColor: boolean; - - /** - * If autoClear is true, defines whether the renderer should clear the depth buffer. Default is true. - * @default true - */ - autoClearDepth: boolean; - - /** - * If autoClear is true, defines whether the renderer should clear the stencil buffer. Default is true. - * @default true - */ - autoClearStencil: boolean; - - /** - * Debug configurations. - * @default { checkShaderErrors: true } - */ - debug: WebGLDebug; - - /** - * Defines whether the renderer should sort objects. Default is true. - * @default true - */ - sortObjects: boolean; - - /** - * @default [] - */ - clippingPlanes: Plane[]; - - /** - * @default false - */ - localClippingEnabled: boolean; - - extensions: WebGLExtensions; - - /** - * Color space used for output to HTMLCanvasElement. Supported values are - * {@link SRGBColorSpace} and {@link LinearSRGBColorSpace}. - * @default THREE.SRGBColorSpace. - */ - get outputColorSpace(): ColorSpace; - set outputColorSpace(colorSpace: ColorSpace); - - get coordinateSystem(): typeof WebGLCoordinateSystem; - - /** - * @default THREE.NoToneMapping - */ - toneMapping: ToneMapping; - - /** - * @default 1 - */ - toneMappingExposure: number; - - info: WebGLInfo; - - shadowMap: WebGLShadowMap; - - pixelRatio: number; - - capabilities: WebGLCapabilities; - properties: WebGLProperties; - renderLists: WebGLRenderLists; - state: WebGLState; - - xr: WebXRManager; - - /** - * Return the WebGL context. - */ - getContext(): WebGLRenderingContext | WebGL2RenderingContext; - getContextAttributes(): any; - forceContextLoss(): void; - forceContextRestore(): void; - - /** - * @deprecated Use {@link WebGLCapabilities#getMaxAnisotropy .capabilities.getMaxAnisotropy()} instead. - */ - getMaxAnisotropy(): number; - - /** - * @deprecated Use {@link WebGLCapabilities#precision .capabilities.precision} instead. - */ - getPrecision(): string; - - getPixelRatio(): number; - setPixelRatio(value: number): void; - - getDrawingBufferSize(target: Vector2): Vector2; - setDrawingBufferSize(width: number, height: number, pixelRatio: number): void; - - getSize(target: Vector2): Vector2; - - /** - * Resizes the output canvas to (width, height), and also sets the viewport to fit that size, starting in (0, 0). - */ - setSize(width: number, height: number, updateStyle?: boolean): void; - - getCurrentViewport(target: Vector4): Vector4; - - /** - * Copies the viewport into target. - */ - getViewport(target: Vector4): Vector4; - - /** - * Sets the viewport to render from (x, y) to (x + width, y + height). - * (x, y) is the lower-left corner of the region. - */ - setViewport(x: Vector4 | number, y?: number, width?: number, height?: number): void; - - /** - * Copies the scissor area into target. - */ - getScissor(target: Vector4): Vector4; - - /** - * Sets the scissor area from (x, y) to (x + width, y + height). - */ - setScissor(x: Vector4 | number, y?: number, width?: number, height?: number): void; - - /** - * Returns true if scissor test is enabled; returns false otherwise. - */ - getScissorTest(): boolean; - - /** - * Enable the scissor test. When this is enabled, only the pixels within the defined scissor area will be affected by further renderer actions. - */ - setScissorTest(enable: boolean): void; - - /** - * Sets the custom opaque sort function for the WebGLRenderLists. Pass null to use the default painterSortStable function. - */ - setOpaqueSort(method: (a: any, b: any) => number): void; - - /** - * Sets the custom transparent sort function for the WebGLRenderLists. Pass null to use the default reversePainterSortStable function. - */ - setTransparentSort(method: (a: any, b: any) => number): void; - - /** - * Returns a THREE.Color instance with the current clear color. - */ - getClearColor(target: Color): Color; - - /** - * Sets the clear color, using color for the color and alpha for the opacity. - */ - setClearColor(color: ColorRepresentation, alpha?: number): void; - - /** - * Returns a float with the current clear alpha. Ranges from 0 to 1. - */ - getClearAlpha(): number; - - setClearAlpha(alpha: number): void; - - /** - * Tells the renderer to clear its color, depth or stencil drawing buffer(s). - * Arguments default to true - */ - clear(color?: boolean, depth?: boolean, stencil?: boolean): void; - - clearColor(): void; - clearDepth(): void; - clearStencil(): void; - clearTarget(renderTarget: WebGLRenderTarget, color: boolean, depth: boolean, stencil: boolean): void; - - /** - * @deprecated Use {@link WebGLState#reset .state.reset()} instead. - */ - resetGLState(): void; - dispose(): void; - - renderBufferDirect(camera: Camera, scene: Scene, geometry: BufferGeometry, material: Material, object: Object3D, geometryGroup: any): void; - - /** - * A build in function that can be used instead of requestAnimationFrame. For WebXR projects this function must be used. - * @param callback The function will be called every available frame. If `null` is passed it will stop any already ongoing animation. - */ - setAnimationLoop(callback: XRFrameRequestCallback | null): void; - - /** - * @deprecated Use {@link WebGLRenderer#setAnimationLoop .setAnimationLoop()} instead. - */ - animate(callback: () => void): void; - - /** - * Compiles all materials in the scene with the camera. This is useful to precompile shaders before the first - * rendering. If you want to add a 3D object to an existing scene, use the third optional parameter for applying the - * target scene. - * Note that the (target) scene's lighting should be configured before calling this method. - */ - compile: (scene: Object3D, camera: Camera, targetScene?: Scene | null) => Set; - - /** - * Asynchronous version of {@link compile}(). The method returns a Promise that resolves when the given scene can be - * rendered without unnecessary stalling due to shader compilation. - * This method makes use of the KHR_parallel_shader_compile WebGL extension. - */ - compileAsync: (scene: Object3D, camera: Camera, targetScene?: Scene | null) => Promise; - - /** - * Render a scene or an object using a camera. - * The render is done to a previously specified {@link WebGLRenderTarget#renderTarget .renderTarget} set by calling - * {@link WebGLRenderer#setRenderTarget .setRenderTarget} or to the canvas as usual. - * - * By default render buffers are cleared before rendering but you can prevent this by setting the property - * {@link WebGLRenderer#autoClear autoClear} to false. If you want to prevent only certain buffers being cleared - * you can set either the {@link WebGLRenderer#autoClearColor autoClearColor}, - * {@link WebGLRenderer#autoClearStencil autoClearStencil} or {@link WebGLRenderer#autoClearDepth autoClearDepth} - * properties to false. To forcibly clear one ore more buffers call {@link WebGLRenderer#clear .clear}. - */ - render(scene: Object3D, camera: Camera): void; - - /** - * Returns the current active cube face. - */ - getActiveCubeFace(): number; - - /** - * Returns the current active mipmap level. - */ - getActiveMipmapLevel(): number; - - /** - * Returns the current render target. If no render target is set, null is returned. - */ - getRenderTarget(): WebGLRenderTarget | null; - - /** - * @deprecated Use {@link WebGLRenderer#getRenderTarget .getRenderTarget()} instead. - */ - getCurrentRenderTarget(): WebGLRenderTarget | null; - - /** - * Sets the active render target. - * - * @param renderTarget The {@link WebGLRenderTarget renderTarget} that needs to be activated. When `null` is given, the canvas is set as the active render target instead. - * @param activeCubeFace Specifies the active cube side (PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5) of {@link WebGLCubeRenderTarget}. - * @param activeMipmapLevel Specifies the active mipmap level. - */ - setRenderTarget(renderTarget: WebGLRenderTarget | WebGLRenderTarget | null, activeCubeFace?: number, activeMipmapLevel?: number): void; - - readRenderTargetPixels(renderTarget: WebGLRenderTarget | WebGLRenderTarget, x: number, y: number, width: number, height: number, buffer: TypedArray, activeCubeFaceIndex?: number): void; - - readRenderTargetPixelsAsync(renderTarget: WebGLRenderTarget | WebGLRenderTarget, x: number, y: number, width: number, height: number, buffer: TypedArray, activeCubeFaceIndex?: number): Promise; - - /** - * Copies a region of the currently bound framebuffer into the selected mipmap level of the selected texture. - * This region is defined by the size of the destination texture's mip level, offset by the input position. - * - * @param texture Specifies the destination texture. - * @param position Specifies the pixel offset from which to copy out of the framebuffer. - * @param level Specifies the destination mipmap level of the texture. - */ - copyFramebufferToTexture(texture: Texture, position?: Vector2 | null, level?: number): void; - - /** - * Copies the pixels of a texture in the bounds `srcRegion` in the destination texture starting from the given - * position. - * - * @param srcTexture Specifies the source texture. - * @param dstTexture Specifies the destination texture. - * @param srcRegion Specifies the bounds - * @param dstPosition Specifies the pixel offset into the dstTexture where the copy will occur. - * @param level Specifies the destination mipmap level of the texture. - */ - copyTextureToTexture(srcTexture: Texture, dstTexture: Texture, srcRegion?: Box2 | null, dstPosition?: Vector2 | null, level?: number): void; - - /** - * Copies the pixels of a texture in the bounds `srcRegion` in the destination texture starting from the given - * position. - * - * @param srcTexture Specifies the source texture. - * @param dstTexture Specifies the destination texture. - * @param srcRegion Specifies the bounds - * @param dstPosition Specifies the pixel offset into the dstTexture where the copy will occur. - * @param level Specifies the destination mipmap level of the texture. - */ - copyTextureToTexture3D(srcTexture: Texture, dstTexture: Data3DTexture | DataArrayTexture, srcRegion?: Box3 | null, dstPosition?: Vector3 | null, level?: number): void; - - /** - * Initializes the given WebGLRenderTarget memory. Useful for initializing a render target so data can be copied - * into it using {@link WebGLRenderer.copyTextureToTexture} before it has been rendered to. - * @param target - */ - initRenderTarget(target: WebGLRenderTarget): void; - - /** - * Initializes the given texture. Can be used to preload a texture rather than waiting until first render (which can cause noticeable lags due to decode and GPU upload overhead). - * - * @param texture The texture to Initialize. - */ - initTexture(texture: Texture): void; - - /** - * Can be used to reset the internal WebGL state. - */ - resetState(): void; - - /** - * @deprecated Use {@link WebGLRenderer#xr .xr} instead. - */ - vr: boolean; - - /** - * @deprecated Use {@link WebGLShadowMap#enabled .shadowMap.enabled} instead. - */ - shadowMapEnabled: boolean; - - /** - * @deprecated Use {@link WebGLShadowMap#type .shadowMap.type} instead. - */ - shadowMapType: ShadowMapType; - - /** - * @deprecated Use {@link WebGLShadowMap#cullFace .shadowMap.cullFace} instead. - */ - shadowMapCullFace: CullFace; - - /** - * @deprecated Use {@link WebGLExtensions#get .extensions.get( 'OES_texture_float' )} instead. - */ - supportsFloatTextures(): any; - - /** - * @deprecated Use {@link WebGLExtensions#get .extensions.get( 'OES_texture_half_float' )} instead. - */ - supportsHalfFloatTextures(): any; - - /** - * @deprecated Use {@link WebGLExtensions#get .extensions.get( 'OES_standard_derivatives' )} instead. - */ - supportsStandardDerivatives(): any; - - /** - * @deprecated Use {@link WebGLExtensions#get .extensions.get( 'WEBGL_compressed_texture_s3tc' )} instead. - */ - supportsCompressedTextureS3TC(): any; - - /** - * @deprecated Use {@link WebGLExtensions#get .extensions.get( 'WEBGL_compressed_texture_pvrtc' )} instead. - */ - supportsCompressedTexturePVRTC(): any; - - /** - * @deprecated Use {@link WebGLExtensions#get .extensions.get( 'EXT_blend_minmax' )} instead. - */ - supportsBlendMinMax(): any; - - /** - * @deprecated Use {@link WebGLCapabilities#vertexTextures .capabilities.vertexTextures} instead. - */ - supportsVertexTextures(): any; - - /** - * @deprecated Use {@link WebGLExtensions#get .extensions.get( 'ANGLE_instanced_arrays' )} instead. - */ - supportsInstancedArrays(): any; - - /** - * @deprecated Use {@link WebGLRenderer#setScissorTest .setScissorTest()} instead. - */ - enableScissorTest(boolean: any): any; -} diff --git a/packages/canvas-three/three/src/renderers/common/Animation.d.ts b/packages/canvas-three/three/src/renderers/common/Animation.d.ts deleted file mode 100644 index 13d7d9fc8..000000000 --- a/packages/canvas-three/three/src/renderers/common/Animation.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Info from './Info.js'; -import Nodes from './nodes/Nodes.js'; -declare class Animation { - nodes: Nodes; - info: Info; - animationLoop: ((time: DOMHighResTimeStamp, frame?: XRFrame) => void) | null; - requestId: number | null; - constructor(nodes: Nodes, info: Info); - _init(): void; - dispose(): void; - setAnimationLoop(callback: ((time: DOMHighResTimeStamp, frame?: XRFrame) => void) | null): void; -} -export default Animation; diff --git a/packages/canvas-three/three/src/renderers/common/Attributes.d.ts b/packages/canvas-three/three/src/renderers/common/Attributes.d.ts deleted file mode 100644 index fb56ec1c8..000000000 --- a/packages/canvas-three/three/src/renderers/common/Attributes.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { BufferAttribute } from '../../core/BufferAttribute.js'; -import { InterleavedBuffer } from '../../core/InterleavedBuffer.js'; -import { InterleavedBufferAttribute } from '../../core/InterleavedBufferAttribute.js'; -import Backend from './Backend.js'; -import { AttributeType } from './Constants.js'; -import DataMap from './DataMap.js'; -interface Data { - version?: number | undefined; -} -declare class Attributes extends DataMap<{ - attribute: { - key: BufferAttribute | InterleavedBufferAttribute; - value: Data; - }; -}> { - backend: Backend; - constructor(backend: Backend); - delete(attribute: BufferAttribute | InterleavedBufferAttribute): Data; - update(attribute: BufferAttribute | InterleavedBufferAttribute, type: AttributeType): void; - _getBufferAttribute(attribute: BufferAttribute | InterleavedBufferAttribute): BufferAttribute | InterleavedBuffer; -} -export default Attributes; diff --git a/packages/canvas-three/three/src/renderers/common/Backend.d.ts b/packages/canvas-three/three/src/renderers/common/Backend.d.ts deleted file mode 100644 index 069cec14e..000000000 --- a/packages/canvas-three/three/src/renderers/common/Backend.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { CoordinateSystem } from '../../constants.js'; -import Renderer from './Renderer.js'; - -export interface BackendParameters { - canvas?: HTMLCanvasElement | undefined; -} - -export default abstract class Backend { - renderer: Renderer | null; - domElement: HTMLCanvasElement | null; - - constructor(parameters?: BackendParameters); - - init(renderer: Renderer): void; - - abstract get coordinateSystem(): CoordinateSystem; - - getDomElement(): HTMLCanvasElement; -} diff --git a/packages/canvas-three/three/src/renderers/common/Background.d.ts b/packages/canvas-three/three/src/renderers/common/Background.d.ts deleted file mode 100644 index 66432a89b..000000000 --- a/packages/canvas-three/three/src/renderers/common/Background.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Mesh } from '../../objects/Mesh.js'; -import { Scene } from '../../scenes/Scene.js'; -import DataMap from './DataMap.js'; -import Nodes from './nodes/Nodes.js'; -import RenderContext from './RenderContext.js'; -import Renderer from './Renderer.js'; -import RenderList from './RenderList.js'; -interface SceneData { - backgroundMesh?: Mesh; - backgroundCacheKey: string; -} -declare class Background extends DataMap<{ - scene: { - key: Scene; - value: SceneData; - }; -}> { - renderer: Renderer; - nodes: Nodes; - constructor(renderer: Renderer, nodes: Nodes); - update(scene: Scene, renderList: RenderList, renderContext: RenderContext): void; -} -export default Background; diff --git a/packages/canvas-three/three/src/renderers/common/BindGroup.d.ts b/packages/canvas-three/three/src/renderers/common/BindGroup.d.ts deleted file mode 100644 index ca8d4bb84..000000000 --- a/packages/canvas-three/three/src/renderers/common/BindGroup.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import Binding from './Binding.js'; -import NodeUniformsGroup from './nodes/NodeUniformsGroup.js'; -declare class BindGroup { - name: string; - bindings: NodeUniformsGroup[] | Binding[]; - id: number; - constructor(name?: string, bindings?: NodeUniformsGroup[]); -} -export default BindGroup; diff --git a/packages/canvas-three/three/src/renderers/common/Binding.d.ts b/packages/canvas-three/three/src/renderers/common/Binding.d.ts deleted file mode 100644 index c78b51cf1..000000000 --- a/packages/canvas-three/three/src/renderers/common/Binding.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -declare class Binding { - name: string; - visibility: number; - constructor(name?: string); - setVisibility(visibility: number): void; - clone(): Binding & this; -} -export default Binding; diff --git a/packages/canvas-three/three/src/renderers/common/Bindings.d.ts b/packages/canvas-three/three/src/renderers/common/Bindings.d.ts deleted file mode 100644 index 0dacb2011..000000000 --- a/packages/canvas-three/three/src/renderers/common/Bindings.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import ComputeNode from '../../nodes/gpgpu/ComputeNode.js'; -import Attributes from './Attributes.js'; -import Backend from './Backend.js'; -import BindGroup from './BindGroup.js'; -import DataMap from './DataMap.js'; -import Info from './Info.js'; -import Nodes from './nodes/Nodes.js'; -import Pipelines from './Pipelines.js'; -import RenderObject from './RenderObject.js'; -import Textures from './Textures.js'; -interface BindGroupData { - bindGroup?: BindGroup | undefined; -} -declare class Bindings extends DataMap<{ - bindGroup: { - key: BindGroup; - value: BindGroupData; - }; -}> { - backend: Backend; - textures: Textures; - pipelines: Pipelines; - attributes: Attributes; - nodes: Nodes; - info: Info; - constructor(backend: Backend, nodes: Nodes, textures: Textures, attributes: Attributes, pipelines: Pipelines, info: Info); - getForRender(renderObject: RenderObject): BindGroup[]; - getForCompute(computeNode: ComputeNode): BindGroup[]; - updateForCompute(computeNode: ComputeNode): void; - updateForRender(renderObject: RenderObject): void; - _updateBindings(object: ComputeNode | RenderObject, bindings: BindGroup[]): void; - _init(bindGroup: BindGroup): void; - _update(object: ComputeNode | RenderObject, bindGroup: BindGroup, bindings: BindGroup[]): void; -} -export default Bindings; diff --git a/packages/canvas-three/three/src/renderers/common/Buffer.d.ts b/packages/canvas-three/three/src/renderers/common/Buffer.d.ts deleted file mode 100644 index 6f6f0ed2e..000000000 --- a/packages/canvas-three/three/src/renderers/common/Buffer.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import Binding from './Binding.js'; -declare class Buffer extends Binding { - readonly isBuffer: true; - bytesPerElement: number; - _buffer: Float32Array | null; - constructor(name?: string, buffer?: Float32Array | null); - get byteLength(): number; - get buffer(): Float32Array | null; - update(): boolean; -} -export default Buffer; diff --git a/packages/canvas-three/three/src/renderers/common/BufferUtils.d.ts b/packages/canvas-three/three/src/renderers/common/BufferUtils.d.ts deleted file mode 100644 index 7913530bc..000000000 --- a/packages/canvas-three/three/src/renderers/common/BufferUtils.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare function getFloatLength(floatLength: number): number; -declare function getVectorLength(count: number, vectorLength?: number): number; -declare function getStrideLength(vectorLength: number): number; -export { getFloatLength, getStrideLength, getVectorLength }; diff --git a/packages/canvas-three/three/src/renderers/common/ChainMap.d.ts b/packages/canvas-three/three/src/renderers/common/ChainMap.d.ts deleted file mode 100644 index 3b6270029..000000000 --- a/packages/canvas-three/three/src/renderers/common/ChainMap.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -type RecursiveWeakMap = WeakMap>; -export default class ChainMap { - weakMap: RecursiveWeakMap; - constructor(); - get(keys: K): V | undefined; - set(keys: K, value: V): V; - delete(keys: K): boolean; -} -export {}; diff --git a/packages/canvas-three/three/src/renderers/common/ClippingContext.d.ts b/packages/canvas-three/three/src/renderers/common/ClippingContext.d.ts deleted file mode 100644 index 9196a33e2..000000000 --- a/packages/canvas-three/three/src/renderers/common/ClippingContext.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { Material } from '../../materials/Material.js'; -import { Matrix3 } from '../../math/Matrix3.js'; -import { Matrix4 } from '../../math/Matrix4.js'; -import { Plane } from '../../math/Plane.js'; -import { Vector4 } from '../../math/Vector4.js'; -import Renderer from './Renderer.js'; -declare class ClippingContext { - version: number; - globalClippingCount: number; - localClippingCount: number; - localClippingEnabled: boolean | undefined; - localClipIntersection: boolean; - planes: Vector4[]; - parentVersion: number; - viewNormalMatrix: Matrix3; - viewMatrix?: Matrix4 | undefined; - constructor(); - projectPlanes(source: readonly Plane[], offset: number): void; - updateGlobal(renderer: Renderer, camera: Camera): void; - update(parent: ClippingContext, material: Material): void; -} -export default ClippingContext; diff --git a/packages/canvas-three/three/src/renderers/common/Color4.d.ts b/packages/canvas-three/three/src/renderers/common/Color4.d.ts deleted file mode 100644 index 4ad34d586..000000000 --- a/packages/canvas-three/three/src/renderers/common/Color4.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Color, ColorRepresentation } from '../../math/Color.js'; -declare class Color4 extends Color { - a: number; - constructor(color?: ColorRepresentation); - constructor(r: number, g: number, b: number, a?: number); - set(...args: [color: ColorRepresentation] | [r: number, g: number, b: number, a?: number]): this; - copy(color: Color): this; - clone(): this; -} -export default Color4; diff --git a/packages/canvas-three/three/src/renderers/common/ComputePipeline.d.ts b/packages/canvas-three/three/src/renderers/common/ComputePipeline.d.ts deleted file mode 100644 index dc7430e70..000000000 --- a/packages/canvas-three/three/src/renderers/common/ComputePipeline.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Pipeline from './Pipeline.js'; -import ProgrammableStage from './ProgrammableStage.js'; -declare class ComputePipeline extends Pipeline { - computeProgram: ProgrammableStage; - readonly isComputePipeline: true; - constructor(cacheKey: string, computeProgram: ProgrammableStage); -} -export default ComputePipeline; diff --git a/packages/canvas-three/three/src/renderers/common/Constants.d.ts b/packages/canvas-three/three/src/renderers/common/Constants.d.ts deleted file mode 100644 index 5712d41fc..000000000 --- a/packages/canvas-three/three/src/renderers/common/Constants.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export declare const AttributeType: { - readonly VERTEX: 1; - readonly INDEX: 2; - readonly STORAGE: 4; -}; -export type AttributeType = (typeof AttributeType)[keyof typeof AttributeType]; -export declare const GPU_CHUNK_BYTES = 16; -export declare const BlendColorFactor = 211; -export declare const OneMinusBlendColorFactor = 212; diff --git a/packages/canvas-three/three/src/renderers/common/CubeRenderTarget.d.ts b/packages/canvas-three/three/src/renderers/common/CubeRenderTarget.d.ts deleted file mode 100644 index 77d968dd4..000000000 --- a/packages/canvas-three/three/src/renderers/common/CubeRenderTarget.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { RenderTargetOptions } from '../../core/RenderTarget.js'; -import { WebGLCubeRenderTarget } from '../../renderers/WebGLCubeRenderTarget.js'; -import { Texture } from '../../textures/Texture.js'; -import { WebGLRenderer } from '../WebGLRenderer.js'; -declare class CubeRenderTarget extends WebGLCubeRenderTarget { - readonly isCubeRenderTarget: true; - constructor(size?: number, options?: RenderTargetOptions); - fromEquirectangularTexture(renderer: WebGLRenderer, texture: Texture): this; -} -export default CubeRenderTarget; diff --git a/packages/canvas-three/three/src/renderers/common/DataMap.d.ts b/packages/canvas-three/three/src/renderers/common/DataMap.d.ts deleted file mode 100644 index 22dd5f71e..000000000 --- a/packages/canvas-three/three/src/renderers/common/DataMap.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -declare class DataMap< - M extends { - [key: string]: { - key: object; - value: unknown; - }; - } -> { - data: WeakMap; - constructor(); - get( - object: K - ): Extract< - M[keyof M], - { - key: K; - } - >['value']; - delete( - object: K - ): Extract< - M[keyof M], - { - key: K; - } - >['value']; - has(object: M[keyof M]['key']): boolean; - dispose(): void; -} -export default DataMap; diff --git a/packages/canvas-three/three/src/renderers/common/Geometries.d.ts b/packages/canvas-three/three/src/renderers/common/Geometries.d.ts deleted file mode 100644 index 35c984c04..000000000 --- a/packages/canvas-three/three/src/renderers/common/Geometries.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { BufferAttribute } from '../../core/BufferAttribute.js'; -import { BufferGeometry } from '../../core/BufferGeometry.js'; -import { InterleavedBuffer } from '../../core/InterleavedBuffer.js'; -import { InterleavedBufferAttribute } from '../../core/InterleavedBufferAttribute.js'; -import Attributes from './Attributes.js'; -import { AttributeType } from './Constants.js'; -import DataMap from './DataMap.js'; -import Info from './Info.js'; -import RenderObject from './RenderObject.js'; -interface GeometryData { - initialized?: boolean | undefined; -} -declare class Geometries extends DataMap<{ - geometry: { - key: BufferGeometry; - value: GeometryData; - }; -}> { - attributes: Attributes; - info: Info; - wireframes: WeakMap; - attributeCall: WeakMap; - constructor(attributes: Attributes, info: Info); - has(renderObject: RenderObject | BufferGeometry): boolean; - updateForRender(renderObject: RenderObject): void; - initGeometry(renderObject: RenderObject): void; - updateAttributes(renderObject: RenderObject): void; - updateAttribute(attribute: BufferAttribute | InterleavedBufferAttribute, type: AttributeType): void; - getIndex(renderObject: RenderObject): BufferAttribute | null; -} -export default Geometries; diff --git a/packages/canvas-three/three/src/renderers/common/Info.d.ts b/packages/canvas-three/three/src/renderers/common/Info.d.ts deleted file mode 100644 index 3ff9a6094..000000000 --- a/packages/canvas-three/three/src/renderers/common/Info.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Object3D } from '../../core/Object3D.js'; -declare class Info { - autoReset: boolean; - frame: number; - calls: number; - render: { - calls: number; - frameCalls: number; - drawCalls: number; - triangles: number; - points: number; - lines: number; - timestamp: number; - previousFrameCalls: number; - timestampCalls: number; - }; - compute: { - calls: number; - frameCalls: number; - timestamp: number; - previousFrameCalls: number; - timestampCalls: number; - }; - memory: { - geometries: number; - textures: number; - }; - constructor(); - update(object: Object3D, count: number, instanceCount: number): void; - updateTimestamp(type: 'render' | 'compute', time: number): void; - reset(): void; - dispose(): void; -} -export default Info; diff --git a/packages/canvas-three/three/src/renderers/common/Pipeline.d.ts b/packages/canvas-three/three/src/renderers/common/Pipeline.d.ts deleted file mode 100644 index a885a309d..000000000 --- a/packages/canvas-three/three/src/renderers/common/Pipeline.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -declare class Pipeline { - cacheKey: string; - usedTimes: number; - constructor(cacheKey: string); -} -export default Pipeline; diff --git a/packages/canvas-three/three/src/renderers/common/Pipelines.d.ts b/packages/canvas-three/three/src/renderers/common/Pipelines.d.ts deleted file mode 100644 index dd85e7dce..000000000 --- a/packages/canvas-three/three/src/renderers/common/Pipelines.d.ts +++ /dev/null @@ -1,53 +0,0 @@ -import ComputeNode from '../../nodes/gpgpu/ComputeNode.js'; -import Backend from './Backend.js'; -import Binding from './Binding.js'; -import Bindings from './Bindings.js'; -import ComputePipeline from './ComputePipeline.js'; -import DataMap from './DataMap.js'; -import Nodes from './nodes/Nodes.js'; -import Pipeline from './Pipeline.js'; -import ProgrammableStage from './ProgrammableStage.js'; -import RenderObject from './RenderObject.js'; -import RenderPipeline from './RenderPipeline.js'; -interface ComputeNodeData { - version: number; - pipeline: ComputePipeline; -} -interface RenderObjectData { - pipeline: RenderPipeline; -} -declare class Pipelines extends DataMap<{ - computeNode: { - key: ComputeNode; - value: ComputeNodeData; - }; - renderObject: { - key: RenderObject; - value: RenderObjectData; - }; -}> { - backend: Backend; - nodes: Nodes; - bindings: Bindings | null; - caches: Map; - programs: { - vertex: Map; - fragment: Map; - compute: Map; - }; - constructor(backend: Backend, nodes: Nodes); - getForCompute(computeNode: ComputeNode, bindings: Binding[]): ComputePipeline; - getForRender(renderObject: RenderObject, promises?: Promise[] | null): RenderPipeline; - delete(object: ComputeNode | RenderObject): never; - dispose(): void; - updateForRender(renderObject: RenderObject): void; - _getComputePipeline(computeNode: ComputeNode, stageCompute: ProgrammableStage, cacheKey: string, bindings: Binding[]): ComputePipeline; - _getRenderPipeline(renderObject: RenderObject, stageVertex: ProgrammableStage, stageFragment: ProgrammableStage, cacheKey: string, promises: Promise[] | null): RenderPipeline; - _getComputeCacheKey(computeNode: ComputeNode, stageCompute: ProgrammableStage): string; - _getRenderCacheKey(renderObject: RenderObject, stageVertex: ProgrammableStage, stageFragment: ProgrammableStage): string; - _releasePipeline(pipeline: Pipeline): void; - _releaseProgram(program: ProgrammableStage): void; - _needsComputeUpdate(computeNode: ComputeNode): boolean; - _needsRenderUpdate(renderObject: RenderObject): true | void; -} -export default Pipelines; diff --git a/packages/canvas-three/three/src/renderers/common/PostProcessing.d.ts b/packages/canvas-three/three/src/renderers/common/PostProcessing.d.ts deleted file mode 100644 index 23dbe7384..000000000 --- a/packages/canvas-three/three/src/renderers/common/PostProcessing.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Node } from '../../nodes/Nodes.js'; -import Renderer from './Renderer.js'; - -declare class PostProcessing { - renderer: Renderer; - outputNode: Node; - - outputColorTransform: boolean; - - needsUpdate: boolean; - - constructor(renderer: Renderer, outputNode?: Node); - - render(): void; - - update(): void; - - renderAsync(): Promise; -} - -export default PostProcessing; diff --git a/packages/canvas-three/three/src/renderers/common/ProgrammableStage.d.ts b/packages/canvas-three/three/src/renderers/common/ProgrammableStage.d.ts deleted file mode 100644 index d04f25e3f..000000000 --- a/packages/canvas-three/three/src/renderers/common/ProgrammableStage.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import NodeAttribute from '../../nodes/core/NodeAttribute.js'; -declare class ProgrammableStage { - id: number; - code: string; - stage: 'compute' | 'vertex' | 'fragment'; - attributes: NodeAttribute[] | null; - usedTimes: number; - constructor(code: string, type: 'compute' | 'vertex' | 'fragment', transforms?: null, attributes?: NodeAttribute[] | null); -} -export default ProgrammableStage; diff --git a/packages/canvas-three/three/src/renderers/common/QuadMesh.d.ts b/packages/canvas-three/three/src/renderers/common/QuadMesh.d.ts deleted file mode 100644 index 0f4fe9e6c..000000000 --- a/packages/canvas-three/three/src/renderers/common/QuadMesh.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { OrthographicCamera } from '../../cameras/OrthographicCamera.js'; -import { Material } from '../../materials/Material.js'; -import { Mesh } from '../../objects/Mesh.js'; -import Renderer from './Renderer.js'; - -export default class QuadMesh extends Mesh { - camera: OrthographicCamera; - - constructor(material?: Material | null); - - renderAsync(renderer: Renderer): Promise; - - render(renderer: Renderer): void; -} diff --git a/packages/canvas-three/three/src/renderers/common/RenderBundle.d.ts b/packages/canvas-three/three/src/renderers/common/RenderBundle.d.ts deleted file mode 100644 index 2f233d423..000000000 --- a/packages/canvas-three/three/src/renderers/common/RenderBundle.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { Object3D } from '../../core/Object3D.js'; -declare class RenderBundle { - scene: Object3D; - camera: Camera; - constructor(scene: Object3D, camera: Camera); - clone(): RenderBundle & this; -} -export default RenderBundle; diff --git a/packages/canvas-three/three/src/renderers/common/RenderBundles.d.ts b/packages/canvas-three/three/src/renderers/common/RenderBundles.d.ts deleted file mode 100644 index b6619c521..000000000 --- a/packages/canvas-three/three/src/renderers/common/RenderBundles.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { Object3D } from '../../core/Object3D.js'; -import ChainMap from './ChainMap.js'; -import RenderBundle from './RenderBundle.js'; -declare class RenderBundles { - lists: ChainMap; - constructor(); - get(scene: Object3D, camera: Camera): RenderBundle; - dispose(): void; -} -export default RenderBundles; diff --git a/packages/canvas-three/three/src/renderers/common/RenderContext.d.ts b/packages/canvas-three/three/src/renderers/common/RenderContext.d.ts deleted file mode 100644 index 6b28702a7..000000000 --- a/packages/canvas-three/three/src/renderers/common/RenderContext.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { RenderTarget } from '../../core/RenderTarget.js'; -import { Vector4 } from '../../math/Vector4.js'; -import { DepthTexture } from '../../textures/DepthTexture.js'; -import { Texture } from '../../textures/Texture.js'; -import ClippingContext from './ClippingContext.js'; -declare class RenderContext { - id: number; - color: boolean; - clearColor: boolean; - clearColorValue: { - r: number; - g: number; - b: number; - a: number; - }; - depth: boolean; - clearDepth: boolean; - clearDepthValue: number; - stencil: boolean; - clearStencil: boolean; - clearStencilValue: number; - viewport: boolean; - viewportValue: Vector4; - scissor: boolean; - scissorValue: Vector4; - textures: Texture[] | null; - depthTexture: DepthTexture | null; - activeCubeFace: number; - sampleCount: number; - width: number; - height: number; - readonly isRenderContext: true; - clippingContext?: ClippingContext | undefined; - depthClearValue?: number | undefined; - stencilClearValue?: number | undefined; - renderTarget?: RenderTarget | undefined; - activeMipmapLevel?: number | undefined; - occlusionQueryCount?: number | undefined; - constructor(); -} -export default RenderContext; diff --git a/packages/canvas-three/three/src/renderers/common/RenderContexts.d.ts b/packages/canvas-three/three/src/renderers/common/RenderContexts.d.ts deleted file mode 100644 index cd7982d9e..000000000 --- a/packages/canvas-three/three/src/renderers/common/RenderContexts.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { RenderTarget } from '../../core/RenderTarget.js'; -import { Scene } from '../../scenes/Scene.js'; -import ChainMap from './ChainMap.js'; -import RenderContext from './RenderContext.js'; -declare class RenderContexts { - chainMaps: { - [attachmentState: string]: ChainMap | undefined; - }; - constructor(); - get(scene: Scene, camera: Camera, renderTarget?: RenderTarget | null): RenderContext; - getChainMap(attachmentState: string): ChainMap; - dispose(): void; -} -export default RenderContexts; diff --git a/packages/canvas-three/three/src/renderers/common/RenderList.d.ts b/packages/canvas-three/three/src/renderers/common/RenderList.d.ts deleted file mode 100644 index eb7e5cbf7..000000000 --- a/packages/canvas-three/three/src/renderers/common/RenderList.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { BufferGeometry, GeometryGroup } from '../../core/BufferGeometry.js'; -import { Object3D } from '../../core/Object3D.js'; -import { Light } from '../../lights/Light.js'; -import { Material } from '../../materials/Material.js'; -import { LightsNode } from '../../nodes/Nodes.js'; -export interface Bundle { - object: Object3D; - camera: Camera; - renderList: RenderList; -} -export interface RenderItem { - id: number | null; - object: Object3D | null; - geometry: BufferGeometry | null; - material: Material | null; - groupOrder: number | null; - renderOrder: number | null; - z: number | null; - group: GeometryGroup | null; -} -declare class RenderList { - renderItems: RenderItem[]; - renderItemsIndex: number; - opaque: RenderItem[]; - transparent: RenderItem[]; - bundles: Bundle[]; - lightsNode: LightsNode; - lightsArray: Light[]; - occlusionQueryCount: number; - constructor(); - begin(): this; - getNextRenderItem(object: Object3D, geometry: BufferGeometry, material: Material, groupOrder: number, z: number, group: GeometryGroup | null): RenderItem; - push(object: Object3D, geometry: BufferGeometry, material: Material, groupOrder: number, z: number, group: GeometryGroup | null): void; - unshift(object: Object3D, geometry: BufferGeometry, material: Material, groupOrder: number, z: number, group: GeometryGroup | null): void; - pushBundle(group: Bundle): void; - pushLight(light: Light): void; - getLightsNode(): LightsNode; - sort(customOpaqueSort: ((a: RenderItem, b: RenderItem) => number) | null, customTransparentSort: ((a: RenderItem, b: RenderItem) => number) | null): void; - finish(): void; -} -export default RenderList; diff --git a/packages/canvas-three/three/src/renderers/common/RenderLists.d.ts b/packages/canvas-three/three/src/renderers/common/RenderLists.d.ts deleted file mode 100644 index 6fcb01710..000000000 --- a/packages/canvas-three/three/src/renderers/common/RenderLists.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { Object3D } from '../../core/Object3D.js'; -import ChainMap from './ChainMap.js'; -import RenderList from './RenderList.js'; -declare class RenderLists { - lists: ChainMap; - constructor(); - get(scene: Object3D, camera: Camera): RenderList; - dispose(): void; -} -export default RenderLists; diff --git a/packages/canvas-three/three/src/renderers/common/RenderObject.d.ts b/packages/canvas-three/three/src/renderers/common/RenderObject.d.ts deleted file mode 100644 index 2c14a40f7..000000000 --- a/packages/canvas-three/three/src/renderers/common/RenderObject.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { BufferAttribute } from '../../core/BufferAttribute.js'; -import { BufferGeometry } from '../../core/BufferGeometry.js'; -import { InterleavedBuffer } from '../../core/InterleavedBuffer.js'; -import { InterleavedBufferAttribute } from '../../core/InterleavedBufferAttribute.js'; -import { Object3D } from '../../core/Object3D.js'; -import { Material } from '../../materials/Material.js'; -import { LightsNode } from '../../nodes/Nodes.js'; -import { Scene } from '../../scenes/Scene.js'; -import BindGroup from './BindGroup.js'; -import ClippingContext from './ClippingContext.js'; -import Geometries from './Geometries.js'; -import NodeBuilderState from './nodes/NodeBuilderState.js'; -import Nodes from './nodes/Nodes.js'; -import RenderContext from './RenderContext.js'; -import Renderer from './Renderer.js'; -import RenderPipeline from './RenderPipeline.js'; -export default class RenderObject { - _nodes: Nodes; - _geometries: Geometries; - id: number; - renderer: Renderer; - object: Object3D; - material: Material; - scene: Scene; - camera: Camera; - lightsNode: LightsNode; - context: RenderContext; - geometry: BufferGeometry; - version: number; - drawRange: { - start: number; - count: number; - } | null; - attributes: Array | null; - pipeline: RenderPipeline | null; - vertexBuffers: Array | null; - clippingContext: ClippingContext; - clippingContextVersion: number; - initialNodesCacheKey: string; - initialCacheKey: string; - _nodeBuilderState: NodeBuilderState | null; - _bindings: BindGroup[] | null; - onDispose: (() => void) | null; - readonly isRenderObject: true; - onMaterialDispose: () => void; - constructor(nodes: Nodes, geometries: Geometries, renderer: Renderer, object: Object3D, material: Material, scene: Scene, camera: Camera, lightsNode: LightsNode, renderContext: RenderContext); - updateClipping(parent: ClippingContext): void; - get clippingNeedsUpdate(): boolean; - getNodeBuilderState(): NodeBuilderState; - getBindings(): BindGroup[]; - getIndex(): BufferAttribute | null; - getChainArray(): readonly [Object3D, Material, RenderContext, LightsNode]; - getAttributes(): (InterleavedBufferAttribute | BufferAttribute)[]; - getVertexBuffers(): (InterleavedBuffer | BufferAttribute)[] | null; - getMaterialCacheKey(): string; - get needsUpdate(): boolean; - getDynamicCacheKey(): string; - getCacheKey(): string; - dispose(): void; -} diff --git a/packages/canvas-three/three/src/renderers/common/RenderObjects.d.ts b/packages/canvas-three/three/src/renderers/common/RenderObjects.d.ts deleted file mode 100644 index 654f4f24f..000000000 --- a/packages/canvas-three/three/src/renderers/common/RenderObjects.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { Object3D } from '../../core/Object3D.js'; -import { Material } from '../../materials/Material.js'; -import LightsNode from '../../nodes/lighting/LightsNode.js'; -import { Scene } from '../../scenes/Scene.js'; -import Bindings from './Bindings.js'; -import ChainMap from './ChainMap.js'; -import Geometries from './Geometries.js'; -import Info from './Info.js'; -import Nodes from './nodes/Nodes.js'; -import Pipelines from './Pipelines.js'; -import RenderContext from './RenderContext.js'; -import Renderer from './Renderer.js'; -import RenderObject from './RenderObject.js'; -declare class RenderObjects { - renderer: Renderer; - nodes: Nodes; - geometries: Geometries; - pipelines: Pipelines; - bindings: Bindings; - info: Info; - chainMaps: { - [passId: string]: ChainMap; - }; - constructor(renderer: Renderer, nodes: Nodes, geometries: Geometries, pipelines: Pipelines, bindings: Bindings, info: Info); - get(object: Object3D, material: Material, scene: Scene, camera: Camera, lightsNode: LightsNode, renderContext: RenderContext, passId: string | undefined): RenderObject; - getChainMap(passId?: string): ChainMap, Material, RenderContext, LightsNode], RenderObject>; - dispose(): void; - createRenderObject(nodes: Nodes, geometries: Geometries, renderer: Renderer, object: Object3D, material: Material, scene: Scene, camera: Camera, lightsNode: LightsNode, renderContext: RenderContext, passId: string | undefined): RenderObject; -} -export default RenderObjects; diff --git a/packages/canvas-three/three/src/renderers/common/RenderPipeline.d.ts b/packages/canvas-three/three/src/renderers/common/RenderPipeline.d.ts deleted file mode 100644 index 310187115..000000000 --- a/packages/canvas-three/three/src/renderers/common/RenderPipeline.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Pipeline from './Pipeline.js'; -import ProgrammableStage from './ProgrammableStage.js'; -declare class RenderPipeline extends Pipeline { - vertexProgram: ProgrammableStage; - fragmentProgram: ProgrammableStage; - constructor(cacheKey: string, vertexProgram: ProgrammableStage, fragmentProgram: ProgrammableStage); -} -export default RenderPipeline; diff --git a/packages/canvas-three/three/src/renderers/common/Renderer.d.ts b/packages/canvas-three/three/src/renderers/common/Renderer.d.ts deleted file mode 100644 index e9190c60e..000000000 --- a/packages/canvas-three/three/src/renderers/common/Renderer.d.ts +++ /dev/null @@ -1,183 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { ColorSpace, ShadowMapType, ToneMapping } from '../../constants.js'; -import { BufferAttribute } from '../../core/BufferAttribute.js'; -import { BufferGeometry, GeometryGroup } from '../../core/BufferGeometry.js'; -import { Object3D } from '../../core/Object3D.js'; -import { RenderTarget } from '../../core/RenderTarget.js'; -import { Material } from '../../materials/Material.js'; -import { Box2 } from '../../math/Box2.js'; -import { Color } from '../../math/Color.js'; -import { Plane } from '../../math/Plane.js'; -import { Vector2 } from '../../math/Vector2.js'; -import { Vector4 } from '../../math/Vector4.js'; -import { ComputeNode, LightsNode, MRTNode } from '../../nodes/Nodes.js'; -import { Scene } from '../../scenes/Scene.js'; -import { FramebufferTexture } from '../../textures/FramebufferTexture.js'; -import { Texture } from '../../textures/Texture.js'; -import Animation from './Animation.js'; -import Attributes from './Attributes.js'; -import Backend from './Backend.js'; -import Background from './Background.js'; -import Bindings from './Bindings.js'; -import Color4 from './Color4.js'; -import Geometries from './Geometries.js'; -import Info from './Info.js'; -import Nodes from './nodes/Nodes.js'; -import Pipelines from './Pipelines.js'; -import QuadMesh from './QuadMesh.js'; -import RenderBundle from './RenderBundle.js'; -import RenderBundles from './RenderBundles.js'; -import RenderContext from './RenderContext.js'; -import RenderContexts from './RenderContexts.js'; -import RenderList, { Bundle, RenderItem } from './RenderList.js'; -import RenderLists from './RenderLists.js'; -import RenderObjects from './RenderObjects.js'; -import Textures from './Textures.js'; -export interface RendererParameters { - logarithmicDepthBuffer?: boolean | undefined; - alpha?: boolean | undefined; - antialias?: boolean | undefined; - samples?: number | undefined; -} -declare class Renderer { - readonly isRenderer: true; - domElement: HTMLCanvasElement; - backend: Backend; - samples: number; - autoClear: boolean; - autoClearColor: boolean; - autoClearDepth: boolean; - autoClearStencil: boolean; - alpha: boolean; - logarithmicDepthBuffer: boolean; - outputColorSpace: ColorSpace; - toneMapping: ToneMapping; - toneMappingExposure: number; - sortObjects: boolean; - depth: boolean; - stencil: boolean; - clippingPlanes: readonly Plane[]; - info: Info; - _pixelRatio: number; - _width: number; - _height: number; - _viewport: Vector4; - _scissor: Vector4; - _scissorTest: boolean; - _attributes: Attributes | null; - _geometries: Geometries | null; - _nodes: Nodes | null; - _animation: Animation | null; - _bindings: Bindings | null; - _objects: RenderObjects | null; - _pipelines: Pipelines | null; - _bundles: RenderBundles | null; - _renderLists: RenderLists | null; - _renderContexts: RenderContexts | null; - _textures: Textures | null; - _background: Background | null; - _quad: QuadMesh; - _currentRenderContext: RenderContext | null; - _opaqueSort: ((a: RenderItem, b: RenderItem) => number) | null; - _transparentSort: ((a: RenderItem, b: RenderItem) => number) | null; - _frameBufferTarget: RenderTarget | null; - _clearColor: Color4; - _clearDepth: number; - _clearStencil: number; - _renderTarget: RenderTarget | null; - _activeCubeFace: number; - _activeMipmapLevel: number; - _mrt: MRTNode | null; - _renderObjectFunction: ((object: Object3D, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: GeometryGroup, lightsNode: LightsNode) => void) | null; - _currentRenderObjectFunction: ((object: Object3D, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: GeometryGroup, lightsNode: LightsNode) => void) | null; - _currentRenderBundle: RenderBundle | null; - _handleObjectFunction: (object: Object3D, material: Material, scene: Scene, camera: Camera, lightsNode: LightsNode, group: GeometryGroup, passId?: string) => void; - _initialized: boolean; - _initPromise: Promise | null; - _compilationPromises: Promise[] | null; - transparent: boolean; - opaque: boolean; - shadowMap: { - enabled: boolean; - type: ShadowMapType | null; - }; - xr: { - enabled: boolean; - }; - debug: { - checkShaderErrors: boolean; - onShaderError: ((gl: WebGL2RenderingContext, programGPU: WebGLProgram, glVertexShader: WebGLShader, glFragmentShader: WebGLShader) => void) | null; - }; - localClippingEnabled?: boolean | undefined; - constructor(backend: Backend, parameters?: RendererParameters); - init(): Promise; - get coordinateSystem(): import('../../constants.js').CoordinateSystem; - compileAsync(scene: Scene, camera: Camera, targetScene?: Scene | null): Promise; - renderAsync(scene: Scene, camera: Camera): Promise; - setMRT(mrt: MRTNode | null): this; - getMRT(): MRTNode | null; - _renderBundle(bundle: Bundle, sceneRef: Scene, lightsNode: LightsNode): void; - render(scene: Scene, camera: Camera): Promise | undefined; - _getFrameBufferTarget(): RenderTarget | null; - _renderScene(scene: Scene, camera: Camera, useFrameBufferTarget?: boolean): RenderContext; - getMaxAnisotropy(): number; - getActiveCubeFace(): number; - getActiveMipmapLevel(): number; - setAnimationLoop(callback: ((time: DOMHighResTimeStamp, frame?: XRFrame) => void) | null): Promise; - getArrayBufferAsync(attribute: BufferAttribute): Promise; - getContext(): void; - getPixelRatio(): number; - getDrawingBufferSize(target: Vector2): Vector2; - getSize(target: Vector2): Vector2; - setPixelRatio(value?: number): void; - setDrawingBufferSize(width: number, height: number, pixelRatio: number): void; - setSize(width: number, height: number, updateStyle?: boolean): void; - setOpaqueSort(method: ((a: RenderItem, b: RenderItem) => number) | null): void; - setTransparentSort(method: ((a: RenderItem, b: RenderItem) => number) | null): void; - getScissor(target: Vector4): Vector4; - setScissor(x: Vector4): void; - setScissor(x: number, y: number, width: number, height: number): void; - getScissorTest(): boolean; - setScissorTest(boolean: boolean): void; - getViewport(target: Vector4): Vector4; - setViewport(x: Vector4): void; - setViewport(x: number, y: number, width: number, height: number, minDepth?: number, maxDepth?: number): void; - getClearColor(target: Color4): Color4; - setClearColor(color: Color, alpha?: number): void; - getClearAlpha(): number; - setClearAlpha(alpha: number): void; - getClearDepth(): number; - setClearDepth(depth: number): void; - getClearStencil(): number; - setClearStencil(stencil: number): void; - isOccluded(object: Object3D): boolean | null; - clear(color?: boolean, depth?: boolean, stencil?: boolean): Promise | undefined; - clearColor(): Promise | undefined; - clearDepth(): Promise | undefined; - clearStencil(): Promise | undefined; - clearAsync(color?: boolean, depth?: boolean, stencil?: boolean): Promise; - clearColorAsync(): Promise; - clearDepthAsync(): Promise; - clearStencilAsync(): Promise; - get currentColorSpace(): ColorSpace; - dispose(): void; - setRenderTarget(renderTarget: RenderTarget | null, activeCubeFace?: number, activeMipmapLevel?: number): void; - getRenderTarget(): RenderTarget | null; - setRenderObjectFunction(renderObjectFunction: ((object: Object3D, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: GeometryGroup, lightsNode: LightsNode) => void) | null): void; - getRenderObjectFunction(): ((object: Object3D, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: GeometryGroup, lightsNode: LightsNode) => void) | null; - computeAsync(computeNodes: ComputeNode | ComputeNode[]): Promise; - hasFeatureAsync(name: string): Promise; - hasFeature(name: string): false | void; - copyFramebufferToTexture(framebufferTexture: FramebufferTexture): void; - copyTextureToTexture(srcTexture: Texture, dstTexture: Texture, srcRegion?: Box2 | null, dstPosition?: Vector2 | null, level?: number): void; - readRenderTargetPixelsAsync(renderTarget: RenderTarget, x: number, y: number, width: number, height: number, index?: number): Promise; - _projectObject(object: Object3D, camera: Camera, groupOrder: number, renderList: RenderList): void; - _renderBundles(bundles: Bundle[], sceneRef: Scene, lightsNode: LightsNode): void; - _renderObjects(renderList: RenderItem[], camera: Camera, scene: Scene, lightsNode: LightsNode): void; - renderObject(object: Object3D, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: GeometryGroup, lightsNode: LightsNode): void; - _renderObjectDirect(object: Object3D, material: Material, scene: Scene, camera: Camera, lightsNode: LightsNode, group: GeometryGroup, passId?: string): void; - _createObjectPipeline(object: Object3D, material: Material, scene: Scene, camera: Camera, lightsNode: LightsNode, group: GeometryGroup, passId?: string): void; - get compute(): (computeNodes: ComputeNode | ComputeNode[]) => Promise; - get compile(): (scene: Scene, camera: Camera, targetScene?: Scene | null) => Promise; -} -export default Renderer; diff --git a/packages/canvas-three/three/src/renderers/common/SampledTexture.d.ts b/packages/canvas-three/three/src/renderers/common/SampledTexture.d.ts deleted file mode 100644 index ab28e0270..000000000 --- a/packages/canvas-three/three/src/renderers/common/SampledTexture.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Texture } from '../../textures/Texture.js'; -import Binding from './Binding.js'; - -declare class SampledTexture extends Binding { - id: number; - texture: Texture | null; - version: number; - store: boolean; - readonly isSampledTexture: true; - constructor(name: string, texture: Texture | null); - get needsBindingsUpdate(): boolean; - update(): boolean; -} - -declare class SampledArrayTexture extends SampledTexture { - readonly isSampledArrayTexture: true; -} - -declare class Sampled3DTexture extends SampledTexture { - readonly isSampled3DTexture: true; -} - -declare class SampledCubeTexture extends SampledTexture { - readonly isSampledCubeTexture: true; -} - -export { Sampled3DTexture, SampledArrayTexture, SampledCubeTexture, SampledTexture }; diff --git a/packages/canvas-three/three/src/renderers/common/Sampler.d.ts b/packages/canvas-three/three/src/renderers/common/Sampler.d.ts deleted file mode 100644 index bc5739dbe..000000000 --- a/packages/canvas-three/three/src/renderers/common/Sampler.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import TextureNode from '../../nodes/accessors/TextureNode.js'; -import Binding from './Binding.js'; - -declare class Sampler extends Binding { - texture: TextureNode | null; - version: number; - readonly isSampler: true; - constructor(name: string, texture: TextureNode | null); -} - -export default Sampler; diff --git a/packages/canvas-three/three/src/renderers/common/StorageBufferAttribute.d.ts b/packages/canvas-three/three/src/renderers/common/StorageBufferAttribute.d.ts deleted file mode 100644 index f2846acfe..000000000 --- a/packages/canvas-three/three/src/renderers/common/StorageBufferAttribute.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { BufferAttribute, TypedArray } from '../../core/BufferAttribute.js'; - -export default class StorageBufferAttribute extends BufferAttribute { - readonly isStorageBufferAttribute: true; - - constructor(array: TypedArray, itemSize: number); -} diff --git a/packages/canvas-three/three/src/renderers/common/StorageInstancedBufferAttribute.d.ts b/packages/canvas-three/three/src/renderers/common/StorageInstancedBufferAttribute.d.ts deleted file mode 100644 index 12d812565..000000000 --- a/packages/canvas-three/three/src/renderers/common/StorageInstancedBufferAttribute.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { TypedArray } from '../../core/BufferAttribute.js'; -import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js'; - -export default class StorageInstancedBufferAttribute extends InstancedBufferAttribute { - readonly isStorageInstancedBufferAttribute: true; - - constructor(array: TypedArray | number, itemSize: number); -} diff --git a/packages/canvas-three/three/src/renderers/common/StorageTexture.d.ts b/packages/canvas-three/three/src/renderers/common/StorageTexture.d.ts deleted file mode 100644 index a53b87459..000000000 --- a/packages/canvas-three/three/src/renderers/common/StorageTexture.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Texture } from '../../textures/Texture.js'; - -export default class StorageTexture extends Texture { - constructor(width?: number, height?: number); -} diff --git a/packages/canvas-three/three/src/renderers/common/Textures.d.ts b/packages/canvas-three/three/src/renderers/common/Textures.d.ts deleted file mode 100644 index 4136b4449..000000000 --- a/packages/canvas-three/three/src/renderers/common/Textures.d.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { RenderTarget } from '../../core/RenderTarget.js'; -import { Vector3 } from '../../math/Vector3.js'; -import { DepthTexture } from '../../textures/DepthTexture.js'; -import { Texture } from '../../textures/Texture.js'; -import Backend from './Backend.js'; -import DataMap from './DataMap.js'; -import Info from './Info.js'; -import Renderer from './Renderer.js'; -type SizeVector3Unitialized = Vector3 & { - width?: number; - height?: number; - depth?: number; -}; -type SizeVector3 = Vector3 & { - width: number; - height: number; - depth: number; -}; -interface RenderTargetData { - depthTextureMips?: { - [activeMipmapLevel: number]: DepthTexture; - }; - width?: number; - height?: number; - textures?: Texture[]; - depthTexture?: DepthTexture; - depth?: boolean; - stencil?: boolean; - renderTarget?: RenderTarget; - sampleCount?: number; - initialized?: boolean; -} -interface TextureData { - initialized?: boolean; - version?: number; - isDefaultTexture?: boolean; -} -interface TextureOptions { - width?: number; - height?: number; - depth?: number; - needsMipmaps?: boolean; - levels?: number; -} -declare class Textures extends DataMap<{ - renderTarget: { - key: RenderTarget; - value: RenderTargetData; - }; - texture: { - key: Texture; - value: TextureData; - }; -}> { - renderer: Renderer; - backend: Backend; - info: Info; - constructor(renderer: Renderer, backend: Backend, info: Info); - updateRenderTarget(renderTarget: RenderTarget, activeMipmapLevel?: number): void; - updateTexture(texture: Texture, options?: TextureOptions): void; - getSize(texture: Texture, target?: SizeVector3Unitialized): SizeVector3; - getMipLevels(texture: Texture, width: number, height: number): number; - needsMipmaps(texture: Texture): boolean; - isEnvironmentTexture(texture: Texture): boolean; - _destroyTexture(texture: Texture): void; -} -export default Textures; diff --git a/packages/canvas-three/three/src/renderers/common/Uniform.d.ts b/packages/canvas-three/three/src/renderers/common/Uniform.d.ts deleted file mode 100644 index e4f4ca329..000000000 --- a/packages/canvas-three/three/src/renderers/common/Uniform.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Color } from '../../math/Color.js'; -import { Matrix3 } from '../../math/Matrix3.js'; -import { Matrix4 } from '../../math/Matrix4.js'; -import { Vector2 } from '../../math/Vector2.js'; -import { Vector3 } from '../../math/Vector3.js'; -import { Vector4 } from '../../math/Vector4.js'; -declare class Uniform { - name: string; - value: TValue; - boundary: number; - itemSize: number; - offset: number; - constructor(name: string, value: TValue); - setValue(value: TValue): void; - getValue(): TValue; -} -declare class NumberUniform extends Uniform { - readonly isNumberUniform: true; - constructor(name: string, value?: number); -} -declare class Vector2Uniform extends Uniform { - readonly isVector2Uniform: true; - constructor(name: string, value?: Vector2); -} -declare class Vector3Uniform extends Uniform { - readonly isVector3Uniform: true; - constructor(name: string, value?: Vector3); -} -declare class Vector4Uniform extends Uniform { - readonly isVector4Uniform: true; - constructor(name: string, value?: Vector4); -} -declare class ColorUniform extends Uniform { - readonly isColorUniform: true; - constructor(name: string, value?: Color); -} -declare class Matrix3Uniform extends Uniform { - readonly isMatrix3Uniform: true; - constructor(name: string, value?: Matrix3); -} -declare class Matrix4Uniform extends Uniform { - readonly isMatrix4Uniform: true; - constructor(name: string, value?: Matrix4); -} -export { ColorUniform, Matrix3Uniform, Matrix4Uniform, NumberUniform, Vector2Uniform, Vector3Uniform, Vector4Uniform }; diff --git a/packages/canvas-three/three/src/renderers/common/UniformBuffer.d.ts b/packages/canvas-three/three/src/renderers/common/UniformBuffer.d.ts deleted file mode 100644 index 2077c4a15..000000000 --- a/packages/canvas-three/three/src/renderers/common/UniformBuffer.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import Buffer from './Buffer.js'; -declare class UniformBuffer extends Buffer { - readonly isUniformBuffer: true; - constructor(name?: string, buffer?: null); -} -export default UniformBuffer; diff --git a/packages/canvas-three/three/src/renderers/common/UniformsGroup.d.ts b/packages/canvas-three/three/src/renderers/common/UniformsGroup.d.ts deleted file mode 100644 index 07bc6fcae..000000000 --- a/packages/canvas-three/three/src/renderers/common/UniformsGroup.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ColorNodeUniform, Matrix3NodeUniform, Matrix4NodeUniform, NodeUniformGPU, NumberNodeUniform, Vector2NodeUniform, Vector3NodeUniform, Vector4NodeUniform } from './nodes/NodeUniform.js'; -import UniformBuffer from './UniformBuffer.js'; -declare class UniformsGroup extends UniformBuffer { - readonly isUniformsGroup: true; - _values: number[] | null; - uniforms: NodeUniformGPU[]; - constructor(name?: string); - addUniform(uniform: NodeUniformGPU): this; - removeUniform(uniform: NodeUniformGPU): this; - get values(): number[]; - get buffer(): Float32Array; - get byteLength(): number; - update(): boolean; - updateByType(uniform: NodeUniformGPU): boolean | undefined; - updateNumber(uniform: NumberNodeUniform): boolean; - updateVector2(uniform: Vector2NodeUniform): boolean; - updateVector3(uniform: Vector3NodeUniform): boolean; - updateVector4(uniform: Vector4NodeUniform): boolean; - updateColor(uniform: ColorNodeUniform): boolean; - updateMatrix3(uniform: Matrix3NodeUniform): boolean; - updateMatrix4(uniform: Matrix4NodeUniform): boolean; -} -export default UniformsGroup; diff --git a/packages/canvas-three/three/src/renderers/common/extras/PMREMGenerator.d.ts b/packages/canvas-three/three/src/renderers/common/extras/PMREMGenerator.d.ts deleted file mode 100644 index c0d588d65..000000000 --- a/packages/canvas-three/three/src/renderers/common/extras/PMREMGenerator.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { RenderTarget } from '../../../core/RenderTarget.js'; -import { Scene } from '../../../scenes/Scene.js'; -import Renderer from '../Renderer.js'; - -export default class PMREMGenerator { - constructor(renderer: Renderer); - - fromScene(scene: Scene, sigma?: number, near?: number, far?: number): RenderTarget; -} diff --git a/packages/canvas-three/three/src/renderers/common/nodes/NodeBuilderState.d.ts b/packages/canvas-three/three/src/renderers/common/nodes/NodeBuilderState.d.ts deleted file mode 100644 index 430bba358..000000000 --- a/packages/canvas-three/three/src/renderers/common/nodes/NodeBuilderState.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import Node from '../../../nodes/core/Node.js'; -import NodeAttribute from '../../../nodes/core/NodeAttribute.js'; -import BindGroup from '../BindGroup.js'; -declare class NodeBuilderState { - vertexShader: string | null; - fragmentShader: string | null; - computeShader: string | null; - transforms: never[]; - nodeAttributes: NodeAttribute[]; - bindings: BindGroup[]; - updateNodes: Node[]; - updateBeforeNodes: Node[]; - updateAfterNodes: Node[]; - instanceBindGroups: boolean; - usedTimes: number; - constructor(vertexShader: string | null, fragmentShader: string | null, computeShader: string | null, nodeAttributes: NodeAttribute[], bindings: BindGroup[], updateNodes: Node[], updateBeforeNodes: Node[], updateAfterNodes: Node[], instanceBindGroups?: boolean, transforms?: never[]); - createBindings(): BindGroup[]; -} -export default NodeBuilderState; diff --git a/packages/canvas-three/three/src/renderers/common/nodes/NodeSampledTexture.d.ts b/packages/canvas-three/three/src/renderers/common/nodes/NodeSampledTexture.d.ts deleted file mode 100644 index e9a9bfc73..000000000 --- a/packages/canvas-three/three/src/renderers/common/nodes/NodeSampledTexture.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import TextureNode from '../../../nodes/accessors/TextureNode.js'; -import UniformGroupNode from '../../../nodes/core/UniformGroupNode.js'; -import { SampledTexture } from '../SampledTexture.js'; - -type GPUStorageTextureAccess = 'read-only' | 'read-write' | 'write-only'; - -declare class NodeSampledTexture extends SampledTexture { - textureNode: TextureNode | undefined; - groupNode: UniformGroupNode; - access: 'read-write' | 'read-only' | 'write-only'; - constructor(name: string, textureNode: TextureNode | undefined, groupNode: UniformGroupNode, access: GPUStorageTextureAccess | null); - get needsBindingsUpdate(): boolean; - update(): boolean; -} - -declare class NodeSampledCubeTexture extends NodeSampledTexture { - readonly isSampledCubeTexture: true; -} - -declare class NodeSampledTexture3D extends NodeSampledTexture { - readonly isSampledTexture3D = true; -} - -export { NodeSampledCubeTexture, NodeSampledTexture, NodeSampledTexture3D }; diff --git a/packages/canvas-three/three/src/renderers/common/nodes/NodeSampler.d.ts b/packages/canvas-three/three/src/renderers/common/nodes/NodeSampler.d.ts deleted file mode 100644 index 66fb4ba47..000000000 --- a/packages/canvas-three/three/src/renderers/common/nodes/NodeSampler.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import TextureNode from '../../../nodes/accessors/TextureNode.js'; -import UniformGroupNode from '../../../nodes/core/UniformGroupNode.js'; -import Sampler from '../Sampler.js'; - -declare class NodeSampler extends Sampler { - textureNode: TextureNode | undefined; - groupNode: UniformGroupNode; - constructor(name: string, textureNode: TextureNode | undefined, groupNode: UniformGroupNode); - update(): void; -} - -export default NodeSampler; diff --git a/packages/canvas-three/three/src/renderers/common/nodes/NodeUniform.d.ts b/packages/canvas-three/three/src/renderers/common/nodes/NodeUniform.d.ts deleted file mode 100644 index 68ee35a39..000000000 --- a/packages/canvas-three/three/src/renderers/common/nodes/NodeUniform.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Color } from '../../../math/Color.js'; -import { Matrix3 } from '../../../math/Matrix3.js'; -import { Matrix4 } from '../../../math/Matrix4.js'; -import { Vector2 } from '../../../math/Vector2.js'; -import { Vector3 } from '../../../math/Vector3.js'; -import { Vector4 } from '../../../math/Vector4.js'; -import NodeUniform from '../../../nodes/core/NodeUniform.js'; -import { ColorUniform, Matrix3Uniform, Matrix4Uniform, NumberUniform, Vector2Uniform, Vector3Uniform, Vector4Uniform } from '../Uniform.js'; -declare class NumberNodeUniform extends NumberUniform { - nodeUniform: NodeUniform; - constructor(nodeUniform: NodeUniform); - getValue(): number; -} -declare class Vector2NodeUniform extends Vector2Uniform { - nodeUniform: NodeUniform; - constructor(nodeUniform: NodeUniform); - getValue(): Vector2; -} -declare class Vector3NodeUniform extends Vector3Uniform { - nodeUniform: NodeUniform; - constructor(nodeUniform: NodeUniform); - getValue(): Vector3; -} -declare class Vector4NodeUniform extends Vector4Uniform { - nodeUniform: NodeUniform; - constructor(nodeUniform: NodeUniform); - getValue(): Vector4; -} -declare class ColorNodeUniform extends ColorUniform { - nodeUniform: NodeUniform; - constructor(nodeUniform: NodeUniform); - getValue(): Color; -} -declare class Matrix3NodeUniform extends Matrix3Uniform { - nodeUniform: NodeUniform; - constructor(nodeUniform: NodeUniform); - getValue(): Matrix3; -} -declare class Matrix4NodeUniform extends Matrix4Uniform { - nodeUniform: NodeUniform; - constructor(nodeUniform: NodeUniform); - getValue(): Matrix4; -} -export { ColorNodeUniform, Matrix3NodeUniform, Matrix4NodeUniform, NumberNodeUniform, Vector2NodeUniform, Vector3NodeUniform, Vector4NodeUniform }; -export type NodeUniformGPU = NumberNodeUniform | Vector2NodeUniform | Vector3NodeUniform | Vector4NodeUniform | ColorNodeUniform | Matrix3NodeUniform | Matrix4NodeUniform; diff --git a/packages/canvas-three/three/src/renderers/common/nodes/NodeUniformsGroup.d.ts b/packages/canvas-three/three/src/renderers/common/nodes/NodeUniformsGroup.d.ts deleted file mode 100644 index f4989e63d..000000000 --- a/packages/canvas-three/three/src/renderers/common/nodes/NodeUniformsGroup.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { UniformGroupNode, UniformNode } from '../../../nodes/Nodes.js'; -import UniformsGroup from '../UniformsGroup.js'; -declare class NodeUniformsGroup extends UniformsGroup { - id: number; - groupNode: UniformGroupNode; - readonly isNodeUniformsGroup: true; - constructor(name: string, groupNode: UniformGroupNode); - getNodes(): UniformNode[]; -} -export default NodeUniformsGroup; diff --git a/packages/canvas-three/three/src/renderers/common/nodes/Nodes.d.ts b/packages/canvas-three/three/src/renderers/common/nodes/Nodes.d.ts deleted file mode 100644 index 6ce960939..000000000 --- a/packages/canvas-three/three/src/renderers/common/nodes/Nodes.d.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { Camera } from '../../../cameras/Camera.js'; -import { Object3D } from '../../../core/Object3D.js'; -import { Material } from '../../../materials/Material.js'; -import { Color } from '../../../math/Color.js'; -import { ComputeNode, LightsNode, Node, NodeBuilder, NodeFrame, ShaderNodeObject, UniformGroupNode } from '../../../nodes/Nodes.js'; -import { Fog } from '../../../scenes/Fog.js'; -import { FogExp2 } from '../../../scenes/FogExp2.js'; -import { Scene } from '../../../scenes/Scene.js'; -import { CubeTexture } from '../../../textures/CubeTexture.js'; -import { Texture } from '../../../textures/Texture.js'; -import Backend from '../Backend.js'; -import ChainMap from '../ChainMap.js'; -import DataMap from '../DataMap.js'; -import Renderer from '../Renderer.js'; -import RenderObject from '../RenderObject.js'; -import NodeBuilderState from './NodeBuilderState.js'; -import NodeUniformsGroup from './NodeUniformsGroup.js'; -interface NodeUniformsGroupData { - renderId?: number | undefined; - frameId?: number | undefined; -} -interface RenderObjectData { - nodeBuilderState?: NodeBuilderState | undefined; -} -interface ComputeNodeData { - nodeBuilderState?: NodeBuilderState | undefined; -} -interface SceneData { - background?: Color | Texture | CubeTexture | undefined; - backgroundNode?: Node | undefined; - fog?: Fog | FogExp2 | undefined; - fogNode?: Node | undefined; - environment?: Texture | undefined; - environmentNode?: Node | undefined; -} -declare class Nodes extends DataMap<{ - nodeUniformsGroup: { - key: NodeUniformsGroup; - value: NodeUniformsGroupData; - }; - renderObject: { - key: RenderObject; - value: RenderObjectData; - }; - computeNode: { - key: ComputeNode; - value: ComputeNodeData; - }; - scene: { - key: Scene; - value: SceneData; - }; -}> { - renderer: Renderer; - backend: Backend; - nodeFrame: NodeFrame; - nodeBuilderCache: Map; - callHashCache: ChainMap< - readonly [Scene, LightsNode], - { - callId: number; - cacheKey: string; - } - >; - groupsData: ChainMap< - readonly [UniformGroupNode, NodeUniformsGroup], - { - version?: number; - } - >; - constructor(renderer: Renderer, backend: Backend); - updateGroup(nodeUniformsGroup: NodeUniformsGroup): boolean; - getForRenderCacheKey(renderObject: RenderObject): string; - getForRender(renderObject: RenderObject): NodeBuilderState; - delete(object: NodeUniformsGroup | RenderObject | ComputeNode | Scene): SceneData | RenderObjectData | NodeUniformsGroupData | ComputeNodeData; - getForCompute(computeNode: ComputeNode): NodeBuilderState; - _createNodeBuilderState(nodeBuilder: NodeBuilder): NodeBuilderState; - getEnvironmentNode(scene: Scene): Node | null; - getBackgroundNode(scene: Scene): Node | null; - getFogNode(scene: Scene): Node | null; - getCacheKey(scene: Scene, lightsNode: LightsNode): string; - updateScene(scene: Scene): void; - get isToneMappingState(): boolean; - updateBackground(scene: Scene): void; - updateFog(scene: Scene): void; - updateEnvironment(scene: Scene): void; - getNodeFrame(renderer?: Renderer, scene?: Scene | null, object?: Object3D | null, camera?: Camera | null, material?: Material | null): NodeFrame; - getNodeFrameForRender(renderObject: RenderObject): NodeFrame; - getOutputCacheKey(): string; - hasOutputChange(outputTarget: Texture): boolean; - getOutputNode(outputTexture: Texture): ShaderNodeObject; - updateBefore(renderObject: RenderObject): void; - updateAfter(renderObject: RenderObject): void; - updateForCompute(computeNode: ComputeNode): void; - updateForRender(renderObject: RenderObject): void; - dispose(): void; -} -export default Nodes; diff --git a/packages/canvas-three/three/src/renderers/shaders/ShaderChunk.d.ts b/packages/canvas-three/three/src/renderers/shaders/ShaderChunk.d.ts deleted file mode 100644 index e3fc71c95..000000000 --- a/packages/canvas-three/three/src/renderers/shaders/ShaderChunk.d.ts +++ /dev/null @@ -1,143 +0,0 @@ -// Renderers / Shaders ///////////////////////////////////////////////////////////////////// -export const ShaderChunk: { - alphahash_fragment: string; - alphahash_pars_fragment: string; - alphamap_fragment: string; - alphamap_pars_fragment: string; - alphatest_fragment: string; - alphatest_pars_fragment: string; - aomap_fragment: string; - aomap_pars_fragment: string; - batching_pars_vertex: string; - begin_vertex: string; - beginnormal_vertex: string; - bsdfs: string; - iridescence_fragment: string; - bumpmap_pars_fragment: string; - clipping_planes_fragment: string; - clipping_planes_pars_fragment: string; - clipping_planes_pars_vertex: string; - clipping_planes_vertex: string; - color_fragment: string; - color_pars_fragment: string; - color_pars_vertex: string; - color_vertex: string; - common: string; - cube_uv_reflection_fragment: string; - defaultnormal_vertex: string; - displacementmap_pars_vertex: string; - displacementmap_vertex: string; - emissivemap_fragment: string; - emissivemap_pars_fragment: string; - colorspace_fragment: string; - colorspace_pars_fragment: string; - envmap_fragment: string; - envmap_common_pars_fragment: string; - envmap_pars_fragment: string; - envmap_pars_vertex: string; - envmap_physical_pars_fragment: string; - envmap_vertex: string; - fog_vertex: string; - fog_pars_vertex: string; - fog_fragment: string; - fog_pars_fragment: string; - gradientmap_pars_fragment: string; - lightmap_pars_fragment: string; - lights_lambert_fragment: string; - lights_lambert_pars_fragment: string; - lights_pars_begin: string; - lights_toon_fragment: string; - lights_toon_pars_fragment: string; - lights_phong_fragment: string; - lights_phong_pars_fragment: string; - lights_physical_fragment: string; - lights_physical_pars_fragment: string; - lights_fragment_begin: string; - lights_fragment_maps: string; - lights_fragment_end: string; - logdepthbuf_fragment: string; - logdepthbuf_pars_fragment: string; - logdepthbuf_pars_vertex: string; - logdepthbuf_vertex: string; - map_fragment: string; - map_pars_fragment: string; - map_particle_fragment: string; - map_particle_pars_fragment: string; - metalnessmap_fragment: string; - metalnessmap_pars_fragment: string; - morphcolor_vertex: string; - morphnormal_vertex: string; - morphtarget_pars_vertex: string; - morphtarget_vertex: string; - normal_fragment_begin: string; - normal_fragment_maps: string; - normal_pars_fragment: string; - normal_pars_vertex: string; - normal_vertex: string; - normalmap_pars_fragment: string; - clearcoat_normal_fragment_begin: string; - clearcoat_normal_fragment_maps: string; - clearcoat_pars_fragment: string; - iridescence_pars_fragment: string; - opaque_fragment: string; - packing: string; - premultiplied_alpha_fragment: string; - project_vertex: string; - dithering_fragment: string; - dithering_pars_fragment: string; - roughnessmap_fragment: string; - roughnessmap_pars_fragment: string; - shadowmap_pars_fragment: string; - shadowmap_pars_vertex: string; - shadowmap_vertex: string; - shadowmask_pars_fragment: string; - skinbase_vertex: string; - skinning_pars_vertex: string; - skinning_vertex: string; - skinnormal_vertex: string; - specularmap_fragment: string; - specularmap_pars_fragment: string; - tonemapping_fragment: string; - tonemapping_pars_fragment: string; - transmission_fragment: string; - transmission_pars_fragment: string; - uv_pars_fragment: string; - uv_pars_vertex: string; - uv_vertex: string; - worldpos_vertex: string; - - background_vert: string; - background_frag: string; - backgroundCube_vert: string; - backgroundCube_frag: string; - cube_vert: string; - cube_frag: string; - depth_vert: string; - depth_frag: string; - distanceRGBA_vert: string; - distanceRGBA_frag: string; - equirect_vert: string; - equirect_frag: string; - linedashed_vert: string; - linedashed_frag: string; - meshbasic_vert: string; - meshbasic_frag: string; - meshlambert_vert: string; - meshlambert_frag: string; - meshmatcap_vert: string; - meshmatcap_frag: string; - meshnormal_vert: string; - meshnormal_frag: string; - meshphong_vert: string; - meshphong_frag: string; - meshphysical_vert: string; - meshphysical_frag: string; - meshtoon_vert: string; - meshtoon_frag: string; - points_vert: string; - points_frag: string; - shadow_vert: string; - shadow_frag: string; - sprite_vert: string; - sprite_frag: string; -}; diff --git a/packages/canvas-three/three/src/renderers/shaders/ShaderLib.d.ts b/packages/canvas-three/three/src/renderers/shaders/ShaderLib.d.ts deleted file mode 100644 index a60d02774..000000000 --- a/packages/canvas-three/three/src/renderers/shaders/ShaderLib.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { IUniform } from './UniformsLib.js'; - -export interface ShaderLibShader { - uniforms: { [uniform: string]: IUniform }; - vertexShader: string; - fragmentShader: string; -} - -declare const ShaderLib: { - [name: string]: ShaderLibShader; - basic: ShaderLibShader; - lambert: ShaderLibShader; - phong: ShaderLibShader; - standard: ShaderLibShader; - matcap: ShaderLibShader; - points: ShaderLibShader; - dashed: ShaderLibShader; - depth: ShaderLibShader; - normal: ShaderLibShader; - sprite: ShaderLibShader; - background: ShaderLibShader; - cube: ShaderLibShader; - equirect: ShaderLibShader; - distanceRGBA: ShaderLibShader; - shadow: ShaderLibShader; - physical: ShaderLibShader; -}; - -export { ShaderLib }; diff --git a/packages/canvas-three/three/src/renderers/shaders/UniformsLib.d.ts b/packages/canvas-three/three/src/renderers/shaders/UniformsLib.d.ts deleted file mode 100644 index 35cd5ce55..000000000 --- a/packages/canvas-three/three/src/renderers/shaders/UniformsLib.d.ts +++ /dev/null @@ -1,189 +0,0 @@ -import { Color } from '../../math/Color.js'; -import { Matrix3 } from '../../math/Matrix3.js'; -import { Vector2 } from '../../math/Vector2.js'; - -// eslint-disable-next-line @typescript-eslint/naming-convention -export interface IUniform { - value: TValue; -} - -export const UniformsLib: { - common: { - diffuse: IUniform; - opacity: IUniform; - map: IUniform; - mapTransform: IUniform; - alphaMap: IUniform; - alphaMapTransform: IUniform; - alphaTest: IUniform; - }; - specularmap: { - specularMap: IUniform; - specularMapTransform: IUniform; - }; - envmap: { - envMap: IUniform; - envMapRotation: IUniform; - flipEnvMap: IUniform; - reflectivity: IUniform; - ior: IUniform; - refractRatio: IUniform; - }; - aomap: { - aoMap: IUniform; - aoMapIntensity: IUniform; - aoMapTransform: IUniform; - }; - lightmap: { - lightMap: IUniform; - lightMapIntensity: IUniform; - lightMapTransform: IUniform; - }; - bumpmap: { - bumpMap: IUniform; - bumpMapTransform: IUniform; - bumpScale: IUniform; - }; - normalmap: { - normalMap: IUniform; - normalMapTransform: IUniform; - normalScale: IUniform; - }; - displacementmap: { - displacementMap: IUniform; - displacementMapTransform: IUniform; - displacementScale: IUniform; - displacementBias: IUniform; - }; - emissivemap: { - emissiveMap: IUniform; - emissiveMapTransform: IUniform; - }; - metalnessmap: { - metalnessMap: IUniform; - metalnessMapTransform: IUniform; - }; - roughnessmap: { - roughnessMap: IUniform; - roughnessMapTransform: IUniform; - }; - gradientmap: { - gradientMap: IUniform; - }; - fog: { - fogDensity: IUniform; - fogNear: IUniform; - fogFar: IUniform; - fogColor: IUniform; - }; - lights: { - ambientLightColor: IUniform; - lightProbe: IUniform; - directionalLights: { - value: unknown[]; - properties: { - direction: {}; - color: {}; - }; - }; - directionalLightShadows: { - value: unknown[]; - properties: { - shadowIntensity: number; - shadowBias: {}; - shadowNormalBias: {}; - shadowRadius: {}; - shadowMapSize: {}; - }; - }; - directionalShadowMap: IUniform; - directionalShadowMatrix: IUniform; - spotLights: { - value: unknown[]; - properties: { - color: {}; - position: {}; - direction: {}; - distance: {}; - coneCos: {}; - penumbraCos: {}; - decay: {}; - }; - }; - spotLightShadows: { - value: unknown[]; - properties: { - shadowIntensity: number; - shadowBias: {}; - shadowNormalBias: {}; - shadowRadius: {}; - shadowMapSize: {}; - }; - }; - spotLightMap: IUniform; - spotShadowMap: IUniform; - spotLightMatrix: IUniform; - pointLights: { - value: unknown[]; - properties: { - color: {}; - position: {}; - decay: {}; - distance: {}; - }; - }; - pointLightShadows: { - value: unknown[]; - properties: { - shadowIntensity: number; - shadowBias: {}; - shadowNormalBias: {}; - shadowRadius: {}; - shadowMapSize: {}; - shadowCameraNear: {}; - shadowCameraFar: {}; - }; - }; - pointShadowMap: IUniform; - pointShadowMatrix: IUniform; - hemisphereLights: { - value: unknown[]; - properties: { - direction: {}; - skycolor: {}; - groundColor: {}; - }; - }; - rectAreaLights: { - value: unknown[]; - properties: { - color: {}; - position: {}; - width: {}; - height: {}; - }; - }; - ltc_1: IUniform; - ltc_2: IUniform; - }; - points: { - diffuse: IUniform; - opacity: IUniform; - size: IUniform; - scale: IUniform; - map: IUniform; - alphaMap: IUniform; - alphaTest: IUniform; - uvTransform: IUniform; - }; - sprite: { - diffuse: IUniform; - opacity: IUniform; - center: IUniform; - rotation: IUniform; - map: IUniform; - mapTransform: IUniform; - alphaMap: IUniform; - alphaTest: IUniform; - }; -}; diff --git a/packages/canvas-three/three/src/renderers/shaders/UniformsUtils.d.ts b/packages/canvas-three/three/src/renderers/shaders/UniformsUtils.d.ts deleted file mode 100644 index dd5e120a2..000000000 --- a/packages/canvas-three/three/src/renderers/shaders/UniformsUtils.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { UniformsGroup } from '../../core/UniformsGroup.js'; -import { IUniform } from './UniformsLib.js'; - -export function cloneUniforms(uniformsSrc: T): T; -export function mergeUniforms(uniforms: Array<{ [uniform: string]: IUniform }>): { [uniform: string]: IUniform }; - -export function cloneUniformsGroups(src: UniformsGroup[]): UniformsGroup[]; - -declare const UniformsUtils: { - clone: typeof cloneUniforms; - merge: typeof mergeUniforms; -}; - -export { UniformsUtils }; diff --git a/packages/canvas-three/three/src/renderers/webgl-fallback/WebGLBackend.d.ts b/packages/canvas-three/three/src/renderers/webgl-fallback/WebGLBackend.d.ts deleted file mode 100644 index ec7a6ed8b..000000000 --- a/packages/canvas-three/three/src/renderers/webgl-fallback/WebGLBackend.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CoordinateSystem } from '../../constants.js'; -import Backend, { BackendParameters } from '../common/Backend.js'; - -export interface WebGLBackendParameters extends BackendParameters { - trackTimestamp?: boolean | undefined; -} - -export default class WebGLBackend extends Backend { - constructor(parameters?: BackendParameters); - - get coordinateSystem(): CoordinateSystem; - - getMaxAnisotropy(): number; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLAttributes.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLAttributes.d.ts deleted file mode 100644 index 64ce78dc4..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLAttributes.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { BufferAttribute } from '../../core/BufferAttribute.js'; -import { GLBufferAttribute } from '../../core/GLBufferAttribute.js'; -import { InterleavedBufferAttribute } from '../../core/InterleavedBufferAttribute.js'; - -export class WebGLAttributes { - constructor(gl: WebGLRenderingContext | WebGL2RenderingContext); - - get(attribute: BufferAttribute | InterleavedBufferAttribute | GLBufferAttribute): - | { - buffer: WebGLBuffer; - type: number; - bytesPerElement: number; - version: number; - size: number; - } - | undefined; - - remove(attribute: BufferAttribute | InterleavedBufferAttribute | GLBufferAttribute): void; - - update(attribute: BufferAttribute | InterleavedBufferAttribute | GLBufferAttribute, bufferType: number): void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLBindingStates.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLBindingStates.d.ts deleted file mode 100644 index 3c4486dc8..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLBindingStates.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { BufferAttribute } from '../../core/BufferAttribute.js'; -import { BufferGeometry } from '../../core/BufferGeometry.js'; -import { Object3D } from '../../core/Object3D.js'; -import { Material } from '../../materials/Material.js'; -import { WebGLAttributes } from './WebGLAttributes.js'; -import { WebGLProgram } from './WebGLProgram.js'; - -export class WebGLBindingStates { - constructor(gl: WebGLRenderingContext, attributes: WebGLAttributes); - - setup(object: Object3D, material: Material, program: WebGLProgram, geometry: BufferGeometry, index: BufferAttribute): void; - reset(): void; - resetDefaultState(): void; - dispose(): void; - releaseStatesOfGeometry(): void; - releaseStatesOfProgram(): void; - initAttributes(): void; - enableAttribute(attribute: number): void; - disableUnusedAttributes(): void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLBufferRenderer.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLBufferRenderer.d.ts deleted file mode 100644 index 27ca8e97a..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLBufferRenderer.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { WebGLExtensions } from './WebGLExtensions.js'; -import { WebGLInfo } from './WebGLInfo.js'; - -export class WebGLBufferRenderer { - constructor(gl: WebGLRenderingContext, extensions: WebGLExtensions, info: WebGLInfo); - - setMode: (value: any) => void; - render: (start: any, count: number) => void; - renderInstances: (start: any, count: number, primcount: number) => void; - renderMultiDraw: (starts: Int32Array, counts: Int32Array, drawCount: number) => void; - renderMultiDrawInstances: (starts: Int32Array, counts: Int32Array, drawCount: number, primcount: Int32Array) => void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLCapabilities.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLCapabilities.d.ts deleted file mode 100644 index 281551542..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLCapabilities.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { PixelFormat, TextureDataType } from '../../constants.js'; - -export interface WebGLCapabilitiesParameters { - precision?: string | undefined; - logarithmicDepthBuffer?: boolean | undefined; -} - -export class WebGLCapabilities { - constructor(gl: WebGLRenderingContext, extensions: any, parameters: WebGLCapabilitiesParameters); - - readonly isWebGL2: boolean; - - getMaxAnisotropy: () => number; - getMaxPrecision: (precision: string) => string; - - textureFormatReadable: (textureFormat: PixelFormat) => boolean; - textureTypeReadable: (textureType: TextureDataType) => boolean; - - precision: string; - logarithmicDepthBuffer: boolean; - - maxTextures: number; - maxVertexTextures: number; - maxTextureSize: number; - maxCubemapSize: number; - - maxAttributes: number; - maxVertexUniforms: number; - maxVaryings: number; - maxFragmentUniforms: number; - - vertexTextures: boolean; - - maxSamples: number; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLClipping.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLClipping.d.ts deleted file mode 100644 index af22e160b..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLClipping.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { Material } from '../../materials/Material.js'; -import { Plane } from '../../math/Plane.js'; -import { WebGLProperties } from './WebGLProperties.js'; - -export class WebGLClipping { - constructor(properties: WebGLProperties); - - uniform: { value: any; needsUpdate: boolean }; - - /** - * @default 0 - */ - numPlanes: number; - - /** - * @default 0 - */ - numIntersection: number; - - init(planes: any[], enableLocalClipping: boolean): boolean; - beginShadows(): void; - endShadows(): void; - setGlobalState(planes: Plane[], camera: Camera): void; - setState(material: Material, camera: Camera, useCache: boolean): void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLCubeMaps.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLCubeMaps.d.ts deleted file mode 100644 index c08413c1f..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLCubeMaps.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { WebGLRenderer } from '../WebGLRenderer.js'; - -export class WebGLCubeMaps { - constructor(renderer: WebGLRenderer); - - get(texture: any): any; - dispose(): void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLCubeUVMaps.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLCubeUVMaps.d.ts deleted file mode 100644 index e8f7a3c73..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLCubeUVMaps.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Texture } from '../../textures/Texture.js'; -import { WebGLRenderer } from '../WebGLRenderer.js'; - -export class WebGLCubeUVMaps { - constructor(renderer: WebGLRenderer); - - get(texture: T): T extends Texture ? Texture : T; - dispose(): void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLExtensions.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLExtensions.d.ts deleted file mode 100644 index cb7e2772e..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLExtensions.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export class WebGLExtensions { - constructor(gl: WebGLRenderingContext); - - has(name: string): boolean; - init(): void; - get(name: string): any; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLGeometries.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLGeometries.d.ts deleted file mode 100644 index 613732afb..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLGeometries.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { BufferAttribute } from '../../core/BufferAttribute.js'; -import { BufferGeometry } from '../../core/BufferGeometry.js'; -import { Object3D } from '../../core/Object3D.js'; -import { WebGLAttributes } from './WebGLAttributes.js'; -import { WebGLInfo } from './WebGLInfo.js'; - -export class WebGLGeometries { - constructor(gl: WebGLRenderingContext, attributes: WebGLAttributes, info: WebGLInfo); - - get(object: Object3D, geometry: BufferGeometry): BufferGeometry; - update(geometry: BufferGeometry): void; - getWireframeAttribute(geometry: BufferGeometry): BufferAttribute; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts deleted file mode 100644 index 27144ba43..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export class WebGLIndexedBufferRenderer { - constructor(gl: WebGLRenderingContext, extensions: any, info: any); - - setMode: (value: any) => void; - setIndex: (index: any) => void; - render: (start: any, count: number) => void; - renderInstances: (start: any, count: number, primcount: number) => void; - renderMultiDraw: (starts: Int32Array, counts: Int32Array, drawCount: number) => void; - renderMultiDrawInstances: (starts: Int32Array, counts: Int32Array, drawCount: number, primcount: Int32Array) => void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLInfo.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLInfo.d.ts deleted file mode 100644 index 9c4e91f25..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLInfo.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { WebGLProgram } from './WebGLProgram.js'; - -/** - * An object with a series of statistical information about the graphics board memory and the rendering process. - */ -export class WebGLInfo { - constructor(gl: WebGLRenderingContext); - - /** - * @default true - */ - autoReset: boolean; - - /** - * @default { geometries: 0, textures: 0 } - */ - memory: { - geometries: number; - textures: number; - }; - - /** - * @default null - */ - programs: WebGLProgram[] | null; - - /** - * @default { frame: 0, calls: 0, triangles: 0, points: 0, lines: 0 } - */ - render: { - calls: number; - frame: number; - lines: number; - points: number; - triangles: number; - }; - update(count: number, mode: number, instanceCount: number): void; - reset(): void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLLights.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLLights.d.ts deleted file mode 100644 index bee35f2d8..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLLights.d.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { WebGLExtensions } from './WebGLExtensions.js'; - -export interface WebGLLightsState { - version: number; - - hash: { - directionalLength: number; - pointLength: number; - spotLength: number; - rectAreaLength: number; - hemiLength: number; - - numDirectionalShadows: number; - numPointShadows: number; - numSpotShadows: number; - numSpotMaps: number; - - numLightProbes: number; - }; - - ambient: number[]; - probe: any[]; - directional: any[]; - directionalShadow: any[]; - directionalShadowMap: any[]; - directionalShadowMatrix: any[]; - spot: any[]; - spotShadow: any[]; - spotShadowMap: any[]; - spotShadowMatrix: any[]; - rectArea: any[]; - point: any[]; - pointShadow: any[]; - pointShadowMap: any[]; - pointShadowMatrix: any[]; - hemi: any[]; - numSpotLightShadowsWithMaps: number; - numLightProbes: number; -} - -export class WebGLLights { - constructor(extensions: WebGLExtensions); - - state: WebGLLightsState; - - get(light: any): any; - setup(lights: any): void; - setupView(lights: any, camera: any): void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLObjects.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLObjects.d.ts deleted file mode 100644 index 5308ac641..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLObjects.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export class WebGLObjects { - constructor(gl: WebGLRenderingContext, geometries: any, attributes: any, info: any); - - update(object: any): any; - dispose(): void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLProgram.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLProgram.d.ts deleted file mode 100644 index d6fdb8978..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLProgram.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { WebGLRenderer } from '../WebGLRenderer.js'; -import { WebGLUniforms } from './WebGLUniforms.js'; - -export class WebGLProgram { - constructor(renderer: WebGLRenderer, cacheKey: string, parameters: object); - - name: string; - id: number; - cacheKey: string; // unique identifier for this program, used for looking up compiled programs from cache. - - /** - * @default 1 - */ - usedTimes: number; - program: any; - vertexShader: WebGLShader; - fragmentShader: WebGLShader; - /** - * @deprecated Use {@link WebGLProgram#getUniforms getUniforms()} instead. - */ - uniforms: any; - /** - * @deprecated Use {@link WebGLProgram#getAttributes getAttributes()} instead. - */ - attributes: any; - - getUniforms(): WebGLUniforms; - getAttributes(): any; - destroy(): void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLPrograms.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLPrograms.d.ts deleted file mode 100644 index b6c8a1817..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLPrograms.d.ts +++ /dev/null @@ -1,218 +0,0 @@ -import { ColorSpace, Combine, DepthPackingStrategies, GLSLVersion, Mapping, ShadowMapType, ToneMapping } from '../../constants.js'; -import { Object3D } from '../../core/Object3D.js'; -import { Light } from '../../lights/Light.js'; -import { Material } from '../../materials/Material.js'; -import { Scene } from '../../scenes/Scene.js'; -import { IUniform } from '../shaders/UniformsLib.js'; -import { WebGLRenderer } from '../WebGLRenderer.js'; -import { WebGLBindingStates } from './WebGLBindingStates.js'; -import { WebGLCapabilities } from './WebGLCapabilities.js'; -import { WebGLClipping } from './WebGLClipping.js'; -import { WebGLCubeMaps } from './WebGLCubeMaps.js'; -import { WebGLExtensions } from './WebGLExtensions.js'; -import { WebGLLightsState } from './WebGLLights.js'; -import { WebGLProgram } from './WebGLProgram.js'; - -export interface WebGLProgramParameters { - shaderID: string; - shaderType: string; - shaderName: string; - - vertexShader: string; - fragmentShader: string; - defines: { [define: string]: string | number | boolean } | undefined; - - customVertexShaderID: string | undefined; - customFragmentShaderID: string | undefined; - - isRawShaderMaterial: boolean; - glslVersion: GLSLVersion | null | undefined; - - precision: 'lowp' | 'mediump' | 'highp'; - - batching: boolean; - batchingColor: boolean; - instancing: boolean; - instancingColor: boolean; - instancingMorph: boolean; - - supportsVertexTextures: boolean; - outputColorSpace: ColorSpace; - alphaToCoverage: boolean; - - map: boolean; - matcap: boolean; - envMap: boolean; - envMapMode: Mapping | false; - envMapCubeUVHeight: number | null; - aoMap: boolean; - lightMap: boolean; - bumpMap: boolean; - normalMap: boolean; - displacementMap: boolean; - emissiveMap: boolean; - - normalMapObjectSpace: boolean; - normalMapTangentSpace: boolean; - - metalnessMap: boolean; - roughnessMap: boolean; - - anisotropy: boolean; - anisotropyMap: boolean; - - clearcoat: boolean; - clearcoatMap: boolean; - clearcoatNormalMap: boolean; - clearcoatRoughnessMap: boolean; - - dispersion: boolean; - - iridescence: boolean; - iridescenceMap: boolean; - iridescenceThicknessMap: boolean; - - sheen: boolean; - sheenColorMap: boolean; - sheenRoughnessMap: boolean; - - specularMap: boolean; - specularColorMap: boolean; - specularIntensityMap: boolean; - - transmission: boolean; - transmissionMap: boolean; - thicknessMap: boolean; - - gradientMap: boolean; - - opaque: boolean; - - alphaMap: boolean; - alphaTest: boolean; - alphaHash: boolean; - - combine: Combine | undefined; - - // - - mapUv: string | false; - aoMapUv: string | false; - lightMapUv: string | false; - bumpMapUv: string | false; - normalMapUv: string | false; - displacementMapUv: string | false; - emissiveMapUv: string | false; - - metalnessMapUv: string | false; - roughnessMapUv: string | false; - - anisotropyMapUv: string | false; - - clearcoatMapUv: string | false; - clearcoatNormalMapUv: string | false; - clearcoatRoughnessMapUv: string | false; - - iridescenceMapUv: string | false; - iridescenceThicknessMapUv: string | false; - - sheenColorMapUv: string | false; - sheenRoughnessMapUv: string | false; - - specularMapUv: string | false; - specularColorMapUv: string | false; - specularIntensityMapUv: string | false; - - transmissionMapUv: string | false; - thicknessMapUv: string | false; - - alphaMapUv: string | false; - - // - - vertexTangents: boolean; - vertexColors: boolean; - vertexAlphas: boolean; - vertexUv1s: boolean; - vertexUv2s: boolean; - vertexUv3s: boolean; - - pointsUvs: boolean; - - fog: boolean; - useFog: boolean; - fogExp2: boolean; - - flatShading: boolean; - - sizeAttenuation: boolean; - logarithmicDepthBuffer: boolean; - - skinning: boolean; - - morphTargets: boolean; - morphNormals: boolean; - morphColors: boolean; - morphTargetsCount: number; - morphTextureStride: number; - - numDirLights: number; - numPointLights: number; - numSpotLights: number; - numSpotLightMaps: number; - numRectAreaLights: number; - numHemiLights: number; - - numDirLightShadows: number; - numPointLightShadows: number; - numSpotLightShadows: number; - numSpotLightShadowsWithMaps: number; - - numLightProbes: number; - - numClippingPlanes: number; - numClipIntersection: number; - - dithering: boolean; - - shadowMapEnabled: boolean; - shadowMapType: ShadowMapType; - - toneMapping: ToneMapping; - - decodeVideoTexture: boolean; - - premultipliedAlpha: boolean; - - doubleSided: boolean; - flipSided: boolean; - - useDepthPacking: boolean; - depthPacking: DepthPackingStrategies | 0; - - index0AttributeName: string | undefined; - - extensionClipCullDistance: boolean; - extensionMultiDraw: boolean; - - rendererExtensionParallelShaderCompile: boolean; - - customProgramCacheKey: string; -} - -export interface WebGLProgramParametersWithUniforms extends WebGLProgramParameters { - uniforms: { [uniform: string]: IUniform }; -} - -export class WebGLPrograms { - constructor(renderer: WebGLRenderer, cubemaps: WebGLCubeMaps, extensions: WebGLExtensions, capabilities: WebGLCapabilities, bindingStates: WebGLBindingStates, clipping: WebGLClipping); - - programs: WebGLProgram[]; - - getParameters(material: Material, lights: WebGLLightsState, shadows: Light[], scene: Scene, object: Object3D): WebGLProgramParameters; - - getProgramCacheKey(parameters: WebGLProgramParameters): string; - getUniforms(material: Material): { [uniform: string]: IUniform }; - acquireProgram(parameters: WebGLProgramParametersWithUniforms, cacheKey: string): WebGLProgram; - releaseProgram(program: WebGLProgram): void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLProperties.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLProperties.d.ts deleted file mode 100644 index f6b86e1bb..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLProperties.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export class WebGLProperties { - constructor(); - - get(object: any): any; - remove(object: any): void; - update(object: any, key: any, value: any): any; - dispose(): void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLRenderLists.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLRenderLists.d.ts deleted file mode 100644 index 6ea29225f..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLRenderLists.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { BufferGeometry } from '../../core/BufferGeometry.js'; -import { Object3D } from '../../core/Object3D.js'; -import { Material } from '../../materials/Material.js'; -import { Group } from '../../objects/Group.js'; -import { Scene } from '../../scenes/Scene.js'; -import { WebGLProgram } from './WebGLProgram.js'; -import { WebGLProperties } from './WebGLProperties.js'; - -export interface RenderItem { - id: number; - object: Object3D; - geometry: BufferGeometry | null; - material: Material; - program: WebGLProgram; - groupOrder: number; - renderOrder: number; - z: number; - group: Group | null; -} - -export class WebGLRenderList { - constructor(properties: WebGLProperties); - - /** - * @default [] - */ - opaque: RenderItem[]; - - /** - * @default [] - */ - transparent: RenderItem[]; - - /** - * @default [] - */ - transmissive: RenderItem[]; - - init(): void; - push(object: Object3D, geometry: BufferGeometry | null, material: Material, groupOrder: number, z: number, group: Group | null): void; - unshift(object: Object3D, geometry: BufferGeometry | null, material: Material, groupOrder: number, z: number, group: Group | null): void; - sort(opaqueSort: (a: any, b: any) => number, transparentSort: (a: any, b: any) => number): void; - finish(): void; -} - -export class WebGLRenderLists { - constructor(properties: WebGLProperties); - - dispose(): void; - get(scene: Scene, renderCallDepth: number): WebGLRenderList; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLShader.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLShader.d.ts deleted file mode 100644 index 5704fb88e..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLShader.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function WebGLShader(gl: WebGLRenderingContext, type: string, string: string): WebGLShader; diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLShadowMap.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLShadowMap.d.ts deleted file mode 100644 index c1b10e099..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLShadowMap.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Camera } from '../../cameras/Camera.js'; -import { ShadowMapType } from '../../constants.js'; -import { Light } from '../../lights/Light.js'; -import { Scene } from '../../scenes/Scene.js'; -import { WebGLRenderer } from '../WebGLRenderer.js'; -import { WebGLCapabilities } from './WebGLCapabilities.js'; -import { WebGLObjects } from './WebGLObjects.js'; - -export class WebGLShadowMap { - constructor(_renderer: WebGLRenderer, _objects: WebGLObjects, _capabilities: WebGLCapabilities); - - /** - * @default false - */ - enabled: boolean; - - /** - * @default true - */ - autoUpdate: boolean; - - /** - * @default false - */ - needsUpdate: boolean; - - /** - * @default THREE.PCFShadowMap - */ - type: ShadowMapType; - - render(shadowsArray: Light[], scene: Scene, camera: Camera): void; - - /** - * @deprecated Use {@link Material#shadowSide} instead. - */ - cullFace: any; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLState.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLState.d.ts deleted file mode 100644 index 62ce60e7a..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLState.d.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Blending, BlendingDstFactor, BlendingEquation, BlendingSrcFactor, CullFace, DepthModes } from '../../constants.js'; -import { Material } from '../../materials/Material.js'; -import { Vector4 } from '../../math/Vector4.js'; -import { WebGLRenderTarget } from '../WebGLRenderTarget.js'; - -export class WebGLColorBuffer { - constructor(); - - setMask(colorMask: boolean): void; - setLocked(lock: boolean): void; - setClear(r: number, g: number, b: number, a: number, premultipliedAlpha: boolean): void; - reset(): void; -} - -export class WebGLDepthBuffer { - constructor(); - - setTest(depthTest: boolean): void; - setMask(depthMask: boolean): void; - setFunc(depthFunc: DepthModes): void; - setLocked(lock: boolean): void; - setClear(depth: number): void; - reset(): void; -} - -export class WebGLStencilBuffer { - constructor(); - - setTest(stencilTest: boolean): void; - setMask(stencilMask: number): void; - setFunc(stencilFunc: number, stencilRef: number, stencilMask: number): void; - setOp(stencilFail: number, stencilZFail: number, stencilZPass: number): void; - setLocked(lock: boolean): void; - setClear(stencil: number): void; - reset(): void; -} - -export class WebGLState { - constructor(gl: WebGLRenderingContext); - - buffers: { - color: WebGLColorBuffer; - depth: WebGLDepthBuffer; - stencil: WebGLStencilBuffer; - }; - - enable(id: number): void; - disable(id: number): void; - bindFramebuffer(target: number, framebuffer: WebGLFramebuffer | null): void; - drawBuffers(renderTarget: WebGLRenderTarget | null, framebuffer: WebGLFramebuffer | null): void; - useProgram(program: any): boolean; - setBlending(blending: Blending, blendEquation?: BlendingEquation, blendSrc?: BlendingSrcFactor, blendDst?: BlendingDstFactor, blendEquationAlpha?: BlendingEquation, blendSrcAlpha?: BlendingSrcFactor, blendDstAlpha?: BlendingDstFactor, premultiplyAlpha?: boolean): void; - setMaterial(material: Material, frontFaceCW: boolean): void; - setFlipSided(flipSided: boolean): void; - setCullFace(cullFace: CullFace): void; - setLineWidth(width: number): void; - setPolygonOffset(polygonoffset: boolean, factor?: number, units?: number): void; - setScissorTest(scissorTest: boolean): void; - activeTexture(webglSlot: number): void; - bindTexture(webglType: number, webglTexture: any): void; - unbindTexture(): void; - // Same interface as https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/compressedTexImage2D - compressedTexImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, data: ArrayBufferView): void; - // Same interface as https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texImage2D - texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels: ArrayBufferView | null): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, source: any): void; - texImage3D(target: number, level: number, internalformat: number, width: number, height: number, depth: number, border: number, format: number, type: number, pixels: any): void; - scissor(scissor: Vector4): void; - viewport(viewport: Vector4): void; - reset(): void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLTextures.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLTextures.d.ts deleted file mode 100644 index c835ad275..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLTextures.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { WebGLCapabilities } from './WebGLCapabilities.js'; -import { WebGLExtensions } from './WebGLExtensions.js'; -import { WebGLInfo } from './WebGLInfo.js'; -import { WebGLProperties } from './WebGLProperties.js'; -import { WebGLState } from './WebGLState.js'; -import { WebGLUtils } from './WebGLUtils.js'; - -export class WebGLTextures { - constructor(gl: WebGLRenderingContext, extensions: WebGLExtensions, state: WebGLState, properties: WebGLProperties, capabilities: WebGLCapabilities, utils: WebGLUtils, info: WebGLInfo); - - allocateTextureUnit(): void; - resetTextureUnits(): void; - setTexture2D(texture: any, slot: number): void; - setTexture2DArray(texture: any, slot: number): void; - setTexture3D(texture: any, slot: number): void; - setTextureCube(texture: any, slot: number): void; - setupRenderTarget(renderTarget: any): void; - updateRenderTargetMipmap(renderTarget: any): void; - updateMultisampleRenderTarget(renderTarget: any): void; - safeSetTexture2D(texture: any, slot: number): void; - safeSetTextureCube(texture: any, slot: number): void; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLUniforms.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLUniforms.d.ts deleted file mode 100644 index c8ce9bba2..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLUniforms.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { WebGLProgram } from './WebGLProgram.js'; -import { WebGLTextures } from './WebGLTextures.js'; - -export class WebGLUniforms { - constructor(gl: WebGLRenderingContext, program: WebGLProgram); - - setValue(gl: WebGLRenderingContext, name: string, value: any, textures: WebGLTextures): void; - setOptional(gl: WebGLRenderingContext, object: any, name: string): void; - - static upload(gl: WebGLRenderingContext, seq: any, values: any[], textures: WebGLTextures): void; - static seqWithValue(seq: any, values: any[]): any[]; -} diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLUniformsGroups.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLUniformsGroups.d.ts deleted file mode 100644 index 2f4b29f20..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLUniformsGroups.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { UniformsGroup } from '../../core/UniformsGroup.js'; - -import { WebGLCapabilities } from './WebGLCapabilities.js'; -import { WebGLInfo } from './WebGLInfo.js'; -import { WebGLProgram } from './WebGLProgram.js'; -import { WebGLState } from './WebGLState.js'; - -export function WebGLUniformsGroups( - gl: WebGLRenderingContext, - info: WebGLInfo, - capabilities: WebGLCapabilities, - state: WebGLState -): { - dispose: () => void; - update: (uniformsGroup: UniformsGroup, program: WebGLProgram) => void; - bind: (uniformsGroup: UniformsGroup, program: WebGLProgram) => void; -}; diff --git a/packages/canvas-three/three/src/renderers/webgl/WebGLUtils.d.ts b/packages/canvas-three/three/src/renderers/webgl/WebGLUtils.d.ts deleted file mode 100644 index 135c582af..000000000 --- a/packages/canvas-three/three/src/renderers/webgl/WebGLUtils.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ColorSpace, CompressedPixelFormat, PixelFormat, TextureDataType } from '../../constants.js'; -import { WebGLExtensions } from './WebGLExtensions.js'; - -export class WebGLUtils { - constructor(gl: WebGLRenderingContext | WebGL2RenderingContext, extensions: WebGLExtensions); - - convert(p: PixelFormat | CompressedPixelFormat | TextureDataType, colorSpace?: ColorSpace): number | null; -} diff --git a/packages/canvas-three/three/src/renderers/webgpu/WebGPUBackend.d.ts b/packages/canvas-three/three/src/renderers/webgpu/WebGPUBackend.d.ts deleted file mode 100644 index 64b2642a8..000000000 --- a/packages/canvas-three/three/src/renderers/webgpu/WebGPUBackend.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { CoordinateSystem } from '../../constants.js'; -import Backend, { BackendParameters } from '../common/Backend.js'; - -export interface WebGPUBackendParameters extends BackendParameters { - alpha?: boolean | undefined; - antialias?: boolean | undefined; - sampleCount?: number | undefined; - trackTimestamp?: boolean | undefined; -} - -export default class WebGPUBackend extends Backend { - readonly isWebGPUBackend: true; - - constructor(parameters?: WebGPUBackendParameters); - - get coordinateSystem(): CoordinateSystem; - - // utils public - - getMaxAnisotropy(): number; -} diff --git a/packages/canvas-three/three/src/renderers/webgpu/WebGPURenderer.d.ts b/packages/canvas-three/three/src/renderers/webgpu/WebGPURenderer.d.ts deleted file mode 100644 index c51a8a727..000000000 --- a/packages/canvas-three/three/src/renderers/webgpu/WebGPURenderer.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Renderer, { RendererParameters } from '../common/Renderer.js'; -import { WebGPUBackendParameters } from './WebGPUBackend.js'; - -export interface WebGPURendererParameters extends RendererParameters, WebGPUBackendParameters { - forceWebGL?: boolean | undefined; -} - -export default class WebGPURenderer extends Renderer { - constructor(parameters?: WebGPURendererParameters); -} diff --git a/packages/canvas-three/three/src/renderers/webgpu/nodes/WGSLNodeBuilder.d.ts b/packages/canvas-three/three/src/renderers/webgpu/nodes/WGSLNodeBuilder.d.ts deleted file mode 100644 index b31077688..000000000 --- a/packages/canvas-three/three/src/renderers/webgpu/nodes/WGSLNodeBuilder.d.ts +++ /dev/null @@ -1,75 +0,0 @@ -import CodeNode from '../../../nodes/code/CodeNode.js'; -import { NodeShaderStage } from '../../../nodes/core/constants.js'; -import NodeBuilder from '../../../nodes/core/NodeBuilder.js'; -import NodeUniform from '../../../nodes/core/NodeUniform.js'; -import NodeVar from '../../../nodes/core/NodeVar.js'; -import StructTypeNode from '../../../nodes/core/StructTypeNode.js'; -import { ShaderNode } from '../../../nodes/shadernode/ShaderNode.js'; -import { Texture } from '../../../textures/Texture.js'; -import NodeUniformsGroup from '../../common/nodes/NodeUniformsGroup.js'; - -type BuiltinStage = NodeShaderStage | 'attribute' | 'output'; -interface BuiltinType { - name: string; - property: string; - type: string; -} - -export default class WGSLNodeBuilder extends NodeBuilder { - builtins: { [key in BuiltinStage]: Map }; - uniformGroups: { [key in NodeShaderStage]: NodeUniformsGroup }; - - needsColorSpaceToLinear(texture: Texture): boolean; - _generateTextureSample(texture: Texture, textureProperty: string, uvSnippet: string, depthSnippet: string | null, shaderStage: NodeShaderStage): string; - _generateVideoSample(textureProperty: string, uvSnippet: string, shaderStage: NodeShaderStage): string; - _generateTextureSampleLevel(texture: Texture, textureProperty: string, uvSnippet: string, levelSnippet: string, depthSnippet: string | null, shaderStage: NodeShaderStage): string; - generateTextureLod(texture: Texture, textureProperty: string, uvSnippet: string, levelSnippet: string): string; - generateTextureLoad(texture: Texture, textureProperty: string, uvIndexSnippet: string, depthSnippet: string | null, shaderStage: NodeShaderStage): string; - generateTextureStore(texture: Texture, textureProperty: string, uvIndexSnippet: string, valueSnippet: string): string; - isUnfilterable(texture: Texture): boolean; - generateTexture(texture: Texture, textureProperty: string, uvSnippet: string, depthSnippet: string | null, shaderStage: NodeShaderStage): string; - generateTextureGrad(texture: Texture, textureProperty: string, uvSnippet: string, gradSnippet: string[], depthSnippet: string | null, shaderStage: NodeShaderStage): string; - generateTextureCompare(texture: Texture, textureProperty: string, uvSnippet: string, compareSnippet: String, shaderStage: NodeShaderStage): string; - generateTextureLevel(texture: Texture, textureProperty: string, uvSnippet: string, levelSnippet: string, depthSnippet: string | null, shaderStage: NodeShaderStage): string; - - getPropertyName(node: NodeVar | NodeUniform, shaderStage: NodeShaderStage): string; - - getOutputStructName(): string; - - _getUniformGroupCount(shaderStage: NodeShaderStage): number; - - getFunctionOperator(op: string): string | null; - // getStorageAccess(node: StorageTextureNode | StorageBufferNode): string; - - getBuiltin(name: string, property: string, type: string, shaderStage: BuiltinStage): string; - getVertexIndex(): string; - getInstanceIndex(): string; - getDrawIndex(): null; - - buildFunctionCode(shaderNode: ShaderNode): string; - - getFragDepth(): string; - getFragCoord(): string; - getFrontFacing(): string; - - getBuiltins(shaderStage: BuiltinStage): string; - getAttributes(shaderStage: NodeShaderStage): string; - - getStructMembers(struct: StructTypeNode): string; - getStructs(shaderStage: NodeShaderStage): string; - - getVar(type: string, name: string): string; - getVars(shaderStage: NodeShaderStage): string; - getVaryings(shaderStage: NodeShaderStage): string; - getUniforms(shaderStage: NodeShaderStage): string; - buildCode(): void; - getMethod(method: string, output?: string | null): string; - - _getWGSLMethod(method: string): CodeNode | string; - _include(name: string): CodeNode; - _getWGSLVertexCode(shaderData: { [key: string]: string }): string; - _getWGSLFragmentCode(shaderData: { [key: string]: string }): string; - _getWGSLComputeCode(shaderData: { [key: string]: string }, workgroupSize: string): string; - _getWGSLStruct(name: string, vars: string): string; - _getWGSLStructBinding(name: string, vars: string, access: string, binding: number, group: number): string; -} diff --git a/packages/canvas-three/three/src/renderers/webgpu/nodes/WGSLNodeFunction.d.ts b/packages/canvas-three/three/src/renderers/webgpu/nodes/WGSLNodeFunction.d.ts deleted file mode 100644 index 6dd463187..000000000 --- a/packages/canvas-three/three/src/renderers/webgpu/nodes/WGSLNodeFunction.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import NodeFunction from '../../../nodes/core/NodeFunction.js'; - -export default class WGSLNodeFunction extends NodeFunction { - constructor(source: string); - getCode(name?: string): string; -} diff --git a/packages/canvas-three/three/src/renderers/webgpu/nodes/WGSLNodeParser.d.ts b/packages/canvas-three/three/src/renderers/webgpu/nodes/WGSLNodeParser.d.ts deleted file mode 100644 index 76153a575..000000000 --- a/packages/canvas-three/three/src/renderers/webgpu/nodes/WGSLNodeParser.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import NodeParser from '../../../nodes/core/NodeParser.js'; -import WGSLNodeFunction from './WGSLNodeFunction.js'; - -export default class WGSLNodeParser extends NodeParser { - parseFunction(source: string): WGSLNodeFunction; -} diff --git a/packages/canvas-three/three/src/renderers/webgpu/utils/WebGPUConstants.d.ts b/packages/canvas-three/three/src/renderers/webgpu/utils/WebGPUConstants.d.ts deleted file mode 100644 index c735fb39f..000000000 --- a/packages/canvas-three/three/src/renderers/webgpu/utils/WebGPUConstants.d.ts +++ /dev/null @@ -1,328 +0,0 @@ -export enum GPUPrimitiveTopology { - PointList = 'point-list', - LineList = 'line-list', - LineStrip = 'line-strip', - TriangleList = 'triangle-list', - TriangleStrip = 'triangle-strip', -} - -export enum GPUCompareFunction { - Never = 'never', - Less = 'less', - Equal = 'equal', - LessEqual = 'less-equal', - Greater = 'greater', - NotEqual = 'not-equal', - GreaterEqual = 'greater-equal', - Always = 'always', -} - -export enum GPUStoreOp { - Store = 'store', - Discard = 'discard', -} - -export enum GPULoadOp { - Load = 'load', - Clear = 'clear', -} - -export enum GPUFrontFace { - CCW = 'ccw', - CW = 'cw', -} - -export enum GPUCullMode { - None = 'none', - Front = 'front', - Back = 'back', -} - -export enum GPUIndexFormat { - Uint16 = 'uint16', - Uint32 = 'uint32', -} - -export enum GPUVertexFormat { - Uint8x2 = 'uint8x2', - Uint8x4 = 'uint8x4', - Sint8x2 = 'sint8x2', - Sint8x4 = 'sint8x4', - Unorm8x2 = 'unorm8x2', - Unorm8x4 = 'unorm8x4', - Snorm8x2 = 'snorm8x2', - Snorm8x4 = 'snorm8x4', - Uint16x2 = 'uint16x2', - Uint16x4 = 'uint16x4', - Sint16x2 = 'sint16x2', - Sint16x4 = 'sint16x4', - Unorm16x2 = 'unorm16x2', - Unorm16x4 = 'unorm16x4', - Snorm16x2 = 'snorm16x2', - Snorm16x4 = 'snorm16x4', - Float16x2 = 'float16x2', - Float16x4 = 'float16x4', - Float32 = 'float32', - Float32x2 = 'float32x2', - Float32x3 = 'float32x3', - Float32x4 = 'float32x4', - Uint32 = 'uint32', - Uint32x2 = 'uint32x2', - Uint32x3 = 'uint32x3', - Uint32x4 = 'uint32x4', - Sint32 = 'sint32', - Sint32x2 = 'sint32x2', - Sint32x3 = 'sint32x3', - Sint32x4 = 'sint32x4', -} - -export enum GPUTextureFormat { - // 8-bit formats - - R8Unorm = 'r8unorm', - R8Snorm = 'r8snorm', - R8Uint = 'r8uint', - R8Sint = 'r8sint', - - // 16-bit formats - - R16Uint = 'r16uint', - R16Sint = 'r16sint', - R16Float = 'r16float', - RG8Unorm = 'rg8unorm', - RG8Snorm = 'rg8snorm', - RG8Uint = 'rg8uint', - RG8Sint = 'rg8sint', - - // 32-bit formats - - R32Uint = 'r32uint', - R32Sint = 'r32sint', - R32Float = 'r32float', - RG16Uint = 'rg16uint', - RG16Sint = 'rg16sint', - RG16Float = 'rg16float', - RGBA8Unorm = 'rgba8unorm', - RGBA8UnormSRGB = 'rgba8unorm-srgb', - RGBA8Snorm = 'rgba8snorm', - RGBA8Uint = 'rgba8uint', - RGBA8Sint = 'rgba8sint', - BGRA8Unorm = 'bgra8unorm', - BGRA8UnormSRGB = 'bgra8unorm-srgb', - // Packed 32-bit formats - RGB9E5UFloat = 'rgb9e5ufloat', - RGB10A2Unorm = 'rgb10a2unorm', - RG11B10uFloat = 'rgb10a2unorm', - - // 64-bit formats - - RG32Uint = 'rg32uint', - RG32Sint = 'rg32sint', - RG32Float = 'rg32float', - RGBA16Uint = 'rgba16uint', - RGBA16Sint = 'rgba16sint', - RGBA16Float = 'rgba16float', - - // 128-bit formats - - RGBA32Uint = 'rgba32uint', - RGBA32Sint = 'rgba32sint', - RGBA32Float = 'rgba32float', - - // Depth and stencil formats - - Stencil8 = 'stencil8', - Depth16Unorm = 'depth16unorm', - Depth24Plus = 'depth24plus', - Depth24PlusStencil8 = 'depth24plus-stencil8', - Depth32Float = 'depth32float', - - // 'depth32float-stencil8' extension - - Depth32FloatStencil8 = 'depth32float-stencil8', - - // BC compressed formats usable if 'texture-compression-bc' is both - // supported by the device/user agent and enabled in requestDevice. - - BC1RGBAUnorm = 'bc1-rgba-unorm', - BC1RGBAUnormSRGB = 'bc1-rgba-unorm-srgb', - BC2RGBAUnorm = 'bc2-rgba-unorm', - BC2RGBAUnormSRGB = 'bc2-rgba-unorm-srgb', - BC3RGBAUnorm = 'bc3-rgba-unorm', - BC3RGBAUnormSRGB = 'bc3-rgba-unorm-srgb', - BC4RUnorm = 'bc4-r-unorm', - BC4RSnorm = 'bc4-r-snorm', - BC5RGUnorm = 'bc5-rg-unorm', - BC5RGSnorm = 'bc5-rg-snorm', - BC6HRGBUFloat = 'bc6h-rgb-ufloat', - BC6HRGBFloat = 'bc6h-rgb-float', - BC7RGBAUnorm = 'bc7-rgba-unorm', - BC7RGBAUnormSRGB = 'bc7-rgba-srgb', - - // ETC2 compressed formats usable if 'texture-compression-etc2' is both - // supported by the device/user agent and enabled in requestDevice. - - ETC2RGB8Unorm = 'etc2-rgb8unorm', - ETC2RGB8UnormSRGB = 'etc2-rgb8unorm-srgb', - ETC2RGB8A1Unorm = 'etc2-rgb8a1unorm', - ETC2RGB8A1UnormSRGB = 'etc2-rgb8a1unorm-srgb', - ETC2RGBA8Unorm = 'etc2-rgba8unorm', - ETC2RGBA8UnormSRGB = 'etc2-rgba8unorm-srgb', - EACR11Unorm = 'eac-r11unorm', - EACR11Snorm = 'eac-r11snorm', - EACRG11Unorm = 'eac-rg11unorm', - EACRG11Snorm = 'eac-rg11snorm', - - // ASTC compressed formats usable if 'texture-compression-astc' is both - // supported by the device/user agent and enabled in requestDevice. - - ASTC4x4Unorm = 'astc-4x4-unorm', - ASTC4x4UnormSRGB = 'astc-4x4-unorm-srgb', - ASTC5x4Unorm = 'astc-5x4-unorm', - ASTC5x4UnormSRGB = 'astc-5x4-unorm-srgb', - ASTC5x5Unorm = 'astc-5x5-unorm', - ASTC5x5UnormSRGB = 'astc-5x5-unorm-srgb', - ASTC6x5Unorm = 'astc-6x5-unorm', - ASTC6x5UnormSRGB = 'astc-6x5-unorm-srgb', - ASTC6x6Unorm = 'astc-6x6-unorm', - ASTC6x6UnormSRGB = 'astc-6x6-unorm-srgb', - ASTC8x5Unorm = 'astc-8x5-unorm', - ASTC8x5UnormSRGB = 'astc-8x5-unorm-srgb', - ASTC8x6Unorm = 'astc-8x6-unorm', - ASTC8x6UnormSRGB = 'astc-8x6-unorm-srgb', - ASTC8x8Unorm = 'astc-8x8-unorm', - ASTC8x8UnormSRGB = 'astc-8x8-unorm-srgb', - ASTC10x5Unorm = 'astc-10x5-unorm', - ASTC10x5UnormSRGB = 'astc-10x5-unorm-srgb', - ASTC10x6Unorm = 'astc-10x6-unorm', - ASTC10x6UnormSRGB = 'astc-10x6-unorm-srgb', - ASTC10x8Unorm = 'astc-10x8-unorm', - ASTC10x8UnormSRGB = 'astc-10x8-unorm-srgb', - ASTC10x10Unorm = 'astc-10x10-unorm', - ASTC10x10UnormSRGB = 'astc-10x10-unorm-srgb', - ASTC12x10Unorm = 'astc-12x10-unorm', - ASTC12x10UnormSRGB = 'astc-12x10-unorm-srgb', - ASTC12x12Unorm = 'astc-12x12-unorm', - ASTC12x12UnormSRGB = 'astc-12x12-unorm-srgb', -} - -export enum GPUAddressMode { - ClampToEdge = 'clamp-to-edge', - Repeat = 'repeat', - MirrorRepeat = 'mirror-repeat', -} - -export enum GPUFilterMode { - Linear = 'linear', - Nearest = 'nearest', -} - -export enum GPUBlendFactor { - Zero = 'zero', - One = 'one', - Src = 'src', - OneMinusSrc = 'one-minus-src', - SrcAlpha = 'src-alpha', - OneMinusSrcAlpha = 'one-minus-src-alpha', - Dst = 'dst', - OneMinusDstColor = 'one-minus-dst', - DstAlpha = 'dst-alpha', - OneMinusDstAlpha = 'one-minus-dst-alpha', - SrcAlphaSaturated = 'src-alpha-saturated', - Constant = 'constant', - OneMinusConstant = 'one-minus-constant', -} - -export enum GPUBlendOperation { - Add = 'add', - Subtract = 'subtract', - ReverseSubtract = 'reverse-subtract', - Min = 'min', - Max = 'max', -} - -export enum GPUColorWriteFlags { - None = 0, - Red = 0x1, - Green = 0x2, - Blue = 0x4, - Alpha = 0x8, - All = 0xf, -} - -export enum GPUStencilOperation { - Keep = 'keep', - Zero = 'zero', - Replace = 'replace', - Invert = 'invert', - IncrementClamp = 'increment-clamp', - DecrementClamp = 'decrement-clamp', - IncrementWrap = 'increment-wrap', - DecrementWrap = 'decrement-wrap', -} - -export enum GPUBufferBindingType { - Uniform = 'uniform', - Storage = 'storage', - ReadOnlyStorage = 'read-only-storage', -} - -export enum GPUStorageTextureAccess { - WriteOnly = 'write-only', - ReadOnly = 'read-only', - ReadWrite = 'read-write', -} - -export enum GPUSamplerBindingType { - Filtering = 'filtering', - NonFiltering = 'non-filtering', - Comparison = 'comparison', -} - -export enum GPUTextureSampleType { - Float = 'float', - UnfilterableFloat = 'unfilterable-float', - Depth = 'depth', - SInt = 'sint', - UInt = 'uint', -} - -export enum GPUTextureDimension { - OneD = '1d', - TwoD = '2d', - ThreeD = '3d', -} - -export enum GPUTextureViewDimension { - OneD = '1d', - TwoD = '2d', - TwoDArray = '2d-array', - Cube = 'cube', - CubeArray = 'cube-array', - ThreeD = '3d', -} - -export enum GPUTextureAspect { - All = 'all', - StencilOnly = 'stencil-only', - DepthOnly = 'depth-only', -} - -export enum GPUInputStepMode { - Vertex = 'vertex', - Instance = 'instance', -} - -export enum GPUFeatureName { - DepthClipControl = 'depth-clip-control', - Depth32FloatStencil8 = 'depth32float-stencil8', - TextureCompressionBC = 'texture-compression-bc', - TextureCompressionETC2 = 'texture-compression-etc2', - TextureCompressionASTC = 'texture-compression-astc', - TimestampQuery = 'timestamp-query', - IndirectFirstInstance = 'indirect-first-instance', - ShaderF16 = 'shader-f16', - RG11B10UFloat = 'rg11b10ufloat-renderable', - BGRA8UNormStorage = 'bgra8unorm-storage', - Float32Filterable = 'float32-filterable', -} diff --git a/packages/canvas-three/three/src/renderers/webxr/WebXRController.d.ts b/packages/canvas-three/three/src/renderers/webxr/WebXRController.d.ts deleted file mode 100644 index 39db52029..000000000 --- a/packages/canvas-three/three/src/renderers/webxr/WebXRController.d.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Object3DEventMap } from '../../core/Object3D.js'; -import { Vector3 } from '../../math/Vector3.js'; -import { Group } from '../../objects/Group.js'; - -export type XRControllerEventType = XRSessionEventType | XRInputSourceEventType | 'disconnected' | 'connected'; - -export class XRJointSpace extends Group { - readonly jointRadius: number | undefined; -} - -export type XRHandJoints = Record; - -export interface XRHandInputState { - pinching: boolean; -} - -export interface WebXRSpaceEventMap extends Object3DEventMap { - select: { data: XRInputSource }; - selectstart: { data: XRInputSource }; - selectend: { data: XRInputSource }; - squeeze: { data: XRInputSource }; - squeezestart: { data: XRInputSource }; - squeezeend: { data: XRInputSource }; - - connected: { data: XRInputSource }; - disconnected: { data: XRInputSource }; - - pinchend: { handedness: XRHandedness; target: WebXRController }; // This Event break the THREE.EventDispatcher contract, replacing the target to the wrong instance. - pinchstart: { handedness: XRHandedness; target: WebXRController }; // This Event break the THREE.EventDispatcher contract, replacing the target to the wrong instance. - - move: {}; -} - -export class XRHandSpace extends Group { - readonly joints: Partial; - readonly inputState: XRHandInputState; -} - -export class XRTargetRaySpace extends Group { - hasLinearVelocity: boolean; - readonly linearVelocity: Vector3; - hasAngularVelocity: boolean; - readonly angularVelocity: Vector3; -} - -export class XRGripSpace extends Group { - hasLinearVelocity: boolean; - readonly linearVelocity: Vector3; - hasAngularVelocity: boolean; - readonly angularVelocity: Vector3; -} - -export class WebXRController { - constructor(); - - getHandSpace(): XRHandSpace; - getTargetRaySpace(): XRTargetRaySpace; - getGripSpace(): XRGripSpace; - dispatchEvent(event: { type: XRControllerEventType; data?: XRInputSource }): this; - connect(inputSource: XRInputSource): this; - disconnect(inputSource: XRInputSource): this; - update(inputSource: XRInputSource, frame: XRFrame, referenceSpace: XRReferenceSpace): this; -} diff --git a/packages/canvas-three/three/src/renderers/webxr/WebXRDepthSensing.d.ts b/packages/canvas-three/three/src/renderers/webxr/WebXRDepthSensing.d.ts deleted file mode 100644 index acbb53288..000000000 --- a/packages/canvas-three/three/src/renderers/webxr/WebXRDepthSensing.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Mesh } from '../../objects/Mesh.js'; -import { Texture } from '../../textures/Texture.js'; -import { WebGLRenderer } from '../WebGLRenderer.js'; -import { WebXRArrayCamera } from './WebXRManager.js'; - -export class WebXRDepthSensing { - texture: Texture | null; - mesh: Mesh | null; - - depthNear: number; - depthFar: number; - - constructor(); - - init(renderer: WebGLRenderer, depthData: XRWebGLDepthInformation, renderState: XRRenderState): void; - - getMesh(cameraXR: WebXRArrayCamera): Mesh | null; - - reset(): void; - - getDepthTexture(): Texture | null; -} diff --git a/packages/canvas-three/three/src/renderers/webxr/WebXRManager.d.ts b/packages/canvas-three/three/src/renderers/webxr/WebXRManager.d.ts deleted file mode 100644 index eda921a5c..000000000 --- a/packages/canvas-three/three/src/renderers/webxr/WebXRManager.d.ts +++ /dev/null @@ -1,87 +0,0 @@ -// https://threejs.org/docs/#api/en/renderers/webxr/WebXRManager - -/// - -import { ArrayCamera } from '../../cameras/ArrayCamera.js'; -import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js'; -import { EventDispatcher } from '../../core/EventDispatcher.js'; -import { Vector4 } from '../../math/Vector4.js'; -import { Mesh } from '../../objects/Mesh.js'; -import { Texture } from '../../textures/Texture.js'; -import { WebGLRenderer } from '../WebGLRenderer.js'; -import { XRGripSpace, XRHandSpace, XRTargetRaySpace } from './WebXRController.js'; - -export type WebXRCamera = PerspectiveCamera & { viewport: Vector4 }; -export type WebXRArrayCamera = Omit & { cameras: [WebXRCamera, WebXRCamera] }; - -export interface WebXRManagerEventMap { - sessionstart: {}; - sessionend: {}; - planeadded: { data: XRPlane }; - planeremoved: { data: XRPlane }; - planechanged: { data: XRPlane }; - planesdetected: { data: XRPlaneSet }; -} - -export class WebXRManager extends EventDispatcher { - /** - * @default true - */ - cameraAutoUpdate: boolean; - - /** - * @default false - */ - enabled: boolean; - - /** - * @default false - */ - isPresenting: boolean; - - constructor(renderer: WebGLRenderer, gl: WebGLRenderingContext); - - getController: (index: number) => XRTargetRaySpace; - - getControllerGrip: (index: number) => XRGripSpace; - - getHand: (index: number) => XRHandSpace; - - setFramebufferScaleFactor: (value: number) => void; - - setReferenceSpaceType: (value: XRReferenceSpaceType) => void; - - getReferenceSpace: () => XRReferenceSpace | null; - - setReferenceSpace: (value: XRReferenceSpace) => void; - - getBaseLayer: () => XRWebGLLayer | XRProjectionLayer; - - getBinding: () => XRWebGLBinding; - - getFrame: () => XRFrame; - - getSession: () => XRSession | null; - - setSession: (value: XRSession | null) => Promise; - - getEnvironmentBlendMode: () => XREnvironmentBlendMode | undefined; - - getDepthTexture: () => Texture | null; - - updateCamera: (camera: PerspectiveCamera) => void; - - getCamera: () => WebXRArrayCamera; - - getFoveation: () => number | undefined; - - setFoveation: (value: number) => void; - - hasDepthSensing: () => boolean; - - getDepthSensingMesh: () => Mesh | null; - - setAnimationLoop: (callback: XRFrameRequestCallback | null) => void; - - dispose: () => void; -} diff --git a/packages/canvas-three/three/src/scenes/Fog.d.ts b/packages/canvas-three/three/src/scenes/Fog.d.ts deleted file mode 100644 index f46b1dcdb..000000000 --- a/packages/canvas-three/three/src/scenes/Fog.d.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Color, ColorRepresentation } from '../math/Color.js'; - -export interface FogJSON { - type: string; - name: string; - color: number; - near: number; - far: number; -} - -/** - * This class contains the parameters that define linear fog, i.e., that grows linearly denser with the distance. - * @example - * ```typescript - * const scene = new THREE.Scene(); - * scene.fog = new THREE.Fog(0xcccccc, 10, 15); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/scenes/Fog | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/scenes/Fog.js | Source} - */ -export class Fog { - /** - * The color parameter is passed to the {@link THREE.Color | Color} constructor to set the color property - * @remarks - * Color can be a hexadecimal integer or a CSS-style string. - * @param color - * @param near Expects a `Float` - * @param far Expects a `Float` - */ - constructor(color: ColorRepresentation, near?: number, far?: number); - - /** - * Read-only flag to check if a given object is of type {@link Fog}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isFog: true; - - /** - * Optional name of the object - * @remarks _(doesn't need to be unique)_. - * @defaultValue `""` - */ - name: string; - - /** - * Fog color. - * @remarks If set to black, far away objects will be rendered black. - */ - color: Color; - - /** - * The minimum distance to start applying fog. - * @remarks Objects that are less than **near** units from the active camera won't be affected by fog. - * @defaultValue `1` - * @remarks Expects a `Float` - */ - near: number; - - /** - * The maximum distance at which fog stops being calculated and applied. - * @remarks Objects that are more than **far** units away from the active camera won't be affected by fog. - * @defaultValue `1000` - * @remarks Expects a `Float` - */ - far: number; - - /** - * Returns a new {@link Fog} instance with the same parameters as this one. - */ - clone(): Fog; - - /** - * Return {@link Fog} data in JSON format. - */ - toJSON(): FogJSON; -} diff --git a/packages/canvas-three/three/src/scenes/FogExp2.d.ts b/packages/canvas-three/three/src/scenes/FogExp2.d.ts deleted file mode 100644 index 0f4d07daf..000000000 --- a/packages/canvas-three/three/src/scenes/FogExp2.d.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Color, ColorRepresentation } from '../math/Color.js'; - -export interface FogExp2JSON { - type: string; - name: string; - color: number; - density: number; -} - -/** - * This class contains the parameters that define exponential squared fog, which gives a clear view near the camera and a faster than exponentially densening fog farther from the camera. - * @example - * ```typescript - * const scene = new THREE.Scene(); - * scene.fog = new THREE.FogExp2(0xcccccc, 0.002); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_geometry_terrain | webgl geometry terrain} - * @see {@link https://threejs.org/docs/index.html#api/en/scenes/FogExp2 | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/scenes/FogExp2.js | Source} - */ -export class FogExp2 { - /** - * The color parameter is passed to the {@link THREE.Color | Color} constructor to set the color property - * @remarks Color can be a hexadecimal integer or a CSS-style string. - * @param color - * @param density Expects a `Float` - */ - constructor(color: ColorRepresentation, density?: number); - - /** - * Read-only flag to check if a given object is of type {@link FogExp2}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isFogExp2: true; - - /** - * Optional name of the object - * @remarks _(doesn't need to be unique)_. - * @defaultValue `""` - */ - name: string; - - /** - * Fog color. - * @remarks If set to black, far away objects will be rendered black. - */ - color: Color; - - /** - * Defines how fast the fog will grow dense. - * @defaultValue `0.00025` - * @remarks Expects a `Float` - */ - density: number; - - /** - * Returns a new {@link FogExp2} instance with the same parameters as this one. - */ - clone(): FogExp2; - - /** - * Return {@link FogExp2} data in JSON format. - */ - toJSON(): FogExp2JSON; -} diff --git a/packages/canvas-three/three/src/scenes/Scene.d.ts b/packages/canvas-three/three/src/scenes/Scene.d.ts deleted file mode 100644 index 93a6d0fed..000000000 --- a/packages/canvas-three/three/src/scenes/Scene.d.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { JSONMeta, Object3D, Object3DJSON, Object3DJSONObject } from '../core/Object3D.js'; -import { Material } from '../materials/Material.js'; -import { Color } from '../math/Color.js'; -import { Euler, EulerTuple } from '../math/Euler.js'; -import { CubeTexture } from '../textures/CubeTexture.js'; -import { Texture } from '../textures/Texture.js'; -import { Fog, FogJSON } from './Fog.js'; -import { FogExp2, FogExp2JSON } from './FogExp2.js'; - -export interface SceneJSONObject extends Object3DJSONObject { - fog?: FogJSON | FogExp2JSON; - - backgroundBlurriness?: number; - backgroundIntensity?: number; - backgroundRotation: EulerTuple; - - environmentIntensity?: number; - environmentRotation: EulerTuple; -} - -export interface SceneJSON extends Object3DJSON { - object: SceneJSONObject; -} - -/** - * Scenes allow you to set up what and where is to be rendered by three.js - * @remarks - * This is where you place objects, lights and cameras. - * @see Example: {@link https://threejs.org/examples/#webgl_multiple_scenes_comparison | webgl multiple scenes comparison} - * @see {@link https://threejs.org/docs/index.html#manual/en/introduction/Creating-a-scene | Manual: Creating a scene} - * @see {@link https://threejs.org/docs/index.html#api/en/scenes/Scene | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/scenes/Scene.js | Source} - */ -export class Scene extends Object3D { - /** - * Create a new {@link Scene} object. - */ - constructor(); - - /** - * Read-only flag to check if a given object is of type {@link Scene}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isScene: true; - - /** - * @defaultValue `Scene` - */ - type: 'Scene'; - - /** - * A {@link Fog | fog} instance defining the type of fog that affects everything rendered in the scene. - * @defaultValue `null` - */ - fog: Fog | FogExp2 | null; - - /** - * Sets the blurriness of the background. Only influences environment maps assigned to {@link THREE.Scene.background | Scene.background}. - * @defaultValue `0` - * @remarks Expects a `Float` between `0` and `1`. - */ - backgroundBlurriness: number; - - /** - * Attenuates the color of the background. Only applies to background textures. - * @defaultValue `1` - * @remarks Expects a `Float` - */ - backgroundIntensity: number; - - /** - * Forces everything in the {@link Scene} to be rendered with the defined material. - * @defaultValue `null` - */ - overrideMaterial: Material | null; - - /** - * Defines the background of the scene. - * @remarks Valid inputs are: - * - A {@link THREE.Color | Color} for defining a uniform colored background. - * - A {@link THREE.Texture | Texture} for defining a (flat) textured background. - * - Texture cubes ({@link THREE.CubeTexture | CubeTexture}) or equirectangular textures for defining a skybox. - * @defaultValue `null` - */ - background: Color | Texture | CubeTexture | null; - - /** - * The rotation of the background in radians. Only influences environment maps assigned to {@link .background}. - * Default is `(0,0,0)`. - */ - backgroundRotation: Euler; - - /** - * Sets the environment map for all physical materials in the scene. - * However, it's not possible to overwrite an existing texture assigned to {@link THREE.MeshStandardMaterial.envMap | MeshStandardMaterial.envMap}. - * @defaultValue `null` - */ - environment: Texture | null; - - /** - * Attenuates the color of the environment. Only influences environment maps assigned to {@link Scene.environment}. - * @default 1 - */ - environmentIntensity: number; - - /** - * The rotation of the environment map in radians. Only influences physical materials in the scene when - * {@link .environment} is used. Default is `(0,0,0)`. - */ - environmentRotation: Euler; - - /** - * Convert the {@link Scene} to three.js {@link https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4 | JSON Object/Scene format}. - * @param meta Object containing metadata such as textures or images for the scene. - */ - toJSON(meta?: JSONMeta): SceneJSON; -} diff --git a/packages/canvas-three/three/src/textures/CanvasTexture.d.ts b/packages/canvas-three/three/src/textures/CanvasTexture.d.ts deleted file mode 100644 index 9ae19694b..000000000 --- a/packages/canvas-three/three/src/textures/CanvasTexture.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { MagnificationTextureFilter, Mapping, MinificationTextureFilter, PixelFormat, TextureDataType, Wrapping } from '../constants.js'; -import { OffscreenCanvas, Texture } from './Texture.js'; - -/** - * Creates a texture from a {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas | canvas element}. - * @remarks - * This is almost the same as the base {@link Texture | Texture} class, - * except that it sets {@link Texture.needsUpdate | needsUpdate} to `true` immediately. - * @see {@link THREE.Texture | Texture} - * @see {@link https://threejs.org/docs/index.html#api/en/textures/CanvasTexture | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/textures/CanvasTexture.js | Source} - */ -export class CanvasTexture extends Texture { - /** - * This creates a new {@link THREE.CanvasTexture | CanvasTexture} object. - * @param canvas The HTML canvas element from which to load the texture. - * @param mapping See {@link Texture.mapping | .mapping}. Default {@link THREE.Texture.DEFAULT_MAPPING} - * @param wrapS See {@link Texture.wrapS | .wrapS}. Default {@link THREE.ClampToEdgeWrapping} - * @param wrapT See {@link Texture.wrapT | .wrapT}. Default {@link THREE.ClampToEdgeWrapping} - * @param magFilter See {@link Texture.magFilter | .magFilter}. Default {@link THREE.LinearFilter} - * @param minFilter See {@link Texture.minFilter | .minFilter}. Default {@link THREE.LinearMipmapLinearFilter} - * @param format See {@link Texture.format | .format}. Default {@link THREE.RGBAFormat} - * @param type See {@link Texture.type | .type}. Default {@link THREE.UnsignedByteType} - * @param anisotropy See {@link Texture.anisotropy | .anisotropy}. Default {@link THREE.Texture.DEFAULT_ANISOTROPY} - */ - constructor(canvas: TexImageSource | OffscreenCanvas, mapping?: Mapping, wrapS?: Wrapping, wrapT?: Wrapping, magFilter?: MagnificationTextureFilter, minFilter?: MinificationTextureFilter, format?: PixelFormat, type?: TextureDataType, anisotropy?: number); - - /** - * Read-only flag to check if a given object is of type {@link CanvasTexture}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isCanvasTexture: true; -} diff --git a/packages/canvas-three/three/src/textures/CompressedArrayTexture.d.ts b/packages/canvas-three/three/src/textures/CompressedArrayTexture.d.ts deleted file mode 100644 index 889f14544..000000000 --- a/packages/canvas-three/three/src/textures/CompressedArrayTexture.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { CompressedPixelFormat, TextureDataType, Wrapping } from '../constants.js'; -import { CompressedTexture, CompressedTextureMipmap } from './CompressedTexture.js'; - -/** - * Creates an texture 2D array based on data in compressed form, for example from a - * {@link https://en.wikipedia.org/wiki/DirectDraw_Surface | DDS} file. - * @remarks For use with the {@link THREE.CompressedTextureLoader | CompressedTextureLoader}. - * @see {@link https://threejs.org/docs/index.html#api/en/textures/CompressedArrayTexture | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/textures/CompressedArrayTexture.js | Source} - */ -export class CompressedArrayTexture extends CompressedTexture { - /** - * Read-only flag to check if a given object is of type {@link CompressedArrayTexture}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isCompressedArrayTexture: true; - - /** - * Overridden with a object containing width and height. - * @override - */ - get image(): { width: number; height: number; depth: number }; - set image(value: { width: number; height: number; depth: number }); - - /** - * This defines how the texture is wrapped in the depth direction. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @defaultValue {@link THREE.ClampToEdgeWrapping} - */ - wrapR: Wrapping; - - /** - * A set of all layers which need to be updated in the texture. See {@link CompressedArrayTexture.addLayerUpdate}. - */ - layerUpdates: Set; - - /** - * Create a new instance of {@link CompressedArrayTexture} - * @param mipmaps The mipmaps array should contain objects with data, width and height. The mipmaps should be of the - * correct format and type. - * @param width The width of the biggest mipmap. - * @param height The height of the biggest mipmap. - * @param depth The number of layers of the 2D array texture - * @param format The format used in the mipmaps. See {@link THREE.CompressedPixelFormat}. - * @param type See {@link Texture.type | .type}. Default {@link THREE.UnsignedByteType} - */ - constructor(mipmaps: CompressedTextureMipmap[], width: number, height: number, depth: number, format: CompressedPixelFormat, type?: TextureDataType); - - /** - * Describes that a specific layer of the texture needs to be updated. Normally when {@link Texture.needsUpdate} is - * set to true, the entire compressed texture array is sent to the GPU. Marking specific layers will only transmit - * subsets of all mipmaps associated with a specific depth in the array which is often much more performant. - */ - addLayerUpdate(layerIndex: number): void; - - /** - * Resets the layer updates registry. See {@link CompressedArrayTexture.addLayerUpdate}. - */ - clearLayoutUpdates(): void; -} diff --git a/packages/canvas-three/three/src/textures/CompressedCubeTexture.d.ts b/packages/canvas-three/three/src/textures/CompressedCubeTexture.d.ts deleted file mode 100644 index 746c488dc..000000000 --- a/packages/canvas-three/three/src/textures/CompressedCubeTexture.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { CompressedPixelFormat, TextureDataType } from '../constants.js'; -import { CompressedTexture } from './CompressedTexture.js'; - -export class CompressedCubeTexture extends CompressedTexture { - readonly isCompressedCubeTexture: true; - readonly isCubeTexture: true; - - constructor(images: Array<{ width: number; height: number }>, format?: CompressedPixelFormat, type?: TextureDataType); -} diff --git a/packages/canvas-three/three/src/textures/CompressedTexture.d.ts b/packages/canvas-three/three/src/textures/CompressedTexture.d.ts deleted file mode 100644 index 1aae9da47..000000000 --- a/packages/canvas-three/three/src/textures/CompressedTexture.d.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { ColorSpace, CompressedPixelFormat, MagnificationTextureFilter, Mapping, MinificationTextureFilter, TextureDataType, Wrapping } from '../constants.js'; -import { TypedArray } from '../core/BufferAttribute.js'; -import { Texture } from './Texture.js'; - -export interface CompressedTextureMipmap { - data: TypedArray; - width: number; - height: number; -} - -/** - * Creates a texture based on data in compressed form, for example from a {@link https://en.wikipedia.org/wiki/DirectDraw_Surface | DDS} file. - * @remarks For use with the {@link THREE.CompressedTextureLoader | CompressedTextureLoader}. - * @see {@link https://threejs.org/docs/index.html#api/en/textures/CompressedTexture | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/textures/CompressedTexture.js | Source} - */ -export class CompressedTexture extends Texture { - /** - * This creates a new {@link THREE.CompressedTexture | CompressedTexture} object. - * @param mipmaps The mipmaps array should contain objects with data, width and height. The mipmaps should be of the - * correct format and type. - * @param width The width of the biggest mipmap. - * @param height The height of the biggest mipmap. - * @param format The format used in the mipmaps. See {@link THREE.CompressedPixelFormat}. - * @param type See {@link Texture.type | .type}. Default {@link THREE.UnsignedByteType} - * @param mapping See {@link Texture.mapping | .mapping}. Default {@link THREE.Texture.DEFAULT_MAPPING} - * @param wrapS See {@link Texture.wrapS | .wrapS}. Default {@link THREE.ClampToEdgeWrapping} - * @param wrapT See {@link Texture.wrapT | .wrapT}. Default {@link THREE.ClampToEdgeWrapping} - * @param magFilter See {@link Texture.magFilter | .magFilter}. Default {@link THREE.LinearFilter} - * @param minFilter See {@link Texture.minFilter | .minFilter}. Default {@link THREE.LinearMipmapLinearFilter} - * @param anisotropy See {@link Texture.anisotropy | .anisotropy}. Default {@link THREE.Texture.DEFAULT_ANISOTROPY} - * @param colorSpace See {@link Texture.colorSpace .colorSpace}. Default {@link NoColorSpace} - */ - constructor(mipmaps?: CompressedTextureMipmap[], width?: number, height?: number, format?: CompressedPixelFormat, type?: TextureDataType, mapping?: Mapping, wrapS?: Wrapping, wrapT?: Wrapping, magFilter?: MagnificationTextureFilter, minFilter?: MinificationTextureFilter, anisotropy?: number, colorSpace?: ColorSpace); - - /** - * Read-only flag to check if a given object is of type {@link CompressedTexture}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isCompressedTexture: true; - - /** - * Overridden with a object containing width and height. - * @override - */ - get image(): { width: number; height: number }; - set image(value: { width: number; height: number }); - - /** - * The mipmaps array should contain objects with data, width and height. The mipmaps should be of the correct - * format and type. - */ - mipmaps: CompressedTextureMipmap[] | undefined; - - /** - * @override - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @see {@link THREE.CompressedPixelFormat} - */ - format: CompressedPixelFormat; - - /** - * @override No flipping for cube textures. (also flipping doesn't work for compressed textures) - * @defaultValue `false` - */ - flipY: boolean; - - /** - * @override Can't generate mipmaps for compressed textures. mips must be embedded in DDS files - * @defaultValue `false` - */ - generateMipmaps: boolean; -} diff --git a/packages/canvas-three/three/src/textures/CubeTexture.d.ts b/packages/canvas-three/three/src/textures/CubeTexture.d.ts deleted file mode 100644 index 4094a1e61..000000000 --- a/packages/canvas-three/three/src/textures/CubeTexture.d.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { ColorSpace, CubeTextureMapping, MagnificationTextureFilter, MinificationTextureFilter, PixelFormat, TextureDataType, Wrapping } from '../constants.js'; -import { Texture } from './Texture.js'; - -/** - * Creates a cube texture made up of six images. - * @remarks - * {@link CubeTexture} is almost equivalent in functionality and usage to {@link Texture}. - * The only differences are that the images are an array of _6_ images as opposed to a single image, - * and the mapping options are {@link THREE.CubeReflectionMapping} (default) or {@link THREE.CubeRefractionMapping} - * @example - * ```typescript - * const loader = new THREE.CubeTextureLoader(); - * loader.setPath('textures/cube/pisa/'); - * const textureCube = loader.load(['px.png', 'nx.png', 'py.png', 'ny.png', 'pz.png', 'nz.png']); - * const material = new THREE.MeshBasicMaterial({ - * color: 0xffffff, - * envMap: textureCube - * }); - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/textures/CubeTexture | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/textures/CubeTexture.js | Source} - */ -export class CubeTexture extends Texture { - /** - * This creates a new {@link THREE.CubeTexture | CubeTexture} object. - * @param images - * @param mapping See {@link CubeTexture.mapping | .mapping}. Default {@link THREE.CubeReflectionMapping} - * @param wrapS See {@link Texture.wrapS | .wrapS}. Default {@link THREE.ClampToEdgeWrapping} - * @param wrapT See {@link Texture.wrapT | .wrapT}. Default {@link THREE.ClampToEdgeWrapping} - * @param magFilter See {@link Texture.magFilter | .magFilter}. Default {@link THREE.LinearFilter} - * @param minFilter See {@link Texture.minFilter | .minFilter}. Default {@link THREE.LinearMipmapLinearFilter} - * @param format See {@link Texture.format | .format}. Default {@link THREE.RGBAFormat} - * @param type See {@link Texture.type | .type}. Default {@link THREE.UnsignedByteType} - * @param anisotropy See {@link Texture.anisotropy | .anisotropy}. Default {@link THREE.Texture.DEFAULT_ANISOTROPY} - * @param colorSpace See {@link Texture.colorSpace | .colorSpace}. Default {@link NoColorSpace} - */ - constructor( - images?: any[], // HTMLImageElement or HTMLCanvasElement - mapping?: CubeTextureMapping, - wrapS?: Wrapping, - wrapT?: Wrapping, - magFilter?: MagnificationTextureFilter, - minFilter?: MinificationTextureFilter, - format?: PixelFormat, - type?: TextureDataType, - anisotropy?: number, - colorSpace?: ColorSpace - ); - - /** - * Read-only flag to check if a given object is of type {@link CubeTexture}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isCubeTexture: true; - - /** - * An image object, typically created using the {@link THREE.CubeTextureLoader.load | CubeTextureLoader.load()} method. - * @see {@link Texture.image} - */ - get image(): any; - set image(data: any); - - /** - * An image object, typically created using the {@link THREE.CubeTextureLoader.load | CubeTextureLoader.load()} method. - * @see {@link Texture.image} - */ - get images(): any; - set images(data: any); - - /** - * @inheritDoc - * @defaultValue {@link THREE.CubeReflectionMapping} - */ - mapping: CubeTextureMapping; - - /** - * @inheritDoc - * @defaultValue `false` - */ - flipY: boolean; -} diff --git a/packages/canvas-three/three/src/textures/Data3DTexture.d.ts b/packages/canvas-three/three/src/textures/Data3DTexture.d.ts deleted file mode 100644 index ff15bafff..000000000 --- a/packages/canvas-three/three/src/textures/Data3DTexture.d.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { MagnificationTextureFilter, MinificationTextureFilter, Wrapping } from '../constants.js'; -import { Texture } from './Texture.js'; -import { Texture3DImageData } from './types.js'; - -/** - * Creates a three-dimensional texture from raw data, with parameters to divide it into width, height, and depth - * @example - * ```typescript - * This creates a[name] with repeating data, 0 to 255 - * // create a buffer with some data - * const sizeX = 64; - * const sizeY = 64; - * const sizeZ = 64; - * const data = new Uint8Array(sizeX * sizeY * sizeZ); - * let i = 0; - * for (let z = 0; z & lt; sizeZ; z++) { - * for (let y = 0; y & lt; sizeY; y++) { - * for (let x = 0; x & lt; sizeX; x++) { - * data[i] = i % 256; - * i++; - * } - * } - * } - * // use the buffer to create the texture - * const texture = new THREE.Data3DTexture(data, sizeX, sizeY, sizeZ); - * texture.needsUpdate = true; - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl2_materials_texture3d | WebGL2 / materials / texture3d} - * @see Example: {@link https://threejs.org/examples/#webgl2_materials_texture3d_partialupdate | WebGL2 / materials / texture3d / partialupdate} - * @see Example: {@link https://threejs.org/examples/#webgl2_volume_cloud | WebGL2 / volume / cloud} - * @see Example: {@link https://threejs.org/examples/#webgl2_volume_perlin | WebGL2 / volume / perlin} - * @see {@link https://threejs.org/docs/index.html#api/en/textures/Data3DTexture | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/textures/Data3DTexture.js | Source} - */ -export class Data3DTexture extends Texture { - /** - * Create a new instance of {@link Data3DTexture} - * @param data {@link https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView | ArrayBufferView} of the texture. Default `null`. - * @param width Width of the texture. Default `1`. - * @param height Height of the texture. Default `1`. - * @param depth Depth of the texture. Default `1`. - */ - constructor(data?: BufferSource | null, width?: number, height?: number, depth?: number); - - /** - * Read-only flag to check if a given object is of type {@link Data3DTexture}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isData3DTexture: true; - - /** - * Overridden with a record type holding data, width and height and depth. - * @override - */ - get image(): Texture3DImageData; - set image(data: Texture3DImageData); - - /** - * @override - * @defaultValue {@link THREE.NearestFilter} - */ - magFilter: MagnificationTextureFilter; - - /** - * @override - * @defaultValue {@link THREE.NearestFilter} - */ - minFilter: MinificationTextureFilter; - - /** - * @override - * @defaultValue {@link THREE.ClampToEdgeWrapping} - */ - wrapR: Wrapping; - - /** - * @override - * @defaultValue `false` - */ - flipY: boolean; - - /** - * @override - * @defaultValue `false` - */ - generateMipmaps: boolean; - - /** - * @override - * @defaultValue `1` - */ - unpackAlignment: number; -} - -export {}; diff --git a/packages/canvas-three/three/src/textures/DataArrayTexture.d.ts b/packages/canvas-three/three/src/textures/DataArrayTexture.d.ts deleted file mode 100644 index e8bf8e6b7..000000000 --- a/packages/canvas-three/three/src/textures/DataArrayTexture.d.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { MagnificationTextureFilter, MinificationTextureFilter } from '../constants.js'; -import { Texture } from './Texture.js'; -import { Texture3DImageData } from './types.js'; - -/** - * Creates an array of textures directly from raw data, width and height and depth - * @example - * ```typescript - * This creates a[name] where each texture has a different color. - * // create a buffer with color data - * const width = 512; - * const height = 512; - * const depth = 100; - * const size = width * height; - * const data = new Uint8Array(4 * size * depth); - * for (let i = 0; i & lt; depth; i++) { - * const color = new THREE.Color(Math.random(), Math.random(), Math.random()); - * const r = Math.floor(color.r * 255); - * const g = Math.floor(color.g * 255); - * const b = Math.floor(color.b * 255); - * for (let j = 0; j & lt; size; j++) { - * const stride = (i * size + j) * 4; - * data[stride] = r; - * data[stride + 1] = g; - * data[stride + 2] = b; - * data[stride + 3] = 255; - * } - * } - * // used the buffer to create a [name] - * const texture = new THREE.DataArrayTexture(data, width, height, depth); - * texture.needsUpdate = true; - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl2_materials_texture2darray | WebGL2 / materials / texture2darray} - * @see Example: {@link https://threejs.org/examples/#webgl2_rendertarget_texture2darray | WebGL2 / rendertarget / texture2darray} - * @see {@link https://threejs.org/docs/index.html#api/en/textures/DataArrayTexture | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/textures/DataArrayTexture.js | Source} - */ -export class DataArrayTexture extends Texture { - /** - * Read-only flag to check if a given object is of type {@link DataArrayTexture}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isDataArrayTexture: true; - - /** - * Overridden with a record type holding data, width and height and depth. - * @override - */ - get image(): Texture3DImageData; - set image(data: Texture3DImageData); - - /** - * @override - * @defaultValue {@link THREE.NearestFilter} - */ - magFilter: MagnificationTextureFilter; - - /** - * @override - * @defaultValue {@link THREE.NearestFilter} - */ - minFilter: MinificationTextureFilter; - - /** - * @override - * @defaultValue {@link THREE.ClampToEdgeWrapping} - */ - wrapR: boolean; - - /** - * @override - * @defaultValue `false` - */ - generateMipmaps: boolean; - - /** - * @override - * @defaultValue `false` - */ - flipY: boolean; - - /** - * @override - * @defaultValue `1` - */ - unpackAlignment: number; - - /** - * A set of all layers which need to be updated in the texture. See {@link DataArrayTexture.addLayerUpdate}. - */ - layerUpdates: Set; - - /** - * This creates a new {@link THREE.DataArrayTexture | DataArrayTexture} object. - * @remarks The interpretation of the data depends on {@link format} and {@link type}. - * @remarks If the {@link type} is {@link THREE.UnsignedByteType}, a {@link Uint8Array} will be useful for addressing the texel data - * @remarks If the {@link format} is {@link THREE.RGBAFormat}, data needs four values for one texel; Red, Green, Blue and Alpha (typically the opacity). - * @remarks For the packed {@link type | types}, {@link THREE.UnsignedShort4444Type} and {@link THREE.UnsignedShort5551Type} - * all color components of one texel can be addressed as bitfields within an integer element of a {@link Uint16Array}. - * @remarks In order to use the {@link type | types} {@link THREE.FloatType} and {@link THREE.HalfFloatType}, - * the WebGL implementation must support the respective extensions _OES_texture_float_ and _OES_texture_half_float_ - * @remarks In order to use {@link THREE.LinearFilter} for component-wise, bilinear interpolation of the texels based on these types, - * the WebGL extensions _OES_texture_float_linear_ or _OES_texture_half_float_linear_ must also be present. - * @param data {@link https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView | ArrayBufferView} of the texture. Default `null`. - * @param width Width of the texture. Default `1`. - * @param height Height of the texture. Default `1`. - * @param depth Depth of the texture. Default `1`. - */ - constructor(data?: BufferSource | null, width?: number, height?: number, depth?: number); - - /** - * Describes that a specific layer of the texture needs to be updated. Normally when {@link Texture.needsUpdate} is - * set to true, the entire compressed texture array is sent to the GPU. Marking specific layers will only transmit - * subsets of all mipmaps associated with a specific depth in the array which is often much more performant. - */ - addLayerUpdate(layerIndex: number): void; - - /** - * Resets the layer updates registry. See {@link DataArrayTexture.addLayerUpdate}. - */ - clearLayoutUpdates(): void; -} diff --git a/packages/canvas-three/three/src/textures/DataTexture.d.ts b/packages/canvas-three/three/src/textures/DataTexture.d.ts deleted file mode 100644 index cb21e0b37..000000000 --- a/packages/canvas-three/three/src/textures/DataTexture.d.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { ColorSpace, MagnificationTextureFilter, Mapping, MinificationTextureFilter, PixelFormat, TextureDataType, Wrapping } from '../constants.js'; -import { Texture } from './Texture.js'; -import { TextureImageData } from './types.js'; - -/** - * Creates a texture directly from raw data, width and height. - * @example - * ```typescript - * // create a buffer with color data - * const width = 512; - * const height = 512; - * const size = width * height; - * const data = new Uint8Array(4 * size); - * const color = new THREE.Color(0xffffff); - * const r = Math.floor(color.r * 255); - * const g = Math.floor(color.g * 255); - * const b = Math.floor(color.b * 255); - * for (let i = 0; i & lt; size; i++) { - * const stride = i * 4; - * data[stride] = r; - * data[stride + 1] = g; - * data[stride + 2] = b; - * data[stride + 3] = 255; - * } - * // used the buffer to create a [name] - * const texture = new THREE.DataTexture(data, width, height); - * texture.needsUpdate = true; - * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/textures/DataTexture | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/textures/DataTexture.js | Source} - */ -export class DataTexture extends Texture { - /** - * @param data {@link https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView | ArrayBufferView} of the texture. Default `null`. - * @param width Width of the texture. Default `1`. - * @param height Height of the texture. Default `1`. - * @param format See {@link Texture.format | .format}. Default {@link THREE.RGBAFormat} - * @param type See {@link Texture.type | .type}. Default {@link THREE.UnsignedByteType} - * @param mapping See {@link Texture.mapping | .mapping}. Default {@link THREE.Texture.DEFAULT_MAPPING} - * @param wrapS See {@link Texture.wrapS | .wrapS}. Default {@link THREE.ClampToEdgeWrapping} - * @param wrapT See {@link Texture.wrapT | .wrapT}. Default {@link THREE.ClampToEdgeWrapping} - * @param magFilter See {@link Texture.magFilter | .magFilter}. Default {@link THREE.NearestFilter} - * @param minFilter See {@link Texture.minFilter | .minFilter}. Default {@link THREE.NearestFilter} - * @param anisotropy See {@link Texture.anisotropy | .anisotropy}. Default {@link THREE.Texture.DEFAULT_ANISOTROPY} - * @param colorSpace See {@link Texture.colorSpace | .colorSpace}. Default {@link NoColorSpace} - */ - constructor(data?: BufferSource | null, width?: number, height?: number, format?: PixelFormat, type?: TextureDataType, mapping?: Mapping, wrapS?: Wrapping, wrapT?: Wrapping, magFilter?: MagnificationTextureFilter, minFilter?: MinificationTextureFilter, anisotropy?: number, colorSpace?: ColorSpace); - - /** - * Read-only flag to check if a given object is of type {@link DataTexture}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isDataTexture: true; - - /** - * Overridden with a record type holding data, width and height and depth. - * @override - */ - get image(): TextureImageData; - set image(value: TextureImageData); - - /** - * @override - * @defaultValue {@link THREE.NearestFilter} - */ - magFilter: MagnificationTextureFilter; - - /** - * @override - * @defaultValue {@link THREE.NearestFilter} - */ - minFilter: MinificationTextureFilter; - - /** - * @override - * @defaultValue `false` - */ - flipY: boolean; - - /** - * @override - * @defaultValue `false` - */ - generateMipmaps: boolean; - - /** - * @override - * @defaultValue `1` - */ - unpackAlignment: number; -} diff --git a/packages/canvas-three/three/src/textures/DepthTexture.d.ts b/packages/canvas-three/three/src/textures/DepthTexture.d.ts deleted file mode 100644 index 8e544a2d5..000000000 --- a/packages/canvas-three/three/src/textures/DepthTexture.d.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { DepthTexturePixelFormat, MagnificationTextureFilter, Mapping, MinificationTextureFilter, TextureComparisonFunction, TextureDataType, Wrapping } from '../constants.js'; -import { Texture } from './Texture.js'; - -/** - * This class can be used to automatically save the depth information of a rendering into a texture - * @see Example: {@link https://threejs.org/examples/#webgl_depth_texture | depth / texture} - * @see {@link https://threejs.org/docs/index.html#api/en/textures/DepthTexture | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/textures/DepthTexture.js | Source} - */ -export class DepthTexture extends Texture { - /** - * Create a new instance of {@link DepthTexture} - * @param width Width of the texture. - * @param height Height of the texture. - * @param type See {@link Texture.type | .type}. Default {@link THREE.UnsignedByteType} or {@link THREE.UnsignedInt248Type} - * @param mapping See {@link Texture.mapping | .mapping}. Default {@link THREE.Texture.DEFAULT_MAPPING} - * @param wrapS See {@link Texture.wrapS | .wrapS}. Default {@link THREE.ClampToEdgeWrapping} - * @param wrapT See {@link Texture.wrapT | .wrapT}. Default {@link THREE.ClampToEdgeWrapping} - * @param magFilter See {@link Texture.magFilter | .magFilter}. Default {@link THREE.NearestFilter} - * @param minFilter See {@link Texture.minFilter | .minFilter}. Default {@link THREE.NearestFilter} - * @param anisotropy See {@link Texture.anisotropy | .anisotropy}. Default {@link THREE.Texture.DEFAULT_ANISOTROPY} - * @param format See {@link DepthTexture.format | .format}. Default {@link THREE.DepthFormat} - */ - constructor(width: number, height: number, type?: TextureDataType, mapping?: Mapping, wrapS?: Wrapping, wrapT?: Wrapping, magFilter?: MagnificationTextureFilter, minFilter?: MinificationTextureFilter, anisotropy?: number, format?: DepthTexturePixelFormat); - - /** - * Read-only flag to check if a given object is of type {@link DepthTexture}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isDepthTexture: true; - - /** - * Overridden with a record type holding width and height. - * @override - */ - get image(): { width: number; height: number }; - set image(value: { width: number; height: number }); - - /** - * @override - * @defaultValue `false` - */ - flipY: boolean; - - /** - * @override - * @defaultValue {@link THREE.NearestFilter} - */ - magFilter: MagnificationTextureFilter; - - /** - * @override - * @defaultValue {@link THREE.NearestFilter} - */ - minFilter: MinificationTextureFilter; - - /** - * @override Depth textures do not use mipmaps. - * @defaultValue `false` - */ - generateMipmaps: boolean; - - /** - * @override - * @see {@link Texture.format | Texture.format} - * @defaultValue {@link THREE.DepthFormat}. - */ - format: DepthTexturePixelFormat; - - /** - * @override - * @defaultValue {@link THREE.UnsignedByteType} when {@link format | .format} === {@link THREE.DepthFormat} - * @defaultValue {@link THREE.UnsignedInt248Type} when {@link format | .format} === {@link THREE.DepthStencilFormat} - */ - type: TextureDataType; - - /** - * This is used to define the comparison function used when comparing texels in the depth texture to the value in - * the depth buffer. Default is `null` which means comparison is disabled. - * - * See {@link THREE.TextureComparisonFunction} for functions. - */ - compareFunction: TextureComparisonFunction | null; -} diff --git a/packages/canvas-three/three/src/textures/FramebufferTexture.d.ts b/packages/canvas-three/three/src/textures/FramebufferTexture.d.ts deleted file mode 100644 index 27b962d5d..000000000 --- a/packages/canvas-three/three/src/textures/FramebufferTexture.d.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { MagnificationTextureFilter, MinificationTextureFilter } from '../constants.js'; -import { Texture } from './Texture.js'; - -/** - * This class can only be used in combination with {@link THREE.WebGLRenderer.copyFramebufferToTexture | WebGLRenderer.copyFramebufferToTexture()}. - * @example - * ```typescript - * const pixelRatio = window.devicePixelRatio; - * const textureSize = 128 * pixelRatio; - * - * // instantiate a framebuffer texture - * const frameTexture = new FramebufferTexture( textureSize, textureSize, RGBAFormat ); - * - * // calculate start position for copying part of the frame data - * const vector = new Vector2(); - * vector.x = ( window.innerWidth * pixelRatio / 2 ) - ( textureSize / 2 ); - * vector.y = ( window.innerHeight * pixelRatio / 2 ) - ( textureSize / 2 ); - * - * // render the scene - * renderer.clear(); - * renderer.render( scene, camera ); - * - * // copy part of the rendered frame into the framebuffer texture - * renderer.copyFramebufferToTexture( frameTexture, vector ); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_framebuffer_texture | webgl_framebuffer_texture} - * @see {@link https://threejs.org/docs/index.html#api/en/textures/FramebufferTexture | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/textures/FramebufferTexture.js | Source} - */ -export class FramebufferTexture extends Texture { - /** - * Create a new instance of {@link FramebufferTexture} - * @param width The width of the texture. - * @param height The height of the texture. - */ - constructor(width: number, height: number); - - /** - * Read-only flag to check if a given object is of type {@link FramebufferTexture}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isFramebufferTexture: true; - - /** - * @override - * @defaultValue {@link THREE.NearestFilter} - */ - magFilter: MagnificationTextureFilter; - - /** - * @override - * @defaultValue {@link THREE.NearestFilter} - */ - minFilter: MinificationTextureFilter; - - /** - * @override - * @defaultValue `false` - */ - generateMipmaps: boolean; -} diff --git a/packages/canvas-three/three/src/textures/Source.d.ts b/packages/canvas-three/three/src/textures/Source.d.ts deleted file mode 100644 index 407a935e9..000000000 --- a/packages/canvas-three/three/src/textures/Source.d.ts +++ /dev/null @@ -1,75 +0,0 @@ -export type SerializedImage = - | string - | { - data: number[]; - width: number; - height: number; - type: string; - }; - -export class SourceJSON { - uuid: string; - url: SerializedImage | SerializedImage[]; -} - -/** - * Represents the data {@link Source} of a texture. - * @see {@link https://threejs.org/docs/index.html#api/en/textures/Source | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/textures/Source.js | Source} - */ -export class Source { - /** - * Create a new instance of {@link Source} - * @param data The data definition of a texture. Default `null` - */ - constructor(data: any); - - /** - * Flag to check if a given object is of type {@link Source}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isSource: true; - - readonly id: number; - - /** - * The actual data of a texture. - * @remarks The type of this property depends on the texture that uses this instance. - */ - data: any; - - /** - * This property is only relevant when {@link .needsUpdate} is set to `true` and provides more control on how - * texture data should be processed. - * When `dataReady` is set to `false`, the engine performs the memory allocation (if necessary) but does not - * transfer the data into the GPU memory. - * @default true - */ - dataReady: boolean; - - /** - * When the property is set to `true`, the engine allocates the memory for the texture (if necessary) and triggers - * the actual texture upload to the GPU next time the source is used. - */ - set needsUpdate(value: boolean); - - /** - * {@link http://en.wikipedia.org/wiki/Universally_unique_identifier | UUID} of this object instance. - * @remarks This gets automatically assigned and shouldn't be edited. - */ - uuid: string; - - /** - * This starts at `0` and counts how many times {@link needsUpdate | .needsUpdate} is set to `true`. - * @remarks Expects a `Integer` - * @defaultValue `0` - */ - version: number; - - /** - * Convert the data {@link Source} to three.js {@link https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4 | JSON Object/Scene format}. - * @param meta Optional object containing metadata. - */ - toJSON(meta?: string | {}): SourceJSON; -} diff --git a/packages/canvas-three/three/src/textures/Texture.d.ts b/packages/canvas-three/three/src/textures/Texture.d.ts deleted file mode 100644 index a7767e9e5..000000000 --- a/packages/canvas-three/three/src/textures/Texture.d.ts +++ /dev/null @@ -1,445 +0,0 @@ -import { AnyMapping, AnyPixelFormat, ColorSpace, MagnificationTextureFilter, Mapping, MinificationTextureFilter, PixelFormat, PixelFormatGPU, TextureDataType, Wrapping } from '../constants.js'; -import { EventDispatcher } from '../core/EventDispatcher.js'; -import { Matrix3 } from '../math/Matrix3.js'; -import { Vector2 } from '../math/Vector2.js'; -import { CompressedTextureMipmap } from './CompressedTexture.js'; -import { CubeTexture } from './CubeTexture.js'; -import { Source } from './Source.js'; - -export interface TextureJSON { - metadata: { version: number; type: string; generator: string }; - - uuid: string; - name: string; - - image: string; - - mapping: AnyMapping; - channel: number; - - repeat: [x: number, y: number]; - offset: [x: number, y: number]; - center: [x: number, y: number]; - rotation: number; - - wrap: [wrapS: number, wrapT: number]; - - format: AnyPixelFormat; - internalFormat: PixelFormatGPU | null; - type: TextureDataType; - colorSpace: ColorSpace; - - minFilter: MinificationTextureFilter; - magFilter: MagnificationTextureFilter; - anisotropy: number; - - flipY: boolean; - - generateMipmaps: boolean; - premultiplyAlpha: boolean; - unpackAlignment: number; - - userData?: Record; -} - -/** Shim for OffscreenCanvas. */ -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface OffscreenCanvas extends EventTarget {} - -/** - * Create a {@link Texture} to apply to a surface or as a reflection or refraction map. - * @remarks - * After the initial use of a texture, its **dimensions**, {@link format}, and {@link type} cannot be changed - * Instead, call {@link dispose | .dispose()} on the {@link Texture} and instantiate a new {@link Texture}. - * @example - * ```typescript - * // load a texture, set wrap mode to repeat - * const texture = new THREE.TextureLoader().load("textures/water.jpg"); - * texture.wrapS = THREE.RepeatWrapping; - * texture.wrapT = THREE.RepeatWrapping; - * texture.repeat.set(4, 4); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_materials_texture_filters | webgl materials texture filters} - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @see {@link https://threejs.org/docs/index.html#api/en/textures/Texture | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/Textures/Texture.js | Source} - */ -export class Texture extends EventDispatcher<{ dispose: {} }> { - /** - * This creates a new {@link THREE.Texture | Texture} object. - * @param image See {@link Texture.image | .image}. Default {@link THREE.Texture.DEFAULT_IMAGE} - * @param mapping See {@link Texture.mapping | .mapping}. Default {@link THREE.Texture.DEFAULT_MAPPING} - * @param wrapS See {@link Texture.wrapS | .wrapS}. Default {@link THREE.ClampToEdgeWrapping} - * @param wrapT See {@link Texture.wrapT | .wrapT}. Default {@link THREE.ClampToEdgeWrapping} - * @param magFilter See {@link Texture.magFilter | .magFilter}. Default {@link THREE.LinearFilter} - * @param minFilter See {@link Texture.minFilter | .minFilter}. Default {@link THREE.LinearMipmapLinearFilter} - * @param format See {@link Texture.format | .format}. Default {@link THREE.RGBAFormat} - * @param type See {@link Texture.type | .type}. Default {@link THREE.UnsignedByteType} - * @param anisotropy See {@link Texture.anisotropy | .anisotropy}. Default {@link THREE.Texture.DEFAULT_ANISOTROPY} - * @param colorSpace See {@link Texture.colorSpace | .colorSpace}. Default {@link THREE.NoColorSpace} - */ - constructor(image?: TexImageSource | OffscreenCanvas, mapping?: Mapping, wrapS?: Wrapping, wrapT?: Wrapping, magFilter?: MagnificationTextureFilter, minFilter?: MinificationTextureFilter, format?: PixelFormat, type?: TextureDataType, anisotropy?: number, colorSpace?: ColorSpace); - - /** - * @deprecated - */ - constructor(image: TexImageSource | OffscreenCanvas, mapping: Mapping, wrapS: Wrapping, wrapT: Wrapping, magFilter: MagnificationTextureFilter, minFilter: MinificationTextureFilter, format: PixelFormat, type: TextureDataType, anisotropy: number); - - /** - * Read-only flag to check if a given object is of type {@link Texture}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isTexture: true; - - /** - * Unique number for this {@link Texture} instance. - * @remarks Note that ids are assigned in chronological order: 1, 2, 3, ..., incrementing by one for each new object. - * @remarks Expects a `Integer` - */ - readonly id: number; - - /** - * {@link http://en.wikipedia.org/wiki/Universally_unique_identifier | UUID} of this object instance. - * @remarks This gets automatically assigned and shouldn't be edited. - */ - uuid: string; - - /** - * Optional name of the object - * @remarks _(doesn't need to be unique)_. - * @defaultValue `""` - */ - name: string; - - /** - * The data definition of a texture. A reference to the data source can be shared across textures. - * This is often useful in context of spritesheets where multiple textures render the same data - * but with different {@link Texture} transformations. - */ - source: Source; - - /** - * An image object, typically created using the {@link THREE.TextureLoader.load | TextureLoader.load()} method. - * @remarks This can be any image (e.g., PNG, JPG, GIF, DDS) or video (e.g., MP4, OGG/OGV) type supported by three.js. - * @remarks To use video as a {@link Texture} you need to have a playing HTML5 video element as a source - * for your {@link Texture} image and continuously update this {@link Texture} - * as long as video is playing - the {@link THREE.VideoTexture | VideoTexture} class handles this automatically. - */ - get image(): any; - set image(data: any); - - /** - * Array of user-specified mipmaps - * @defaultValue `[]` - */ - mipmaps: CompressedTextureMipmap[] | CubeTexture[] | HTMLCanvasElement[] | undefined; - - /** - * How the image is applied to the object. - * @remarks All {@link Texture} types except {@link THREE.CubeTexture} expect the _values_ be {@link THREE.Mapping} - * @remarks {@link CubeTexture} expect the _values_ be {@link THREE.CubeTextureMapping} - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @defaultValue _value of_ {@link THREE.Texture.DEFAULT_MAPPING} - */ - mapping: AnyMapping; - - /** - * Lets you select the uv attribute to map the texture to. `0` for `uv`, `1` for `uv1`, `2` for `uv2` and `3` for - * `uv3`. - */ - channel: number; - - /** - * This defines how the {@link Texture} is wrapped *horizontally* and corresponds to **U** in UV mapping. - * @remarks for **WEBGL1** - tiling of images in textures only functions if image dimensions are powers of two - * (2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, ...) in terms of pixels. - * Individual dimensions need not be equal, but each must be a power of two. This is a limitation of WebGL1, not three.js. - * **WEBGL2** does not have this limitation. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @see {@link wrapT} - * @see {@link repeat} - * @defaultValue {@link THREE.ClampToEdgeWrapping} - */ - wrapS: Wrapping; - - /** - * This defines how the {@link Texture} is wrapped *vertically* and corresponds to **V** in UV mapping. - * @remarks for **WEBGL1** - tiling of images in textures only functions if image dimensions are powers of two - * (2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, ...) in terms of pixels. - * Individual dimensions need not be equal, but each must be a power of two. This is a limitation of WebGL1, not three.js. - * **WEBGL2** does not have this limitation. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @see {@link wrapS} - * @see {@link repeat} - * @defaultValue {@link THREE.ClampToEdgeWrapping} - */ - wrapT: Wrapping; - - /** - * How the {@link Texture} is sampled when a texel covers more than one pixel. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @see {@link minFilter} - * @see {@link THREE.MagnificationTextureFilter} - * @defaultValue {@link THREE.LinearFilter} - */ - magFilter: MagnificationTextureFilter; - - /** - * How the {@link Texture} is sampled when a texel covers less than one pixel. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @see {@link magFilter} - * @see {@link THREE.MinificationTextureFilter} - * @defaultValue {@link THREE.LinearMipmapLinearFilter} - */ - minFilter: MinificationTextureFilter; - - /** - * The number of samples taken along the axis through the pixel that has the highest density of texels. - * @remarks A higher value gives a less blurry result than a basic mipmap, at the cost of more {@link Texture} samples being used. - * @remarks Use {@link THREE.WebGLCapabilities.getMaxAnisotropy() | renderer.capabilities.getMaxAnisotropy()} to find the maximum valid anisotropy value for the GPU; - * @remarks This value is usually a power of 2. - * @default _value of_ {@link THREE.Texture.DEFAULT_ANISOTROPY}. That is normally `1`. - */ - anisotropy: number; - - /** - * These define how elements of a 2D texture, or texels, are read by shaders. - * @remarks All {@link Texture} types except {@link THREE.DepthTexture} and {@link THREE.CompressedPixelFormat} expect the _values_ be {@link THREE.PixelFormat} - * @remarks {@link DepthTexture} expect the _values_ be {@link THREE.CubeTextureMapping} - * @remarks {@link CompressedPixelFormat} expect the _values_ be {@link THREE.CubeTextureMapping} - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @see {@link THREE.PixelFormat} - * @defaultValue {@link THREE.RGBAFormat}. - */ - format: AnyPixelFormat; - - /** - * This must correspond to the {@link Texture.format | .format}. - * @remarks {@link THREE.UnsignedByteType}, is the type most used by Texture formats. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @see {@link THREE.TextureDataType} - * @defaultValue {@link THREE.UnsignedByteType} - */ - type: TextureDataType; - - /** - * The GPU Pixel Format allows the developer to specify how the data is going to be stored on the GPU. - * @remarks Compatible only with {@link WebGL2RenderingContext | WebGL 2 Rendering Context}. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @defaultValue The default value is obtained using a combination of {@link Texture.format | .format} and {@link Texture.type | .type}. - */ - internalFormat: PixelFormatGPU | null; - - /** - * The uv-transform matrix for the texture. - * @remarks - * When {@link Texture.matrixAutoUpdate | .matrixAutoUpdate} property is `true`. - * Will be updated by the renderer from the properties: - * - {@link Texture.offset | .offset} - * - {@link Texture.repeat | .repeat} - * - {@link Texture.rotation | .rotation} - * - {@link Texture.center | .center} - * @remarks - * When {@link Texture.matrixAutoUpdate | .matrixAutoUpdate} property is `false`. - * This matrix may be set manually. - * @see {@link matrixAutoUpdate | .matrixAutoUpdate} - * @defaultValue `new THREE.Matrix3()` - */ - matrix: Matrix3; - - /** - * Whether is to update the texture's uv-transform {@link matrix | .matrix}. - * @remarks Set this to `false` if you are specifying the uv-transform {@link matrix} directly. - * @see {@link matrix | .matrix} - * @defaultValue `true` - */ - matrixAutoUpdate: boolean; - - /** - * How much a single repetition of the texture is offset from the beginning, in each direction **U** and **V**. - * @remarks Typical range is `0.0` to `1.0`. - * @defaultValue `new THREE.Vector2(0, 0)` - */ - offset: Vector2; - - /** - * How many times the texture is repeated across the surface, in each direction **U** and **V**. - * @remarks - * If repeat is set greater than `1` in either direction, the corresponding *Wrap* parameter should - * also be set to {@link THREE.RepeatWrapping} or {@link THREE.MirroredRepeatWrapping} to achieve the desired tiling effect. - * @see {@link wrapS} - * @see {@link wrapT} - * @defaultValue `new THREE.Vector2( 1, 1 )` - */ - repeat: Vector2; - - /** - * The point around which rotation occurs. - * @remarks A value of `(0.5, 0.5)` corresponds to the center of the texture. - * @defaultValue `new THREE.Vector2( 0, 0 )`, _lower left._ - */ - center: Vector2; - - /** - * How much the texture is rotated around the center point, in radians. - * @remarks Positive values are counter-clockwise. - * @defaultValue `0` - */ - rotation: number; - - /** - * Whether to generate mipmaps, _(if possible)_ for a texture. - * @remarks Set this to false if you are creating mipmaps manually. - * @defaultValue true - */ - generateMipmaps: boolean; - - /** - * If set to `true`, the alpha channel, if present, is multiplied into the color channels when the texture is uploaded to the GPU. - * @remarks - * Note that this property has no effect for {@link https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap | ImageBitmap}. - * You need to configure on bitmap creation instead. See {@link THREE.ImageBitmapLoader | ImageBitmapLoader}. - * @see {@link THREE.ImageBitmapLoader | ImageBitmapLoader}. - * @defaultValue `false` - */ - premultiplyAlpha: boolean; - - /** - * If set to `true`, the texture is flipped along the vertical axis when uploaded to the GPU. - * @remarks - * Note that this property has no effect for {@link https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap | ImageBitmap}. - * You need to configure on bitmap creation instead. See {@link THREE.ImageBitmapLoader | ImageBitmapLoader}. - * @see {@link THREE.ImageBitmapLoader | ImageBitmapLoader}. - * @defaultValue `true` - */ - flipY: boolean; - - /** - * Specifies the alignment requirements for the start of each pixel row in memory. - * @remarks - * The allowable values are: - * - `1` (byte-alignment) - * - `2` (rows aligned to even-numbered bytes) - * - `4` (word-alignment) - * - `8` (rows start on double-word boundaries). - * @see {@link http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml | glPixelStorei} for more information. - * @defaultValue `4` - */ - unpackAlignment: number; // TODO Fix typing to only allow the expected values. - - /** - * The {@link Textures | {@link Texture} constants} page for details of other color spaces. - * @remarks - * Textures containing color data should be annotated with {@link SRGBColorSpace THREE.SRGBColorSpace} or - * {@link LinearSRGBColorSpace THREE.LinearSRGBColorSpace}. - * @see {@link https://threejs.org/docs/index.html#api/en/constants/Textures | Texture Constants} - * @see {@link THREE.TextureDataType} - * @defaultValue {@link THREE.NoColorSpace} - */ - colorSpace: ColorSpace; - - /** - * Indicates whether a texture belongs to a render target or not - * @defaultValue `false` - */ - isRenderTargetTexture: boolean; - - /** - * An object that can be used to store custom data about the texture. - * @remarks It should not hold references to functions as these will not be cloned. - * @defaultValue `{}` - */ - userData: Record; - - /** - * This starts at `0` and counts how many times {@link needsUpdate | .needsUpdate} is set to `true`. - * @remarks Expects a `Integer` - * @defaultValue `0` - */ - version: number; - - /** - * Indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target - * textures) - */ - pmremVersion: number; - - /** - * Set this to `true` to trigger an update next time the texture is used. Particularly important for setting the wrap mode. - */ - set needsUpdate(value: boolean); - - /** - * Indicates whether this texture should be processed by {@link THREE.PMREMGenerator} or not. - * @remarks Only relevant for render target textures. - * @defaultValue `false` - */ - set needsPMREMUpdate(value: boolean); - - /** - * The Global default value for {@link anisotropy | .anisotropy}. - * @defaultValue `1`. - */ - static DEFAULT_ANISOTROPY: number; - - /** - * The Global default value for {@link Texture.image | .image}. - * @defaultValue `null`. - */ - static DEFAULT_IMAGE: any; - - /** - * The Global default value for {@link mapping | .mapping}. - * @defaultValue {@link THREE.UVMapping} - */ - static DEFAULT_MAPPING: Mapping; - - /** - * A callback function, called when the texture is updated _(e.g., when needsUpdate has been set to true and then the texture is used)_. - */ - onUpdate: () => void; - - /** - * Transform the **UV** based on the value of this texture's - * {@link offset | .offset}, - * {@link repeat | .repeat}, - * {@link wrapS | .wrapS}, - * {@link wrapT | .wrapT} and - * {@link flipY | .flipY} properties. - * @param uv - */ - transformUv(uv: Vector2): Vector2; - - /** - * Update the texture's **UV-transform** {@link matrix | .matrix} from the texture properties - * {@link offset | .offset}, - * {@link repeat | .repeat}, - * {@link rotation | .rotation} and - * {@link center | .center}. - */ - updateMatrix(): void; - - /** - * Make copy of the texture - * @remarks Note this is not a **"deep copy"**, the image is shared - * @remarks - * Besides, cloning a texture does not automatically mark it for a texture upload - * You have to set {@link needsUpdate | .needsUpdate} to `true` as soon as it's image property (the data source) is fully loaded or ready. - */ - clone(): this; - - copy(source: Texture): this; - - /** - * Convert the texture to three.js {@link https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4 | JSON Object/Scene format}. - * @param meta Optional object containing metadata. - */ - toJSON(meta?: string | {}): TextureJSON; - - /** - * Frees the GPU-related resources allocated by this instance - * @remarks Call this method whenever this instance is no longer used in your app. - */ - dispose(): void; -} diff --git a/packages/canvas-three/three/src/textures/VideoTexture.d.ts b/packages/canvas-three/three/src/textures/VideoTexture.d.ts deleted file mode 100644 index 03a0acd5e..000000000 --- a/packages/canvas-three/three/src/textures/VideoTexture.d.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { MagnificationTextureFilter, Mapping, MinificationTextureFilter, PixelFormat, TextureDataType, Wrapping } from '../constants.js'; -import { Texture } from './Texture.js'; - -/** - * Creates a texture for use with a video. - * @remarks - * Note: After the initial use of a texture, the video cannot be changed - * Instead, call {@link dispose | .dispose()} on the texture and instantiate a new one. - * @example - * ```typescript - * // assuming you have created a HTML video element with id="video" - * const video = document.getElementById('video'); - * const texture = new THREE.VideoTexture(video); - * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_materials_video | materials / video} - * @see Example: {@link https://threejs.org/examples/#webgl_materials_video_webcam | materials / video / webcam} - * @see Example: {@link https://threejs.org/examples/#webgl_video_kinect | video / kinect} - * @see Example: {@link https://threejs.org/examples/#webgl_video_panorama_equirectangular | video / panorama / equirectangular} - * @see Example: {@link https://threejs.org/examples/#webxr_vr_video | vr / video} - * @see {@link https://threejs.org/docs/index.html#api/en/textures/VideoTexture | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/textures/VideoTexture.js | Source} - */ -export class VideoTexture extends Texture { - /** - * Create a new instance of {@link VideoTexture} - * @param video The video element to use as the texture. - * @param mapping See {@link Texture.mapping | .mapping}. Default {@link THREE.Texture.DEFAULT_MAPPING} - * @param wrapS See {@link Texture.wrapS | .wrapS}. Default {@link THREE.ClampToEdgeWrapping} - * @param wrapT See {@link Texture.wrapT | .wrapT}. Default {@link THREE.ClampToEdgeWrapping} - * @param magFilter See {@link Texture.magFilter | .magFilter}. Default {@link THREE.LinearFilter} - * @param minFilter See {@link Texture.minFilter | .minFilter}. Default {@link THREE.LinearFilter} - * @param format See {@link Texture.format | .format}. Default {@link THREE.RGBAFormat} - * @param type See {@link Texture.type | .type}. Default {@link THREE.UnsignedByteType} - * @param anisotropy See {@link Texture.anisotropy | .anisotropy}. Default {@link THREE.Texture.DEFAULT_ANISOTROPY} - */ - constructor(video: HTMLVideoElement, mapping?: Mapping, wrapS?: Wrapping, wrapT?: Wrapping, magFilter?: MagnificationTextureFilter, minFilter?: MinificationTextureFilter, format?: PixelFormat, type?: TextureDataType, anisotropy?: number); - - /** - * Read-only flag to check if a given object is of type {@link VideoTexture}. - * @remarks This is a _constant_ value - * @defaultValue `true` - */ - readonly isVideoTexture: true; - - /** - * @override - * @defaultValue {@link THREE.LinearFilter} - */ - magFilter: MagnificationTextureFilter; - - /** - * @override - * @defaultValue {@link THREE.LinearFilter} - */ - minFilter: MinificationTextureFilter; - - /** - * @override - * @defaultValue `false` - */ - generateMipmaps: boolean; - - /** - * @override - * You will **not** need to set this manually here as it is handled by the {@link update | update()} method. - */ - set needsUpdate(value: boolean); - - /** - * This is called automatically and sets {@link needsUpdate | .needsUpdate } to `true` every time a new frame is available. - */ - update(): void; -} diff --git a/packages/canvas-three/three/src/textures/types.d.ts b/packages/canvas-three/three/src/textures/types.d.ts deleted file mode 100644 index b5df47805..000000000 --- a/packages/canvas-three/three/src/textures/types.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface TextureImageData { - data: Uint8Array | Uint8ClampedArray; - height: number; - width: number; -} - -export interface Texture3DImageData extends TextureImageData { - depth: number; -} diff --git a/packages/canvas-three/three/src/utils.d.ts b/packages/canvas-three/three/src/utils.d.ts deleted file mode 100644 index 3fda1cfda..000000000 --- a/packages/canvas-three/three/src/utils.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function createCanvasElement(): HTMLCanvasElement; - -export function probeAsync(gl: WebGLRenderingContext, sync: WebGLSync, interval: number): Promise; diff --git a/packages/canvas-three/three/three.webgpu.d.ts b/packages/canvas-three/three/three.webgpu.d.ts deleted file mode 100644 index 17ab4c3d7..000000000 --- a/packages/canvas-three/three/three.webgpu.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './src/Three.WebGPU.js'; diff --git a/packages/canvas/Canvas/common.ts b/packages/canvas/Canvas/common.ts index 2f19b069a..21fffdc02 100644 --- a/packages/canvas/Canvas/common.ts +++ b/packages/canvas/Canvas/common.ts @@ -1,5 +1,5 @@ -import { CSSType, View, Property, booleanConverter, widthProperty, heightProperty } from '@nativescript/core'; -import { CanvasRenderingContext } from '../common'; +import { CSSType, View, Property, booleanConverter } from '@nativescript/core'; +import type { CanvasRenderingContext } from '../common'; import { removeItemFromArray } from './utils'; export interface ICanvasBase { @@ -561,9 +561,10 @@ export abstract class CanvasBase extends View implements ICanvasBase { button: -1, }); - for (const callback of this._mouseMoveCallbacks) { - callback(event); - } + // todo emit mousemove when desktop is supported + // for (const callback of this._mouseMoveCallbacks) { + // callback(event); + // } } if (index > -1) { @@ -668,9 +669,10 @@ export abstract class CanvasBase extends View implements ICanvasBase { pageY: y, }); - for (const callback of this._mouseUpCallbacks) { - callback(event); - } + // todo emit mouseup when desktop is supported + // for (const callback of this._mouseUpCallbacks) { + // callback(event); + // } } const index = this._lastPointerEventById.findIndex((item) => { @@ -751,9 +753,10 @@ export abstract class CanvasBase extends View implements ICanvasBase { pageY: y, }); - for (const callback of this._mouseDownCallbacks) { - callback(event); - } + // todo emit mousedown when desktop is supported + // for (const callback of this._mouseDownCallbacks) { + // callback(event); + // } } this._lastPointerEventById.push({ pointerId, x, y }); @@ -819,9 +822,10 @@ export abstract class CanvasBase extends View implements ICanvasBase { pageY: y, }); - for (const callback of this._mouseCancelCallbacks) { - callback(event); - } + // todo emit mouseout when desktop is supported + // for (const callback of this._mouseCancelCallbacks) { + // callback(event); + // } } } @@ -906,9 +910,10 @@ export abstract class CanvasBase extends View implements ICanvasBase { button: -1, }); - for (const callback of this._mouseMoveCallbacks) { - callback(event); - } + // todo emit mousemove when desktop is supported + // for (const callback of this._mouseMoveCallbacks) { + // callback(event); + // } } if (hasMouseWheel) { @@ -919,9 +924,10 @@ export abstract class CanvasBase extends View implements ICanvasBase { deltaMode: data.deltaMode, }); - for (const callback of this._mouseWheelCallbacks) { - callback(event); - } + // todo emit wheel when desktop is supported + // for (const callback of this._mouseWheelCallbacks) { + // callback(event); + // } } if (index > -1) { diff --git a/packages/canvas/Canvas/index.android.ts b/packages/canvas/Canvas/index.android.ts index 544198901..dded65431 100644 --- a/packages/canvas/Canvas/index.android.ts +++ b/packages/canvas/Canvas/index.android.ts @@ -26,7 +26,7 @@ const defaultOpts = { xrCompatible: false, }; -declare const org; +// declare const org; enum ContextType { None, @@ -71,7 +71,7 @@ function updateFit(canvas) { // canvas._canvas.setFit(org.nativescript.canvas.CanvasFit.None); // canvas._canvas.getMeasuredHeight() } else { - canvas._canvas.setFit(org.nativescript.canvas.CanvasFit.Fill); + canvas._canvas.setFit(org.nativescript.canvas.CanvasFit.FitX); } } @@ -93,7 +93,7 @@ export class Canvas extends CanvasBase { private _webglContext: WebGLRenderingContext; private _webgl2Context: WebGL2RenderingContext; private _gpuContext: GPUCanvasContext; - private _canvas; + private _canvas: org.nativescript.canvas.NSCCanvas; private _didPause: boolean = false; private _contextType = ContextType.None; @@ -115,10 +115,6 @@ export class Canvas extends CanvasBase { this._canvas = new org.nativescript.canvas.NSCCanvas(activity); } - // // default canvas size - // this._canvas.setSurfaceWidth(300); - // this._canvas.setSurfaceHeight(150); - (global as any).__canvasLoaded = true; const ref = new WeakRef(this); this._canvas.setTouchEventListener( @@ -135,6 +131,14 @@ export class Canvas extends CanvasBase { } } + static get forceGL() { + return org.nativescript.canvas.NSCCanvas.getForceGL(); + } + + static set forceGL(value) { + org.nativescript.canvas.NSCCanvas.setForceGL(value); + } + [ignoreTouchEventsProperty.setNative](value: boolean) { this._canvas.setIgnoreTouchEvents(value); } @@ -145,11 +149,19 @@ export class Canvas extends CanvasBase { } get clientWidth() { - return this.getMeasuredWidth() / Screen.mainScreen.scale; + const width = this.getMeasuredWidth(); + if (width === 0) { + return 0; + } + return width / Screen.mainScreen.scale; } get clientHeight() { - return this.getMeasuredHeight() / Screen.mainScreen.scale; + const height = this.getMeasuredHeight(); + if (height === 0) { + return 0; + } + return height / Screen.mainScreen.scale; } get drawingBufferHeight() { @@ -248,7 +260,6 @@ export class Canvas extends CanvasBase { if (!view[viewRect_]) { view[viewRect_] = new Float32Array(8); } - if (!nativeView) { return new DOMRect(0, 0, 0, 0); } @@ -276,6 +287,8 @@ export class Canvas extends CanvasBase { } }, surfaceResize(width, height) {}, + surfaceDestroyed() {}, + surfaceCreated() {}, }) ); } @@ -290,6 +303,15 @@ export class Canvas extends CanvasBase { if (this.width === 0 || this.height === 0) { return 'data:,'; } + + if (!this.native) { + return (this._canvas)?.toDataURL?.(type, encoderOptions); + } + + if (this._contextType === ContextType.WebGPU) { + return this._gpuContext.__toDataURL(type, encoderOptions); + } + return this.native.__toDataURL(type, encoderOptions); } @@ -326,6 +348,7 @@ export class Canvas extends CanvasBase { if (!this._canvas) { return null; } + if (typeof type === 'string') { if (type === '2d') { if (this._webglContext || this._webgl2Context) { @@ -339,7 +362,7 @@ export class Canvas extends CanvasBase { fontColor: this.parent?.style?.color?.android ?? -16777216, }; - const ctx = this._canvas.create2DContext(opts.alpha, opts.antialias, opts.depth, opts.failIfMajorPerformanceCaveat, opts.powerPreference, opts.premultipliedAlpha, opts.preserveDrawingBuffer, opts.stencil, opts.desynchronized, opts.xrCompatible, opts.fontColor); + const ctx = this._canvas.create2DContext(opts.alpha, opts.antialias, opts.depth, opts.failIfMajorPerformanceCaveat, opts.powerPreference, opts.premultipliedAlpha, opts.preserveDrawingBuffer, opts.stencil, opts.desynchronized, opts.xrCompatible); this._2dContext = new (CanvasRenderingContext2D as any)(ctx); (this._2dContext as any)._canvas = this; this._2dContext._type = '2d'; @@ -360,7 +383,6 @@ export class Canvas extends CanvasBase { this._webglContext._type = 'webgl'; this._contextType = ContextType.WebGL; } - return this._webglContext; } else if (type === 'webgl2' || type === 'experimental-webgl2') { if (this._2dContext || this._webglContext) { @@ -370,7 +392,6 @@ export class Canvas extends CanvasBase { const opts = { version: 2, ...defaultOpts, ...handleContextOptions(type, contextAttributes) }; this._canvas.initContext(type, opts.alpha, false, opts.depth, opts.failIfMajorPerformanceCaveat, opts.powerPreference, opts.premultipliedAlpha, opts.preserveDrawingBuffer, opts.stencil, opts.desynchronized, opts.xrCompatible); this._webgl2Context = new (WebGL2RenderingContext as any)(this._canvas, opts); - (this._webgl2Context as any)._canvas = this; (this._webgl2Context as any)._type = 'webgl2'; this._contextType = ContextType.WebGL2; @@ -380,13 +401,10 @@ export class Canvas extends CanvasBase { if (this._2dContext || this._webglContext || this._webgl2Context) { return null; } - if (!this._gpuContext) { const ptr = navigator.gpu.native.__getPointer(); this._canvas.initWebGPUContext(long(ptr)); - this._gpuContext = new (GPUCanvasContext as any)(this._canvas); - (this._gpuContext as any)._canvas = this; (this._gpuContext as any)._type = 'webgpu'; this._contextType = ContextType.WebGPU; @@ -402,7 +420,7 @@ export class Canvas extends CanvasBase { private get _boundingClientRect() { if (this._jsBuffer === undefined) { this._jsBuffer = new Float32Array(8); - this._canvas?.setBoundsBuffer?.(this._jsBuffer); + this._canvas?.setBoundsBuffer?.(this._jsBuffer as never); } return this._jsBuffer; } diff --git a/packages/canvas/Canvas/index.d.ts b/packages/canvas/Canvas/index.d.ts index 21ecbf8e9..73b2b5425 100644 --- a/packages/canvas/Canvas/index.d.ts +++ b/packages/canvas/Canvas/index.d.ts @@ -41,6 +41,8 @@ export declare class Canvas extends CanvasBase { static useSurface: boolean; + static forceGL: boolean; + static createCustomView(): Canvas; createNativeView(): any; diff --git a/packages/canvas/Canvas/index.ios.ts b/packages/canvas/Canvas/index.ios.ts index c311221ea..523b3642f 100644 --- a/packages/canvas/Canvas/index.ios.ts +++ b/packages/canvas/Canvas/index.ios.ts @@ -66,6 +66,7 @@ export class Canvas extends CanvasBase { constructor(nativeInstance?) { super(); + NSCCanvas.forceGL = false; if (nativeInstance) { // allows Worker usage this._canvas = nativeInstance; @@ -99,10 +100,6 @@ export class Canvas extends CanvasBase { this.native.__stopRaf(); }; - // default canvas size - this._canvas.surfaceWidth = 300; - this._canvas.surfaceHeight = 150; - (global as any).__canvasLoaded = true; this._canvas.becomeActiveListener = () => { @@ -118,6 +115,14 @@ export class Canvas extends CanvasBase { } } + static get forceGL() { + return NSCCanvas.forceGL; + } + + static set forceGL(value) { + NSCCanvas.forceGL = value; + } + [ignoreTouchEventsProperty.setNative](value: boolean) { this._canvas.ignoreTouchEvents = value; } @@ -128,11 +133,11 @@ export class Canvas extends CanvasBase { } get clientWidth() { - return this.getMeasuredWidth() / Screen.mainScreen.scale; + return Math.floor(this.getMeasuredWidth() / Screen.mainScreen.scale); } get clientHeight() { - return this.getMeasuredHeight() / Screen.mainScreen.scale; + return Math.floor(this.getMeasuredHeight() / Screen.mainScreen.scale); } get drawingBufferHeight() { @@ -158,9 +163,6 @@ export class Canvas extends CanvasBase { } set width(value: number) { - if (value === undefined || value === null) { - return; - } if (this._canvas === undefined || this._canvas === null) { return; } @@ -169,6 +171,8 @@ export class Canvas extends CanvasBase { if (!Number.isNaN(value)) { const newValue = Math.floor(value); this._canvas.surfaceWidth = newValue; + const { fit, transform } = this._getFit(this._canvas.frame); + this._updateScale(fit, transform ?? CATransform3DIdentity); } } @@ -181,9 +185,6 @@ export class Canvas extends CanvasBase { } set height(value: number) { - if (value === undefined || value === null) { - return; - } if (this._canvas === undefined || this._canvas === null) { return; } @@ -192,6 +193,8 @@ export class Canvas extends CanvasBase { if (!Number.isNaN(value)) { const newValue = Math.floor(value); this._canvas.surfaceHeight = newValue; + const { fit, transform } = this._getFit(this._canvas.frame); + this._updateScale(fit, transform ?? CATransform3DIdentity); } } @@ -228,12 +231,12 @@ export class Canvas extends CanvasBase { Object.defineProperties(this.parent, { clientWidth: { get: function () { - return this.getMeasuredWidth() / Screen.mainScreen.scale; + return Math.floor(this.getMeasuredWidth() / Screen.mainScreen.scale); }, }, clientHeight: { get: function () { - return this.getMeasuredHeight() / Screen.mainScreen.scale; + return Math.floor(this.getMeasuredHeight() / Screen.mainScreen.scale); }, }, }); @@ -289,53 +292,104 @@ export class Canvas extends CanvasBase { super.disposeNativeView(); } - _setNativeViewFrame(nativeView: any, frame: CGRect): void { + _getFit(frame: CGRect): { fit: number; frame: CGRect; transform?: CATransform3D } { const styleWidth = this.style.width; const styleHeight = this.style.height; + let fit = 1; + let newFrame = frame; + if (typeof styleWidth === 'object' && typeof styleHeight === 'object') { if (styleWidth?.unit === '%' && styleWidth.value >= 1 && styleHeight?.unit === '%' && styleHeight.value >= 1) { - // const width = Math.floor(this._canvas.surfaceWidth / Screen.mainScreen.scale); - //const height = Math.floor(this._canvas.surfaceHeight / Screen.mainScreen.scale); - nativeView.fit = 1; - // nativeView.frame = frame; + fit = 1; } else if ((styleWidth?.unit === 'px' || styleWidth?.unit === 'dip') && (styleHeight?.unit === 'px' || styleHeight?.unit === 'dip')) { const width = Math.floor(this._canvas.surfaceWidth / Screen.mainScreen.scale); const height = Math.floor(this._canvas.surfaceHeight / Screen.mainScreen.scale); if (frame.size.width > width || frame.size.height > height) { - nativeView.fit = 4; + fit = 4; } else { - nativeView.fit = 1; + fit = 1; } - - // nativeView.frame = frame; } else { - nativeView.fit = 1; - // nativeView.frame = frame; + fit = 1; } } else if (typeof styleWidth === 'object' && styleHeight === 'auto') { if (styleWidth?.unit === 'px' || styleWidth?.unit === 'dip' || styleWidth?.unit === '%') { - nativeView.fit = 2; - // nativeView.frame = frame; + fit = 2; } } else if (styleWidth === 'auto' && typeof styleHeight === 'object') { if (styleHeight?.unit === 'px' || styleHeight?.unit === 'dip' || styleHeight?.unit === '%') { - nativeView.fit = 3; - // nativeView.frame = frame; + fit = 3; } } else if (styleWidth === 'auto' && styleHeight === 'auto') { // when auto/auto is set force the frame size to be the same as the canvas const width = Math.floor(this._canvas.surfaceWidth / Screen.mainScreen.scale); const height = Math.floor(this._canvas.surfaceHeight / Screen.mainScreen.scale); - const newFrame = CGRectMake(frame.origin.x, frame.origin.y, width, height); - nativeView.fit = 0; - //nativeView.frame = newFrame; - frame = newFrame; + newFrame = CGRectMake(frame.origin.x, frame.origin.y, width, height); + fit = 0; } else { - // nativeView.frame = frame; + fit = 1; + } + + let transform: CATransform3D | undefined; + + const scaledInternalWidth = Math.floor(this._canvas.surfaceWidth / Screen.mainScreen.scale); + const scaledInternalHeight = Math.floor(this._canvas.surfaceHeight / Screen.mainScreen.scale); + + let scaleX = frame.size.width / scaledInternalWidth; + let scaleY = frame.size.height / scaledInternalHeight; + + switch (fit) { + case 0: + transform = CATransform3DIdentity; + break; + case 1: + transform = CATransform3DMakeScale(scaleX, scaleY, 0); + break; + case 2: + { + const dx = (frame.size.width - scaledInternalWidth) / 2; + const dy = (scaledInternalHeight * scaleX - scaledInternalHeight) / 2; + + transform = CATransform3DMakeScale(scaleX, scaleX, 0); + + transform = CATransform3DConcat(transform, CATransform3DMakeTranslation(dx, dy, 0)); + } + break; + case 3: + { + const dx = (scaledInternalWidth * scaleY - scaledInternalWidth) / 2; + const dy = (frame.size.height - scaledInternalHeight) / 2; + + transform = CATransform3DMakeScale(scaleY, scaleY, 0); + + transform = CATransform3DConcat(transform, CATransform3DMakeTranslation(dx, dy, 0)); + } + break; + case 4: + { + const scale = Math.min(Math.min(scaleX, scaleY), 1); + + transform = CATransform3DMakeScale(scale, scale, 1); + } + break; } + return { fit, frame: newFrame, transform }; + } + + _updateScale(fit: number, transform: CATransform3D) { + CATransaction.begin(); + CATransaction.setDisableActions(true); + this._canvas.subviews.objectAtIndex(0).layer.transform = transform; + this._canvas.subviews.objectAtIndex(1).layer.transform = transform; + CATransaction.commit(); + } + + _setNativeViewFrame(nativeView: any, currentFrame: CGRect): void { + const { fit, frame, transform } = this._getFit(currentFrame); super._setNativeViewFrame(nativeView, frame); + this._updateScale(fit, transform ?? CATransform3DIdentity); } getContext(type: string, options?: any): CanvasRenderingContext2D | WebGLRenderingContext | WebGL2RenderingContext | GPUCanvasContext | null { @@ -428,7 +482,7 @@ export class Canvas extends CanvasBase { case ContextType.WebGL2: return this._webgl2Context.native; case ContextType.WebGPU: - return this._gpuContext; + return this._gpuContext.native; default: return null; } @@ -442,6 +496,12 @@ export class Canvas extends CanvasBase { if (this.width === 0 || this.height === 0) { return 'data:,'; } + if (!this.native) { + return this._canvas.toDataURL(type, encoderOptions); + } + if (this._contextType === ContextType.WebGPU) { + return this._gpuContext.__toDataURL(type, encoderOptions); + } return this.native?.__toDataURL?.(type, encoderOptions); } diff --git a/packages/canvas/Canvas/utils.ts b/packages/canvas/Canvas/utils.ts index be78e4c5e..4d54c3460 100644 --- a/packages/canvas/Canvas/utils.ts +++ b/packages/canvas/Canvas/utils.ts @@ -14,7 +14,7 @@ const defaultGLOptions = { const default2DOptions = { alpha: true, antialias: true, - depth: true, + depth: false, failIfMajorPerformanceCaveat: false, powerPreference: 'default', premultipliedAlpha: true, @@ -64,7 +64,7 @@ export function handleContextOptions(type: '2d' | 'webgl' | 'webgl2' | 'experime glOptions[prop] = value; } }; - if (type.indexOf('webgl') > -1 || type === 'experimental-webgl') { + if (type.indexOf('webgl') > -1) { setIfDefined('alpha', contextAttributes.alpha); setIfDefined('antialias', contextAttributes.antialias); setIfDefined('depth', contextAttributes.depth); diff --git a/packages/canvas/Canvas2D/CanvasRenderingContext2D/index.ts b/packages/canvas/Canvas2D/CanvasRenderingContext2D/index.ts index 3767a2e94..a8c2e38f6 100644 --- a/packages/canvas/Canvas2D/CanvasRenderingContext2D/index.ts +++ b/packages/canvas/Canvas2D/CanvasRenderingContext2D/index.ts @@ -9,7 +9,7 @@ import { Canvas } from '../../Canvas'; import { Helpers } from '../../helpers'; import { DOMMatrix } from '../DOMMatrix'; -let ctor; +import type { CanvasRenderingContext } from '../../common'; declare const NSCCanvasRenderingContext2D; function ruleToEnum(rule: string): number { @@ -154,21 +154,19 @@ function drawNativeImage(args: any[], image, context: any) { } } -export class CanvasRenderingContext2D { +export class CanvasRenderingContext2D implements CanvasRenderingContext { public static isDebug = true; private context; private contextPtr: any; _type: string; static { Helpers.initialize(); - //ctor = global.CanvasJSIModule.create2DContext; - ctor = global.CanvasModule.create2DContextWithPointer; } constructor(context: any, contextOptions) { this.contextPtr = context; const ctxPtr = BigInt(context.toString()); - this.context = ctor(ctxPtr); + this.context = global.CanvasModule.create2DContextWithPointer(ctxPtr); this._type = '2d'; } diff --git a/packages/canvas/ImageAsset/index.ts b/packages/canvas/ImageAsset/index.ts index 72e241418..fd639f43b 100644 --- a/packages/canvas/ImageAsset/index.ts +++ b/packages/canvas/ImageAsset/index.ts @@ -214,19 +214,93 @@ export class ImageAsset extends Observable { */ - loadFromBytesSync(bytes: Uint8Array | Uint8ClampedArray) { - return this.native.fromBytesSync(bytes); + loadFromEncodedBytesSync(bytes: Uint8Array | Uint8ClampedArray) { + return this.native.fromEncodedBytesSync(bytes); } - loadFromBytes(bytes: Uint8Array | Uint8ClampedArray) { + loadFromEncodedBytes(bytes: Uint8Array | Uint8ClampedArray) { return new Promise((resolve, reject) => { if (__ANDROID__) { const ref = new WeakRef(this); const asset = this._android.getAsset(); if (!ArrayBuffer.isView(bytes)) { + (org).nativescript.canvas.NSCImageAsset.loadImageFromEncodedBytesAsync( + asset, + bytes, + new (org).nativescript.canvas.NSCImageAsset.Callback({ + onComplete(success) { + const owner = ref.get(); + if (!success) { + const error = (org).nativescript.canvas.NSCImageAsset.getError(asset); + if (owner) { + owner.emitComplete(success, error); + } + reject(error); + } else { + if (owner) { + owner.emitComplete(success, undefined); + } + resolve(success); + } + }, + }) + ); + } else { + (org).nativescript.canvas.NSCImageAsset.loadImageFromEncodedBufferAsync( + asset, + bytes, + new (org).nativescript.canvas.NSCImageAsset.Callback({ + onComplete(success) { + const owner = ref.get(); + if (!success) { + const error = (org).nativescript.canvas.NSCImageAsset.getError(asset); + if (owner) { + owner.emitComplete(success, error); + } + reject(error); + } else { + if (owner) { + owner.emitComplete(success, undefined); + } + resolve(success); + } + }, + }) + ); + } + return; + } + + this._incrementStrongRef(); + this.native.fromEncodedBytesCb(bytes, (success, error) => { + this.emitComplete(success, error); + if (error) { + reject(error); + } else { + resolve(success); + } + + this._decrementStrongRefAndRemove(); + }); + }); + } + + loadFromBytesSync(width: number, height: number, bytes: Uint8Array | Uint8ClampedArray) { + return this.native.fromBytesSync(width, height, bytes); + } + + loadFromBytes(width: number, height: number, bytes: Uint8Array | Uint8ClampedArray) { + return new Promise((resolve, reject) => { + if (__ANDROID__) { + const ref = new WeakRef(this); + const asset = this._android.getAsset(); + + if (Array.isArray(bytes)) { (org).nativescript.canvas.NSCImageAsset.loadImageFromBytesAsync( asset, + width, + height, bytes, new (org).nativescript.canvas.NSCImageAsset.Callback({ onComplete(success) { @@ -247,9 +321,18 @@ export class ImageAsset extends Observable { }) ); } else { + let buffer: ArrayBuffer = bytes as never; + if (ArrayBuffer.isView(bytes)) { + buffer = bytes.buffer; + } else if (buffer && 'nativeObject' in buffer) { + buffer = buffer.nativeObject as never; + } + (org).nativescript.canvas.NSCImageAsset.loadImageFromBufferAsync( asset, - bytes, + width, + height, + buffer, new (org).nativescript.canvas.NSCImageAsset.Callback({ onComplete(success) { const owner = ref.get(); @@ -273,7 +356,7 @@ export class ImageAsset extends Observable { } this._incrementStrongRef(); - this.native.fromBytesCb(bytes, (success, error) => { + this.native.fromBytesCb(width, height, bytes, (success, error) => { this.emitComplete(success, error); if (error) { reject(error); diff --git a/packages/canvas/WebGL/WebGLRenderingContext/common.ts b/packages/canvas/WebGL/WebGLRenderingContext/common.ts index 944d00a85..4e3f52a6f 100644 --- a/packages/canvas/WebGL/WebGLRenderingContext/common.ts +++ b/packages/canvas/WebGL/WebGLRenderingContext/common.ts @@ -1,4 +1,4 @@ -import { CanvasRenderingContext } from '../../common'; +import type { CanvasRenderingContext } from '../../common'; import { WebGLShader } from '../WebGLShader'; import { WebGLFramebuffer } from '../WebGLFramebuffer'; import { WebGLTexture } from '../WebGLTexture'; diff --git a/packages/canvas/WebGL/WebGLRenderingContext/index.ts b/packages/canvas/WebGL/WebGLRenderingContext/index.ts index 9c48f1e68..59683f19f 100644 --- a/packages/canvas/WebGL/WebGLRenderingContext/index.ts +++ b/packages/canvas/WebGL/WebGLRenderingContext/index.ts @@ -65,7 +65,7 @@ export class WebGLRenderingContextBase extends WebGLRenderingCommon { if (contextOptions) { let nativeContext = '0'; if (global.isAndroid) { - nativeContext = context.getNativeContext().toString(); + nativeContext = context.getNativeContextString(); } if (global.isIOS) { @@ -850,7 +850,7 @@ export class WebGLRenderingContextBase extends WebGLRenderingCommon { } else if (pixels && typeof pixels.tagName === 'string' && (pixels.tagName === 'IMG' || pixels.tagName === 'IMAGE')) { const isSVG = !!pixels?._svg; if (!isSVG && pixels._asset instanceof ImageAsset) { - this.native.texImage2D(target, level, internalformat, width, height, pixels._asset.native); + this.native.texImage2D(target, level, internalformat, width, height, border, format, type, pixels._asset.native); } else if (pixels._imageSource instanceof ImageSource) { if (global.isAndroid) { (org).nativescript.canvas.NSCWebGLRenderingContext.texImage2D(java.lang.Long.valueOf(this._contextPtr), target, level, internalformat, width, height, pixels._imageSource.android, this.native.__flipY); @@ -881,9 +881,9 @@ export class WebGLRenderingContextBase extends WebGLRenderingCommon { } } } else if (pixels && typeof pixels.tagName === 'string' && pixels.tagName === 'CANVAS' && pixels._canvas instanceof Canvas) { - this.native.texImage2D(target, level, internalformat, width, height, pixels._canvas.native); + this.native.texImage2D(target, level, internalformat, width, height, border, format, type, pixels._canvas.native); } else if (pixels instanceof ImageData) { - this.native.texImage2D(target, level, internalformat, width, height, (pixels).native); + this.native.texImage2D(target, level, internalformat, width, height, border, format, type, (pixels).native); } else { this.native.texImage2D(target, level, internalformat, width, height, border, format, type, pixels); } @@ -941,6 +941,7 @@ export class WebGLRenderingContextBase extends WebGLRenderingCommon { } } } else if (border && typeof border.tagName === 'string' && border.tagName === 'CANVAS' && border._canvas instanceof Canvas) { + console.log('border._canvas', border._canvas); this.native.texImage2D(target, level, internalformat, width, height, border._canvas.native); } else if (border instanceof ImageData) { this.native.texImage2D(target, level, internalformat, width, height, (border).native); @@ -965,7 +966,6 @@ export class WebGLRenderingContextBase extends WebGLRenderingCommon { @profile texSubImage2D(target: any, level: any, xoffset: any, yoffset: any, width: any, height: any, format: any, type?: any, pixels?: any) { const length = arguments.length; - if (length === 9) { this.native.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); } else if (length === 7) { diff --git a/packages/canvas/WebGL2/WebGL2RenderingContext/index.ts b/packages/canvas/WebGL2/WebGL2RenderingContext/index.ts index 9cc67e4b6..a5d010b3e 100644 --- a/packages/canvas/WebGL2/WebGL2RenderingContext/index.ts +++ b/packages/canvas/WebGL2/WebGL2RenderingContext/index.ts @@ -32,7 +32,7 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase { super(null); let nativeContext = '0'; if (global.isAndroid) { - nativeContext = context.getNativeContext().toString(); + nativeContext = context.getNativeContextString(); } if (global.isIOS) { @@ -49,6 +49,7 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase { } const native = global.CanvasModule.createWebGL2Context(contextOptions, ctx, Screen.mainScreen.scale, -16777216, Screen.mainScreen.scale * 160, direction); + this._context = native; this._contextPtr = nativeContext; } diff --git a/packages/canvas/WebGPU/GPUCanvasContext.ts b/packages/canvas/WebGPU/GPUCanvasContext.ts index 666b9f5c8..4f1aee982 100644 --- a/packages/canvas/WebGPU/GPUCanvasContext.ts +++ b/packages/canvas/WebGPU/GPUCanvasContext.ts @@ -4,9 +4,14 @@ import type { GPUDevice } from './GPUDevice'; import { GPUTexture } from './GPUTexture'; import type { GPUAdapter } from './GPUAdapter'; import type { GPUCanvasAlphaMode, GPUCanvasPresentMode, GPUExtent3D, GPUTextureFormat } from './Types'; -export class GPUCanvasContext { +import type { CanvasRenderingContext } from '../common'; +import { GPU } from './GPU'; +import type { Canvas } from '../Canvas'; +const device_ = Symbol('[[device]]'); +export class GPUCanvasContext implements CanvasRenderingContext { _type; - _canvas: any; + _canvas: Canvas; + [device_]: GPUDevice; static { Helpers.initialize(); } @@ -98,6 +103,27 @@ export class GPUCanvasContext { console.warn(`GPUCanvasContext: configure format ${options.format} unsupported falling back to ${opts.format}`); } + // always force copy_src and copy_dst + switch (typeof opts.usage) { + case 'number': + { + const has_copy_src = (opts.usage & GPUTextureUsage.COPY_SRC) !== 0; + const has_copy_dst = (opts.usage & GPUTextureUsage.COPY_DST) !== 0; + if (!has_copy_dst && !has_copy_src) { + opts.usage = opts.usage | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST; + } else if (!has_copy_dst) { + opts.usage = opts.usage | GPUTextureUsage.COPY_DST; + } else if (!has_copy_src) { + opts.usage = opts.usage | GPUTextureUsage.COPY_SRC; + } + } + break; + default: + opts.usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST; + + break; + } + if (__IOS__ && opts.usage > capabilities.usages) { opts.usage = capabilities.usages; console.warn(`GPUCanvasContext: configure usage unsupported falling back to ${capabilities.usages}`); @@ -105,6 +131,7 @@ export class GPUCanvasContext { } opts.device = options?.device?.[native_]; + this[device_] = options.device; this[native_].configure(opts); } @@ -145,4 +172,11 @@ export class GPUCanvasContext { } { return this[native_].getCapabilities(adapter[native_]); } + __toDataURL(type: string, quality: number) { + if (this[device_]) { + return this.native.__toDataURL(type, quality, this[device_]?.[native_], this._currentTexture?.[native_]); + } else { + return (this.canvas)._canvas.toDataURL(type, quality); + } + } } diff --git a/packages/canvas/WebGPU/GPUDevice.ts b/packages/canvas/WebGPU/GPUDevice.ts index f7f5c5233..29f5c61cc 100644 --- a/packages/canvas/WebGPU/GPUDevice.ts +++ b/packages/canvas/WebGPU/GPUDevice.ts @@ -22,27 +22,30 @@ import { GPURenderBundleEncoder } from './GPURenderBundleEncoder'; import { GPUAdapter, GPUSupportedFeatures } from './GPUAdapter'; function fixup_shader_code(code: string) { - if (!code.includes('#storage')) { - if (code.includes('atomic_storage')) code = '#storage atomic_storage array>\n\n' + code; - if (code.includes('float_storage')) code = '#storage float_storage array>\n\n' + code; + let ret = `${code}`; + if (!ret.includes('#storage')) { + if (ret.includes('atomic_storage')) ret = '#storage atomic_storage array>\n\n' + ret; + if (ret.includes('float_storage')) ret = '#storage float_storage array>\n\n' + ret; } - code = code.replace(/@stage\(compute\)/g, '@compute'); - code = code.replace(/^type /gm, 'alias '); - code = code.replace(/^let /gm, 'const '); - code = code.replace(/alias\s+bool([2-4])\s*=\s*vec\1<\s*bool\s*>\s*;/gm, ''); - code = code.replace(/alias\s+float([2-4])x([2-4])\s*=\s*mat\1x\2<\s*f32\s*>\s*;/gm, ''); - // patch switch issue - code = code.replace(/case\s+(\d+)\s*:\s*{/g, 'case $1u: {'); + + ret = ret.replace(/@stage\(compute\)/g, '@compute'); + ret = ret.replace(/^type /gm, 'alias '); + ret = ret.replace(/^let /gm, 'const '); + ret = ret.replace(/alias\s+bool([2-4])\s*=\s*vec\1<\s*bool\s*>\s*;/gm, ''); + ret = ret.replace(/alias\s+float([2-4])x([2-4])\s*=\s*mat\1x\2<\s*f32\s*>\s*;/gm, ''); // diagnostic is unsupport atm, remove after https://github.com/gfx-rs/wgpu/pull/6148 - code = code.replace(/diagnostic\s*\([^)]*\)/g, ''); + ret = ret.replace(/diagnostic\s*\([^)]*\)/g, ''); // todo: remove after wgpu adds support for textureLoad with u32 - code = code.replace(/textureLoad\(\s*[^,]+,\s*[^,]+,\s*[^,]+,\s*0u\s*\)/g, (match) => { + ret = ret.replace(/textureLoad\(\s*[^,]+,\s*[^,]+,\s*[^,]+,\s*0u\s*\)/g, (match) => { return match.replace(/0u/, '0'); }); - return code; + // patch switch issue + ret = ret.replace(/case\s+(\d+)\s*:\s*\{/g, 'case $1u: {'); + + return ret; } // Doing so because :D @@ -314,12 +317,9 @@ export class GPUDevice extends EventTarget { createShaderModule(descriptor: { label?: string; code: string; sourceMap?: object; compilationHints?: any[] }) { const desc: { label?: string; code: string; sourceMap?: object; compilationHints?: any[] } = { + ...descriptor, code: fixup_shader_code(descriptor.code), }; - if (typeof descriptor.label === 'string') { - desc.label = descriptor.label; - } - const module = this.native.createShaderModule(desc); if (module) { return GPUShaderModule.fromNative(module); diff --git a/packages/canvas/WebGPU/GPUQueue.ts b/packages/canvas/WebGPU/GPUQueue.ts index b108f76b7..83058902e 100644 --- a/packages/canvas/WebGPU/GPUQueue.ts +++ b/packages/canvas/WebGPU/GPUQueue.ts @@ -1,3 +1,4 @@ +import { Canvas } from '../Canvas'; import { ImageAsset } from '../ImageAsset'; import { native_ } from './Constants'; import { GPUBuffer } from './GPUBuffer'; @@ -24,7 +25,6 @@ export class GPUQueue { const src: GPUImageCopyExternalImage = { source: undefined, }; - if (source.source) { if (source.source instanceof ImageBitmap) { src.source = (source.source as any).native; @@ -36,6 +36,12 @@ export class GPUQueue { if (source.source._asset instanceof ImageAsset) { src.source = source.source._asset.native; } + } else if (source.source instanceof Canvas) { + src.source = source.source.native; + } else if (typeof source.source.tagName === 'string' && source.source.tagName === 'CANVAS') { + if (source.source._canvas instanceof Canvas) { + src.source = source.source._canvas._canvas.native; + } } } diff --git a/packages/canvas/WebGPU/GPURenderPassEncoder.ts b/packages/canvas/WebGPU/GPURenderPassEncoder.ts index 7eecbd7a3..b4032bec3 100644 --- a/packages/canvas/WebGPU/GPURenderPassEncoder.ts +++ b/packages/canvas/WebGPU/GPURenderPassEncoder.ts @@ -32,6 +32,18 @@ export class GPURenderPassEncoder { this[native_].drawIndirect(indirectBuffer[native_], indirectOffset); } + multiDrawIndexed(indexCount: number, instanceCount: number = 1, firstVertex: number = 0, firstInstance: number = 0, count = 0) { + this[native_].multiDrawIndexed(indexCount, instanceCount ?? 1, firstVertex ?? 0, firstInstance ?? 0, count ?? 0); + } + + multiDrawIndexedIndirect(indirectBuffer: GPUBuffer, indirectOffset: number, count = 0) { + this[native_].multiDrawIndexedIndirect(indirectBuffer[native_], indirectOffset, count ?? 0); + } + + multiDrawIndirect(indirectBuffer: GPUBuffer, indirectOffset: number, count = 0) { + this[native_].multiDrawIndirect(indirectBuffer[native_], indirectOffset, count ?? 0); + } + end() { this[native_].end(); } diff --git a/packages/canvas/WebGPU/Utils.ts b/packages/canvas/WebGPU/Utils.ts index 2bf1b0c58..94bd59124 100644 --- a/packages/canvas/WebGPU/Utils.ts +++ b/packages/canvas/WebGPU/Utils.ts @@ -281,10 +281,12 @@ export function parseRenderPipelineDescriptor(value: GPURenderPipelineDescriptor }; if (Array.isArray(value.vertex?.buffers)) { - desc.vertex.buffers = value.vertex.buffers.map((buffer) => { - buffer.attributes = buffer.attributes.map((attr) => { - attr.format = parseVertexFormat(attr.format) as never; - return attr; + desc.vertex.buffers = [...value.vertex.buffers].map((source) => { + const buffer = { ...source }; + buffer.attributes = [...buffer.attributes].map((attr) => { + const ret = { ...attr }; + ret.format = parseVertexFormat(ret.format) as never; + return ret; }); return buffer; diff --git a/packages/canvas/common.ts b/packages/canvas/common.ts index 3905af148..0f69d0864 100644 --- a/packages/canvas/common.ts +++ b/packages/canvas/common.ts @@ -1,19 +1,5 @@ (Set as any).prototype.remove = function (value) { - this.delete(value); + this.delete(value); }; - -export interface CanvasRenderingContext { -} - - - - - - - - - - - - +export interface CanvasRenderingContext {} diff --git a/packages/canvas/index.ts b/packages/canvas/index.ts index b8d59280d..0b905a1c9 100644 --- a/packages/canvas/index.ts +++ b/packages/canvas/index.ts @@ -1,5 +1,4 @@ -import { TouchEvent, PointerEvent } from './Canvas'; -export { Canvas, createSVGMatrix, TouchEvent, PointerEvent } from './Canvas'; +import { TouchEvent, PointerEvent } from './Canvas/common'; import { TextEncoder } from './TextEncoder'; import { TextDecoder } from './TextDecoder'; @@ -134,3 +133,5 @@ export { ImageBitmap } from './ImageBitmap'; export { CanvasRenderingContext2D } from './Canvas2D/CanvasRenderingContext2D'; export { WebGLRenderingContext } from './WebGL/WebGLRenderingContext'; export { WebGL2RenderingContext } from './WebGL2/WebGL2RenderingContext'; +export { Canvas, createSVGMatrix } from './Canvas'; +export { TouchEvent, PointerEvent } from './Canvas/common'; diff --git a/packages/canvas/package.json b/packages/canvas/package.json index 5f4ddab54..0ad2035db 100644 --- a/packages/canvas/package.json +++ b/packages/canvas/package.json @@ -1,6 +1,6 @@ { "name": "@nativescript/canvas", - "version": "2.0.0-webgpu.31", + "version": "2.0.0-webgpu.42", "description": "DOM Canvas API for NativeScript", "main": "index", "typings": "index.d.ts", diff --git a/packages/canvas/platforms/android/canvas-release.aar b/packages/canvas/platforms/android/canvas-release.aar index 41786d8ca..a36404ad6 100644 Binary files a/packages/canvas/platforms/android/canvas-release.aar and b/packages/canvas/platforms/android/canvas-release.aar differ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative index 2ea074653..14490238e 100755 Binary files a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative and b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative differ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/CanvasNative-Swift.h b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/CanvasNative-Swift.h index 5b58529eb..a9dfa2409 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/CanvasNative-Swift.h +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/CanvasNative-Swift.h @@ -346,23 +346,20 @@ SWIFT_CLASS_NAMED("CanvasHelpers") + (BOOL)drawImageWithContext:(int64_t)context image:(UIImage * _Nonnull)image dx:(float)dx dy:(float)dy SWIFT_WARN_UNUSED_RESULT; + (BOOL)drawImageWithContext:(int64_t)context image:(UIImage * _Nonnull)image dx:(float)dx dy:(float)dy dw:(float)dw dh:(float)dh SWIFT_WARN_UNUSED_RESULT; + (BOOL)drawImageWithContext:(int64_t)context image:(UIImage * _Nonnull)image sx:(float)sx sy:(float)sy sw:(float)sw sh:(float)sh dx:(float)dx dy:(float)dy dw:(float)dw dh:(float)dh SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initWebGPUWithViewLayer:(int64_t)instance :(int64_t)view :(uint32_t)width :(uint32_t)height SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initWebGPUWithView:(int64_t)instance :(int64_t)view :(uint32_t)width :(uint32_t)height SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (void)resizeWebGPUWithView:(int64_t)context :(int64_t)view :(uint32_t)width :(uint32_t)height; -+ (int64_t)initGLWithView:(int64_t)view :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version :(BOOL)is_canvas SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initSharedGLWithView:(int64_t)view :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version :(BOOL)is_canvas :(int64_t)shared_context SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initGLWithWidthAndHeight:(int32_t)width :(int32_t)height :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version :(BOOL)is_canvas SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initSharedGLWidthAndHeight:(int32_t)width :(int32_t)height :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version :(BOOL)is_canvas :(int64_t)shared_context SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; ++ (int64_t)initWebGPUWithViewLayer:(int64_t)instance :(NSCCanvas * _Nonnull)view :(uint32_t)width :(uint32_t)height SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; ++ (int64_t)initWebGPUWithView:(int64_t)instance :(NSCCanvas * _Nonnull)view :(uint32_t)width :(uint32_t)height SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; ++ (void)resizeWebGPUWithView:(int64_t)context :(NSCCanvas * _Nonnull)view :(uint32_t)width :(uint32_t)height; ++ (int64_t)initWebGLWithView:(NSCCanvas * _Nonnull)view :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; ++ (int64_t)initWebGLWithWidthAndHeight:(int32_t)width :(int32_t)height :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; + (void)resize2DContext:(int64_t)context :(float)width :(float)height; + (void)flush2DContext:(int64_t)context; -+ (BOOL)flushGL:(int64_t)context SWIFT_WARN_UNUSED_RESULT; -+ (void)releaseGL:(int64_t)context; -+ (int64_t)getGLPointer:(int64_t)context SWIFT_WARN_UNUSED_RESULT; -+ (void)releaseGLPointer:(int64_t)context; -+ (int64_t)create2DContext:(int64_t)context :(int32_t)width :(int32_t)height :(BOOL)alpha :(float)density :(int32_t)samples :(int32_t)font_color :(float)ppi :(int32_t)direction SWIFT_WARN_UNUSED_RESULT; -+ (void)updateGLSurfaceWithView:(int64_t)view :(int32_t)width :(int32_t)height :(int64_t)context; -+ (void)test2D:(int64_t)context; -+ (NSString * _Nonnull)testToDataURL:(int64_t)context SWIFT_WARN_UNUSED_RESULT; ++ (void)flush2DContextAndSyncCPU:(int64_t)context; ++ (void)presentDrawable:(int64_t)context; ++ (BOOL)flushWebGL:(int64_t)context SWIFT_WARN_UNUSED_RESULT; ++ (void)releaseWebGL:(int64_t)context; ++ (int64_t)create2DContext:(NSCCanvas * _Nonnull)view :(int32_t)width :(int32_t)height :(BOOL)alpha :(float)density :(int32_t)fontColor :(float)ppi :(int32_t)direction SWIFT_WARN_UNUSED_RESULT; ++ (int64_t)create2DContextMetal:(NSCCanvas * _Nonnull)view :(BOOL)alpha :(float)density :(int32_t)fontColor :(float)ppi :(int32_t)direction SWIFT_WARN_UNUSED_RESULT; ++ (void)updateWebGLSurfaceWithView:(int64_t)view :(int32_t)width :(int32_t)height :(int64_t)context; + (void)writeFile:(NSData * _Nonnull)data :(NSString * _Nonnull)path :(void (^ _Nonnull)(NSString * _Nullable, NSString * _Nullable))callback; + (void)readFile:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSString * _Nullable, NSData * _Nullable))callback; + (void)deleteFile:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSError * _Nullable, BOOL))callback; @@ -383,26 +380,30 @@ enum CanvasFit : NSInteger; SWIFT_CLASS_NAMED("NSCCanvas") @interface NSCCanvas : UIView +SWIFT_CLASS_PROPERTY(@property (nonatomic, class) BOOL forceGL;) ++ (BOOL)forceGL SWIFT_WARN_UNUSED_RESULT; ++ (void)setForceGL:(BOOL)value; @property (nonatomic) enum CanvasFit fit; +@property (nonatomic) BOOL weblikeScale; SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) NSMutableDictionary * _Nonnull store;) + (NSMutableDictionary * _Nonnull)store SWIFT_WARN_UNUSED_RESULT; + (NSMapTable * _Nonnull)getViews SWIFT_WARN_UNUSED_RESULT; -- (void * _Nonnull)getViewPtr SWIFT_WARN_UNUSED_RESULT; +- (void * _Nonnull)getGlViewPtr SWIFT_WARN_UNUSED_RESULT; - (void * _Nonnull)getMtlViewPtr SWIFT_WARN_UNUSED_RESULT; +- (void * _Nonnull)getMtlLayerPtr SWIFT_WARN_UNUSED_RESULT; @property (nonatomic) BOOL autoScale; -@property (nonatomic, readonly) int64_t nativeGL; @property (nonatomic, readonly) int64_t nativeContext; +@property (nonatomic, readonly) BOOL is2D; @property (nonatomic, readonly) CGFloat drawingBufferWidth; @property (nonatomic, readonly) CGFloat drawingBufferHeight; @property (nonatomic, readonly) float width; @property (nonatomic, readonly) float height; +- (NSString * _Nonnull)toDataURL:(NSString * _Nonnull)format :(float)quality SWIFT_WARN_UNUSED_RESULT; - (void)initContext:(NSString * _Nonnull)type :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)failIfMajorPerformanceCaveat :(int32_t)powerPreference :(BOOL)premultipliedAlpha :(BOOL)preserveDrawingBuffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xrCompatible SWIFT_METHOD_FAMILY(none); - (void)initWebGPUContext:(int64_t)instance SWIFT_METHOD_FAMILY(none); - (int64_t)create2DContext:(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)failIfMajorPerformanceCaveat :(int32_t)powerPreference :(BOOL)premultipliedAlpha :(BOOL)preserveDrawingBuffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xrCompatible :(int32_t)fontColor SWIFT_WARN_UNUSED_RESULT; - (UIImage * _Nullable)snapshot:(BOOL)flip SWIFT_WARN_UNUSED_RESULT; - (BOOL)render; -- (void)context2DTest:(int64_t)context; -- (NSString * _Nonnull)context2DTestToDataURL:(int64_t)context SWIFT_WARN_UNUSED_RESULT; @property (nonatomic, copy) void (^ _Nullable touchEventListener)(NSString * _Nonnull, UIGestureRecognizer * _Nonnull); - (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder SWIFT_UNAVAILABLE; - (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER; @@ -411,6 +412,9 @@ SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) NSMutableDic @property (nonatomic) NSInteger surfaceWidth; @property (nonatomic) NSInteger surfaceHeight; - (void)forceLayout:(CGFloat)width :(CGFloat)height; +- (void)context2DTest:(int64_t)context; +- (void)context2DPathTest:(int64_t)context; +- (void)context2DConic:(int64_t)context; - (void)layoutSubviews; + (void)getBoundingClientRect:(UIView * _Nonnull)view :(void * _Nonnull)buffer; @end diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/CanvasNative.h b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/CanvasNative.h index 178b96920..3577b1315 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/CanvasNative.h +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/CanvasNative.h @@ -13,6 +13,7 @@ extern "C" { #import "canvas_native.h" #import "canvas_ios.h" +#import "NSCMTLView.h" //! Project version number for CanvasNative. diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/NSCMTLView.h b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/NSCMTLView.h new file mode 100644 index 000000000..3bff37bd5 --- /dev/null +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/NSCMTLView.h @@ -0,0 +1,32 @@ +// +// NSCMTLView.h +// CanvasNative +// +// Created by Osei Fortune on 08/10/2024. +// +#ifndef NSCMTLView_h +#define NSCMTLView_h + +#import +#import +#import +typedef enum { + kNone, + kPending, + kInvalidating +} NSCSurfaceState; + +@interface NSCMTLView : UIView +@property(weak, nonatomic) UIView* canvas; +@property id queue; +@property int state; +@property (nonatomic) CGSize drawableSize; +@property NSUInteger sampleCount; +-(void) present; +-(void) setup; +-(void*) getDevicePtr; +-(void*) getQueuePtr; +@end + + +#endif /* NSCMTLView_h */ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_ios.h b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_ios.h index 11d98a972..041f8a397 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_ios.h +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_ios.h @@ -8,196 +8,107 @@ #include #include -long long canvas_native_init_ios_webgpu(int64_t instance, - int64_t view, - uint32_t width, - uint32_t height); +long long canvas_native_ios_create_webgl_context(void *view, + bool alpha, + bool antialias, + bool depth, + bool fail_if_major_performance_caveat, + int32_t power_preference, + bool premultiplied_alpha, + bool preserve_drawing_buffer, + bool stencil, + bool desynchronized, + bool xr_compatible, + uint32_t version); + +bool canvas_native_ios_flush_webgl(int64_t context); -#if defined(TARGET_OS_IOS) -long long canvas_native_init_ios_webgpu_uiview(int64_t instance, - int64_t view, - uint32_t width, - uint32_t height); -#endif +void canvas_native_ios_flush_2d_context(int64_t context); -#if defined(TARGET_OS_IOS) -void canvas_native_resize_ios_webgpu_uiview(int64_t context, - int64_t view, - uint32_t width, - uint32_t height); -#endif +void canvas_native_ios_present_drawable(int64_t context); -long long canvas_native_init_ios_gl(int64_t view, - bool alpha, - bool antialias, - bool depth, - bool fail_if_major_performance_caveat, - int32_t power_preference, - bool premultiplied_alpha, - bool preserve_drawing_buffer, - bool stencil, - bool desynchronized, - bool xr_compatible, - int32_t version, - bool is_canvas); - -long long canvas_native_init_ios_gl_with_shared_gl(int64_t view, - bool alpha, - bool antialias, - bool depth, - bool fail_if_major_performance_caveat, - int32_t power_preference, - bool premultiplied_alpha, - bool preserve_drawing_buffer, - bool stencil, - bool desynchronized, - bool xr_compatible, - int32_t version, - bool is_canvas, - int64_t shared_context); - -long long canvas_native_init_offscreen_ios_gl(int32_t width, - int32_t height, - bool alpha, - bool antialias, - bool depth, - bool fail_if_major_performance_caveat, - int32_t power_preference, - bool premultiplied_alpha, - bool preserve_drawing_buffer, - bool stencil, - bool desynchronized, - bool xr_compatible, - int32_t version, - bool is_canvas); - -long long canvas_native_init_offscreen_ios_gl_with_shared_gl(int32_t width, - int32_t height, - bool alpha, - bool antialias, - bool depth, - bool fail_if_major_performance_caveat, - int32_t power_preference, - bool premultiplied_alpha, - bool preserve_drawing_buffer, - bool stencil, - bool desynchronized, - bool xr_compatible, - int32_t version, - bool is_canvas, - int64_t shared_context); - -bool canvas_native_ios_flush_gl(int64_t context); +void canvas_native_ios_flush_2d_context_and_sync_cpu(int64_t context); -void canvas_native_ios_flush_2d_context(int64_t context); +void canvas_native_ios_resize_context_2d(int64_t context, float width, float height); + +int64_t canvas_native_ios_create_2d_context(void *view, + int32_t width, + int32_t height, + bool alpha, + float density, + int32_t font_color, + float ppi, + int32_t direction); + +void canvas_native_ios_update_webgl_surface(int64_t view, + int32_t _width, + int32_t _height, + int64_t context); + +void canvas_native_ios_release_webgl(int64_t context); + +void canvas_native_ios_gl_make_current(int64_t context); -void canvas_native_resize_context_2d(int64_t context, float width, float height); - -int64_t canvas_native_create_2d_context(int64_t context, - int32_t width, - int32_t height, - bool alpha, - float density, - int32_t samples, - int32_t font_color, - float ppi, - int32_t direction); - -void canvas_native_update_gl_surface(int64_t view, int32_t width, int32_t height, int64_t context); - -void canvas_native_release_ios_gl(int64_t context); - -int64_t canvas_native_get_gl_pointer(int64_t gl_context); - -void canvas_native_release_gl_pointer(int64_t gl_context); - -void canvas_native_context_2d_test(int64_t context); - -void canvas_native_gl_make_current(int64_t gl_context); - -char *canvas_native_context_2d_test_to_data_url(int64_t context); - -void canvas_native_context_2d_destroy_string(char *string); - -bool canvas_native_imageasset_load_from_bytes(int64_t asset, uint8_t *bytes, uintptr_t size); - -int64_t canvas_native_context_create_pattern_raw(int64_t context, - int32_t width, - int32_t height, - uint8_t *bytes, - uintptr_t size, - const char *repetition); - -bool canvas_native_context_draw_image_dx_dy_with_bytes(int64_t context, - uint8_t *bytes, - uintptr_t size, - float width, - float height, - float dx, - float dy); - -bool canvas_native_context_draw_image_dx_dy_dw_dh_with_bytes(int64_t context, - uint8_t *bytes, - uintptr_t size, - float width, - float height, - float dx, - float dy, - float d_width, - float d_height); - -bool canvas_native_context_draw_image_with_bytes(int64_t context, - uint8_t *bytes, - uintptr_t size, - float width, - float height, - float sx, - float sy, - float s_width, - float s_height, - float dx, - float dy, - float d_width, - float d_height); - -void canvas_native_context_custom_with_buffer_flush(int64_t context, - uint8_t *bytes, - uintptr_t size, - float width, - float height, - bool alpha); - -long long canvas_native_context_init_context_with_custom_surface(float width, +bool canvas_native_ios_image_asset_load_from_bytes(int64_t asset, uint8_t *bytes, uintptr_t size); + +int64_t canvas_native_ios_context_create_pattern_raw(int64_t context, + int32_t width, + int32_t height, + uint8_t *bytes, + uintptr_t size, + const char *repetition); + +bool canvas_native_ios_context_draw_image_dx_dy_with_bytes(int64_t context, + uint8_t *bytes, + uintptr_t size, + float width, + float height, + float dx, + float dy); + +bool canvas_native_ios_context_draw_image_dx_dy_dw_dh_with_bytes(int64_t context, + uint8_t *bytes, + uintptr_t size, + float width, float height, - float density, - bool alpha, - int font_color, - float ppi, - int direction); - -int64_t canvas_native_context_get_texture_from_2d(int64_t context); - -uint32_t canvas_native_context_backend_texture_get_id(int64_t texture); - -void canvas_native_context_backend_texture_destroy(int64_t texture); - -void canvas_native_webgl_tex_image_2d(int64_t context, - int32_t target, - int32_t level, - int32_t internalformat, - int32_t format, - int32_t type_, - uint8_t *bytes, - uintptr_t size, - float width, - float height, - bool flip_y); - -void canvas_native_webgl_tex_sub_image_2d(int64_t context, + float dx, + float dy, + float d_width, + float d_height); + +bool canvas_native_ios_context_draw_image_with_bytes(int64_t context, + uint8_t *bytes, + uintptr_t size, + float width, + float height, + float sx, + float sy, + float s_width, + float s_height, + float dx, + float dy, + float d_width, + float d_height); + +void canvas_native_ios_context_custom_with_buffer_flush(int64_t context, + uint8_t *bytes, + uintptr_t size, + float width, + float height, + bool alpha); + +long long canvas_native_ios_context_init_context_with_custom_surface(float width, + float height, + float density, + bool alpha, + int font_color, + float ppi, + int direction); + +void canvas_native_ios_webgl_tex_image_2d(int64_t context, int32_t target, int32_t level, - int32_t xoffset, - int32_t yoffset, + int32_t internalformat, int32_t format, int32_t type_, uint8_t *bytes, @@ -206,4 +117,54 @@ void canvas_native_webgl_tex_sub_image_2d(int64_t context, float height, bool flip_y); +void canvas_native_ios_webgl_tex_sub_image_2d(int64_t context, + int32_t target, + int32_t level, + int32_t xoffset, + int32_t yoffset, + int32_t format, + int32_t type_, + uint8_t *bytes, + uintptr_t size, + float width, + float height, + bool flip_y); + +int64_t canvas_native_ios_create_2d_context_metal(void *view, + bool alpha, + float density, + uintptr_t samples, + int32_t font_color, + float ppi, + int32_t direction); + +int64_t canvas_native_ios_create_2d_context_metal_device_queue(void *view, + void *device, + void *queue, + bool alpha, + float density, + uintptr_t samples, + int32_t font_color, + float ppi, + int32_t direction); + +long long canvas_native_init_ios_webgpu(int64_t instance, + void *view, + uint32_t width, + uint32_t height); + +#if defined(TARGET_OS_MACOS) +long long canvas_native_init_ios_webgpu_nsview(int64_t instance, + void *view, + uint32_t width, + uint32_t height); +#endif + +#if defined(TARGET_OS_IOS) +void canvas_native_resize_ios_webgpu_uiview(int64_t context, + void *view, + uint32_t width, + uint32_t height); +#endif + #endif /* CANVAS_IOS_H */ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h index 5013d4e45..fa84d3dee 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h @@ -1770,6 +1770,52 @@ typedef struct CanvasOrigin2d { uint32_t y; } CanvasOrigin2d; +typedef struct CanvasImageCopyWebGL { + /** + * The texture to be copied from. The copy source data is captured at the moment + * the copy is issued. + */ + const struct WebGLState *source; + /** + * The base texel used for copying from the external image. Together + * with the `copy_size` argument to copy functions, defines the + * sub-region of the image to copy. + * + * Relative to the top left of the image. + * + * Must be [`Origin2d::ZERO`] if [`DownlevelFlags::UNRESTRICTED_EXTERNAL_TEXTURE_COPIES`] is not supported. + */ + struct CanvasOrigin2d origin; + /** + * If the Y coordinate of the image should be flipped. Even if this is + * true, `origin` is still relative to the top left. + */ + bool flip_y; +} CanvasImageCopyWebGL; + +typedef struct CanvasImageCopyCanvasRenderingContext2D { + /** + * The texture to be copied from. The copy source data is captured at the moment + * the copy is issued. + */ + const struct CanvasRenderingContext2D *source; + /** + * The base texel used for copying from the external image. Together + * with the `copy_size` argument to copy functions, defines the + * sub-region of the image to copy. + * + * Relative to the top left of the image. + * + * Must be [`Origin2d::ZERO`] if [`DownlevelFlags::UNRESTRICTED_EXTERNAL_TEXTURE_COPIES`] is not supported. + */ + struct CanvasOrigin2d origin; + /** + * If the Y coordinate of the image should be flipped. Even if this is + * true, `origin` is still relative to the top left. + */ + bool flip_y; +} CanvasImageCopyCanvasRenderingContext2D; + typedef struct CanvasImageCopyImageAsset { /** * The texture to be copied from. The copy source data is captured at the moment @@ -1840,10 +1886,21 @@ typedef struct CanvasCreateTextureViewDescriptor { const struct CanvasImageSubresourceRange *range; } CanvasCreateTextureViewDescriptor; +typedef struct FileHelperMime { + const char *mime_type; + const char *extension; +} FileHelperMime; + void canvas_native_font_add_family(const char *alias, const char *const *filenames, uintptr_t length); +void canvas_native_context_2d_test(int64_t context); + +void canvas_native_context_2d_path_test(int64_t context); + +void canvas_native_context_2d_conic_test(int64_t context); + void canvas_native_context_release(struct CanvasRenderingContext2D *value); #if (defined(TARGET_OS_ANDROID) || defined(TARGET_OS_IOS)) @@ -1879,11 +1936,10 @@ struct CanvasRenderingContext2D *canvas_native_context_create(float width, float ppi, uint32_t direction); -struct CanvasRenderingContext2D *canvas_native_context_create_gl(float width, +struct CanvasRenderingContext2D *canvas_native_context_create_gl(void *view, + float width, float height, float density, - int64_t gl_context, - int32_t samples, bool alpha, int32_t font_color, float ppi, @@ -2946,6 +3002,17 @@ void canvas_native_webgpu_buffer_map_async(const struct CanvasGPUBuffer *buffer, void (*callback)(enum CanvasGPUErrorType, char*, void*), void *callback_data); +char *canvas_native_webgpu_to_data_url(const struct CanvasGPUCanvasContext *context, + const struct CanvasGPUDevice *device, + const char *format, + uint32_t quality); + +char *canvas_native_webgpu_to_data_url_with_texture(const struct CanvasGPUCanvasContext *context, + const struct CanvasGPUDevice *device, + const struct CanvasGPUTexture *texture, + const char *format, + uint32_t quality); + #if defined(TARGET_OS_ANDROID) const struct CanvasGPUCanvasContext *canvas_native_webgpu_context_create(struct CanvasWebGPUInstance *instance, void *window, @@ -3269,6 +3336,16 @@ void canvas_native_webgpu_queue_reference(const struct CanvasGPUQueue *queue); void canvas_native_webgpu_queue_release(const struct CanvasGPUQueue *queue); +void canvas_native_webgpu_queue_copy_webgl_to_texture(const struct CanvasGPUQueue *queue, + const struct CanvasImageCopyWebGL *source, + const struct CanvasImageCopyTexture *destination, + const struct CanvasExtent3d *size); + +void canvas_native_webgpu_queue_copy_context_to_texture(const struct CanvasGPUQueue *queue, + const struct CanvasImageCopyCanvasRenderingContext2D *source, + const struct CanvasImageCopyTexture *destination, + const struct CanvasExtent3d *size); + void canvas_native_webgpu_queue_copy_image_asset_to_texture(const struct CanvasGPUQueue *queue, const struct CanvasImageCopyImageAsset *source, const struct CanvasImageCopyTexture *destination, @@ -3391,10 +3468,20 @@ void canvas_native_webgpu_render_pass_encoder_draw_indexed_indirect(const struct const struct CanvasGPUBuffer *indirect_buffer, uint64_t indirect_offset); +void canvas_native_webgpu_render_pass_encoder_multi_draw_indexed_indirect(const struct CanvasGPURenderPassEncoder *render_pass, + const struct CanvasGPUBuffer *indirect_buffer, + uint64_t indirect_offset, + uint32_t count); + void canvas_native_webgpu_render_pass_encoder_draw_indirect(const struct CanvasGPURenderPassEncoder *render_pass, const struct CanvasGPUBuffer *indirect_buffer, uint64_t indirect_offset); +void canvas_native_webgpu_render_pass_encoder_multi_draw_indirect(const struct CanvasGPURenderPassEncoder *render_pass, + const struct CanvasGPUBuffer *indirect_buffer, + uint64_t indirect_offset, + uint32_t count); + void canvas_native_webgpu_render_pass_encoder_end(const struct CanvasGPURenderPassEncoder *render_pass); void canvas_native_webgpu_render_pass_encoder_end_occlusion_query(const struct CanvasGPURenderPassEncoder *render_pass); @@ -3568,10 +3655,18 @@ char *canvas_native_string_buffer_get_value_at(const struct StringBuffer *buffer void canvas_native_string_buffer_release(struct StringBuffer *buffer); +struct FileHelperMime *canvas_native_helper_get_mime(const uint8_t *data, uintptr_t size); + +void canvas_native_helper_release_mime(struct FileHelperMime *mime); + void canvas_native_helper_release(struct FileHelper *value); struct FileHelper *canvas_native_helper_read_file(const char *path); +char *canvas_native_helper_read_file_get_mime(struct FileHelper *file); + +char *canvas_native_helper_read_file_get_extension(struct FileHelper *file); + bool canvas_native_helper_read_file_has_error(const struct FileHelper *file); struct U8Buffer *canvas_native_helper_read_file_get_data(struct FileHelper *file); @@ -3595,9 +3690,15 @@ bool canvas_native_image_asset_load_from_fd(const struct ImageAsset *asset, int bool canvas_native_image_asset_load_from_path(const struct ImageAsset *asset, const char *path); bool canvas_native_image_asset_load_from_raw(const struct ImageAsset *asset, + uint32_t width, + uint32_t height, const uint8_t *array, uintptr_t size); +bool canvas_native_image_asset_load_from_raw_encoded(const struct ImageAsset *asset, + const uint8_t *array, + uintptr_t size); + bool canvas_native_image_asset_load_from_url(const struct ImageAsset *asset, const char *url); int64_t canvas_native_image_asset_addr(const struct ImageAsset *asset); @@ -3640,10 +3741,6 @@ struct U8Buffer *canvas_native_text_encoder_encode(const struct TextEncoder *enc const char *canvas_native_text_encoder_get_encoding(const struct TextEncoder *encoder); -bool canvas_native_context_gl_make_current(const struct CanvasRenderingContext2D *context); - -bool canvas_native_context_gl_swap_buffers(const struct CanvasRenderingContext2D *context); - struct PaintStyle *canvas_native_context_create_pattern_webgl(struct WebGLState *source, struct CanvasRenderingContext2D *context, enum CanvasRepetition repetition); @@ -3865,7 +3962,10 @@ bool canvas_native_webgl_oes_vertex_array_object_is_vertex_array_oes(uint32_t ar void canvas_native_webgl_oes_vertex_array_object_bind_vertex_array_oes(uint32_t array_object, const struct OES_vertex_array_object *object); -struct WebGLState *canvas_native_webgl_create(int64_t gl_context, +#if defined(TARGET_OS_ANDROID) +struct WebGLState *canvas_native_webgl_create(void *view, + int32_t width, + int32_t height, int32_t version, bool alpha, bool antialias, @@ -3877,6 +3977,22 @@ struct WebGLState *canvas_native_webgl_create(int64_t gl_context, bool stencil, bool desynchronized, bool xr_compatible); +#endif + +#if !defined(TARGET_OS_ANDROID) +struct WebGLState *canvas_native_webgl_create(void *view, + int32_t version, + bool alpha, + bool antialias, + bool depth, + bool fail_if_major_performance_caveat, + int32_t power_preference, + bool premultiplied_alpha, + bool preserve_drawing_buffer, + bool stencil, + bool desynchronized, + bool xr_compatible); +#endif struct WebGLState *canvas_native_webgl_create_no_window(int32_t width, int32_t height, @@ -5045,8 +5161,8 @@ void canvas_native_webgl2_tex_sub_image3d_canvas2d(uint32_t target, int32_t xoffset, int32_t yoffset, int32_t zoffset, - int32_t width, - int32_t height, + int32_t _width, + int32_t _height, int32_t depth, uint32_t format, uint32_t type_, diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo index 7f148bf90..cb33943cb 100644 Binary files a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo and b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo differ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.abi.json b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.abi.json index a6bbd23a2..a468657eb 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.abi.json +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.abi.json @@ -396,9 +396,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -415,7 +415,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initWebGPUWithViewLayer::::", - "mangledName": "$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ", + "mangledName": "$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -440,9 +440,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -459,7 +459,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initWebGPUWithView::::", - "mangledName": "$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ", + "mangledName": "$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -483,9 +483,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -502,7 +502,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)resizeWebGPUWithView::::", - "mangledName": "$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AFs6UInt32VAHtFZ", + "mangledName": "$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AA9NSCCanvasCs6UInt32VAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -510,8 +510,8 @@ }, { "kind": "Function", - "name": "initGLWithView", - "printedName": "initGLWithView(_:_:_:_:_:_:_:_:_:_:_:_:_:)", + "name": "initWebGLWithView", + "printedName": "initWebGLWithView(_:_:_:_:_:_:_:_:_:_:_:_:)", "children": [ { "kind": "TypeNominal", @@ -521,9 +521,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -590,17 +590,11 @@ "name": "Int32", "printedName": "Swift.Int32", "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initGLWithView:::::::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initWebGLWithView::::::::::::", + "mangledName": "$s12CanvasNative0A7HelpersC17initWebGLWithViewys5Int64VAA9NSCCanvasC_S4bs5Int32VS5bAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -608,112 +602,8 @@ }, { "kind": "Function", - "name": "initSharedGLWithView", - "printedName": "initSharedGLWithView(_:_:_:_:_:_:_:_:_:_:_:_:_:_:)", - "children": [ - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initSharedGLWithView::::::::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ", - "moduleName": "CanvasNative", - "static": true, - "declAttributes": ["Final", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, - { - "kind": "Function", - "name": "initGLWithWidthAndHeight", - "printedName": "initGLWithWidthAndHeight(_:_:_:_:_:_:_:_:_:_:_:_:_:_:)", + "name": "initWebGLWithWidthAndHeight", + "printedName": "initWebGLWithWidthAndHeight(_:_:_:_:_:_:_:_:_:_:_:_:_:)", "children": [ { "kind": "TypeNominal", @@ -798,127 +688,11 @@ "name": "Int32", "printedName": "Swift.Int32", "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initGLWithWidthAndHeight::::::::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ", - "moduleName": "CanvasNative", - "static": true, - "declAttributes": ["Final", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, - { - "kind": "Function", - "name": "initSharedGLWidthAndHeight", - "printedName": "initSharedGLWidthAndHeight(_:_:_:_:_:_:_:_:_:_:_:_:_:_:_:)", - "children": [ - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initSharedGLWidthAndHeight:::::::::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initWebGLWithWidthAndHeight:::::::::::::", + "mangledName": "$s12CanvasNative0A7HelpersC27initWebGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -988,14 +762,13 @@ }, { "kind": "Function", - "name": "flushGL", - "printedName": "flushGL(_:)", + "name": "flush2DContextAndSyncCPU", + "printedName": "flush2DContextAndSyncCPU(_:)", "children": [ { "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" + "name": "Void", + "printedName": "()" }, { "kind": "TypeNominal", @@ -1005,8 +778,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)flushGL:", - "mangledName": "$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)flush2DContextAndSyncCPU:", + "mangledName": "$s12CanvasNative0A7HelpersC24flush2DContextAndSyncCPUyys5Int64VFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1014,8 +787,8 @@ }, { "kind": "Function", - "name": "releaseGL", - "printedName": "releaseGL(_:)", + "name": "presentDrawable", + "printedName": "presentDrawable(_:)", "children": [ { "kind": "TypeNominal", @@ -1030,8 +803,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)releaseGL:", - "mangledName": "$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)presentDrawable:", + "mangledName": "$s12CanvasNative0A7HelpersC15presentDrawableyys5Int64VFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1039,14 +812,14 @@ }, { "kind": "Function", - "name": "getGLPointer", - "printedName": "getGLPointer(_:)", + "name": "flushWebGL", + "printedName": "flushWebGL(_:)", "children": [ { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" }, { "kind": "TypeNominal", @@ -1056,8 +829,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)getGLPointer:", - "mangledName": "$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)flushWebGL:", + "mangledName": "$s12CanvasNative0A7HelpersC10flushWebGLySbs5Int64VFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1065,8 +838,8 @@ }, { "kind": "Function", - "name": "releaseGLPointer", - "printedName": "releaseGLPointer(_:)", + "name": "releaseWebGL", + "printedName": "releaseWebGL(_:)", "children": [ { "kind": "TypeNominal", @@ -1081,8 +854,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)releaseGLPointer:", - "mangledName": "$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)releaseWebGL:", + "mangledName": "$s12CanvasNative0A7HelpersC12releaseWebGLyys5Int64VFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1091,7 +864,7 @@ { "kind": "Function", "name": "create2DContext", - "printedName": "create2DContext(_:_:_:_:_:_:_:_:_:)", + "printedName": "create2DContext(_:_:_:_:_:_:_:_:)", "children": [ { "kind": "TypeNominal", @@ -1101,9 +874,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -1135,12 +908,6 @@ "printedName": "Swift.Int32", "usr": "s:s5Int32V" }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, { "kind": "TypeNominal", "name": "Float", @@ -1155,8 +922,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)create2DContext:::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)create2DContext::::::::", + "mangledName": "$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAA9NSCCanvasC_s5Int32VAJSbSfAJSfAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1164,14 +931,9 @@ }, { "kind": "Function", - "name": "updateGLSurfaceWithView", - "printedName": "updateGLSurfaceWithView(_:_:_:_:)", + "name": "create2DContextMetal", + "printedName": "create2DContextMetal(_:_:_:_:_:_:)", "children": [ - { - "kind": "TypeNominal", - "name": "Void", - "printedName": "()" - }, { "kind": "TypeNominal", "name": "Int64", @@ -1180,9 +942,21 @@ }, { "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" + }, + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + }, + { + "kind": "TypeNominal", + "name": "Float", + "printedName": "Swift.Float", + "usr": "s:Sf" }, { "kind": "TypeNominal", @@ -1192,14 +966,20 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "Float", + "printedName": "Swift.Float", + "usr": "s:Sf" + }, + { + "kind": "TypeNominal", + "name": "Int32", + "printedName": "Swift.Int32", + "usr": "s:s5Int32V" } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)updateGLSurfaceWithView::::", - "mangledName": "$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)create2DContextMetal::::::", + "mangledName": "$s12CanvasNative0A7HelpersC20create2DContextMetalys5Int64VAA9NSCCanvasC_SbSfs5Int32VSfAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1207,8 +987,8 @@ }, { "kind": "Function", - "name": "test2D", - "printedName": "test2D(_:)", + "name": "updateWebGLSurfaceWithView", + "printedName": "updateWebGLSurfaceWithView(_:_:_:_:)", "children": [ { "kind": "TypeNominal", @@ -1220,26 +1000,18 @@ "name": "Int64", "printedName": "Swift.Int64", "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)test2D:", - "mangledName": "$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ", - "moduleName": "CanvasNative", - "static": true, - "declAttributes": ["Final", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, - { - "kind": "Function", - "name": "testToDataURL", - "printedName": "testToDataURL(_:)", - "children": [ + }, { "kind": "TypeNominal", - "name": "String", - "printedName": "Swift.String", - "usr": "s:SS" + "name": "Int32", + "printedName": "Swift.Int32", + "usr": "s:s5Int32V" + }, + { + "kind": "TypeNominal", + "name": "Int32", + "printedName": "Swift.Int32", + "usr": "s:s5Int32V" }, { "kind": "TypeNominal", @@ -1249,8 +1021,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)testToDataURL:", - "mangledName": "$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)updateWebGLSurfaceWithView::::", + "mangledName": "$s12CanvasNative0A7HelpersC26updateWebGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -2680,6 +2452,95 @@ "name": "NSCCanvas", "printedName": "NSCCanvas", "children": [ + { + "kind": "Var", + "name": "forceGL", + "printedName": "forceGL", + "children": [ + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(cpy)forceGL", + "mangledName": "$s12CanvasNative9NSCCanvasC7forceGLSbvpZ", + "moduleName": "CanvasNative", + "static": true, + "declAttributes": ["HasInitialValue", "Final", "HasStorage", "Custom", "AccessControl", "ObjC"], + "hasStorage": true, + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(cm)forceGL", + "mangledName": "$s12CanvasNative9NSCCanvasC7forceGLSbvgZ", + "moduleName": "CanvasNative", + "static": true, + "implicit": true, + "declAttributes": ["Final", "ObjC"], + "accessorKind": "get" + }, + { + "kind": "Accessor", + "name": "Set", + "printedName": "Set()", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(cm)setForceGL:", + "mangledName": "$s12CanvasNative9NSCCanvasC7forceGLSbvsZ", + "moduleName": "CanvasNative", + "static": true, + "implicit": true, + "declAttributes": ["Final", "ObjC"], + "accessorKind": "set" + }, + { + "kind": "Accessor", + "name": "Modify", + "printedName": "Modify()", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + } + ], + "declKind": "Accessor", + "usr": "s:12CanvasNative9NSCCanvasC7forceGLSbvMZ", + "mangledName": "$s12CanvasNative9NSCCanvasC7forceGLSbvMZ", + "moduleName": "CanvasNative", + "static": true, + "implicit": true, + "declAttributes": ["Final"], + "accessorKind": "_modify" + } + ] + }, { "kind": "TypeDecl", "name": "CanvasFit", @@ -3000,19 +2861,103 @@ }, { "kind": "Var", - "name": "fit", - "printedName": "fit", + "name": "fit", + "printedName": "fit", + "children": [ + { + "kind": "TypeNominal", + "name": "CanvasFit", + "printedName": "CanvasNative.NSCCanvas.CanvasFit", + "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)fit", + "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvp", + "moduleName": "CanvasNative", + "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "AccessControl", "ObjC"], + "hasStorage": true, + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CanvasFit", + "printedName": "CanvasNative.NSCCanvas.CanvasFit", + "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)fit", + "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvg", + "moduleName": "CanvasNative", + "implicit": true, + "declAttributes": ["ObjC"], + "accessorKind": "get" + }, + { + "kind": "Accessor", + "name": "Set", + "printedName": "Set()", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "CanvasFit", + "printedName": "CanvasNative.NSCCanvas.CanvasFit", + "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)setFit:", + "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvs", + "moduleName": "CanvasNative", + "implicit": true, + "declAttributes": ["ObjC"], + "accessorKind": "set" + }, + { + "kind": "Accessor", + "name": "Modify", + "printedName": "Modify()", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + } + ], + "declKind": "Accessor", + "usr": "s:12CanvasNative9NSCCanvasC3fitAC0A3FitOvM", + "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM", + "moduleName": "CanvasNative", + "implicit": true, + "accessorKind": "_modify" + } + ] + }, + { + "kind": "Var", + "name": "weblikeScale", + "printedName": "weblikeScale", "children": [ { "kind": "TypeNominal", - "name": "CanvasFit", - "printedName": "CanvasNative.NSCCanvas.CanvasFit", - "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Var", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)fit", - "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvp", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)weblikeScale", + "mangledName": "$s12CanvasNative9NSCCanvasC12weblikeScaleSbvp", "moduleName": "CanvasNative", "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "AccessControl", "ObjC"], "hasStorage": true, @@ -3024,14 +2969,14 @@ "children": [ { "kind": "TypeNominal", - "name": "CanvasFit", - "printedName": "CanvasNative.NSCCanvas.CanvasFit", - "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)fit", - "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvg", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)weblikeScale", + "mangledName": "$s12CanvasNative9NSCCanvasC12weblikeScaleSbvg", "moduleName": "CanvasNative", "implicit": true, "declAttributes": ["ObjC"], @@ -3049,14 +2994,14 @@ }, { "kind": "TypeNominal", - "name": "CanvasFit", - "printedName": "CanvasNative.NSCCanvas.CanvasFit", - "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)setFit:", - "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvs", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)setWeblikeScale:", + "mangledName": "$s12CanvasNative9NSCCanvasC12weblikeScaleSbvs", "moduleName": "CanvasNative", "implicit": true, "declAttributes": ["ObjC"], @@ -3074,8 +3019,8 @@ } ], "declKind": "Accessor", - "usr": "s:12CanvasNative9NSCCanvasC3fitAC0A3FitOvM", - "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM", + "usr": "s:12CanvasNative9NSCCanvasC12weblikeScaleSbvM", + "mangledName": "$s12CanvasNative9NSCCanvasC12weblikeScaleSbvM", "moduleName": "CanvasNative", "implicit": true, "accessorKind": "_modify" @@ -3162,8 +3107,8 @@ }, { "kind": "Function", - "name": "getViewPtr", - "printedName": "getViewPtr()", + "name": "getGlViewPtr", + "printedName": "getGlViewPtr()", "children": [ { "kind": "TypeNominal", @@ -3173,8 +3118,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)getViewPtr", - "mangledName": "$s12CanvasNative9NSCCanvasC10getViewPtrSvyF", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)getGlViewPtr", + "mangledName": "$s12CanvasNative9NSCCanvasC12getGlViewPtrSvyF", "moduleName": "CanvasNative", "declAttributes": ["Custom", "AccessControl", "ObjC"], "funcSelfKind": "NonMutating" @@ -3198,6 +3143,25 @@ "declAttributes": ["Custom", "AccessControl", "ObjC"], "funcSelfKind": "NonMutating" }, + { + "kind": "Function", + "name": "getMtlLayerPtr", + "printedName": "getMtlLayerPtr()", + "children": [ + { + "kind": "TypeNominal", + "name": "UnsafeMutableRawPointer", + "printedName": "Swift.UnsafeMutableRawPointer", + "usr": "s:Sv" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)getMtlLayerPtr", + "mangledName": "$s12CanvasNative9NSCCanvasC14getMtlLayerPtrSvyF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, { "kind": "Var", "name": "autoScale", @@ -3284,8 +3248,8 @@ }, { "kind": "Var", - "name": "nativeGL", - "printedName": "nativeGL", + "name": "nativeContext", + "printedName": "nativeContext", "children": [ { "kind": "TypeNominal", @@ -3295,8 +3259,8 @@ } ], "declKind": "Var", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)nativeGL", - "mangledName": "$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvp", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)nativeContext", + "mangledName": "$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvp", "moduleName": "CanvasNative", "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "AccessControl", "SetterAccess", "ObjC"], "hasStorage": true, @@ -3314,8 +3278,8 @@ } ], "declKind": "Accessor", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)nativeGL", - "mangledName": "$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)nativeContext", + "mangledName": "$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg", "moduleName": "CanvasNative", "implicit": true, "declAttributes": ["ObjC"], @@ -3325,19 +3289,19 @@ }, { "kind": "Var", - "name": "nativeContext", - "printedName": "nativeContext", + "name": "is2D", + "printedName": "is2D", "children": [ { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Var", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)nativeContext", - "mangledName": "$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvp", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)is2D", + "mangledName": "$s12CanvasNative9NSCCanvasC4is2DSbvp", "moduleName": "CanvasNative", "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "AccessControl", "SetterAccess", "ObjC"], "hasStorage": true, @@ -3349,14 +3313,14 @@ "children": [ { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)nativeContext", - "mangledName": "$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)is2D", + "mangledName": "$s12CanvasNative9NSCCanvasC4is2DSbvg", "moduleName": "CanvasNative", "implicit": true, "declAttributes": ["ObjC"], @@ -3520,6 +3484,37 @@ } ] }, + { + "kind": "Function", + "name": "toDataURL", + "printedName": "toDataURL(_:_:)", + "children": [ + { + "kind": "TypeNominal", + "name": "String", + "printedName": "Swift.String", + "usr": "s:SS" + }, + { + "kind": "TypeNominal", + "name": "String", + "printedName": "Swift.String", + "usr": "s:SS" + }, + { + "kind": "TypeNominal", + "name": "Float", + "printedName": "Swift.Float", + "usr": "s:Sf" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)toDataURL::", + "mangledName": "$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, { "kind": "Function", "name": "initContext", @@ -3775,55 +3770,6 @@ "declAttributes": ["Custom", "AccessControl", "DiscardableResult", "ObjC"], "funcSelfKind": "NonMutating" }, - { - "kind": "Function", - "name": "context2DTest", - "printedName": "context2DTest(_:)", - "children": [ - { - "kind": "TypeNominal", - "name": "Void", - "printedName": "()" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DTest:", - "mangledName": "$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF", - "moduleName": "CanvasNative", - "declAttributes": ["Custom", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, - { - "kind": "Function", - "name": "context2DTestToDataURL", - "printedName": "context2DTestToDataURL(_:)", - "children": [ - { - "kind": "TypeNominal", - "name": "String", - "printedName": "Swift.String", - "usr": "s:SS" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DTestToDataURL:", - "mangledName": "$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF", - "moduleName": "CanvasNative", - "declAttributes": ["Custom", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, { "kind": "Var", "name": "touchEventListener", @@ -4348,6 +4294,78 @@ "declAttributes": ["Custom", "AccessControl", "ObjC"], "funcSelfKind": "NonMutating" }, + { + "kind": "Function", + "name": "context2DTest", + "printedName": "context2DTest(_:)", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "Int64", + "printedName": "Swift.Int64", + "usr": "s:s5Int64V" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DTest:", + "mangledName": "$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, + { + "kind": "Function", + "name": "context2DPathTest", + "printedName": "context2DPathTest(_:)", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "Int64", + "printedName": "Swift.Int64", + "usr": "s:s5Int64V" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DPathTest:", + "mangledName": "$s12CanvasNative9NSCCanvasC17context2DPathTestyys5Int64VF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, + { + "kind": "Function", + "name": "context2DConic", + "printedName": "context2DConic(_:)", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "Int64", + "printedName": "Swift.Int64", + "usr": "s:s5Int64V" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DConic:", + "mangledName": "$s12CanvasNative9NSCCanvasC14context2DConicyys5Int64VF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, { "kind": "Function", "name": "layoutSubviews", @@ -7016,206 +7034,171 @@ "length": 13, "value": "\"CanvasNative.NSCVideoFrame\"" }, + { + "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", + "kind": "BooleanLiteral", + "offset": 296, + "length": 4, + "value": "true" + }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 524, + "offset": 558, "length": 4, "value": "1" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 542, + "offset": 576, "length": 4, "value": "2" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 560, + "offset": 594, "length": 4, "value": "3" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 578, + "offset": 612, "length": 9, "value": "4" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1524, - "length": 1, - "value": "0" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1530, - "length": 1, - "value": "0" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1540, - "length": 1, - "value": "1" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1551, - "length": 1, - "value": "1" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1608, - "length": 1, - "value": "0" + "kind": "BooleanLiteral", + "offset": 1519, + "length": 5, + "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 3589, + "offset": 2867, "length": 1, "value": "1" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 3492, + "offset": 2770, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 3768, - "length": 1, - "value": "0" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 3826, - "length": 1, - "value": "0" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 3879, + "offset": 3046, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 3910, + "offset": 3088, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5183, + "offset": 5851, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5217, + "offset": 5885, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5247, + "offset": 5915, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5300, + "offset": 5968, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 5342, + "offset": 6010, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5382, + "offset": 6050, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5428, + "offset": 6096, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5461, + "offset": 6129, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5501, + "offset": 6169, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5539, + "offset": 6207, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 14811, + "offset": 15486, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 15246, + "offset": 15921, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 15297, + "offset": 15972, "length": 3, "value": "300" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 15474, + "offset": 16146, "length": 3, "value": "150" }, @@ -7236,35 +7219,35 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11212, + "offset": 10144, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11383, + "offset": 10315, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11556, + "offset": 10488, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11727, + "offset": 10659, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11897, + "offset": 10829, "length": 5, "value": "false" }, @@ -7320,14 +7303,14 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/GLRenderer.swift", "kind": "BooleanLiteral", - "offset": 2249, + "offset": 2255, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/GLRenderer.swift", "kind": "BooleanLiteral", - "offset": 2325, + "offset": 2331, "length": 5, "value": "false" }, diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.private.swiftinterface b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.private.swiftinterface index 82a2f3060..ef1712c85 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.private.swiftinterface +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.private.swiftinterface @@ -25,23 +25,20 @@ import _SwiftConcurrencyShims @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, dx: Swift.Float, dy: Swift.Float) -> Swift.Bool @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, dx: Swift.Float, dy: Swift.Float, dw: Swift.Float, dh: Swift.Float) -> Swift.Bool @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, sx: Swift.Float, sy: Swift.Float, sw: Swift.Float, sh: Swift.Float, dx: Swift.Float, dy: Swift.Float, dw: Swift.Float, dh: Swift.Float) -> Swift.Bool - @objc public static func initWebGPUWithViewLayer(_ instance: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 - @objc public static func initWebGPUWithView(_ instance: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 - @objc public static func resizeWebGPUWithView(_ context: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) - @objc public static func initGLWithView(_ view: Swift.Int64, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool) -> Swift.Int64 - @objc public static func initSharedGLWithView(_ view: Swift.Int64, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool, _ shared_context: Swift.Int64) -> Swift.Int64 - @objc public static func initGLWithWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool) -> Swift.Int64 - @objc public static func initSharedGLWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool, _ shared_context: Swift.Int64) -> Swift.Int64 + @objc public static func initWebGPUWithViewLayer(_ instance: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 + @objc public static func initWebGPUWithView(_ instance: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 + @objc public static func resizeWebGPUWithView(_ context: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) + @objc public static func initWebGLWithView(_ view: CanvasNative.NSCCanvas, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32) -> Swift.Int64 + @objc public static func initWebGLWithWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32) -> Swift.Int64 @objc public static func resize2DContext(_ context: Swift.Int64, _ width: Swift.Float, _ height: Swift.Float) @objc public static func flush2DContext(_ context: Swift.Int64) - @objc public static func flushGL(_ context: Swift.Int64) -> Swift.Bool - @objc public static func releaseGL(_ context: Swift.Int64) - @objc public static func getGLPointer(_ context: Swift.Int64) -> Swift.Int64 - @objc public static func releaseGLPointer(_ context: Swift.Int64) - @objc public static func create2DContext(_ context: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ density: Swift.Float, _ samples: Swift.Int32, _ font_color: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 - @objc public static func updateGLSurfaceWithView(_ view: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ context: Swift.Int64) - @objc public static func test2D(_ context: Swift.Int64) - @objc public static func testToDataURL(_ context: Swift.Int64) -> Swift.String + @objc public static func flush2DContextAndSyncCPU(_ context: Swift.Int64) + @objc public static func presentDrawable(_ context: Swift.Int64) + @objc public static func flushWebGL(_ context: Swift.Int64) -> Swift.Bool + @objc public static func releaseWebGL(_ context: Swift.Int64) + @objc public static func create2DContext(_ view: CanvasNative.NSCCanvas, _ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ density: Swift.Float, _ fontColor: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 + @objc public static func create2DContextMetal(_ view: CanvasNative.NSCCanvas, _ alpha: Swift.Bool, _ density: Swift.Float, _ fontColor: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 + @objc public static func updateWebGLSurfaceWithView(_ view: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ context: Swift.Int64) @objc public static func writeFile(_ data: Foundation.NSData, _ path: Swift.String, _ callback: @escaping (Swift.String?, Swift.String?) -> Swift.Void) @objc public static func readFile(_ path: Swift.String, _ callback: @escaping (Swift.String?, Foundation.NSData?) -> Swift.Void) @objc public static func deleteFile(_ path: Swift.String, _ callback: @escaping (Foundation.NSError?, Swift.Bool) -> Swift.Void) @@ -95,6 +92,7 @@ import _SwiftConcurrencyShims @objc deinit } @_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCCanvas) @_Concurrency.MainActor(unsafe) public class NSCCanvas : UIKit.UIView { + @objc @_Concurrency.MainActor(unsafe) public static var forceGL: Swift.Bool @objc(CanvasFit) public enum CanvasFit : Swift.Int, Swift.RawRepresentable { public typealias RawValue = Swift.UInt32 case None @@ -111,18 +109,23 @@ import _SwiftConcurrencyShims @objc get @objc set } + @objc @_Concurrency.MainActor(unsafe) public var weblikeScale: Swift.Bool { + @objc get + @objc set + } @objc @_Concurrency.MainActor(unsafe) public static let store: Foundation.NSMutableDictionary @objc @_Concurrency.MainActor(unsafe) public static func getViews() -> Foundation.NSMapTable - @objc @_Concurrency.MainActor(unsafe) public func getViewPtr() -> Swift.UnsafeMutableRawPointer + @objc @_Concurrency.MainActor(unsafe) public func getGlViewPtr() -> Swift.UnsafeMutableRawPointer @objc @_Concurrency.MainActor(unsafe) public func getMtlViewPtr() -> Swift.UnsafeMutableRawPointer + @objc @_Concurrency.MainActor(unsafe) public func getMtlLayerPtr() -> Swift.UnsafeMutableRawPointer @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set } - @objc @_Concurrency.MainActor(unsafe) public var nativeGL: Swift.Int64 { + @objc @_Concurrency.MainActor(unsafe) public var nativeContext: Swift.Int64 { get } - @objc @_Concurrency.MainActor(unsafe) public var nativeContext: Swift.Int64 { + @objc @_Concurrency.MainActor(unsafe) public var is2D: Swift.Bool { get } @objc @_Concurrency.MainActor(unsafe) public var drawingBufferWidth: CoreFoundation.CGFloat { @@ -137,14 +140,13 @@ import _SwiftConcurrencyShims @objc @_Concurrency.MainActor(unsafe) public var height: Swift.Float { @objc get } + @objc @_Concurrency.MainActor(unsafe) public func toDataURL(_ format: Swift.String, _ quality: Swift.Float) -> Swift.String @objc @_Concurrency.MainActor(unsafe) public func initContext(_ type: Swift.String, _ alpha: Swift.Bool = true, _ antialias: Swift.Bool = true, _ depth: Swift.Bool = true, _ failIfMajorPerformanceCaveat: Swift.Bool = false, _ powerPreference: Swift.Int32 = 0, _ premultipliedAlpha: Swift.Bool = true, _ preserveDrawingBuffer: Swift.Bool = false, _ stencil: Swift.Bool = false, _ desynchronized: Swift.Bool = false, _ xrCompatible: Swift.Bool = false) @objc @_Concurrency.MainActor(unsafe) public func initWebGPUContext(_ instance: Swift.Int64) @objc @_Concurrency.MainActor(unsafe) public func create2DContext(_ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ failIfMajorPerformanceCaveat: Swift.Bool, _ powerPreference: Swift.Int32, _ premultipliedAlpha: Swift.Bool, _ preserveDrawingBuffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xrCompatible: Swift.Bool, _ fontColor: Swift.Int32) -> Swift.Int64 @objc @_Concurrency.MainActor(unsafe) public func snapshot(_ flip: Swift.Bool) -> UIKit.UIImage? @objc @discardableResult @_Concurrency.MainActor(unsafe) public func render() -> Swift.Bool - @objc @_Concurrency.MainActor(unsafe) public func context2DTest(_ context: Swift.Int64) - @objc @_Concurrency.MainActor(unsafe) public func context2DTestToDataURL(_ context: Swift.Int64) -> Swift.String @objc @_Concurrency.MainActor(unsafe) public var touchEventListener: ((Swift.String, UIKit.UIGestureRecognizer) -> Swift.Void)? @_Concurrency.MainActor(unsafe) @objc override dynamic public init(frame: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public var ignoreTouchEvents: Swift.Bool { @@ -161,6 +163,9 @@ import _SwiftConcurrencyShims @objc set } @objc @_Concurrency.MainActor(unsafe) public func forceLayout(_ width: CoreFoundation.CGFloat, _ height: CoreFoundation.CGFloat) + @objc @_Concurrency.MainActor(unsafe) public func context2DTest(_ context: Swift.Int64) + @objc @_Concurrency.MainActor(unsafe) public func context2DPathTest(_ context: Swift.Int64) + @objc @_Concurrency.MainActor(unsafe) public func context2DConic(_ context: Swift.Int64) @_Concurrency.MainActor(unsafe) @objc override dynamic public func layoutSubviews() @objc deinit @objc @_Concurrency.MainActor(unsafe) public static func getBoundingClientRect(_ view: UIKit.UIView, _ buffer: Swift.UnsafeMutableRawPointer) diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.swiftinterface b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.swiftinterface index 82a2f3060..ef1712c85 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.swiftinterface +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.swiftinterface @@ -25,23 +25,20 @@ import _SwiftConcurrencyShims @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, dx: Swift.Float, dy: Swift.Float) -> Swift.Bool @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, dx: Swift.Float, dy: Swift.Float, dw: Swift.Float, dh: Swift.Float) -> Swift.Bool @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, sx: Swift.Float, sy: Swift.Float, sw: Swift.Float, sh: Swift.Float, dx: Swift.Float, dy: Swift.Float, dw: Swift.Float, dh: Swift.Float) -> Swift.Bool - @objc public static func initWebGPUWithViewLayer(_ instance: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 - @objc public static func initWebGPUWithView(_ instance: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 - @objc public static func resizeWebGPUWithView(_ context: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) - @objc public static func initGLWithView(_ view: Swift.Int64, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool) -> Swift.Int64 - @objc public static func initSharedGLWithView(_ view: Swift.Int64, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool, _ shared_context: Swift.Int64) -> Swift.Int64 - @objc public static func initGLWithWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool) -> Swift.Int64 - @objc public static func initSharedGLWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool, _ shared_context: Swift.Int64) -> Swift.Int64 + @objc public static func initWebGPUWithViewLayer(_ instance: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 + @objc public static func initWebGPUWithView(_ instance: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 + @objc public static func resizeWebGPUWithView(_ context: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) + @objc public static func initWebGLWithView(_ view: CanvasNative.NSCCanvas, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32) -> Swift.Int64 + @objc public static func initWebGLWithWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32) -> Swift.Int64 @objc public static func resize2DContext(_ context: Swift.Int64, _ width: Swift.Float, _ height: Swift.Float) @objc public static func flush2DContext(_ context: Swift.Int64) - @objc public static func flushGL(_ context: Swift.Int64) -> Swift.Bool - @objc public static func releaseGL(_ context: Swift.Int64) - @objc public static func getGLPointer(_ context: Swift.Int64) -> Swift.Int64 - @objc public static func releaseGLPointer(_ context: Swift.Int64) - @objc public static func create2DContext(_ context: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ density: Swift.Float, _ samples: Swift.Int32, _ font_color: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 - @objc public static func updateGLSurfaceWithView(_ view: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ context: Swift.Int64) - @objc public static func test2D(_ context: Swift.Int64) - @objc public static func testToDataURL(_ context: Swift.Int64) -> Swift.String + @objc public static func flush2DContextAndSyncCPU(_ context: Swift.Int64) + @objc public static func presentDrawable(_ context: Swift.Int64) + @objc public static func flushWebGL(_ context: Swift.Int64) -> Swift.Bool + @objc public static func releaseWebGL(_ context: Swift.Int64) + @objc public static func create2DContext(_ view: CanvasNative.NSCCanvas, _ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ density: Swift.Float, _ fontColor: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 + @objc public static func create2DContextMetal(_ view: CanvasNative.NSCCanvas, _ alpha: Swift.Bool, _ density: Swift.Float, _ fontColor: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 + @objc public static func updateWebGLSurfaceWithView(_ view: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ context: Swift.Int64) @objc public static func writeFile(_ data: Foundation.NSData, _ path: Swift.String, _ callback: @escaping (Swift.String?, Swift.String?) -> Swift.Void) @objc public static func readFile(_ path: Swift.String, _ callback: @escaping (Swift.String?, Foundation.NSData?) -> Swift.Void) @objc public static func deleteFile(_ path: Swift.String, _ callback: @escaping (Foundation.NSError?, Swift.Bool) -> Swift.Void) @@ -95,6 +92,7 @@ import _SwiftConcurrencyShims @objc deinit } @_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCCanvas) @_Concurrency.MainActor(unsafe) public class NSCCanvas : UIKit.UIView { + @objc @_Concurrency.MainActor(unsafe) public static var forceGL: Swift.Bool @objc(CanvasFit) public enum CanvasFit : Swift.Int, Swift.RawRepresentable { public typealias RawValue = Swift.UInt32 case None @@ -111,18 +109,23 @@ import _SwiftConcurrencyShims @objc get @objc set } + @objc @_Concurrency.MainActor(unsafe) public var weblikeScale: Swift.Bool { + @objc get + @objc set + } @objc @_Concurrency.MainActor(unsafe) public static let store: Foundation.NSMutableDictionary @objc @_Concurrency.MainActor(unsafe) public static func getViews() -> Foundation.NSMapTable - @objc @_Concurrency.MainActor(unsafe) public func getViewPtr() -> Swift.UnsafeMutableRawPointer + @objc @_Concurrency.MainActor(unsafe) public func getGlViewPtr() -> Swift.UnsafeMutableRawPointer @objc @_Concurrency.MainActor(unsafe) public func getMtlViewPtr() -> Swift.UnsafeMutableRawPointer + @objc @_Concurrency.MainActor(unsafe) public func getMtlLayerPtr() -> Swift.UnsafeMutableRawPointer @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set } - @objc @_Concurrency.MainActor(unsafe) public var nativeGL: Swift.Int64 { + @objc @_Concurrency.MainActor(unsafe) public var nativeContext: Swift.Int64 { get } - @objc @_Concurrency.MainActor(unsafe) public var nativeContext: Swift.Int64 { + @objc @_Concurrency.MainActor(unsafe) public var is2D: Swift.Bool { get } @objc @_Concurrency.MainActor(unsafe) public var drawingBufferWidth: CoreFoundation.CGFloat { @@ -137,14 +140,13 @@ import _SwiftConcurrencyShims @objc @_Concurrency.MainActor(unsafe) public var height: Swift.Float { @objc get } + @objc @_Concurrency.MainActor(unsafe) public func toDataURL(_ format: Swift.String, _ quality: Swift.Float) -> Swift.String @objc @_Concurrency.MainActor(unsafe) public func initContext(_ type: Swift.String, _ alpha: Swift.Bool = true, _ antialias: Swift.Bool = true, _ depth: Swift.Bool = true, _ failIfMajorPerformanceCaveat: Swift.Bool = false, _ powerPreference: Swift.Int32 = 0, _ premultipliedAlpha: Swift.Bool = true, _ preserveDrawingBuffer: Swift.Bool = false, _ stencil: Swift.Bool = false, _ desynchronized: Swift.Bool = false, _ xrCompatible: Swift.Bool = false) @objc @_Concurrency.MainActor(unsafe) public func initWebGPUContext(_ instance: Swift.Int64) @objc @_Concurrency.MainActor(unsafe) public func create2DContext(_ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ failIfMajorPerformanceCaveat: Swift.Bool, _ powerPreference: Swift.Int32, _ premultipliedAlpha: Swift.Bool, _ preserveDrawingBuffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xrCompatible: Swift.Bool, _ fontColor: Swift.Int32) -> Swift.Int64 @objc @_Concurrency.MainActor(unsafe) public func snapshot(_ flip: Swift.Bool) -> UIKit.UIImage? @objc @discardableResult @_Concurrency.MainActor(unsafe) public func render() -> Swift.Bool - @objc @_Concurrency.MainActor(unsafe) public func context2DTest(_ context: Swift.Int64) - @objc @_Concurrency.MainActor(unsafe) public func context2DTestToDataURL(_ context: Swift.Int64) -> Swift.String @objc @_Concurrency.MainActor(unsafe) public var touchEventListener: ((Swift.String, UIKit.UIGestureRecognizer) -> Swift.Void)? @_Concurrency.MainActor(unsafe) @objc override dynamic public init(frame: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public var ignoreTouchEvents: Swift.Bool { @@ -161,6 +163,9 @@ import _SwiftConcurrencyShims @objc set } @objc @_Concurrency.MainActor(unsafe) public func forceLayout(_ width: CoreFoundation.CGFloat, _ height: CoreFoundation.CGFloat) + @objc @_Concurrency.MainActor(unsafe) public func context2DTest(_ context: Swift.Int64) + @objc @_Concurrency.MainActor(unsafe) public func context2DPathTest(_ context: Swift.Int64) + @objc @_Concurrency.MainActor(unsafe) public func context2DConic(_ context: Swift.Int64) @_Concurrency.MainActor(unsafe) @objc override dynamic public func layoutSubviews() @objc deinit @objc @_Concurrency.MainActor(unsafe) public static func getBoundingClientRect(_ view: UIKit.UIView, _ buffer: Swift.UnsafeMutableRawPointer) diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative index 5655b837c..2d3ca25f7 100644 Binary files a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative and b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative differ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml index f51ce65e7..fd2a07804 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml @@ -2,654 +2,695 @@ triple: 'arm64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/dist/Release-iphoneos/CanvasNative.framework/CanvasNative' relocations: - - { offsetInCU: 0x34, offset: 0x77B32, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x8DD000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x77B67, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x8DD038, symSize: 0x0 } - - { offsetInCU: 0x3F, offset: 0x77BBC, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x20, symBinAddr: 0x4014, symSize: 0xC } - - { offsetInCU: 0x53, offset: 0x77BD0, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x2C, symBinAddr: 0x4020, symSize: 0x4 } - - { offsetInCU: 0x67, offset: 0x77BE4, size: 0x8, addend: 0x0, symName: '_$sSo7CGPointVwet', symObjAddr: 0x30, symBinAddr: 0x4024, symSize: 0x20 } - - { offsetInCU: 0x7B, offset: 0x77BF8, size: 0x8, addend: 0x0, symName: '_$sSo7CGPointVwst', symObjAddr: 0x50, symBinAddr: 0x4044, symSize: 0x28 } - - { offsetInCU: 0x4F, offset: 0x77DE1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2A20, symBinAddr: 0x1097250, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x77DFB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2A28, symBinAddr: 0x1097258, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x77E2F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x4, symBinAddr: 0x40C8, symSize: 0x38 } - - { offsetInCU: 0xF3, offset: 0x77E85, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x40, symBinAddr: 0x4104, symSize: 0x70 } - - { offsetInCU: 0x144, offset: 0x77ED6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xB4, symBinAddr: 0x4178, symSize: 0x44 } - - { offsetInCU: 0x197, offset: 0x77F29, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC22loadImageAssetWithPathySbs5Int64V_SStFZTo', symObjAddr: 0x158, symBinAddr: 0x421C, symSize: 0x74 } - - { offsetInCU: 0x238, offset: 0x77FCA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x1D0, symBinAddr: 0x4294, symSize: 0x5C } - - { offsetInCU: 0x29D, offset: 0x7802F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x230, symBinAddr: 0x42F4, symSize: 0x74 } - - { offsetInCU: 0x316, offset: 0x780A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x2A8, symBinAddr: 0x436C, symSize: 0xA4 } - - { offsetInCU: 0x373, offset: 0x78105, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x350, symBinAddr: 0x4414, symSize: 0x14 } - - { offsetInCU: 0x3F5, offset: 0x78187, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x368, symBinAddr: 0x442C, symSize: 0x14 } - - { offsetInCU: 0x477, offset: 0x78209, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AFs6UInt32VAHtFZTo', symObjAddr: 0x380, symBinAddr: 0x4444, symSize: 0x14 } - - { offsetInCU: 0x526, offset: 0x782B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x3D8, symBinAddr: 0x449C, symSize: 0x50 } - - { offsetInCU: 0x5F7, offset: 0x78389, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x474, symBinAddr: 0x4538, symSize: 0x58 } - - { offsetInCU: 0x6D1, offset: 0x78463, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x514, symBinAddr: 0x45D8, symSize: 0x58 } - - { offsetInCU: 0x7B0, offset: 0x78542, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x5BC, symBinAddr: 0x4680, symSize: 0x60 } - - { offsetInCU: 0x85C, offset: 0x785EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x620, symBinAddr: 0x46E4, symSize: 0x8 } - - { offsetInCU: 0x8C5, offset: 0x78657, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x62C, symBinAddr: 0x46F0, symSize: 0x8 } - - { offsetInCU: 0x91C, offset: 0x786AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x648, symBinAddr: 0x470C, symSize: 0x8 } - - { offsetInCU: 0x973, offset: 0x78705, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x654, symBinAddr: 0x4718, symSize: 0x8 } - - { offsetInCU: 0x9CA, offset: 0x7875C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x660, symBinAddr: 0x4724, symSize: 0x8 } - - { offsetInCU: 0xA21, offset: 0x787B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x66C, symBinAddr: 0x4730, symSize: 0x8 } - - { offsetInCU: 0xAA0, offset: 0x78832, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x67C, symBinAddr: 0x4740, symSize: 0x24 } - - { offsetInCU: 0xB51, offset: 0x788E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x6A4, symBinAddr: 0x4768, symSize: 0x14 } - - { offsetInCU: 0xBC4, offset: 0x78956, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x6BC, symBinAddr: 0x4780, symSize: 0x8 } - - { offsetInCU: 0xC1B, offset: 0x789AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x71C, symBinAddr: 0x47E0, symSize: 0x74 } - - { offsetInCU: 0xCA6, offset: 0x78A38, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0x924, symBinAddr: 0x49E8, symSize: 0xA0 } - - { offsetInCU: 0xCF7, offset: 0x78A89, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xC2C, symBinAddr: 0x4CF0, symSize: 0x98 } - - { offsetInCU: 0xD49, offset: 0x78ADB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0xF80, symBinAddr: 0x5044, symSize: 0x98 } - - { offsetInCU: 0xDA5, offset: 0x78B37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x13A8, symBinAddr: 0x546C, symSize: 0xD8 } - - { offsetInCU: 0xDED, offset: 0x78B7F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1484, symBinAddr: 0x5548, symSize: 0x34 } - - { offsetInCU: 0xE4D, offset: 0x78BDF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x1508, symBinAddr: 0x55CC, symSize: 0x3C } - - { offsetInCU: 0xE9E, offset: 0x78C30, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1578, symBinAddr: 0x563C, symSize: 0x298 } - - { offsetInCU: 0x10FE, offset: 0x78E90, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1810, symBinAddr: 0x58D4, symSize: 0x1E0 } - - { offsetInCU: 0x12F8, offset: 0x7908A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x19F0, symBinAddr: 0x5AB4, symSize: 0xEC } - - { offsetInCU: 0x13F5, offset: 0x79187, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1ADC, symBinAddr: 0x5BA0, symSize: 0x144 } - - { offsetInCU: 0x156A, offset: 0x792FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1C20, symBinAddr: 0x5CE4, symSize: 0x15C } - - { offsetInCU: 0x16FF, offset: 0x79491, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x1D7C, symBinAddr: 0x5E40, symSize: 0x180 } - - { offsetInCU: 0x18EB, offset: 0x7967D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x1EFC, symBinAddr: 0x5FC0, symSize: 0x1B4 } - - { offsetInCU: 0x19B5, offset: 0x79747, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x2254, symBinAddr: 0x6318, symSize: 0x1D4 } - - { offsetInCU: 0x1A96, offset: 0x79828, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x2428, symBinAddr: 0x64EC, symSize: 0x114 } - - { offsetInCU: 0x1B41, offset: 0x798D3, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0x9C4, symBinAddr: 0x4A88, symSize: 0x78 } - - { offsetInCU: 0x1B59, offset: 0x798EB, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xCC4, symBinAddr: 0x4D88, symSize: 0x54 } - - { offsetInCU: 0x1BC6, offset: 0x79958, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1574, symBinAddr: 0x5638, symSize: 0x4 } - - { offsetInCU: 0x1C5C, offset: 0x799EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x253C, symBinAddr: 0x6600, symSize: 0x20 } - - { offsetInCU: 0x1C70, offset: 0x79A02, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x2580, symBinAddr: 0x6644, symSize: 0x8 } - - { offsetInCU: 0x1C8F, offset: 0x79A21, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x2588, symBinAddr: 0x664C, symSize: 0x18 } - - { offsetInCU: 0x1CB8, offset: 0x79A4A, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x25A0, symBinAddr: 0x6664, symSize: 0x8 } - - { offsetInCU: 0x1CCC, offset: 0x79A5E, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x25A8, symBinAddr: 0x666C, symSize: 0x3C } - - { offsetInCU: 0x1CE0, offset: 0x79A72, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x2628, symBinAddr: 0x66EC, symSize: 0x34 } - - { offsetInCU: 0x1CF4, offset: 0x79A86, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x265C, symBinAddr: 0x6720, symSize: 0x10 } - - { offsetInCU: 0x1D08, offset: 0x79A9A, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x266C, symBinAddr: 0x6730, symSize: 0x8 } - - { offsetInCU: 0x1D1C, offset: 0x79AAE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2698, symBinAddr: 0x675C, symSize: 0x40 } - - { offsetInCU: 0x1D50, offset: 0x79AE2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x271C, symBinAddr: 0x67E0, symSize: 0x40 } - - { offsetInCU: 0x1D8E, offset: 0x79B20, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x275C, symBinAddr: 0x6820, symSize: 0x28 } - - { offsetInCU: 0x1DC2, offset: 0x79B54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x27DC, symBinAddr: 0x68A0, symSize: 0x3C } - - { offsetInCU: 0x1DF6, offset: 0x79B88, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2844, symBinAddr: 0x6908, symSize: 0x30 } - - { offsetInCU: 0x1E32, offset: 0x79BC4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x28B0, symBinAddr: 0x6974, symSize: 0x10 } - - { offsetInCU: 0x1E46, offset: 0x79BD8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x28C0, symBinAddr: 0x6984, symSize: 0x40 } - - { offsetInCU: 0x235C, offset: 0x7A0EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x40C4, symSize: 0x4 } - - { offsetInCU: 0x2377, offset: 0x7A109, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x3C, symBinAddr: 0x4100, symSize: 0x4 } - - { offsetInCU: 0x2392, offset: 0x7A124, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xB0, symBinAddr: 0x4174, symSize: 0x4 } - - { offsetInCU: 0x23B4, offset: 0x7A146, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC22loadImageAssetWithPathySbs5Int64V_SStFZ', symObjAddr: 0xF8, symBinAddr: 0x41BC, symSize: 0x60 } - - { offsetInCU: 0x247C, offset: 0x7A20E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x1CC, symBinAddr: 0x4290, symSize: 0x4 } - - { offsetInCU: 0x2497, offset: 0x7A229, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x22C, symBinAddr: 0x42F0, symSize: 0x4 } - - { offsetInCU: 0x24B2, offset: 0x7A244, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x2A4, symBinAddr: 0x4368, symSize: 0x4 } - - { offsetInCU: 0x24CD, offset: 0x7A25F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x34C, symBinAddr: 0x4410, symSize: 0x4 } - - { offsetInCU: 0x2551, offset: 0x7A2E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x364, symBinAddr: 0x4428, symSize: 0x4 } - - { offsetInCU: 0x25D6, offset: 0x7A368, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AFs6UInt32VAHtFZ', symObjAddr: 0x37C, symBinAddr: 0x4440, symSize: 0x4 } - - { offsetInCU: 0x2655, offset: 0x7A3E7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x394, symBinAddr: 0x4458, symSize: 0x44 } - - { offsetInCU: 0x2793, offset: 0x7A525, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x428, symBinAddr: 0x44EC, symSize: 0x4C } - - { offsetInCU: 0x28DC, offset: 0x7A66E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x4CC, symBinAddr: 0x4590, symSize: 0x48 } - - { offsetInCU: 0x2A24, offset: 0x7A7B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x56C, symBinAddr: 0x4630, symSize: 0x50 } - - { offsetInCU: 0x2B81, offset: 0x7A913, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x61C, symBinAddr: 0x46E0, symSize: 0x4 } - - { offsetInCU: 0x2BF3, offset: 0x7A985, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x628, symBinAddr: 0x46EC, symSize: 0x4 } - - { offsetInCU: 0x2C36, offset: 0x7A9C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x634, symBinAddr: 0x46F8, symSize: 0x14 } - - { offsetInCU: 0x2C7B, offset: 0x7AA0D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x650, symBinAddr: 0x4714, symSize: 0x4 } - - { offsetInCU: 0x2CBE, offset: 0x7AA50, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x65C, symBinAddr: 0x4720, symSize: 0x4 } - - { offsetInCU: 0x2D01, offset: 0x7AA93, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x668, symBinAddr: 0x472C, symSize: 0x4 } - - { offsetInCU: 0x2D44, offset: 0x7AAD6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x674, symBinAddr: 0x4738, symSize: 0x8 } - - { offsetInCU: 0x2E2B, offset: 0x7ABBD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x6A0, symBinAddr: 0x4764, symSize: 0x4 } - - { offsetInCU: 0x2EAA, offset: 0x7AC3C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x6B8, symBinAddr: 0x477C, symSize: 0x4 } - - { offsetInCU: 0x2EED, offset: 0x7AC7F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x6C4, symBinAddr: 0x4788, symSize: 0x58 } - - { offsetInCU: 0x2FAE, offset: 0x7AD40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x790, symBinAddr: 0x4854, symSize: 0x4 } - - { offsetInCU: 0x2FC2, offset: 0x7AD54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x794, symBinAddr: 0x4858, symSize: 0x190 } - - { offsetInCU: 0x3062, offset: 0x7ADF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0xA3C, symBinAddr: 0x4B00, symSize: 0x2C } - - { offsetInCU: 0x3076, offset: 0x7AE08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0xA68, symBinAddr: 0x4B2C, symSize: 0x1C4 } - - { offsetInCU: 0x3165, offset: 0x7AEF7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xD18, symBinAddr: 0x4DDC, symSize: 0x2C } - - { offsetInCU: 0x3179, offset: 0x7AF0B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xD44, symBinAddr: 0x4E08, symSize: 0x23C } - - { offsetInCU: 0x322D, offset: 0x7AFBF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0x1018, symBinAddr: 0x50DC, symSize: 0x4 } - - { offsetInCU: 0x3241, offset: 0x7AFD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0x101C, symBinAddr: 0x50E0, symSize: 0x38C } - - { offsetInCU: 0x34D8, offset: 0x7B26A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1480, symBinAddr: 0x5544, symSize: 0x4 } - - { offsetInCU: 0x34F3, offset: 0x7B285, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x14B8, symBinAddr: 0x557C, symSize: 0x20 } - - { offsetInCU: 0x3507, offset: 0x7B299, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x14D8, symBinAddr: 0x559C, symSize: 0x30 } - - { offsetInCU: 0x353D, offset: 0x7B2CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x1544, symBinAddr: 0x5608, symSize: 0x30 } - - { offsetInCU: 0x99, offset: 0x7B56B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSYAASY8rawValuexSg03RawG0Qz_tcfCTW', symObjAddr: 0x1A4, symBinAddr: 0x6C50, symSize: 0x30 } - - { offsetInCU: 0xCB, offset: 0x7B59D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSYAASY8rawValue03RawG0QzvgTW', symObjAddr: 0x1D4, symBinAddr: 0x6C80, symSize: 0x44 } - - { offsetInCU: 0xF8, offset: 0x7B5CA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValueAESgs6UInt32V_tcfCTf4nd_n', symObjAddr: 0xB68, symBinAddr: 0x7614, symSize: 0x94 } - - { offsetInCU: 0x376, offset: 0x7B848, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfcTo', symObjAddr: 0xAFC, symBinAddr: 0x75A8, symSize: 0x2C } - - { offsetInCU: 0x3F3, offset: 0x7B8C5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC10initValues33_A4E23F85F6FCD1159823157DE55F7C54LL2ts11pixelBufferAC0cD6FormatOs5Int64V_So11CVBufferRefatKFZTf4dnd_n', symObjAddr: 0xC1C, symBinAddr: 0x76C8, symSize: 0x150 } - - { offsetInCU: 0x49F, offset: 0x7B971, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11pixelBufferSo11CVBufferRefavpACTk', symObjAddr: 0x218, symBinAddr: 0x6CC4, symSize: 0x68 } - - { offsetInCU: 0x510, offset: 0x7B9E2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCfETo', symObjAddr: 0xB58, symBinAddr: 0x7604, symSize: 0x10 } - - { offsetInCU: 0x53F, offset: 0x7BA11, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCMa', symObjAddr: 0xBFC, symBinAddr: 0x76A8, symSize: 0x20 } - - { offsetInCU: 0x568, offset: 0x7BA3A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASQWb', symObjAddr: 0xD6C, symBinAddr: 0x7818, symSize: 0x4 } - - { offsetInCU: 0x57C, offset: 0x7BA4E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOAESQAAWl', symObjAddr: 0xD70, symBinAddr: 0x781C, symSize: 0x44 } - - { offsetInCU: 0x590, offset: 0x7BA62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOMa', symObjAddr: 0x1034, symBinAddr: 0x7AE0, symSize: 0x10 } - - { offsetInCU: 0x5A4, offset: 0x7BA76, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0x1044, symBinAddr: 0x7AF0, symSize: 0x44 } - - { offsetInCU: 0x5D2, offset: 0x7BAA4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x54, symBinAddr: 0x6B00, symSize: 0xC } - - { offsetInCU: 0x5EE, offset: 0x7BAC0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH9hashValueSivgTW', symObjAddr: 0x60, symBinAddr: 0x6B0C, symSize: 0x8 } - - { offsetInCU: 0x674, offset: 0x7BB46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0xD8, symBinAddr: 0x6B84, symSize: 0x58 } - - { offsetInCU: 0x6E4, offset: 0x7BBB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x130, symBinAddr: 0x6BDC, symSize: 0x8 } - - { offsetInCU: 0x909, offset: 0x7BDDB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValues6UInt32Vvg', symObjAddr: 0x0, symBinAddr: 0x6AAC, symSize: 0x3C } - - { offsetInCU: 0x92E, offset: 0x7BE00, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValueAESgs6UInt32V_tcfC', symObjAddr: 0x3C, symBinAddr: 0x6AE8, symSize: 0x18 } - - { offsetInCU: 0x976, offset: 0x7BE48, size: 0x8, addend: 0x0, symName: '_$sSYsSHRzSH8RawValueSYRpzrlE04hashB0Sivg12CanvasNative13NSCVideoFrameC0fG6FormatO_Tgq5', symObjAddr: 0x68, symBinAddr: 0x6B14, symSize: 0x70 } - - { offsetInCU: 0xA0D, offset: 0x7BEDF, size: 0x8, addend: 0x0, symName: '_$sSYsSHRzSH8RawValueSYRpzrlE08_rawHashB04seedS2i_tF12CanvasNative13NSCVideoFrameC0hI6FormatO_Tgq5', symObjAddr: 0x138, symBinAddr: 0x6BE4, symSize: 0x6C } - - { offsetInCU: 0xABB, offset: 0x7BF8D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11pixelBufferSo11CVBufferRefavg', symObjAddr: 0x280, symBinAddr: 0x6D2C, symSize: 0x44 } - - { offsetInCU: 0xADA, offset: 0x7BFAC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC9timestamps5Int64Vvg', symObjAddr: 0x2C4, symBinAddr: 0x6D70, symSize: 0x44 } - - { offsetInCU: 0xAF9, offset: 0x7BFCB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6formatAC0cD6FormatOvg', symObjAddr: 0x308, symBinAddr: 0x6DB4, symSize: 0x44 } - - { offsetInCU: 0xB59, offset: 0x7C02B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC010getCurrentD0yACSgSo8AVPlayerC_So0G15ItemVideoOutputCtKFZ', symObjAddr: 0x34C, symBinAddr: 0x6DF8, symSize: 0xE0 } - - { offsetInCU: 0xC04, offset: 0x7C0D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11currentTime5frameACSo6CMTimea_So11CVBufferRefatKcfC', symObjAddr: 0x42C, symBinAddr: 0x6ED8, symSize: 0x60 } - - { offsetInCU: 0xC3B, offset: 0x7C10D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11currentTime5frameACSo6CMTimea_So11CVBufferRefatKcfc', symObjAddr: 0x48C, symBinAddr: 0x6F38, symSize: 0x168 } - - { offsetInCU: 0xD36, offset: 0x7C208, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6buffer2tsACSo11CVBufferRefa_s5Int64VtKcfC', symObjAddr: 0x5F4, symBinAddr: 0x70A0, symSize: 0xF4 } - - { offsetInCU: 0xD8A, offset: 0x7C25C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6buffer2tsACSo11CVBufferRefa_s5Int64VtKcfc', symObjAddr: 0x6E8, symBinAddr: 0x7194, symSize: 0xF8 } - - { offsetInCU: 0xE0B, offset: 0x7C2DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC5cloneACyKF', symObjAddr: 0x7E0, symBinAddr: 0x728C, symSize: 0x144 } - - { offsetInCU: 0xEEB, offset: 0x7C3BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC9codedRectSo6CGRectVvg', symObjAddr: 0x98C, symBinAddr: 0x7438, symSize: 0x6C } - - { offsetInCU: 0xFA9, offset: 0x7C47B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11visibleRectSo6CGRectVvg', symObjAddr: 0x9F8, symBinAddr: 0x74A4, symSize: 0xB8 } - - { offsetInCU: 0x10EC, offset: 0x7C5BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfC', symObjAddr: 0xAB0, symBinAddr: 0x755C, symSize: 0x20 } - - { offsetInCU: 0x1100, offset: 0x7C5D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfc', symObjAddr: 0xAD0, symBinAddr: 0x757C, symSize: 0x2C } - - { offsetInCU: 0x1159, offset: 0x7C62B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCfD', symObjAddr: 0xB28, symBinAddr: 0x75D4, symSize: 0x30 } - - { offsetInCU: 0x4F, offset: 0x7C729, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5D88, symBinAddr: 0x10972E0, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x7C743, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5D90, symBinAddr: 0x10972E8, symSize: 0x0 } - - { offsetInCU: 0x83, offset: 0x7C75D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5D98, symBinAddr: 0x10972F0, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x7C777, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5DA0, symBinAddr: 0x10972F8, symSize: 0x0 } - - { offsetInCU: 0x101, offset: 0x7C7DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSYAASY8rawValuexSg03RawF0Qz_tcfCTW', symObjAddr: 0x31C, symBinAddr: 0x7E50, symSize: 0x30 } - - { offsetInCU: 0x133, offset: 0x7C80D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSYAASY8rawValue03RawF0QzvgTW', symObjAddr: 0x34C, symBinAddr: 0x7E80, symSize: 0x44 } - - { offsetInCU: 0x160, offset: 0x7C83A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValueAESgs6UInt32V_tcfCTf4nd_n', symObjAddr: 0x49F0, symBinAddr: 0xC524, symSize: 0x64 } - - { offsetInCU: 0x210, offset: 0x7C8EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0xB8, symBinAddr: 0x7BEC, symSize: 0x14 } - - { offsetInCU: 0x28E, offset: 0x7C968, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH9hashValueSivgTW', symObjAddr: 0xCC, symBinAddr: 0x7C00, symSize: 0x44 } - - { offsetInCU: 0x371, offset: 0x7CA4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x110, symBinAddr: 0x7C44, symSize: 0x28 } - - { offsetInCU: 0x3FA, offset: 0x7CAD4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvgTo', symObjAddr: 0x390, symBinAddr: 0x7EC4, symSize: 0x44 } - - { offsetInCU: 0x452, offset: 0x7CB2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvsTo', symObjAddr: 0x418, symBinAddr: 0x7F4C, symSize: 0x48 } - - { offsetInCU: 0x4C3, offset: 0x7CB9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x680, symBinAddr: 0x81B4, symSize: 0x10 } - - { offsetInCU: 0x4E3, offset: 0x7CBBD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x680, symBinAddr: 0x81B4, symSize: 0x10 } - - { offsetInCU: 0x519, offset: 0x7CBF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x690, symBinAddr: 0x81C4, symSize: 0x10 } - - { offsetInCU: 0x539, offset: 0x7CC13, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x690, symBinAddr: 0x81C4, symSize: 0x10 } - - { offsetInCU: 0x572, offset: 0x7CC4C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x6A0, symBinAddr: 0x81D4, symSize: 0x10 } - - { offsetInCU: 0x592, offset: 0x7CC6C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x6A0, symBinAddr: 0x81D4, symSize: 0x10 } - - { offsetInCU: 0x5C8, offset: 0x7CCA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x6B0, symBinAddr: 0x81E4, symSize: 0x10 } - - { offsetInCU: 0x5E8, offset: 0x7CCC2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x6B0, symBinAddr: 0x81E4, symSize: 0x10 } - - { offsetInCU: 0x621, offset: 0x7CCFB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x788, symBinAddr: 0x82BC, symSize: 0x44 } - - { offsetInCU: 0x65E, offset: 0x7CD38, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x810, symBinAddr: 0x8344, symSize: 0x30 } - - { offsetInCU: 0x6ED, offset: 0x7CDC7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0xA64, symBinAddr: 0x8598, symSize: 0x44 } - - { offsetInCU: 0x745, offset: 0x7CE1F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0xAEC, symBinAddr: 0x8620, symSize: 0x48 } - - { offsetInCU: 0x7A0, offset: 0x7CE7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0xB34, symBinAddr: 0x8668, symSize: 0x44 } - - { offsetInCU: 0x7F8, offset: 0x7CED2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0xBBC, symBinAddr: 0x86F0, symSize: 0x48 } - - { offsetInCU: 0x853, offset: 0x7CF2D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0xC04, symBinAddr: 0x8738, symSize: 0x10 } - - { offsetInCU: 0x873, offset: 0x7CF4D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0xC04, symBinAddr: 0x8738, symSize: 0x10 } - - { offsetInCU: 0x8A9, offset: 0x7CF83, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0xC14, symBinAddr: 0x8748, symSize: 0x10 } - - { offsetInCU: 0x8C9, offset: 0x7CFA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0xC14, symBinAddr: 0x8748, symSize: 0x10 } - - { offsetInCU: 0x902, offset: 0x7CFDC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0xC24, symBinAddr: 0x8758, symSize: 0x10 } - - { offsetInCU: 0x922, offset: 0x7CFFC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0xC24, symBinAddr: 0x8758, symSize: 0x10 } - - { offsetInCU: 0x958, offset: 0x7D032, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0xC34, symBinAddr: 0x8768, symSize: 0x10 } - - { offsetInCU: 0x978, offset: 0x7D052, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0xC34, symBinAddr: 0x8768, symSize: 0x10 } - - { offsetInCU: 0x9B1, offset: 0x7D08B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0xC44, symBinAddr: 0x8778, symSize: 0x10 } - - { offsetInCU: 0x9D1, offset: 0x7D0AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0xC44, symBinAddr: 0x8778, symSize: 0x10 } - - { offsetInCU: 0xA09, offset: 0x7D0E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0xC54, symBinAddr: 0x8788, symSize: 0x34 } - - { offsetInCU: 0xA62, offset: 0x7D13C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0xC88, symBinAddr: 0x87BC, symSize: 0x10 } - - { offsetInCU: 0xA82, offset: 0x7D15C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0xC88, symBinAddr: 0x87BC, symSize: 0x10 } - - { offsetInCU: 0xABA, offset: 0x7D194, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0xC98, symBinAddr: 0x87CC, symSize: 0x34 } - - { offsetInCU: 0xAFD, offset: 0x7D1D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidth12CoreGraphics7CGFloatVvgTo', symObjAddr: 0xCCC, symBinAddr: 0x8800, symSize: 0x3C } - - { offsetInCU: 0xB45, offset: 0x7D21F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeight12CoreGraphics7CGFloatVvgTo', symObjAddr: 0xDA4, symBinAddr: 0x88D8, symSize: 0x3C } - - { offsetInCU: 0xB77, offset: 0x7D251, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21drawingBufferWidthRaw12CoreGraphics7CGFloatVvgTo', symObjAddr: 0xE7C, symBinAddr: 0x89B0, symSize: 0x3C } - - { offsetInCU: 0xBA9, offset: 0x7D283, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22drawingBufferHeightRaw12CoreGraphics7CGFloatVvgTo', symObjAddr: 0xF04, symBinAddr: 0x8A38, symSize: 0x3C } - - { offsetInCU: 0xBF1, offset: 0x7D2CB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xF8C, symBinAddr: 0x8AC0, symSize: 0x20 } - - { offsetInCU: 0xC59, offset: 0x7D333, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xFD0, symBinAddr: 0x8B04, symSize: 0x20 } - - { offsetInCU: 0xCF8, offset: 0x7D3D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x1038, symBinAddr: 0x8B6C, symSize: 0xC4 } - - { offsetInCU: 0xE04, offset: 0x7D4DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0x1234, symBinAddr: 0x8D68, symSize: 0x30 } - - { offsetInCU: 0xE98, offset: 0x7D572, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x1A54, symBinAddr: 0x9588, symSize: 0xC4 } - - { offsetInCU: 0xF02, offset: 0x7D5DC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x1DF0, symBinAddr: 0x9924, symSize: 0xB0 } - - { offsetInCU: 0xF3A, offset: 0x7D614, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1F84, symBinAddr: 0x9AB8, symSize: 0x3C } - - { offsetInCU: 0xF6D, offset: 0x7D647, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1FC0, symBinAddr: 0x9AF4, symSize: 0x10 } - - { offsetInCU: 0xF8D, offset: 0x7D667, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1FC0, symBinAddr: 0x9AF4, symSize: 0x10 } - - { offsetInCU: 0xFC7, offset: 0x7D6A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1FD0, symBinAddr: 0x9B04, symSize: 0x34 } - - { offsetInCU: 0x1022, offset: 0x7D6FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x204C, symBinAddr: 0x9B80, symSize: 0x48 } - - { offsetInCU: 0x10BC, offset: 0x7D796, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x20E0, symBinAddr: 0x9C14, symSize: 0x64 } - - { offsetInCU: 0x1181, offset: 0x7D85B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x219C, symBinAddr: 0x9CD0, symSize: 0x94 } - - { offsetInCU: 0x120E, offset: 0x7D8E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x2270, symBinAddr: 0x9DA4, symSize: 0x6C } - - { offsetInCU: 0x1270, offset: 0x7D94A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x2380, symBinAddr: 0x9EB4, symSize: 0x6C } - - { offsetInCU: 0x12CD, offset: 0x7D9A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x23EC, symBinAddr: 0x9F20, symSize: 0xB0 } - - { offsetInCU: 0x131F, offset: 0x7D9F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x256C, symBinAddr: 0xA0A0, symSize: 0x94 } - - { offsetInCU: 0x13AE, offset: 0x7DA88, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x285C, symBinAddr: 0xA390, symSize: 0x3C } - - { offsetInCU: 0x141A, offset: 0x7DAF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2B70, symBinAddr: 0xA6A4, symSize: 0x20 } - - { offsetInCU: 0x1497, offset: 0x7DB71, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x2E28, symBinAddr: 0xA95C, symSize: 0x44 } - - { offsetInCU: 0x14F1, offset: 0x7DBCB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x2EB0, symBinAddr: 0xA9E4, symSize: 0x6C } - - { offsetInCU: 0x1583, offset: 0x7DC5D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x30A0, symBinAddr: 0xABD4, symSize: 0x20 } - - { offsetInCU: 0x15DD, offset: 0x7DCB7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x30C0, symBinAddr: 0xABF4, symSize: 0x34 } - - { offsetInCU: 0x163D, offset: 0x7DD17, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3124, symBinAddr: 0xAC58, symSize: 0x34 } - - { offsetInCU: 0x16A8, offset: 0x7DD82, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivgTo', symObjAddr: 0x3158, symBinAddr: 0xAC8C, symSize: 0x44 } - - { offsetInCU: 0x1719, offset: 0x7DDF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivsTo', symObjAddr: 0x31E0, symBinAddr: 0xAD14, symSize: 0xAC } - - { offsetInCU: 0x17E9, offset: 0x7DEC3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivgTo', symObjAddr: 0x3488, symBinAddr: 0xAFBC, symSize: 0x44 } - - { offsetInCU: 0x185A, offset: 0x7DF34, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivsTo', symObjAddr: 0x3510, symBinAddr: 0xB044, symSize: 0xAC } - - { offsetInCU: 0x1960, offset: 0x7E03A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x3AF0, symBinAddr: 0xB624, symSize: 0x40 } - - { offsetInCU: 0x19C6, offset: 0x7E0A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x3D18, symBinAddr: 0xB84C, symSize: 0x28 } - - { offsetInCU: 0x19F9, offset: 0x7E0D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x4058, symBinAddr: 0xBB8C, symSize: 0x24 } - - { offsetInCU: 0x1A37, offset: 0x7E111, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x4150, symBinAddr: 0xBC84, symSize: 0x14 } - - { offsetInCU: 0x1A7D, offset: 0x7E157, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x5520, symBinAddr: 0xD050, symSize: 0x2A8 } - - { offsetInCU: 0x1C9C, offset: 0x7E376, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x4EC, symBinAddr: 0x8020, symSize: 0x40 } - - { offsetInCU: 0x1CE1, offset: 0x7E3BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x52C, symBinAddr: 0x8060, symSize: 0x30 } - - { offsetInCU: 0x1D26, offset: 0x7E400, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x594, symBinAddr: 0x80C8, symSize: 0x40 } - - { offsetInCU: 0x1E5D, offset: 0x7E537, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x2244, symBinAddr: 0x9D78, symSize: 0x2C } - - { offsetInCU: 0x1E75, offset: 0x7E54F, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x24F4, symBinAddr: 0xA028, symSize: 0x78 } - - { offsetInCU: 0x1E8D, offset: 0x7E567, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x265C, symBinAddr: 0xA190, symSize: 0x94 } - - { offsetInCU: 0x1EC5, offset: 0x7E59F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x26F0, symBinAddr: 0xA224, symSize: 0xB8 } - - { offsetInCU: 0x1F07, offset: 0x7E5E1, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x27A8, symBinAddr: 0xA2DC, symSize: 0x6C } - - { offsetInCU: 0x1F87, offset: 0x7E661, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivpACTk', symObjAddr: 0x331C, symBinAddr: 0xAE50, symSize: 0x94 } - - { offsetInCU: 0x202D, offset: 0x7E707, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivpACTk', symObjAddr: 0x3640, symBinAddr: 0xB174, symSize: 0x88 } - - { offsetInCU: 0x20E3, offset: 0x7E7BD, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x3CCC, symBinAddr: 0xB800, symSize: 0x4C } - - { offsetInCU: 0x20FB, offset: 0x7E7D5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x407C, symBinAddr: 0xBBB0, symSize: 0xC4 } - - { offsetInCU: 0x2147, offset: 0x7E821, size: 0x8, addend: 0x0, symName: '_$sSo6UIViewC12CanvasNativeE21getBoundingClientRectyySvFTo', symObjAddr: 0x4204, symBinAddr: 0xBD38, symSize: 0x30 } - - { offsetInCU: 0x22E2, offset: 0x7E9BC, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x4A54, symBinAddr: 0xC588, symSize: 0x10 } - - { offsetInCU: 0x22F6, offset: 0x7E9D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x4A64, symBinAddr: 0xC598, symSize: 0x20 } - - { offsetInCU: 0x230A, offset: 0x7E9E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFySo7NSTimerCYbcfU_TA', symObjAddr: 0x4AA8, symBinAddr: 0xC5DC, symSize: 0x24 } - - { offsetInCU: 0x235D, offset: 0x7EA37, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x4ACC, symBinAddr: 0xC600, symSize: 0x10 } - - { offsetInCU: 0x2371, offset: 0x7EA4B, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x4ADC, symBinAddr: 0xC610, symSize: 0x8 } - - { offsetInCU: 0x2385, offset: 0x7EA5F, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x4AE4, symBinAddr: 0xC618, symSize: 0x40 } - - { offsetInCU: 0x2399, offset: 0x7EA73, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x4B24, symBinAddr: 0xC658, symSize: 0x40 } - - { offsetInCU: 0x23AD, offset: 0x7EA87, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x4B64, symBinAddr: 0xC698, symSize: 0x24 } - - { offsetInCU: 0x23C1, offset: 0x7EA9B, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x4B88, symBinAddr: 0xC6BC, symSize: 0x20 } - - { offsetInCU: 0x23D5, offset: 0x7EAAF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASQWb', symObjAddr: 0x4BA8, symBinAddr: 0xC6DC, symSize: 0x4 } - - { offsetInCU: 0x23E9, offset: 0x7EAC3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOAESQAAWl', symObjAddr: 0x4BAC, symBinAddr: 0xC6E0, symSize: 0x44 } - - { offsetInCU: 0x23FD, offset: 0x7EAD7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOMa', symObjAddr: 0x5230, symBinAddr: 0xCD64, symSize: 0x10 } - - { offsetInCU: 0x2411, offset: 0x7EAEB, size: 0x8, addend: 0x0, symName: ___swift_memcpy1_1, symObjAddr: 0x5240, symBinAddr: 0xCD74, symSize: 0xC } - - { offsetInCU: 0x2425, offset: 0x7EAFF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwet', symObjAddr: 0x5250, symBinAddr: 0xCD80, symSize: 0x90 } - - { offsetInCU: 0x2439, offset: 0x7EB13, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwst', symObjAddr: 0x52E0, symBinAddr: 0xCE10, symSize: 0xBC } - - { offsetInCU: 0x244D, offset: 0x7EB27, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwug', symObjAddr: 0x539C, symBinAddr: 0xCECC, symSize: 0x8 } - - { offsetInCU: 0x2461, offset: 0x7EB3B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwup', symObjAddr: 0x53A4, symBinAddr: 0xCED4, symSize: 0x4 } - - { offsetInCU: 0x2475, offset: 0x7EB4F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwui', symObjAddr: 0x53A8, symBinAddr: 0xCED8, symSize: 0x8 } - - { offsetInCU: 0x2489, offset: 0x7EB63, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOMa', symObjAddr: 0x53B0, symBinAddr: 0xCEE0, symSize: 0x10 } - - { offsetInCU: 0x249D, offset: 0x7EB77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASQWb', symObjAddr: 0x53C0, symBinAddr: 0xCEF0, symSize: 0x4 } - - { offsetInCU: 0x24B1, offset: 0x7EB8B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOAESQAAWl', symObjAddr: 0x53C4, symBinAddr: 0xCEF4, symSize: 0x44 } - - { offsetInCU: 0x252B, offset: 0x7EC05, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x5A5C, symBinAddr: 0xD58C, symSize: 0x48 } - - { offsetInCU: 0x2554, offset: 0x7EC2E, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x5AA4, symBinAddr: 0xD5D4, symSize: 0x10 } - - { offsetInCU: 0x2573, offset: 0x7EC4D, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x5AB4, symBinAddr: 0xD5E4, symSize: 0xC } - - { offsetInCU: 0x259C, offset: 0x7EC76, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x5AE4, symBinAddr: 0xD614, symSize: 0x8 } - - { offsetInCU: 0x25BB, offset: 0x7EC95, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x5AEC, symBinAddr: 0xD61C, symSize: 0x30 } - - { offsetInCU: 0x25E4, offset: 0x7ECBE, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5B1C, symBinAddr: 0xD64C, symSize: 0x10 } - - { offsetInCU: 0x25F8, offset: 0x7ECD2, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x5B64, symBinAddr: 0xD694, symSize: 0x3C } - - { offsetInCU: 0x2676, offset: 0x7ED50, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF12CanvasNative9NSCCanvasC0D3FitO_Tgq5', symObjAddr: 0x0, symBinAddr: 0x7B34, symSize: 0x5C } - - { offsetInCU: 0x26F1, offset: 0x7EDCB, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF12CanvasNative13NSCVideoFrameC0fG6FormatO_Tgq5', symObjAddr: 0x5C, symBinAddr: 0x7B90, symSize: 0x5C } - - { offsetInCU: 0x27C9, offset: 0x7EEA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x138, symBinAddr: 0x7C6C, symSize: 0x40 } - - { offsetInCU: 0x286B, offset: 0x7EF45, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x1CC, symBinAddr: 0x7D00, symSize: 0xC } - - { offsetInCU: 0x28EB, offset: 0x7EFC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH9hashValueSivgTW', symObjAddr: 0x1D8, symBinAddr: 0x7D0C, symSize: 0x78 } - - { offsetInCU: 0x2997, offset: 0x7F071, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x250, symBinAddr: 0x7D84, symSize: 0x58 } - - { offsetInCU: 0x2A07, offset: 0x7F0E1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x2A8, symBinAddr: 0x7DDC, symSize: 0x74 } - - { offsetInCU: 0x2C9D, offset: 0x7F377, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x5408, symBinAddr: 0xCF38, symSize: 0x118 } - - { offsetInCU: 0x3109, offset: 0x7F7E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValues6UInt32Vvg', symObjAddr: 0x178, symBinAddr: 0x7CAC, symSize: 0x3C } - - { offsetInCU: 0x312E, offset: 0x7F808, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValueAESgs6UInt32V_tcfC', symObjAddr: 0x1B4, symBinAddr: 0x7CE8, symSize: 0x18 } - - { offsetInCU: 0x317E, offset: 0x7F858, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvg', symObjAddr: 0x3D4, symBinAddr: 0x7F08, symSize: 0x44 } - - { offsetInCU: 0x31BD, offset: 0x7F897, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvs', symObjAddr: 0x460, symBinAddr: 0x7F94, symSize: 0x48 } - - { offsetInCU: 0x31E6, offset: 0x7F8C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM', symObjAddr: 0x4A8, symBinAddr: 0x7FDC, symSize: 0x44 } - - { offsetInCU: 0x32D8, offset: 0x7F9B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x7CC, symBinAddr: 0x8300, symSize: 0x44 } - - { offsetInCU: 0x330B, offset: 0x7F9E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x840, symBinAddr: 0x8374, symSize: 0xEC } - - { offsetInCU: 0x3357, offset: 0x7FA31, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x92C, symBinAddr: 0x8460, symSize: 0x58 } - - { offsetInCU: 0x337C, offset: 0x7FA56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x984, symBinAddr: 0x84B8, symSize: 0xE0 } - - { offsetInCU: 0x33BD, offset: 0x7FA97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0xAA8, symBinAddr: 0x85DC, symSize: 0x44 } - - { offsetInCU: 0x3415, offset: 0x7FAEF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0xB78, symBinAddr: 0x86AC, symSize: 0x44 } - - { offsetInCU: 0x3570, offset: 0x7FC4A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidth12CoreGraphics7CGFloatVvg', symObjAddr: 0xD08, symBinAddr: 0x883C, symSize: 0x9C } - - { offsetInCU: 0x35B3, offset: 0x7FC8D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeight12CoreGraphics7CGFloatVvg', symObjAddr: 0xDE0, symBinAddr: 0x8914, symSize: 0x9C } - - { offsetInCU: 0x35F6, offset: 0x7FCD0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21drawingBufferWidthRaw12CoreGraphics7CGFloatVvg', symObjAddr: 0xEB8, symBinAddr: 0x89EC, symSize: 0x4C } - - { offsetInCU: 0x3637, offset: 0x7FD11, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22drawingBufferHeightRaw12CoreGraphics7CGFloatVvg', symObjAddr: 0xF40, symBinAddr: 0x8A74, symSize: 0x4C } - - { offsetInCU: 0x3699, offset: 0x7FD73, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xFAC, symBinAddr: 0x8AE0, symSize: 0x24 } - - { offsetInCU: 0x36E1, offset: 0x7FDBB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xFF0, symBinAddr: 0x8B24, symSize: 0x24 } - - { offsetInCU: 0x3715, offset: 0x7FDEF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0x1014, symBinAddr: 0x8B48, symSize: 0x24 } - - { offsetInCU: 0x38DF, offset: 0x7FFB9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0x10FC, symBinAddr: 0x8C30, symSize: 0x138 } - - { offsetInCU: 0x3C5B, offset: 0x80335, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0x1264, symBinAddr: 0x8D98, symSize: 0x7F0 } - - { offsetInCU: 0x43D8, offset: 0x80AB2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x1B18, symBinAddr: 0x964C, symSize: 0x2D8 } - - { offsetInCU: 0x481E, offset: 0x80EF8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1EA0, symBinAddr: 0x99D4, symSize: 0xE4 } - - { offsetInCU: 0x4979, offset: 0x81053, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x2004, symBinAddr: 0x9B38, symSize: 0x48 } - - { offsetInCU: 0x49FF, offset: 0x810D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x2094, symBinAddr: 0x9BC8, symSize: 0x4C } - - { offsetInCU: 0x4B20, offset: 0x811FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x2144, symBinAddr: 0x9C78, symSize: 0x58 } - - { offsetInCU: 0x4C16, offset: 0x812F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x249C, symBinAddr: 0x9FD0, symSize: 0x58 } - - { offsetInCU: 0x4C62, offset: 0x8133C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x2600, symBinAddr: 0xA134, symSize: 0x5C } - - { offsetInCU: 0x4C8B, offset: 0x81365, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x2814, symBinAddr: 0xA348, symSize: 0x44 } - - { offsetInCU: 0x4CB1, offset: 0x8138B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x2858, symBinAddr: 0xA38C, symSize: 0x4 } - - { offsetInCU: 0x4CDA, offset: 0x813B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x2898, symBinAddr: 0xA3CC, symSize: 0x50 } - - { offsetInCU: 0x4D0F, offset: 0x813E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x28E8, symBinAddr: 0xA41C, symSize: 0x288 } - - { offsetInCU: 0x4E73, offset: 0x8154D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14initializeView33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x2B90, symBinAddr: 0xA6C4, symSize: 0x298 } - - { offsetInCU: 0x50D5, offset: 0x817AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvg', symObjAddr: 0x2E6C, symBinAddr: 0xA9A0, symSize: 0x44 } - - { offsetInCU: 0x5116, offset: 0x817F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvs', symObjAddr: 0x2F1C, symBinAddr: 0xAA50, symSize: 0x54 } - - { offsetInCU: 0x513B, offset: 0x81815, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x2F70, symBinAddr: 0xAAA4, symSize: 0xB8 } - - { offsetInCU: 0x51F7, offset: 0x818D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvM', symObjAddr: 0x3028, symBinAddr: 0xAB5C, symSize: 0x48 } - - { offsetInCU: 0x521D, offset: 0x818F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvM.resume.0', symObjAddr: 0x3070, symBinAddr: 0xABA4, symSize: 0x30 } - - { offsetInCU: 0x527B, offset: 0x81955, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x30F4, symBinAddr: 0xAC28, symSize: 0x30 } - - { offsetInCU: 0x52ED, offset: 0x819C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivg', symObjAddr: 0x319C, symBinAddr: 0xACD0, symSize: 0x44 } - - { offsetInCU: 0x5348, offset: 0x81A22, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivs', symObjAddr: 0x328C, symBinAddr: 0xADC0, symSize: 0x90 } - - { offsetInCU: 0x53D9, offset: 0x81AB3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivM', symObjAddr: 0x33B0, symBinAddr: 0xAEE4, symSize: 0x58 } - - { offsetInCU: 0x53FF, offset: 0x81AD9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivM.resume.0', symObjAddr: 0x3408, symBinAddr: 0xAF3C, symSize: 0x80 } - - { offsetInCU: 0x5478, offset: 0x81B52, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivg', symObjAddr: 0x34CC, symBinAddr: 0xB000, symSize: 0x44 } - - { offsetInCU: 0x54CE, offset: 0x81BA8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivs', symObjAddr: 0x35BC, symBinAddr: 0xB0F0, symSize: 0x84 } - - { offsetInCU: 0x555F, offset: 0x81C39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivM', symObjAddr: 0x36C8, symBinAddr: 0xB1FC, symSize: 0x58 } - - { offsetInCU: 0x5585, offset: 0x81C5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivM.resume.0', symObjAddr: 0x3720, symBinAddr: 0xB254, symSize: 0x74 } - - { offsetInCU: 0x5662, offset: 0x81D3C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3794, symBinAddr: 0xB2C8, symSize: 0x234 } - - { offsetInCU: 0x59DA, offset: 0x820B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x39C8, symBinAddr: 0xB4FC, symSize: 0x128 } - - { offsetInCU: 0x5B91, offset: 0x8226B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3B30, symBinAddr: 0xB664, symSize: 0x19C } - - { offsetInCU: 0x5CC0, offset: 0x8239A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x3D40, symBinAddr: 0xB874, symSize: 0x318 } - - { offsetInCU: 0x5D50, offset: 0x8242A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x4140, symBinAddr: 0xBC74, symSize: 0x10 } - - { offsetInCU: 0x5DBB, offset: 0x82495, size: 0x8, addend: 0x0, symName: '_$sSo6UIViewC12CanvasNativeE21getBoundingClientRectyySvF', symObjAddr: 0x4164, symBinAddr: 0xBC98, symSize: 0xA0 } - - { offsetInCU: 0x5EF6, offset: 0x825D0, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x4234, symBinAddr: 0xBD68, symSize: 0x64 } - - { offsetInCU: 0x5F50, offset: 0x8262A, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x4298, symBinAddr: 0xBDCC, symSize: 0x6C } - - { offsetInCU: 0x5FD0, offset: 0x826AA, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x4304, symBinAddr: 0xBE38, symSize: 0xD8 } - - { offsetInCU: 0x600D, offset: 0x826E7, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x43DC, symBinAddr: 0xBF10, symSize: 0xE0 } - - { offsetInCU: 0x6088, offset: 0x82762, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x44BC, symBinAddr: 0xBFF0, symSize: 0x1F4 } - - { offsetInCU: 0x6144, offset: 0x8281E, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x46B0, symBinAddr: 0xC1E4, symSize: 0x340 } - - { offsetInCU: 0x630E, offset: 0x829E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTf4gn_n', symObjAddr: 0x57C8, symBinAddr: 0xD2F8, symSize: 0x270 } - - { offsetInCU: 0x27, offset: 0x82B4A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xD740, symSize: 0x10 } - - { offsetInCU: 0x62, offset: 0x82B85, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x10, symBinAddr: 0xD750, symSize: 0x20 } - - { offsetInCU: 0x1AF, offset: 0x82CD2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xD740, symSize: 0x10 } - - { offsetInCU: 0x27, offset: 0x82D23, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTo', symObjAddr: 0x0, symBinAddr: 0xD770, symSize: 0x44 } - - { offsetInCU: 0x7D, offset: 0x82D79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTo', symObjAddr: 0x0, symBinAddr: 0xD770, symSize: 0x44 } - - { offsetInCU: 0xDB, offset: 0x82DD7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0xB4, symBinAddr: 0xD824, symSize: 0x3C } - - { offsetInCU: 0x12C, offset: 0x82E28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTf4nnndddd_n', symObjAddr: 0x120, symBinAddr: 0xD890, symSize: 0x148 } - - { offsetInCU: 0x22C, offset: 0x82F28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x94, symBinAddr: 0xD804, symSize: 0x20 } - - { offsetInCU: 0x3ED, offset: 0x830E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x44, symBinAddr: 0xD7B4, symSize: 0x20 } - - { offsetInCU: 0x401, offset: 0x830FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x64, symBinAddr: 0xD7D4, symSize: 0x30 } - - { offsetInCU: 0x437, offset: 0x83133, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xF0, symBinAddr: 0xD860, symSize: 0x30 } - - { offsetInCU: 0xD1, offset: 0x83277, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0xFC4, symBinAddr: 0xE974, symSize: 0x68 } - - { offsetInCU: 0x161, offset: 0x83307, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0x1038, symBinAddr: 0xE9E8, symSize: 0x10 } - - { offsetInCU: 0x190, offset: 0x83336, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0x1048, symBinAddr: 0xE9F8, symSize: 0x4 } - - { offsetInCU: 0x32D, offset: 0x834D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x17CC, symBinAddr: 0xF17C, symSize: 0x2C } - - { offsetInCU: 0x5D4, offset: 0x8377A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1834, symBinAddr: 0xF1E4, symSize: 0x68 } - - { offsetInCU: 0x603, offset: 0x837A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x189C, symBinAddr: 0xF24C, symSize: 0x20 } - - { offsetInCU: 0x617, offset: 0x837BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x18BC, symBinAddr: 0xF26C, symSize: 0x20 } - - { offsetInCU: 0x62B, offset: 0x837D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x18DC, symBinAddr: 0xF28C, symSize: 0x30 } - - { offsetInCU: 0x63F, offset: 0x837E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x190C, symBinAddr: 0xF2BC, symSize: 0x8 } - - { offsetInCU: 0x653, offset: 0x837F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1914, symBinAddr: 0xF2C4, symSize: 0x44 } - - { offsetInCU: 0x667, offset: 0x8380D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1958, symBinAddr: 0xF308, symSize: 0x64 } - - { offsetInCU: 0x67B, offset: 0x83821, size: 0x8, addend: 0x0, symName: ___swift_memcpy33_8, symObjAddr: 0x19BC, symBinAddr: 0xF36C, symSize: 0x14 } - - { offsetInCU: 0x68F, offset: 0x83835, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x19D0, symBinAddr: 0xF380, symSize: 0x4C } - - { offsetInCU: 0x6A3, offset: 0x83849, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x1A1C, symBinAddr: 0xF3CC, symSize: 0x48 } - - { offsetInCU: 0x6B7, offset: 0x8385D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1A64, symBinAddr: 0xF414, symSize: 0x44 } - - { offsetInCU: 0x6CB, offset: 0x83871, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1AA8, symBinAddr: 0xF458, symSize: 0x10 } - - { offsetInCU: 0x6DF, offset: 0x83885, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1AB8, symBinAddr: 0xF468, symSize: 0x48 } - - { offsetInCU: 0x6F3, offset: 0x83899, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1BC4, symBinAddr: 0xF4B0, symSize: 0x58 } - - { offsetInCU: 0x707, offset: 0x838AD, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1C1C, symBinAddr: 0xF508, symSize: 0x8 } - - { offsetInCU: 0x71B, offset: 0x838C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVWOs', symObjAddr: 0x1C5C, symBinAddr: 0xF548, symSize: 0x28 } - - { offsetInCU: 0x74F, offset: 0x838F5, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x1C98, symBinAddr: 0xF584, symSize: 0x10 } - - { offsetInCU: 0xCE3, offset: 0x83E89, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xD9D8, symSize: 0x534 } - - { offsetInCU: 0xF7A, offset: 0x84120, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x540, symBinAddr: 0xDF18, symSize: 0xE0 } - - { offsetInCU: 0xFF9, offset: 0x8419F, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x6E4, symBinAddr: 0xE0A8, symSize: 0xB8 } - - { offsetInCU: 0x108C, offset: 0x84232, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0xEBC, symBinAddr: 0xE86C, symSize: 0x108 } - - { offsetInCU: 0x11D6, offset: 0x8437C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x13C0, symBinAddr: 0xED70, symSize: 0x40C } - - { offsetInCU: 0x18EC, offset: 0x84A92, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1C84, symBinAddr: 0xF570, symSize: 0x14 } - - { offsetInCU: 0x198B, offset: 0x84B31, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1CA8, symBinAddr: 0xF594, symSize: 0x1E4 } - - { offsetInCU: 0x27, offset: 0x84D0E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xF778, symSize: 0x2C } - - { offsetInCU: 0x4B, offset: 0x84D32, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2D8, symBinAddr: 0x1097578, symSize: 0x0 } - - { offsetInCU: 0x65, offset: 0x84D4C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xF778, symSize: 0x2C } - - { offsetInCU: 0x98, offset: 0x84D7F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x178, symBinAddr: 0xF8F0, symSize: 0x40 } - - { offsetInCU: 0x104, offset: 0x84DEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x228, symBinAddr: 0xF9A0, symSize: 0x3C } - - { offsetInCU: 0x156, offset: 0x84E3D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x2C, symBinAddr: 0xF7A4, symSize: 0x10C } - - { offsetInCU: 0x181, offset: 0x84E68, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x208, symBinAddr: 0xF980, symSize: 0x20 } - - { offsetInCU: 0x195, offset: 0x84E7C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x294, symBinAddr: 0xFA0C, symSize: 0x4 } - - { offsetInCU: 0x1C0, offset: 0x84EA7, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x298, symBinAddr: 0xFA10, symSize: 0x3C } - - { offsetInCU: 0x348, offset: 0x8502F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x138, symBinAddr: 0xF8B0, symSize: 0x40 } - - { offsetInCU: 0x388, offset: 0x8506F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x1B8, symBinAddr: 0xF930, symSize: 0x20 } - - { offsetInCU: 0x39C, offset: 0x85083, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1D8, symBinAddr: 0xF950, symSize: 0x30 } - - { offsetInCU: 0x3D8, offset: 0x850BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x264, symBinAddr: 0xF9DC, symSize: 0x30 } - - { offsetInCU: 0x2B, offset: 0x8510D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xFA4C, symSize: 0xA4 } - - { offsetInCU: 0x66, offset: 0x85148, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZTo', symObjAddr: 0xA4, symBinAddr: 0xFAF0, symSize: 0xA4 } - - { offsetInCU: 0xF9, offset: 0x851DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheH0a_AFSo012CFDictionaryH0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D8, symBinAddr: 0xFC24, symSize: 0x110 } - - { offsetInCU: 0x1A2, offset: 0x85284, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x30C, symBinAddr: 0xFD58, symSize: 0x28 } - - { offsetInCU: 0x21D, offset: 0x852FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZTo', symObjAddr: 0x338, symBinAddr: 0xFD84, symSize: 0x64 } - - { offsetInCU: 0x296, offset: 0x85378, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x494, symBinAddr: 0xFEE0, symSize: 0x15C } - - { offsetInCU: 0x32B, offset: 0x8540D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfcTo', symObjAddr: 0x640, symBinAddr: 0x1008C, symSize: 0x3C } - - { offsetInCU: 0x37C, offset: 0x8545E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZTf4nnndddd_n', symObjAddr: 0x6AC, symBinAddr: 0x100F8, symSize: 0x18C } - - { offsetInCU: 0x4C0, offset: 0x855A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC7getFile33_086607F85A042F2B265C7E71FFB9771CLLyS2SKFZTf4nd_g', symObjAddr: 0x838, symBinAddr: 0x10284, symSize: 0x2E4 } - - { offsetInCU: 0x58F, offset: 0x85671, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCMa', symObjAddr: 0xB1C, symBinAddr: 0x10568, symSize: 0x20 } - - { offsetInCU: 0x5A3, offset: 0x85685, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwCP', symObjAddr: 0xB3C, symBinAddr: 0x10588, symSize: 0x2C } - - { offsetInCU: 0x5B7, offset: 0x85699, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwxx', symObjAddr: 0xB68, symBinAddr: 0x105B4, symSize: 0x8 } - - { offsetInCU: 0x5CB, offset: 0x856AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwca', symObjAddr: 0xB70, symBinAddr: 0x105BC, symSize: 0x40 } - - { offsetInCU: 0x5DF, offset: 0x856C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwta', symObjAddr: 0xBBC, symBinAddr: 0x105FC, symSize: 0x30 } - - { offsetInCU: 0x5F3, offset: 0x856D5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwet', symObjAddr: 0xBEC, symBinAddr: 0x1062C, symSize: 0x48 } - - { offsetInCU: 0x607, offset: 0x856E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwst', symObjAddr: 0xC34, symBinAddr: 0x10674, symSize: 0x3C } - - { offsetInCU: 0x61B, offset: 0x856FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwug', symObjAddr: 0xC70, symBinAddr: 0x106B0, symSize: 0x8 } - - { offsetInCU: 0x62F, offset: 0x85711, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwup', symObjAddr: 0xC78, symBinAddr: 0x106B8, symSize: 0x4 } - - { offsetInCU: 0x643, offset: 0x85725, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwui', symObjAddr: 0xC7C, symBinAddr: 0x106BC, symSize: 0x4 } - - { offsetInCU: 0x657, offset: 0x85739, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOMa', symObjAddr: 0xC80, symBinAddr: 0x106C0, symSize: 0x10 } - - { offsetInCU: 0x6DF, offset: 0x857C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x39C, symBinAddr: 0xFDE8, symSize: 0x4 } - - { offsetInCU: 0x6FB, offset: 0x857DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3A0, symBinAddr: 0xFDEC, symSize: 0x4 } - - { offsetInCU: 0x717, offset: 0x857F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3A4, symBinAddr: 0xFDF0, symSize: 0x4 } - - { offsetInCU: 0x733, offset: 0x85815, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x3A8, symBinAddr: 0xFDF4, symSize: 0x4 } - - { offsetInCU: 0xA01, offset: 0x85AE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xFA4C, symSize: 0xA4 } - - { offsetInCU: 0xA97, offset: 0x85B79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheH0a_AFSo012CFDictionaryH0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x148, symBinAddr: 0xFB94, symSize: 0x90 } - - { offsetInCU: 0xC34, offset: 0x85D16, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2E8, symBinAddr: 0xFD34, symSize: 0x24 } - - { offsetInCU: 0xC7E, offset: 0x85D60, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZ', symObjAddr: 0x334, symBinAddr: 0xFD80, symSize: 0x4 } - - { offsetInCU: 0xCA0, offset: 0x85D82, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x3AC, symBinAddr: 0xFDF8, symSize: 0xE8 } - - { offsetInCU: 0xD50, offset: 0x85E32, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfC', symObjAddr: 0x5F0, symBinAddr: 0x1003C, symSize: 0x20 } - - { offsetInCU: 0xD64, offset: 0x85E46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfc', symObjAddr: 0x610, symBinAddr: 0x1005C, symSize: 0x30 } - - { offsetInCU: 0xD9A, offset: 0x85E7C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCfD', symObjAddr: 0x67C, symBinAddr: 0x100C8, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x85F67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x106D4, symSize: 0x4 } - - { offsetInCU: 0x71, offset: 0x85FB1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x4, symBinAddr: 0x106D8, symSize: 0x70 } - - { offsetInCU: 0xF6, offset: 0x86036, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x78, symBinAddr: 0x1074C, symSize: 0x5C } - - { offsetInCU: 0x191, offset: 0x860D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xD8, symBinAddr: 0x107AC, symSize: 0x74 } - - { offsetInCU: 0x254, offset: 0x86194, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x150, symBinAddr: 0x10824, symSize: 0xA4 } - - { offsetInCU: 0x323, offset: 0x86263, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x244, symBinAddr: 0x10918, symSize: 0x3C } - - { offsetInCU: 0x375, offset: 0x862B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x2B0, symBinAddr: 0x10984, symSize: 0x20 } - - { offsetInCU: 0x4E5, offset: 0x86425, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x106D4, symSize: 0x4 } - - { offsetInCU: 0x51D, offset: 0x8645D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x106D4, symSize: 0x4 } - - { offsetInCU: 0x582, offset: 0x864C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0x10748, symSize: 0x4 } - - { offsetInCU: 0x5C2, offset: 0x86502, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0x10748, symSize: 0x4 } - - { offsetInCU: 0x624, offset: 0x86564, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xD4, symBinAddr: 0x107A8, symSize: 0x4 } - - { offsetInCU: 0x676, offset: 0x865B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xD4, symBinAddr: 0x107A8, symSize: 0x4 } - - { offsetInCU: 0x6EB, offset: 0x8662B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x14C, symBinAddr: 0x10820, symSize: 0x4 } - - { offsetInCU: 0x761, offset: 0x866A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x14C, symBinAddr: 0x10820, symSize: 0x4 } - - { offsetInCU: 0x7FF, offset: 0x8673F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1F4, symBinAddr: 0x108C8, symSize: 0x20 } - - { offsetInCU: 0x813, offset: 0x86753, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x214, symBinAddr: 0x108E8, symSize: 0x30 } - - { offsetInCU: 0x84F, offset: 0x8678F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x280, symBinAddr: 0x10954, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x867ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x109A4, symSize: 0x14 } - - { offsetInCU: 0xA9, offset: 0x8686F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x14, symBinAddr: 0x109B8, symSize: 0x38 } - - { offsetInCU: 0x1A2, offset: 0x86968, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x68, symBinAddr: 0x10A0C, symSize: 0x40 } - - { offsetInCU: 0x284, offset: 0x86A4A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x118, symBinAddr: 0x10ABC, symSize: 0x3C } - - { offsetInCU: 0x2D6, offset: 0x86A9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0xF8, symBinAddr: 0x10A9C, symSize: 0x20 } - - { offsetInCU: 0x480, offset: 0x86C46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x109A4, symSize: 0x14 } - - { offsetInCU: 0x5C4, offset: 0x86D8A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x4C, symBinAddr: 0x109F0, symSize: 0x1C } - - { offsetInCU: 0x6FA, offset: 0x86EC0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0xA8, symBinAddr: 0x10A4C, symSize: 0x20 } - - { offsetInCU: 0x70E, offset: 0x86ED4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0xC8, symBinAddr: 0x10A6C, symSize: 0x30 } - - { offsetInCU: 0x744, offset: 0x86F0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x154, symBinAddr: 0x10AF8, symSize: 0x30 } - - { offsetInCU: 0x61, offset: 0x86F8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0x10B2C, symSize: 0x10 } - - { offsetInCU: 0x81, offset: 0x86FAE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0x10B2C, symSize: 0x10 } - - { offsetInCU: 0xB7, offset: 0x86FE4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0x10B3C, symSize: 0x10 } - - { offsetInCU: 0xD7, offset: 0x87004, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0x10B3C, symSize: 0x10 } - - { offsetInCU: 0x110, offset: 0x8703D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x24, symBinAddr: 0x10B4C, symSize: 0x48 } - - { offsetInCU: 0x168, offset: 0x87095, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xB4, symBinAddr: 0x10BDC, symSize: 0x50 } - - { offsetInCU: 0x1C3, offset: 0x870F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0x10C2C, symSize: 0x10 } - - { offsetInCU: 0x1E3, offset: 0x87110, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0x10C2C, symSize: 0x10 } - - { offsetInCU: 0x219, offset: 0x87146, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0x10C3C, symSize: 0x10 } - - { offsetInCU: 0x239, offset: 0x87166, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0x10C3C, symSize: 0x10 } - - { offsetInCU: 0x272, offset: 0x8719F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1B0, symBinAddr: 0x10CD8, symSize: 0x78 } - - { offsetInCU: 0x2C8, offset: 0x871F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2D4, symBinAddr: 0x10DFC, symSize: 0xB0 } - - { offsetInCU: 0x32A, offset: 0x87257, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x43C, symBinAddr: 0x10F64, symSize: 0x28 } - - { offsetInCU: 0x35C, offset: 0x87289, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x4E0, symBinAddr: 0x10F8C, symSize: 0xA0 } - - { offsetInCU: 0x3DD, offset: 0x8730A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x5BC, symBinAddr: 0x1102C, symSize: 0x60 } - - { offsetInCU: 0x44D, offset: 0x8737A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x620, symBinAddr: 0x11090, symSize: 0x4C } - - { offsetInCU: 0x4BF, offset: 0x873EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x70C, symBinAddr: 0x1117C, symSize: 0x34 } - - { offsetInCU: 0x533, offset: 0x87460, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x190, symBinAddr: 0x10CB8, symSize: 0x20 } - - { offsetInCU: 0x55D, offset: 0x8748A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x74C, symBinAddr: 0x111BC, symSize: 0x10 } - - { offsetInCU: 0x65B, offset: 0x87588, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xA08, symBinAddr: 0x11478, symSize: 0x74 } - - { offsetInCU: 0x699, offset: 0x875C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0x114EC, symSize: 0x10 } - - { offsetInCU: 0x6B9, offset: 0x875E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0x114EC, symSize: 0x10 } - - { offsetInCU: 0x6EF, offset: 0x8761C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x114FC, symSize: 0x10 } - - { offsetInCU: 0x70F, offset: 0x8763C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x114FC, symSize: 0x10 } - - { offsetInCU: 0x748, offset: 0x87675, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xA9C, symBinAddr: 0x1150C, symSize: 0x20 } - - { offsetInCU: 0x7A0, offset: 0x876CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xABC, symBinAddr: 0x1152C, symSize: 0x14 } - - { offsetInCU: 0x7FB, offset: 0x87728, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xAD0, symBinAddr: 0x11540, symSize: 0x44 } - - { offsetInCU: 0x853, offset: 0x87780, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xB58, symBinAddr: 0x115C8, symSize: 0x48 } - - { offsetInCU: 0x8E8, offset: 0x87815, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xCBC, symBinAddr: 0x1172C, symSize: 0x78 } - - { offsetInCU: 0x93E, offset: 0x8786B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xE34, symBinAddr: 0x118A4, symSize: 0xB0 } - - { offsetInCU: 0x9A0, offset: 0x878CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0x11A00, symSize: 0x28 } - - { offsetInCU: 0x9D2, offset: 0x878FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0xFB8, symBinAddr: 0x11A28, symSize: 0xB8 } - - { offsetInCU: 0xA53, offset: 0x87980, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x1074, symBinAddr: 0x11AE0, symSize: 0x28 } - - { offsetInCU: 0xAB1, offset: 0x879DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x10D8, symBinAddr: 0x11B44, symSize: 0x10 } - - { offsetInCU: 0xC63, offset: 0x87B90, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfC12CanvasNative15NSCTouchHandlerC7PointerV_Tgm5', symObjAddr: 0x125C, symBinAddr: 0x11CC8, symSize: 0x88 } - - { offsetInCU: 0xCE6, offset: 0x87C13, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgm5', symObjAddr: 0x12E4, symBinAddr: 0x11D50, symSize: 0x6C } - - { offsetInCU: 0xD6A, offset: 0x87C97, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x1508, symBinAddr: 0x11F74, symSize: 0x44 } - - { offsetInCU: 0xD7E, offset: 0x87CAB, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x154C, symBinAddr: 0x11FB8, symSize: 0x44 } - - { offsetInCU: 0xD92, offset: 0x87CBF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x1590, symBinAddr: 0x11FFC, symSize: 0x20 } - - { offsetInCU: 0xE6C, offset: 0x87D99, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x13D4, symBinAddr: 0x11E40, symSize: 0x124 } - - { offsetInCU: 0x112B, offset: 0x88058, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x6C, symBinAddr: 0x10B94, symSize: 0x48 } - - { offsetInCU: 0x11A8, offset: 0x880D5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x124, symBinAddr: 0x10C4C, symSize: 0x6C } - - { offsetInCU: 0x11EF, offset: 0x8811C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x228, symBinAddr: 0x10D50, symSize: 0xAC } - - { offsetInCU: 0x1253, offset: 0x88180, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x384, symBinAddr: 0x10EAC, symSize: 0xB8 } - - { offsetInCU: 0x12DE, offset: 0x8820B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x61C, symBinAddr: 0x1108C, symSize: 0x4 } - - { offsetInCU: 0x12FF, offset: 0x8822C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x66C, symBinAddr: 0x110DC, symSize: 0x74 } - - { offsetInCU: 0x1313, offset: 0x88240, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x6E0, symBinAddr: 0x11150, symSize: 0x2C } - - { offsetInCU: 0x142C, offset: 0x88359, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x75C, symBinAddr: 0x111CC, symSize: 0x2AC } - - { offsetInCU: 0x17D6, offset: 0x88703, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xB14, symBinAddr: 0x11584, symSize: 0x44 } - - { offsetInCU: 0x1815, offset: 0x88742, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xBA0, symBinAddr: 0x11610, symSize: 0x48 } - - { offsetInCU: 0x183A, offset: 0x88767, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xBE8, symBinAddr: 0x11658, symSize: 0x44 } - - { offsetInCU: 0x185F, offset: 0x8878C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xC2C, symBinAddr: 0x1169C, symSize: 0x4 } - - { offsetInCU: 0x1886, offset: 0x887B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xC30, symBinAddr: 0x116A0, symSize: 0x20 } - - { offsetInCU: 0x189A, offset: 0x887C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xC50, symBinAddr: 0x116C0, symSize: 0x6C } - - { offsetInCU: 0x18E1, offset: 0x8880E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xD88, symBinAddr: 0x117F8, symSize: 0xAC } - - { offsetInCU: 0x1940, offset: 0x8886D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0xEE4, symBinAddr: 0x11954, symSize: 0xAC } - - { offsetInCU: 0x19DE, offset: 0x8890B, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x10E8, symBinAddr: 0x11B54, symSize: 0xC0 } - - { offsetInCU: 0x1AC0, offset: 0x889ED, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x11A8, symBinAddr: 0x11C14, symSize: 0xB4 } - - { offsetInCU: 0x1BCC, offset: 0x88AF9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x1350, symBinAddr: 0x11DBC, symSize: 0x84 } - - { offsetInCU: 0x1CC5, offset: 0x88BF2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x15B0, symBinAddr: 0x1201C, symSize: 0x360 } - - { offsetInCU: 0x4F, offset: 0x8901A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x1020, symBinAddr: 0x10976B8, symSize: 0x0 } - - { offsetInCU: 0x5D, offset: 0x89028, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x12568, symSize: 0x2C } - - { offsetInCU: 0x75, offset: 0x89040, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x2C, symBinAddr: 0x12594, symSize: 0x10C } - - { offsetInCU: 0xBC, offset: 0x89087, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x13C, symBinAddr: 0x126A4, symSize: 0x44 } - - { offsetInCU: 0x132, offset: 0x890FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3E4, symBinAddr: 0x1294C, symSize: 0x80 } - - { offsetInCU: 0x185, offset: 0x89150, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC21loadImageFromPathSyncySbs5Int64V_SStFZTo', symObjAddr: 0x4C4, symBinAddr: 0x12A2C, symSize: 0x74 } - - { offsetInCU: 0x243, offset: 0x8920E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZTo', symObjAddr: 0x7D0, symBinAddr: 0x12D38, symSize: 0x90 } - - { offsetInCU: 0x2A2, offset: 0x8926D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x8B0, symBinAddr: 0x12E18, symSize: 0x3C } - - { offsetInCU: 0x2F3, offset: 0x892BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x920, symBinAddr: 0x12E88, symSize: 0x214 } - - { offsetInCU: 0x371, offset: 0x8933C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZTf4nnnd_n', symObjAddr: 0xB34, symBinAddr: 0x1309C, symSize: 0x224 } - - { offsetInCU: 0x3F0, offset: 0x893BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x91C, symBinAddr: 0x12E84, symSize: 0x4 } - - { offsetInCU: 0x42C, offset: 0x893F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0xD58, symBinAddr: 0x132C0, symSize: 0x20 } - - { offsetInCU: 0x44B, offset: 0x89416, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0xD9C, symBinAddr: 0x13304, symSize: 0x14 } - - { offsetInCU: 0x474, offset: 0x8943F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZyyYbcfU_TA', symObjAddr: 0xDDC, symBinAddr: 0x13344, symSize: 0x10 } - - { offsetInCU: 0x488, offset: 0x89453, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0xDEC, symBinAddr: 0x13354, symSize: 0x10 } - - { offsetInCU: 0x49C, offset: 0x89467, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0xDFC, symBinAddr: 0x13364, symSize: 0x8 } - - { offsetInCU: 0x4B0, offset: 0x8947B, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGMa', symObjAddr: 0xE84, symBinAddr: 0x133AC, symSize: 0x54 } - - { offsetInCU: 0x4C4, offset: 0x8948F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0xF64, symBinAddr: 0x13450, symSize: 0xC } - - { offsetInCU: 0x4D8, offset: 0x894A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0xF70, symBinAddr: 0x1345C, symSize: 0x24 } - - { offsetInCU: 0x50C, offset: 0x894D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0xF94, symBinAddr: 0x13480, symSize: 0x24 } - - { offsetInCU: 0x6DE, offset: 0x896A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x126A0, symSize: 0x4 } - - { offsetInCU: 0x70C, offset: 0x896D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x126A0, symSize: 0x4 } - - { offsetInCU: 0x76B, offset: 0x89736, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x180, symBinAddr: 0x126E8, symSize: 0x4 } - - { offsetInCU: 0x77F, offset: 0x8974A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x184, symBinAddr: 0x126EC, symSize: 0x260 } - - { offsetInCU: 0x8B6, offset: 0x89881, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC21loadImageFromPathSyncySbs5Int64V_SStFZ', symObjAddr: 0x464, symBinAddr: 0x129CC, symSize: 0x60 } - - { offsetInCU: 0x96C, offset: 0x89937, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZ', symObjAddr: 0x538, symBinAddr: 0x12AA0, symSize: 0x4 } - - { offsetInCU: 0x980, offset: 0x8994B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZyyYbcfU_', symObjAddr: 0x53C, symBinAddr: 0x12AA4, symSize: 0x294 } - - { offsetInCU: 0xA4F, offset: 0x89A1A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x860, symBinAddr: 0x12DC8, symSize: 0x20 } - - { offsetInCU: 0xA63, offset: 0x89A2E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x880, symBinAddr: 0x12DE8, symSize: 0x30 } - - { offsetInCU: 0xA99, offset: 0x89A64, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x8EC, symBinAddr: 0x12E54, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x89B0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x134E8, symSize: 0x20 } - - { offsetInCU: 0x77, offset: 0x89B5A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x13558, symSize: 0x3C } - - { offsetInCU: 0xC9, offset: 0x89BAC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x13538, symSize: 0x20 } - - { offsetInCU: 0x214, offset: 0x89CF7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x134E8, symSize: 0x20 } - - { offsetInCU: 0x228, offset: 0x89D0B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x13508, symSize: 0x30 } - - { offsetInCU: 0x264, offset: 0x89D47, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xAC, symBinAddr: 0x13594, symSize: 0x30 } - - { offsetInCU: 0x26, offset: 0x89D90, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x2E8278, symSize: 0x26E4 } - - { offsetInCU: 0x40, offset: 0x89DAA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9A58, symBinAddr: 0x999D38, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0x89DFC, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFA58, symBinAddr: 0x99FD38, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0x89E60, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFA80, symBinAddr: 0x99FD60, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0x89E76, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0xFE88, symBinAddr: 0x9A0168, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0x89E8D, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFAC8, symBinAddr: 0x99FDA8, symSize: 0x0 } - - { offsetInCU: 0xE22, offset: 0x8AB8C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x2E8278, symSize: 0x26E4 } - - { offsetInCU: 0x4BAD, offset: 0x8E917, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x95DC, symBinAddr: 0x2F1854, symSize: 0x210 } - - { offsetInCU: 0x4E0E, offset: 0x8EB78, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E90, symBinAddr: 0x2ED108, symSize: 0x1B8 } - - { offsetInCU: 0x5399, offset: 0x8F103, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0x2EA95C, symSize: 0x5A8 } - - { offsetInCU: 0x5EE1, offset: 0x8FC4B, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0x2EAF04, symSize: 0x6C4 } - - { offsetInCU: 0x62A7, offset: 0x90011, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3350, symBinAddr: 0x2EB5C8, symSize: 0x1F0 } - - { offsetInCU: 0x67BC, offset: 0x90526, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x3540, symBinAddr: 0x2EB7B8, symSize: 0x7C4 } - - { offsetInCU: 0x75BF, offset: 0x91329, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3D04, symBinAddr: 0x2EBF7C, symSize: 0x614 } - - { offsetInCU: 0x7F4E, offset: 0x91CB8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4318, symBinAddr: 0x2EC590, symSize: 0xB78 } - - { offsetInCU: 0x9487, offset: 0x931F1, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x513C, symBinAddr: 0x2ED3B4, symSize: 0x23CC } - - { offsetInCU: 0xC9EC, offset: 0x96756, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5048, symBinAddr: 0x2ED2C0, symSize: 0xF4 } - - { offsetInCU: 0xCBE7, offset: 0x96951, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7508, symBinAddr: 0x2EF780, symSize: 0x30 } - - { offsetInCU: 0xCCD8, offset: 0x96A42, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x7538, symBinAddr: 0x2EF7B0, symSize: 0x58 } - - { offsetInCU: 0xCD4D, offset: 0x96AB7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x2EF808, symSize: 0x4 } - - { offsetInCU: 0xCD95, offset: 0x96AFF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x2EF808, symSize: 0x4 } - - { offsetInCU: 0xCDC4, offset: 0x96B2E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x2EF808, symSize: 0x4 } - - { offsetInCU: 0xCDE8, offset: 0x96B52, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7594, symBinAddr: 0x2EF80C, symSize: 0x8C } - - { offsetInCU: 0xCF3B, offset: 0x96CA5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0x2EF898, symSize: 0x4 } - - { offsetInCU: 0xCF74, offset: 0x96CDE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0x2EF898, symSize: 0x4 } - - { offsetInCU: 0xD20D, offset: 0x96F77, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x7624, symBinAddr: 0x2EF89C, symSize: 0x1400 } - - { offsetInCU: 0xF96D, offset: 0x996D7, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x97EC, symBinAddr: 0x2F1A64, symSize: 0x200 } - - { offsetInCU: 0xFED4, offset: 0x99C3E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8A24, symBinAddr: 0x2F0C9C, symSize: 0x20 } - - { offsetInCU: 0x10371, offset: 0x9A0DB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8A44, symBinAddr: 0x2F0CBC, symSize: 0xB98 } - - { offsetInCU: 0x26, offset: 0x9AE7E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x2F1C64, symSize: 0x1E0 } - - { offsetInCU: 0x1D2, offset: 0x9B02A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x2F1C64, symSize: 0x1E0 } - - { offsetInCU: 0x26, offset: 0x9B2C5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x2F1E44, symSize: 0x3C } - - { offsetInCU: 0x34, offset: 0x9B2D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x2F1E44, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0x9B3E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x2F1E80, symSize: 0x90 } - - { offsetInCU: 0x34, offset: 0x9B3F1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x2F1E80, symSize: 0x90 } - - { offsetInCU: 0x86, offset: 0x9B554, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0x9A0230, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0x9B586, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0x9A01C0, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0x9B5A8, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0x9A01F0, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0x9B5BE, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0x9A0220, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0x9B885, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x2F1F10, symSize: 0x18 } - - { offsetInCU: 0x3FB, offset: 0x9B8C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x2F1F10, symSize: 0x18 } - - { offsetInCU: 0x594, offset: 0x9BA62, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x2F1F28, symSize: 0x18 } - - { offsetInCU: 0x63F, offset: 0x9BB0D, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x2F1F40, symSize: 0x300 } - - { offsetInCU: 0x10E8, offset: 0x9C5B6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0x2F2240, symSize: 0xAC } - - { offsetInCU: 0x13DE, offset: 0x9C8AC, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0x2F22EC, symSize: 0x4D0 } - - { offsetInCU: 0x24F2, offset: 0x9D9C0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0x2F27BC, symSize: 0x28C } - - { offsetInCU: 0x2B67, offset: 0x9E035, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0x2F2A48, symSize: 0xF4 } - - { offsetInCU: 0x2D72, offset: 0x9E240, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0x2F2B3C, symSize: 0x168 } - - { offsetInCU: 0x26, offset: 0x9E59D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x2F2CA4, symSize: 0x38 } - - { offsetInCU: 0xFA, offset: 0x9E671, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x2F2CA4, symSize: 0x38 } - - { offsetInCU: 0x12C, offset: 0x9E6A3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x2F2CA4, symSize: 0x38 } - - { offsetInCU: 0x199, offset: 0x9E710, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x2F2CDC, symSize: 0x3C } - - { offsetInCU: 0x1F3, offset: 0x9E76A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x2F2CDC, symSize: 0x3C } - - { offsetInCU: 0x31B, offset: 0x9E892, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0x2F2D18, symSize: 0x5C } - - { offsetInCU: 0x517, offset: 0x9EA8E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0x2F2D74, symSize: 0x1C } - - { offsetInCU: 0x636, offset: 0x9EBAD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0x2F2D90, symSize: 0x54 } - - { offsetInCU: 0x6D0, offset: 0x9EC47, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0x2F2DE4, symSize: 0x4C } - - { offsetInCU: 0x8A8, offset: 0x9EE1F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x2F2E30, symSize: 0xA8 } - - { offsetInCU: 0x90C, offset: 0x9EE83, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x2F2E30, symSize: 0xA8 } - - { offsetInCU: 0xBA6, offset: 0x9F11D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x2F2ED8, symSize: 0x124 } - - { offsetInCU: 0xEC3, offset: 0x9F43A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0x2F2FFC, symSize: 0xC8 } - - { offsetInCU: 0xF43, offset: 0x9F4BA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0x2F2FFC, symSize: 0xC8 } - - { offsetInCU: 0x10B0, offset: 0x9F627, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0x2F30C4, symSize: 0x160 } - - { offsetInCU: 0x134C, offset: 0x9F8C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x580, symBinAddr: 0x2F3224, symSize: 0x150 } - - { offsetInCU: 0x14BB, offset: 0x9FA32, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x6D0, symBinAddr: 0x2F3374, symSize: 0x18 } - - { offsetInCU: 0x1522, offset: 0x9FA99, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x6E8, symBinAddr: 0x2F338C, symSize: 0xC } - - { offsetInCU: 0x155B, offset: 0x9FAD2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x6F4, symBinAddr: 0x2F3398, symSize: 0x8 } - - { offsetInCU: 0x15DF, offset: 0x9FB56, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x6FC, symBinAddr: 0x2F33A0, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0x9FD03, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x2F33DC, symSize: 0x120 } - - { offsetInCU: 0x34, offset: 0x9FD11, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x2F33DC, symSize: 0x120 } - - { offsetInCU: 0x34, offset: 0x9FE17, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x364, symBinAddr: 0x109EA80, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0x9FE59, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x2F34FC, symSize: 0x35C } - - { offsetInCU: 0x76, offset: 0x9FEA9, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x9A1000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0x9FF2D, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x9C6000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xA018E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x2F34FC, symSize: 0x35C } - - { offsetInCU: 0xC70, offset: 0xA0AA3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0x2F3858, symSize: 0x1FC } - - { offsetInCU: 0x116D, offset: 0xA0FA0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0x2F3A54, symSize: 0x1B8 } - - { offsetInCU: 0x10, offset: 0xA1375, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x2F3C20, symSize: 0x1A0 } - - { offsetInCU: 0x50, offset: 0xA13B5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x2F3C20, symSize: 0x1A0 } - - { offsetInCU: 0x5E, offset: 0xA13C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0x2F3DC0, symSize: 0x60 } - - { offsetInCU: 0x81, offset: 0xA13E6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0x2F3E20, symSize: 0x288 } - - { offsetInCU: 0x10, offset: 0xA13D7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x2F40B0, symSize: 0x130 } - - { offsetInCU: 0x48, offset: 0xA140F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x2F40B0, symSize: 0x130 } - - { offsetInCU: 0x5F, offset: 0xA1426, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0x2F41E0, symSize: 0x70 } - - { offsetInCU: 0x75, offset: 0xA143C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0x2F4250, symSize: 0x160 } - - { offsetInCU: 0x7A, offset: 0xA1441, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0x2F43B0, symSize: 0x378 } - - { offsetInCU: 0x10, offset: 0xA144F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x2F4740, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xA1487, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x2F4740, symSize: 0x3A0 } - - { offsetInCU: 0x4C, offset: 0xA148B, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0x2F4AE0, symSize: 0x6C0 } - - { offsetInCU: 0x66, offset: 0xA14A5, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0x2F51A0, symSize: 0x1138 } - - { offsetInCU: 0x50, offset: 0xA14F1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0x2F6440, symSize: 0x1180 } - - { offsetInCU: 0x66, offset: 0xA1507, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0x2F75C0, symSize: 0x1410 } - - { offsetInCU: 0x10, offset: 0xA14FD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x2F89E0, symSize: 0x240 } - - { offsetInCU: 0x45, offset: 0xA1532, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x2F89E0, symSize: 0x240 } - - { offsetInCU: 0x4D, offset: 0xA153A, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0x2F8C20, symSize: 0x9E0 } - - { offsetInCU: 0x63, offset: 0xA1550, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0x2F9600, symSize: 0x650 } - - { offsetInCU: 0x10, offset: 0xA155F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x2F9C60, symSize: 0x40 } - - { offsetInCU: 0x47, offset: 0xA1596, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x2F9C60, symSize: 0x40 } - - { offsetInCU: 0x5D, offset: 0xA15AC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0x2F9CA0, symSize: 0x40 } - - { offsetInCU: 0x76, offset: 0xA15C5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0x2F9CE0, symSize: 0x40 } - - { offsetInCU: 0x81, offset: 0xA15D0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0x2F9D20, symSize: 0x1E0 } - - { offsetInCU: 0x97, offset: 0xA15E6, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0x2F9F00, symSize: 0x170 } - - { offsetInCU: 0xAB, offset: 0xA15FA, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0x2FA070, symSize: 0x50 } - - { offsetInCU: 0xC3, offset: 0xA1612, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0x2FA0C0, symSize: 0x50 } - - { offsetInCU: 0xD9, offset: 0xA1628, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0x2FA110, symSize: 0x50 } - - { offsetInCU: 0xEF, offset: 0xA163E, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0x2FA160, symSize: 0x60 } - - { offsetInCU: 0x111, offset: 0xA1660, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0x2FA1C0, symSize: 0x1E0 } - - { offsetInCU: 0x124, offset: 0xA1673, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0x2FA3A0, symSize: 0x360 } - - { offsetInCU: 0x141, offset: 0xA1690, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0x2FA700, symSize: 0x2D0 } - - { offsetInCU: 0x156, offset: 0xA16A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0x2FA9D0, symSize: 0x2B0 } - - { offsetInCU: 0x170, offset: 0xA16BF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0x2FAC80, symSize: 0x250 } - - { offsetInCU: 0x184, offset: 0xA16D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0x2FAED0, symSize: 0x60 } - - { offsetInCU: 0x19A, offset: 0xA16E9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0x2FAF30, symSize: 0x44 } - - { offsetInCU: 0x10, offset: 0xA16DF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x2FAF80, symSize: 0xB90 } - - { offsetInCU: 0x4C, offset: 0xA171B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x2FAF80, symSize: 0xB90 } - - { offsetInCU: 0x62, offset: 0xA1731, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0x2FBB10, symSize: 0xB98 } - - { offsetInCU: 0x10, offset: 0xA172B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x2FC6C0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA176C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x2FC6C0, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA176C, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x2FD500, symSize: 0x7E0 } - - { offsetInCU: 0x10, offset: 0xA1777, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x2FDD00, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA17B8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x2FDD00, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA17B8, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x2FEB40, symSize: 0x1F0 } + - { offsetInCU: 0x34, offset: 0xCFF9E, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x978000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xCFFD3, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x978038, symSize: 0x0 } + - { offsetInCU: 0x27, offset: 0xD0010, size: 0x8, addend: 0x0, symName: '-[NSCMTLView canvasView]', symObjAddr: 0x0, symBinAddr: 0x8000, symSize: 0x4 } + - { offsetInCU: 0x110, offset: 0xD00F9, size: 0x8, addend: 0x0, symName: '-[NSCMTLView canvasView]', symObjAddr: 0x0, symBinAddr: 0x8000, symSize: 0x4 } + - { offsetInCU: 0x145, offset: 0xD012E, size: 0x8, addend: 0x0, symName: '+[NSCMTLView layerClass]', symObjAddr: 0x4, symBinAddr: 0x8004, symSize: 0xC } + - { offsetInCU: 0x178, offset: 0xD0161, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setDrawableSize:]', symObjAddr: 0x10, symBinAddr: 0x8010, symSize: 0x48 } + - { offsetInCU: 0x1C7, offset: 0xD01B0, size: 0x8, addend: 0x0, symName: '-[NSCMTLView drawableSize]', symObjAddr: 0x58, symBinAddr: 0x8058, symSize: 0x4C } + - { offsetInCU: 0x20E, offset: 0xD01F7, size: 0x8, addend: 0x0, symName: '-[NSCMTLView initWithFrame:]', symObjAddr: 0xA4, symBinAddr: 0x80A4, symSize: 0x60 } + - { offsetInCU: 0x251, offset: 0xD023A, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setup]', symObjAddr: 0x104, symBinAddr: 0x8104, symSize: 0xB0 } + - { offsetInCU: 0x2AE, offset: 0xD0297, size: 0x8, addend: 0x0, symName: '-[NSCMTLView present]', symObjAddr: 0x1B4, symBinAddr: 0x81B4, symSize: 0xD8 } + - { offsetInCU: 0x2E1, offset: 0xD02CA, size: 0x8, addend: 0x0, symName: '-[NSCMTLView getDevicePtr]', symObjAddr: 0x28C, symBinAddr: 0x828C, symSize: 0x74 } + - { offsetInCU: 0x336, offset: 0xD031F, size: 0x8, addend: 0x0, symName: '-[NSCMTLView getQueuePtr]', symObjAddr: 0x300, symBinAddr: 0x8300, symSize: 0xA0 } + - { offsetInCU: 0x37D, offset: 0xD0366, size: 0x8, addend: 0x0, symName: '-[NSCMTLView canvas]', symObjAddr: 0x3A0, symBinAddr: 0x83A0, symSize: 0x20 } + - { offsetInCU: 0x3B4, offset: 0xD039D, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setCanvas:]', symObjAddr: 0x3C0, symBinAddr: 0x83C0, symSize: 0x14 } + - { offsetInCU: 0x3F5, offset: 0xD03DE, size: 0x8, addend: 0x0, symName: '-[NSCMTLView queue]', symObjAddr: 0x3D4, symBinAddr: 0x83D4, symSize: 0x10 } + - { offsetInCU: 0x42C, offset: 0xD0415, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setQueue:]', symObjAddr: 0x3E4, symBinAddr: 0x83E4, symSize: 0xC } + - { offsetInCU: 0x46B, offset: 0xD0454, size: 0x8, addend: 0x0, symName: '-[NSCMTLView state]', symObjAddr: 0x3F0, symBinAddr: 0x83F0, symSize: 0x10 } + - { offsetInCU: 0x4A2, offset: 0xD048B, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setState:]', symObjAddr: 0x400, symBinAddr: 0x8400, symSize: 0x10 } + - { offsetInCU: 0x4DF, offset: 0xD04C8, size: 0x8, addend: 0x0, symName: '-[NSCMTLView sampleCount]', symObjAddr: 0x410, symBinAddr: 0x8410, symSize: 0x10 } + - { offsetInCU: 0x516, offset: 0xD04FF, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setSampleCount:]', symObjAddr: 0x420, symBinAddr: 0x8420, symSize: 0x10 } + - { offsetInCU: 0x553, offset: 0xD053C, size: 0x8, addend: 0x0, symName: '-[NSCMTLView .cxx_destruct]', symObjAddr: 0x430, symBinAddr: 0x8430, symSize: 0x3C } + - { offsetInCU: 0x3F, offset: 0xD0626, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0x14, symBinAddr: 0x8480, symSize: 0x30 } + - { offsetInCU: 0x53, offset: 0xD063A, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x44, symBinAddr: 0x84B0, symSize: 0x4 } + - { offsetInCU: 0x67, offset: 0xD064E, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0x48, symBinAddr: 0x84B4, symSize: 0xC } + - { offsetInCU: 0x7B, offset: 0xD0662, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0x54, symBinAddr: 0x84C0, symSize: 0x20 } + - { offsetInCU: 0x8F, offset: 0xD0676, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0x74, symBinAddr: 0x84E0, symSize: 0x2C } + - { offsetInCU: 0xA3, offset: 0xD068A, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0xC0, symBinAddr: 0x8520, symSize: 0xC } + - { offsetInCU: 0xB7, offset: 0xD069E, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0xCC, symBinAddr: 0x852C, symSize: 0x20 } + - { offsetInCU: 0xCB, offset: 0xD06B2, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0xEC, symBinAddr: 0x854C, symSize: 0x28 } + - { offsetInCU: 0x4F, offset: 0xD089B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2D30, symBinAddr: 0x117C448, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xD08B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2D38, symBinAddr: 0x117C450, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0xD08E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x4, symBinAddr: 0x85EC, symSize: 0x38 } + - { offsetInCU: 0xF3, offset: 0xD093F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x40, symBinAddr: 0x8628, symSize: 0x70 } + - { offsetInCU: 0x144, offset: 0xD0990, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xB4, symBinAddr: 0x869C, symSize: 0x44 } + - { offsetInCU: 0x197, offset: 0xD09E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC22loadImageAssetWithPathySbs5Int64V_SStFZTo', symObjAddr: 0x158, symBinAddr: 0x8740, symSize: 0x74 } + - { offsetInCU: 0x238, offset: 0xD0A84, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x1D0, symBinAddr: 0x87B8, symSize: 0x5C } + - { offsetInCU: 0x29D, offset: 0xD0AE9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x230, symBinAddr: 0x8818, symSize: 0x74 } + - { offsetInCU: 0x316, offset: 0xD0B62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x2A8, symBinAddr: 0x8890, symSize: 0xA4 } + - { offsetInCU: 0x373, offset: 0xD0BBF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZTo', symObjAddr: 0x360, symBinAddr: 0x8948, symSize: 0x20 } + - { offsetInCU: 0x413, offset: 0xD0C5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZTo', symObjAddr: 0x384, symBinAddr: 0x896C, symSize: 0x5C } + - { offsetInCU: 0x470, offset: 0xD0CBC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AA9NSCCanvasCs6UInt32VAJtFZTo', symObjAddr: 0x44C, symBinAddr: 0x8A34, symSize: 0x6C } + - { offsetInCU: 0x59C, offset: 0xD0DE8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17initWebGLWithViewys5Int64VAA9NSCCanvasC_S4bs5Int32VS5bAJtFZTo', symObjAddr: 0x4DC, symBinAddr: 0x8AC4, symSize: 0xB0 } + - { offsetInCU: 0x626, offset: 0xD0E72, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC27initWebGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHtFZTo', symObjAddr: 0x5E0, symBinAddr: 0x8BC8, symSize: 0x50 } + - { offsetInCU: 0x6C9, offset: 0xD0F15, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x634, symBinAddr: 0x8C1C, symSize: 0x8 } + - { offsetInCU: 0x732, offset: 0xD0F7E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x640, symBinAddr: 0x8C28, symSize: 0x8 } + - { offsetInCU: 0x789, offset: 0xD0FD5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24flush2DContextAndSyncCPUyys5Int64VFZTo', symObjAddr: 0x64C, symBinAddr: 0x8C34, symSize: 0x8 } + - { offsetInCU: 0x7E0, offset: 0xD102C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15presentDrawableyys5Int64VFZTo', symObjAddr: 0x658, symBinAddr: 0x8C40, symSize: 0x8 } + - { offsetInCU: 0x837, offset: 0xD1083, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10flushWebGLySbs5Int64VFZTo', symObjAddr: 0x674, symBinAddr: 0x8C5C, symSize: 0x8 } + - { offsetInCU: 0x88E, offset: 0xD10DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12releaseWebGLyys5Int64VFZTo', symObjAddr: 0x680, symBinAddr: 0x8C68, symSize: 0x8 } + - { offsetInCU: 0x908, offset: 0xD1154, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAA9NSCCanvasC_s5Int32VAJSbSfAJSfAJtFZTo', symObjAddr: 0x724, symBinAddr: 0x8D0C, symSize: 0x9C } + - { offsetInCU: 0xA3E, offset: 0xD128A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20create2DContextMetalys5Int64VAA9NSCCanvasC_SbSfs5Int32VSfAJtFZTo', symObjAddr: 0x7C4, symBinAddr: 0x8DAC, symSize: 0x70 } + - { offsetInCU: 0xA9B, offset: 0xD12E7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26updateWebGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x838, symBinAddr: 0x8E20, symSize: 0x14 } + - { offsetInCU: 0xB16, offset: 0xD1362, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0x9E0, symBinAddr: 0x8FC8, symSize: 0xA0 } + - { offsetInCU: 0xB67, offset: 0xD13B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xCE8, symBinAddr: 0x92D0, symSize: 0x98 } + - { offsetInCU: 0xBB8, offset: 0xD1404, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0x103C, symBinAddr: 0x9624, symSize: 0x98 } + - { offsetInCU: 0xC14, offset: 0xD1460, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1464, symBinAddr: 0x9A4C, symSize: 0xD8 } + - { offsetInCU: 0xC5C, offset: 0xD14A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1540, symBinAddr: 0x9B28, symSize: 0x34 } + - { offsetInCU: 0xCBC, offset: 0xD1508, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x15C4, symBinAddr: 0x9BAC, symSize: 0x3C } + - { offsetInCU: 0xD0D, offset: 0xD1559, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1634, symBinAddr: 0x9C1C, symSize: 0x298 } + - { offsetInCU: 0xF6D, offset: 0xD17B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x18CC, symBinAddr: 0x9EB4, symSize: 0x1E0 } + - { offsetInCU: 0x1167, offset: 0xD19B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1AAC, symBinAddr: 0xA094, symSize: 0xEC } + - { offsetInCU: 0x1264, offset: 0xD1AB0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1B98, symBinAddr: 0xA180, symSize: 0x144 } + - { offsetInCU: 0x13D9, offset: 0xD1C25, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1CDC, symBinAddr: 0xA2C4, symSize: 0x15C } + - { offsetInCU: 0x156E, offset: 0xD1DBA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x1E38, symBinAddr: 0xA420, symSize: 0x180 } + - { offsetInCU: 0x1743, offset: 0xD1F8F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZTf4nnnnd_n', symObjAddr: 0x1FB8, symBinAddr: 0xA5A0, symSize: 0x8C } + - { offsetInCU: 0x1837, offset: 0xD2083, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17initWebGLWithViewys5Int64VAA9NSCCanvasC_S4bs5Int32VS5bAJtFZTf4nnnnnnnnnnnnd_n', symObjAddr: 0x2044, symBinAddr: 0xA62C, symSize: 0xE4 } + - { offsetInCU: 0x1997, offset: 0xD21E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20create2DContextMetalys5Int64VAA9NSCCanvasC_SbSfs5Int32VSfAJtFZTf4nnnnnnd_n', symObjAddr: 0x2128, symBinAddr: 0xA710, symSize: 0xE0 } + - { offsetInCU: 0x1B45, offset: 0xD2391, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x2208, symBinAddr: 0xA7F0, symSize: 0x1B4 } + - { offsetInCU: 0x1C0F, offset: 0xD245B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x2560, symBinAddr: 0xAB48, symSize: 0x1D4 } + - { offsetInCU: 0x1CF0, offset: 0xD253C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x2734, symBinAddr: 0xAD1C, symSize: 0x114 } + - { offsetInCU: 0x1EAF, offset: 0xD26FB, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0xA80, symBinAddr: 0x9068, symSize: 0x78 } + - { offsetInCU: 0x1EC7, offset: 0xD2713, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xD80, symBinAddr: 0x9368, symSize: 0x54 } + - { offsetInCU: 0x1F34, offset: 0xD2780, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1630, symBinAddr: 0x9C18, symSize: 0x4 } + - { offsetInCU: 0x1FCA, offset: 0xD2816, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2848, symBinAddr: 0xAE30, symSize: 0x20 } + - { offsetInCU: 0x1FDE, offset: 0xD282A, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x288C, symBinAddr: 0xAE74, symSize: 0x8 } + - { offsetInCU: 0x1FFD, offset: 0xD2849, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x2894, symBinAddr: 0xAE7C, symSize: 0x18 } + - { offsetInCU: 0x2026, offset: 0xD2872, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x28AC, symBinAddr: 0xAE94, symSize: 0x8 } + - { offsetInCU: 0x203A, offset: 0xD2886, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x28B4, symBinAddr: 0xAE9C, symSize: 0x3C } + - { offsetInCU: 0x204E, offset: 0xD289A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x2934, symBinAddr: 0xAF1C, symSize: 0x34 } + - { offsetInCU: 0x2062, offset: 0xD28AE, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2968, symBinAddr: 0xAF50, symSize: 0x10 } + - { offsetInCU: 0x2076, offset: 0xD28C2, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2978, symBinAddr: 0xAF60, symSize: 0x8 } + - { offsetInCU: 0x208A, offset: 0xD28D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x29A4, symBinAddr: 0xAF8C, symSize: 0x40 } + - { offsetInCU: 0x20BE, offset: 0xD290A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2A28, symBinAddr: 0xB010, symSize: 0x40 } + - { offsetInCU: 0x20FC, offset: 0xD2948, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2A68, symBinAddr: 0xB050, symSize: 0x28 } + - { offsetInCU: 0x2130, offset: 0xD297C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2AE8, symBinAddr: 0xB0D0, symSize: 0x3C } + - { offsetInCU: 0x2164, offset: 0xD29B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2B50, symBinAddr: 0xB138, symSize: 0x30 } + - { offsetInCU: 0x21A0, offset: 0xD29EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2BBC, symBinAddr: 0xB1A4, symSize: 0x10 } + - { offsetInCU: 0x21B4, offset: 0xD2A00, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2BCC, symBinAddr: 0xB1B4, symSize: 0x40 } + - { offsetInCU: 0x26A6, offset: 0xD2EF2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x85E8, symSize: 0x4 } + - { offsetInCU: 0x26C1, offset: 0xD2F0D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x3C, symBinAddr: 0x8624, symSize: 0x4 } + - { offsetInCU: 0x26DC, offset: 0xD2F28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xB0, symBinAddr: 0x8698, symSize: 0x4 } + - { offsetInCU: 0x26FE, offset: 0xD2F4A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC22loadImageAssetWithPathySbs5Int64V_SStFZ', symObjAddr: 0xF8, symBinAddr: 0x86E0, symSize: 0x60 } + - { offsetInCU: 0x27C6, offset: 0xD3012, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x1CC, symBinAddr: 0x87B4, symSize: 0x4 } + - { offsetInCU: 0x27E1, offset: 0xD302D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x22C, symBinAddr: 0x8814, symSize: 0x4 } + - { offsetInCU: 0x27FC, offset: 0xD3048, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x2A4, symBinAddr: 0x888C, symSize: 0x4 } + - { offsetInCU: 0x2830, offset: 0xD307C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZ', symObjAddr: 0x34C, symBinAddr: 0x8934, symSize: 0x14 } + - { offsetInCU: 0x2870, offset: 0xD30BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZ', symObjAddr: 0x34C, symBinAddr: 0x8934, symSize: 0x14 } + - { offsetInCU: 0x28D4, offset: 0xD3120, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZ', symObjAddr: 0x380, symBinAddr: 0x8968, symSize: 0x4 } + - { offsetInCU: 0x2942, offset: 0xD318E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AA9NSCCanvasCs6UInt32VAJtFZ', symObjAddr: 0x3E0, symBinAddr: 0x89C8, symSize: 0x6C } + - { offsetInCU: 0x2A49, offset: 0xD3295, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17initWebGLWithViewys5Int64VAA9NSCCanvasC_S4bs5Int32VS5bAJtFZ', symObjAddr: 0x4B8, symBinAddr: 0x8AA0, symSize: 0x24 } + - { offsetInCU: 0x2A64, offset: 0xD32B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC27initWebGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHtFZ', symObjAddr: 0x58C, symBinAddr: 0x8B74, symSize: 0x54 } + - { offsetInCU: 0x2BC0, offset: 0xD340C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x630, symBinAddr: 0x8C18, symSize: 0x4 } + - { offsetInCU: 0x2C32, offset: 0xD347E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x63C, symBinAddr: 0x8C24, symSize: 0x4 } + - { offsetInCU: 0x2C75, offset: 0xD34C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24flush2DContextAndSyncCPUyys5Int64VFZ', symObjAddr: 0x648, symBinAddr: 0x8C30, symSize: 0x4 } + - { offsetInCU: 0x2CB8, offset: 0xD3504, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15presentDrawableyys5Int64VFZ', symObjAddr: 0x654, symBinAddr: 0x8C3C, symSize: 0x4 } + - { offsetInCU: 0x2CFB, offset: 0xD3547, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10flushWebGLySbs5Int64VFZ', symObjAddr: 0x660, symBinAddr: 0x8C48, symSize: 0x14 } + - { offsetInCU: 0x2D40, offset: 0xD358C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12releaseWebGLyys5Int64VFZ', symObjAddr: 0x67C, symBinAddr: 0x8C64, symSize: 0x4 } + - { offsetInCU: 0x2DDF, offset: 0xD362B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAA9NSCCanvasC_s5Int32VAJSbSfAJSfAJtFZ', symObjAddr: 0x688, symBinAddr: 0x8C70, symSize: 0x9C } + - { offsetInCU: 0x2F40, offset: 0xD378C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20create2DContextMetalys5Int64VAA9NSCCanvasC_SbSfs5Int32VSfAJtFZ', symObjAddr: 0x7C0, symBinAddr: 0x8DA8, symSize: 0x4 } + - { offsetInCU: 0x2F5B, offset: 0xD37A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26updateWebGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x834, symBinAddr: 0x8E1C, symSize: 0x4 } + - { offsetInCU: 0x2FE6, offset: 0xD3832, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x84C, symBinAddr: 0x8E34, symSize: 0x4 } + - { offsetInCU: 0x2FFA, offset: 0xD3846, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x850, symBinAddr: 0x8E38, symSize: 0x190 } + - { offsetInCU: 0x309A, offset: 0xD38E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0xAF8, symBinAddr: 0x90E0, symSize: 0x2C } + - { offsetInCU: 0x30AE, offset: 0xD38FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0xB24, symBinAddr: 0x910C, symSize: 0x1C4 } + - { offsetInCU: 0x3192, offset: 0xD39DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xDD4, symBinAddr: 0x93BC, symSize: 0x2C } + - { offsetInCU: 0x31A6, offset: 0xD39F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xE00, symBinAddr: 0x93E8, symSize: 0x23C } + - { offsetInCU: 0x325A, offset: 0xD3AA6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0x10D4, symBinAddr: 0x96BC, symSize: 0x4 } + - { offsetInCU: 0x326E, offset: 0xD3ABA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0x10D8, symBinAddr: 0x96C0, symSize: 0x38C } + - { offsetInCU: 0x3505, offset: 0xD3D51, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x153C, symBinAddr: 0x9B24, symSize: 0x4 } + - { offsetInCU: 0x3520, offset: 0xD3D6C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x1574, symBinAddr: 0x9B5C, symSize: 0x20 } + - { offsetInCU: 0x3534, offset: 0xD3D80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x1594, symBinAddr: 0x9B7C, symSize: 0x30 } + - { offsetInCU: 0x356A, offset: 0xD3DB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x1600, symBinAddr: 0x9BE8, symSize: 0x30 } + - { offsetInCU: 0x99, offset: 0xD4095, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSYAASY8rawValuexSg03RawG0Qz_tcfCTW', symObjAddr: 0x1A4, symBinAddr: 0xB480, symSize: 0x30 } + - { offsetInCU: 0xCB, offset: 0xD40C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSYAASY8rawValue03RawG0QzvgTW', symObjAddr: 0x1D4, symBinAddr: 0xB4B0, symSize: 0x44 } + - { offsetInCU: 0xF8, offset: 0xD40F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValueAESgs6UInt32V_tcfCTf4nd_n', symObjAddr: 0xB68, symBinAddr: 0xBE44, symSize: 0x94 } + - { offsetInCU: 0x376, offset: 0xD4372, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfcTo', symObjAddr: 0xAFC, symBinAddr: 0xBDD8, symSize: 0x2C } + - { offsetInCU: 0x3F3, offset: 0xD43EF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC10initValues33_A4E23F85F6FCD1159823157DE55F7C54LL2ts11pixelBufferAC0cD6FormatOs5Int64V_So11CVBufferRefatKFZTf4dnd_n', symObjAddr: 0xC1C, symBinAddr: 0xBEF8, symSize: 0x150 } + - { offsetInCU: 0x49F, offset: 0xD449B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11pixelBufferSo11CVBufferRefavpACTk', symObjAddr: 0x218, symBinAddr: 0xB4F4, symSize: 0x68 } + - { offsetInCU: 0x510, offset: 0xD450C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCfETo', symObjAddr: 0xB58, symBinAddr: 0xBE34, symSize: 0x10 } + - { offsetInCU: 0x53F, offset: 0xD453B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCMa', symObjAddr: 0xBFC, symBinAddr: 0xBED8, symSize: 0x20 } + - { offsetInCU: 0x568, offset: 0xD4564, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASQWb', symObjAddr: 0xD6C, symBinAddr: 0xC048, symSize: 0x4 } + - { offsetInCU: 0x57C, offset: 0xD4578, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOAESQAAWl', symObjAddr: 0xD70, symBinAddr: 0xC04C, symSize: 0x44 } + - { offsetInCU: 0x590, offset: 0xD458C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOMa', symObjAddr: 0x1034, symBinAddr: 0xC310, symSize: 0x10 } + - { offsetInCU: 0x5A4, offset: 0xD45A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0x1044, symBinAddr: 0xC320, symSize: 0x44 } + - { offsetInCU: 0x5D2, offset: 0xD45CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x54, symBinAddr: 0xB330, symSize: 0xC } + - { offsetInCU: 0x5EE, offset: 0xD45EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH9hashValueSivgTW', symObjAddr: 0x60, symBinAddr: 0xB33C, symSize: 0x8 } + - { offsetInCU: 0x674, offset: 0xD4670, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0xD8, symBinAddr: 0xB3B4, symSize: 0x58 } + - { offsetInCU: 0x6E4, offset: 0xD46E0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x130, symBinAddr: 0xB40C, symSize: 0x8 } + - { offsetInCU: 0x909, offset: 0xD4905, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValues6UInt32Vvg', symObjAddr: 0x0, symBinAddr: 0xB2DC, symSize: 0x3C } + - { offsetInCU: 0x92E, offset: 0xD492A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValueAESgs6UInt32V_tcfC', symObjAddr: 0x3C, symBinAddr: 0xB318, symSize: 0x18 } + - { offsetInCU: 0x976, offset: 0xD4972, size: 0x8, addend: 0x0, symName: '_$sSYsSHRzSH8RawValueSYRpzrlE04hashB0Sivg12CanvasNative13NSCVideoFrameC0fG6FormatO_Tgq5', symObjAddr: 0x68, symBinAddr: 0xB344, symSize: 0x70 } + - { offsetInCU: 0xA0D, offset: 0xD4A09, size: 0x8, addend: 0x0, symName: '_$sSYsSHRzSH8RawValueSYRpzrlE08_rawHashB04seedS2i_tF12CanvasNative13NSCVideoFrameC0hI6FormatO_Tgq5', symObjAddr: 0x138, symBinAddr: 0xB414, symSize: 0x6C } + - { offsetInCU: 0xABB, offset: 0xD4AB7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11pixelBufferSo11CVBufferRefavg', symObjAddr: 0x280, symBinAddr: 0xB55C, symSize: 0x44 } + - { offsetInCU: 0xADA, offset: 0xD4AD6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC9timestamps5Int64Vvg', symObjAddr: 0x2C4, symBinAddr: 0xB5A0, symSize: 0x44 } + - { offsetInCU: 0xAF9, offset: 0xD4AF5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6formatAC0cD6FormatOvg', symObjAddr: 0x308, symBinAddr: 0xB5E4, symSize: 0x44 } + - { offsetInCU: 0xB59, offset: 0xD4B55, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC010getCurrentD0yACSgSo8AVPlayerC_So0G15ItemVideoOutputCtKFZ', symObjAddr: 0x34C, symBinAddr: 0xB628, symSize: 0xE0 } + - { offsetInCU: 0xC04, offset: 0xD4C00, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11currentTime5frameACSo6CMTimea_So11CVBufferRefatKcfC', symObjAddr: 0x42C, symBinAddr: 0xB708, symSize: 0x60 } + - { offsetInCU: 0xC3B, offset: 0xD4C37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11currentTime5frameACSo6CMTimea_So11CVBufferRefatKcfc', symObjAddr: 0x48C, symBinAddr: 0xB768, symSize: 0x168 } + - { offsetInCU: 0xD36, offset: 0xD4D32, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6buffer2tsACSo11CVBufferRefa_s5Int64VtKcfC', symObjAddr: 0x5F4, symBinAddr: 0xB8D0, symSize: 0xF4 } + - { offsetInCU: 0xD8A, offset: 0xD4D86, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6buffer2tsACSo11CVBufferRefa_s5Int64VtKcfc', symObjAddr: 0x6E8, symBinAddr: 0xB9C4, symSize: 0xF8 } + - { offsetInCU: 0xE0B, offset: 0xD4E07, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC5cloneACyKF', symObjAddr: 0x7E0, symBinAddr: 0xBABC, symSize: 0x144 } + - { offsetInCU: 0xEEB, offset: 0xD4EE7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC9codedRectSo6CGRectVvg', symObjAddr: 0x98C, symBinAddr: 0xBC68, symSize: 0x6C } + - { offsetInCU: 0xFA9, offset: 0xD4FA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11visibleRectSo6CGRectVvg', symObjAddr: 0x9F8, symBinAddr: 0xBCD4, symSize: 0xB8 } + - { offsetInCU: 0x10EC, offset: 0xD50E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfC', symObjAddr: 0xAB0, symBinAddr: 0xBD8C, symSize: 0x20 } + - { offsetInCU: 0x1100, offset: 0xD50FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfc', symObjAddr: 0xAD0, symBinAddr: 0xBDAC, symSize: 0x2C } + - { offsetInCU: 0x1159, offset: 0xD5155, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCfD', symObjAddr: 0xB28, symBinAddr: 0xBE04, symSize: 0x30 } + - { offsetInCU: 0x4F, offset: 0xD5253, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvpZ', symObjAddr: 0x72A0, symBinAddr: 0x117C4D8, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xD526D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x72A8, symBinAddr: 0x117C4E0, symSize: 0x0 } + - { offsetInCU: 0x83, offset: 0xD5287, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x72B0, symBinAddr: 0x117C4E8, symSize: 0x0 } + - { offsetInCU: 0xE7, offset: 0xD52EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSYAASY8rawValuexSg03RawF0Qz_tcfCTW', symObjAddr: 0x464, symBinAddr: 0xC7C8, symSize: 0x30 } + - { offsetInCU: 0x119, offset: 0xD531D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSYAASY8rawValue03RawF0QzvgTW', symObjAddr: 0x494, symBinAddr: 0xC7F8, symSize: 0x44 } + - { offsetInCU: 0x146, offset: 0xD534A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValueAESgs6UInt32V_tcfCTf4nd_n', symObjAddr: 0x5EDC, symBinAddr: 0x12240, symSize: 0x64 } + - { offsetInCU: 0x1E3, offset: 0xD53E7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvgZTo', symObjAddr: 0xF8, symBinAddr: 0xC45C, symSize: 0x40 } + - { offsetInCU: 0x231, offset: 0xD5435, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvsZTo', symObjAddr: 0x17C, symBinAddr: 0xC4E0, symSize: 0x44 } + - { offsetInCU: 0x2A4, offset: 0xD54A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x200, symBinAddr: 0xC564, symSize: 0x14 } + - { offsetInCU: 0x322, offset: 0xD5526, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH9hashValueSivgTW', symObjAddr: 0x214, symBinAddr: 0xC578, symSize: 0x44 } + - { offsetInCU: 0x405, offset: 0xD5609, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x258, symBinAddr: 0xC5BC, symSize: 0x28 } + - { offsetInCU: 0x48E, offset: 0xD5692, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvgTo', symObjAddr: 0x4D8, symBinAddr: 0xC83C, symSize: 0x44 } + - { offsetInCU: 0x4FC, offset: 0xD5700, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvsTo', symObjAddr: 0x560, symBinAddr: 0xC8C4, symSize: 0x6C } + - { offsetInCU: 0x58F, offset: 0xD5793, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvgTo', symObjAddr: 0x698, symBinAddr: 0xC9FC, symSize: 0x44 } + - { offsetInCU: 0x5CC, offset: 0xD57D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvsTo', symObjAddr: 0x720, symBinAddr: 0xCA84, symSize: 0x30 } + - { offsetInCU: 0x687, offset: 0xD588B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5glPtrSvSgvgTo', symObjAddr: 0xC08, symBinAddr: 0xCF6C, symSize: 0x10 } + - { offsetInCU: 0x6A7, offset: 0xD58AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5glPtrSvSgvgTo', symObjAddr: 0xC08, symBinAddr: 0xCF6C, symSize: 0x10 } + - { offsetInCU: 0x6DD, offset: 0xD58E1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5glPtrSvSgvsTo', symObjAddr: 0xC18, symBinAddr: 0xCF7C, symSize: 0x10 } + - { offsetInCU: 0x6FD, offset: 0xD5901, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5glPtrSvSgvsTo', symObjAddr: 0xC18, symBinAddr: 0xCF7C, symSize: 0x10 } + - { offsetInCU: 0x736, offset: 0xD593A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0xC28, symBinAddr: 0xCF8C, symSize: 0x10 } + - { offsetInCU: 0x756, offset: 0xD595A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0xC28, symBinAddr: 0xCF8C, symSize: 0x10 } + - { offsetInCU: 0x78C, offset: 0xD5990, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0xC38, symBinAddr: 0xCF9C, symSize: 0x10 } + - { offsetInCU: 0x7AC, offset: 0xD59B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0xC38, symBinAddr: 0xCF9C, symSize: 0x10 } + - { offsetInCU: 0x7E5, offset: 0xD59E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11mtlLayerPtrSvSgvgTo', symObjAddr: 0xC48, symBinAddr: 0xCFAC, symSize: 0x10 } + - { offsetInCU: 0x805, offset: 0xD5A09, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11mtlLayerPtrSvSgvgTo', symObjAddr: 0xC48, symBinAddr: 0xCFAC, symSize: 0x10 } + - { offsetInCU: 0x83B, offset: 0xD5A3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11mtlLayerPtrSvSgvsTo', symObjAddr: 0xC58, symBinAddr: 0xCFBC, symSize: 0x10 } + - { offsetInCU: 0x85B, offset: 0xD5A5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11mtlLayerPtrSvSgvsTo', symObjAddr: 0xC58, symBinAddr: 0xCFBC, symSize: 0x10 } + - { offsetInCU: 0x894, offset: 0xD5A98, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14getMtlLayerPtrSvyFTo', symObjAddr: 0xD7C, symBinAddr: 0xD0E0, symSize: 0x74 } + - { offsetInCU: 0x941, offset: 0xD5B45, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0xDF0, symBinAddr: 0xD154, symSize: 0x44 } + - { offsetInCU: 0x97E, offset: 0xD5B82, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0xE78, symBinAddr: 0xD1DC, symSize: 0x30 } + - { offsetInCU: 0xA0D, offset: 0xD5C11, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x10CC, symBinAddr: 0xD430, symSize: 0x44 } + - { offsetInCU: 0xA65, offset: 0xD5C69, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x1154, symBinAddr: 0xD4B8, symSize: 0x48 } + - { offsetInCU: 0xAC0, offset: 0xD5CC4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x119C, symBinAddr: 0xD500, symSize: 0x44 } + - { offsetInCU: 0xB18, offset: 0xD5D1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x1224, symBinAddr: 0xD588, symSize: 0x48 } + - { offsetInCU: 0xB55, offset: 0xD5D59, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo10NSCMTLViewCvgTo', symObjAddr: 0x126C, symBinAddr: 0xD5D0, symSize: 0x10 } + - { offsetInCU: 0xB75, offset: 0xD5D79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo10NSCMTLViewCvgTo', symObjAddr: 0x126C, symBinAddr: 0xD5D0, symSize: 0x10 } + - { offsetInCU: 0xBAD, offset: 0xD5DB1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo10NSCMTLViewCvsTo', symObjAddr: 0x127C, symBinAddr: 0xD5E0, symSize: 0x34 } + - { offsetInCU: 0xBF0, offset: 0xD5DF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x12B0, symBinAddr: 0xD614, symSize: 0x10 } + - { offsetInCU: 0xC10, offset: 0xD5E14, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x12B0, symBinAddr: 0xD614, symSize: 0x10 } + - { offsetInCU: 0xC48, offset: 0xD5E4C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x12C0, symBinAddr: 0xD624, symSize: 0x34 } + - { offsetInCU: 0xC8B, offset: 0xD5E8F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidth12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x12F4, symBinAddr: 0xD658, symSize: 0x3C } + - { offsetInCU: 0xCD3, offset: 0xD5ED7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeight12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x13CC, symBinAddr: 0xD730, symSize: 0x3C } + - { offsetInCU: 0xD05, offset: 0xD5F09, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21drawingBufferWidthRaw12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x14A4, symBinAddr: 0xD808, symSize: 0x3C } + - { offsetInCU: 0xD37, offset: 0xD5F3B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22drawingBufferHeightRaw12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x152C, symBinAddr: 0xD890, symSize: 0x3C } + - { offsetInCU: 0xD7F, offset: 0xD5F83, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0x15B4, symBinAddr: 0xD918, symSize: 0x20 } + - { offsetInCU: 0xDE7, offset: 0xD5FEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0x15F8, symBinAddr: 0xD95C, symSize: 0x20 } + - { offsetInCU: 0xE87, offset: 0xD608B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftFTo', symObjAddr: 0x1B74, symBinAddr: 0xDED8, symSize: 0x94 } + - { offsetInCU: 0xEF0, offset: 0xD60F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x1C2C, symBinAddr: 0xDF90, symSize: 0xC4 } + - { offsetInCU: 0xFB8, offset: 0xD61BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0x1E40, symBinAddr: 0xE1A4, symSize: 0x30 } + - { offsetInCU: 0x1038, offset: 0xD623C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x2860, symBinAddr: 0xEBC4, symSize: 0xC4 } + - { offsetInCU: 0x10A2, offset: 0xD62A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x29FC, symBinAddr: 0xED60, symSize: 0xEC } + - { offsetInCU: 0x119E, offset: 0xD63A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x2C14, symBinAddr: 0xEF78, symSize: 0x3C } + - { offsetInCU: 0x11D1, offset: 0xD63D5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x2C50, symBinAddr: 0xEFB4, symSize: 0x10 } + - { offsetInCU: 0x11F1, offset: 0xD63F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x2C50, symBinAddr: 0xEFB4, symSize: 0x10 } + - { offsetInCU: 0x122B, offset: 0xD642F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x2C60, symBinAddr: 0xEFC4, symSize: 0x34 } + - { offsetInCU: 0x1286, offset: 0xD648A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x2D48, symBinAddr: 0xF0AC, symSize: 0x34 } + - { offsetInCU: 0x12BE, offset: 0xD64C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x2DBC, symBinAddr: 0xF120, symSize: 0x6C } + - { offsetInCU: 0x1320, offset: 0xD6524, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x2ECC, symBinAddr: 0xF230, symSize: 0x6C } + - { offsetInCU: 0x13CC, offset: 0xD65D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x3284, symBinAddr: 0xF5E8, symSize: 0xB0 } + - { offsetInCU: 0x141E, offset: 0xD6622, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x3404, symBinAddr: 0xF768, symSize: 0x94 } + - { offsetInCU: 0x14AD, offset: 0xD66B1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x36F4, symBinAddr: 0xFA58, symSize: 0x3C } + - { offsetInCU: 0x1519, offset: 0xD671D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x3A34, symBinAddr: 0xFD98, symSize: 0x20 } + - { offsetInCU: 0x1596, offset: 0xD679A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x3CC0, symBinAddr: 0x10024, symSize: 0x44 } + - { offsetInCU: 0x15F0, offset: 0xD67F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x3D48, symBinAddr: 0x100AC, symSize: 0x6C } + - { offsetInCU: 0x1682, offset: 0xD6886, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x3F38, symBinAddr: 0x1029C, symSize: 0x20 } + - { offsetInCU: 0x16DC, offset: 0xD68E0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x3F58, symBinAddr: 0x102BC, symSize: 0x34 } + - { offsetInCU: 0x173C, offset: 0xD6940, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3FBC, symBinAddr: 0x10320, symSize: 0x34 } + - { offsetInCU: 0x17A7, offset: 0xD69AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivgTo', symObjAddr: 0x3FF0, symBinAddr: 0x10354, symSize: 0x44 } + - { offsetInCU: 0x181D, offset: 0xD6A21, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivsTo', symObjAddr: 0x4078, symBinAddr: 0x103DC, symSize: 0xAC } + - { offsetInCU: 0x18F3, offset: 0xD6AF7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivgTo', symObjAddr: 0x4340, symBinAddr: 0x106A4, symSize: 0x44 } + - { offsetInCU: 0x1969, offset: 0xD6B6D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivsTo', symObjAddr: 0x43C8, symBinAddr: 0x1072C, symSize: 0xAC } + - { offsetInCU: 0x1A8D, offset: 0xD6C91, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x49FC, symBinAddr: 0x10D60, symSize: 0x40 } + - { offsetInCU: 0x1AC5, offset: 0xD6CC9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x4A40, symBinAddr: 0x10DA4, symSize: 0x8 } + - { offsetInCU: 0x1B1D, offset: 0xD6D21, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17context2DPathTestyys5Int64VFTo', symObjAddr: 0x4A4C, symBinAddr: 0x10DB0, symSize: 0x8 } + - { offsetInCU: 0x1B75, offset: 0xD6D79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14context2DConicyys5Int64VFTo', symObjAddr: 0x4A58, symBinAddr: 0x10DBC, symSize: 0x8 } + - { offsetInCU: 0x1C12, offset: 0xD6E16, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x5220, symBinAddr: 0x11584, symSize: 0x28 } + - { offsetInCU: 0x1C45, offset: 0xD6E49, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x5544, symBinAddr: 0x118A8, symSize: 0x24 } + - { offsetInCU: 0x1C83, offset: 0xD6E87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x563C, symBinAddr: 0x119A0, symSize: 0x14 } + - { offsetInCU: 0x1DAE, offset: 0xD6FB2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0xAB4, symBinAddr: 0xCE18, symSize: 0x30 } + - { offsetInCU: 0x1DF3, offset: 0xD6FF7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xB1C, symBinAddr: 0xCE80, symSize: 0x40 } + - { offsetInCU: 0x1EDD, offset: 0xD70E1, size: 0x8, addend: 0x0, symName: '_$sSo30UIGraphicsImageRendererContextCIegg_ABIyBy_TR', symObjAddr: 0x1B3C, symBinAddr: 0xDEA0, symSize: 0x38 } + - { offsetInCU: 0x1F7F, offset: 0xD7183, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x2D90, symBinAddr: 0xF0F4, symSize: 0x2C } + - { offsetInCU: 0x1F97, offset: 0xD719B, size: 0x8, addend: 0x0, symName: '_$s10Foundation12NotificationVIeghn_So14NSNotificationCIeyBhy_TR', symObjAddr: 0x31A4, symBinAddr: 0xF508, symSize: 0x94 } + - { offsetInCU: 0x1FAF, offset: 0xD71B3, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x338C, symBinAddr: 0xF6F0, symSize: 0x78 } + - { offsetInCU: 0x1FC7, offset: 0xD71CB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x34F4, symBinAddr: 0xF858, symSize: 0x94 } + - { offsetInCU: 0x1FFF, offset: 0xD7203, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x3588, symBinAddr: 0xF8EC, symSize: 0xB8 } + - { offsetInCU: 0x2041, offset: 0xD7245, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x3640, symBinAddr: 0xF9A4, symSize: 0x6C } + - { offsetInCU: 0x20B6, offset: 0xD72BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivpACTk', symObjAddr: 0x41B4, symBinAddr: 0x10518, symSize: 0x94 } + - { offsetInCU: 0x2164, offset: 0xD7368, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivpACTk', symObjAddr: 0x44F8, symBinAddr: 0x1085C, symSize: 0x88 } + - { offsetInCU: 0x2232, offset: 0xD7436, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x51D4, symBinAddr: 0x11538, symSize: 0x4C } + - { offsetInCU: 0x224A, offset: 0xD744E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x5568, symBinAddr: 0x118CC, symSize: 0xC4 } + - { offsetInCU: 0x2296, offset: 0xD749A, size: 0x8, addend: 0x0, symName: '_$sSo6UIViewC12CanvasNativeE21getBoundingClientRectyySvFTo', symObjAddr: 0x56F0, symBinAddr: 0x11A54, symSize: 0x30 } + - { offsetInCU: 0x2431, offset: 0xD7635, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftFySo30UIGraphicsImageRendererContextCXEfU_TA', symObjAddr: 0x5F50, symBinAddr: 0x122B4, symSize: 0xC } + - { offsetInCU: 0x2450, offset: 0xD7654, size: 0x8, addend: 0x0, symName: '_$sSo30UIGraphicsImageRendererContextCIgg_ABIegg_TRTA', symObjAddr: 0x5F6C, symBinAddr: 0x122D0, symSize: 0x20 } + - { offsetInCU: 0x2479, offset: 0xD767D, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x5F8C, symBinAddr: 0x122F0, symSize: 0x10 } + - { offsetInCU: 0x248D, offset: 0xD7691, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x5F9C, symBinAddr: 0x12300, symSize: 0x8 } + - { offsetInCU: 0x24A1, offset: 0xD76A5, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x5FA4, symBinAddr: 0x12308, symSize: 0x44 } + - { offsetInCU: 0x24B5, offset: 0xD76B9, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x5FE8, symBinAddr: 0x1234C, symSize: 0x10 } + - { offsetInCU: 0x24C9, offset: 0xD76CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x5FF8, symBinAddr: 0x1235C, symSize: 0x20 } + - { offsetInCU: 0x24DD, offset: 0xD76E1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFySo7NSTimerCYbcfU_TA', symObjAddr: 0x6018, symBinAddr: 0x1237C, symSize: 0x24 } + - { offsetInCU: 0x2530, offset: 0xD7734, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x603C, symBinAddr: 0x123A0, symSize: 0x40 } + - { offsetInCU: 0x2544, offset: 0xD7748, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x607C, symBinAddr: 0x123E0, symSize: 0x40 } + - { offsetInCU: 0x2558, offset: 0xD775C, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x60BC, symBinAddr: 0x12420, symSize: 0x24 } + - { offsetInCU: 0x256C, offset: 0xD7770, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x60E0, symBinAddr: 0x12444, symSize: 0x20 } + - { offsetInCU: 0x2580, offset: 0xD7784, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASQWb', symObjAddr: 0x6100, symBinAddr: 0x12464, symSize: 0x4 } + - { offsetInCU: 0x2594, offset: 0xD7798, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOAESQAAWl', symObjAddr: 0x6104, symBinAddr: 0x12468, symSize: 0x44 } + - { offsetInCU: 0x25A8, offset: 0xD77AC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOMa', symObjAddr: 0x68E4, symBinAddr: 0x12C48, symSize: 0x10 } + - { offsetInCU: 0x25BC, offset: 0xD77C0, size: 0x8, addend: 0x0, symName: ___swift_memcpy1_1, symObjAddr: 0x68F4, symBinAddr: 0x12C58, symSize: 0xC } + - { offsetInCU: 0x25D0, offset: 0xD77D4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwet', symObjAddr: 0x6904, symBinAddr: 0x12C64, symSize: 0x90 } + - { offsetInCU: 0x25E4, offset: 0xD77E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwst', symObjAddr: 0x6994, symBinAddr: 0x12CF4, symSize: 0xBC } + - { offsetInCU: 0x25F8, offset: 0xD77FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwug', symObjAddr: 0x6A50, symBinAddr: 0x12DB0, symSize: 0x8 } + - { offsetInCU: 0x260C, offset: 0xD7810, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwup', symObjAddr: 0x6A58, symBinAddr: 0x12DB8, symSize: 0x4 } + - { offsetInCU: 0x2620, offset: 0xD7824, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwui', symObjAddr: 0x6A5C, symBinAddr: 0x12DBC, symSize: 0x8 } + - { offsetInCU: 0x2634, offset: 0xD7838, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOMa', symObjAddr: 0x6A64, symBinAddr: 0x12DC4, symSize: 0x10 } + - { offsetInCU: 0x2648, offset: 0xD784C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASQWb', symObjAddr: 0x6A74, symBinAddr: 0x12DD4, symSize: 0x4 } + - { offsetInCU: 0x265C, offset: 0xD7860, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOAESQAAWl', symObjAddr: 0x6A78, symBinAddr: 0x12DD8, symSize: 0x44 } + - { offsetInCU: 0x2670, offset: 0xD7874, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5setup33_508084857CA7D194CA72FEB80DD78002LLyyFy10Foundation12NotificationVYbcfU_TA', symObjAddr: 0x6AE0, symBinAddr: 0x12E40, symSize: 0x20 } + - { offsetInCU: 0x2684, offset: 0xD7888, size: 0x8, addend: 0x0, symName: '_$sypSgWOd', symObjAddr: 0x6B00, symBinAddr: 0x12E60, symSize: 0x48 } + - { offsetInCU: 0x2698, offset: 0xD789C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5setup33_508084857CA7D194CA72FEB80DD78002LLyyFy10Foundation12NotificationVYbcfU0_TA', symObjAddr: 0x6B48, symBinAddr: 0x12EA8, symSize: 0x20 } + - { offsetInCU: 0x26AC, offset: 0xD78B0, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x6B68, symBinAddr: 0x12EC8, symSize: 0x10 } + - { offsetInCU: 0x2715, offset: 0xD7919, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x6F50, symBinAddr: 0x132B0, symSize: 0x48 } + - { offsetInCU: 0x2749, offset: 0xD794D, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x6F98, symBinAddr: 0x132F8, symSize: 0xC } + - { offsetInCU: 0x2772, offset: 0xD7976, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x6FC8, symBinAddr: 0x13328, symSize: 0x8 } + - { offsetInCU: 0x2791, offset: 0xD7995, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x6FD0, symBinAddr: 0x13330, symSize: 0x30 } + - { offsetInCU: 0x27BA, offset: 0xD79BE, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x7000, symBinAddr: 0x13360, symSize: 0x10 } + - { offsetInCU: 0x27CE, offset: 0xD79D2, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x7048, symBinAddr: 0x133A8, symSize: 0x3C } + - { offsetInCU: 0x27F0, offset: 0xD79F4, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF12CanvasNative9NSCCanvasC0D3FitO_Tgq5', symObjAddr: 0x0, symBinAddr: 0xC364, symSize: 0x5C } + - { offsetInCU: 0x286B, offset: 0xD7A6F, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF12CanvasNative13NSCVideoFrameC0fG6FormatO_Tgq5', symObjAddr: 0x5C, symBinAddr: 0xC3C0, symSize: 0x5C } + - { offsetInCU: 0x2943, offset: 0xD7B47, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x280, symBinAddr: 0xC5E4, symSize: 0x40 } + - { offsetInCU: 0x29E5, offset: 0xD7BE9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x314, symBinAddr: 0xC678, symSize: 0xC } + - { offsetInCU: 0x2A65, offset: 0xD7C69, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH9hashValueSivgTW', symObjAddr: 0x320, symBinAddr: 0xC684, symSize: 0x78 } + - { offsetInCU: 0x2B11, offset: 0xD7D15, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x398, symBinAddr: 0xC6FC, symSize: 0x58 } + - { offsetInCU: 0x2B81, offset: 0xD7D85, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x3F0, symBinAddr: 0xC754, symSize: 0x74 } + - { offsetInCU: 0x2E7E, offset: 0xD8082, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x6B78, symBinAddr: 0x12ED8, symSize: 0x118 } + - { offsetInCU: 0x3303, offset: 0xD8507, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvgZ', symObjAddr: 0xB8, symBinAddr: 0xC41C, symSize: 0x40 } + - { offsetInCU: 0x333D, offset: 0xD8541, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvsZ', symObjAddr: 0x138, symBinAddr: 0xC49C, symSize: 0x44 } + - { offsetInCU: 0x3383, offset: 0xD8587, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvMZ', symObjAddr: 0x1C0, symBinAddr: 0xC524, symSize: 0x40 } + - { offsetInCU: 0x340E, offset: 0xD8612, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValues6UInt32Vvg', symObjAddr: 0x2C0, symBinAddr: 0xC624, symSize: 0x3C } + - { offsetInCU: 0x3433, offset: 0xD8637, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValueAESgs6UInt32V_tcfC', symObjAddr: 0x2FC, symBinAddr: 0xC660, symSize: 0x18 } + - { offsetInCU: 0x3483, offset: 0xD8687, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvg', symObjAddr: 0x51C, symBinAddr: 0xC880, symSize: 0x44 } + - { offsetInCU: 0x34D6, offset: 0xD86DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvs', symObjAddr: 0x5CC, symBinAddr: 0xC930, symSize: 0x54 } + - { offsetInCU: 0x351C, offset: 0xD8720, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM', symObjAddr: 0x620, symBinAddr: 0xC984, symSize: 0x48 } + - { offsetInCU: 0x3541, offset: 0xD8745, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM.resume.0', symObjAddr: 0x668, symBinAddr: 0xC9CC, symSize: 0x30 } + - { offsetInCU: 0x358A, offset: 0xD878E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvg', symObjAddr: 0x6DC, symBinAddr: 0xCA40, symSize: 0x44 } + - { offsetInCU: 0x35E5, offset: 0xD87E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvs', symObjAddr: 0x750, symBinAddr: 0xCAB4, symSize: 0x188 } + - { offsetInCU: 0x3667, offset: 0xD886B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvM', symObjAddr: 0x8D8, symBinAddr: 0xCC3C, symSize: 0x58 } + - { offsetInCU: 0x368C, offset: 0xD8890, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvM.resume.0', symObjAddr: 0x930, symBinAddr: 0xCC94, symSize: 0x184 } + - { offsetInCU: 0x3799, offset: 0xD899D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14getMtlLayerPtrSvyF', symObjAddr: 0xD30, symBinAddr: 0xD094, symSize: 0x4C } + - { offsetInCU: 0x3842, offset: 0xD8A46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0xE34, symBinAddr: 0xD198, symSize: 0x44 } + - { offsetInCU: 0x3875, offset: 0xD8A79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0xEA8, symBinAddr: 0xD20C, symSize: 0xEC } + - { offsetInCU: 0x38C1, offset: 0xD8AC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0xF94, symBinAddr: 0xD2F8, symSize: 0x58 } + - { offsetInCU: 0x38E6, offset: 0xD8AEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0xFEC, symBinAddr: 0xD350, symSize: 0xE0 } + - { offsetInCU: 0x3927, offset: 0xD8B2B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x1110, symBinAddr: 0xD474, symSize: 0x44 } + - { offsetInCU: 0x397F, offset: 0xD8B83, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvg', symObjAddr: 0x11E0, symBinAddr: 0xD544, symSize: 0x44 } + - { offsetInCU: 0x3A45, offset: 0xD8C49, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidth12CoreGraphics7CGFloatVvg', symObjAddr: 0x1330, symBinAddr: 0xD694, symSize: 0x9C } + - { offsetInCU: 0x3A88, offset: 0xD8C8C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeight12CoreGraphics7CGFloatVvg', symObjAddr: 0x1408, symBinAddr: 0xD76C, symSize: 0x9C } + - { offsetInCU: 0x3ACB, offset: 0xD8CCF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21drawingBufferWidthRaw12CoreGraphics7CGFloatVvg', symObjAddr: 0x14E0, symBinAddr: 0xD844, symSize: 0x4C } + - { offsetInCU: 0x3B0C, offset: 0xD8D10, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22drawingBufferHeightRaw12CoreGraphics7CGFloatVvg', symObjAddr: 0x1568, symBinAddr: 0xD8CC, symSize: 0x4C } + - { offsetInCU: 0x3B6E, offset: 0xD8D72, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0x15D4, symBinAddr: 0xD938, symSize: 0x24 } + - { offsetInCU: 0x3BB6, offset: 0xD8DBA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0x1618, symBinAddr: 0xD97C, symSize: 0x24 } + - { offsetInCU: 0x3CA3, offset: 0xD8EA7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftF', symObjAddr: 0x163C, symBinAddr: 0xD9A0, symSize: 0x470 } + - { offsetInCU: 0x3FFB, offset: 0xD91FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftFySo30UIGraphicsImageRendererContextCXEfU_', symObjAddr: 0x1AAC, symBinAddr: 0xDE10, symSize: 0x90 } + - { offsetInCU: 0x4037, offset: 0xD923B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0x1C08, symBinAddr: 0xDF6C, symSize: 0x24 } + - { offsetInCU: 0x41DE, offset: 0xD93E2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0x1CF0, symBinAddr: 0xE054, symSize: 0x150 } + - { offsetInCU: 0x45A2, offset: 0xD97A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0x1E70, symBinAddr: 0xE1D4, symSize: 0x9F0 } + - { offsetInCU: 0x4E3B, offset: 0xDA03F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x2924, symBinAddr: 0xEC88, symSize: 0xD8 } + - { offsetInCU: 0x502C, offset: 0xDA230, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x2AE8, symBinAddr: 0xEE4C, symSize: 0x12C } + - { offsetInCU: 0x51B5, offset: 0xDA3B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x2C94, symBinAddr: 0xEFF8, symSize: 0xB4 } + - { offsetInCU: 0x5310, offset: 0xDA514, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5setup33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x2F38, symBinAddr: 0xF29C, symSize: 0x26C } + - { offsetInCU: 0x538D, offset: 0xDA591, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x3334, symBinAddr: 0xF698, symSize: 0x58 } + - { offsetInCU: 0x53D9, offset: 0xDA5DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x3498, symBinAddr: 0xF7FC, symSize: 0x5C } + - { offsetInCU: 0x5402, offset: 0xDA606, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x36AC, symBinAddr: 0xFA10, symSize: 0x44 } + - { offsetInCU: 0x5428, offset: 0xDA62C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x36F0, symBinAddr: 0xFA54, symSize: 0x4 } + - { offsetInCU: 0x5451, offset: 0xDA655, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x3730, symBinAddr: 0xFA94, symSize: 0x50 } + - { offsetInCU: 0x5486, offset: 0xDA68A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x3780, symBinAddr: 0xFAE4, symSize: 0x2B4 } + - { offsetInCU: 0x55E5, offset: 0xDA7E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14initializeView33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3A54, symBinAddr: 0xFDB8, symSize: 0x26C } + - { offsetInCU: 0x584A, offset: 0xDAA4E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvg', symObjAddr: 0x3D04, symBinAddr: 0x10068, symSize: 0x44 } + - { offsetInCU: 0x588B, offset: 0xDAA8F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvs', symObjAddr: 0x3DB4, symBinAddr: 0x10118, symSize: 0x54 } + - { offsetInCU: 0x58B0, offset: 0xDAAB4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3E08, symBinAddr: 0x1016C, symSize: 0xB8 } + - { offsetInCU: 0x596C, offset: 0xDAB70, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvM', symObjAddr: 0x3EC0, symBinAddr: 0x10224, symSize: 0x48 } + - { offsetInCU: 0x5992, offset: 0xDAB96, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvM.resume.0', symObjAddr: 0x3F08, symBinAddr: 0x1026C, symSize: 0x30 } + - { offsetInCU: 0x59F0, offset: 0xDABF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x3F8C, symBinAddr: 0x102F0, symSize: 0x30 } + - { offsetInCU: 0x5A62, offset: 0xDAC66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivg', symObjAddr: 0x4034, symBinAddr: 0x10398, symSize: 0x44 } + - { offsetInCU: 0x5ACA, offset: 0xDACCE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivs', symObjAddr: 0x4124, symBinAddr: 0x10488, symSize: 0x90 } + - { offsetInCU: 0x5B63, offset: 0xDAD67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivM', symObjAddr: 0x4248, symBinAddr: 0x105AC, symSize: 0x6C } + - { offsetInCU: 0x5B89, offset: 0xDAD8D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivM.resume.0', symObjAddr: 0x42B4, symBinAddr: 0x10618, symSize: 0x8C } + - { offsetInCU: 0x5BAB, offset: 0xDADAF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivg', symObjAddr: 0x4384, symBinAddr: 0x106E8, symSize: 0x44 } + - { offsetInCU: 0x5C0E, offset: 0xDAE12, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivs', symObjAddr: 0x4474, symBinAddr: 0x107D8, symSize: 0x84 } + - { offsetInCU: 0x5CA7, offset: 0xDAEAB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivM', symObjAddr: 0x4580, symBinAddr: 0x108E4, symSize: 0x6C } + - { offsetInCU: 0x5CCD, offset: 0xDAED1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivM.resume.0', symObjAddr: 0x45EC, symBinAddr: 0x10950, symSize: 0x80 } + - { offsetInCU: 0x5D67, offset: 0xDAF6B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x466C, symBinAddr: 0x109D0, symSize: 0x24C } + - { offsetInCU: 0x608C, offset: 0xDB290, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x48B8, symBinAddr: 0x10C1C, symSize: 0x144 } + - { offsetInCU: 0x61E8, offset: 0xDB3EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x4A3C, symBinAddr: 0x10DA0, symSize: 0x4 } + - { offsetInCU: 0x622D, offset: 0xDB431, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17context2DPathTestyys5Int64VF', symObjAddr: 0x4A48, symBinAddr: 0x10DAC, symSize: 0x4 } + - { offsetInCU: 0x6272, offset: 0xDB476, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14context2DConicyys5Int64VF', symObjAddr: 0x4A54, symBinAddr: 0x10DB8, symSize: 0x4 } + - { offsetInCU: 0x62BE, offset: 0xDB4C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12scaleSurface33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x4A60, symBinAddr: 0x10DC4, symSize: 0x5C0 } + - { offsetInCU: 0x6606, offset: 0xDB80A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x5034, symBinAddr: 0x11398, symSize: 0x1A0 } + - { offsetInCU: 0x6721, offset: 0xDB925, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x5248, symBinAddr: 0x115AC, symSize: 0x2FC } + - { offsetInCU: 0x6792, offset: 0xDB996, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x562C, symBinAddr: 0x11990, symSize: 0x10 } + - { offsetInCU: 0x67F8, offset: 0xDB9FC, size: 0x8, addend: 0x0, symName: '_$sSo6UIViewC12CanvasNativeE21getBoundingClientRectyySvF', symObjAddr: 0x5650, symBinAddr: 0x119B4, symSize: 0xA0 } + - { offsetInCU: 0x6933, offset: 0xDBB37, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x5720, symBinAddr: 0x11A84, symSize: 0x64 } + - { offsetInCU: 0x698D, offset: 0xDBB91, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x5784, symBinAddr: 0x11AE8, symSize: 0x6C } + - { offsetInCU: 0x6A0D, offset: 0xDBC11, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x57F0, symBinAddr: 0x11B54, symSize: 0xD8 } + - { offsetInCU: 0x6A4A, offset: 0xDBC4E, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x58C8, symBinAddr: 0x11C2C, symSize: 0xE0 } + - { offsetInCU: 0x6AC5, offset: 0xDBCC9, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x59A8, symBinAddr: 0x11D0C, symSize: 0x1F4 } + - { offsetInCU: 0x6B81, offset: 0xDBD85, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x5B9C, symBinAddr: 0x11F00, symSize: 0x340 } + - { offsetInCU: 0x6CAD, offset: 0xDBEB1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTf4gn_n', symObjAddr: 0x6C90, symBinAddr: 0x12FF0, symSize: 0x29C } + - { offsetInCU: 0x27, offset: 0xDC03F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0x13474, symSize: 0x10 } + - { offsetInCU: 0x62, offset: 0xDC07A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x10, symBinAddr: 0x13484, symSize: 0x20 } + - { offsetInCU: 0x1AF, offset: 0xDC1C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0x13474, symSize: 0x10 } + - { offsetInCU: 0x27, offset: 0xDC218, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTo', symObjAddr: 0x0, symBinAddr: 0x134A4, symSize: 0x44 } + - { offsetInCU: 0x7D, offset: 0xDC26E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTo', symObjAddr: 0x0, symBinAddr: 0x134A4, symSize: 0x44 } + - { offsetInCU: 0xDB, offset: 0xDC2CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0xB4, symBinAddr: 0x13558, symSize: 0x3C } + - { offsetInCU: 0x12C, offset: 0xDC31D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTf4nnndddd_n', symObjAddr: 0x120, symBinAddr: 0x135C4, symSize: 0x148 } + - { offsetInCU: 0x22C, offset: 0xDC41D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x94, symBinAddr: 0x13538, symSize: 0x20 } + - { offsetInCU: 0x3ED, offset: 0xDC5DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x44, symBinAddr: 0x134E8, symSize: 0x20 } + - { offsetInCU: 0x401, offset: 0xDC5F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x64, symBinAddr: 0x13508, symSize: 0x30 } + - { offsetInCU: 0x437, offset: 0xDC628, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xF0, symBinAddr: 0x13594, symSize: 0x30 } + - { offsetInCU: 0xD1, offset: 0xDC76C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0xFC4, symBinAddr: 0x146A8, symSize: 0x68 } + - { offsetInCU: 0x161, offset: 0xDC7FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0x1038, symBinAddr: 0x1471C, symSize: 0x10 } + - { offsetInCU: 0x190, offset: 0xDC82B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0x1048, symBinAddr: 0x1472C, symSize: 0x4 } + - { offsetInCU: 0x32D, offset: 0xDC9C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x17CC, symBinAddr: 0x14EB0, symSize: 0x2C } + - { offsetInCU: 0x5D4, offset: 0xDCC6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1834, symBinAddr: 0x14F18, symSize: 0x68 } + - { offsetInCU: 0x603, offset: 0xDCC9E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x189C, symBinAddr: 0x14F80, symSize: 0x20 } + - { offsetInCU: 0x617, offset: 0xDCCB2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x18BC, symBinAddr: 0x14FA0, symSize: 0x20 } + - { offsetInCU: 0x62B, offset: 0xDCCC6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x18DC, symBinAddr: 0x14FC0, symSize: 0x30 } + - { offsetInCU: 0x63F, offset: 0xDCCDA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x190C, symBinAddr: 0x14FF0, symSize: 0x8 } + - { offsetInCU: 0x653, offset: 0xDCCEE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1914, symBinAddr: 0x14FF8, symSize: 0x44 } + - { offsetInCU: 0x667, offset: 0xDCD02, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1958, symBinAddr: 0x1503C, symSize: 0x64 } + - { offsetInCU: 0x67B, offset: 0xDCD16, size: 0x8, addend: 0x0, symName: ___swift_memcpy33_8, symObjAddr: 0x19BC, symBinAddr: 0x150A0, symSize: 0x14 } + - { offsetInCU: 0x68F, offset: 0xDCD2A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x19D0, symBinAddr: 0x150B4, symSize: 0x4C } + - { offsetInCU: 0x6A3, offset: 0xDCD3E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x1A1C, symBinAddr: 0x15100, symSize: 0x48 } + - { offsetInCU: 0x6B7, offset: 0xDCD52, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1A64, symBinAddr: 0x15148, symSize: 0x44 } + - { offsetInCU: 0x6CB, offset: 0xDCD66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1AA8, symBinAddr: 0x1518C, symSize: 0x10 } + - { offsetInCU: 0x6DF, offset: 0xDCD7A, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1AB8, symBinAddr: 0x1519C, symSize: 0x48 } + - { offsetInCU: 0x6F3, offset: 0xDCD8E, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1BC4, symBinAddr: 0x151E4, symSize: 0x58 } + - { offsetInCU: 0x707, offset: 0xDCDA2, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1C1C, symBinAddr: 0x1523C, symSize: 0x8 } + - { offsetInCU: 0x71B, offset: 0xDCDB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVWOs', symObjAddr: 0x1C5C, symBinAddr: 0x1527C, symSize: 0x28 } + - { offsetInCU: 0x74F, offset: 0xDCDEA, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x1C98, symBinAddr: 0x152B8, symSize: 0x10 } + - { offsetInCU: 0xCE3, offset: 0xDD37E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0x1370C, symSize: 0x534 } + - { offsetInCU: 0xF7A, offset: 0xDD615, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x540, symBinAddr: 0x13C4C, symSize: 0xE0 } + - { offsetInCU: 0xFF9, offset: 0xDD694, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x6E4, symBinAddr: 0x13DDC, symSize: 0xB8 } + - { offsetInCU: 0x108C, offset: 0xDD727, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0xEBC, symBinAddr: 0x145A0, symSize: 0x108 } + - { offsetInCU: 0x11D6, offset: 0xDD871, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x13C0, symBinAddr: 0x14AA4, symSize: 0x40C } + - { offsetInCU: 0x18EC, offset: 0xDDF87, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1C84, symBinAddr: 0x152A4, symSize: 0x14 } + - { offsetInCU: 0x198B, offset: 0xDE026, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1CA8, symBinAddr: 0x152C8, symSize: 0x1E4 } + - { offsetInCU: 0x27, offset: 0xDE203, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0x154AC, symSize: 0x2C } + - { offsetInCU: 0x4B, offset: 0xDE227, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2D8, symBinAddr: 0x117C768, symSize: 0x0 } + - { offsetInCU: 0x65, offset: 0xDE241, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0x154AC, symSize: 0x2C } + - { offsetInCU: 0x98, offset: 0xDE274, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x178, symBinAddr: 0x15624, symSize: 0x40 } + - { offsetInCU: 0x104, offset: 0xDE2E0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x228, symBinAddr: 0x156D4, symSize: 0x3C } + - { offsetInCU: 0x156, offset: 0xDE332, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x2C, symBinAddr: 0x154D8, symSize: 0x10C } + - { offsetInCU: 0x181, offset: 0xDE35D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x208, symBinAddr: 0x156B4, symSize: 0x20 } + - { offsetInCU: 0x195, offset: 0xDE371, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x294, symBinAddr: 0x15740, symSize: 0x4 } + - { offsetInCU: 0x1C0, offset: 0xDE39C, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x298, symBinAddr: 0x15744, symSize: 0x3C } + - { offsetInCU: 0x348, offset: 0xDE524, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x138, symBinAddr: 0x155E4, symSize: 0x40 } + - { offsetInCU: 0x388, offset: 0xDE564, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x1B8, symBinAddr: 0x15664, symSize: 0x20 } + - { offsetInCU: 0x39C, offset: 0xDE578, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1D8, symBinAddr: 0x15684, symSize: 0x30 } + - { offsetInCU: 0x3D8, offset: 0xDE5B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x264, symBinAddr: 0x15710, symSize: 0x30 } + - { offsetInCU: 0x2B, offset: 0xDE602, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0x15780, symSize: 0xA4 } + - { offsetInCU: 0x66, offset: 0xDE63D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZTo', symObjAddr: 0xA4, symBinAddr: 0x15824, symSize: 0xA4 } + - { offsetInCU: 0xF9, offset: 0xDE6D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheH0a_AFSo012CFDictionaryH0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D8, symBinAddr: 0x15958, symSize: 0x110 } + - { offsetInCU: 0x1A2, offset: 0xDE779, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x30C, symBinAddr: 0x15A8C, symSize: 0x28 } + - { offsetInCU: 0x21D, offset: 0xDE7F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZTo', symObjAddr: 0x338, symBinAddr: 0x15AB8, symSize: 0x64 } + - { offsetInCU: 0x296, offset: 0xDE86D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x494, symBinAddr: 0x15C14, symSize: 0x15C } + - { offsetInCU: 0x32B, offset: 0xDE902, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfcTo', symObjAddr: 0x640, symBinAddr: 0x15DC0, symSize: 0x3C } + - { offsetInCU: 0x37C, offset: 0xDE953, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZTf4nnndddd_n', symObjAddr: 0x6AC, symBinAddr: 0x15E2C, symSize: 0x18C } + - { offsetInCU: 0x4C0, offset: 0xDEA97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC7getFile33_086607F85A042F2B265C7E71FFB9771CLLyS2SKFZTf4nd_g', symObjAddr: 0x838, symBinAddr: 0x15FB8, symSize: 0x2E4 } + - { offsetInCU: 0x58F, offset: 0xDEB66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCMa', symObjAddr: 0xB1C, symBinAddr: 0x1629C, symSize: 0x20 } + - { offsetInCU: 0x5A3, offset: 0xDEB7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwCP', symObjAddr: 0xB3C, symBinAddr: 0x162BC, symSize: 0x2C } + - { offsetInCU: 0x5B7, offset: 0xDEB8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwxx', symObjAddr: 0xB68, symBinAddr: 0x162E8, symSize: 0x8 } + - { offsetInCU: 0x5CB, offset: 0xDEBA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwca', symObjAddr: 0xB70, symBinAddr: 0x162F0, symSize: 0x40 } + - { offsetInCU: 0x5DF, offset: 0xDEBB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwta', symObjAddr: 0xBBC, symBinAddr: 0x16330, symSize: 0x30 } + - { offsetInCU: 0x5F3, offset: 0xDEBCA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwet', symObjAddr: 0xBEC, symBinAddr: 0x16360, symSize: 0x48 } + - { offsetInCU: 0x607, offset: 0xDEBDE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwst', symObjAddr: 0xC34, symBinAddr: 0x163A8, symSize: 0x3C } + - { offsetInCU: 0x61B, offset: 0xDEBF2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwug', symObjAddr: 0xC70, symBinAddr: 0x163E4, symSize: 0x8 } + - { offsetInCU: 0x62F, offset: 0xDEC06, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwup', symObjAddr: 0xC78, symBinAddr: 0x163EC, symSize: 0x4 } + - { offsetInCU: 0x643, offset: 0xDEC1A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwui', symObjAddr: 0xC7C, symBinAddr: 0x163F0, symSize: 0x4 } + - { offsetInCU: 0x657, offset: 0xDEC2E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOMa', symObjAddr: 0xC80, symBinAddr: 0x163F4, symSize: 0x10 } + - { offsetInCU: 0x6DF, offset: 0xDECB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x39C, symBinAddr: 0x15B1C, symSize: 0x4 } + - { offsetInCU: 0x6FB, offset: 0xDECD2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3A0, symBinAddr: 0x15B20, symSize: 0x4 } + - { offsetInCU: 0x717, offset: 0xDECEE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3A4, symBinAddr: 0x15B24, symSize: 0x4 } + - { offsetInCU: 0x733, offset: 0xDED0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x3A8, symBinAddr: 0x15B28, symSize: 0x4 } + - { offsetInCU: 0xA01, offset: 0xDEFD8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0x15780, symSize: 0xA4 } + - { offsetInCU: 0xA97, offset: 0xDF06E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheH0a_AFSo012CFDictionaryH0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x148, symBinAddr: 0x158C8, symSize: 0x90 } + - { offsetInCU: 0xC34, offset: 0xDF20B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2E8, symBinAddr: 0x15A68, symSize: 0x24 } + - { offsetInCU: 0xC7E, offset: 0xDF255, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZ', symObjAddr: 0x334, symBinAddr: 0x15AB4, symSize: 0x4 } + - { offsetInCU: 0xCA0, offset: 0xDF277, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x3AC, symBinAddr: 0x15B2C, symSize: 0xE8 } + - { offsetInCU: 0xD50, offset: 0xDF327, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfC', symObjAddr: 0x5F0, symBinAddr: 0x15D70, symSize: 0x20 } + - { offsetInCU: 0xD64, offset: 0xDF33B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfc', symObjAddr: 0x610, symBinAddr: 0x15D90, symSize: 0x30 } + - { offsetInCU: 0xD9A, offset: 0xDF371, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCfD', symObjAddr: 0x67C, symBinAddr: 0x15DFC, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0xDF45C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x16408, symSize: 0x4 } + - { offsetInCU: 0x71, offset: 0xDF4A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x4, symBinAddr: 0x1640C, symSize: 0x70 } + - { offsetInCU: 0xF6, offset: 0xDF52B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x78, symBinAddr: 0x16480, symSize: 0x5C } + - { offsetInCU: 0x191, offset: 0xDF5C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xD8, symBinAddr: 0x164E0, symSize: 0x74 } + - { offsetInCU: 0x254, offset: 0xDF689, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x150, symBinAddr: 0x16558, symSize: 0xA4 } + - { offsetInCU: 0x323, offset: 0xDF758, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x244, symBinAddr: 0x1664C, symSize: 0x3C } + - { offsetInCU: 0x375, offset: 0xDF7AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x2B0, symBinAddr: 0x166B8, symSize: 0x20 } + - { offsetInCU: 0x4E5, offset: 0xDF91A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x16408, symSize: 0x4 } + - { offsetInCU: 0x51D, offset: 0xDF952, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x16408, symSize: 0x4 } + - { offsetInCU: 0x582, offset: 0xDF9B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0x1647C, symSize: 0x4 } + - { offsetInCU: 0x5C2, offset: 0xDF9F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0x1647C, symSize: 0x4 } + - { offsetInCU: 0x624, offset: 0xDFA59, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xD4, symBinAddr: 0x164DC, symSize: 0x4 } + - { offsetInCU: 0x676, offset: 0xDFAAB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xD4, symBinAddr: 0x164DC, symSize: 0x4 } + - { offsetInCU: 0x6EB, offset: 0xDFB20, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x14C, symBinAddr: 0x16554, symSize: 0x4 } + - { offsetInCU: 0x761, offset: 0xDFB96, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x14C, symBinAddr: 0x16554, symSize: 0x4 } + - { offsetInCU: 0x7FF, offset: 0xDFC34, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1F4, symBinAddr: 0x165FC, symSize: 0x20 } + - { offsetInCU: 0x813, offset: 0xDFC48, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x214, symBinAddr: 0x1661C, symSize: 0x30 } + - { offsetInCU: 0x84F, offset: 0xDFC84, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x280, symBinAddr: 0x16688, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0xDFCE2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x166D8, symSize: 0x14 } + - { offsetInCU: 0xA9, offset: 0xDFD64, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x14, symBinAddr: 0x166EC, symSize: 0x38 } + - { offsetInCU: 0x1A2, offset: 0xDFE5D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x68, symBinAddr: 0x16740, symSize: 0x40 } + - { offsetInCU: 0x284, offset: 0xDFF3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x118, symBinAddr: 0x167F0, symSize: 0x3C } + - { offsetInCU: 0x2D6, offset: 0xDFF91, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0xF8, symBinAddr: 0x167D0, symSize: 0x20 } + - { offsetInCU: 0x480, offset: 0xE013B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x166D8, symSize: 0x14 } + - { offsetInCU: 0x5C4, offset: 0xE027F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x4C, symBinAddr: 0x16724, symSize: 0x1C } + - { offsetInCU: 0x6FA, offset: 0xE03B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0xA8, symBinAddr: 0x16780, symSize: 0x20 } + - { offsetInCU: 0x70E, offset: 0xE03C9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0xC8, symBinAddr: 0x167A0, symSize: 0x30 } + - { offsetInCU: 0x744, offset: 0xE03FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x154, symBinAddr: 0x1682C, symSize: 0x30 } + - { offsetInCU: 0x61, offset: 0xE0483, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0x16860, symSize: 0x10 } + - { offsetInCU: 0x81, offset: 0xE04A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0x16860, symSize: 0x10 } + - { offsetInCU: 0xB7, offset: 0xE04D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0x16870, symSize: 0x10 } + - { offsetInCU: 0xD7, offset: 0xE04F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0x16870, symSize: 0x10 } + - { offsetInCU: 0x110, offset: 0xE0532, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x24, symBinAddr: 0x16880, symSize: 0x48 } + - { offsetInCU: 0x168, offset: 0xE058A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xB4, symBinAddr: 0x16910, symSize: 0x50 } + - { offsetInCU: 0x1C3, offset: 0xE05E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0x16960, symSize: 0x10 } + - { offsetInCU: 0x1E3, offset: 0xE0605, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0x16960, symSize: 0x10 } + - { offsetInCU: 0x219, offset: 0xE063B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0x16970, symSize: 0x10 } + - { offsetInCU: 0x239, offset: 0xE065B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0x16970, symSize: 0x10 } + - { offsetInCU: 0x272, offset: 0xE0694, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1B0, symBinAddr: 0x16A0C, symSize: 0x78 } + - { offsetInCU: 0x2C8, offset: 0xE06EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2D4, symBinAddr: 0x16B30, symSize: 0xB0 } + - { offsetInCU: 0x32A, offset: 0xE074C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x43C, symBinAddr: 0x16C98, symSize: 0x28 } + - { offsetInCU: 0x35C, offset: 0xE077E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x4E0, symBinAddr: 0x16CC0, symSize: 0xA0 } + - { offsetInCU: 0x3DD, offset: 0xE07FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x5BC, symBinAddr: 0x16D60, symSize: 0x60 } + - { offsetInCU: 0x44F, offset: 0xE0871, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x620, symBinAddr: 0x16DC4, symSize: 0x4 } + - { offsetInCU: 0x4AB, offset: 0xE08CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x6C4, symBinAddr: 0x16E68, symSize: 0x34 } + - { offsetInCU: 0x509, offset: 0xE092B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x190, symBinAddr: 0x169EC, symSize: 0x20 } + - { offsetInCU: 0x533, offset: 0xE0955, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x704, symBinAddr: 0x16EA8, symSize: 0x10 } + - { offsetInCU: 0x631, offset: 0xE0A53, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0x9C0, symBinAddr: 0x17164, symSize: 0x74 } + - { offsetInCU: 0x66F, offset: 0xE0A91, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA34, symBinAddr: 0x171D8, symSize: 0x10 } + - { offsetInCU: 0x68F, offset: 0xE0AB1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA34, symBinAddr: 0x171D8, symSize: 0x10 } + - { offsetInCU: 0x6C5, offset: 0xE0AE7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA44, symBinAddr: 0x171E8, symSize: 0x10 } + - { offsetInCU: 0x6E5, offset: 0xE0B07, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA44, symBinAddr: 0x171E8, symSize: 0x10 } + - { offsetInCU: 0x71E, offset: 0xE0B40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xA54, symBinAddr: 0x171F8, symSize: 0x20 } + - { offsetInCU: 0x776, offset: 0xE0B98, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xA74, symBinAddr: 0x17218, symSize: 0x14 } + - { offsetInCU: 0x7D1, offset: 0xE0BF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xA88, symBinAddr: 0x1722C, symSize: 0x44 } + - { offsetInCU: 0x829, offset: 0xE0C4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xB10, symBinAddr: 0x172B4, symSize: 0x48 } + - { offsetInCU: 0x8BE, offset: 0xE0CE0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xC74, symBinAddr: 0x17418, symSize: 0x78 } + - { offsetInCU: 0x914, offset: 0xE0D36, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xDEC, symBinAddr: 0x17590, symSize: 0xB0 } + - { offsetInCU: 0x976, offset: 0xE0D98, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0xF48, symBinAddr: 0x176EC, symSize: 0x28 } + - { offsetInCU: 0x9A8, offset: 0xE0DCA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0xF70, symBinAddr: 0x17714, symSize: 0xB8 } + - { offsetInCU: 0xA29, offset: 0xE0E4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x102C, symBinAddr: 0x177CC, symSize: 0x28 } + - { offsetInCU: 0xA87, offset: 0xE0EA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x1090, symBinAddr: 0x17830, symSize: 0x10 } + - { offsetInCU: 0xC39, offset: 0xE105B, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfC12CanvasNative15NSCTouchHandlerC7PointerV_Tgm5', symObjAddr: 0x1214, symBinAddr: 0x179B4, symSize: 0x88 } + - { offsetInCU: 0xCBC, offset: 0xE10DE, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgm5', symObjAddr: 0x129C, symBinAddr: 0x17A3C, symSize: 0x6C } + - { offsetInCU: 0xD40, offset: 0xE1162, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x143C, symBinAddr: 0x17BDC, symSize: 0x44 } + - { offsetInCU: 0xD54, offset: 0xE1176, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x14C4, symBinAddr: 0x17C20, symSize: 0x20 } + - { offsetInCU: 0xE2E, offset: 0xE1250, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x1308, symBinAddr: 0x17AA8, symSize: 0x124 } + - { offsetInCU: 0x10ED, offset: 0xE150F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x6C, symBinAddr: 0x168C8, symSize: 0x48 } + - { offsetInCU: 0x116A, offset: 0xE158C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x124, symBinAddr: 0x16980, symSize: 0x6C } + - { offsetInCU: 0x11B1, offset: 0xE15D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x228, symBinAddr: 0x16A84, symSize: 0xAC } + - { offsetInCU: 0x1215, offset: 0xE1637, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x384, symBinAddr: 0x16BE0, symSize: 0xB8 } + - { offsetInCU: 0x12A0, offset: 0xE16C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x61C, symBinAddr: 0x16DC0, symSize: 0x4 } + - { offsetInCU: 0x12DF, offset: 0xE1701, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x624, symBinAddr: 0x16DC8, symSize: 0x74 } + - { offsetInCU: 0x12F3, offset: 0xE1715, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x698, symBinAddr: 0x16E3C, symSize: 0x2C } + - { offsetInCU: 0x140C, offset: 0xE182E, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x714, symBinAddr: 0x16EB8, symSize: 0x2AC } + - { offsetInCU: 0x17B6, offset: 0xE1BD8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xACC, symBinAddr: 0x17270, symSize: 0x44 } + - { offsetInCU: 0x17F5, offset: 0xE1C17, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xB58, symBinAddr: 0x172FC, symSize: 0x48 } + - { offsetInCU: 0x181A, offset: 0xE1C3C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xBA0, symBinAddr: 0x17344, symSize: 0x44 } + - { offsetInCU: 0x183F, offset: 0xE1C61, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xBE4, symBinAddr: 0x17388, symSize: 0x4 } + - { offsetInCU: 0x1866, offset: 0xE1C88, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xBE8, symBinAddr: 0x1738C, symSize: 0x20 } + - { offsetInCU: 0x187A, offset: 0xE1C9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xC08, symBinAddr: 0x173AC, symSize: 0x6C } + - { offsetInCU: 0x18C1, offset: 0xE1CE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xD40, symBinAddr: 0x174E4, symSize: 0xAC } + - { offsetInCU: 0x1920, offset: 0xE1D42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0xE9C, symBinAddr: 0x17640, symSize: 0xAC } + - { offsetInCU: 0x19BE, offset: 0xE1DE0, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x10A0, symBinAddr: 0x17840, symSize: 0xC0 } + - { offsetInCU: 0x1AA0, offset: 0xE1EC2, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x1160, symBinAddr: 0x17900, symSize: 0xB4 } + - { offsetInCU: 0x1BB0, offset: 0xE1FD2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x14E4, symBinAddr: 0x17C40, symSize: 0x360 } + - { offsetInCU: 0x4F, offset: 0xE23FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x1020, symBinAddr: 0x117C8A8, symSize: 0x0 } + - { offsetInCU: 0x5D, offset: 0xE2408, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x1818C, symSize: 0x2C } + - { offsetInCU: 0x75, offset: 0xE2420, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x2C, symBinAddr: 0x181B8, symSize: 0x10C } + - { offsetInCU: 0xBC, offset: 0xE2467, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x13C, symBinAddr: 0x182C8, symSize: 0x44 } + - { offsetInCU: 0x132, offset: 0xE24DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3E4, symBinAddr: 0x18570, symSize: 0x80 } + - { offsetInCU: 0x185, offset: 0xE2530, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC21loadImageFromPathSyncySbs5Int64V_SStFZTo', symObjAddr: 0x4C4, symBinAddr: 0x18650, symSize: 0x74 } + - { offsetInCU: 0x243, offset: 0xE25EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZTo', symObjAddr: 0x7D0, symBinAddr: 0x1895C, symSize: 0x90 } + - { offsetInCU: 0x2A2, offset: 0xE264D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x8B0, symBinAddr: 0x18A3C, symSize: 0x3C } + - { offsetInCU: 0x2F3, offset: 0xE269E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x920, symBinAddr: 0x18AAC, symSize: 0x214 } + - { offsetInCU: 0x371, offset: 0xE271C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZTf4nnnd_n', symObjAddr: 0xB34, symBinAddr: 0x18CC0, symSize: 0x224 } + - { offsetInCU: 0x3F0, offset: 0xE279B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x91C, symBinAddr: 0x18AA8, symSize: 0x4 } + - { offsetInCU: 0x42C, offset: 0xE27D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0xD58, symBinAddr: 0x18EE4, symSize: 0x20 } + - { offsetInCU: 0x44B, offset: 0xE27F6, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0xD9C, symBinAddr: 0x18F28, symSize: 0x14 } + - { offsetInCU: 0x474, offset: 0xE281F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZyyYbcfU_TA', symObjAddr: 0xDDC, symBinAddr: 0x18F68, symSize: 0x10 } + - { offsetInCU: 0x488, offset: 0xE2833, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0xDEC, symBinAddr: 0x18F78, symSize: 0x10 } + - { offsetInCU: 0x49C, offset: 0xE2847, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0xDFC, symBinAddr: 0x18F88, symSize: 0x8 } + - { offsetInCU: 0x4B0, offset: 0xE285B, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGMa', symObjAddr: 0xE84, symBinAddr: 0x18FD0, symSize: 0x54 } + - { offsetInCU: 0x4C4, offset: 0xE286F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0xF64, symBinAddr: 0x19074, symSize: 0xC } + - { offsetInCU: 0x4D8, offset: 0xE2883, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0xF70, symBinAddr: 0x19080, symSize: 0x24 } + - { offsetInCU: 0x50C, offset: 0xE28B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0xF94, symBinAddr: 0x190A4, symSize: 0x24 } + - { offsetInCU: 0x6DE, offset: 0xE2A89, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x182C4, symSize: 0x4 } + - { offsetInCU: 0x70C, offset: 0xE2AB7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x182C4, symSize: 0x4 } + - { offsetInCU: 0x76B, offset: 0xE2B16, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x180, symBinAddr: 0x1830C, symSize: 0x4 } + - { offsetInCU: 0x77F, offset: 0xE2B2A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x184, symBinAddr: 0x18310, symSize: 0x260 } + - { offsetInCU: 0x8B6, offset: 0xE2C61, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC21loadImageFromPathSyncySbs5Int64V_SStFZ', symObjAddr: 0x464, symBinAddr: 0x185F0, symSize: 0x60 } + - { offsetInCU: 0x96C, offset: 0xE2D17, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZ', symObjAddr: 0x538, symBinAddr: 0x186C4, symSize: 0x4 } + - { offsetInCU: 0x980, offset: 0xE2D2B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZyyYbcfU_', symObjAddr: 0x53C, symBinAddr: 0x186C8, symSize: 0x294 } + - { offsetInCU: 0xA4F, offset: 0xE2DFA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x860, symBinAddr: 0x189EC, symSize: 0x20 } + - { offsetInCU: 0xA63, offset: 0xE2E0E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x880, symBinAddr: 0x18A0C, symSize: 0x30 } + - { offsetInCU: 0xA99, offset: 0xE2E44, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x8EC, symBinAddr: 0x18A78, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0xE2EEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x1910C, symSize: 0x20 } + - { offsetInCU: 0x77, offset: 0xE2F3A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x1917C, symSize: 0x3C } + - { offsetInCU: 0xC9, offset: 0xE2F8C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x1915C, symSize: 0x20 } + - { offsetInCU: 0x214, offset: 0xE30D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x1910C, symSize: 0x20 } + - { offsetInCU: 0x228, offset: 0xE30EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x1912C, symSize: 0x30 } + - { offsetInCU: 0x264, offset: 0xE3127, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xAC, symBinAddr: 0x191B8, symSize: 0x30 } + - { offsetInCU: 0x26, offset: 0xE3170, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x31F228, symSize: 0x26E4 } + - { offsetInCU: 0x40, offset: 0xE318A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9A58, symBinAddr: 0xA3D438, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0xE31DC, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFA58, symBinAddr: 0xA43438, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0xE3240, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFA80, symBinAddr: 0xA43460, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0xE3256, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0xFE88, symBinAddr: 0xA43868, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0xE326D, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFAC8, symBinAddr: 0xA434A8, symSize: 0x0 } + - { offsetInCU: 0xE22, offset: 0xE3F6C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x31F228, symSize: 0x26E4 } + - { offsetInCU: 0x4BAD, offset: 0xE7CF7, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x95DC, symBinAddr: 0x328804, symSize: 0x210 } + - { offsetInCU: 0x4E0E, offset: 0xE7F58, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E90, symBinAddr: 0x3240B8, symSize: 0x1B8 } + - { offsetInCU: 0x5399, offset: 0xE84E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0x32190C, symSize: 0x5A8 } + - { offsetInCU: 0x5EE1, offset: 0xE902B, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0x321EB4, symSize: 0x6C4 } + - { offsetInCU: 0x62A7, offset: 0xE93F1, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3350, symBinAddr: 0x322578, symSize: 0x1F0 } + - { offsetInCU: 0x67BC, offset: 0xE9906, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x3540, symBinAddr: 0x322768, symSize: 0x7C4 } + - { offsetInCU: 0x75BF, offset: 0xEA709, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3D04, symBinAddr: 0x322F2C, symSize: 0x614 } + - { offsetInCU: 0x7F4E, offset: 0xEB098, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x4318, symBinAddr: 0x323540, symSize: 0xB78 } + - { offsetInCU: 0x9487, offset: 0xEC5D1, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x513C, symBinAddr: 0x324364, symSize: 0x23CC } + - { offsetInCU: 0xC9EC, offset: 0xEFB36, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x5048, symBinAddr: 0x324270, symSize: 0xF4 } + - { offsetInCU: 0xCBE7, offset: 0xEFD31, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x7508, symBinAddr: 0x326730, symSize: 0x30 } + - { offsetInCU: 0xCCD8, offset: 0xEFE22, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x7538, symBinAddr: 0x326760, symSize: 0x58 } + - { offsetInCU: 0xCD4D, offset: 0xEFE97, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x3267B8, symSize: 0x4 } + - { offsetInCU: 0xCD95, offset: 0xEFEDF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x3267B8, symSize: 0x4 } + - { offsetInCU: 0xCDC4, offset: 0xEFF0E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7590, symBinAddr: 0x3267B8, symSize: 0x4 } + - { offsetInCU: 0xCDE8, offset: 0xEFF32, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7594, symBinAddr: 0x3267BC, symSize: 0x8C } + - { offsetInCU: 0xCF3B, offset: 0xF0085, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0x326848, symSize: 0x4 } + - { offsetInCU: 0xCF74, offset: 0xF00BE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x7620, symBinAddr: 0x326848, symSize: 0x4 } + - { offsetInCU: 0xD20D, offset: 0xF0357, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x7624, symBinAddr: 0x32684C, symSize: 0x1400 } + - { offsetInCU: 0xF96D, offset: 0xF2AB7, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x97EC, symBinAddr: 0x328A14, symSize: 0x200 } + - { offsetInCU: 0xFED4, offset: 0xF301E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8A24, symBinAddr: 0x327C4C, symSize: 0x20 } + - { offsetInCU: 0x10371, offset: 0xF34BB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8A44, symBinAddr: 0x327C6C, symSize: 0xB98 } + - { offsetInCU: 0x26, offset: 0xF425E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x328C14, symSize: 0x1E0 } + - { offsetInCU: 0x1D2, offset: 0xF440A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x328C14, symSize: 0x1E0 } + - { offsetInCU: 0x26, offset: 0xF46A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x328DF4, symSize: 0x3C } + - { offsetInCU: 0x34, offset: 0xF46B3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x328DF4, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xF47C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x328E30, symSize: 0x90 } + - { offsetInCU: 0x34, offset: 0xF47D1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x328E30, symSize: 0x90 } + - { offsetInCU: 0x86, offset: 0xF4934, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0xA43930, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0xF4966, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0xA438C0, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0xF4988, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0xA438F0, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0xF499E, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0xA43920, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0xF4C65, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x328EC0, symSize: 0x18 } + - { offsetInCU: 0x3FB, offset: 0xF4CA9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x328EC0, symSize: 0x18 } + - { offsetInCU: 0x594, offset: 0xF4E42, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x328ED8, symSize: 0x18 } + - { offsetInCU: 0x63F, offset: 0xF4EED, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x328EF0, symSize: 0x300 } + - { offsetInCU: 0x10E8, offset: 0xF5996, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0x3291F0, symSize: 0xAC } + - { offsetInCU: 0x13DE, offset: 0xF5C8C, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0x32929C, symSize: 0x4D0 } + - { offsetInCU: 0x24F2, offset: 0xF6DA0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0x32976C, symSize: 0x28C } + - { offsetInCU: 0x2B67, offset: 0xF7415, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0x3299F8, symSize: 0xF4 } + - { offsetInCU: 0x2D72, offset: 0xF7620, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0x329AEC, symSize: 0x168 } + - { offsetInCU: 0x26, offset: 0xF797D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x329C54, symSize: 0x38 } + - { offsetInCU: 0xFA, offset: 0xF7A51, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x329C54, symSize: 0x38 } + - { offsetInCU: 0x12C, offset: 0xF7A83, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x329C54, symSize: 0x38 } + - { offsetInCU: 0x199, offset: 0xF7AF0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x329C8C, symSize: 0x3C } + - { offsetInCU: 0x1F3, offset: 0xF7B4A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x329C8C, symSize: 0x3C } + - { offsetInCU: 0x31B, offset: 0xF7C72, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0x329CC8, symSize: 0x5C } + - { offsetInCU: 0x517, offset: 0xF7E6E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0x329D24, symSize: 0x1C } + - { offsetInCU: 0x636, offset: 0xF7F8D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0x329D40, symSize: 0x54 } + - { offsetInCU: 0x6D0, offset: 0xF8027, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0x329D94, symSize: 0x4C } + - { offsetInCU: 0x8A8, offset: 0xF81FF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x329DE0, symSize: 0xA8 } + - { offsetInCU: 0x90C, offset: 0xF8263, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x329DE0, symSize: 0xA8 } + - { offsetInCU: 0xBA6, offset: 0xF84FD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x329E88, symSize: 0x124 } + - { offsetInCU: 0xEC3, offset: 0xF881A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0x329FAC, symSize: 0xC8 } + - { offsetInCU: 0xF43, offset: 0xF889A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0x329FAC, symSize: 0xC8 } + - { offsetInCU: 0x10B0, offset: 0xF8A07, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0x32A074, symSize: 0x160 } + - { offsetInCU: 0x134C, offset: 0xF8CA3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x580, symBinAddr: 0x32A1D4, symSize: 0x150 } + - { offsetInCU: 0x14BB, offset: 0xF8E12, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x6D0, symBinAddr: 0x32A324, symSize: 0x18 } + - { offsetInCU: 0x1522, offset: 0xF8E79, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x6E8, symBinAddr: 0x32A33C, symSize: 0xC } + - { offsetInCU: 0x155B, offset: 0xF8EB2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x6F4, symBinAddr: 0x32A348, symSize: 0x8 } + - { offsetInCU: 0x15DF, offset: 0xF8F36, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x6FC, symBinAddr: 0x32A350, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xF90E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x32A38C, symSize: 0x120 } + - { offsetInCU: 0x34, offset: 0xF90F1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x32A38C, symSize: 0x120 } + - { offsetInCU: 0x34, offset: 0xF91F7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x364, symBinAddr: 0x1184040, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xF9239, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x32A4AC, symSize: 0x35C } + - { offsetInCU: 0x76, offset: 0xF9289, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xA44000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xF930D, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xA69000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xF956E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x32A4AC, symSize: 0x35C } + - { offsetInCU: 0xC70, offset: 0xF9E83, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0x32A808, symSize: 0x1FC } + - { offsetInCU: 0x116D, offset: 0xFA380, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0x32AA04, symSize: 0x1B8 } + - { offsetInCU: 0x10, offset: 0xFA755, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x32ABC0, symSize: 0x1A0 } + - { offsetInCU: 0x50, offset: 0xFA795, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x32ABC0, symSize: 0x1A0 } + - { offsetInCU: 0x5E, offset: 0xFA7A3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0x32AD60, symSize: 0x60 } + - { offsetInCU: 0x81, offset: 0xFA7C6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0x32ADC0, symSize: 0x288 } + - { offsetInCU: 0x10, offset: 0xFA7B7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x32B050, symSize: 0x130 } + - { offsetInCU: 0x48, offset: 0xFA7EF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x32B050, symSize: 0x130 } + - { offsetInCU: 0x5F, offset: 0xFA806, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0x32B180, symSize: 0x70 } + - { offsetInCU: 0x75, offset: 0xFA81C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0x32B1F0, symSize: 0x160 } + - { offsetInCU: 0x7A, offset: 0xFA821, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0x32B350, symSize: 0x378 } + - { offsetInCU: 0x10, offset: 0xFA82F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x32B6E0, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xFA867, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x32B6E0, symSize: 0x3A0 } + - { offsetInCU: 0x4C, offset: 0xFA86B, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0x32BA80, symSize: 0x6C0 } + - { offsetInCU: 0x66, offset: 0xFA885, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0x32C140, symSize: 0x1138 } + - { offsetInCU: 0x50, offset: 0xFA8D1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0x32D3C0, symSize: 0x1180 } + - { offsetInCU: 0x66, offset: 0xFA8E7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0x32E540, symSize: 0x1410 } + - { offsetInCU: 0x10, offset: 0xFA8DD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x32F960, symSize: 0x240 } + - { offsetInCU: 0x45, offset: 0xFA912, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x32F960, symSize: 0x240 } + - { offsetInCU: 0x4D, offset: 0xFA91A, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0x32FBA0, symSize: 0x9E0 } + - { offsetInCU: 0x63, offset: 0xFA930, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0x330580, symSize: 0x650 } + - { offsetInCU: 0x10, offset: 0xFA93F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x330BE0, symSize: 0x40 } + - { offsetInCU: 0x47, offset: 0xFA976, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x330BE0, symSize: 0x40 } + - { offsetInCU: 0x5D, offset: 0xFA98C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0x330C20, symSize: 0x40 } + - { offsetInCU: 0x76, offset: 0xFA9A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0x330C60, symSize: 0x40 } + - { offsetInCU: 0x81, offset: 0xFA9B0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0x330CA0, symSize: 0x1E0 } + - { offsetInCU: 0x97, offset: 0xFA9C6, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0x330E80, symSize: 0x170 } + - { offsetInCU: 0xAB, offset: 0xFA9DA, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0x330FF0, symSize: 0x50 } + - { offsetInCU: 0xC3, offset: 0xFA9F2, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0x331040, symSize: 0x50 } + - { offsetInCU: 0xD9, offset: 0xFAA08, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0x331090, symSize: 0x50 } + - { offsetInCU: 0xEF, offset: 0xFAA1E, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0x3310E0, symSize: 0x60 } + - { offsetInCU: 0x111, offset: 0xFAA40, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0x331140, symSize: 0x1E0 } + - { offsetInCU: 0x124, offset: 0xFAA53, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0x331320, symSize: 0x360 } + - { offsetInCU: 0x141, offset: 0xFAA70, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0x331680, symSize: 0x2D0 } + - { offsetInCU: 0x156, offset: 0xFAA85, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0x331950, symSize: 0x2B0 } + - { offsetInCU: 0x170, offset: 0xFAA9F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0x331C00, symSize: 0x250 } + - { offsetInCU: 0x184, offset: 0xFAAB3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0x331E50, symSize: 0x60 } + - { offsetInCU: 0x19A, offset: 0xFAAC9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0x331EB0, symSize: 0x44 } + - { offsetInCU: 0x10, offset: 0xFAABF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x331F00, symSize: 0xB90 } + - { offsetInCU: 0x4C, offset: 0xFAAFB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x331F00, symSize: 0xB90 } + - { offsetInCU: 0x62, offset: 0xFAB11, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0x332A90, symSize: 0xB98 } + - { offsetInCU: 0x10, offset: 0xFAB0B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x333640, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xFAB4C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x333640, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xFAB4C, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x334480, symSize: 0x7E0 } + - { offsetInCU: 0x10, offset: 0xFAB57, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x334C80, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xFAB98, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x334C80, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xFAB98, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x335AC0, symSize: 0x1F0 } ... diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative index 5ff171756..b2bb74d3b 100755 Binary files a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative and b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative differ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/CanvasNative-Swift.h b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/CanvasNative-Swift.h index de855df76..e385124a3 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/CanvasNative-Swift.h +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/CanvasNative-Swift.h @@ -346,23 +346,20 @@ SWIFT_CLASS_NAMED("CanvasHelpers") + (BOOL)drawImageWithContext:(int64_t)context image:(UIImage * _Nonnull)image dx:(float)dx dy:(float)dy SWIFT_WARN_UNUSED_RESULT; + (BOOL)drawImageWithContext:(int64_t)context image:(UIImage * _Nonnull)image dx:(float)dx dy:(float)dy dw:(float)dw dh:(float)dh SWIFT_WARN_UNUSED_RESULT; + (BOOL)drawImageWithContext:(int64_t)context image:(UIImage * _Nonnull)image sx:(float)sx sy:(float)sy sw:(float)sw sh:(float)sh dx:(float)dx dy:(float)dy dw:(float)dw dh:(float)dh SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initWebGPUWithViewLayer:(int64_t)instance :(int64_t)view :(uint32_t)width :(uint32_t)height SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initWebGPUWithView:(int64_t)instance :(int64_t)view :(uint32_t)width :(uint32_t)height SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (void)resizeWebGPUWithView:(int64_t)context :(int64_t)view :(uint32_t)width :(uint32_t)height; -+ (int64_t)initGLWithView:(int64_t)view :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version :(BOOL)is_canvas SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initSharedGLWithView:(int64_t)view :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version :(BOOL)is_canvas :(int64_t)shared_context SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initGLWithWidthAndHeight:(int32_t)width :(int32_t)height :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version :(BOOL)is_canvas SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initSharedGLWidthAndHeight:(int32_t)width :(int32_t)height :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version :(BOOL)is_canvas :(int64_t)shared_context SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; ++ (int64_t)initWebGPUWithViewLayer:(int64_t)instance :(NSCCanvas * _Nonnull)view :(uint32_t)width :(uint32_t)height SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; ++ (int64_t)initWebGPUWithView:(int64_t)instance :(NSCCanvas * _Nonnull)view :(uint32_t)width :(uint32_t)height SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; ++ (void)resizeWebGPUWithView:(int64_t)context :(NSCCanvas * _Nonnull)view :(uint32_t)width :(uint32_t)height; ++ (int64_t)initWebGLWithView:(NSCCanvas * _Nonnull)view :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; ++ (int64_t)initWebGLWithWidthAndHeight:(int32_t)width :(int32_t)height :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; + (void)resize2DContext:(int64_t)context :(float)width :(float)height; + (void)flush2DContext:(int64_t)context; -+ (BOOL)flushGL:(int64_t)context SWIFT_WARN_UNUSED_RESULT; -+ (void)releaseGL:(int64_t)context; -+ (int64_t)getGLPointer:(int64_t)context SWIFT_WARN_UNUSED_RESULT; -+ (void)releaseGLPointer:(int64_t)context; -+ (int64_t)create2DContext:(int64_t)context :(int32_t)width :(int32_t)height :(BOOL)alpha :(float)density :(int32_t)samples :(int32_t)font_color :(float)ppi :(int32_t)direction SWIFT_WARN_UNUSED_RESULT; -+ (void)updateGLSurfaceWithView:(int64_t)view :(int32_t)width :(int32_t)height :(int64_t)context; -+ (void)test2D:(int64_t)context; -+ (NSString * _Nonnull)testToDataURL:(int64_t)context SWIFT_WARN_UNUSED_RESULT; ++ (void)flush2DContextAndSyncCPU:(int64_t)context; ++ (void)presentDrawable:(int64_t)context; ++ (BOOL)flushWebGL:(int64_t)context SWIFT_WARN_UNUSED_RESULT; ++ (void)releaseWebGL:(int64_t)context; ++ (int64_t)create2DContext:(NSCCanvas * _Nonnull)view :(int32_t)width :(int32_t)height :(BOOL)alpha :(float)density :(int32_t)fontColor :(float)ppi :(int32_t)direction SWIFT_WARN_UNUSED_RESULT; ++ (int64_t)create2DContextMetal:(NSCCanvas * _Nonnull)view :(BOOL)alpha :(float)density :(int32_t)fontColor :(float)ppi :(int32_t)direction SWIFT_WARN_UNUSED_RESULT; ++ (void)updateWebGLSurfaceWithView:(int64_t)view :(int32_t)width :(int32_t)height :(int64_t)context; + (void)writeFile:(NSData * _Nonnull)data :(NSString * _Nonnull)path :(void (^ _Nonnull)(NSString * _Nullable, NSString * _Nullable))callback; + (void)readFile:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSString * _Nullable, NSData * _Nullable))callback; + (void)deleteFile:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSError * _Nullable, BOOL))callback; @@ -383,26 +380,30 @@ enum CanvasFit : NSInteger; SWIFT_CLASS_NAMED("NSCCanvas") @interface NSCCanvas : UIView +SWIFT_CLASS_PROPERTY(@property (nonatomic, class) BOOL forceGL;) ++ (BOOL)forceGL SWIFT_WARN_UNUSED_RESULT; ++ (void)setForceGL:(BOOL)value; @property (nonatomic) enum CanvasFit fit; +@property (nonatomic) BOOL weblikeScale; SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) NSMutableDictionary * _Nonnull store;) + (NSMutableDictionary * _Nonnull)store SWIFT_WARN_UNUSED_RESULT; + (NSMapTable * _Nonnull)getViews SWIFT_WARN_UNUSED_RESULT; -- (void * _Nonnull)getViewPtr SWIFT_WARN_UNUSED_RESULT; +- (void * _Nonnull)getGlViewPtr SWIFT_WARN_UNUSED_RESULT; - (void * _Nonnull)getMtlViewPtr SWIFT_WARN_UNUSED_RESULT; +- (void * _Nonnull)getMtlLayerPtr SWIFT_WARN_UNUSED_RESULT; @property (nonatomic) BOOL autoScale; -@property (nonatomic, readonly) int64_t nativeGL; @property (nonatomic, readonly) int64_t nativeContext; +@property (nonatomic, readonly) BOOL is2D; @property (nonatomic, readonly) CGFloat drawingBufferWidth; @property (nonatomic, readonly) CGFloat drawingBufferHeight; @property (nonatomic, readonly) float width; @property (nonatomic, readonly) float height; +- (NSString * _Nonnull)toDataURL:(NSString * _Nonnull)format :(float)quality SWIFT_WARN_UNUSED_RESULT; - (void)initContext:(NSString * _Nonnull)type :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)failIfMajorPerformanceCaveat :(int32_t)powerPreference :(BOOL)premultipliedAlpha :(BOOL)preserveDrawingBuffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xrCompatible SWIFT_METHOD_FAMILY(none); - (void)initWebGPUContext:(int64_t)instance SWIFT_METHOD_FAMILY(none); - (int64_t)create2DContext:(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)failIfMajorPerformanceCaveat :(int32_t)powerPreference :(BOOL)premultipliedAlpha :(BOOL)preserveDrawingBuffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xrCompatible :(int32_t)fontColor SWIFT_WARN_UNUSED_RESULT; - (UIImage * _Nullable)snapshot:(BOOL)flip SWIFT_WARN_UNUSED_RESULT; - (BOOL)render; -- (void)context2DTest:(int64_t)context; -- (NSString * _Nonnull)context2DTestToDataURL:(int64_t)context SWIFT_WARN_UNUSED_RESULT; @property (nonatomic, copy) void (^ _Nullable touchEventListener)(NSString * _Nonnull, UIGestureRecognizer * _Nonnull); - (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder SWIFT_UNAVAILABLE; - (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER; @@ -411,6 +412,9 @@ SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) NSMutableDic @property (nonatomic) NSInteger surfaceWidth; @property (nonatomic) NSInteger surfaceHeight; - (void)forceLayout:(CGFloat)width :(CGFloat)height; +- (void)context2DTest:(int64_t)context; +- (void)context2DPathTest:(int64_t)context; +- (void)context2DConic:(int64_t)context; - (void)layoutSubviews; + (void)getBoundingClientRect:(UIView * _Nonnull)view :(void * _Nonnull)buffer; @end @@ -871,23 +875,20 @@ SWIFT_CLASS_NAMED("CanvasHelpers") + (BOOL)drawImageWithContext:(int64_t)context image:(UIImage * _Nonnull)image dx:(float)dx dy:(float)dy SWIFT_WARN_UNUSED_RESULT; + (BOOL)drawImageWithContext:(int64_t)context image:(UIImage * _Nonnull)image dx:(float)dx dy:(float)dy dw:(float)dw dh:(float)dh SWIFT_WARN_UNUSED_RESULT; + (BOOL)drawImageWithContext:(int64_t)context image:(UIImage * _Nonnull)image sx:(float)sx sy:(float)sy sw:(float)sw sh:(float)sh dx:(float)dx dy:(float)dy dw:(float)dw dh:(float)dh SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initWebGPUWithViewLayer:(int64_t)instance :(int64_t)view :(uint32_t)width :(uint32_t)height SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initWebGPUWithView:(int64_t)instance :(int64_t)view :(uint32_t)width :(uint32_t)height SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (void)resizeWebGPUWithView:(int64_t)context :(int64_t)view :(uint32_t)width :(uint32_t)height; -+ (int64_t)initGLWithView:(int64_t)view :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version :(BOOL)is_canvas SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initSharedGLWithView:(int64_t)view :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version :(BOOL)is_canvas :(int64_t)shared_context SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initGLWithWidthAndHeight:(int32_t)width :(int32_t)height :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version :(BOOL)is_canvas SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; -+ (int64_t)initSharedGLWidthAndHeight:(int32_t)width :(int32_t)height :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version :(BOOL)is_canvas :(int64_t)shared_context SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; ++ (int64_t)initWebGPUWithViewLayer:(int64_t)instance :(NSCCanvas * _Nonnull)view :(uint32_t)width :(uint32_t)height SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; ++ (int64_t)initWebGPUWithView:(int64_t)instance :(NSCCanvas * _Nonnull)view :(uint32_t)width :(uint32_t)height SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; ++ (void)resizeWebGPUWithView:(int64_t)context :(NSCCanvas * _Nonnull)view :(uint32_t)width :(uint32_t)height; ++ (int64_t)initWebGLWithView:(NSCCanvas * _Nonnull)view :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; ++ (int64_t)initWebGLWithWidthAndHeight:(int32_t)width :(int32_t)height :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)fail_if_major_performance_caveat :(int32_t)power_preference :(BOOL)premultiplied_alpha :(BOOL)preserve_drawing_buffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xr_compatible :(int32_t)version SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT; + (void)resize2DContext:(int64_t)context :(float)width :(float)height; + (void)flush2DContext:(int64_t)context; -+ (BOOL)flushGL:(int64_t)context SWIFT_WARN_UNUSED_RESULT; -+ (void)releaseGL:(int64_t)context; -+ (int64_t)getGLPointer:(int64_t)context SWIFT_WARN_UNUSED_RESULT; -+ (void)releaseGLPointer:(int64_t)context; -+ (int64_t)create2DContext:(int64_t)context :(int32_t)width :(int32_t)height :(BOOL)alpha :(float)density :(int32_t)samples :(int32_t)font_color :(float)ppi :(int32_t)direction SWIFT_WARN_UNUSED_RESULT; -+ (void)updateGLSurfaceWithView:(int64_t)view :(int32_t)width :(int32_t)height :(int64_t)context; -+ (void)test2D:(int64_t)context; -+ (NSString * _Nonnull)testToDataURL:(int64_t)context SWIFT_WARN_UNUSED_RESULT; ++ (void)flush2DContextAndSyncCPU:(int64_t)context; ++ (void)presentDrawable:(int64_t)context; ++ (BOOL)flushWebGL:(int64_t)context SWIFT_WARN_UNUSED_RESULT; ++ (void)releaseWebGL:(int64_t)context; ++ (int64_t)create2DContext:(NSCCanvas * _Nonnull)view :(int32_t)width :(int32_t)height :(BOOL)alpha :(float)density :(int32_t)fontColor :(float)ppi :(int32_t)direction SWIFT_WARN_UNUSED_RESULT; ++ (int64_t)create2DContextMetal:(NSCCanvas * _Nonnull)view :(BOOL)alpha :(float)density :(int32_t)fontColor :(float)ppi :(int32_t)direction SWIFT_WARN_UNUSED_RESULT; ++ (void)updateWebGLSurfaceWithView:(int64_t)view :(int32_t)width :(int32_t)height :(int64_t)context; + (void)writeFile:(NSData * _Nonnull)data :(NSString * _Nonnull)path :(void (^ _Nonnull)(NSString * _Nullable, NSString * _Nullable))callback; + (void)readFile:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSString * _Nullable, NSData * _Nullable))callback; + (void)deleteFile:(NSString * _Nonnull)path :(void (^ _Nonnull)(NSError * _Nullable, BOOL))callback; @@ -908,26 +909,30 @@ enum CanvasFit : NSInteger; SWIFT_CLASS_NAMED("NSCCanvas") @interface NSCCanvas : UIView +SWIFT_CLASS_PROPERTY(@property (nonatomic, class) BOOL forceGL;) ++ (BOOL)forceGL SWIFT_WARN_UNUSED_RESULT; ++ (void)setForceGL:(BOOL)value; @property (nonatomic) enum CanvasFit fit; +@property (nonatomic) BOOL weblikeScale; SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) NSMutableDictionary * _Nonnull store;) + (NSMutableDictionary * _Nonnull)store SWIFT_WARN_UNUSED_RESULT; + (NSMapTable * _Nonnull)getViews SWIFT_WARN_UNUSED_RESULT; -- (void * _Nonnull)getViewPtr SWIFT_WARN_UNUSED_RESULT; +- (void * _Nonnull)getGlViewPtr SWIFT_WARN_UNUSED_RESULT; - (void * _Nonnull)getMtlViewPtr SWIFT_WARN_UNUSED_RESULT; +- (void * _Nonnull)getMtlLayerPtr SWIFT_WARN_UNUSED_RESULT; @property (nonatomic) BOOL autoScale; -@property (nonatomic, readonly) int64_t nativeGL; @property (nonatomic, readonly) int64_t nativeContext; +@property (nonatomic, readonly) BOOL is2D; @property (nonatomic, readonly) CGFloat drawingBufferWidth; @property (nonatomic, readonly) CGFloat drawingBufferHeight; @property (nonatomic, readonly) float width; @property (nonatomic, readonly) float height; +- (NSString * _Nonnull)toDataURL:(NSString * _Nonnull)format :(float)quality SWIFT_WARN_UNUSED_RESULT; - (void)initContext:(NSString * _Nonnull)type :(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)failIfMajorPerformanceCaveat :(int32_t)powerPreference :(BOOL)premultipliedAlpha :(BOOL)preserveDrawingBuffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xrCompatible SWIFT_METHOD_FAMILY(none); - (void)initWebGPUContext:(int64_t)instance SWIFT_METHOD_FAMILY(none); - (int64_t)create2DContext:(BOOL)alpha :(BOOL)antialias :(BOOL)depth :(BOOL)failIfMajorPerformanceCaveat :(int32_t)powerPreference :(BOOL)premultipliedAlpha :(BOOL)preserveDrawingBuffer :(BOOL)stencil :(BOOL)desynchronized :(BOOL)xrCompatible :(int32_t)fontColor SWIFT_WARN_UNUSED_RESULT; - (UIImage * _Nullable)snapshot:(BOOL)flip SWIFT_WARN_UNUSED_RESULT; - (BOOL)render; -- (void)context2DTest:(int64_t)context; -- (NSString * _Nonnull)context2DTestToDataURL:(int64_t)context SWIFT_WARN_UNUSED_RESULT; @property (nonatomic, copy) void (^ _Nullable touchEventListener)(NSString * _Nonnull, UIGestureRecognizer * _Nonnull); - (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder SWIFT_UNAVAILABLE; - (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER; @@ -936,6 +941,9 @@ SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) NSMutableDic @property (nonatomic) NSInteger surfaceWidth; @property (nonatomic) NSInteger surfaceHeight; - (void)forceLayout:(CGFloat)width :(CGFloat)height; +- (void)context2DTest:(int64_t)context; +- (void)context2DPathTest:(int64_t)context; +- (void)context2DConic:(int64_t)context; - (void)layoutSubviews; + (void)getBoundingClientRect:(UIView * _Nonnull)view :(void * _Nonnull)buffer; @end diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/CanvasNative.h b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/CanvasNative.h index 178b96920..3577b1315 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/CanvasNative.h +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/CanvasNative.h @@ -13,6 +13,7 @@ extern "C" { #import "canvas_native.h" #import "canvas_ios.h" +#import "NSCMTLView.h" //! Project version number for CanvasNative. diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/NSCMTLView.h b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/NSCMTLView.h new file mode 100644 index 000000000..3bff37bd5 --- /dev/null +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/NSCMTLView.h @@ -0,0 +1,32 @@ +// +// NSCMTLView.h +// CanvasNative +// +// Created by Osei Fortune on 08/10/2024. +// +#ifndef NSCMTLView_h +#define NSCMTLView_h + +#import +#import +#import +typedef enum { + kNone, + kPending, + kInvalidating +} NSCSurfaceState; + +@interface NSCMTLView : UIView +@property(weak, nonatomic) UIView* canvas; +@property id queue; +@property int state; +@property (nonatomic) CGSize drawableSize; +@property NSUInteger sampleCount; +-(void) present; +-(void) setup; +-(void*) getDevicePtr; +-(void*) getQueuePtr; +@end + + +#endif /* NSCMTLView_h */ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_ios.h b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_ios.h index 11d98a972..041f8a397 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_ios.h +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_ios.h @@ -8,196 +8,107 @@ #include #include -long long canvas_native_init_ios_webgpu(int64_t instance, - int64_t view, - uint32_t width, - uint32_t height); +long long canvas_native_ios_create_webgl_context(void *view, + bool alpha, + bool antialias, + bool depth, + bool fail_if_major_performance_caveat, + int32_t power_preference, + bool premultiplied_alpha, + bool preserve_drawing_buffer, + bool stencil, + bool desynchronized, + bool xr_compatible, + uint32_t version); + +bool canvas_native_ios_flush_webgl(int64_t context); -#if defined(TARGET_OS_IOS) -long long canvas_native_init_ios_webgpu_uiview(int64_t instance, - int64_t view, - uint32_t width, - uint32_t height); -#endif +void canvas_native_ios_flush_2d_context(int64_t context); -#if defined(TARGET_OS_IOS) -void canvas_native_resize_ios_webgpu_uiview(int64_t context, - int64_t view, - uint32_t width, - uint32_t height); -#endif +void canvas_native_ios_present_drawable(int64_t context); -long long canvas_native_init_ios_gl(int64_t view, - bool alpha, - bool antialias, - bool depth, - bool fail_if_major_performance_caveat, - int32_t power_preference, - bool premultiplied_alpha, - bool preserve_drawing_buffer, - bool stencil, - bool desynchronized, - bool xr_compatible, - int32_t version, - bool is_canvas); - -long long canvas_native_init_ios_gl_with_shared_gl(int64_t view, - bool alpha, - bool antialias, - bool depth, - bool fail_if_major_performance_caveat, - int32_t power_preference, - bool premultiplied_alpha, - bool preserve_drawing_buffer, - bool stencil, - bool desynchronized, - bool xr_compatible, - int32_t version, - bool is_canvas, - int64_t shared_context); - -long long canvas_native_init_offscreen_ios_gl(int32_t width, - int32_t height, - bool alpha, - bool antialias, - bool depth, - bool fail_if_major_performance_caveat, - int32_t power_preference, - bool premultiplied_alpha, - bool preserve_drawing_buffer, - bool stencil, - bool desynchronized, - bool xr_compatible, - int32_t version, - bool is_canvas); - -long long canvas_native_init_offscreen_ios_gl_with_shared_gl(int32_t width, - int32_t height, - bool alpha, - bool antialias, - bool depth, - bool fail_if_major_performance_caveat, - int32_t power_preference, - bool premultiplied_alpha, - bool preserve_drawing_buffer, - bool stencil, - bool desynchronized, - bool xr_compatible, - int32_t version, - bool is_canvas, - int64_t shared_context); - -bool canvas_native_ios_flush_gl(int64_t context); +void canvas_native_ios_flush_2d_context_and_sync_cpu(int64_t context); -void canvas_native_ios_flush_2d_context(int64_t context); +void canvas_native_ios_resize_context_2d(int64_t context, float width, float height); + +int64_t canvas_native_ios_create_2d_context(void *view, + int32_t width, + int32_t height, + bool alpha, + float density, + int32_t font_color, + float ppi, + int32_t direction); + +void canvas_native_ios_update_webgl_surface(int64_t view, + int32_t _width, + int32_t _height, + int64_t context); + +void canvas_native_ios_release_webgl(int64_t context); + +void canvas_native_ios_gl_make_current(int64_t context); -void canvas_native_resize_context_2d(int64_t context, float width, float height); - -int64_t canvas_native_create_2d_context(int64_t context, - int32_t width, - int32_t height, - bool alpha, - float density, - int32_t samples, - int32_t font_color, - float ppi, - int32_t direction); - -void canvas_native_update_gl_surface(int64_t view, int32_t width, int32_t height, int64_t context); - -void canvas_native_release_ios_gl(int64_t context); - -int64_t canvas_native_get_gl_pointer(int64_t gl_context); - -void canvas_native_release_gl_pointer(int64_t gl_context); - -void canvas_native_context_2d_test(int64_t context); - -void canvas_native_gl_make_current(int64_t gl_context); - -char *canvas_native_context_2d_test_to_data_url(int64_t context); - -void canvas_native_context_2d_destroy_string(char *string); - -bool canvas_native_imageasset_load_from_bytes(int64_t asset, uint8_t *bytes, uintptr_t size); - -int64_t canvas_native_context_create_pattern_raw(int64_t context, - int32_t width, - int32_t height, - uint8_t *bytes, - uintptr_t size, - const char *repetition); - -bool canvas_native_context_draw_image_dx_dy_with_bytes(int64_t context, - uint8_t *bytes, - uintptr_t size, - float width, - float height, - float dx, - float dy); - -bool canvas_native_context_draw_image_dx_dy_dw_dh_with_bytes(int64_t context, - uint8_t *bytes, - uintptr_t size, - float width, - float height, - float dx, - float dy, - float d_width, - float d_height); - -bool canvas_native_context_draw_image_with_bytes(int64_t context, - uint8_t *bytes, - uintptr_t size, - float width, - float height, - float sx, - float sy, - float s_width, - float s_height, - float dx, - float dy, - float d_width, - float d_height); - -void canvas_native_context_custom_with_buffer_flush(int64_t context, - uint8_t *bytes, - uintptr_t size, - float width, - float height, - bool alpha); - -long long canvas_native_context_init_context_with_custom_surface(float width, +bool canvas_native_ios_image_asset_load_from_bytes(int64_t asset, uint8_t *bytes, uintptr_t size); + +int64_t canvas_native_ios_context_create_pattern_raw(int64_t context, + int32_t width, + int32_t height, + uint8_t *bytes, + uintptr_t size, + const char *repetition); + +bool canvas_native_ios_context_draw_image_dx_dy_with_bytes(int64_t context, + uint8_t *bytes, + uintptr_t size, + float width, + float height, + float dx, + float dy); + +bool canvas_native_ios_context_draw_image_dx_dy_dw_dh_with_bytes(int64_t context, + uint8_t *bytes, + uintptr_t size, + float width, float height, - float density, - bool alpha, - int font_color, - float ppi, - int direction); - -int64_t canvas_native_context_get_texture_from_2d(int64_t context); - -uint32_t canvas_native_context_backend_texture_get_id(int64_t texture); - -void canvas_native_context_backend_texture_destroy(int64_t texture); - -void canvas_native_webgl_tex_image_2d(int64_t context, - int32_t target, - int32_t level, - int32_t internalformat, - int32_t format, - int32_t type_, - uint8_t *bytes, - uintptr_t size, - float width, - float height, - bool flip_y); - -void canvas_native_webgl_tex_sub_image_2d(int64_t context, + float dx, + float dy, + float d_width, + float d_height); + +bool canvas_native_ios_context_draw_image_with_bytes(int64_t context, + uint8_t *bytes, + uintptr_t size, + float width, + float height, + float sx, + float sy, + float s_width, + float s_height, + float dx, + float dy, + float d_width, + float d_height); + +void canvas_native_ios_context_custom_with_buffer_flush(int64_t context, + uint8_t *bytes, + uintptr_t size, + float width, + float height, + bool alpha); + +long long canvas_native_ios_context_init_context_with_custom_surface(float width, + float height, + float density, + bool alpha, + int font_color, + float ppi, + int direction); + +void canvas_native_ios_webgl_tex_image_2d(int64_t context, int32_t target, int32_t level, - int32_t xoffset, - int32_t yoffset, + int32_t internalformat, int32_t format, int32_t type_, uint8_t *bytes, @@ -206,4 +117,54 @@ void canvas_native_webgl_tex_sub_image_2d(int64_t context, float height, bool flip_y); +void canvas_native_ios_webgl_tex_sub_image_2d(int64_t context, + int32_t target, + int32_t level, + int32_t xoffset, + int32_t yoffset, + int32_t format, + int32_t type_, + uint8_t *bytes, + uintptr_t size, + float width, + float height, + bool flip_y); + +int64_t canvas_native_ios_create_2d_context_metal(void *view, + bool alpha, + float density, + uintptr_t samples, + int32_t font_color, + float ppi, + int32_t direction); + +int64_t canvas_native_ios_create_2d_context_metal_device_queue(void *view, + void *device, + void *queue, + bool alpha, + float density, + uintptr_t samples, + int32_t font_color, + float ppi, + int32_t direction); + +long long canvas_native_init_ios_webgpu(int64_t instance, + void *view, + uint32_t width, + uint32_t height); + +#if defined(TARGET_OS_MACOS) +long long canvas_native_init_ios_webgpu_nsview(int64_t instance, + void *view, + uint32_t width, + uint32_t height); +#endif + +#if defined(TARGET_OS_IOS) +void canvas_native_resize_ios_webgpu_uiview(int64_t context, + void *view, + uint32_t width, + uint32_t height); +#endif + #endif /* CANVAS_IOS_H */ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h index 5013d4e45..fa84d3dee 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h @@ -1770,6 +1770,52 @@ typedef struct CanvasOrigin2d { uint32_t y; } CanvasOrigin2d; +typedef struct CanvasImageCopyWebGL { + /** + * The texture to be copied from. The copy source data is captured at the moment + * the copy is issued. + */ + const struct WebGLState *source; + /** + * The base texel used for copying from the external image. Together + * with the `copy_size` argument to copy functions, defines the + * sub-region of the image to copy. + * + * Relative to the top left of the image. + * + * Must be [`Origin2d::ZERO`] if [`DownlevelFlags::UNRESTRICTED_EXTERNAL_TEXTURE_COPIES`] is not supported. + */ + struct CanvasOrigin2d origin; + /** + * If the Y coordinate of the image should be flipped. Even if this is + * true, `origin` is still relative to the top left. + */ + bool flip_y; +} CanvasImageCopyWebGL; + +typedef struct CanvasImageCopyCanvasRenderingContext2D { + /** + * The texture to be copied from. The copy source data is captured at the moment + * the copy is issued. + */ + const struct CanvasRenderingContext2D *source; + /** + * The base texel used for copying from the external image. Together + * with the `copy_size` argument to copy functions, defines the + * sub-region of the image to copy. + * + * Relative to the top left of the image. + * + * Must be [`Origin2d::ZERO`] if [`DownlevelFlags::UNRESTRICTED_EXTERNAL_TEXTURE_COPIES`] is not supported. + */ + struct CanvasOrigin2d origin; + /** + * If the Y coordinate of the image should be flipped. Even if this is + * true, `origin` is still relative to the top left. + */ + bool flip_y; +} CanvasImageCopyCanvasRenderingContext2D; + typedef struct CanvasImageCopyImageAsset { /** * The texture to be copied from. The copy source data is captured at the moment @@ -1840,10 +1886,21 @@ typedef struct CanvasCreateTextureViewDescriptor { const struct CanvasImageSubresourceRange *range; } CanvasCreateTextureViewDescriptor; +typedef struct FileHelperMime { + const char *mime_type; + const char *extension; +} FileHelperMime; + void canvas_native_font_add_family(const char *alias, const char *const *filenames, uintptr_t length); +void canvas_native_context_2d_test(int64_t context); + +void canvas_native_context_2d_path_test(int64_t context); + +void canvas_native_context_2d_conic_test(int64_t context); + void canvas_native_context_release(struct CanvasRenderingContext2D *value); #if (defined(TARGET_OS_ANDROID) || defined(TARGET_OS_IOS)) @@ -1879,11 +1936,10 @@ struct CanvasRenderingContext2D *canvas_native_context_create(float width, float ppi, uint32_t direction); -struct CanvasRenderingContext2D *canvas_native_context_create_gl(float width, +struct CanvasRenderingContext2D *canvas_native_context_create_gl(void *view, + float width, float height, float density, - int64_t gl_context, - int32_t samples, bool alpha, int32_t font_color, float ppi, @@ -2946,6 +3002,17 @@ void canvas_native_webgpu_buffer_map_async(const struct CanvasGPUBuffer *buffer, void (*callback)(enum CanvasGPUErrorType, char*, void*), void *callback_data); +char *canvas_native_webgpu_to_data_url(const struct CanvasGPUCanvasContext *context, + const struct CanvasGPUDevice *device, + const char *format, + uint32_t quality); + +char *canvas_native_webgpu_to_data_url_with_texture(const struct CanvasGPUCanvasContext *context, + const struct CanvasGPUDevice *device, + const struct CanvasGPUTexture *texture, + const char *format, + uint32_t quality); + #if defined(TARGET_OS_ANDROID) const struct CanvasGPUCanvasContext *canvas_native_webgpu_context_create(struct CanvasWebGPUInstance *instance, void *window, @@ -3269,6 +3336,16 @@ void canvas_native_webgpu_queue_reference(const struct CanvasGPUQueue *queue); void canvas_native_webgpu_queue_release(const struct CanvasGPUQueue *queue); +void canvas_native_webgpu_queue_copy_webgl_to_texture(const struct CanvasGPUQueue *queue, + const struct CanvasImageCopyWebGL *source, + const struct CanvasImageCopyTexture *destination, + const struct CanvasExtent3d *size); + +void canvas_native_webgpu_queue_copy_context_to_texture(const struct CanvasGPUQueue *queue, + const struct CanvasImageCopyCanvasRenderingContext2D *source, + const struct CanvasImageCopyTexture *destination, + const struct CanvasExtent3d *size); + void canvas_native_webgpu_queue_copy_image_asset_to_texture(const struct CanvasGPUQueue *queue, const struct CanvasImageCopyImageAsset *source, const struct CanvasImageCopyTexture *destination, @@ -3391,10 +3468,20 @@ void canvas_native_webgpu_render_pass_encoder_draw_indexed_indirect(const struct const struct CanvasGPUBuffer *indirect_buffer, uint64_t indirect_offset); +void canvas_native_webgpu_render_pass_encoder_multi_draw_indexed_indirect(const struct CanvasGPURenderPassEncoder *render_pass, + const struct CanvasGPUBuffer *indirect_buffer, + uint64_t indirect_offset, + uint32_t count); + void canvas_native_webgpu_render_pass_encoder_draw_indirect(const struct CanvasGPURenderPassEncoder *render_pass, const struct CanvasGPUBuffer *indirect_buffer, uint64_t indirect_offset); +void canvas_native_webgpu_render_pass_encoder_multi_draw_indirect(const struct CanvasGPURenderPassEncoder *render_pass, + const struct CanvasGPUBuffer *indirect_buffer, + uint64_t indirect_offset, + uint32_t count); + void canvas_native_webgpu_render_pass_encoder_end(const struct CanvasGPURenderPassEncoder *render_pass); void canvas_native_webgpu_render_pass_encoder_end_occlusion_query(const struct CanvasGPURenderPassEncoder *render_pass); @@ -3568,10 +3655,18 @@ char *canvas_native_string_buffer_get_value_at(const struct StringBuffer *buffer void canvas_native_string_buffer_release(struct StringBuffer *buffer); +struct FileHelperMime *canvas_native_helper_get_mime(const uint8_t *data, uintptr_t size); + +void canvas_native_helper_release_mime(struct FileHelperMime *mime); + void canvas_native_helper_release(struct FileHelper *value); struct FileHelper *canvas_native_helper_read_file(const char *path); +char *canvas_native_helper_read_file_get_mime(struct FileHelper *file); + +char *canvas_native_helper_read_file_get_extension(struct FileHelper *file); + bool canvas_native_helper_read_file_has_error(const struct FileHelper *file); struct U8Buffer *canvas_native_helper_read_file_get_data(struct FileHelper *file); @@ -3595,9 +3690,15 @@ bool canvas_native_image_asset_load_from_fd(const struct ImageAsset *asset, int bool canvas_native_image_asset_load_from_path(const struct ImageAsset *asset, const char *path); bool canvas_native_image_asset_load_from_raw(const struct ImageAsset *asset, + uint32_t width, + uint32_t height, const uint8_t *array, uintptr_t size); +bool canvas_native_image_asset_load_from_raw_encoded(const struct ImageAsset *asset, + const uint8_t *array, + uintptr_t size); + bool canvas_native_image_asset_load_from_url(const struct ImageAsset *asset, const char *url); int64_t canvas_native_image_asset_addr(const struct ImageAsset *asset); @@ -3640,10 +3741,6 @@ struct U8Buffer *canvas_native_text_encoder_encode(const struct TextEncoder *enc const char *canvas_native_text_encoder_get_encoding(const struct TextEncoder *encoder); -bool canvas_native_context_gl_make_current(const struct CanvasRenderingContext2D *context); - -bool canvas_native_context_gl_swap_buffers(const struct CanvasRenderingContext2D *context); - struct PaintStyle *canvas_native_context_create_pattern_webgl(struct WebGLState *source, struct CanvasRenderingContext2D *context, enum CanvasRepetition repetition); @@ -3865,7 +3962,10 @@ bool canvas_native_webgl_oes_vertex_array_object_is_vertex_array_oes(uint32_t ar void canvas_native_webgl_oes_vertex_array_object_bind_vertex_array_oes(uint32_t array_object, const struct OES_vertex_array_object *object); -struct WebGLState *canvas_native_webgl_create(int64_t gl_context, +#if defined(TARGET_OS_ANDROID) +struct WebGLState *canvas_native_webgl_create(void *view, + int32_t width, + int32_t height, int32_t version, bool alpha, bool antialias, @@ -3877,6 +3977,22 @@ struct WebGLState *canvas_native_webgl_create(int64_t gl_context, bool stencil, bool desynchronized, bool xr_compatible); +#endif + +#if !defined(TARGET_OS_ANDROID) +struct WebGLState *canvas_native_webgl_create(void *view, + int32_t version, + bool alpha, + bool antialias, + bool depth, + bool fail_if_major_performance_caveat, + int32_t power_preference, + bool premultiplied_alpha, + bool preserve_drawing_buffer, + bool stencil, + bool desynchronized, + bool xr_compatible); +#endif struct WebGLState *canvas_native_webgl_create_no_window(int32_t width, int32_t height, @@ -5045,8 +5161,8 @@ void canvas_native_webgl2_tex_sub_image3d_canvas2d(uint32_t target, int32_t xoffset, int32_t yoffset, int32_t zoffset, - int32_t width, - int32_t height, + int32_t _width, + int32_t _height, int32_t depth, uint32_t format, uint32_t type_, diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo index 5940d14b7..0732f615d 100644 Binary files a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo and b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo differ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo index 1435f4ab3..19eab1eff 100644 Binary files a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo and b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo differ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.abi.json b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.abi.json index a6bbd23a2..a468657eb 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.abi.json +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.abi.json @@ -396,9 +396,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -415,7 +415,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initWebGPUWithViewLayer::::", - "mangledName": "$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ", + "mangledName": "$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -440,9 +440,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -459,7 +459,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initWebGPUWithView::::", - "mangledName": "$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ", + "mangledName": "$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -483,9 +483,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -502,7 +502,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)resizeWebGPUWithView::::", - "mangledName": "$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AFs6UInt32VAHtFZ", + "mangledName": "$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AA9NSCCanvasCs6UInt32VAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -510,8 +510,8 @@ }, { "kind": "Function", - "name": "initGLWithView", - "printedName": "initGLWithView(_:_:_:_:_:_:_:_:_:_:_:_:_:)", + "name": "initWebGLWithView", + "printedName": "initWebGLWithView(_:_:_:_:_:_:_:_:_:_:_:_:)", "children": [ { "kind": "TypeNominal", @@ -521,9 +521,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -590,17 +590,11 @@ "name": "Int32", "printedName": "Swift.Int32", "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initGLWithView:::::::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initWebGLWithView::::::::::::", + "mangledName": "$s12CanvasNative0A7HelpersC17initWebGLWithViewys5Int64VAA9NSCCanvasC_S4bs5Int32VS5bAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -608,112 +602,8 @@ }, { "kind": "Function", - "name": "initSharedGLWithView", - "printedName": "initSharedGLWithView(_:_:_:_:_:_:_:_:_:_:_:_:_:_:)", - "children": [ - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initSharedGLWithView::::::::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ", - "moduleName": "CanvasNative", - "static": true, - "declAttributes": ["Final", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, - { - "kind": "Function", - "name": "initGLWithWidthAndHeight", - "printedName": "initGLWithWidthAndHeight(_:_:_:_:_:_:_:_:_:_:_:_:_:_:)", + "name": "initWebGLWithWidthAndHeight", + "printedName": "initWebGLWithWidthAndHeight(_:_:_:_:_:_:_:_:_:_:_:_:_:)", "children": [ { "kind": "TypeNominal", @@ -798,127 +688,11 @@ "name": "Int32", "printedName": "Swift.Int32", "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initGLWithWidthAndHeight::::::::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ", - "moduleName": "CanvasNative", - "static": true, - "declAttributes": ["Final", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, - { - "kind": "Function", - "name": "initSharedGLWidthAndHeight", - "printedName": "initSharedGLWidthAndHeight(_:_:_:_:_:_:_:_:_:_:_:_:_:_:_:)", - "children": [ - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initSharedGLWidthAndHeight:::::::::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initWebGLWithWidthAndHeight:::::::::::::", + "mangledName": "$s12CanvasNative0A7HelpersC27initWebGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -988,14 +762,13 @@ }, { "kind": "Function", - "name": "flushGL", - "printedName": "flushGL(_:)", + "name": "flush2DContextAndSyncCPU", + "printedName": "flush2DContextAndSyncCPU(_:)", "children": [ { "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" + "name": "Void", + "printedName": "()" }, { "kind": "TypeNominal", @@ -1005,8 +778,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)flushGL:", - "mangledName": "$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)flush2DContextAndSyncCPU:", + "mangledName": "$s12CanvasNative0A7HelpersC24flush2DContextAndSyncCPUyys5Int64VFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1014,8 +787,8 @@ }, { "kind": "Function", - "name": "releaseGL", - "printedName": "releaseGL(_:)", + "name": "presentDrawable", + "printedName": "presentDrawable(_:)", "children": [ { "kind": "TypeNominal", @@ -1030,8 +803,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)releaseGL:", - "mangledName": "$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)presentDrawable:", + "mangledName": "$s12CanvasNative0A7HelpersC15presentDrawableyys5Int64VFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1039,14 +812,14 @@ }, { "kind": "Function", - "name": "getGLPointer", - "printedName": "getGLPointer(_:)", + "name": "flushWebGL", + "printedName": "flushWebGL(_:)", "children": [ { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" }, { "kind": "TypeNominal", @@ -1056,8 +829,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)getGLPointer:", - "mangledName": "$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)flushWebGL:", + "mangledName": "$s12CanvasNative0A7HelpersC10flushWebGLySbs5Int64VFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1065,8 +838,8 @@ }, { "kind": "Function", - "name": "releaseGLPointer", - "printedName": "releaseGLPointer(_:)", + "name": "releaseWebGL", + "printedName": "releaseWebGL(_:)", "children": [ { "kind": "TypeNominal", @@ -1081,8 +854,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)releaseGLPointer:", - "mangledName": "$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)releaseWebGL:", + "mangledName": "$s12CanvasNative0A7HelpersC12releaseWebGLyys5Int64VFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1091,7 +864,7 @@ { "kind": "Function", "name": "create2DContext", - "printedName": "create2DContext(_:_:_:_:_:_:_:_:_:)", + "printedName": "create2DContext(_:_:_:_:_:_:_:_:)", "children": [ { "kind": "TypeNominal", @@ -1101,9 +874,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -1135,12 +908,6 @@ "printedName": "Swift.Int32", "usr": "s:s5Int32V" }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, { "kind": "TypeNominal", "name": "Float", @@ -1155,8 +922,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)create2DContext:::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)create2DContext::::::::", + "mangledName": "$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAA9NSCCanvasC_s5Int32VAJSbSfAJSfAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1164,14 +931,9 @@ }, { "kind": "Function", - "name": "updateGLSurfaceWithView", - "printedName": "updateGLSurfaceWithView(_:_:_:_:)", + "name": "create2DContextMetal", + "printedName": "create2DContextMetal(_:_:_:_:_:_:)", "children": [ - { - "kind": "TypeNominal", - "name": "Void", - "printedName": "()" - }, { "kind": "TypeNominal", "name": "Int64", @@ -1180,9 +942,21 @@ }, { "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" + }, + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + }, + { + "kind": "TypeNominal", + "name": "Float", + "printedName": "Swift.Float", + "usr": "s:Sf" }, { "kind": "TypeNominal", @@ -1192,14 +966,20 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "Float", + "printedName": "Swift.Float", + "usr": "s:Sf" + }, + { + "kind": "TypeNominal", + "name": "Int32", + "printedName": "Swift.Int32", + "usr": "s:s5Int32V" } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)updateGLSurfaceWithView::::", - "mangledName": "$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)create2DContextMetal::::::", + "mangledName": "$s12CanvasNative0A7HelpersC20create2DContextMetalys5Int64VAA9NSCCanvasC_SbSfs5Int32VSfAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1207,8 +987,8 @@ }, { "kind": "Function", - "name": "test2D", - "printedName": "test2D(_:)", + "name": "updateWebGLSurfaceWithView", + "printedName": "updateWebGLSurfaceWithView(_:_:_:_:)", "children": [ { "kind": "TypeNominal", @@ -1220,26 +1000,18 @@ "name": "Int64", "printedName": "Swift.Int64", "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)test2D:", - "mangledName": "$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ", - "moduleName": "CanvasNative", - "static": true, - "declAttributes": ["Final", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, - { - "kind": "Function", - "name": "testToDataURL", - "printedName": "testToDataURL(_:)", - "children": [ + }, { "kind": "TypeNominal", - "name": "String", - "printedName": "Swift.String", - "usr": "s:SS" + "name": "Int32", + "printedName": "Swift.Int32", + "usr": "s:s5Int32V" + }, + { + "kind": "TypeNominal", + "name": "Int32", + "printedName": "Swift.Int32", + "usr": "s:s5Int32V" }, { "kind": "TypeNominal", @@ -1249,8 +1021,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)testToDataURL:", - "mangledName": "$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)updateWebGLSurfaceWithView::::", + "mangledName": "$s12CanvasNative0A7HelpersC26updateWebGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -2680,6 +2452,95 @@ "name": "NSCCanvas", "printedName": "NSCCanvas", "children": [ + { + "kind": "Var", + "name": "forceGL", + "printedName": "forceGL", + "children": [ + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(cpy)forceGL", + "mangledName": "$s12CanvasNative9NSCCanvasC7forceGLSbvpZ", + "moduleName": "CanvasNative", + "static": true, + "declAttributes": ["HasInitialValue", "Final", "HasStorage", "Custom", "AccessControl", "ObjC"], + "hasStorage": true, + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(cm)forceGL", + "mangledName": "$s12CanvasNative9NSCCanvasC7forceGLSbvgZ", + "moduleName": "CanvasNative", + "static": true, + "implicit": true, + "declAttributes": ["Final", "ObjC"], + "accessorKind": "get" + }, + { + "kind": "Accessor", + "name": "Set", + "printedName": "Set()", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(cm)setForceGL:", + "mangledName": "$s12CanvasNative9NSCCanvasC7forceGLSbvsZ", + "moduleName": "CanvasNative", + "static": true, + "implicit": true, + "declAttributes": ["Final", "ObjC"], + "accessorKind": "set" + }, + { + "kind": "Accessor", + "name": "Modify", + "printedName": "Modify()", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + } + ], + "declKind": "Accessor", + "usr": "s:12CanvasNative9NSCCanvasC7forceGLSbvMZ", + "mangledName": "$s12CanvasNative9NSCCanvasC7forceGLSbvMZ", + "moduleName": "CanvasNative", + "static": true, + "implicit": true, + "declAttributes": ["Final"], + "accessorKind": "_modify" + } + ] + }, { "kind": "TypeDecl", "name": "CanvasFit", @@ -3000,19 +2861,103 @@ }, { "kind": "Var", - "name": "fit", - "printedName": "fit", + "name": "fit", + "printedName": "fit", + "children": [ + { + "kind": "TypeNominal", + "name": "CanvasFit", + "printedName": "CanvasNative.NSCCanvas.CanvasFit", + "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)fit", + "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvp", + "moduleName": "CanvasNative", + "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "AccessControl", "ObjC"], + "hasStorage": true, + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CanvasFit", + "printedName": "CanvasNative.NSCCanvas.CanvasFit", + "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)fit", + "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvg", + "moduleName": "CanvasNative", + "implicit": true, + "declAttributes": ["ObjC"], + "accessorKind": "get" + }, + { + "kind": "Accessor", + "name": "Set", + "printedName": "Set()", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "CanvasFit", + "printedName": "CanvasNative.NSCCanvas.CanvasFit", + "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)setFit:", + "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvs", + "moduleName": "CanvasNative", + "implicit": true, + "declAttributes": ["ObjC"], + "accessorKind": "set" + }, + { + "kind": "Accessor", + "name": "Modify", + "printedName": "Modify()", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + } + ], + "declKind": "Accessor", + "usr": "s:12CanvasNative9NSCCanvasC3fitAC0A3FitOvM", + "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM", + "moduleName": "CanvasNative", + "implicit": true, + "accessorKind": "_modify" + } + ] + }, + { + "kind": "Var", + "name": "weblikeScale", + "printedName": "weblikeScale", "children": [ { "kind": "TypeNominal", - "name": "CanvasFit", - "printedName": "CanvasNative.NSCCanvas.CanvasFit", - "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Var", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)fit", - "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvp", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)weblikeScale", + "mangledName": "$s12CanvasNative9NSCCanvasC12weblikeScaleSbvp", "moduleName": "CanvasNative", "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "AccessControl", "ObjC"], "hasStorage": true, @@ -3024,14 +2969,14 @@ "children": [ { "kind": "TypeNominal", - "name": "CanvasFit", - "printedName": "CanvasNative.NSCCanvas.CanvasFit", - "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)fit", - "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvg", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)weblikeScale", + "mangledName": "$s12CanvasNative9NSCCanvasC12weblikeScaleSbvg", "moduleName": "CanvasNative", "implicit": true, "declAttributes": ["ObjC"], @@ -3049,14 +2994,14 @@ }, { "kind": "TypeNominal", - "name": "CanvasFit", - "printedName": "CanvasNative.NSCCanvas.CanvasFit", - "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)setFit:", - "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvs", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)setWeblikeScale:", + "mangledName": "$s12CanvasNative9NSCCanvasC12weblikeScaleSbvs", "moduleName": "CanvasNative", "implicit": true, "declAttributes": ["ObjC"], @@ -3074,8 +3019,8 @@ } ], "declKind": "Accessor", - "usr": "s:12CanvasNative9NSCCanvasC3fitAC0A3FitOvM", - "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM", + "usr": "s:12CanvasNative9NSCCanvasC12weblikeScaleSbvM", + "mangledName": "$s12CanvasNative9NSCCanvasC12weblikeScaleSbvM", "moduleName": "CanvasNative", "implicit": true, "accessorKind": "_modify" @@ -3162,8 +3107,8 @@ }, { "kind": "Function", - "name": "getViewPtr", - "printedName": "getViewPtr()", + "name": "getGlViewPtr", + "printedName": "getGlViewPtr()", "children": [ { "kind": "TypeNominal", @@ -3173,8 +3118,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)getViewPtr", - "mangledName": "$s12CanvasNative9NSCCanvasC10getViewPtrSvyF", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)getGlViewPtr", + "mangledName": "$s12CanvasNative9NSCCanvasC12getGlViewPtrSvyF", "moduleName": "CanvasNative", "declAttributes": ["Custom", "AccessControl", "ObjC"], "funcSelfKind": "NonMutating" @@ -3198,6 +3143,25 @@ "declAttributes": ["Custom", "AccessControl", "ObjC"], "funcSelfKind": "NonMutating" }, + { + "kind": "Function", + "name": "getMtlLayerPtr", + "printedName": "getMtlLayerPtr()", + "children": [ + { + "kind": "TypeNominal", + "name": "UnsafeMutableRawPointer", + "printedName": "Swift.UnsafeMutableRawPointer", + "usr": "s:Sv" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)getMtlLayerPtr", + "mangledName": "$s12CanvasNative9NSCCanvasC14getMtlLayerPtrSvyF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, { "kind": "Var", "name": "autoScale", @@ -3284,8 +3248,8 @@ }, { "kind": "Var", - "name": "nativeGL", - "printedName": "nativeGL", + "name": "nativeContext", + "printedName": "nativeContext", "children": [ { "kind": "TypeNominal", @@ -3295,8 +3259,8 @@ } ], "declKind": "Var", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)nativeGL", - "mangledName": "$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvp", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)nativeContext", + "mangledName": "$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvp", "moduleName": "CanvasNative", "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "AccessControl", "SetterAccess", "ObjC"], "hasStorage": true, @@ -3314,8 +3278,8 @@ } ], "declKind": "Accessor", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)nativeGL", - "mangledName": "$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)nativeContext", + "mangledName": "$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg", "moduleName": "CanvasNative", "implicit": true, "declAttributes": ["ObjC"], @@ -3325,19 +3289,19 @@ }, { "kind": "Var", - "name": "nativeContext", - "printedName": "nativeContext", + "name": "is2D", + "printedName": "is2D", "children": [ { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Var", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)nativeContext", - "mangledName": "$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvp", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)is2D", + "mangledName": "$s12CanvasNative9NSCCanvasC4is2DSbvp", "moduleName": "CanvasNative", "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "AccessControl", "SetterAccess", "ObjC"], "hasStorage": true, @@ -3349,14 +3313,14 @@ "children": [ { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)nativeContext", - "mangledName": "$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)is2D", + "mangledName": "$s12CanvasNative9NSCCanvasC4is2DSbvg", "moduleName": "CanvasNative", "implicit": true, "declAttributes": ["ObjC"], @@ -3520,6 +3484,37 @@ } ] }, + { + "kind": "Function", + "name": "toDataURL", + "printedName": "toDataURL(_:_:)", + "children": [ + { + "kind": "TypeNominal", + "name": "String", + "printedName": "Swift.String", + "usr": "s:SS" + }, + { + "kind": "TypeNominal", + "name": "String", + "printedName": "Swift.String", + "usr": "s:SS" + }, + { + "kind": "TypeNominal", + "name": "Float", + "printedName": "Swift.Float", + "usr": "s:Sf" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)toDataURL::", + "mangledName": "$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, { "kind": "Function", "name": "initContext", @@ -3775,55 +3770,6 @@ "declAttributes": ["Custom", "AccessControl", "DiscardableResult", "ObjC"], "funcSelfKind": "NonMutating" }, - { - "kind": "Function", - "name": "context2DTest", - "printedName": "context2DTest(_:)", - "children": [ - { - "kind": "TypeNominal", - "name": "Void", - "printedName": "()" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DTest:", - "mangledName": "$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF", - "moduleName": "CanvasNative", - "declAttributes": ["Custom", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, - { - "kind": "Function", - "name": "context2DTestToDataURL", - "printedName": "context2DTestToDataURL(_:)", - "children": [ - { - "kind": "TypeNominal", - "name": "String", - "printedName": "Swift.String", - "usr": "s:SS" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DTestToDataURL:", - "mangledName": "$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF", - "moduleName": "CanvasNative", - "declAttributes": ["Custom", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, { "kind": "Var", "name": "touchEventListener", @@ -4348,6 +4294,78 @@ "declAttributes": ["Custom", "AccessControl", "ObjC"], "funcSelfKind": "NonMutating" }, + { + "kind": "Function", + "name": "context2DTest", + "printedName": "context2DTest(_:)", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "Int64", + "printedName": "Swift.Int64", + "usr": "s:s5Int64V" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DTest:", + "mangledName": "$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, + { + "kind": "Function", + "name": "context2DPathTest", + "printedName": "context2DPathTest(_:)", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "Int64", + "printedName": "Swift.Int64", + "usr": "s:s5Int64V" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DPathTest:", + "mangledName": "$s12CanvasNative9NSCCanvasC17context2DPathTestyys5Int64VF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, + { + "kind": "Function", + "name": "context2DConic", + "printedName": "context2DConic(_:)", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "Int64", + "printedName": "Swift.Int64", + "usr": "s:s5Int64V" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DConic:", + "mangledName": "$s12CanvasNative9NSCCanvasC14context2DConicyys5Int64VF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, { "kind": "Function", "name": "layoutSubviews", @@ -7016,206 +7034,171 @@ "length": 13, "value": "\"CanvasNative.NSCVideoFrame\"" }, + { + "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", + "kind": "BooleanLiteral", + "offset": 296, + "length": 4, + "value": "true" + }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 524, + "offset": 558, "length": 4, "value": "1" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 542, + "offset": 576, "length": 4, "value": "2" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 560, + "offset": 594, "length": 4, "value": "3" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 578, + "offset": 612, "length": 9, "value": "4" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1524, - "length": 1, - "value": "0" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1530, - "length": 1, - "value": "0" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1540, - "length": 1, - "value": "1" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1551, - "length": 1, - "value": "1" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1608, - "length": 1, - "value": "0" + "kind": "BooleanLiteral", + "offset": 1519, + "length": 5, + "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 3589, + "offset": 2867, "length": 1, "value": "1" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 3492, + "offset": 2770, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 3768, - "length": 1, - "value": "0" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 3826, - "length": 1, - "value": "0" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 3879, + "offset": 3046, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 3910, + "offset": 3088, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5183, + "offset": 5851, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5217, + "offset": 5885, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5247, + "offset": 5915, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5300, + "offset": 5968, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 5342, + "offset": 6010, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5382, + "offset": 6050, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5428, + "offset": 6096, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5461, + "offset": 6129, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5501, + "offset": 6169, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5539, + "offset": 6207, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 14811, + "offset": 15486, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 15246, + "offset": 15921, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 15297, + "offset": 15972, "length": 3, "value": "300" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 15474, + "offset": 16146, "length": 3, "value": "150" }, @@ -7236,35 +7219,35 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11212, + "offset": 10144, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11383, + "offset": 10315, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11556, + "offset": 10488, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11727, + "offset": 10659, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11897, + "offset": 10829, "length": 5, "value": "false" }, @@ -7320,14 +7303,14 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/GLRenderer.swift", "kind": "BooleanLiteral", - "offset": 2249, + "offset": 2255, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/GLRenderer.swift", "kind": "BooleanLiteral", - "offset": 2325, + "offset": 2331, "length": 5, "value": "false" }, diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface index eb5cce92a..62787e75d 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface @@ -25,23 +25,20 @@ import _SwiftConcurrencyShims @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, dx: Swift.Float, dy: Swift.Float) -> Swift.Bool @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, dx: Swift.Float, dy: Swift.Float, dw: Swift.Float, dh: Swift.Float) -> Swift.Bool @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, sx: Swift.Float, sy: Swift.Float, sw: Swift.Float, sh: Swift.Float, dx: Swift.Float, dy: Swift.Float, dw: Swift.Float, dh: Swift.Float) -> Swift.Bool - @objc public static func initWebGPUWithViewLayer(_ instance: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 - @objc public static func initWebGPUWithView(_ instance: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 - @objc public static func resizeWebGPUWithView(_ context: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) - @objc public static func initGLWithView(_ view: Swift.Int64, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool) -> Swift.Int64 - @objc public static func initSharedGLWithView(_ view: Swift.Int64, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool, _ shared_context: Swift.Int64) -> Swift.Int64 - @objc public static func initGLWithWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool) -> Swift.Int64 - @objc public static func initSharedGLWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool, _ shared_context: Swift.Int64) -> Swift.Int64 + @objc public static func initWebGPUWithViewLayer(_ instance: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 + @objc public static func initWebGPUWithView(_ instance: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 + @objc public static func resizeWebGPUWithView(_ context: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) + @objc public static func initWebGLWithView(_ view: CanvasNative.NSCCanvas, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32) -> Swift.Int64 + @objc public static func initWebGLWithWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32) -> Swift.Int64 @objc public static func resize2DContext(_ context: Swift.Int64, _ width: Swift.Float, _ height: Swift.Float) @objc public static func flush2DContext(_ context: Swift.Int64) - @objc public static func flushGL(_ context: Swift.Int64) -> Swift.Bool - @objc public static func releaseGL(_ context: Swift.Int64) - @objc public static func getGLPointer(_ context: Swift.Int64) -> Swift.Int64 - @objc public static func releaseGLPointer(_ context: Swift.Int64) - @objc public static func create2DContext(_ context: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ density: Swift.Float, _ samples: Swift.Int32, _ font_color: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 - @objc public static func updateGLSurfaceWithView(_ view: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ context: Swift.Int64) - @objc public static func test2D(_ context: Swift.Int64) - @objc public static func testToDataURL(_ context: Swift.Int64) -> Swift.String + @objc public static func flush2DContextAndSyncCPU(_ context: Swift.Int64) + @objc public static func presentDrawable(_ context: Swift.Int64) + @objc public static func flushWebGL(_ context: Swift.Int64) -> Swift.Bool + @objc public static func releaseWebGL(_ context: Swift.Int64) + @objc public static func create2DContext(_ view: CanvasNative.NSCCanvas, _ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ density: Swift.Float, _ fontColor: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 + @objc public static func create2DContextMetal(_ view: CanvasNative.NSCCanvas, _ alpha: Swift.Bool, _ density: Swift.Float, _ fontColor: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 + @objc public static func updateWebGLSurfaceWithView(_ view: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ context: Swift.Int64) @objc public static func writeFile(_ data: Foundation.NSData, _ path: Swift.String, _ callback: @escaping (Swift.String?, Swift.String?) -> Swift.Void) @objc public static func readFile(_ path: Swift.String, _ callback: @escaping (Swift.String?, Foundation.NSData?) -> Swift.Void) @objc public static func deleteFile(_ path: Swift.String, _ callback: @escaping (Foundation.NSError?, Swift.Bool) -> Swift.Void) @@ -95,6 +92,7 @@ import _SwiftConcurrencyShims @objc deinit } @_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCCanvas) @_Concurrency.MainActor(unsafe) public class NSCCanvas : UIKit.UIView { + @objc @_Concurrency.MainActor(unsafe) public static var forceGL: Swift.Bool @objc(CanvasFit) public enum CanvasFit : Swift.Int, Swift.RawRepresentable { public typealias RawValue = Swift.UInt32 case None @@ -111,18 +109,23 @@ import _SwiftConcurrencyShims @objc get @objc set } + @objc @_Concurrency.MainActor(unsafe) public var weblikeScale: Swift.Bool { + @objc get + @objc set + } @objc @_Concurrency.MainActor(unsafe) public static let store: Foundation.NSMutableDictionary @objc @_Concurrency.MainActor(unsafe) public static func getViews() -> Foundation.NSMapTable - @objc @_Concurrency.MainActor(unsafe) public func getViewPtr() -> Swift.UnsafeMutableRawPointer + @objc @_Concurrency.MainActor(unsafe) public func getGlViewPtr() -> Swift.UnsafeMutableRawPointer @objc @_Concurrency.MainActor(unsafe) public func getMtlViewPtr() -> Swift.UnsafeMutableRawPointer + @objc @_Concurrency.MainActor(unsafe) public func getMtlLayerPtr() -> Swift.UnsafeMutableRawPointer @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set } - @objc @_Concurrency.MainActor(unsafe) public var nativeGL: Swift.Int64 { + @objc @_Concurrency.MainActor(unsafe) public var nativeContext: Swift.Int64 { get } - @objc @_Concurrency.MainActor(unsafe) public var nativeContext: Swift.Int64 { + @objc @_Concurrency.MainActor(unsafe) public var is2D: Swift.Bool { get } @objc @_Concurrency.MainActor(unsafe) public var drawingBufferWidth: CoreFoundation.CGFloat { @@ -137,14 +140,13 @@ import _SwiftConcurrencyShims @objc @_Concurrency.MainActor(unsafe) public var height: Swift.Float { @objc get } + @objc @_Concurrency.MainActor(unsafe) public func toDataURL(_ format: Swift.String, _ quality: Swift.Float) -> Swift.String @objc @_Concurrency.MainActor(unsafe) public func initContext(_ type: Swift.String, _ alpha: Swift.Bool = true, _ antialias: Swift.Bool = true, _ depth: Swift.Bool = true, _ failIfMajorPerformanceCaveat: Swift.Bool = false, _ powerPreference: Swift.Int32 = 0, _ premultipliedAlpha: Swift.Bool = true, _ preserveDrawingBuffer: Swift.Bool = false, _ stencil: Swift.Bool = false, _ desynchronized: Swift.Bool = false, _ xrCompatible: Swift.Bool = false) @objc @_Concurrency.MainActor(unsafe) public func initWebGPUContext(_ instance: Swift.Int64) @objc @_Concurrency.MainActor(unsafe) public func create2DContext(_ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ failIfMajorPerformanceCaveat: Swift.Bool, _ powerPreference: Swift.Int32, _ premultipliedAlpha: Swift.Bool, _ preserveDrawingBuffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xrCompatible: Swift.Bool, _ fontColor: Swift.Int32) -> Swift.Int64 @objc @_Concurrency.MainActor(unsafe) public func snapshot(_ flip: Swift.Bool) -> UIKit.UIImage? @objc @discardableResult @_Concurrency.MainActor(unsafe) public func render() -> Swift.Bool - @objc @_Concurrency.MainActor(unsafe) public func context2DTest(_ context: Swift.Int64) - @objc @_Concurrency.MainActor(unsafe) public func context2DTestToDataURL(_ context: Swift.Int64) -> Swift.String @objc @_Concurrency.MainActor(unsafe) public var touchEventListener: ((Swift.String, UIKit.UIGestureRecognizer) -> Swift.Void)? @_Concurrency.MainActor(unsafe) @objc override dynamic public init(frame: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public var ignoreTouchEvents: Swift.Bool { @@ -161,6 +163,9 @@ import _SwiftConcurrencyShims @objc set } @objc @_Concurrency.MainActor(unsafe) public func forceLayout(_ width: CoreFoundation.CGFloat, _ height: CoreFoundation.CGFloat) + @objc @_Concurrency.MainActor(unsafe) public func context2DTest(_ context: Swift.Int64) + @objc @_Concurrency.MainActor(unsafe) public func context2DPathTest(_ context: Swift.Int64) + @objc @_Concurrency.MainActor(unsafe) public func context2DConic(_ context: Swift.Int64) @_Concurrency.MainActor(unsafe) @objc override dynamic public func layoutSubviews() @objc deinit @objc @_Concurrency.MainActor(unsafe) public static func getBoundingClientRect(_ view: UIKit.UIView, _ buffer: Swift.UnsafeMutableRawPointer) diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.swiftinterface b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.swiftinterface index eb5cce92a..62787e75d 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.swiftinterface +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.swiftinterface @@ -25,23 +25,20 @@ import _SwiftConcurrencyShims @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, dx: Swift.Float, dy: Swift.Float) -> Swift.Bool @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, dx: Swift.Float, dy: Swift.Float, dw: Swift.Float, dh: Swift.Float) -> Swift.Bool @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, sx: Swift.Float, sy: Swift.Float, sw: Swift.Float, sh: Swift.Float, dx: Swift.Float, dy: Swift.Float, dw: Swift.Float, dh: Swift.Float) -> Swift.Bool - @objc public static func initWebGPUWithViewLayer(_ instance: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 - @objc public static func initWebGPUWithView(_ instance: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 - @objc public static func resizeWebGPUWithView(_ context: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) - @objc public static func initGLWithView(_ view: Swift.Int64, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool) -> Swift.Int64 - @objc public static func initSharedGLWithView(_ view: Swift.Int64, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool, _ shared_context: Swift.Int64) -> Swift.Int64 - @objc public static func initGLWithWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool) -> Swift.Int64 - @objc public static func initSharedGLWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool, _ shared_context: Swift.Int64) -> Swift.Int64 + @objc public static func initWebGPUWithViewLayer(_ instance: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 + @objc public static func initWebGPUWithView(_ instance: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 + @objc public static func resizeWebGPUWithView(_ context: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) + @objc public static func initWebGLWithView(_ view: CanvasNative.NSCCanvas, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32) -> Swift.Int64 + @objc public static func initWebGLWithWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32) -> Swift.Int64 @objc public static func resize2DContext(_ context: Swift.Int64, _ width: Swift.Float, _ height: Swift.Float) @objc public static func flush2DContext(_ context: Swift.Int64) - @objc public static func flushGL(_ context: Swift.Int64) -> Swift.Bool - @objc public static func releaseGL(_ context: Swift.Int64) - @objc public static func getGLPointer(_ context: Swift.Int64) -> Swift.Int64 - @objc public static func releaseGLPointer(_ context: Swift.Int64) - @objc public static func create2DContext(_ context: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ density: Swift.Float, _ samples: Swift.Int32, _ font_color: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 - @objc public static func updateGLSurfaceWithView(_ view: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ context: Swift.Int64) - @objc public static func test2D(_ context: Swift.Int64) - @objc public static func testToDataURL(_ context: Swift.Int64) -> Swift.String + @objc public static func flush2DContextAndSyncCPU(_ context: Swift.Int64) + @objc public static func presentDrawable(_ context: Swift.Int64) + @objc public static func flushWebGL(_ context: Swift.Int64) -> Swift.Bool + @objc public static func releaseWebGL(_ context: Swift.Int64) + @objc public static func create2DContext(_ view: CanvasNative.NSCCanvas, _ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ density: Swift.Float, _ fontColor: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 + @objc public static func create2DContextMetal(_ view: CanvasNative.NSCCanvas, _ alpha: Swift.Bool, _ density: Swift.Float, _ fontColor: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 + @objc public static func updateWebGLSurfaceWithView(_ view: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ context: Swift.Int64) @objc public static func writeFile(_ data: Foundation.NSData, _ path: Swift.String, _ callback: @escaping (Swift.String?, Swift.String?) -> Swift.Void) @objc public static func readFile(_ path: Swift.String, _ callback: @escaping (Swift.String?, Foundation.NSData?) -> Swift.Void) @objc public static func deleteFile(_ path: Swift.String, _ callback: @escaping (Foundation.NSError?, Swift.Bool) -> Swift.Void) @@ -95,6 +92,7 @@ import _SwiftConcurrencyShims @objc deinit } @_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCCanvas) @_Concurrency.MainActor(unsafe) public class NSCCanvas : UIKit.UIView { + @objc @_Concurrency.MainActor(unsafe) public static var forceGL: Swift.Bool @objc(CanvasFit) public enum CanvasFit : Swift.Int, Swift.RawRepresentable { public typealias RawValue = Swift.UInt32 case None @@ -111,18 +109,23 @@ import _SwiftConcurrencyShims @objc get @objc set } + @objc @_Concurrency.MainActor(unsafe) public var weblikeScale: Swift.Bool { + @objc get + @objc set + } @objc @_Concurrency.MainActor(unsafe) public static let store: Foundation.NSMutableDictionary @objc @_Concurrency.MainActor(unsafe) public static func getViews() -> Foundation.NSMapTable - @objc @_Concurrency.MainActor(unsafe) public func getViewPtr() -> Swift.UnsafeMutableRawPointer + @objc @_Concurrency.MainActor(unsafe) public func getGlViewPtr() -> Swift.UnsafeMutableRawPointer @objc @_Concurrency.MainActor(unsafe) public func getMtlViewPtr() -> Swift.UnsafeMutableRawPointer + @objc @_Concurrency.MainActor(unsafe) public func getMtlLayerPtr() -> Swift.UnsafeMutableRawPointer @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set } - @objc @_Concurrency.MainActor(unsafe) public var nativeGL: Swift.Int64 { + @objc @_Concurrency.MainActor(unsafe) public var nativeContext: Swift.Int64 { get } - @objc @_Concurrency.MainActor(unsafe) public var nativeContext: Swift.Int64 { + @objc @_Concurrency.MainActor(unsafe) public var is2D: Swift.Bool { get } @objc @_Concurrency.MainActor(unsafe) public var drawingBufferWidth: CoreFoundation.CGFloat { @@ -137,14 +140,13 @@ import _SwiftConcurrencyShims @objc @_Concurrency.MainActor(unsafe) public var height: Swift.Float { @objc get } + @objc @_Concurrency.MainActor(unsafe) public func toDataURL(_ format: Swift.String, _ quality: Swift.Float) -> Swift.String @objc @_Concurrency.MainActor(unsafe) public func initContext(_ type: Swift.String, _ alpha: Swift.Bool = true, _ antialias: Swift.Bool = true, _ depth: Swift.Bool = true, _ failIfMajorPerformanceCaveat: Swift.Bool = false, _ powerPreference: Swift.Int32 = 0, _ premultipliedAlpha: Swift.Bool = true, _ preserveDrawingBuffer: Swift.Bool = false, _ stencil: Swift.Bool = false, _ desynchronized: Swift.Bool = false, _ xrCompatible: Swift.Bool = false) @objc @_Concurrency.MainActor(unsafe) public func initWebGPUContext(_ instance: Swift.Int64) @objc @_Concurrency.MainActor(unsafe) public func create2DContext(_ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ failIfMajorPerformanceCaveat: Swift.Bool, _ powerPreference: Swift.Int32, _ premultipliedAlpha: Swift.Bool, _ preserveDrawingBuffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xrCompatible: Swift.Bool, _ fontColor: Swift.Int32) -> Swift.Int64 @objc @_Concurrency.MainActor(unsafe) public func snapshot(_ flip: Swift.Bool) -> UIKit.UIImage? @objc @discardableResult @_Concurrency.MainActor(unsafe) public func render() -> Swift.Bool - @objc @_Concurrency.MainActor(unsafe) public func context2DTest(_ context: Swift.Int64) - @objc @_Concurrency.MainActor(unsafe) public func context2DTestToDataURL(_ context: Swift.Int64) -> Swift.String @objc @_Concurrency.MainActor(unsafe) public var touchEventListener: ((Swift.String, UIKit.UIGestureRecognizer) -> Swift.Void)? @_Concurrency.MainActor(unsafe) @objc override dynamic public init(frame: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public var ignoreTouchEvents: Swift.Bool { @@ -161,6 +163,9 @@ import _SwiftConcurrencyShims @objc set } @objc @_Concurrency.MainActor(unsafe) public func forceLayout(_ width: CoreFoundation.CGFloat, _ height: CoreFoundation.CGFloat) + @objc @_Concurrency.MainActor(unsafe) public func context2DTest(_ context: Swift.Int64) + @objc @_Concurrency.MainActor(unsafe) public func context2DPathTest(_ context: Swift.Int64) + @objc @_Concurrency.MainActor(unsafe) public func context2DConic(_ context: Swift.Int64) @_Concurrency.MainActor(unsafe) @objc override dynamic public func layoutSubviews() @objc deinit @objc @_Concurrency.MainActor(unsafe) public static func getBoundingClientRect(_ view: UIKit.UIView, _ buffer: Swift.UnsafeMutableRawPointer) diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.abi.json b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.abi.json index a6bbd23a2..a468657eb 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.abi.json +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.abi.json @@ -396,9 +396,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -415,7 +415,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initWebGPUWithViewLayer::::", - "mangledName": "$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ", + "mangledName": "$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -440,9 +440,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -459,7 +459,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initWebGPUWithView::::", - "mangledName": "$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ", + "mangledName": "$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -483,9 +483,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -502,7 +502,7 @@ ], "declKind": "Func", "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)resizeWebGPUWithView::::", - "mangledName": "$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AFs6UInt32VAHtFZ", + "mangledName": "$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AA9NSCCanvasCs6UInt32VAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -510,8 +510,8 @@ }, { "kind": "Function", - "name": "initGLWithView", - "printedName": "initGLWithView(_:_:_:_:_:_:_:_:_:_:_:_:_:)", + "name": "initWebGLWithView", + "printedName": "initWebGLWithView(_:_:_:_:_:_:_:_:_:_:_:_:)", "children": [ { "kind": "TypeNominal", @@ -521,9 +521,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -590,17 +590,11 @@ "name": "Int32", "printedName": "Swift.Int32", "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initGLWithView:::::::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initWebGLWithView::::::::::::", + "mangledName": "$s12CanvasNative0A7HelpersC17initWebGLWithViewys5Int64VAA9NSCCanvasC_S4bs5Int32VS5bAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -608,112 +602,8 @@ }, { "kind": "Function", - "name": "initSharedGLWithView", - "printedName": "initSharedGLWithView(_:_:_:_:_:_:_:_:_:_:_:_:_:_:)", - "children": [ - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initSharedGLWithView::::::::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ", - "moduleName": "CanvasNative", - "static": true, - "declAttributes": ["Final", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, - { - "kind": "Function", - "name": "initGLWithWidthAndHeight", - "printedName": "initGLWithWidthAndHeight(_:_:_:_:_:_:_:_:_:_:_:_:_:_:)", + "name": "initWebGLWithWidthAndHeight", + "printedName": "initWebGLWithWidthAndHeight(_:_:_:_:_:_:_:_:_:_:_:_:_:)", "children": [ { "kind": "TypeNominal", @@ -798,127 +688,11 @@ "name": "Int32", "printedName": "Swift.Int32", "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initGLWithWidthAndHeight::::::::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ", - "moduleName": "CanvasNative", - "static": true, - "declAttributes": ["Final", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, - { - "kind": "Function", - "name": "initSharedGLWidthAndHeight", - "printedName": "initSharedGLWidthAndHeight(_:_:_:_:_:_:_:_:_:_:_:_:_:_:_:)", - "children": [ - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initSharedGLWidthAndHeight:::::::::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)initWebGLWithWidthAndHeight:::::::::::::", + "mangledName": "$s12CanvasNative0A7HelpersC27initWebGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -988,14 +762,13 @@ }, { "kind": "Function", - "name": "flushGL", - "printedName": "flushGL(_:)", + "name": "flush2DContextAndSyncCPU", + "printedName": "flush2DContextAndSyncCPU(_:)", "children": [ { "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" + "name": "Void", + "printedName": "()" }, { "kind": "TypeNominal", @@ -1005,8 +778,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)flushGL:", - "mangledName": "$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)flush2DContextAndSyncCPU:", + "mangledName": "$s12CanvasNative0A7HelpersC24flush2DContextAndSyncCPUyys5Int64VFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1014,8 +787,8 @@ }, { "kind": "Function", - "name": "releaseGL", - "printedName": "releaseGL(_:)", + "name": "presentDrawable", + "printedName": "presentDrawable(_:)", "children": [ { "kind": "TypeNominal", @@ -1030,8 +803,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)releaseGL:", - "mangledName": "$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)presentDrawable:", + "mangledName": "$s12CanvasNative0A7HelpersC15presentDrawableyys5Int64VFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1039,14 +812,14 @@ }, { "kind": "Function", - "name": "getGLPointer", - "printedName": "getGLPointer(_:)", + "name": "flushWebGL", + "printedName": "flushWebGL(_:)", "children": [ { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" }, { "kind": "TypeNominal", @@ -1056,8 +829,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)getGLPointer:", - "mangledName": "$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)flushWebGL:", + "mangledName": "$s12CanvasNative0A7HelpersC10flushWebGLySbs5Int64VFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1065,8 +838,8 @@ }, { "kind": "Function", - "name": "releaseGLPointer", - "printedName": "releaseGLPointer(_:)", + "name": "releaseWebGL", + "printedName": "releaseWebGL(_:)", "children": [ { "kind": "TypeNominal", @@ -1081,8 +854,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)releaseGLPointer:", - "mangledName": "$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)releaseWebGL:", + "mangledName": "$s12CanvasNative0A7HelpersC12releaseWebGLyys5Int64VFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1091,7 +864,7 @@ { "kind": "Function", "name": "create2DContext", - "printedName": "create2DContext(_:_:_:_:_:_:_:_:_:)", + "printedName": "create2DContext(_:_:_:_:_:_:_:_:)", "children": [ { "kind": "TypeNominal", @@ -1101,9 +874,9 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" }, { "kind": "TypeNominal", @@ -1135,12 +908,6 @@ "printedName": "Swift.Int32", "usr": "s:s5Int32V" }, - { - "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" - }, { "kind": "TypeNominal", "name": "Float", @@ -1155,8 +922,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)create2DContext:::::::::", - "mangledName": "$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)create2DContext::::::::", + "mangledName": "$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAA9NSCCanvasC_s5Int32VAJSbSfAJSfAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1164,14 +931,9 @@ }, { "kind": "Function", - "name": "updateGLSurfaceWithView", - "printedName": "updateGLSurfaceWithView(_:_:_:_:)", + "name": "create2DContextMetal", + "printedName": "create2DContextMetal(_:_:_:_:_:_:)", "children": [ - { - "kind": "TypeNominal", - "name": "Void", - "printedName": "()" - }, { "kind": "TypeNominal", "name": "Int64", @@ -1180,9 +942,21 @@ }, { "kind": "TypeNominal", - "name": "Int32", - "printedName": "Swift.Int32", - "usr": "s:s5Int32V" + "name": "NSCCanvas", + "printedName": "CanvasNative.NSCCanvas", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas" + }, + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + }, + { + "kind": "TypeNominal", + "name": "Float", + "printedName": "Swift.Float", + "usr": "s:Sf" }, { "kind": "TypeNominal", @@ -1192,14 +966,20 @@ }, { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "Float", + "printedName": "Swift.Float", + "usr": "s:Sf" + }, + { + "kind": "TypeNominal", + "name": "Int32", + "printedName": "Swift.Int32", + "usr": "s:s5Int32V" } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)updateGLSurfaceWithView::::", - "mangledName": "$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)create2DContextMetal::::::", + "mangledName": "$s12CanvasNative0A7HelpersC20create2DContextMetalys5Int64VAA9NSCCanvasC_SbSfs5Int32VSfAJtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -1207,8 +987,8 @@ }, { "kind": "Function", - "name": "test2D", - "printedName": "test2D(_:)", + "name": "updateWebGLSurfaceWithView", + "printedName": "updateWebGLSurfaceWithView(_:_:_:_:)", "children": [ { "kind": "TypeNominal", @@ -1220,26 +1000,18 @@ "name": "Int64", "printedName": "Swift.Int64", "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)test2D:", - "mangledName": "$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ", - "moduleName": "CanvasNative", - "static": true, - "declAttributes": ["Final", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, - { - "kind": "Function", - "name": "testToDataURL", - "printedName": "testToDataURL(_:)", - "children": [ + }, { "kind": "TypeNominal", - "name": "String", - "printedName": "Swift.String", - "usr": "s:SS" + "name": "Int32", + "printedName": "Swift.Int32", + "usr": "s:s5Int32V" + }, + { + "kind": "TypeNominal", + "name": "Int32", + "printedName": "Swift.Int32", + "usr": "s:s5Int32V" }, { "kind": "TypeNominal", @@ -1249,8 +1021,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)testToDataURL:", - "mangledName": "$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ", + "usr": "c:@M@CanvasNative@objc(cs)NSSCanvasHelpers(cm)updateWebGLSurfaceWithView::::", + "mangledName": "$s12CanvasNative0A7HelpersC26updateWebGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ", "moduleName": "CanvasNative", "static": true, "declAttributes": ["Final", "AccessControl", "ObjC"], @@ -2680,6 +2452,95 @@ "name": "NSCCanvas", "printedName": "NSCCanvas", "children": [ + { + "kind": "Var", + "name": "forceGL", + "printedName": "forceGL", + "children": [ + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(cpy)forceGL", + "mangledName": "$s12CanvasNative9NSCCanvasC7forceGLSbvpZ", + "moduleName": "CanvasNative", + "static": true, + "declAttributes": ["HasInitialValue", "Final", "HasStorage", "Custom", "AccessControl", "ObjC"], + "hasStorage": true, + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(cm)forceGL", + "mangledName": "$s12CanvasNative9NSCCanvasC7forceGLSbvgZ", + "moduleName": "CanvasNative", + "static": true, + "implicit": true, + "declAttributes": ["Final", "ObjC"], + "accessorKind": "get" + }, + { + "kind": "Accessor", + "name": "Set", + "printedName": "Set()", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(cm)setForceGL:", + "mangledName": "$s12CanvasNative9NSCCanvasC7forceGLSbvsZ", + "moduleName": "CanvasNative", + "static": true, + "implicit": true, + "declAttributes": ["Final", "ObjC"], + "accessorKind": "set" + }, + { + "kind": "Accessor", + "name": "Modify", + "printedName": "Modify()", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + } + ], + "declKind": "Accessor", + "usr": "s:12CanvasNative9NSCCanvasC7forceGLSbvMZ", + "mangledName": "$s12CanvasNative9NSCCanvasC7forceGLSbvMZ", + "moduleName": "CanvasNative", + "static": true, + "implicit": true, + "declAttributes": ["Final"], + "accessorKind": "_modify" + } + ] + }, { "kind": "TypeDecl", "name": "CanvasFit", @@ -3000,19 +2861,103 @@ }, { "kind": "Var", - "name": "fit", - "printedName": "fit", + "name": "fit", + "printedName": "fit", + "children": [ + { + "kind": "TypeNominal", + "name": "CanvasFit", + "printedName": "CanvasNative.NSCCanvas.CanvasFit", + "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + } + ], + "declKind": "Var", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)fit", + "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvp", + "moduleName": "CanvasNative", + "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "AccessControl", "ObjC"], + "hasStorage": true, + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "CanvasFit", + "printedName": "CanvasNative.NSCCanvas.CanvasFit", + "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)fit", + "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvg", + "moduleName": "CanvasNative", + "implicit": true, + "declAttributes": ["ObjC"], + "accessorKind": "get" + }, + { + "kind": "Accessor", + "name": "Set", + "printedName": "Set()", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "CanvasFit", + "printedName": "CanvasNative.NSCCanvas.CanvasFit", + "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + } + ], + "declKind": "Accessor", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)setFit:", + "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvs", + "moduleName": "CanvasNative", + "implicit": true, + "declAttributes": ["ObjC"], + "accessorKind": "set" + }, + { + "kind": "Accessor", + "name": "Modify", + "printedName": "Modify()", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + } + ], + "declKind": "Accessor", + "usr": "s:12CanvasNative9NSCCanvasC3fitAC0A3FitOvM", + "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM", + "moduleName": "CanvasNative", + "implicit": true, + "accessorKind": "_modify" + } + ] + }, + { + "kind": "Var", + "name": "weblikeScale", + "printedName": "weblikeScale", "children": [ { "kind": "TypeNominal", - "name": "CanvasFit", - "printedName": "CanvasNative.NSCCanvas.CanvasFit", - "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Var", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)fit", - "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvp", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)weblikeScale", + "mangledName": "$s12CanvasNative9NSCCanvasC12weblikeScaleSbvp", "moduleName": "CanvasNative", "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "AccessControl", "ObjC"], "hasStorage": true, @@ -3024,14 +2969,14 @@ "children": [ { "kind": "TypeNominal", - "name": "CanvasFit", - "printedName": "CanvasNative.NSCCanvas.CanvasFit", - "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)fit", - "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvg", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)weblikeScale", + "mangledName": "$s12CanvasNative9NSCCanvasC12weblikeScaleSbvg", "moduleName": "CanvasNative", "implicit": true, "declAttributes": ["ObjC"], @@ -3049,14 +2994,14 @@ }, { "kind": "TypeNominal", - "name": "CanvasFit", - "printedName": "CanvasNative.NSCCanvas.CanvasFit", - "usr": "s:12CanvasNative9NSCCanvasC0A3FitO" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)setFit:", - "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvs", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)setWeblikeScale:", + "mangledName": "$s12CanvasNative9NSCCanvasC12weblikeScaleSbvs", "moduleName": "CanvasNative", "implicit": true, "declAttributes": ["ObjC"], @@ -3074,8 +3019,8 @@ } ], "declKind": "Accessor", - "usr": "s:12CanvasNative9NSCCanvasC3fitAC0A3FitOvM", - "mangledName": "$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM", + "usr": "s:12CanvasNative9NSCCanvasC12weblikeScaleSbvM", + "mangledName": "$s12CanvasNative9NSCCanvasC12weblikeScaleSbvM", "moduleName": "CanvasNative", "implicit": true, "accessorKind": "_modify" @@ -3162,8 +3107,8 @@ }, { "kind": "Function", - "name": "getViewPtr", - "printedName": "getViewPtr()", + "name": "getGlViewPtr", + "printedName": "getGlViewPtr()", "children": [ { "kind": "TypeNominal", @@ -3173,8 +3118,8 @@ } ], "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)getViewPtr", - "mangledName": "$s12CanvasNative9NSCCanvasC10getViewPtrSvyF", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)getGlViewPtr", + "mangledName": "$s12CanvasNative9NSCCanvasC12getGlViewPtrSvyF", "moduleName": "CanvasNative", "declAttributes": ["Custom", "AccessControl", "ObjC"], "funcSelfKind": "NonMutating" @@ -3198,6 +3143,25 @@ "declAttributes": ["Custom", "AccessControl", "ObjC"], "funcSelfKind": "NonMutating" }, + { + "kind": "Function", + "name": "getMtlLayerPtr", + "printedName": "getMtlLayerPtr()", + "children": [ + { + "kind": "TypeNominal", + "name": "UnsafeMutableRawPointer", + "printedName": "Swift.UnsafeMutableRawPointer", + "usr": "s:Sv" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)getMtlLayerPtr", + "mangledName": "$s12CanvasNative9NSCCanvasC14getMtlLayerPtrSvyF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, { "kind": "Var", "name": "autoScale", @@ -3284,8 +3248,8 @@ }, { "kind": "Var", - "name": "nativeGL", - "printedName": "nativeGL", + "name": "nativeContext", + "printedName": "nativeContext", "children": [ { "kind": "TypeNominal", @@ -3295,8 +3259,8 @@ } ], "declKind": "Var", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)nativeGL", - "mangledName": "$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvp", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)nativeContext", + "mangledName": "$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvp", "moduleName": "CanvasNative", "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "AccessControl", "SetterAccess", "ObjC"], "hasStorage": true, @@ -3314,8 +3278,8 @@ } ], "declKind": "Accessor", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)nativeGL", - "mangledName": "$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)nativeContext", + "mangledName": "$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg", "moduleName": "CanvasNative", "implicit": true, "declAttributes": ["ObjC"], @@ -3325,19 +3289,19 @@ }, { "kind": "Var", - "name": "nativeContext", - "printedName": "nativeContext", + "name": "is2D", + "printedName": "is2D", "children": [ { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Var", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)nativeContext", - "mangledName": "$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvp", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(py)is2D", + "mangledName": "$s12CanvasNative9NSCCanvasC4is2DSbvp", "moduleName": "CanvasNative", "declAttributes": ["HasInitialValue", "HasStorage", "Custom", "AccessControl", "SetterAccess", "ObjC"], "hasStorage": true, @@ -3349,14 +3313,14 @@ "children": [ { "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" } ], "declKind": "Accessor", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)nativeContext", - "mangledName": "$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)is2D", + "mangledName": "$s12CanvasNative9NSCCanvasC4is2DSbvg", "moduleName": "CanvasNative", "implicit": true, "declAttributes": ["ObjC"], @@ -3520,6 +3484,37 @@ } ] }, + { + "kind": "Function", + "name": "toDataURL", + "printedName": "toDataURL(_:_:)", + "children": [ + { + "kind": "TypeNominal", + "name": "String", + "printedName": "Swift.String", + "usr": "s:SS" + }, + { + "kind": "TypeNominal", + "name": "String", + "printedName": "Swift.String", + "usr": "s:SS" + }, + { + "kind": "TypeNominal", + "name": "Float", + "printedName": "Swift.Float", + "usr": "s:Sf" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)toDataURL::", + "mangledName": "$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, { "kind": "Function", "name": "initContext", @@ -3775,55 +3770,6 @@ "declAttributes": ["Custom", "AccessControl", "DiscardableResult", "ObjC"], "funcSelfKind": "NonMutating" }, - { - "kind": "Function", - "name": "context2DTest", - "printedName": "context2DTest(_:)", - "children": [ - { - "kind": "TypeNominal", - "name": "Void", - "printedName": "()" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DTest:", - "mangledName": "$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF", - "moduleName": "CanvasNative", - "declAttributes": ["Custom", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, - { - "kind": "Function", - "name": "context2DTestToDataURL", - "printedName": "context2DTestToDataURL(_:)", - "children": [ - { - "kind": "TypeNominal", - "name": "String", - "printedName": "Swift.String", - "usr": "s:SS" - }, - { - "kind": "TypeNominal", - "name": "Int64", - "printedName": "Swift.Int64", - "usr": "s:s5Int64V" - } - ], - "declKind": "Func", - "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DTestToDataURL:", - "mangledName": "$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF", - "moduleName": "CanvasNative", - "declAttributes": ["Custom", "AccessControl", "ObjC"], - "funcSelfKind": "NonMutating" - }, { "kind": "Var", "name": "touchEventListener", @@ -4348,6 +4294,78 @@ "declAttributes": ["Custom", "AccessControl", "ObjC"], "funcSelfKind": "NonMutating" }, + { + "kind": "Function", + "name": "context2DTest", + "printedName": "context2DTest(_:)", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "Int64", + "printedName": "Swift.Int64", + "usr": "s:s5Int64V" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DTest:", + "mangledName": "$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, + { + "kind": "Function", + "name": "context2DPathTest", + "printedName": "context2DPathTest(_:)", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "Int64", + "printedName": "Swift.Int64", + "usr": "s:s5Int64V" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DPathTest:", + "mangledName": "$s12CanvasNative9NSCCanvasC17context2DPathTestyys5Int64VF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, + { + "kind": "Function", + "name": "context2DConic", + "printedName": "context2DConic(_:)", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + }, + { + "kind": "TypeNominal", + "name": "Int64", + "printedName": "Swift.Int64", + "usr": "s:s5Int64V" + } + ], + "declKind": "Func", + "usr": "c:@M@CanvasNative@objc(cs)NSCCanvas(im)context2DConic:", + "mangledName": "$s12CanvasNative9NSCCanvasC14context2DConicyys5Int64VF", + "moduleName": "CanvasNative", + "declAttributes": ["Custom", "AccessControl", "ObjC"], + "funcSelfKind": "NonMutating" + }, { "kind": "Function", "name": "layoutSubviews", @@ -7016,206 +7034,171 @@ "length": 13, "value": "\"CanvasNative.NSCVideoFrame\"" }, + { + "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", + "kind": "BooleanLiteral", + "offset": 296, + "length": 4, + "value": "true" + }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 524, + "offset": 558, "length": 4, "value": "1" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 542, + "offset": 576, "length": 4, "value": "2" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 560, + "offset": 594, "length": 4, "value": "3" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 578, + "offset": 612, "length": 9, "value": "4" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1524, - "length": 1, - "value": "0" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1530, - "length": 1, - "value": "0" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1540, - "length": 1, - "value": "1" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1551, - "length": 1, - "value": "1" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 1608, - "length": 1, - "value": "0" + "kind": "BooleanLiteral", + "offset": 1519, + "length": 5, + "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 3589, + "offset": 2867, "length": 1, "value": "1" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 3492, + "offset": 2770, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 3768, - "length": 1, - "value": "0" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 3826, - "length": 1, - "value": "0" - }, - { - "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", - "kind": "IntegerLiteral", - "offset": 3879, + "offset": 3046, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 3910, + "offset": 3088, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5183, + "offset": 5851, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5217, + "offset": 5885, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5247, + "offset": 5915, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5300, + "offset": 5968, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 5342, + "offset": 6010, "length": 1, "value": "0" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5382, + "offset": 6050, "length": 4, "value": "true" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5428, + "offset": 6096, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5461, + "offset": 6129, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5501, + "offset": 6169, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 5539, + "offset": 6207, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 14811, + "offset": 15486, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "BooleanLiteral", - "offset": 15246, + "offset": 15921, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 15297, + "offset": 15972, "length": 3, "value": "300" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/NSCCanvas.swift", "kind": "IntegerLiteral", - "offset": 15474, + "offset": 16146, "length": 3, "value": "150" }, @@ -7236,35 +7219,35 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11212, + "offset": 10144, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11383, + "offset": 10315, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11556, + "offset": 10488, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11727, + "offset": 10659, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/NSCTouchHandler.swift", "kind": "BooleanLiteral", - "offset": 11897, + "offset": 10829, "length": 5, "value": "false" }, @@ -7320,14 +7303,14 @@ { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/GLRenderer.swift", "kind": "BooleanLiteral", - "offset": 2249, + "offset": 2255, "length": 5, "value": "false" }, { "filePath": "/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/CanvasNative/Source/GLRenderer.swift", "kind": "BooleanLiteral", - "offset": 2325, + "offset": 2331, "length": 5, "value": "false" }, diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface index 524f2cf6f..bb7b32074 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface @@ -25,23 +25,20 @@ import _SwiftConcurrencyShims @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, dx: Swift.Float, dy: Swift.Float) -> Swift.Bool @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, dx: Swift.Float, dy: Swift.Float, dw: Swift.Float, dh: Swift.Float) -> Swift.Bool @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, sx: Swift.Float, sy: Swift.Float, sw: Swift.Float, sh: Swift.Float, dx: Swift.Float, dy: Swift.Float, dw: Swift.Float, dh: Swift.Float) -> Swift.Bool - @objc public static func initWebGPUWithViewLayer(_ instance: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 - @objc public static func initWebGPUWithView(_ instance: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 - @objc public static func resizeWebGPUWithView(_ context: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) - @objc public static func initGLWithView(_ view: Swift.Int64, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool) -> Swift.Int64 - @objc public static func initSharedGLWithView(_ view: Swift.Int64, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool, _ shared_context: Swift.Int64) -> Swift.Int64 - @objc public static func initGLWithWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool) -> Swift.Int64 - @objc public static func initSharedGLWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool, _ shared_context: Swift.Int64) -> Swift.Int64 + @objc public static func initWebGPUWithViewLayer(_ instance: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 + @objc public static func initWebGPUWithView(_ instance: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 + @objc public static func resizeWebGPUWithView(_ context: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) + @objc public static func initWebGLWithView(_ view: CanvasNative.NSCCanvas, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32) -> Swift.Int64 + @objc public static func initWebGLWithWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32) -> Swift.Int64 @objc public static func resize2DContext(_ context: Swift.Int64, _ width: Swift.Float, _ height: Swift.Float) @objc public static func flush2DContext(_ context: Swift.Int64) - @objc public static func flushGL(_ context: Swift.Int64) -> Swift.Bool - @objc public static func releaseGL(_ context: Swift.Int64) - @objc public static func getGLPointer(_ context: Swift.Int64) -> Swift.Int64 - @objc public static func releaseGLPointer(_ context: Swift.Int64) - @objc public static func create2DContext(_ context: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ density: Swift.Float, _ samples: Swift.Int32, _ font_color: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 - @objc public static func updateGLSurfaceWithView(_ view: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ context: Swift.Int64) - @objc public static func test2D(_ context: Swift.Int64) - @objc public static func testToDataURL(_ context: Swift.Int64) -> Swift.String + @objc public static func flush2DContextAndSyncCPU(_ context: Swift.Int64) + @objc public static func presentDrawable(_ context: Swift.Int64) + @objc public static func flushWebGL(_ context: Swift.Int64) -> Swift.Bool + @objc public static func releaseWebGL(_ context: Swift.Int64) + @objc public static func create2DContext(_ view: CanvasNative.NSCCanvas, _ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ density: Swift.Float, _ fontColor: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 + @objc public static func create2DContextMetal(_ view: CanvasNative.NSCCanvas, _ alpha: Swift.Bool, _ density: Swift.Float, _ fontColor: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 + @objc public static func updateWebGLSurfaceWithView(_ view: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ context: Swift.Int64) @objc public static func writeFile(_ data: Foundation.NSData, _ path: Swift.String, _ callback: @escaping (Swift.String?, Swift.String?) -> Swift.Void) @objc public static func readFile(_ path: Swift.String, _ callback: @escaping (Swift.String?, Foundation.NSData?) -> Swift.Void) @objc public static func deleteFile(_ path: Swift.String, _ callback: @escaping (Foundation.NSError?, Swift.Bool) -> Swift.Void) @@ -95,6 +92,7 @@ import _SwiftConcurrencyShims @objc deinit } @_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCCanvas) @_Concurrency.MainActor(unsafe) public class NSCCanvas : UIKit.UIView { + @objc @_Concurrency.MainActor(unsafe) public static var forceGL: Swift.Bool @objc(CanvasFit) public enum CanvasFit : Swift.Int, Swift.RawRepresentable { public typealias RawValue = Swift.UInt32 case None @@ -111,18 +109,23 @@ import _SwiftConcurrencyShims @objc get @objc set } + @objc @_Concurrency.MainActor(unsafe) public var weblikeScale: Swift.Bool { + @objc get + @objc set + } @objc @_Concurrency.MainActor(unsafe) public static let store: Foundation.NSMutableDictionary @objc @_Concurrency.MainActor(unsafe) public static func getViews() -> Foundation.NSMapTable - @objc @_Concurrency.MainActor(unsafe) public func getViewPtr() -> Swift.UnsafeMutableRawPointer + @objc @_Concurrency.MainActor(unsafe) public func getGlViewPtr() -> Swift.UnsafeMutableRawPointer @objc @_Concurrency.MainActor(unsafe) public func getMtlViewPtr() -> Swift.UnsafeMutableRawPointer + @objc @_Concurrency.MainActor(unsafe) public func getMtlLayerPtr() -> Swift.UnsafeMutableRawPointer @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set } - @objc @_Concurrency.MainActor(unsafe) public var nativeGL: Swift.Int64 { + @objc @_Concurrency.MainActor(unsafe) public var nativeContext: Swift.Int64 { get } - @objc @_Concurrency.MainActor(unsafe) public var nativeContext: Swift.Int64 { + @objc @_Concurrency.MainActor(unsafe) public var is2D: Swift.Bool { get } @objc @_Concurrency.MainActor(unsafe) public var drawingBufferWidth: CoreFoundation.CGFloat { @@ -137,14 +140,13 @@ import _SwiftConcurrencyShims @objc @_Concurrency.MainActor(unsafe) public var height: Swift.Float { @objc get } + @objc @_Concurrency.MainActor(unsafe) public func toDataURL(_ format: Swift.String, _ quality: Swift.Float) -> Swift.String @objc @_Concurrency.MainActor(unsafe) public func initContext(_ type: Swift.String, _ alpha: Swift.Bool = true, _ antialias: Swift.Bool = true, _ depth: Swift.Bool = true, _ failIfMajorPerformanceCaveat: Swift.Bool = false, _ powerPreference: Swift.Int32 = 0, _ premultipliedAlpha: Swift.Bool = true, _ preserveDrawingBuffer: Swift.Bool = false, _ stencil: Swift.Bool = false, _ desynchronized: Swift.Bool = false, _ xrCompatible: Swift.Bool = false) @objc @_Concurrency.MainActor(unsafe) public func initWebGPUContext(_ instance: Swift.Int64) @objc @_Concurrency.MainActor(unsafe) public func create2DContext(_ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ failIfMajorPerformanceCaveat: Swift.Bool, _ powerPreference: Swift.Int32, _ premultipliedAlpha: Swift.Bool, _ preserveDrawingBuffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xrCompatible: Swift.Bool, _ fontColor: Swift.Int32) -> Swift.Int64 @objc @_Concurrency.MainActor(unsafe) public func snapshot(_ flip: Swift.Bool) -> UIKit.UIImage? @objc @discardableResult @_Concurrency.MainActor(unsafe) public func render() -> Swift.Bool - @objc @_Concurrency.MainActor(unsafe) public func context2DTest(_ context: Swift.Int64) - @objc @_Concurrency.MainActor(unsafe) public func context2DTestToDataURL(_ context: Swift.Int64) -> Swift.String @objc @_Concurrency.MainActor(unsafe) public var touchEventListener: ((Swift.String, UIKit.UIGestureRecognizer) -> Swift.Void)? @_Concurrency.MainActor(unsafe) @objc override dynamic public init(frame: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public var ignoreTouchEvents: Swift.Bool { @@ -161,6 +163,9 @@ import _SwiftConcurrencyShims @objc set } @objc @_Concurrency.MainActor(unsafe) public func forceLayout(_ width: CoreFoundation.CGFloat, _ height: CoreFoundation.CGFloat) + @objc @_Concurrency.MainActor(unsafe) public func context2DTest(_ context: Swift.Int64) + @objc @_Concurrency.MainActor(unsafe) public func context2DPathTest(_ context: Swift.Int64) + @objc @_Concurrency.MainActor(unsafe) public func context2DConic(_ context: Swift.Int64) @_Concurrency.MainActor(unsafe) @objc override dynamic public func layoutSubviews() @objc deinit @objc @_Concurrency.MainActor(unsafe) public static func getBoundingClientRect(_ view: UIKit.UIView, _ buffer: Swift.UnsafeMutableRawPointer) diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.swiftinterface b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.swiftinterface index 524f2cf6f..bb7b32074 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.swiftinterface @@ -25,23 +25,20 @@ import _SwiftConcurrencyShims @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, dx: Swift.Float, dy: Swift.Float) -> Swift.Bool @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, dx: Swift.Float, dy: Swift.Float, dw: Swift.Float, dh: Swift.Float) -> Swift.Bool @objc public static func drawImage(context: Swift.Int64, image: UIKit.UIImage, sx: Swift.Float, sy: Swift.Float, sw: Swift.Float, sh: Swift.Float, dx: Swift.Float, dy: Swift.Float, dw: Swift.Float, dh: Swift.Float) -> Swift.Bool - @objc public static func initWebGPUWithViewLayer(_ instance: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 - @objc public static func initWebGPUWithView(_ instance: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 - @objc public static func resizeWebGPUWithView(_ context: Swift.Int64, _ view: Swift.Int64, _ width: Swift.UInt32, _ height: Swift.UInt32) - @objc public static func initGLWithView(_ view: Swift.Int64, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool) -> Swift.Int64 - @objc public static func initSharedGLWithView(_ view: Swift.Int64, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool, _ shared_context: Swift.Int64) -> Swift.Int64 - @objc public static func initGLWithWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool) -> Swift.Int64 - @objc public static func initSharedGLWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32, _ is_canvas: Swift.Bool, _ shared_context: Swift.Int64) -> Swift.Int64 + @objc public static func initWebGPUWithViewLayer(_ instance: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 + @objc public static func initWebGPUWithView(_ instance: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) -> Swift.Int64 + @objc public static func resizeWebGPUWithView(_ context: Swift.Int64, _ view: CanvasNative.NSCCanvas, _ width: Swift.UInt32, _ height: Swift.UInt32) + @objc public static func initWebGLWithView(_ view: CanvasNative.NSCCanvas, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32) -> Swift.Int64 + @objc public static func initWebGLWithWidthAndHeight(_ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ fail_if_major_performance_caveat: Swift.Bool, _ power_preference: Swift.Int32, _ premultiplied_alpha: Swift.Bool, _ preserve_drawing_buffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xr_compatible: Swift.Bool, _ version: Swift.Int32) -> Swift.Int64 @objc public static func resize2DContext(_ context: Swift.Int64, _ width: Swift.Float, _ height: Swift.Float) @objc public static func flush2DContext(_ context: Swift.Int64) - @objc public static func flushGL(_ context: Swift.Int64) -> Swift.Bool - @objc public static func releaseGL(_ context: Swift.Int64) - @objc public static func getGLPointer(_ context: Swift.Int64) -> Swift.Int64 - @objc public static func releaseGLPointer(_ context: Swift.Int64) - @objc public static func create2DContext(_ context: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ density: Swift.Float, _ samples: Swift.Int32, _ font_color: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 - @objc public static func updateGLSurfaceWithView(_ view: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ context: Swift.Int64) - @objc public static func test2D(_ context: Swift.Int64) - @objc public static func testToDataURL(_ context: Swift.Int64) -> Swift.String + @objc public static func flush2DContextAndSyncCPU(_ context: Swift.Int64) + @objc public static func presentDrawable(_ context: Swift.Int64) + @objc public static func flushWebGL(_ context: Swift.Int64) -> Swift.Bool + @objc public static func releaseWebGL(_ context: Swift.Int64) + @objc public static func create2DContext(_ view: CanvasNative.NSCCanvas, _ width: Swift.Int32, _ height: Swift.Int32, _ alpha: Swift.Bool, _ density: Swift.Float, _ fontColor: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 + @objc public static func create2DContextMetal(_ view: CanvasNative.NSCCanvas, _ alpha: Swift.Bool, _ density: Swift.Float, _ fontColor: Swift.Int32, _ ppi: Swift.Float, _ direction: Swift.Int32) -> Swift.Int64 + @objc public static func updateWebGLSurfaceWithView(_ view: Swift.Int64, _ width: Swift.Int32, _ height: Swift.Int32, _ context: Swift.Int64) @objc public static func writeFile(_ data: Foundation.NSData, _ path: Swift.String, _ callback: @escaping (Swift.String?, Swift.String?) -> Swift.Void) @objc public static func readFile(_ path: Swift.String, _ callback: @escaping (Swift.String?, Foundation.NSData?) -> Swift.Void) @objc public static func deleteFile(_ path: Swift.String, _ callback: @escaping (Foundation.NSError?, Swift.Bool) -> Swift.Void) @@ -95,6 +92,7 @@ import _SwiftConcurrencyShims @objc deinit } @_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objcMembers @objc(NSCCanvas) @_Concurrency.MainActor(unsafe) public class NSCCanvas : UIKit.UIView { + @objc @_Concurrency.MainActor(unsafe) public static var forceGL: Swift.Bool @objc(CanvasFit) public enum CanvasFit : Swift.Int, Swift.RawRepresentable { public typealias RawValue = Swift.UInt32 case None @@ -111,18 +109,23 @@ import _SwiftConcurrencyShims @objc get @objc set } + @objc @_Concurrency.MainActor(unsafe) public var weblikeScale: Swift.Bool { + @objc get + @objc set + } @objc @_Concurrency.MainActor(unsafe) public static let store: Foundation.NSMutableDictionary @objc @_Concurrency.MainActor(unsafe) public static func getViews() -> Foundation.NSMapTable - @objc @_Concurrency.MainActor(unsafe) public func getViewPtr() -> Swift.UnsafeMutableRawPointer + @objc @_Concurrency.MainActor(unsafe) public func getGlViewPtr() -> Swift.UnsafeMutableRawPointer @objc @_Concurrency.MainActor(unsafe) public func getMtlViewPtr() -> Swift.UnsafeMutableRawPointer + @objc @_Concurrency.MainActor(unsafe) public func getMtlLayerPtr() -> Swift.UnsafeMutableRawPointer @objc @_Concurrency.MainActor(unsafe) public var autoScale: Swift.Bool { @objc get @objc set } - @objc @_Concurrency.MainActor(unsafe) public var nativeGL: Swift.Int64 { + @objc @_Concurrency.MainActor(unsafe) public var nativeContext: Swift.Int64 { get } - @objc @_Concurrency.MainActor(unsafe) public var nativeContext: Swift.Int64 { + @objc @_Concurrency.MainActor(unsafe) public var is2D: Swift.Bool { get } @objc @_Concurrency.MainActor(unsafe) public var drawingBufferWidth: CoreFoundation.CGFloat { @@ -137,14 +140,13 @@ import _SwiftConcurrencyShims @objc @_Concurrency.MainActor(unsafe) public var height: Swift.Float { @objc get } + @objc @_Concurrency.MainActor(unsafe) public func toDataURL(_ format: Swift.String, _ quality: Swift.Float) -> Swift.String @objc @_Concurrency.MainActor(unsafe) public func initContext(_ type: Swift.String, _ alpha: Swift.Bool = true, _ antialias: Swift.Bool = true, _ depth: Swift.Bool = true, _ failIfMajorPerformanceCaveat: Swift.Bool = false, _ powerPreference: Swift.Int32 = 0, _ premultipliedAlpha: Swift.Bool = true, _ preserveDrawingBuffer: Swift.Bool = false, _ stencil: Swift.Bool = false, _ desynchronized: Swift.Bool = false, _ xrCompatible: Swift.Bool = false) @objc @_Concurrency.MainActor(unsafe) public func initWebGPUContext(_ instance: Swift.Int64) @objc @_Concurrency.MainActor(unsafe) public func create2DContext(_ alpha: Swift.Bool, _ antialias: Swift.Bool, _ depth: Swift.Bool, _ failIfMajorPerformanceCaveat: Swift.Bool, _ powerPreference: Swift.Int32, _ premultipliedAlpha: Swift.Bool, _ preserveDrawingBuffer: Swift.Bool, _ stencil: Swift.Bool, _ desynchronized: Swift.Bool, _ xrCompatible: Swift.Bool, _ fontColor: Swift.Int32) -> Swift.Int64 @objc @_Concurrency.MainActor(unsafe) public func snapshot(_ flip: Swift.Bool) -> UIKit.UIImage? @objc @discardableResult @_Concurrency.MainActor(unsafe) public func render() -> Swift.Bool - @objc @_Concurrency.MainActor(unsafe) public func context2DTest(_ context: Swift.Int64) - @objc @_Concurrency.MainActor(unsafe) public func context2DTestToDataURL(_ context: Swift.Int64) -> Swift.String @objc @_Concurrency.MainActor(unsafe) public var touchEventListener: ((Swift.String, UIKit.UIGestureRecognizer) -> Swift.Void)? @_Concurrency.MainActor(unsafe) @objc override dynamic public init(frame: CoreFoundation.CGRect) @objc @_Concurrency.MainActor(unsafe) public var ignoreTouchEvents: Swift.Bool { @@ -161,6 +163,9 @@ import _SwiftConcurrencyShims @objc set } @objc @_Concurrency.MainActor(unsafe) public func forceLayout(_ width: CoreFoundation.CGFloat, _ height: CoreFoundation.CGFloat) + @objc @_Concurrency.MainActor(unsafe) public func context2DTest(_ context: Swift.Int64) + @objc @_Concurrency.MainActor(unsafe) public func context2DPathTest(_ context: Swift.Int64) + @objc @_Concurrency.MainActor(unsafe) public func context2DConic(_ context: Swift.Int64) @_Concurrency.MainActor(unsafe) @objc override dynamic public func layoutSubviews() @objc deinit @objc @_Concurrency.MainActor(unsafe) public static func getBoundingClientRect(_ view: UIKit.UIView, _ buffer: Swift.UnsafeMutableRawPointer) diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources index f0a395233..4ac5f1b6a 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources @@ -6,19 +6,23 @@ Headers/CanvasNative-Swift.h - 8g5BbtM8jSB6DxcjgkO1gaFhXR4= + Pg8+kSgjauRs9rTbQFUnoqI6y3Y= Headers/CanvasNative.h - /f1joB+88Yli7N3M7UJmfZD+wrM= + FNymyDc7X4Ydv/9lK3268mypJCk= + + Headers/NSCMTLView.h + + tdSy9ddI14zzHbiB630f+q6SxlA= Headers/canvas_ios.h - Go1wDoe+mj6F7Vlj0GqIwy3+X7Q= + hLmpcbnWVUlXC+krA3//aBRpHZE= Headers/canvas_native.h - qgQWnktea4CcFLAFKrQz08SGSMc= + Tm0kXqE68M/l16fj5h4b1a5Rqco= Info.plist @@ -26,19 +30,19 @@ Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo - kzpAlbBbZizrt0mZ7wq+G2bjOro= + 0eSZ7sQtmt/rPUsvCTWEeU4AwPA= Modules/CanvasNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo - GyKQXwEE+LdgzKK5nXuAD3bGDPk= + NCS5+sC/vE6z354LrF6GZQe4VOQ= Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.abi.json - gveg2m09e0u/9CKMU3TE4/moTuY= + VVw1EfNyfOHjUMk1QF9W+RSbpg0= Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface - /szQg4fIvnJXi51O13NN2fjHmAg= + tJ7pZoBgENBwpc0Nq38LJyKrLck= Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.swiftdoc @@ -46,19 +50,19 @@ Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.swiftinterface - /szQg4fIvnJXi51O13NN2fjHmAg= + tJ7pZoBgENBwpc0Nq38LJyKrLck= Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.swiftmodule - 5Rm7sc/+NitjLMf0A1HROjsQxG8= + 52D6AD6oCYGoTY1ltUZ7BwbF5Ig= Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.abi.json - gveg2m09e0u/9CKMU3TE4/moTuY= + VVw1EfNyfOHjUMk1QF9W+RSbpg0= Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface - pQv9emG/bOy0PwfcR6SWyeIFc4E= + X4/KT4CAxt2Z9T+Lh7+LwxifA/A= Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.swiftdoc @@ -66,11 +70,11 @@ Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.swiftinterface - pQv9emG/bOy0PwfcR6SWyeIFc4E= + X4/KT4CAxt2Z9T+Lh7+LwxifA/A= Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.swiftmodule - uEoHJ1AfgkLwaHKMK/sfhX1b1xI= + Z0yEljEXwztwBlfmDAp2idwV8mo= Modules/module.modulemap @@ -87,56 +91,63 @@ hash2 - sWPhJ/K9aw9ed3G4o9bgEu41PKpxq9RKB3Lns2Po7co= + XZoS+6hA32mCd7FQDSIyEBMqfILbicMkosutFdOZubI= Headers/CanvasNative.h hash2 - etIfFZplh+fbBvYN1m/bsCHh1B91DXsoX2FOvSfQ5Vw= + fQbykEWRbpY6wzCCrEOuD1WupSfVSDHJtNnwv5cu/lw= + + + Headers/NSCMTLView.h + + hash2 + + +N1S/5GmxqLxht8lbmJkn2LGj+qhxI2fXVUg4Gid4WQ= Headers/canvas_ios.h hash2 - Ygco0GluyQ0zFAH+aqGDFBeEFCplVx8dfm4DuHUgmnE= + sB/NW58F9hrWrEgaabf/j10g/Rfaxj3QimH5RZPrZ2w= Headers/canvas_native.h hash2 - CQW5NJ9tRV7hFk6kfmkZ7+Awcxd0MHdwT3892A7QA5I= + pCw6vlyZloCJiuTQq8HMdXvrrxAIF72qZ+UKgMjS95c= Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo hash2 - so/Op80y43NQ4KS96eqLlckZyht29/0uRJhMZRS8jeo= + //XlQY+TXqpR1NDHlARF/kJNXu/8mYvHXEOrFHl0lBs= Modules/CanvasNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo hash2 - YTPZNWvgkEVp8KmuMuE8aiia0ibdVSrIYiFweLJBR1o= + 2qbxdotKoK6dwNual3+oP3CBDmKh1StanxKfZSw/pZ4= Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.abi.json hash2 - V/3w+F0j92jMasWiU96OBzenxGcVHUtlsYEnf8Ji5Nc= + a669PLetgsvr/OUKdlMK8i/17XQSPP6HZofOmHAvmcY= Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface hash2 - vZkWNF4frAig6EHW2/cF8f3UR85sLX5v7UkZvCI4ffc= + 2a1RHN6rMA/Eg0D7hyobP6mRIy105gLDZszT1T0M/VQ= Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.swiftdoc @@ -150,28 +161,28 @@ hash2 - vZkWNF4frAig6EHW2/cF8f3UR85sLX5v7UkZvCI4ffc= + 2a1RHN6rMA/Eg0D7hyobP6mRIy105gLDZszT1T0M/VQ= Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.swiftmodule hash2 - 7zoYyhHo22vtm5HH8q/nkJm4t4QgjIHVqLMzsNZMsAk= + PODBqOgOG4P3Q5ocjup8ryxTyHsWWTLUaYr4bK7XGZk= Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.abi.json hash2 - V/3w+F0j92jMasWiU96OBzenxGcVHUtlsYEnf8Ji5Nc= + a669PLetgsvr/OUKdlMK8i/17XQSPP6HZofOmHAvmcY= Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface hash2 - ppGCMBBPCOHQRPAoUmn+lyEHf6KM0nY64LYIjPJ5yqU= + qC6IS3UMY/krAXeo/AjDch2f78FjGv0J1B2e8ijrW58= Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.swiftdoc @@ -185,14 +196,14 @@ hash2 - ppGCMBBPCOHQRPAoUmn+lyEHf6KM0nY64LYIjPJ5yqU= + qC6IS3UMY/krAXeo/AjDch2f78FjGv0J1B2e8ijrW58= Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.swiftmodule hash2 - /6cS6+jTGCZbzRV6j7X6sISX7bFN57k+8NGj+eaqUis= + RoZ5YIX0H4IwBtUOkXDCn4BnN9qaoNX+cPWXc9cI3nA= Modules/module.modulemap diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative index f3dc6d929..3a49d786e 100644 Binary files a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative and b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative differ diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml index 378c3096b..6df35c7ef 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml @@ -2,656 +2,697 @@ triple: 'arm64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/dist/Release-iphonesimulator/CanvasNative.framework/CanvasNative' relocations: - - { offsetInCU: 0x34, offset: 0x7802F, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x8D0000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x78064, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x8D0038, symSize: 0x0 } - - { offsetInCU: 0x3F, offset: 0x780B9, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x20, symBinAddr: 0x2B94, symSize: 0xC } - - { offsetInCU: 0x53, offset: 0x780CD, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x2C, symBinAddr: 0x2BA0, symSize: 0x4 } - - { offsetInCU: 0x67, offset: 0x780E1, size: 0x8, addend: 0x0, symName: '_$sSo7CGPointVwet', symObjAddr: 0x30, symBinAddr: 0x2BA4, symSize: 0x20 } - - { offsetInCU: 0x7B, offset: 0x780F5, size: 0x8, addend: 0x0, symName: '_$sSo7CGPointVwst', symObjAddr: 0x50, symBinAddr: 0x2BC4, symSize: 0x28 } - - { offsetInCU: 0x4F, offset: 0x782DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2A20, symBinAddr: 0x1087860, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x782F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2A28, symBinAddr: 0x1087868, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x7832C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x4, symBinAddr: 0x2C48, symSize: 0x38 } - - { offsetInCU: 0xF3, offset: 0x78382, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x40, symBinAddr: 0x2C84, symSize: 0x70 } - - { offsetInCU: 0x144, offset: 0x783D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xB4, symBinAddr: 0x2CF8, symSize: 0x44 } - - { offsetInCU: 0x197, offset: 0x78426, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC22loadImageAssetWithPathySbs5Int64V_SStFZTo', symObjAddr: 0x158, symBinAddr: 0x2D9C, symSize: 0x74 } - - { offsetInCU: 0x238, offset: 0x784C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x1D0, symBinAddr: 0x2E14, symSize: 0x5C } - - { offsetInCU: 0x29D, offset: 0x7852C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x230, symBinAddr: 0x2E74, symSize: 0x74 } - - { offsetInCU: 0x316, offset: 0x785A5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x2A8, symBinAddr: 0x2EEC, symSize: 0xA4 } - - { offsetInCU: 0x373, offset: 0x78602, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x350, symBinAddr: 0x2F94, symSize: 0x14 } - - { offsetInCU: 0x3F5, offset: 0x78684, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x368, symBinAddr: 0x2FAC, symSize: 0x14 } - - { offsetInCU: 0x477, offset: 0x78706, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AFs6UInt32VAHtFZTo', symObjAddr: 0x380, symBinAddr: 0x2FC4, symSize: 0x14 } - - { offsetInCU: 0x526, offset: 0x787B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x3D8, symBinAddr: 0x301C, symSize: 0x50 } - - { offsetInCU: 0x5F7, offset: 0x78886, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x474, symBinAddr: 0x30B8, symSize: 0x58 } - - { offsetInCU: 0x6D1, offset: 0x78960, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x514, symBinAddr: 0x3158, symSize: 0x58 } - - { offsetInCU: 0x7B0, offset: 0x78A3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x5BC, symBinAddr: 0x3200, symSize: 0x60 } - - { offsetInCU: 0x85C, offset: 0x78AEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x620, symBinAddr: 0x3264, symSize: 0x8 } - - { offsetInCU: 0x8C5, offset: 0x78B54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x62C, symBinAddr: 0x3270, symSize: 0x8 } - - { offsetInCU: 0x91C, offset: 0x78BAB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x648, symBinAddr: 0x328C, symSize: 0x8 } - - { offsetInCU: 0x973, offset: 0x78C02, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x654, symBinAddr: 0x3298, symSize: 0x8 } - - { offsetInCU: 0x9CA, offset: 0x78C59, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x660, symBinAddr: 0x32A4, symSize: 0x8 } - - { offsetInCU: 0xA21, offset: 0x78CB0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x66C, symBinAddr: 0x32B0, symSize: 0x8 } - - { offsetInCU: 0xAA0, offset: 0x78D2F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x67C, symBinAddr: 0x32C0, symSize: 0x24 } - - { offsetInCU: 0xB51, offset: 0x78DE0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x6A4, symBinAddr: 0x32E8, symSize: 0x14 } - - { offsetInCU: 0xBC4, offset: 0x78E53, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x6BC, symBinAddr: 0x3300, symSize: 0x8 } - - { offsetInCU: 0xC1B, offset: 0x78EAA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x71C, symBinAddr: 0x3360, symSize: 0x74 } - - { offsetInCU: 0xCA6, offset: 0x78F35, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0x924, symBinAddr: 0x3568, symSize: 0xA0 } - - { offsetInCU: 0xCF7, offset: 0x78F86, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xC2C, symBinAddr: 0x3870, symSize: 0x98 } - - { offsetInCU: 0xD49, offset: 0x78FD8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0xF80, symBinAddr: 0x3BC4, symSize: 0x98 } - - { offsetInCU: 0xDA5, offset: 0x79034, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x13A8, symBinAddr: 0x3FEC, symSize: 0xD8 } - - { offsetInCU: 0xDED, offset: 0x7907C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1484, symBinAddr: 0x40C8, symSize: 0x34 } - - { offsetInCU: 0xE4D, offset: 0x790DC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x1508, symBinAddr: 0x414C, symSize: 0x3C } - - { offsetInCU: 0xE9E, offset: 0x7912D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1578, symBinAddr: 0x41BC, symSize: 0x298 } - - { offsetInCU: 0x10FE, offset: 0x7938D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1810, symBinAddr: 0x4454, symSize: 0x1E0 } - - { offsetInCU: 0x12F8, offset: 0x79587, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x19F0, symBinAddr: 0x4634, symSize: 0xEC } - - { offsetInCU: 0x13F5, offset: 0x79684, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1ADC, symBinAddr: 0x4720, symSize: 0x144 } - - { offsetInCU: 0x156A, offset: 0x797F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1C20, symBinAddr: 0x4864, symSize: 0x15C } - - { offsetInCU: 0x16FF, offset: 0x7998E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x1D7C, symBinAddr: 0x49C0, symSize: 0x180 } - - { offsetInCU: 0x18EB, offset: 0x79B7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x1EFC, symBinAddr: 0x4B40, symSize: 0x1B4 } - - { offsetInCU: 0x19B5, offset: 0x79C44, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x2254, symBinAddr: 0x4E98, symSize: 0x1D4 } - - { offsetInCU: 0x1A96, offset: 0x79D25, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x2428, symBinAddr: 0x506C, symSize: 0x114 } - - { offsetInCU: 0x1B41, offset: 0x79DD0, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0x9C4, symBinAddr: 0x3608, symSize: 0x78 } - - { offsetInCU: 0x1B59, offset: 0x79DE8, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xCC4, symBinAddr: 0x3908, symSize: 0x54 } - - { offsetInCU: 0x1BC6, offset: 0x79E55, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1574, symBinAddr: 0x41B8, symSize: 0x4 } - - { offsetInCU: 0x1C5C, offset: 0x79EEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x253C, symBinAddr: 0x5180, symSize: 0x20 } - - { offsetInCU: 0x1C70, offset: 0x79EFF, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x2580, symBinAddr: 0x51C4, symSize: 0x8 } - - { offsetInCU: 0x1C8F, offset: 0x79F1E, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x2588, symBinAddr: 0x51CC, symSize: 0x18 } - - { offsetInCU: 0x1CB8, offset: 0x79F47, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x25A0, symBinAddr: 0x51E4, symSize: 0x8 } - - { offsetInCU: 0x1CCC, offset: 0x79F5B, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x25A8, symBinAddr: 0x51EC, symSize: 0x3C } - - { offsetInCU: 0x1CE0, offset: 0x79F6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x2628, symBinAddr: 0x526C, symSize: 0x34 } - - { offsetInCU: 0x1CF4, offset: 0x79F83, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x265C, symBinAddr: 0x52A0, symSize: 0x10 } - - { offsetInCU: 0x1D08, offset: 0x79F97, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x266C, symBinAddr: 0x52B0, symSize: 0x8 } - - { offsetInCU: 0x1D1C, offset: 0x79FAB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2698, symBinAddr: 0x52DC, symSize: 0x40 } - - { offsetInCU: 0x1D50, offset: 0x79FDF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x271C, symBinAddr: 0x5360, symSize: 0x40 } - - { offsetInCU: 0x1D8E, offset: 0x7A01D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x275C, symBinAddr: 0x53A0, symSize: 0x28 } - - { offsetInCU: 0x1DC2, offset: 0x7A051, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x27DC, symBinAddr: 0x5420, symSize: 0x3C } - - { offsetInCU: 0x1DF6, offset: 0x7A085, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2844, symBinAddr: 0x5488, symSize: 0x30 } - - { offsetInCU: 0x1E32, offset: 0x7A0C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x28B0, symBinAddr: 0x54F4, symSize: 0x10 } - - { offsetInCU: 0x1E46, offset: 0x7A0D5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x28C0, symBinAddr: 0x5504, symSize: 0x40 } - - { offsetInCU: 0x235C, offset: 0x7A5EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x2C44, symSize: 0x4 } - - { offsetInCU: 0x2377, offset: 0x7A606, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x3C, symBinAddr: 0x2C80, symSize: 0x4 } - - { offsetInCU: 0x2392, offset: 0x7A621, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xB0, symBinAddr: 0x2CF4, symSize: 0x4 } - - { offsetInCU: 0x23B4, offset: 0x7A643, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC22loadImageAssetWithPathySbs5Int64V_SStFZ', symObjAddr: 0xF8, symBinAddr: 0x2D3C, symSize: 0x60 } - - { offsetInCU: 0x247C, offset: 0x7A70B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x1CC, symBinAddr: 0x2E10, symSize: 0x4 } - - { offsetInCU: 0x2497, offset: 0x7A726, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x22C, symBinAddr: 0x2E70, symSize: 0x4 } - - { offsetInCU: 0x24B2, offset: 0x7A741, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x2A4, symBinAddr: 0x2EE8, symSize: 0x4 } - - { offsetInCU: 0x24CD, offset: 0x7A75C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x34C, symBinAddr: 0x2F90, symSize: 0x4 } - - { offsetInCU: 0x2551, offset: 0x7A7E0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x364, symBinAddr: 0x2FA8, symSize: 0x4 } - - { offsetInCU: 0x25D6, offset: 0x7A865, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AFs6UInt32VAHtFZ', symObjAddr: 0x37C, symBinAddr: 0x2FC0, symSize: 0x4 } - - { offsetInCU: 0x2655, offset: 0x7A8E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x394, symBinAddr: 0x2FD8, symSize: 0x44 } - - { offsetInCU: 0x2793, offset: 0x7AA22, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x428, symBinAddr: 0x306C, symSize: 0x4C } - - { offsetInCU: 0x28DC, offset: 0x7AB6B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x4CC, symBinAddr: 0x3110, symSize: 0x48 } - - { offsetInCU: 0x2A24, offset: 0x7ACB3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x56C, symBinAddr: 0x31B0, symSize: 0x50 } - - { offsetInCU: 0x2B81, offset: 0x7AE10, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x61C, symBinAddr: 0x3260, symSize: 0x4 } - - { offsetInCU: 0x2BF3, offset: 0x7AE82, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x628, symBinAddr: 0x326C, symSize: 0x4 } - - { offsetInCU: 0x2C36, offset: 0x7AEC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x634, symBinAddr: 0x3278, symSize: 0x14 } - - { offsetInCU: 0x2C7B, offset: 0x7AF0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x650, symBinAddr: 0x3294, symSize: 0x4 } - - { offsetInCU: 0x2CBE, offset: 0x7AF4D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x65C, symBinAddr: 0x32A0, symSize: 0x4 } - - { offsetInCU: 0x2D01, offset: 0x7AF90, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x668, symBinAddr: 0x32AC, symSize: 0x4 } - - { offsetInCU: 0x2D44, offset: 0x7AFD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x674, symBinAddr: 0x32B8, symSize: 0x8 } - - { offsetInCU: 0x2E2B, offset: 0x7B0BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x6A0, symBinAddr: 0x32E4, symSize: 0x4 } - - { offsetInCU: 0x2EAA, offset: 0x7B139, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x6B8, symBinAddr: 0x32FC, symSize: 0x4 } - - { offsetInCU: 0x2EED, offset: 0x7B17C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x6C4, symBinAddr: 0x3308, symSize: 0x58 } - - { offsetInCU: 0x2FAE, offset: 0x7B23D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x790, symBinAddr: 0x33D4, symSize: 0x4 } - - { offsetInCU: 0x2FC2, offset: 0x7B251, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x794, symBinAddr: 0x33D8, symSize: 0x190 } - - { offsetInCU: 0x3062, offset: 0x7B2F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0xA3C, symBinAddr: 0x3680, symSize: 0x2C } - - { offsetInCU: 0x3076, offset: 0x7B305, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0xA68, symBinAddr: 0x36AC, symSize: 0x1C4 } - - { offsetInCU: 0x3165, offset: 0x7B3F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xD18, symBinAddr: 0x395C, symSize: 0x2C } - - { offsetInCU: 0x3179, offset: 0x7B408, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xD44, symBinAddr: 0x3988, symSize: 0x23C } - - { offsetInCU: 0x322D, offset: 0x7B4BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0x1018, symBinAddr: 0x3C5C, symSize: 0x4 } - - { offsetInCU: 0x3241, offset: 0x7B4D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0x101C, symBinAddr: 0x3C60, symSize: 0x38C } - - { offsetInCU: 0x34D8, offset: 0x7B767, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1480, symBinAddr: 0x40C4, symSize: 0x4 } - - { offsetInCU: 0x34F3, offset: 0x7B782, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x14B8, symBinAddr: 0x40FC, symSize: 0x20 } - - { offsetInCU: 0x3507, offset: 0x7B796, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x14D8, symBinAddr: 0x411C, symSize: 0x30 } - - { offsetInCU: 0x353D, offset: 0x7B7CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x1544, symBinAddr: 0x4188, symSize: 0x30 } - - { offsetInCU: 0x99, offset: 0x7BA68, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSYAASY8rawValuexSg03RawG0Qz_tcfCTW', symObjAddr: 0x1A4, symBinAddr: 0x57D0, symSize: 0x30 } - - { offsetInCU: 0xCB, offset: 0x7BA9A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSYAASY8rawValue03RawG0QzvgTW', symObjAddr: 0x1D4, symBinAddr: 0x5800, symSize: 0x44 } - - { offsetInCU: 0xF8, offset: 0x7BAC7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValueAESgs6UInt32V_tcfCTf4nd_n', symObjAddr: 0xB68, symBinAddr: 0x6194, symSize: 0x94 } - - { offsetInCU: 0x376, offset: 0x7BD45, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfcTo', symObjAddr: 0xAFC, symBinAddr: 0x6128, symSize: 0x2C } - - { offsetInCU: 0x3F3, offset: 0x7BDC2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC10initValues33_A4E23F85F6FCD1159823157DE55F7C54LL2ts11pixelBufferAC0cD6FormatOs5Int64V_So11CVBufferRefatKFZTf4dnd_n', symObjAddr: 0xC1C, symBinAddr: 0x6248, symSize: 0x150 } - - { offsetInCU: 0x49F, offset: 0x7BE6E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11pixelBufferSo11CVBufferRefavpACTk', symObjAddr: 0x218, symBinAddr: 0x5844, symSize: 0x68 } - - { offsetInCU: 0x510, offset: 0x7BEDF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCfETo', symObjAddr: 0xB58, symBinAddr: 0x6184, symSize: 0x10 } - - { offsetInCU: 0x53F, offset: 0x7BF0E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCMa', symObjAddr: 0xBFC, symBinAddr: 0x6228, symSize: 0x20 } - - { offsetInCU: 0x568, offset: 0x7BF37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASQWb', symObjAddr: 0xD6C, symBinAddr: 0x6398, symSize: 0x4 } - - { offsetInCU: 0x57C, offset: 0x7BF4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOAESQAAWl', symObjAddr: 0xD70, symBinAddr: 0x639C, symSize: 0x44 } - - { offsetInCU: 0x590, offset: 0x7BF5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOMa', symObjAddr: 0x1034, symBinAddr: 0x6660, symSize: 0x10 } - - { offsetInCU: 0x5A4, offset: 0x7BF73, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0x1044, symBinAddr: 0x6670, symSize: 0x44 } - - { offsetInCU: 0x5D2, offset: 0x7BFA1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x54, symBinAddr: 0x5680, symSize: 0xC } - - { offsetInCU: 0x5EE, offset: 0x7BFBD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH9hashValueSivgTW', symObjAddr: 0x60, symBinAddr: 0x568C, symSize: 0x8 } - - { offsetInCU: 0x674, offset: 0x7C043, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0xD8, symBinAddr: 0x5704, symSize: 0x58 } - - { offsetInCU: 0x6E4, offset: 0x7C0B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x130, symBinAddr: 0x575C, symSize: 0x8 } - - { offsetInCU: 0x909, offset: 0x7C2D8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValues6UInt32Vvg', symObjAddr: 0x0, symBinAddr: 0x562C, symSize: 0x3C } - - { offsetInCU: 0x92E, offset: 0x7C2FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValueAESgs6UInt32V_tcfC', symObjAddr: 0x3C, symBinAddr: 0x5668, symSize: 0x18 } - - { offsetInCU: 0x976, offset: 0x7C345, size: 0x8, addend: 0x0, symName: '_$sSYsSHRzSH8RawValueSYRpzrlE04hashB0Sivg12CanvasNative13NSCVideoFrameC0fG6FormatO_Tgq5', symObjAddr: 0x68, symBinAddr: 0x5694, symSize: 0x70 } - - { offsetInCU: 0xA0D, offset: 0x7C3DC, size: 0x8, addend: 0x0, symName: '_$sSYsSHRzSH8RawValueSYRpzrlE08_rawHashB04seedS2i_tF12CanvasNative13NSCVideoFrameC0hI6FormatO_Tgq5', symObjAddr: 0x138, symBinAddr: 0x5764, symSize: 0x6C } - - { offsetInCU: 0xABB, offset: 0x7C48A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11pixelBufferSo11CVBufferRefavg', symObjAddr: 0x280, symBinAddr: 0x58AC, symSize: 0x44 } - - { offsetInCU: 0xADA, offset: 0x7C4A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC9timestamps5Int64Vvg', symObjAddr: 0x2C4, symBinAddr: 0x58F0, symSize: 0x44 } - - { offsetInCU: 0xAF9, offset: 0x7C4C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6formatAC0cD6FormatOvg', symObjAddr: 0x308, symBinAddr: 0x5934, symSize: 0x44 } - - { offsetInCU: 0xB59, offset: 0x7C528, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC010getCurrentD0yACSgSo8AVPlayerC_So0G15ItemVideoOutputCtKFZ', symObjAddr: 0x34C, symBinAddr: 0x5978, symSize: 0xE0 } - - { offsetInCU: 0xC04, offset: 0x7C5D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11currentTime5frameACSo6CMTimea_So11CVBufferRefatKcfC', symObjAddr: 0x42C, symBinAddr: 0x5A58, symSize: 0x60 } - - { offsetInCU: 0xC3B, offset: 0x7C60A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11currentTime5frameACSo6CMTimea_So11CVBufferRefatKcfc', symObjAddr: 0x48C, symBinAddr: 0x5AB8, symSize: 0x168 } - - { offsetInCU: 0xD36, offset: 0x7C705, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6buffer2tsACSo11CVBufferRefa_s5Int64VtKcfC', symObjAddr: 0x5F4, symBinAddr: 0x5C20, symSize: 0xF4 } - - { offsetInCU: 0xD8A, offset: 0x7C759, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6buffer2tsACSo11CVBufferRefa_s5Int64VtKcfc', symObjAddr: 0x6E8, symBinAddr: 0x5D14, symSize: 0xF8 } - - { offsetInCU: 0xE0B, offset: 0x7C7DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC5cloneACyKF', symObjAddr: 0x7E0, symBinAddr: 0x5E0C, symSize: 0x144 } - - { offsetInCU: 0xEEB, offset: 0x7C8BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC9codedRectSo6CGRectVvg', symObjAddr: 0x98C, symBinAddr: 0x5FB8, symSize: 0x6C } - - { offsetInCU: 0xFA9, offset: 0x7C978, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11visibleRectSo6CGRectVvg', symObjAddr: 0x9F8, symBinAddr: 0x6024, symSize: 0xB8 } - - { offsetInCU: 0x10EC, offset: 0x7CABB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfC', symObjAddr: 0xAB0, symBinAddr: 0x60DC, symSize: 0x20 } - - { offsetInCU: 0x1100, offset: 0x7CACF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfc', symObjAddr: 0xAD0, symBinAddr: 0x60FC, symSize: 0x2C } - - { offsetInCU: 0x1159, offset: 0x7CB28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCfD', symObjAddr: 0xB28, symBinAddr: 0x6154, symSize: 0x30 } - - { offsetInCU: 0x4F, offset: 0x7CC26, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5D20, symBinAddr: 0x10878F0, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x7CC40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5D28, symBinAddr: 0x10878F8, symSize: 0x0 } - - { offsetInCU: 0x83, offset: 0x7CC5A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5D30, symBinAddr: 0x1087900, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x7CC74, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5D38, symBinAddr: 0x1087908, symSize: 0x0 } - - { offsetInCU: 0x101, offset: 0x7CCD8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSYAASY8rawValuexSg03RawF0Qz_tcfCTW', symObjAddr: 0x31C, symBinAddr: 0x69D0, symSize: 0x30 } - - { offsetInCU: 0x133, offset: 0x7CD0A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSYAASY8rawValue03RawF0QzvgTW', symObjAddr: 0x34C, symBinAddr: 0x6A00, symSize: 0x44 } - - { offsetInCU: 0x160, offset: 0x7CD37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValueAESgs6UInt32V_tcfCTf4nd_n', symObjAddr: 0x499C, symBinAddr: 0xB050, symSize: 0x64 } - - { offsetInCU: 0x210, offset: 0x7CDE7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0xB8, symBinAddr: 0x676C, symSize: 0x14 } - - { offsetInCU: 0x28E, offset: 0x7CE65, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH9hashValueSivgTW', symObjAddr: 0xCC, symBinAddr: 0x6780, symSize: 0x44 } - - { offsetInCU: 0x371, offset: 0x7CF48, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x110, symBinAddr: 0x67C4, symSize: 0x28 } - - { offsetInCU: 0x3FA, offset: 0x7CFD1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvgTo', symObjAddr: 0x390, symBinAddr: 0x6A44, symSize: 0x44 } - - { offsetInCU: 0x452, offset: 0x7D029, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvsTo', symObjAddr: 0x418, symBinAddr: 0x6ACC, symSize: 0x48 } - - { offsetInCU: 0x4C3, offset: 0x7D09A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x680, symBinAddr: 0x6D34, symSize: 0x10 } - - { offsetInCU: 0x4E3, offset: 0x7D0BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x680, symBinAddr: 0x6D34, symSize: 0x10 } - - { offsetInCU: 0x519, offset: 0x7D0F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x690, symBinAddr: 0x6D44, symSize: 0x10 } - - { offsetInCU: 0x539, offset: 0x7D110, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x690, symBinAddr: 0x6D44, symSize: 0x10 } - - { offsetInCU: 0x572, offset: 0x7D149, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x6A0, symBinAddr: 0x6D54, symSize: 0x10 } - - { offsetInCU: 0x592, offset: 0x7D169, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x6A0, symBinAddr: 0x6D54, symSize: 0x10 } - - { offsetInCU: 0x5C8, offset: 0x7D19F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x6B0, symBinAddr: 0x6D64, symSize: 0x10 } - - { offsetInCU: 0x5E8, offset: 0x7D1BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x6B0, symBinAddr: 0x6D64, symSize: 0x10 } - - { offsetInCU: 0x621, offset: 0x7D1F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x788, symBinAddr: 0x6E3C, symSize: 0x44 } - - { offsetInCU: 0x65E, offset: 0x7D235, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x810, symBinAddr: 0x6EC4, symSize: 0x30 } - - { offsetInCU: 0x6ED, offset: 0x7D2C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0xA64, symBinAddr: 0x7118, symSize: 0x44 } - - { offsetInCU: 0x745, offset: 0x7D31C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0xAEC, symBinAddr: 0x71A0, symSize: 0x48 } - - { offsetInCU: 0x7A0, offset: 0x7D377, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0xB34, symBinAddr: 0x71E8, symSize: 0x44 } - - { offsetInCU: 0x7F8, offset: 0x7D3CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0xBBC, symBinAddr: 0x7270, symSize: 0x48 } - - { offsetInCU: 0x853, offset: 0x7D42A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0xC04, symBinAddr: 0x72B8, symSize: 0x10 } - - { offsetInCU: 0x873, offset: 0x7D44A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0xC04, symBinAddr: 0x72B8, symSize: 0x10 } - - { offsetInCU: 0x8A9, offset: 0x7D480, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0xC14, symBinAddr: 0x72C8, symSize: 0x10 } - - { offsetInCU: 0x8C9, offset: 0x7D4A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0xC14, symBinAddr: 0x72C8, symSize: 0x10 } - - { offsetInCU: 0x902, offset: 0x7D4D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0xC24, symBinAddr: 0x72D8, symSize: 0x10 } - - { offsetInCU: 0x922, offset: 0x7D4F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0xC24, symBinAddr: 0x72D8, symSize: 0x10 } - - { offsetInCU: 0x958, offset: 0x7D52F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0xC34, symBinAddr: 0x72E8, symSize: 0x10 } - - { offsetInCU: 0x978, offset: 0x7D54F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0xC34, symBinAddr: 0x72E8, symSize: 0x10 } - - { offsetInCU: 0x9B1, offset: 0x7D588, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0xC44, symBinAddr: 0x72F8, symSize: 0x10 } - - { offsetInCU: 0x9D1, offset: 0x7D5A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0xC44, symBinAddr: 0x72F8, symSize: 0x10 } - - { offsetInCU: 0xA09, offset: 0x7D5E0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0xC54, symBinAddr: 0x7308, symSize: 0x34 } - - { offsetInCU: 0xA62, offset: 0x7D639, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0xC88, symBinAddr: 0x733C, symSize: 0x10 } - - { offsetInCU: 0xA82, offset: 0x7D659, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0xC88, symBinAddr: 0x733C, symSize: 0x10 } - - { offsetInCU: 0xABA, offset: 0x7D691, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0xC98, symBinAddr: 0x734C, symSize: 0x34 } - - { offsetInCU: 0xAFD, offset: 0x7D6D4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidth12CoreGraphics7CGFloatVvgTo', symObjAddr: 0xCCC, symBinAddr: 0x7380, symSize: 0x3C } - - { offsetInCU: 0xB45, offset: 0x7D71C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeight12CoreGraphics7CGFloatVvgTo', symObjAddr: 0xDA4, symBinAddr: 0x7458, symSize: 0x3C } - - { offsetInCU: 0xB77, offset: 0x7D74E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21drawingBufferWidthRaw12CoreGraphics7CGFloatVvgTo', symObjAddr: 0xE7C, symBinAddr: 0x7530, symSize: 0x3C } - - { offsetInCU: 0xBA9, offset: 0x7D780, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22drawingBufferHeightRaw12CoreGraphics7CGFloatVvgTo', symObjAddr: 0xF04, symBinAddr: 0x75B8, symSize: 0x3C } - - { offsetInCU: 0xBF1, offset: 0x7D7C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xF8C, symBinAddr: 0x7640, symSize: 0x20 } - - { offsetInCU: 0xC59, offset: 0x7D830, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xFD0, symBinAddr: 0x7684, symSize: 0x20 } - - { offsetInCU: 0xCF8, offset: 0x7D8CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x1038, symBinAddr: 0x76EC, symSize: 0xC4 } - - { offsetInCU: 0xE04, offset: 0x7D9DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0x1234, symBinAddr: 0x78E8, symSize: 0x30 } - - { offsetInCU: 0xE98, offset: 0x7DA6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x1A00, symBinAddr: 0x80B4, symSize: 0xC4 } - - { offsetInCU: 0xF02, offset: 0x7DAD9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x1D9C, symBinAddr: 0x8450, symSize: 0xB0 } - - { offsetInCU: 0xF3A, offset: 0x7DB11, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1F30, symBinAddr: 0x85E4, symSize: 0x3C } - - { offsetInCU: 0xF6D, offset: 0x7DB44, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1F6C, symBinAddr: 0x8620, symSize: 0x10 } - - { offsetInCU: 0xF8D, offset: 0x7DB64, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1F6C, symBinAddr: 0x8620, symSize: 0x10 } - - { offsetInCU: 0xFC7, offset: 0x7DB9E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1F7C, symBinAddr: 0x8630, symSize: 0x34 } - - { offsetInCU: 0x1022, offset: 0x7DBF9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x1FF8, symBinAddr: 0x86AC, symSize: 0x48 } - - { offsetInCU: 0x10BC, offset: 0x7DC93, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x208C, symBinAddr: 0x8740, symSize: 0x64 } - - { offsetInCU: 0x1181, offset: 0x7DD58, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x2148, symBinAddr: 0x87FC, symSize: 0x94 } - - { offsetInCU: 0x120E, offset: 0x7DDE5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x221C, symBinAddr: 0x88D0, symSize: 0x6C } - - { offsetInCU: 0x1270, offset: 0x7DE47, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x232C, symBinAddr: 0x89E0, symSize: 0x6C } - - { offsetInCU: 0x12CD, offset: 0x7DEA4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x2398, symBinAddr: 0x8A4C, symSize: 0xB0 } - - { offsetInCU: 0x131F, offset: 0x7DEF6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x2518, symBinAddr: 0x8BCC, symSize: 0x94 } - - { offsetInCU: 0x13AE, offset: 0x7DF85, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x2808, symBinAddr: 0x8EBC, symSize: 0x3C } - - { offsetInCU: 0x141A, offset: 0x7DFF1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2B1C, symBinAddr: 0x91D0, symSize: 0x20 } - - { offsetInCU: 0x1497, offset: 0x7E06E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x2DD4, symBinAddr: 0x9488, symSize: 0x44 } - - { offsetInCU: 0x14F1, offset: 0x7E0C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x2E5C, symBinAddr: 0x9510, symSize: 0x6C } - - { offsetInCU: 0x1583, offset: 0x7E15A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x304C, symBinAddr: 0x9700, symSize: 0x20 } - - { offsetInCU: 0x15DD, offset: 0x7E1B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x306C, symBinAddr: 0x9720, symSize: 0x34 } - - { offsetInCU: 0x163D, offset: 0x7E214, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x30D0, symBinAddr: 0x9784, symSize: 0x34 } - - { offsetInCU: 0x16A8, offset: 0x7E27F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivgTo', symObjAddr: 0x3104, symBinAddr: 0x97B8, symSize: 0x44 } - - { offsetInCU: 0x1719, offset: 0x7E2F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivsTo', symObjAddr: 0x318C, symBinAddr: 0x9840, symSize: 0xAC } - - { offsetInCU: 0x17E9, offset: 0x7E3C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivgTo', symObjAddr: 0x3434, symBinAddr: 0x9AE8, symSize: 0x44 } - - { offsetInCU: 0x185A, offset: 0x7E431, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivsTo', symObjAddr: 0x34BC, symBinAddr: 0x9B70, symSize: 0xAC } - - { offsetInCU: 0x1960, offset: 0x7E537, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x3A9C, symBinAddr: 0xA150, symSize: 0x40 } - - { offsetInCU: 0x19C6, offset: 0x7E59D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x3CC4, symBinAddr: 0xA378, symSize: 0x28 } - - { offsetInCU: 0x19F9, offset: 0x7E5D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x4004, symBinAddr: 0xA6B8, symSize: 0x24 } - - { offsetInCU: 0x1A37, offset: 0x7E60E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x40FC, symBinAddr: 0xA7B0, symSize: 0x14 } - - { offsetInCU: 0x1A7D, offset: 0x7E654, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x54C4, symBinAddr: 0xBB74, symSize: 0x298 } - - { offsetInCU: 0x1C9C, offset: 0x7E873, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x4EC, symBinAddr: 0x6BA0, symSize: 0x40 } - - { offsetInCU: 0x1CE1, offset: 0x7E8B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x52C, symBinAddr: 0x6BE0, symSize: 0x30 } - - { offsetInCU: 0x1D26, offset: 0x7E8FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x594, symBinAddr: 0x6C48, symSize: 0x40 } - - { offsetInCU: 0x1E5D, offset: 0x7EA34, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x21F0, symBinAddr: 0x88A4, symSize: 0x2C } - - { offsetInCU: 0x1E75, offset: 0x7EA4C, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x24A0, symBinAddr: 0x8B54, symSize: 0x78 } - - { offsetInCU: 0x1E8D, offset: 0x7EA64, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x2608, symBinAddr: 0x8CBC, symSize: 0x94 } - - { offsetInCU: 0x1EC5, offset: 0x7EA9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x269C, symBinAddr: 0x8D50, symSize: 0xB8 } - - { offsetInCU: 0x1F07, offset: 0x7EADE, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x2754, symBinAddr: 0x8E08, symSize: 0x6C } - - { offsetInCU: 0x1F87, offset: 0x7EB5E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivpACTk', symObjAddr: 0x32C8, symBinAddr: 0x997C, symSize: 0x94 } - - { offsetInCU: 0x202D, offset: 0x7EC04, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivpACTk', symObjAddr: 0x35EC, symBinAddr: 0x9CA0, symSize: 0x88 } - - { offsetInCU: 0x20E3, offset: 0x7ECBA, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x3C78, symBinAddr: 0xA32C, symSize: 0x4C } - - { offsetInCU: 0x20FB, offset: 0x7ECD2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x4028, symBinAddr: 0xA6DC, symSize: 0xC4 } - - { offsetInCU: 0x2147, offset: 0x7ED1E, size: 0x8, addend: 0x0, symName: '_$sSo6UIViewC12CanvasNativeE21getBoundingClientRectyySvFTo', symObjAddr: 0x41B0, symBinAddr: 0xA864, symSize: 0x30 } - - { offsetInCU: 0x22E2, offset: 0x7EEB9, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x4A00, symBinAddr: 0xB0B4, symSize: 0x10 } - - { offsetInCU: 0x22F6, offset: 0x7EECD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x4A10, symBinAddr: 0xB0C4, symSize: 0x20 } - - { offsetInCU: 0x230A, offset: 0x7EEE1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFySo7NSTimerCYbcfU_TA', symObjAddr: 0x4A54, symBinAddr: 0xB108, symSize: 0x24 } - - { offsetInCU: 0x235D, offset: 0x7EF34, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x4A78, symBinAddr: 0xB12C, symSize: 0x10 } - - { offsetInCU: 0x2371, offset: 0x7EF48, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x4A88, symBinAddr: 0xB13C, symSize: 0x8 } - - { offsetInCU: 0x2385, offset: 0x7EF5C, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x4A90, symBinAddr: 0xB144, symSize: 0x40 } - - { offsetInCU: 0x2399, offset: 0x7EF70, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x4AD0, symBinAddr: 0xB184, symSize: 0x40 } - - { offsetInCU: 0x23AD, offset: 0x7EF84, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x4B10, symBinAddr: 0xB1C4, symSize: 0x24 } - - { offsetInCU: 0x23C1, offset: 0x7EF98, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x4B34, symBinAddr: 0xB1E8, symSize: 0x20 } - - { offsetInCU: 0x23D5, offset: 0x7EFAC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASQWb', symObjAddr: 0x4B54, symBinAddr: 0xB208, symSize: 0x4 } - - { offsetInCU: 0x23E9, offset: 0x7EFC0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOAESQAAWl', symObjAddr: 0x4B58, symBinAddr: 0xB20C, symSize: 0x44 } - - { offsetInCU: 0x23FD, offset: 0x7EFD4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOMa', symObjAddr: 0x51DC, symBinAddr: 0xB890, symSize: 0x10 } - - { offsetInCU: 0x2411, offset: 0x7EFE8, size: 0x8, addend: 0x0, symName: ___swift_memcpy1_1, symObjAddr: 0x51EC, symBinAddr: 0xB8A0, symSize: 0xC } - - { offsetInCU: 0x2425, offset: 0x7EFFC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwet', symObjAddr: 0x51FC, symBinAddr: 0xB8AC, symSize: 0x90 } - - { offsetInCU: 0x2439, offset: 0x7F010, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwst', symObjAddr: 0x528C, symBinAddr: 0xB93C, symSize: 0xBC } - - { offsetInCU: 0x244D, offset: 0x7F024, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwug', symObjAddr: 0x5348, symBinAddr: 0xB9F8, symSize: 0x8 } - - { offsetInCU: 0x2461, offset: 0x7F038, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwup', symObjAddr: 0x5350, symBinAddr: 0xBA00, symSize: 0x4 } - - { offsetInCU: 0x2475, offset: 0x7F04C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwui', symObjAddr: 0x5354, symBinAddr: 0xBA04, symSize: 0x8 } - - { offsetInCU: 0x2489, offset: 0x7F060, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOMa', symObjAddr: 0x535C, symBinAddr: 0xBA0C, symSize: 0x10 } - - { offsetInCU: 0x249D, offset: 0x7F074, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASQWb', symObjAddr: 0x536C, symBinAddr: 0xBA1C, symSize: 0x4 } - - { offsetInCU: 0x24B1, offset: 0x7F088, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOAESQAAWl', symObjAddr: 0x5370, symBinAddr: 0xBA20, symSize: 0x44 } - - { offsetInCU: 0x252B, offset: 0x7F102, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x59F0, symBinAddr: 0xC0A0, symSize: 0x48 } - - { offsetInCU: 0x2554, offset: 0x7F12B, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x5A38, symBinAddr: 0xC0E8, symSize: 0x10 } - - { offsetInCU: 0x2573, offset: 0x7F14A, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x5A48, symBinAddr: 0xC0F8, symSize: 0xC } - - { offsetInCU: 0x259C, offset: 0x7F173, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x5A78, symBinAddr: 0xC128, symSize: 0x8 } - - { offsetInCU: 0x25BB, offset: 0x7F192, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x5A80, symBinAddr: 0xC130, symSize: 0x30 } - - { offsetInCU: 0x25E4, offset: 0x7F1BB, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5AB0, symBinAddr: 0xC160, symSize: 0x10 } - - { offsetInCU: 0x25F8, offset: 0x7F1CF, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x5AF8, symBinAddr: 0xC1A8, symSize: 0x3C } - - { offsetInCU: 0x2676, offset: 0x7F24D, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF12CanvasNative9NSCCanvasC0D3FitO_Tgq5', symObjAddr: 0x0, symBinAddr: 0x66B4, symSize: 0x5C } - - { offsetInCU: 0x26F1, offset: 0x7F2C8, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF12CanvasNative13NSCVideoFrameC0fG6FormatO_Tgq5', symObjAddr: 0x5C, symBinAddr: 0x6710, symSize: 0x5C } - - { offsetInCU: 0x27C9, offset: 0x7F3A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x138, symBinAddr: 0x67EC, symSize: 0x40 } - - { offsetInCU: 0x286B, offset: 0x7F442, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x1CC, symBinAddr: 0x6880, symSize: 0xC } - - { offsetInCU: 0x28EB, offset: 0x7F4C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH9hashValueSivgTW', symObjAddr: 0x1D8, symBinAddr: 0x688C, symSize: 0x78 } - - { offsetInCU: 0x2997, offset: 0x7F56E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x250, symBinAddr: 0x6904, symSize: 0x58 } - - { offsetInCU: 0x2A07, offset: 0x7F5DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x2A8, symBinAddr: 0x695C, symSize: 0x74 } - - { offsetInCU: 0x2C9D, offset: 0x7F874, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x53B4, symBinAddr: 0xBA64, symSize: 0x110 } - - { offsetInCU: 0x3111, offset: 0x7FCE8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValues6UInt32Vvg', symObjAddr: 0x178, symBinAddr: 0x682C, symSize: 0x3C } - - { offsetInCU: 0x3136, offset: 0x7FD0D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValueAESgs6UInt32V_tcfC', symObjAddr: 0x1B4, symBinAddr: 0x6868, symSize: 0x18 } - - { offsetInCU: 0x3186, offset: 0x7FD5D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvg', symObjAddr: 0x3D4, symBinAddr: 0x6A88, symSize: 0x44 } - - { offsetInCU: 0x31C5, offset: 0x7FD9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvs', symObjAddr: 0x460, symBinAddr: 0x6B14, symSize: 0x48 } - - { offsetInCU: 0x31EE, offset: 0x7FDC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM', symObjAddr: 0x4A8, symBinAddr: 0x6B5C, symSize: 0x44 } - - { offsetInCU: 0x32E0, offset: 0x7FEB7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x7CC, symBinAddr: 0x6E80, symSize: 0x44 } - - { offsetInCU: 0x3313, offset: 0x7FEEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x840, symBinAddr: 0x6EF4, symSize: 0xEC } - - { offsetInCU: 0x335F, offset: 0x7FF36, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x92C, symBinAddr: 0x6FE0, symSize: 0x58 } - - { offsetInCU: 0x3384, offset: 0x7FF5B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x984, symBinAddr: 0x7038, symSize: 0xE0 } - - { offsetInCU: 0x33C5, offset: 0x7FF9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0xAA8, symBinAddr: 0x715C, symSize: 0x44 } - - { offsetInCU: 0x341D, offset: 0x7FFF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0xB78, symBinAddr: 0x722C, symSize: 0x44 } - - { offsetInCU: 0x3578, offset: 0x8014F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidth12CoreGraphics7CGFloatVvg', symObjAddr: 0xD08, symBinAddr: 0x73BC, symSize: 0x9C } - - { offsetInCU: 0x35BB, offset: 0x80192, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeight12CoreGraphics7CGFloatVvg', symObjAddr: 0xDE0, symBinAddr: 0x7494, symSize: 0x9C } - - { offsetInCU: 0x35FE, offset: 0x801D5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21drawingBufferWidthRaw12CoreGraphics7CGFloatVvg', symObjAddr: 0xEB8, symBinAddr: 0x756C, symSize: 0x4C } - - { offsetInCU: 0x363F, offset: 0x80216, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22drawingBufferHeightRaw12CoreGraphics7CGFloatVvg', symObjAddr: 0xF40, symBinAddr: 0x75F4, symSize: 0x4C } - - { offsetInCU: 0x36A1, offset: 0x80278, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xFAC, symBinAddr: 0x7660, symSize: 0x24 } - - { offsetInCU: 0x36E9, offset: 0x802C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xFF0, symBinAddr: 0x76A4, symSize: 0x24 } - - { offsetInCU: 0x371D, offset: 0x802F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0x1014, symBinAddr: 0x76C8, symSize: 0x24 } - - { offsetInCU: 0x38E7, offset: 0x804BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0x10FC, symBinAddr: 0x77B0, symSize: 0x138 } - - { offsetInCU: 0x3C63, offset: 0x8083A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0x1264, symBinAddr: 0x7918, symSize: 0x79C } - - { offsetInCU: 0x43DB, offset: 0x80FB2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x1AC4, symBinAddr: 0x8178, symSize: 0x2D8 } - - { offsetInCU: 0x4821, offset: 0x813F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1E4C, symBinAddr: 0x8500, symSize: 0xE4 } - - { offsetInCU: 0x497C, offset: 0x81553, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x1FB0, symBinAddr: 0x8664, symSize: 0x48 } - - { offsetInCU: 0x4A02, offset: 0x815D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x2040, symBinAddr: 0x86F4, symSize: 0x4C } - - { offsetInCU: 0x4B23, offset: 0x816FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x20F0, symBinAddr: 0x87A4, symSize: 0x58 } - - { offsetInCU: 0x4C19, offset: 0x817F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x2448, symBinAddr: 0x8AFC, symSize: 0x58 } - - { offsetInCU: 0x4C65, offset: 0x8183C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x25AC, symBinAddr: 0x8C60, symSize: 0x5C } - - { offsetInCU: 0x4C8E, offset: 0x81865, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x27C0, symBinAddr: 0x8E74, symSize: 0x44 } - - { offsetInCU: 0x4CB4, offset: 0x8188B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x2804, symBinAddr: 0x8EB8, symSize: 0x4 } - - { offsetInCU: 0x4CDD, offset: 0x818B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x2844, symBinAddr: 0x8EF8, symSize: 0x50 } - - { offsetInCU: 0x4D12, offset: 0x818E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x2894, symBinAddr: 0x8F48, symSize: 0x288 } - - { offsetInCU: 0x4E76, offset: 0x81A4D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14initializeView33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x2B3C, symBinAddr: 0x91F0, symSize: 0x298 } - - { offsetInCU: 0x50D8, offset: 0x81CAF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvg', symObjAddr: 0x2E18, symBinAddr: 0x94CC, symSize: 0x44 } - - { offsetInCU: 0x5119, offset: 0x81CF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvs', symObjAddr: 0x2EC8, symBinAddr: 0x957C, symSize: 0x54 } - - { offsetInCU: 0x513E, offset: 0x81D15, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x2F1C, symBinAddr: 0x95D0, symSize: 0xB8 } - - { offsetInCU: 0x51FA, offset: 0x81DD1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvM', symObjAddr: 0x2FD4, symBinAddr: 0x9688, symSize: 0x48 } - - { offsetInCU: 0x5220, offset: 0x81DF7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvM.resume.0', symObjAddr: 0x301C, symBinAddr: 0x96D0, symSize: 0x30 } - - { offsetInCU: 0x527E, offset: 0x81E55, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x30A0, symBinAddr: 0x9754, symSize: 0x30 } - - { offsetInCU: 0x52F0, offset: 0x81EC7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivg', symObjAddr: 0x3148, symBinAddr: 0x97FC, symSize: 0x44 } - - { offsetInCU: 0x534B, offset: 0x81F22, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivs', symObjAddr: 0x3238, symBinAddr: 0x98EC, symSize: 0x90 } - - { offsetInCU: 0x53DC, offset: 0x81FB3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivM', symObjAddr: 0x335C, symBinAddr: 0x9A10, symSize: 0x58 } - - { offsetInCU: 0x5402, offset: 0x81FD9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivM.resume.0', symObjAddr: 0x33B4, symBinAddr: 0x9A68, symSize: 0x80 } - - { offsetInCU: 0x547B, offset: 0x82052, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivg', symObjAddr: 0x3478, symBinAddr: 0x9B2C, symSize: 0x44 } - - { offsetInCU: 0x54D1, offset: 0x820A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivs', symObjAddr: 0x3568, symBinAddr: 0x9C1C, symSize: 0x84 } - - { offsetInCU: 0x5562, offset: 0x82139, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivM', symObjAddr: 0x3674, symBinAddr: 0x9D28, symSize: 0x58 } - - { offsetInCU: 0x5588, offset: 0x8215F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivM.resume.0', symObjAddr: 0x36CC, symBinAddr: 0x9D80, symSize: 0x74 } - - { offsetInCU: 0x5665, offset: 0x8223C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3740, symBinAddr: 0x9DF4, symSize: 0x234 } - - { offsetInCU: 0x59DD, offset: 0x825B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x3974, symBinAddr: 0xA028, symSize: 0x128 } - - { offsetInCU: 0x5B94, offset: 0x8276B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3ADC, symBinAddr: 0xA190, symSize: 0x19C } - - { offsetInCU: 0x5CC3, offset: 0x8289A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x3CEC, symBinAddr: 0xA3A0, symSize: 0x318 } - - { offsetInCU: 0x5D53, offset: 0x8292A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x40EC, symBinAddr: 0xA7A0, symSize: 0x10 } - - { offsetInCU: 0x5DBE, offset: 0x82995, size: 0x8, addend: 0x0, symName: '_$sSo6UIViewC12CanvasNativeE21getBoundingClientRectyySvF', symObjAddr: 0x4110, symBinAddr: 0xA7C4, symSize: 0xA0 } - - { offsetInCU: 0x5EF9, offset: 0x82AD0, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x41E0, symBinAddr: 0xA894, symSize: 0x64 } - - { offsetInCU: 0x5F53, offset: 0x82B2A, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x4244, symBinAddr: 0xA8F8, symSize: 0x6C } - - { offsetInCU: 0x5FD3, offset: 0x82BAA, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x42B0, symBinAddr: 0xA964, symSize: 0xD8 } - - { offsetInCU: 0x6010, offset: 0x82BE7, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x4388, symBinAddr: 0xAA3C, symSize: 0xE0 } - - { offsetInCU: 0x608B, offset: 0x82C62, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x4468, symBinAddr: 0xAB1C, symSize: 0x1F4 } - - { offsetInCU: 0x6147, offset: 0x82D1E, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x465C, symBinAddr: 0xAD10, symSize: 0x340 } - - { offsetInCU: 0x6311, offset: 0x82EE8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTf4gn_n', symObjAddr: 0x575C, symBinAddr: 0xBE0C, symSize: 0x270 } - - { offsetInCU: 0x27, offset: 0x8304A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xC254, symSize: 0x10 } - - { offsetInCU: 0x62, offset: 0x83085, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x10, symBinAddr: 0xC264, symSize: 0x20 } - - { offsetInCU: 0x1AF, offset: 0x831D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xC254, symSize: 0x10 } - - { offsetInCU: 0x27, offset: 0x83223, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTo', symObjAddr: 0x0, symBinAddr: 0xC284, symSize: 0x44 } - - { offsetInCU: 0x7D, offset: 0x83279, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTo', symObjAddr: 0x0, symBinAddr: 0xC284, symSize: 0x44 } - - { offsetInCU: 0xDB, offset: 0x832D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0xB4, symBinAddr: 0xC338, symSize: 0x3C } - - { offsetInCU: 0x12C, offset: 0x83328, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTf4nnndddd_n', symObjAddr: 0x120, symBinAddr: 0xC3A4, symSize: 0x148 } - - { offsetInCU: 0x22C, offset: 0x83428, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x94, symBinAddr: 0xC318, symSize: 0x20 } - - { offsetInCU: 0x3ED, offset: 0x835E9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x44, symBinAddr: 0xC2C8, symSize: 0x20 } - - { offsetInCU: 0x401, offset: 0x835FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x64, symBinAddr: 0xC2E8, symSize: 0x30 } - - { offsetInCU: 0x437, offset: 0x83633, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xF0, symBinAddr: 0xC374, symSize: 0x30 } - - { offsetInCU: 0xD1, offset: 0x83777, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0xFC4, symBinAddr: 0xD488, symSize: 0x68 } - - { offsetInCU: 0x161, offset: 0x83807, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0x1038, symBinAddr: 0xD4FC, symSize: 0x10 } - - { offsetInCU: 0x190, offset: 0x83836, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0x1048, symBinAddr: 0xD50C, symSize: 0x4 } - - { offsetInCU: 0x32D, offset: 0x839D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x17CC, symBinAddr: 0xDC90, symSize: 0x2C } - - { offsetInCU: 0x5D4, offset: 0x83C7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1834, symBinAddr: 0xDCF8, symSize: 0x68 } - - { offsetInCU: 0x603, offset: 0x83CA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x189C, symBinAddr: 0xDD60, symSize: 0x20 } - - { offsetInCU: 0x617, offset: 0x83CBD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x18BC, symBinAddr: 0xDD80, symSize: 0x20 } - - { offsetInCU: 0x62B, offset: 0x83CD1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x18DC, symBinAddr: 0xDDA0, symSize: 0x30 } - - { offsetInCU: 0x63F, offset: 0x83CE5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x190C, symBinAddr: 0xDDD0, symSize: 0x8 } - - { offsetInCU: 0x653, offset: 0x83CF9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1914, symBinAddr: 0xDDD8, symSize: 0x44 } - - { offsetInCU: 0x667, offset: 0x83D0D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1958, symBinAddr: 0xDE1C, symSize: 0x64 } - - { offsetInCU: 0x67B, offset: 0x83D21, size: 0x8, addend: 0x0, symName: ___swift_memcpy33_8, symObjAddr: 0x19BC, symBinAddr: 0xDE80, symSize: 0x14 } - - { offsetInCU: 0x68F, offset: 0x83D35, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x19D0, symBinAddr: 0xDE94, symSize: 0x4C } - - { offsetInCU: 0x6A3, offset: 0x83D49, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x1A1C, symBinAddr: 0xDEE0, symSize: 0x48 } - - { offsetInCU: 0x6B7, offset: 0x83D5D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1A64, symBinAddr: 0xDF28, symSize: 0x44 } - - { offsetInCU: 0x6CB, offset: 0x83D71, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1AA8, symBinAddr: 0xDF6C, symSize: 0x10 } - - { offsetInCU: 0x6DF, offset: 0x83D85, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1AB8, symBinAddr: 0xDF7C, symSize: 0x48 } - - { offsetInCU: 0x6F3, offset: 0x83D99, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1BC4, symBinAddr: 0xDFC4, symSize: 0x58 } - - { offsetInCU: 0x707, offset: 0x83DAD, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1C1C, symBinAddr: 0xE01C, symSize: 0x8 } - - { offsetInCU: 0x71B, offset: 0x83DC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVWOs', symObjAddr: 0x1C5C, symBinAddr: 0xE05C, symSize: 0x28 } - - { offsetInCU: 0x74F, offset: 0x83DF5, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x1C98, symBinAddr: 0xE098, symSize: 0x10 } - - { offsetInCU: 0xCE3, offset: 0x84389, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xC4EC, symSize: 0x534 } - - { offsetInCU: 0xF7A, offset: 0x84620, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x540, symBinAddr: 0xCA2C, symSize: 0xE0 } - - { offsetInCU: 0xFF9, offset: 0x8469F, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x6E4, symBinAddr: 0xCBBC, symSize: 0xB8 } - - { offsetInCU: 0x108C, offset: 0x84732, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0xEBC, symBinAddr: 0xD380, symSize: 0x108 } - - { offsetInCU: 0x11D6, offset: 0x8487C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x13C0, symBinAddr: 0xD884, symSize: 0x40C } - - { offsetInCU: 0x18EC, offset: 0x84F92, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1C84, symBinAddr: 0xE084, symSize: 0x14 } - - { offsetInCU: 0x198B, offset: 0x85031, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1CA8, symBinAddr: 0xE0A8, symSize: 0x1DC } - - { offsetInCU: 0x27, offset: 0x8520E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xE284, symSize: 0x2C } - - { offsetInCU: 0x4B, offset: 0x85232, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2D8, symBinAddr: 0x1087B88, symSize: 0x0 } - - { offsetInCU: 0x65, offset: 0x8524C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xE284, symSize: 0x2C } - - { offsetInCU: 0x98, offset: 0x8527F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x178, symBinAddr: 0xE3FC, symSize: 0x40 } - - { offsetInCU: 0x104, offset: 0x852EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x228, symBinAddr: 0xE4AC, symSize: 0x3C } - - { offsetInCU: 0x156, offset: 0x8533D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x2C, symBinAddr: 0xE2B0, symSize: 0x10C } - - { offsetInCU: 0x181, offset: 0x85368, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x208, symBinAddr: 0xE48C, symSize: 0x20 } - - { offsetInCU: 0x195, offset: 0x8537C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x294, symBinAddr: 0xE518, symSize: 0x4 } - - { offsetInCU: 0x1C0, offset: 0x853A7, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x298, symBinAddr: 0xE51C, symSize: 0x3C } - - { offsetInCU: 0x348, offset: 0x8552F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x138, symBinAddr: 0xE3BC, symSize: 0x40 } - - { offsetInCU: 0x388, offset: 0x8556F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x1B8, symBinAddr: 0xE43C, symSize: 0x20 } - - { offsetInCU: 0x39C, offset: 0x85583, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1D8, symBinAddr: 0xE45C, symSize: 0x30 } - - { offsetInCU: 0x3D8, offset: 0x855BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x264, symBinAddr: 0xE4E8, symSize: 0x30 } - - { offsetInCU: 0x2B, offset: 0x8560D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xE558, symSize: 0xA4 } - - { offsetInCU: 0x66, offset: 0x85648, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZTo', symObjAddr: 0xA4, symBinAddr: 0xE5FC, symSize: 0xA4 } - - { offsetInCU: 0xF9, offset: 0x856DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheH0a_AFSo012CFDictionaryH0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D8, symBinAddr: 0xE730, symSize: 0x110 } - - { offsetInCU: 0x1A2, offset: 0x85784, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x30C, symBinAddr: 0xE864, symSize: 0x28 } - - { offsetInCU: 0x21D, offset: 0x857FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZTo', symObjAddr: 0x338, symBinAddr: 0xE890, symSize: 0x64 } - - { offsetInCU: 0x296, offset: 0x85878, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x494, symBinAddr: 0xE9EC, symSize: 0x15C } - - { offsetInCU: 0x32B, offset: 0x8590D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfcTo', symObjAddr: 0x640, symBinAddr: 0xEB98, symSize: 0x3C } - - { offsetInCU: 0x37C, offset: 0x8595E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZTf4nnndddd_n', symObjAddr: 0x6AC, symBinAddr: 0xEC04, symSize: 0x18C } - - { offsetInCU: 0x4C0, offset: 0x85AA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC7getFile33_086607F85A042F2B265C7E71FFB9771CLLyS2SKFZTf4nd_g', symObjAddr: 0x838, symBinAddr: 0xED90, symSize: 0x2E4 } - - { offsetInCU: 0x58F, offset: 0x85B71, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCMa', symObjAddr: 0xB1C, symBinAddr: 0xF074, symSize: 0x20 } - - { offsetInCU: 0x5A3, offset: 0x85B85, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwCP', symObjAddr: 0xB3C, symBinAddr: 0xF094, symSize: 0x2C } - - { offsetInCU: 0x5B7, offset: 0x85B99, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwxx', symObjAddr: 0xB68, symBinAddr: 0xF0C0, symSize: 0x8 } - - { offsetInCU: 0x5CB, offset: 0x85BAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwca', symObjAddr: 0xB70, symBinAddr: 0xF0C8, symSize: 0x40 } - - { offsetInCU: 0x5DF, offset: 0x85BC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwta', symObjAddr: 0xBBC, symBinAddr: 0xF108, symSize: 0x30 } - - { offsetInCU: 0x5F3, offset: 0x85BD5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwet', symObjAddr: 0xBEC, symBinAddr: 0xF138, symSize: 0x48 } - - { offsetInCU: 0x607, offset: 0x85BE9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwst', symObjAddr: 0xC34, symBinAddr: 0xF180, symSize: 0x3C } - - { offsetInCU: 0x61B, offset: 0x85BFD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwug', symObjAddr: 0xC70, symBinAddr: 0xF1BC, symSize: 0x8 } - - { offsetInCU: 0x62F, offset: 0x85C11, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwup', symObjAddr: 0xC78, symBinAddr: 0xF1C4, symSize: 0x4 } - - { offsetInCU: 0x643, offset: 0x85C25, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwui', symObjAddr: 0xC7C, symBinAddr: 0xF1C8, symSize: 0x4 } - - { offsetInCU: 0x657, offset: 0x85C39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOMa', symObjAddr: 0xC80, symBinAddr: 0xF1CC, symSize: 0x10 } - - { offsetInCU: 0x6DF, offset: 0x85CC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x39C, symBinAddr: 0xE8F4, symSize: 0x4 } - - { offsetInCU: 0x6FB, offset: 0x85CDD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3A0, symBinAddr: 0xE8F8, symSize: 0x4 } - - { offsetInCU: 0x717, offset: 0x85CF9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3A4, symBinAddr: 0xE8FC, symSize: 0x4 } - - { offsetInCU: 0x733, offset: 0x85D15, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x3A8, symBinAddr: 0xE900, symSize: 0x4 } - - { offsetInCU: 0xA01, offset: 0x85FE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xE558, symSize: 0xA4 } - - { offsetInCU: 0xA97, offset: 0x86079, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheH0a_AFSo012CFDictionaryH0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x148, symBinAddr: 0xE6A0, symSize: 0x90 } - - { offsetInCU: 0xC34, offset: 0x86216, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2E8, symBinAddr: 0xE840, symSize: 0x24 } - - { offsetInCU: 0xC7E, offset: 0x86260, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZ', symObjAddr: 0x334, symBinAddr: 0xE88C, symSize: 0x4 } - - { offsetInCU: 0xCA0, offset: 0x86282, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x3AC, symBinAddr: 0xE904, symSize: 0xE8 } - - { offsetInCU: 0xD50, offset: 0x86332, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfC', symObjAddr: 0x5F0, symBinAddr: 0xEB48, symSize: 0x20 } - - { offsetInCU: 0xD64, offset: 0x86346, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfc', symObjAddr: 0x610, symBinAddr: 0xEB68, symSize: 0x30 } - - { offsetInCU: 0xD9A, offset: 0x8637C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCfD', symObjAddr: 0x67C, symBinAddr: 0xEBD4, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x86467, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xF1E0, symSize: 0x4 } - - { offsetInCU: 0x71, offset: 0x864B1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x4, symBinAddr: 0xF1E4, symSize: 0x70 } - - { offsetInCU: 0xF6, offset: 0x86536, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x78, symBinAddr: 0xF258, symSize: 0x5C } - - { offsetInCU: 0x191, offset: 0x865D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xD8, symBinAddr: 0xF2B8, symSize: 0x74 } - - { offsetInCU: 0x254, offset: 0x86694, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x150, symBinAddr: 0xF330, symSize: 0xA4 } - - { offsetInCU: 0x323, offset: 0x86763, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x244, symBinAddr: 0xF424, symSize: 0x3C } - - { offsetInCU: 0x375, offset: 0x867B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x2B0, symBinAddr: 0xF490, symSize: 0x20 } - - { offsetInCU: 0x4E5, offset: 0x86925, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xF1E0, symSize: 0x4 } - - { offsetInCU: 0x51D, offset: 0x8695D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xF1E0, symSize: 0x4 } - - { offsetInCU: 0x582, offset: 0x869C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0xF254, symSize: 0x4 } - - { offsetInCU: 0x5C2, offset: 0x86A02, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0xF254, symSize: 0x4 } - - { offsetInCU: 0x624, offset: 0x86A64, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xD4, symBinAddr: 0xF2B4, symSize: 0x4 } - - { offsetInCU: 0x676, offset: 0x86AB6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xD4, symBinAddr: 0xF2B4, symSize: 0x4 } - - { offsetInCU: 0x6EB, offset: 0x86B2B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x14C, symBinAddr: 0xF32C, symSize: 0x4 } - - { offsetInCU: 0x761, offset: 0x86BA1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x14C, symBinAddr: 0xF32C, symSize: 0x4 } - - { offsetInCU: 0x7FF, offset: 0x86C3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1F4, symBinAddr: 0xF3D4, symSize: 0x20 } - - { offsetInCU: 0x813, offset: 0x86C53, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x214, symBinAddr: 0xF3F4, symSize: 0x30 } - - { offsetInCU: 0x84F, offset: 0x86C8F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x280, symBinAddr: 0xF460, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x86CED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0xF4B0, symSize: 0x14 } - - { offsetInCU: 0xA9, offset: 0x86D6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x14, symBinAddr: 0xF4C4, symSize: 0x38 } - - { offsetInCU: 0x1A2, offset: 0x86E68, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x68, symBinAddr: 0xF518, symSize: 0x40 } - - { offsetInCU: 0x284, offset: 0x86F4A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x118, symBinAddr: 0xF5C8, symSize: 0x3C } - - { offsetInCU: 0x2D6, offset: 0x86F9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0xF8, symBinAddr: 0xF5A8, symSize: 0x20 } - - { offsetInCU: 0x480, offset: 0x87146, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0xF4B0, symSize: 0x14 } - - { offsetInCU: 0x5C4, offset: 0x8728A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x4C, symBinAddr: 0xF4FC, symSize: 0x1C } - - { offsetInCU: 0x6FA, offset: 0x873C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0xA8, symBinAddr: 0xF558, symSize: 0x20 } - - { offsetInCU: 0x70E, offset: 0x873D4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0xC8, symBinAddr: 0xF578, symSize: 0x30 } - - { offsetInCU: 0x744, offset: 0x8740A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x154, symBinAddr: 0xF604, symSize: 0x30 } - - { offsetInCU: 0x61, offset: 0x8748E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0xF638, symSize: 0x10 } - - { offsetInCU: 0x81, offset: 0x874AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0xF638, symSize: 0x10 } - - { offsetInCU: 0xB7, offset: 0x874E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0xF648, symSize: 0x10 } - - { offsetInCU: 0xD7, offset: 0x87504, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0xF648, symSize: 0x10 } - - { offsetInCU: 0x110, offset: 0x8753D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x24, symBinAddr: 0xF658, symSize: 0x48 } - - { offsetInCU: 0x168, offset: 0x87595, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xB4, symBinAddr: 0xF6E8, symSize: 0x50 } - - { offsetInCU: 0x1C3, offset: 0x875F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0xF738, symSize: 0x10 } - - { offsetInCU: 0x1E3, offset: 0x87610, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0xF738, symSize: 0x10 } - - { offsetInCU: 0x219, offset: 0x87646, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0xF748, symSize: 0x10 } - - { offsetInCU: 0x239, offset: 0x87666, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0xF748, symSize: 0x10 } - - { offsetInCU: 0x272, offset: 0x8769F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1B0, symBinAddr: 0xF7E4, symSize: 0x78 } - - { offsetInCU: 0x2C8, offset: 0x876F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2D4, symBinAddr: 0xF908, symSize: 0xB0 } - - { offsetInCU: 0x32A, offset: 0x87757, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x43C, symBinAddr: 0xFA70, symSize: 0x28 } - - { offsetInCU: 0x35C, offset: 0x87789, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x4E0, symBinAddr: 0xFA98, symSize: 0xA0 } - - { offsetInCU: 0x3DD, offset: 0x8780A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x5BC, symBinAddr: 0xFB38, symSize: 0x60 } - - { offsetInCU: 0x44D, offset: 0x8787A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x620, symBinAddr: 0xFB9C, symSize: 0x4C } - - { offsetInCU: 0x4BF, offset: 0x878EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x70C, symBinAddr: 0xFC88, symSize: 0x34 } - - { offsetInCU: 0x533, offset: 0x87960, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x190, symBinAddr: 0xF7C4, symSize: 0x20 } - - { offsetInCU: 0x55D, offset: 0x8798A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x74C, symBinAddr: 0xFCC8, symSize: 0x10 } - - { offsetInCU: 0x65B, offset: 0x87A88, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xA08, symBinAddr: 0xFF84, symSize: 0x74 } - - { offsetInCU: 0x699, offset: 0x87AC6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0xFFF8, symSize: 0x10 } - - { offsetInCU: 0x6B9, offset: 0x87AE6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA7C, symBinAddr: 0xFFF8, symSize: 0x10 } - - { offsetInCU: 0x6EF, offset: 0x87B1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x10008, symSize: 0x10 } - - { offsetInCU: 0x70F, offset: 0x87B3C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA8C, symBinAddr: 0x10008, symSize: 0x10 } - - { offsetInCU: 0x748, offset: 0x87B75, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xA9C, symBinAddr: 0x10018, symSize: 0x20 } - - { offsetInCU: 0x7A0, offset: 0x87BCD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xABC, symBinAddr: 0x10038, symSize: 0x14 } - - { offsetInCU: 0x7FB, offset: 0x87C28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xAD0, symBinAddr: 0x1004C, symSize: 0x44 } - - { offsetInCU: 0x853, offset: 0x87C80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xB58, symBinAddr: 0x100D4, symSize: 0x48 } - - { offsetInCU: 0x8E8, offset: 0x87D15, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xCBC, symBinAddr: 0x10238, symSize: 0x78 } - - { offsetInCU: 0x93E, offset: 0x87D6B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xE34, symBinAddr: 0x103B0, symSize: 0xB0 } - - { offsetInCU: 0x9A0, offset: 0x87DCD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0x1050C, symSize: 0x28 } - - { offsetInCU: 0x9D2, offset: 0x87DFF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0xFB8, symBinAddr: 0x10534, symSize: 0xB8 } - - { offsetInCU: 0xA53, offset: 0x87E80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x1074, symBinAddr: 0x105EC, symSize: 0x28 } - - { offsetInCU: 0xAB1, offset: 0x87EDE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x10D8, symBinAddr: 0x10650, symSize: 0x10 } - - { offsetInCU: 0xC88, offset: 0x880B5, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgmq5', symObjAddr: 0x12E0, symBinAddr: 0x10858, symSize: 0x64 } - - { offsetInCU: 0xCD9, offset: 0x88106, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x14E8, symBinAddr: 0x10A60, symSize: 0x44 } - - { offsetInCU: 0xCED, offset: 0x8811A, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x152C, symBinAddr: 0x10AA4, symSize: 0x44 } - - { offsetInCU: 0xD01, offset: 0x8812E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x1570, symBinAddr: 0x10AE8, symSize: 0x20 } - - { offsetInCU: 0xDDB, offset: 0x88208, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x13C8, symBinAddr: 0x10940, symSize: 0x110 } - - { offsetInCU: 0x1086, offset: 0x884B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x6C, symBinAddr: 0xF6A0, symSize: 0x48 } - - { offsetInCU: 0x1103, offset: 0x88530, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x124, symBinAddr: 0xF758, symSize: 0x6C } - - { offsetInCU: 0x114A, offset: 0x88577, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x228, symBinAddr: 0xF85C, symSize: 0xAC } - - { offsetInCU: 0x11AE, offset: 0x885DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x384, symBinAddr: 0xF9B8, symSize: 0xB8 } - - { offsetInCU: 0x1239, offset: 0x88666, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x61C, symBinAddr: 0xFB98, symSize: 0x4 } - - { offsetInCU: 0x125A, offset: 0x88687, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x66C, symBinAddr: 0xFBE8, symSize: 0x74 } - - { offsetInCU: 0x126E, offset: 0x8869B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x6E0, symBinAddr: 0xFC5C, symSize: 0x2C } - - { offsetInCU: 0x1387, offset: 0x887B4, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x75C, symBinAddr: 0xFCD8, symSize: 0x2AC } - - { offsetInCU: 0x1731, offset: 0x88B5E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xB14, symBinAddr: 0x10090, symSize: 0x44 } - - { offsetInCU: 0x1770, offset: 0x88B9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xBA0, symBinAddr: 0x1011C, symSize: 0x48 } - - { offsetInCU: 0x1795, offset: 0x88BC2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xBE8, symBinAddr: 0x10164, symSize: 0x44 } - - { offsetInCU: 0x17BA, offset: 0x88BE7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xC2C, symBinAddr: 0x101A8, symSize: 0x4 } - - { offsetInCU: 0x17E1, offset: 0x88C0E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xC30, symBinAddr: 0x101AC, symSize: 0x20 } - - { offsetInCU: 0x17F5, offset: 0x88C22, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xC50, symBinAddr: 0x101CC, symSize: 0x6C } - - { offsetInCU: 0x183C, offset: 0x88C69, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xD88, symBinAddr: 0x10304, symSize: 0xAC } - - { offsetInCU: 0x189B, offset: 0x88CC8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0xEE4, symBinAddr: 0x10460, symSize: 0xAC } - - { offsetInCU: 0x1940, offset: 0x88D6D, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x10E8, symBinAddr: 0x10660, symSize: 0x110 } - - { offsetInCU: 0x1A6F, offset: 0x88E9C, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x11F8, symBinAddr: 0x10770, symSize: 0xE8 } - - { offsetInCU: 0x1BB3, offset: 0x88FE0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x1344, symBinAddr: 0x108BC, symSize: 0x84 } - - { offsetInCU: 0x1CAC, offset: 0x890D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x1590, symBinAddr: 0x10B08, symSize: 0x360 } - - { offsetInCU: 0x2B, offset: 0x894DD, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x11054, symSize: 0x2C } - - { offsetInCU: 0x4F, offset: 0x89501, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0xF80, symBinAddr: 0x1087CC8, symSize: 0x0 } - - { offsetInCU: 0x5D, offset: 0x8950F, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x11054, symSize: 0x2C } - - { offsetInCU: 0x75, offset: 0x89527, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x2C, symBinAddr: 0x11080, symSize: 0x10C } - - { offsetInCU: 0xBC, offset: 0x8956E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x13C, symBinAddr: 0x11190, symSize: 0x44 } - - { offsetInCU: 0x132, offset: 0x895E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3AC, symBinAddr: 0x11400, symSize: 0x80 } - - { offsetInCU: 0x185, offset: 0x89637, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC21loadImageFromPathSyncySbs5Int64V_SStFZTo', symObjAddr: 0x48C, symBinAddr: 0x114E0, symSize: 0x74 } - - { offsetInCU: 0x243, offset: 0x896F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZTo', symObjAddr: 0x760, symBinAddr: 0x117B4, symSize: 0x90 } - - { offsetInCU: 0x2A2, offset: 0x89754, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x840, symBinAddr: 0x11894, symSize: 0x3C } - - { offsetInCU: 0x2F3, offset: 0x897A5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x8B0, symBinAddr: 0x11904, symSize: 0x1DC } - - { offsetInCU: 0x379, offset: 0x8982B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZTf4nnnd_n', symObjAddr: 0xA8C, symBinAddr: 0x11AE0, symSize: 0x1EC } - - { offsetInCU: 0x400, offset: 0x898B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x8AC, symBinAddr: 0x11900, symSize: 0x4 } - - { offsetInCU: 0x43C, offset: 0x898EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0xC78, symBinAddr: 0x11CCC, symSize: 0x20 } - - { offsetInCU: 0x45B, offset: 0x8990D, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0xCBC, symBinAddr: 0x11D10, symSize: 0x14 } - - { offsetInCU: 0x484, offset: 0x89936, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZyyYbcfU_TA', symObjAddr: 0xCFC, symBinAddr: 0x11D50, symSize: 0x10 } - - { offsetInCU: 0x498, offset: 0x8994A, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0xD0C, symBinAddr: 0x11D60, symSize: 0x10 } - - { offsetInCU: 0x4AC, offset: 0x8995E, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0xD1C, symBinAddr: 0x11D70, symSize: 0x8 } - - { offsetInCU: 0x4C0, offset: 0x89972, size: 0x8, addend: 0x0, symName: '_$s8Dispatch0A13WorkItemFlagsVACs10SetAlgebraAAWl', symObjAddr: 0xD24, symBinAddr: 0x11D78, symSize: 0x48 } - - { offsetInCU: 0x4D4, offset: 0x89986, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGSayxGSTsWl', symObjAddr: 0xDAC, symBinAddr: 0x11DC0, symSize: 0x4C } - - { offsetInCU: 0x4E8, offset: 0x8999A, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledNameAbstract, symObjAddr: 0xDF8, symBinAddr: 0x11E0C, symSize: 0x44 } - - { offsetInCU: 0x4FC, offset: 0x899AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0xEC8, symBinAddr: 0x11EA0, symSize: 0xC } - - { offsetInCU: 0x510, offset: 0x899C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0xED4, symBinAddr: 0x11EAC, symSize: 0x24 } - - { offsetInCU: 0x544, offset: 0x899F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0xEF8, symBinAddr: 0x11ED0, symSize: 0x24 } - - { offsetInCU: 0x716, offset: 0x89BC8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x1118C, symSize: 0x4 } - - { offsetInCU: 0x744, offset: 0x89BF6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x1118C, symSize: 0x4 } - - { offsetInCU: 0x7A3, offset: 0x89C55, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x180, symBinAddr: 0x111D4, symSize: 0x4 } - - { offsetInCU: 0x7B7, offset: 0x89C69, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x184, symBinAddr: 0x111D8, symSize: 0x228 } - - { offsetInCU: 0x8EE, offset: 0x89DA0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC21loadImageFromPathSyncySbs5Int64V_SStFZ', symObjAddr: 0x42C, symBinAddr: 0x11480, symSize: 0x60 } - - { offsetInCU: 0x9A4, offset: 0x89E56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZ', symObjAddr: 0x500, symBinAddr: 0x11554, symSize: 0x4 } - - { offsetInCU: 0x9B8, offset: 0x89E6A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZyyYbcfU_', symObjAddr: 0x504, symBinAddr: 0x11558, symSize: 0x25C } - - { offsetInCU: 0xA87, offset: 0x89F39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x7F0, symBinAddr: 0x11844, symSize: 0x20 } - - { offsetInCU: 0xA9B, offset: 0x89F4D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x810, symBinAddr: 0x11864, symSize: 0x30 } - - { offsetInCU: 0xAD1, offset: 0x89F83, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x87C, symBinAddr: 0x118D0, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x8A029, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x11F38, symSize: 0x20 } - - { offsetInCU: 0x77, offset: 0x8A079, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x11FA8, symSize: 0x3C } - - { offsetInCU: 0xC9, offset: 0x8A0CB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x11F88, symSize: 0x20 } - - { offsetInCU: 0x214, offset: 0x8A216, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x11F38, symSize: 0x20 } - - { offsetInCU: 0x228, offset: 0x8A22A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x11F58, symSize: 0x30 } - - { offsetInCU: 0x264, offset: 0x8A266, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xAC, symBinAddr: 0x11FE4, symSize: 0x30 } - - { offsetInCU: 0x26, offset: 0x8A2AF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x2E3344, symSize: 0x26E4 } - - { offsetInCU: 0x40, offset: 0x8A2C9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9EA8, symBinAddr: 0x98CD38, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0x8A31B, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFEA8, symBinAddr: 0x992D38, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0x8A37F, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFED0, symBinAddr: 0x992D60, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0x8A395, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x102D8, symBinAddr: 0x993168, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0x8A3AC, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFF18, symBinAddr: 0x992DA8, symSize: 0x0 } - - { offsetInCU: 0xE22, offset: 0x8B0AB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x2E3344, symSize: 0x26E4 } - - { offsetInCU: 0x4BAD, offset: 0x8EE36, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9A24, symBinAddr: 0x2ECD68, symSize: 0x210 } - - { offsetInCU: 0x4E0E, offset: 0x8F097, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E24, symBinAddr: 0x2E8168, symSize: 0x1B8 } - - { offsetInCU: 0x5399, offset: 0x8F622, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0x2E5A28, symSize: 0x5A8 } - - { offsetInCU: 0x5EE1, offset: 0x9016A, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0x2E5FD0, symSize: 0x674 } - - { offsetInCU: 0x6290, offset: 0x90519, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3300, symBinAddr: 0x2E6644, symSize: 0x1F0 } - - { offsetInCU: 0x67A5, offset: 0x90A2E, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x34F0, symBinAddr: 0x2E6834, symSize: 0x7A8 } - - { offsetInCU: 0x75B2, offset: 0x9183B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3C98, symBinAddr: 0x2E6FDC, symSize: 0x614 } - - { offsetInCU: 0x7F41, offset: 0x921CA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x42AC, symBinAddr: 0x2E75F0, symSize: 0xB78 } - - { offsetInCU: 0x9472, offset: 0x936FB, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x50D0, symBinAddr: 0x2E8414, symSize: 0x23CC } - - { offsetInCU: 0xC9D7, offset: 0x96C60, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x4FDC, symBinAddr: 0x2E8320, symSize: 0xF4 } - - { offsetInCU: 0xCBD2, offset: 0x96E5B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x749C, symBinAddr: 0x2EA7E0, symSize: 0x30 } - - { offsetInCU: 0xCCC3, offset: 0x96F4C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x74CC, symBinAddr: 0x2EA810, symSize: 0x58 } - - { offsetInCU: 0xCD38, offset: 0x96FC1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x2EA868, symSize: 0x4 } - - { offsetInCU: 0xCD80, offset: 0x97009, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x2EA868, symSize: 0x4 } - - { offsetInCU: 0xCDAF, offset: 0x97038, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x2EA868, symSize: 0x4 } - - { offsetInCU: 0xCDD3, offset: 0x9705C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7528, symBinAddr: 0x2EA86C, symSize: 0x8C } - - { offsetInCU: 0xCF26, offset: 0x971AF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0x2EA8F8, symSize: 0x4 } - - { offsetInCU: 0xCF5F, offset: 0x971E8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0x2EA8F8, symSize: 0x4 } - - { offsetInCU: 0xD1F8, offset: 0x97481, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x75B8, symBinAddr: 0x2EA8FC, symSize: 0x1870 } - - { offsetInCU: 0xF966, offset: 0x99BEF, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9C34, symBinAddr: 0x2ECF78, symSize: 0x200 } - - { offsetInCU: 0xFECD, offset: 0x9A156, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8E28, symBinAddr: 0x2EC16C, symSize: 0x20 } - - { offsetInCU: 0x1036A, offset: 0x9A5F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8E48, symBinAddr: 0x2EC18C, symSize: 0xBDC } - - { offsetInCU: 0x26, offset: 0x9B380, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x2ED178, symSize: 0x1E0 } - - { offsetInCU: 0x1D2, offset: 0x9B52C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x2ED178, symSize: 0x1E0 } - - { offsetInCU: 0x26, offset: 0x9B7C7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x2ED358, symSize: 0x3C } - - { offsetInCU: 0x34, offset: 0x9B7D5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x2ED358, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0x9B8E5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x2ED394, symSize: 0x90 } - - { offsetInCU: 0x34, offset: 0x9B8F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x2ED394, symSize: 0x90 } - - { offsetInCU: 0x86, offset: 0x9BA56, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0x993230, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0x9BA88, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0x9931C0, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0x9BAAA, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0x9931F0, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0x9BAC0, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0x993220, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0x9BD87, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x2ED424, symSize: 0x18 } - - { offsetInCU: 0x3FB, offset: 0x9BDCB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x2ED424, symSize: 0x18 } - - { offsetInCU: 0x594, offset: 0x9BF64, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x2ED43C, symSize: 0x18 } - - { offsetInCU: 0x63F, offset: 0x9C00F, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x2ED454, symSize: 0x300 } - - { offsetInCU: 0x10C0, offset: 0x9CA90, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0x2ED754, symSize: 0xAC } - - { offsetInCU: 0x13B6, offset: 0x9CD86, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0x2ED800, symSize: 0x4D0 } - - { offsetInCU: 0x24CA, offset: 0x9DE9A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0x2EDCD0, symSize: 0x28C } - - { offsetInCU: 0x2B3F, offset: 0x9E50F, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0x2EDF5C, symSize: 0xF4 } - - { offsetInCU: 0x2D4A, offset: 0x9E71A, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0x2EE050, symSize: 0x168 } - - { offsetInCU: 0x26, offset: 0x9EA3D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x2EE1B8, symSize: 0x38 } - - { offsetInCU: 0xFA, offset: 0x9EB11, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x2EE1B8, symSize: 0x38 } - - { offsetInCU: 0x12C, offset: 0x9EB43, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x2EE1B8, symSize: 0x38 } - - { offsetInCU: 0x199, offset: 0x9EBB0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x2EE1F0, symSize: 0x3C } - - { offsetInCU: 0x1F3, offset: 0x9EC0A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x2EE1F0, symSize: 0x3C } - - { offsetInCU: 0x31B, offset: 0x9ED32, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0x2EE22C, symSize: 0x5C } - - { offsetInCU: 0x517, offset: 0x9EF2E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0x2EE288, symSize: 0x1C } - - { offsetInCU: 0x636, offset: 0x9F04D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0x2EE2A4, symSize: 0x54 } - - { offsetInCU: 0x6D0, offset: 0x9F0E7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0x2EE2F8, symSize: 0x4C } - - { offsetInCU: 0x8A8, offset: 0x9F2BF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x2EE344, symSize: 0xA8 } - - { offsetInCU: 0x90C, offset: 0x9F323, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x2EE344, symSize: 0xA8 } - - { offsetInCU: 0xBA6, offset: 0x9F5BD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x2EE3EC, symSize: 0x124 } - - { offsetInCU: 0xEC3, offset: 0x9F8DA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0x2EE510, symSize: 0xC8 } - - { offsetInCU: 0xF43, offset: 0x9F95A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0x2EE510, symSize: 0xC8 } - - { offsetInCU: 0x10B0, offset: 0x9FAC7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0x2EE5D8, symSize: 0x180 } - - { offsetInCU: 0x134C, offset: 0x9FD63, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x5A0, symBinAddr: 0x2EE758, symSize: 0x16C } - - { offsetInCU: 0x14BB, offset: 0x9FED2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x70C, symBinAddr: 0x2EE8C4, symSize: 0x18 } - - { offsetInCU: 0x1522, offset: 0x9FF39, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x724, symBinAddr: 0x2EE8DC, symSize: 0xC } - - { offsetInCU: 0x155B, offset: 0x9FF72, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x730, symBinAddr: 0x2EE8E8, symSize: 0x8 } - - { offsetInCU: 0x15DF, offset: 0x9FFF6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x738, symBinAddr: 0x2EE8F0, symSize: 0x3C } - - { offsetInCU: 0x26, offset: 0xA01A3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x2EE92C, symSize: 0x140 } - - { offsetInCU: 0x34, offset: 0xA01B1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x2EE92C, symSize: 0x140 } - - { offsetInCU: 0x34, offset: 0xA02B7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x388, symBinAddr: 0x108EE38, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xA02F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x2EEA6C, symSize: 0x35C } - - { offsetInCU: 0x76, offset: 0xA0349, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0x994000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xA03CD, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0x9B9000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xA062E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x2EEA6C, symSize: 0x35C } - - { offsetInCU: 0xC70, offset: 0xA0F43, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0x2EEDC8, symSize: 0x1FC } - - { offsetInCU: 0x115F, offset: 0xA1432, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0x2EEFC4, symSize: 0x1B8 } - - { offsetInCU: 0x10, offset: 0xA1807, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x2EF180, symSize: 0x1A0 } - - { offsetInCU: 0x50, offset: 0xA1847, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x2EF180, symSize: 0x1A0 } - - { offsetInCU: 0x5E, offset: 0xA1855, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0x2EF320, symSize: 0x60 } - - { offsetInCU: 0x81, offset: 0xA1878, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0x2EF380, symSize: 0x288 } - - { offsetInCU: 0x10, offset: 0xA1869, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x2EF610, symSize: 0x130 } - - { offsetInCU: 0x48, offset: 0xA18A1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x2EF610, symSize: 0x130 } - - { offsetInCU: 0x5F, offset: 0xA18B8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0x2EF740, symSize: 0x70 } - - { offsetInCU: 0x75, offset: 0xA18CE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0x2EF7B0, symSize: 0x160 } - - { offsetInCU: 0x7A, offset: 0xA18D3, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0x2EF910, symSize: 0x378 } - - { offsetInCU: 0x10, offset: 0xA18E1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x2EFCA0, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xA1919, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x2EFCA0, symSize: 0x3A0 } - - { offsetInCU: 0x4C, offset: 0xA191D, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0x2F0040, symSize: 0x6C0 } - - { offsetInCU: 0x66, offset: 0xA1937, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0x2F0700, symSize: 0x1138 } - - { offsetInCU: 0x50, offset: 0xA1983, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0x2F1980, symSize: 0x1180 } - - { offsetInCU: 0x66, offset: 0xA1999, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0x2F2B00, symSize: 0x1410 } - - { offsetInCU: 0x10, offset: 0xA198F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x2F3F20, symSize: 0x240 } - - { offsetInCU: 0x45, offset: 0xA19C4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x2F3F20, symSize: 0x240 } - - { offsetInCU: 0x4D, offset: 0xA19CC, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0x2F4160, symSize: 0x9E0 } - - { offsetInCU: 0x63, offset: 0xA19E2, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0x2F4B40, symSize: 0x650 } - - { offsetInCU: 0x10, offset: 0xA19F1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x2F51A0, symSize: 0x40 } - - { offsetInCU: 0x47, offset: 0xA1A28, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x2F51A0, symSize: 0x40 } - - { offsetInCU: 0x5D, offset: 0xA1A3E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0x2F51E0, symSize: 0x40 } - - { offsetInCU: 0x76, offset: 0xA1A57, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0x2F5220, symSize: 0x40 } - - { offsetInCU: 0x81, offset: 0xA1A62, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0x2F5260, symSize: 0x1E0 } - - { offsetInCU: 0x97, offset: 0xA1A78, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0x2F5440, symSize: 0x170 } - - { offsetInCU: 0xAB, offset: 0xA1A8C, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0x2F55B0, symSize: 0x50 } - - { offsetInCU: 0xC3, offset: 0xA1AA4, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0x2F5600, symSize: 0x50 } - - { offsetInCU: 0xD9, offset: 0xA1ABA, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0x2F5650, symSize: 0x50 } - - { offsetInCU: 0xEF, offset: 0xA1AD0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0x2F56A0, symSize: 0x60 } - - { offsetInCU: 0x111, offset: 0xA1AF2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0x2F5700, symSize: 0x1E0 } - - { offsetInCU: 0x124, offset: 0xA1B05, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0x2F58E0, symSize: 0x360 } - - { offsetInCU: 0x141, offset: 0xA1B22, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0x2F5C40, symSize: 0x2D0 } - - { offsetInCU: 0x156, offset: 0xA1B37, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0x2F5F10, symSize: 0x2B0 } - - { offsetInCU: 0x170, offset: 0xA1B51, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0x2F61C0, symSize: 0x250 } - - { offsetInCU: 0x184, offset: 0xA1B65, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0x2F6410, symSize: 0x60 } - - { offsetInCU: 0x19A, offset: 0xA1B7B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0x2F6470, symSize: 0x44 } - - { offsetInCU: 0x10, offset: 0xA1B71, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x2F64C0, symSize: 0xB90 } - - { offsetInCU: 0x4C, offset: 0xA1BAD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x2F64C0, symSize: 0xB90 } - - { offsetInCU: 0x62, offset: 0xA1BC3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0x2F7050, symSize: 0xB98 } - - { offsetInCU: 0x10, offset: 0xA1BBD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x2F7C00, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA1BFE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x2F7C00, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA1BFE, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x2F8A40, symSize: 0x7E0 } - - { offsetInCU: 0x10, offset: 0xA1C09, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x2F9240, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA1C4A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x2F9240, symSize: 0xE40 } - - { offsetInCU: 0x51, offset: 0xA1C4A, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x2FA080, symSize: 0x1F0 } + - { offsetInCU: 0x34, offset: 0xD0994, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x968000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xD09C9, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x968038, symSize: 0x0 } + - { offsetInCU: 0x27, offset: 0xD0A06, size: 0x8, addend: 0x0, symName: '-[NSCMTLView canvasView]', symObjAddr: 0x0, symBinAddr: 0x50C0, symSize: 0x4 } + - { offsetInCU: 0x110, offset: 0xD0AEF, size: 0x8, addend: 0x0, symName: '-[NSCMTLView canvasView]', symObjAddr: 0x0, symBinAddr: 0x50C0, symSize: 0x4 } + - { offsetInCU: 0x145, offset: 0xD0B24, size: 0x8, addend: 0x0, symName: '+[NSCMTLView layerClass]', symObjAddr: 0x4, symBinAddr: 0x50C4, symSize: 0xC } + - { offsetInCU: 0x178, offset: 0xD0B57, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setDrawableSize:]', symObjAddr: 0x10, symBinAddr: 0x50D0, symSize: 0x48 } + - { offsetInCU: 0x1C7, offset: 0xD0BA6, size: 0x8, addend: 0x0, symName: '-[NSCMTLView drawableSize]', symObjAddr: 0x58, symBinAddr: 0x5118, symSize: 0x4C } + - { offsetInCU: 0x20E, offset: 0xD0BED, size: 0x8, addend: 0x0, symName: '-[NSCMTLView initWithFrame:]', symObjAddr: 0xA4, symBinAddr: 0x5164, symSize: 0x60 } + - { offsetInCU: 0x251, offset: 0xD0C30, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setup]', symObjAddr: 0x104, symBinAddr: 0x51C4, symSize: 0xB0 } + - { offsetInCU: 0x2AE, offset: 0xD0C8D, size: 0x8, addend: 0x0, symName: '-[NSCMTLView present]', symObjAddr: 0x1B4, symBinAddr: 0x5274, symSize: 0xD8 } + - { offsetInCU: 0x2E1, offset: 0xD0CC0, size: 0x8, addend: 0x0, symName: '-[NSCMTLView getDevicePtr]', symObjAddr: 0x28C, symBinAddr: 0x534C, symSize: 0x74 } + - { offsetInCU: 0x336, offset: 0xD0D15, size: 0x8, addend: 0x0, symName: '-[NSCMTLView getQueuePtr]', symObjAddr: 0x300, symBinAddr: 0x53C0, symSize: 0xA0 } + - { offsetInCU: 0x37D, offset: 0xD0D5C, size: 0x8, addend: 0x0, symName: '-[NSCMTLView canvas]', symObjAddr: 0x3A0, symBinAddr: 0x5460, symSize: 0x20 } + - { offsetInCU: 0x3B4, offset: 0xD0D93, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setCanvas:]', symObjAddr: 0x3C0, symBinAddr: 0x5480, symSize: 0x14 } + - { offsetInCU: 0x3F5, offset: 0xD0DD4, size: 0x8, addend: 0x0, symName: '-[NSCMTLView queue]', symObjAddr: 0x3D4, symBinAddr: 0x5494, symSize: 0x10 } + - { offsetInCU: 0x42C, offset: 0xD0E0B, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setQueue:]', symObjAddr: 0x3E4, symBinAddr: 0x54A4, symSize: 0xC } + - { offsetInCU: 0x46B, offset: 0xD0E4A, size: 0x8, addend: 0x0, symName: '-[NSCMTLView state]', symObjAddr: 0x3F0, symBinAddr: 0x54B0, symSize: 0x10 } + - { offsetInCU: 0x4A2, offset: 0xD0E81, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setState:]', symObjAddr: 0x400, symBinAddr: 0x54C0, symSize: 0x10 } + - { offsetInCU: 0x4DF, offset: 0xD0EBE, size: 0x8, addend: 0x0, symName: '-[NSCMTLView sampleCount]', symObjAddr: 0x410, symBinAddr: 0x54D0, symSize: 0x10 } + - { offsetInCU: 0x516, offset: 0xD0EF5, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setSampleCount:]', symObjAddr: 0x420, symBinAddr: 0x54E0, symSize: 0x10 } + - { offsetInCU: 0x553, offset: 0xD0F32, size: 0x8, addend: 0x0, symName: '-[NSCMTLView .cxx_destruct]', symObjAddr: 0x430, symBinAddr: 0x54F0, symSize: 0x3C } + - { offsetInCU: 0x3F, offset: 0xD101C, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0x14, symBinAddr: 0x5540, symSize: 0x30 } + - { offsetInCU: 0x53, offset: 0xD1030, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x44, symBinAddr: 0x5570, symSize: 0x4 } + - { offsetInCU: 0x67, offset: 0xD1044, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0x48, symBinAddr: 0x5574, symSize: 0xC } + - { offsetInCU: 0x7B, offset: 0xD1058, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0x54, symBinAddr: 0x5580, symSize: 0x20 } + - { offsetInCU: 0x8F, offset: 0xD106C, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0x74, symBinAddr: 0x55A0, symSize: 0x2C } + - { offsetInCU: 0xA3, offset: 0xD1080, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0xC0, symBinAddr: 0x55E0, symSize: 0xC } + - { offsetInCU: 0xB7, offset: 0xD1094, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0xCC, symBinAddr: 0x55EC, symSize: 0x20 } + - { offsetInCU: 0xCB, offset: 0xD10A8, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0xEC, symBinAddr: 0x560C, symSize: 0x28 } + - { offsetInCU: 0x4F, offset: 0xD1291, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2D30, symBinAddr: 0x116C128, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xD12AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2D38, symBinAddr: 0x116C130, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0xD12DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x4, symBinAddr: 0x56AC, symSize: 0x38 } + - { offsetInCU: 0xF3, offset: 0xD1335, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x40, symBinAddr: 0x56E8, symSize: 0x70 } + - { offsetInCU: 0x144, offset: 0xD1386, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xB4, symBinAddr: 0x575C, symSize: 0x44 } + - { offsetInCU: 0x197, offset: 0xD13D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC22loadImageAssetWithPathySbs5Int64V_SStFZTo', symObjAddr: 0x158, symBinAddr: 0x5800, symSize: 0x74 } + - { offsetInCU: 0x238, offset: 0xD147A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x1D0, symBinAddr: 0x5878, symSize: 0x5C } + - { offsetInCU: 0x29D, offset: 0xD14DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x230, symBinAddr: 0x58D8, symSize: 0x74 } + - { offsetInCU: 0x316, offset: 0xD1558, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x2A8, symBinAddr: 0x5950, symSize: 0xA4 } + - { offsetInCU: 0x373, offset: 0xD15B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZTo', symObjAddr: 0x360, symBinAddr: 0x5A08, symSize: 0x20 } + - { offsetInCU: 0x413, offset: 0xD1655, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZTo', symObjAddr: 0x384, symBinAddr: 0x5A2C, symSize: 0x5C } + - { offsetInCU: 0x470, offset: 0xD16B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AA9NSCCanvasCs6UInt32VAJtFZTo', symObjAddr: 0x44C, symBinAddr: 0x5AF4, symSize: 0x6C } + - { offsetInCU: 0x59C, offset: 0xD17DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17initWebGLWithViewys5Int64VAA9NSCCanvasC_S4bs5Int32VS5bAJtFZTo', symObjAddr: 0x4DC, symBinAddr: 0x5B84, symSize: 0xB0 } + - { offsetInCU: 0x626, offset: 0xD1868, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC27initWebGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHtFZTo', symObjAddr: 0x5E0, symBinAddr: 0x5C88, symSize: 0x50 } + - { offsetInCU: 0x6C9, offset: 0xD190B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x634, symBinAddr: 0x5CDC, symSize: 0x8 } + - { offsetInCU: 0x732, offset: 0xD1974, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x640, symBinAddr: 0x5CE8, symSize: 0x8 } + - { offsetInCU: 0x789, offset: 0xD19CB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24flush2DContextAndSyncCPUyys5Int64VFZTo', symObjAddr: 0x64C, symBinAddr: 0x5CF4, symSize: 0x8 } + - { offsetInCU: 0x7E0, offset: 0xD1A22, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15presentDrawableyys5Int64VFZTo', symObjAddr: 0x658, symBinAddr: 0x5D00, symSize: 0x8 } + - { offsetInCU: 0x837, offset: 0xD1A79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10flushWebGLySbs5Int64VFZTo', symObjAddr: 0x674, symBinAddr: 0x5D1C, symSize: 0x8 } + - { offsetInCU: 0x88E, offset: 0xD1AD0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12releaseWebGLyys5Int64VFZTo', symObjAddr: 0x680, symBinAddr: 0x5D28, symSize: 0x8 } + - { offsetInCU: 0x908, offset: 0xD1B4A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAA9NSCCanvasC_s5Int32VAJSbSfAJSfAJtFZTo', symObjAddr: 0x724, symBinAddr: 0x5DCC, symSize: 0x9C } + - { offsetInCU: 0xA3E, offset: 0xD1C80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20create2DContextMetalys5Int64VAA9NSCCanvasC_SbSfs5Int32VSfAJtFZTo', symObjAddr: 0x7C4, symBinAddr: 0x5E6C, symSize: 0x70 } + - { offsetInCU: 0xA9B, offset: 0xD1CDD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26updateWebGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x838, symBinAddr: 0x5EE0, symSize: 0x14 } + - { offsetInCU: 0xB16, offset: 0xD1D58, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0x9E0, symBinAddr: 0x6088, symSize: 0xA0 } + - { offsetInCU: 0xB67, offset: 0xD1DA9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xCE8, symBinAddr: 0x6390, symSize: 0x98 } + - { offsetInCU: 0xBB8, offset: 0xD1DFA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0x103C, symBinAddr: 0x66E4, symSize: 0x98 } + - { offsetInCU: 0xC14, offset: 0xD1E56, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1464, symBinAddr: 0x6B0C, symSize: 0xD8 } + - { offsetInCU: 0xC5C, offset: 0xD1E9E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1540, symBinAddr: 0x6BE8, symSize: 0x34 } + - { offsetInCU: 0xCBC, offset: 0xD1EFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x15C4, symBinAddr: 0x6C6C, symSize: 0x3C } + - { offsetInCU: 0xD0D, offset: 0xD1F4F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1634, symBinAddr: 0x6CDC, symSize: 0x298 } + - { offsetInCU: 0xF6D, offset: 0xD21AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x18CC, symBinAddr: 0x6F74, symSize: 0x1E0 } + - { offsetInCU: 0x1167, offset: 0xD23A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1AAC, symBinAddr: 0x7154, symSize: 0xEC } + - { offsetInCU: 0x1264, offset: 0xD24A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1B98, symBinAddr: 0x7240, symSize: 0x144 } + - { offsetInCU: 0x13D9, offset: 0xD261B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1CDC, symBinAddr: 0x7384, symSize: 0x15C } + - { offsetInCU: 0x156E, offset: 0xD27B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x1E38, symBinAddr: 0x74E0, symSize: 0x180 } + - { offsetInCU: 0x1743, offset: 0xD2985, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZTf4nnnnd_n', symObjAddr: 0x1FB8, symBinAddr: 0x7660, symSize: 0x8C } + - { offsetInCU: 0x1837, offset: 0xD2A79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17initWebGLWithViewys5Int64VAA9NSCCanvasC_S4bs5Int32VS5bAJtFZTf4nnnnnnnnnnnnd_n', symObjAddr: 0x2044, symBinAddr: 0x76EC, symSize: 0xE4 } + - { offsetInCU: 0x1997, offset: 0xD2BD9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20create2DContextMetalys5Int64VAA9NSCCanvasC_SbSfs5Int32VSfAJtFZTf4nnnnnnd_n', symObjAddr: 0x2128, symBinAddr: 0x77D0, symSize: 0xE0 } + - { offsetInCU: 0x1B45, offset: 0xD2D87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x2208, symBinAddr: 0x78B0, symSize: 0x1B4 } + - { offsetInCU: 0x1C0F, offset: 0xD2E51, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x2560, symBinAddr: 0x7C08, symSize: 0x1D4 } + - { offsetInCU: 0x1CF0, offset: 0xD2F32, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x2734, symBinAddr: 0x7DDC, symSize: 0x114 } + - { offsetInCU: 0x1EAF, offset: 0xD30F1, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0xA80, symBinAddr: 0x6128, symSize: 0x78 } + - { offsetInCU: 0x1EC7, offset: 0xD3109, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xD80, symBinAddr: 0x6428, symSize: 0x54 } + - { offsetInCU: 0x1F34, offset: 0xD3176, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1630, symBinAddr: 0x6CD8, symSize: 0x4 } + - { offsetInCU: 0x1FCA, offset: 0xD320C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2848, symBinAddr: 0x7EF0, symSize: 0x20 } + - { offsetInCU: 0x1FDE, offset: 0xD3220, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x288C, symBinAddr: 0x7F34, symSize: 0x8 } + - { offsetInCU: 0x1FFD, offset: 0xD323F, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x2894, symBinAddr: 0x7F3C, symSize: 0x18 } + - { offsetInCU: 0x2026, offset: 0xD3268, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x28AC, symBinAddr: 0x7F54, symSize: 0x8 } + - { offsetInCU: 0x203A, offset: 0xD327C, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x28B4, symBinAddr: 0x7F5C, symSize: 0x3C } + - { offsetInCU: 0x204E, offset: 0xD3290, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x2934, symBinAddr: 0x7FDC, symSize: 0x34 } + - { offsetInCU: 0x2062, offset: 0xD32A4, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2968, symBinAddr: 0x8010, symSize: 0x10 } + - { offsetInCU: 0x2076, offset: 0xD32B8, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2978, symBinAddr: 0x8020, symSize: 0x8 } + - { offsetInCU: 0x208A, offset: 0xD32CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x29A4, symBinAddr: 0x804C, symSize: 0x40 } + - { offsetInCU: 0x20BE, offset: 0xD3300, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2A28, symBinAddr: 0x80D0, symSize: 0x40 } + - { offsetInCU: 0x20FC, offset: 0xD333E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2A68, symBinAddr: 0x8110, symSize: 0x28 } + - { offsetInCU: 0x2130, offset: 0xD3372, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2AE8, symBinAddr: 0x8190, symSize: 0x3C } + - { offsetInCU: 0x2164, offset: 0xD33A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2B50, symBinAddr: 0x81F8, symSize: 0x30 } + - { offsetInCU: 0x21A0, offset: 0xD33E2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2BBC, symBinAddr: 0x8264, symSize: 0x10 } + - { offsetInCU: 0x21B4, offset: 0xD33F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2BCC, symBinAddr: 0x8274, symSize: 0x40 } + - { offsetInCU: 0x26A6, offset: 0xD38E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x56A8, symSize: 0x4 } + - { offsetInCU: 0x26C1, offset: 0xD3903, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x3C, symBinAddr: 0x56E4, symSize: 0x4 } + - { offsetInCU: 0x26DC, offset: 0xD391E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xB0, symBinAddr: 0x5758, symSize: 0x4 } + - { offsetInCU: 0x26FE, offset: 0xD3940, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC22loadImageAssetWithPathySbs5Int64V_SStFZ', symObjAddr: 0xF8, symBinAddr: 0x57A0, symSize: 0x60 } + - { offsetInCU: 0x27C6, offset: 0xD3A08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x1CC, symBinAddr: 0x5874, symSize: 0x4 } + - { offsetInCU: 0x27E1, offset: 0xD3A23, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x22C, symBinAddr: 0x58D4, symSize: 0x4 } + - { offsetInCU: 0x27FC, offset: 0xD3A3E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x2A4, symBinAddr: 0x594C, symSize: 0x4 } + - { offsetInCU: 0x2830, offset: 0xD3A72, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZ', symObjAddr: 0x34C, symBinAddr: 0x59F4, symSize: 0x14 } + - { offsetInCU: 0x2870, offset: 0xD3AB2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZ', symObjAddr: 0x34C, symBinAddr: 0x59F4, symSize: 0x14 } + - { offsetInCU: 0x28D4, offset: 0xD3B16, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZ', symObjAddr: 0x380, symBinAddr: 0x5A28, symSize: 0x4 } + - { offsetInCU: 0x2942, offset: 0xD3B84, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AA9NSCCanvasCs6UInt32VAJtFZ', symObjAddr: 0x3E0, symBinAddr: 0x5A88, symSize: 0x6C } + - { offsetInCU: 0x2A49, offset: 0xD3C8B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17initWebGLWithViewys5Int64VAA9NSCCanvasC_S4bs5Int32VS5bAJtFZ', symObjAddr: 0x4B8, symBinAddr: 0x5B60, symSize: 0x24 } + - { offsetInCU: 0x2A64, offset: 0xD3CA6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC27initWebGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHtFZ', symObjAddr: 0x58C, symBinAddr: 0x5C34, symSize: 0x54 } + - { offsetInCU: 0x2BC0, offset: 0xD3E02, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x630, symBinAddr: 0x5CD8, symSize: 0x4 } + - { offsetInCU: 0x2C32, offset: 0xD3E74, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x63C, symBinAddr: 0x5CE4, symSize: 0x4 } + - { offsetInCU: 0x2C75, offset: 0xD3EB7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24flush2DContextAndSyncCPUyys5Int64VFZ', symObjAddr: 0x648, symBinAddr: 0x5CF0, symSize: 0x4 } + - { offsetInCU: 0x2CB8, offset: 0xD3EFA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15presentDrawableyys5Int64VFZ', symObjAddr: 0x654, symBinAddr: 0x5CFC, symSize: 0x4 } + - { offsetInCU: 0x2CFB, offset: 0xD3F3D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10flushWebGLySbs5Int64VFZ', symObjAddr: 0x660, symBinAddr: 0x5D08, symSize: 0x14 } + - { offsetInCU: 0x2D40, offset: 0xD3F82, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12releaseWebGLyys5Int64VFZ', symObjAddr: 0x67C, symBinAddr: 0x5D24, symSize: 0x4 } + - { offsetInCU: 0x2DDF, offset: 0xD4021, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAA9NSCCanvasC_s5Int32VAJSbSfAJSfAJtFZ', symObjAddr: 0x688, symBinAddr: 0x5D30, symSize: 0x9C } + - { offsetInCU: 0x2F40, offset: 0xD4182, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20create2DContextMetalys5Int64VAA9NSCCanvasC_SbSfs5Int32VSfAJtFZ', symObjAddr: 0x7C0, symBinAddr: 0x5E68, symSize: 0x4 } + - { offsetInCU: 0x2F5B, offset: 0xD419D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26updateWebGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x834, symBinAddr: 0x5EDC, symSize: 0x4 } + - { offsetInCU: 0x2FE6, offset: 0xD4228, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x84C, symBinAddr: 0x5EF4, symSize: 0x4 } + - { offsetInCU: 0x2FFA, offset: 0xD423C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x850, symBinAddr: 0x5EF8, symSize: 0x190 } + - { offsetInCU: 0x309A, offset: 0xD42DC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0xAF8, symBinAddr: 0x61A0, symSize: 0x2C } + - { offsetInCU: 0x30AE, offset: 0xD42F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0xB24, symBinAddr: 0x61CC, symSize: 0x1C4 } + - { offsetInCU: 0x3192, offset: 0xD43D4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xDD4, symBinAddr: 0x647C, symSize: 0x2C } + - { offsetInCU: 0x31A6, offset: 0xD43E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xE00, symBinAddr: 0x64A8, symSize: 0x23C } + - { offsetInCU: 0x325A, offset: 0xD449C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0x10D4, symBinAddr: 0x677C, symSize: 0x4 } + - { offsetInCU: 0x326E, offset: 0xD44B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0x10D8, symBinAddr: 0x6780, symSize: 0x38C } + - { offsetInCU: 0x3505, offset: 0xD4747, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x153C, symBinAddr: 0x6BE4, symSize: 0x4 } + - { offsetInCU: 0x3520, offset: 0xD4762, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x1574, symBinAddr: 0x6C1C, symSize: 0x20 } + - { offsetInCU: 0x3534, offset: 0xD4776, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x1594, symBinAddr: 0x6C3C, symSize: 0x30 } + - { offsetInCU: 0x356A, offset: 0xD47AC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x1600, symBinAddr: 0x6CA8, symSize: 0x30 } + - { offsetInCU: 0x99, offset: 0xD4A8B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSYAASY8rawValuexSg03RawG0Qz_tcfCTW', symObjAddr: 0x1A4, symBinAddr: 0x8540, symSize: 0x30 } + - { offsetInCU: 0xCB, offset: 0xD4ABD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSYAASY8rawValue03RawG0QzvgTW', symObjAddr: 0x1D4, symBinAddr: 0x8570, symSize: 0x44 } + - { offsetInCU: 0xF8, offset: 0xD4AEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValueAESgs6UInt32V_tcfCTf4nd_n', symObjAddr: 0xB68, symBinAddr: 0x8F04, symSize: 0x94 } + - { offsetInCU: 0x376, offset: 0xD4D68, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfcTo', symObjAddr: 0xAFC, symBinAddr: 0x8E98, symSize: 0x2C } + - { offsetInCU: 0x3F3, offset: 0xD4DE5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC10initValues33_A4E23F85F6FCD1159823157DE55F7C54LL2ts11pixelBufferAC0cD6FormatOs5Int64V_So11CVBufferRefatKFZTf4dnd_n', symObjAddr: 0xC1C, symBinAddr: 0x8FB8, symSize: 0x150 } + - { offsetInCU: 0x49F, offset: 0xD4E91, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11pixelBufferSo11CVBufferRefavpACTk', symObjAddr: 0x218, symBinAddr: 0x85B4, symSize: 0x68 } + - { offsetInCU: 0x510, offset: 0xD4F02, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCfETo', symObjAddr: 0xB58, symBinAddr: 0x8EF4, symSize: 0x10 } + - { offsetInCU: 0x53F, offset: 0xD4F31, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCMa', symObjAddr: 0xBFC, symBinAddr: 0x8F98, symSize: 0x20 } + - { offsetInCU: 0x568, offset: 0xD4F5A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASQWb', symObjAddr: 0xD6C, symBinAddr: 0x9108, symSize: 0x4 } + - { offsetInCU: 0x57C, offset: 0xD4F6E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOAESQAAWl', symObjAddr: 0xD70, symBinAddr: 0x910C, symSize: 0x44 } + - { offsetInCU: 0x590, offset: 0xD4F82, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOMa', symObjAddr: 0x1034, symBinAddr: 0x93D0, symSize: 0x10 } + - { offsetInCU: 0x5A4, offset: 0xD4F96, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0x1044, symBinAddr: 0x93E0, symSize: 0x44 } + - { offsetInCU: 0x5D2, offset: 0xD4FC4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x54, symBinAddr: 0x83F0, symSize: 0xC } + - { offsetInCU: 0x5EE, offset: 0xD4FE0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH9hashValueSivgTW', symObjAddr: 0x60, symBinAddr: 0x83FC, symSize: 0x8 } + - { offsetInCU: 0x674, offset: 0xD5066, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0xD8, symBinAddr: 0x8474, symSize: 0x58 } + - { offsetInCU: 0x6E4, offset: 0xD50D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x130, symBinAddr: 0x84CC, symSize: 0x8 } + - { offsetInCU: 0x909, offset: 0xD52FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValues6UInt32Vvg', symObjAddr: 0x0, symBinAddr: 0x839C, symSize: 0x3C } + - { offsetInCU: 0x92E, offset: 0xD5320, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValueAESgs6UInt32V_tcfC', symObjAddr: 0x3C, symBinAddr: 0x83D8, symSize: 0x18 } + - { offsetInCU: 0x976, offset: 0xD5368, size: 0x8, addend: 0x0, symName: '_$sSYsSHRzSH8RawValueSYRpzrlE04hashB0Sivg12CanvasNative13NSCVideoFrameC0fG6FormatO_Tgq5', symObjAddr: 0x68, symBinAddr: 0x8404, symSize: 0x70 } + - { offsetInCU: 0xA0D, offset: 0xD53FF, size: 0x8, addend: 0x0, symName: '_$sSYsSHRzSH8RawValueSYRpzrlE08_rawHashB04seedS2i_tF12CanvasNative13NSCVideoFrameC0hI6FormatO_Tgq5', symObjAddr: 0x138, symBinAddr: 0x84D4, symSize: 0x6C } + - { offsetInCU: 0xABB, offset: 0xD54AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11pixelBufferSo11CVBufferRefavg', symObjAddr: 0x280, symBinAddr: 0x861C, symSize: 0x44 } + - { offsetInCU: 0xADA, offset: 0xD54CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC9timestamps5Int64Vvg', symObjAddr: 0x2C4, symBinAddr: 0x8660, symSize: 0x44 } + - { offsetInCU: 0xAF9, offset: 0xD54EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6formatAC0cD6FormatOvg', symObjAddr: 0x308, symBinAddr: 0x86A4, symSize: 0x44 } + - { offsetInCU: 0xB59, offset: 0xD554B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC010getCurrentD0yACSgSo8AVPlayerC_So0G15ItemVideoOutputCtKFZ', symObjAddr: 0x34C, symBinAddr: 0x86E8, symSize: 0xE0 } + - { offsetInCU: 0xC04, offset: 0xD55F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11currentTime5frameACSo6CMTimea_So11CVBufferRefatKcfC', symObjAddr: 0x42C, symBinAddr: 0x87C8, symSize: 0x60 } + - { offsetInCU: 0xC3B, offset: 0xD562D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11currentTime5frameACSo6CMTimea_So11CVBufferRefatKcfc', symObjAddr: 0x48C, symBinAddr: 0x8828, symSize: 0x168 } + - { offsetInCU: 0xD36, offset: 0xD5728, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6buffer2tsACSo11CVBufferRefa_s5Int64VtKcfC', symObjAddr: 0x5F4, symBinAddr: 0x8990, symSize: 0xF4 } + - { offsetInCU: 0xD8A, offset: 0xD577C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6buffer2tsACSo11CVBufferRefa_s5Int64VtKcfc', symObjAddr: 0x6E8, symBinAddr: 0x8A84, symSize: 0xF8 } + - { offsetInCU: 0xE0B, offset: 0xD57FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC5cloneACyKF', symObjAddr: 0x7E0, symBinAddr: 0x8B7C, symSize: 0x144 } + - { offsetInCU: 0xEEB, offset: 0xD58DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC9codedRectSo6CGRectVvg', symObjAddr: 0x98C, symBinAddr: 0x8D28, symSize: 0x6C } + - { offsetInCU: 0xFA9, offset: 0xD599B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11visibleRectSo6CGRectVvg', symObjAddr: 0x9F8, symBinAddr: 0x8D94, symSize: 0xB8 } + - { offsetInCU: 0x10EC, offset: 0xD5ADE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfC', symObjAddr: 0xAB0, symBinAddr: 0x8E4C, symSize: 0x20 } + - { offsetInCU: 0x1100, offset: 0xD5AF2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfc', symObjAddr: 0xAD0, symBinAddr: 0x8E6C, symSize: 0x2C } + - { offsetInCU: 0x1159, offset: 0xD5B4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCfD', symObjAddr: 0xB28, symBinAddr: 0x8EC4, symSize: 0x30 } + - { offsetInCU: 0x4F, offset: 0xD5C49, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvpZ', symObjAddr: 0x7288, symBinAddr: 0x116C1B8, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xD5C63, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x7290, symBinAddr: 0x116C1C0, symSize: 0x0 } + - { offsetInCU: 0x83, offset: 0xD5C7D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x7298, symBinAddr: 0x116C1C8, symSize: 0x0 } + - { offsetInCU: 0xE7, offset: 0xD5CE1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSYAASY8rawValuexSg03RawF0Qz_tcfCTW', symObjAddr: 0x464, symBinAddr: 0x9888, symSize: 0x30 } + - { offsetInCU: 0x119, offset: 0xD5D13, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSYAASY8rawValue03RawF0QzvgTW', symObjAddr: 0x494, symBinAddr: 0x98B8, symSize: 0x44 } + - { offsetInCU: 0x146, offset: 0xD5D40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValueAESgs6UInt32V_tcfCTf4nd_n', symObjAddr: 0x5ECC, symBinAddr: 0xF2F0, symSize: 0x64 } + - { offsetInCU: 0x1E3, offset: 0xD5DDD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvgZTo', symObjAddr: 0xF8, symBinAddr: 0x951C, symSize: 0x40 } + - { offsetInCU: 0x231, offset: 0xD5E2B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvsZTo', symObjAddr: 0x17C, symBinAddr: 0x95A0, symSize: 0x44 } + - { offsetInCU: 0x2A4, offset: 0xD5E9E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x200, symBinAddr: 0x9624, symSize: 0x14 } + - { offsetInCU: 0x322, offset: 0xD5F1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH9hashValueSivgTW', symObjAddr: 0x214, symBinAddr: 0x9638, symSize: 0x44 } + - { offsetInCU: 0x405, offset: 0xD5FFF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x258, symBinAddr: 0x967C, symSize: 0x28 } + - { offsetInCU: 0x48E, offset: 0xD6088, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvgTo', symObjAddr: 0x4D8, symBinAddr: 0x98FC, symSize: 0x44 } + - { offsetInCU: 0x4FC, offset: 0xD60F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvsTo', symObjAddr: 0x560, symBinAddr: 0x9984, symSize: 0x6C } + - { offsetInCU: 0x58F, offset: 0xD6189, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvgTo', symObjAddr: 0x698, symBinAddr: 0x9ABC, symSize: 0x44 } + - { offsetInCU: 0x5CC, offset: 0xD61C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvsTo', symObjAddr: 0x720, symBinAddr: 0x9B44, symSize: 0x30 } + - { offsetInCU: 0x687, offset: 0xD6281, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5glPtrSvSgvgTo', symObjAddr: 0xC08, symBinAddr: 0xA02C, symSize: 0x10 } + - { offsetInCU: 0x6A7, offset: 0xD62A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5glPtrSvSgvgTo', symObjAddr: 0xC08, symBinAddr: 0xA02C, symSize: 0x10 } + - { offsetInCU: 0x6DD, offset: 0xD62D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5glPtrSvSgvsTo', symObjAddr: 0xC18, symBinAddr: 0xA03C, symSize: 0x10 } + - { offsetInCU: 0x6FD, offset: 0xD62F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5glPtrSvSgvsTo', symObjAddr: 0xC18, symBinAddr: 0xA03C, symSize: 0x10 } + - { offsetInCU: 0x736, offset: 0xD6330, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0xC28, symBinAddr: 0xA04C, symSize: 0x10 } + - { offsetInCU: 0x756, offset: 0xD6350, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0xC28, symBinAddr: 0xA04C, symSize: 0x10 } + - { offsetInCU: 0x78C, offset: 0xD6386, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0xC38, symBinAddr: 0xA05C, symSize: 0x10 } + - { offsetInCU: 0x7AC, offset: 0xD63A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0xC38, symBinAddr: 0xA05C, symSize: 0x10 } + - { offsetInCU: 0x7E5, offset: 0xD63DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11mtlLayerPtrSvSgvgTo', symObjAddr: 0xC48, symBinAddr: 0xA06C, symSize: 0x10 } + - { offsetInCU: 0x805, offset: 0xD63FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11mtlLayerPtrSvSgvgTo', symObjAddr: 0xC48, symBinAddr: 0xA06C, symSize: 0x10 } + - { offsetInCU: 0x83B, offset: 0xD6435, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11mtlLayerPtrSvSgvsTo', symObjAddr: 0xC58, symBinAddr: 0xA07C, symSize: 0x10 } + - { offsetInCU: 0x85B, offset: 0xD6455, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11mtlLayerPtrSvSgvsTo', symObjAddr: 0xC58, symBinAddr: 0xA07C, symSize: 0x10 } + - { offsetInCU: 0x894, offset: 0xD648E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14getMtlLayerPtrSvyFTo', symObjAddr: 0xD7C, symBinAddr: 0xA1A0, symSize: 0x74 } + - { offsetInCU: 0x941, offset: 0xD653B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0xDF0, symBinAddr: 0xA214, symSize: 0x44 } + - { offsetInCU: 0x97E, offset: 0xD6578, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0xE78, symBinAddr: 0xA29C, symSize: 0x30 } + - { offsetInCU: 0xA0D, offset: 0xD6607, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x10CC, symBinAddr: 0xA4F0, symSize: 0x44 } + - { offsetInCU: 0xA65, offset: 0xD665F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x1154, symBinAddr: 0xA578, symSize: 0x48 } + - { offsetInCU: 0xAC0, offset: 0xD66BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x119C, symBinAddr: 0xA5C0, symSize: 0x44 } + - { offsetInCU: 0xB18, offset: 0xD6712, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x1224, symBinAddr: 0xA648, symSize: 0x48 } + - { offsetInCU: 0xB55, offset: 0xD674F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo10NSCMTLViewCvgTo', symObjAddr: 0x126C, symBinAddr: 0xA690, symSize: 0x10 } + - { offsetInCU: 0xB75, offset: 0xD676F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo10NSCMTLViewCvgTo', symObjAddr: 0x126C, symBinAddr: 0xA690, symSize: 0x10 } + - { offsetInCU: 0xBAD, offset: 0xD67A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo10NSCMTLViewCvsTo', symObjAddr: 0x127C, symBinAddr: 0xA6A0, symSize: 0x34 } + - { offsetInCU: 0xBF0, offset: 0xD67EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x12B0, symBinAddr: 0xA6D4, symSize: 0x10 } + - { offsetInCU: 0xC10, offset: 0xD680A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x12B0, symBinAddr: 0xA6D4, symSize: 0x10 } + - { offsetInCU: 0xC48, offset: 0xD6842, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x12C0, symBinAddr: 0xA6E4, symSize: 0x34 } + - { offsetInCU: 0xC8B, offset: 0xD6885, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidth12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x12F4, symBinAddr: 0xA718, symSize: 0x3C } + - { offsetInCU: 0xCD3, offset: 0xD68CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeight12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x13CC, symBinAddr: 0xA7F0, symSize: 0x3C } + - { offsetInCU: 0xD05, offset: 0xD68FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21drawingBufferWidthRaw12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x14A4, symBinAddr: 0xA8C8, symSize: 0x3C } + - { offsetInCU: 0xD37, offset: 0xD6931, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22drawingBufferHeightRaw12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x152C, symBinAddr: 0xA950, symSize: 0x3C } + - { offsetInCU: 0xD7F, offset: 0xD6979, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0x15B4, symBinAddr: 0xA9D8, symSize: 0x20 } + - { offsetInCU: 0xDE7, offset: 0xD69E1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0x15F8, symBinAddr: 0xAA1C, symSize: 0x20 } + - { offsetInCU: 0xE87, offset: 0xD6A81, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftFTo', symObjAddr: 0x1B74, symBinAddr: 0xAF98, symSize: 0x94 } + - { offsetInCU: 0xEF0, offset: 0xD6AEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x1C2C, symBinAddr: 0xB050, symSize: 0xC4 } + - { offsetInCU: 0xFB8, offset: 0xD6BB2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0x1E40, symBinAddr: 0xB264, symSize: 0x30 } + - { offsetInCU: 0x1038, offset: 0xD6C32, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x2850, symBinAddr: 0xBC74, symSize: 0xC4 } + - { offsetInCU: 0x10A2, offset: 0xD6C9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x29EC, symBinAddr: 0xBE10, symSize: 0xEC } + - { offsetInCU: 0x119E, offset: 0xD6D98, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x2C04, symBinAddr: 0xC028, symSize: 0x3C } + - { offsetInCU: 0x11D1, offset: 0xD6DCB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x2C40, symBinAddr: 0xC064, symSize: 0x10 } + - { offsetInCU: 0x11F1, offset: 0xD6DEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x2C40, symBinAddr: 0xC064, symSize: 0x10 } + - { offsetInCU: 0x122B, offset: 0xD6E25, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x2C50, symBinAddr: 0xC074, symSize: 0x34 } + - { offsetInCU: 0x1286, offset: 0xD6E80, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x2D38, symBinAddr: 0xC15C, symSize: 0x34 } + - { offsetInCU: 0x12BE, offset: 0xD6EB8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x2DAC, symBinAddr: 0xC1D0, symSize: 0x6C } + - { offsetInCU: 0x1320, offset: 0xD6F1A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x2EBC, symBinAddr: 0xC2E0, symSize: 0x6C } + - { offsetInCU: 0x13CC, offset: 0xD6FC6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x3274, symBinAddr: 0xC698, symSize: 0xB0 } + - { offsetInCU: 0x141E, offset: 0xD7018, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x33F4, symBinAddr: 0xC818, symSize: 0x94 } + - { offsetInCU: 0x14AD, offset: 0xD70A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x36E4, symBinAddr: 0xCB08, symSize: 0x3C } + - { offsetInCU: 0x1519, offset: 0xD7113, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x3A24, symBinAddr: 0xCE48, symSize: 0x20 } + - { offsetInCU: 0x1596, offset: 0xD7190, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x3CB0, symBinAddr: 0xD0D4, symSize: 0x44 } + - { offsetInCU: 0x15F0, offset: 0xD71EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x3D38, symBinAddr: 0xD15C, symSize: 0x6C } + - { offsetInCU: 0x1682, offset: 0xD727C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x3F28, symBinAddr: 0xD34C, symSize: 0x20 } + - { offsetInCU: 0x16DC, offset: 0xD72D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x3F48, symBinAddr: 0xD36C, symSize: 0x34 } + - { offsetInCU: 0x173C, offset: 0xD7336, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3FAC, symBinAddr: 0xD3D0, symSize: 0x34 } + - { offsetInCU: 0x17A7, offset: 0xD73A1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivgTo', symObjAddr: 0x3FE0, symBinAddr: 0xD404, symSize: 0x44 } + - { offsetInCU: 0x181D, offset: 0xD7417, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivsTo', symObjAddr: 0x4068, symBinAddr: 0xD48C, symSize: 0xAC } + - { offsetInCU: 0x18F3, offset: 0xD74ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivgTo', symObjAddr: 0x4330, symBinAddr: 0xD754, symSize: 0x44 } + - { offsetInCU: 0x1969, offset: 0xD7563, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivsTo', symObjAddr: 0x43B8, symBinAddr: 0xD7DC, symSize: 0xAC } + - { offsetInCU: 0x1A8D, offset: 0xD7687, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x49EC, symBinAddr: 0xDE10, symSize: 0x40 } + - { offsetInCU: 0x1AC5, offset: 0xD76BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x4A30, symBinAddr: 0xDE54, symSize: 0x8 } + - { offsetInCU: 0x1B1D, offset: 0xD7717, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17context2DPathTestyys5Int64VFTo', symObjAddr: 0x4A3C, symBinAddr: 0xDE60, symSize: 0x8 } + - { offsetInCU: 0x1B75, offset: 0xD776F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14context2DConicyys5Int64VFTo', symObjAddr: 0x4A48, symBinAddr: 0xDE6C, symSize: 0x8 } + - { offsetInCU: 0x1C12, offset: 0xD780C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x5210, symBinAddr: 0xE634, symSize: 0x28 } + - { offsetInCU: 0x1C45, offset: 0xD783F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x5534, symBinAddr: 0xE958, symSize: 0x24 } + - { offsetInCU: 0x1C83, offset: 0xD787D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x562C, symBinAddr: 0xEA50, symSize: 0x14 } + - { offsetInCU: 0x1DAE, offset: 0xD79A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0xAB4, symBinAddr: 0x9ED8, symSize: 0x30 } + - { offsetInCU: 0x1DF3, offset: 0xD79ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xB1C, symBinAddr: 0x9F40, symSize: 0x40 } + - { offsetInCU: 0x1EDD, offset: 0xD7AD7, size: 0x8, addend: 0x0, symName: '_$sSo30UIGraphicsImageRendererContextCIegg_ABIyBy_TR', symObjAddr: 0x1B3C, symBinAddr: 0xAF60, symSize: 0x38 } + - { offsetInCU: 0x1F7F, offset: 0xD7B79, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x2D80, symBinAddr: 0xC1A4, symSize: 0x2C } + - { offsetInCU: 0x1F97, offset: 0xD7B91, size: 0x8, addend: 0x0, symName: '_$s10Foundation12NotificationVIeghn_So14NSNotificationCIeyBhy_TR', symObjAddr: 0x3194, symBinAddr: 0xC5B8, symSize: 0x94 } + - { offsetInCU: 0x1FAF, offset: 0xD7BA9, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x337C, symBinAddr: 0xC7A0, symSize: 0x78 } + - { offsetInCU: 0x1FC7, offset: 0xD7BC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x34E4, symBinAddr: 0xC908, symSize: 0x94 } + - { offsetInCU: 0x1FFF, offset: 0xD7BF9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x3578, symBinAddr: 0xC99C, symSize: 0xB8 } + - { offsetInCU: 0x2041, offset: 0xD7C3B, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x3630, symBinAddr: 0xCA54, symSize: 0x6C } + - { offsetInCU: 0x20B6, offset: 0xD7CB0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivpACTk', symObjAddr: 0x41A4, symBinAddr: 0xD5C8, symSize: 0x94 } + - { offsetInCU: 0x2164, offset: 0xD7D5E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivpACTk', symObjAddr: 0x44E8, symBinAddr: 0xD90C, symSize: 0x88 } + - { offsetInCU: 0x2232, offset: 0xD7E2C, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x51C4, symBinAddr: 0xE5E8, symSize: 0x4C } + - { offsetInCU: 0x224A, offset: 0xD7E44, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x5558, symBinAddr: 0xE97C, symSize: 0xC4 } + - { offsetInCU: 0x2296, offset: 0xD7E90, size: 0x8, addend: 0x0, symName: '_$sSo6UIViewC12CanvasNativeE21getBoundingClientRectyySvFTo', symObjAddr: 0x56E0, symBinAddr: 0xEB04, symSize: 0x30 } + - { offsetInCU: 0x2431, offset: 0xD802B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftFySo30UIGraphicsImageRendererContextCXEfU_TA', symObjAddr: 0x5F40, symBinAddr: 0xF364, symSize: 0xC } + - { offsetInCU: 0x2450, offset: 0xD804A, size: 0x8, addend: 0x0, symName: '_$sSo30UIGraphicsImageRendererContextCIgg_ABIegg_TRTA', symObjAddr: 0x5F5C, symBinAddr: 0xF380, symSize: 0x20 } + - { offsetInCU: 0x2479, offset: 0xD8073, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x5F7C, symBinAddr: 0xF3A0, symSize: 0x10 } + - { offsetInCU: 0x248D, offset: 0xD8087, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x5F8C, symBinAddr: 0xF3B0, symSize: 0x8 } + - { offsetInCU: 0x24A1, offset: 0xD809B, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x5F94, symBinAddr: 0xF3B8, symSize: 0x44 } + - { offsetInCU: 0x24B5, offset: 0xD80AF, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x5FD8, symBinAddr: 0xF3FC, symSize: 0x10 } + - { offsetInCU: 0x24C9, offset: 0xD80C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x5FE8, symBinAddr: 0xF40C, symSize: 0x20 } + - { offsetInCU: 0x24DD, offset: 0xD80D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFySo7NSTimerCYbcfU_TA', symObjAddr: 0x6008, symBinAddr: 0xF42C, symSize: 0x24 } + - { offsetInCU: 0x2530, offset: 0xD812A, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x602C, symBinAddr: 0xF450, symSize: 0x40 } + - { offsetInCU: 0x2544, offset: 0xD813E, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x606C, symBinAddr: 0xF490, symSize: 0x40 } + - { offsetInCU: 0x2558, offset: 0xD8152, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x60AC, symBinAddr: 0xF4D0, symSize: 0x24 } + - { offsetInCU: 0x256C, offset: 0xD8166, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x60D0, symBinAddr: 0xF4F4, symSize: 0x20 } + - { offsetInCU: 0x2580, offset: 0xD817A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASQWb', symObjAddr: 0x60F0, symBinAddr: 0xF514, symSize: 0x4 } + - { offsetInCU: 0x2594, offset: 0xD818E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOAESQAAWl', symObjAddr: 0x60F4, symBinAddr: 0xF518, symSize: 0x44 } + - { offsetInCU: 0x25A8, offset: 0xD81A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOMa', symObjAddr: 0x68D4, symBinAddr: 0xFCF8, symSize: 0x10 } + - { offsetInCU: 0x25BC, offset: 0xD81B6, size: 0x8, addend: 0x0, symName: ___swift_memcpy1_1, symObjAddr: 0x68E4, symBinAddr: 0xFD08, symSize: 0xC } + - { offsetInCU: 0x25D0, offset: 0xD81CA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwet', symObjAddr: 0x68F4, symBinAddr: 0xFD14, symSize: 0x90 } + - { offsetInCU: 0x25E4, offset: 0xD81DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwst', symObjAddr: 0x6984, symBinAddr: 0xFDA4, symSize: 0xBC } + - { offsetInCU: 0x25F8, offset: 0xD81F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwug', symObjAddr: 0x6A40, symBinAddr: 0xFE60, symSize: 0x8 } + - { offsetInCU: 0x260C, offset: 0xD8206, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwup', symObjAddr: 0x6A48, symBinAddr: 0xFE68, symSize: 0x4 } + - { offsetInCU: 0x2620, offset: 0xD821A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwui', symObjAddr: 0x6A4C, symBinAddr: 0xFE6C, symSize: 0x8 } + - { offsetInCU: 0x2634, offset: 0xD822E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOMa', symObjAddr: 0x6A54, symBinAddr: 0xFE74, symSize: 0x10 } + - { offsetInCU: 0x2648, offset: 0xD8242, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASQWb', symObjAddr: 0x6A64, symBinAddr: 0xFE84, symSize: 0x4 } + - { offsetInCU: 0x265C, offset: 0xD8256, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOAESQAAWl', symObjAddr: 0x6A68, symBinAddr: 0xFE88, symSize: 0x44 } + - { offsetInCU: 0x2670, offset: 0xD826A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5setup33_508084857CA7D194CA72FEB80DD78002LLyyFy10Foundation12NotificationVYbcfU_TA', symObjAddr: 0x6AD0, symBinAddr: 0xFEF0, symSize: 0x20 } + - { offsetInCU: 0x2684, offset: 0xD827E, size: 0x8, addend: 0x0, symName: '_$sypSgWOd', symObjAddr: 0x6AF0, symBinAddr: 0xFF10, symSize: 0x48 } + - { offsetInCU: 0x2698, offset: 0xD8292, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5setup33_508084857CA7D194CA72FEB80DD78002LLyyFy10Foundation12NotificationVYbcfU0_TA', symObjAddr: 0x6B38, symBinAddr: 0xFF58, symSize: 0x20 } + - { offsetInCU: 0x26AC, offset: 0xD82A6, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x6B58, symBinAddr: 0xFF78, symSize: 0x10 } + - { offsetInCU: 0x2715, offset: 0xD830F, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x6F38, symBinAddr: 0x10358, symSize: 0x48 } + - { offsetInCU: 0x2749, offset: 0xD8343, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x6F80, symBinAddr: 0x103A0, symSize: 0xC } + - { offsetInCU: 0x2772, offset: 0xD836C, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x6FB0, symBinAddr: 0x103D0, symSize: 0x8 } + - { offsetInCU: 0x2791, offset: 0xD838B, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x6FB8, symBinAddr: 0x103D8, symSize: 0x30 } + - { offsetInCU: 0x27BA, offset: 0xD83B4, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x6FE8, symBinAddr: 0x10408, symSize: 0x10 } + - { offsetInCU: 0x27CE, offset: 0xD83C8, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x7030, symBinAddr: 0x10450, symSize: 0x3C } + - { offsetInCU: 0x27F0, offset: 0xD83EA, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF12CanvasNative9NSCCanvasC0D3FitO_Tgq5', symObjAddr: 0x0, symBinAddr: 0x9424, symSize: 0x5C } + - { offsetInCU: 0x286B, offset: 0xD8465, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF12CanvasNative13NSCVideoFrameC0fG6FormatO_Tgq5', symObjAddr: 0x5C, symBinAddr: 0x9480, symSize: 0x5C } + - { offsetInCU: 0x2943, offset: 0xD853D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x280, symBinAddr: 0x96A4, symSize: 0x40 } + - { offsetInCU: 0x29E5, offset: 0xD85DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x314, symBinAddr: 0x9738, symSize: 0xC } + - { offsetInCU: 0x2A65, offset: 0xD865F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH9hashValueSivgTW', symObjAddr: 0x320, symBinAddr: 0x9744, symSize: 0x78 } + - { offsetInCU: 0x2B11, offset: 0xD870B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x398, symBinAddr: 0x97BC, symSize: 0x58 } + - { offsetInCU: 0x2B81, offset: 0xD877B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x3F0, symBinAddr: 0x9814, symSize: 0x74 } + - { offsetInCU: 0x2E7E, offset: 0xD8A78, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x6B68, symBinAddr: 0xFF88, symSize: 0x110 } + - { offsetInCU: 0x330B, offset: 0xD8F05, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvgZ', symObjAddr: 0xB8, symBinAddr: 0x94DC, symSize: 0x40 } + - { offsetInCU: 0x3345, offset: 0xD8F3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvsZ', symObjAddr: 0x138, symBinAddr: 0x955C, symSize: 0x44 } + - { offsetInCU: 0x338B, offset: 0xD8F85, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvMZ', symObjAddr: 0x1C0, symBinAddr: 0x95E4, symSize: 0x40 } + - { offsetInCU: 0x3416, offset: 0xD9010, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValues6UInt32Vvg', symObjAddr: 0x2C0, symBinAddr: 0x96E4, symSize: 0x3C } + - { offsetInCU: 0x343B, offset: 0xD9035, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValueAESgs6UInt32V_tcfC', symObjAddr: 0x2FC, symBinAddr: 0x9720, symSize: 0x18 } + - { offsetInCU: 0x348B, offset: 0xD9085, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvg', symObjAddr: 0x51C, symBinAddr: 0x9940, symSize: 0x44 } + - { offsetInCU: 0x34DE, offset: 0xD90D8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvs', symObjAddr: 0x5CC, symBinAddr: 0x99F0, symSize: 0x54 } + - { offsetInCU: 0x3524, offset: 0xD911E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM', symObjAddr: 0x620, symBinAddr: 0x9A44, symSize: 0x48 } + - { offsetInCU: 0x3549, offset: 0xD9143, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM.resume.0', symObjAddr: 0x668, symBinAddr: 0x9A8C, symSize: 0x30 } + - { offsetInCU: 0x3592, offset: 0xD918C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvg', symObjAddr: 0x6DC, symBinAddr: 0x9B00, symSize: 0x44 } + - { offsetInCU: 0x35ED, offset: 0xD91E7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvs', symObjAddr: 0x750, symBinAddr: 0x9B74, symSize: 0x188 } + - { offsetInCU: 0x366F, offset: 0xD9269, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvM', symObjAddr: 0x8D8, symBinAddr: 0x9CFC, symSize: 0x58 } + - { offsetInCU: 0x3694, offset: 0xD928E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvM.resume.0', symObjAddr: 0x930, symBinAddr: 0x9D54, symSize: 0x184 } + - { offsetInCU: 0x37A1, offset: 0xD939B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14getMtlLayerPtrSvyF', symObjAddr: 0xD30, symBinAddr: 0xA154, symSize: 0x4C } + - { offsetInCU: 0x384A, offset: 0xD9444, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0xE34, symBinAddr: 0xA258, symSize: 0x44 } + - { offsetInCU: 0x387D, offset: 0xD9477, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0xEA8, symBinAddr: 0xA2CC, symSize: 0xEC } + - { offsetInCU: 0x38C9, offset: 0xD94C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0xF94, symBinAddr: 0xA3B8, symSize: 0x58 } + - { offsetInCU: 0x38EE, offset: 0xD94E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0xFEC, symBinAddr: 0xA410, symSize: 0xE0 } + - { offsetInCU: 0x392F, offset: 0xD9529, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x1110, symBinAddr: 0xA534, symSize: 0x44 } + - { offsetInCU: 0x3987, offset: 0xD9581, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvg', symObjAddr: 0x11E0, symBinAddr: 0xA604, symSize: 0x44 } + - { offsetInCU: 0x3A4D, offset: 0xD9647, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidth12CoreGraphics7CGFloatVvg', symObjAddr: 0x1330, symBinAddr: 0xA754, symSize: 0x9C } + - { offsetInCU: 0x3A90, offset: 0xD968A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeight12CoreGraphics7CGFloatVvg', symObjAddr: 0x1408, symBinAddr: 0xA82C, symSize: 0x9C } + - { offsetInCU: 0x3AD3, offset: 0xD96CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21drawingBufferWidthRaw12CoreGraphics7CGFloatVvg', symObjAddr: 0x14E0, symBinAddr: 0xA904, symSize: 0x4C } + - { offsetInCU: 0x3B14, offset: 0xD970E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22drawingBufferHeightRaw12CoreGraphics7CGFloatVvg', symObjAddr: 0x1568, symBinAddr: 0xA98C, symSize: 0x4C } + - { offsetInCU: 0x3B76, offset: 0xD9770, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0x15D4, symBinAddr: 0xA9F8, symSize: 0x24 } + - { offsetInCU: 0x3BBE, offset: 0xD97B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0x1618, symBinAddr: 0xAA3C, symSize: 0x24 } + - { offsetInCU: 0x3CAB, offset: 0xD98A5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftF', symObjAddr: 0x163C, symBinAddr: 0xAA60, symSize: 0x470 } + - { offsetInCU: 0x4003, offset: 0xD9BFD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftFySo30UIGraphicsImageRendererContextCXEfU_', symObjAddr: 0x1AAC, symBinAddr: 0xAED0, symSize: 0x90 } + - { offsetInCU: 0x403F, offset: 0xD9C39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0x1C08, symBinAddr: 0xB02C, symSize: 0x24 } + - { offsetInCU: 0x41E6, offset: 0xD9DE0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0x1CF0, symBinAddr: 0xB114, symSize: 0x150 } + - { offsetInCU: 0x45AA, offset: 0xDA1A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0x1E70, symBinAddr: 0xB294, symSize: 0x9E0 } + - { offsetInCU: 0x4E43, offset: 0xDAA3D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x2914, symBinAddr: 0xBD38, symSize: 0xD8 } + - { offsetInCU: 0x5034, offset: 0xDAC2E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x2AD8, symBinAddr: 0xBEFC, symSize: 0x12C } + - { offsetInCU: 0x51BD, offset: 0xDADB7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x2C84, symBinAddr: 0xC0A8, symSize: 0xB4 } + - { offsetInCU: 0x5318, offset: 0xDAF12, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5setup33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x2F28, symBinAddr: 0xC34C, symSize: 0x26C } + - { offsetInCU: 0x5395, offset: 0xDAF8F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x3324, symBinAddr: 0xC748, symSize: 0x58 } + - { offsetInCU: 0x53E1, offset: 0xDAFDB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x3488, symBinAddr: 0xC8AC, symSize: 0x5C } + - { offsetInCU: 0x540A, offset: 0xDB004, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x369C, symBinAddr: 0xCAC0, symSize: 0x44 } + - { offsetInCU: 0x5430, offset: 0xDB02A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x36E0, symBinAddr: 0xCB04, symSize: 0x4 } + - { offsetInCU: 0x5459, offset: 0xDB053, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x3720, symBinAddr: 0xCB44, symSize: 0x50 } + - { offsetInCU: 0x548E, offset: 0xDB088, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x3770, symBinAddr: 0xCB94, symSize: 0x2B4 } + - { offsetInCU: 0x55ED, offset: 0xDB1E7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14initializeView33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3A44, symBinAddr: 0xCE68, symSize: 0x26C } + - { offsetInCU: 0x5852, offset: 0xDB44C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvg', symObjAddr: 0x3CF4, symBinAddr: 0xD118, symSize: 0x44 } + - { offsetInCU: 0x5893, offset: 0xDB48D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvs', symObjAddr: 0x3DA4, symBinAddr: 0xD1C8, symSize: 0x54 } + - { offsetInCU: 0x58B8, offset: 0xDB4B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3DF8, symBinAddr: 0xD21C, symSize: 0xB8 } + - { offsetInCU: 0x5974, offset: 0xDB56E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvM', symObjAddr: 0x3EB0, symBinAddr: 0xD2D4, symSize: 0x48 } + - { offsetInCU: 0x599A, offset: 0xDB594, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvM.resume.0', symObjAddr: 0x3EF8, symBinAddr: 0xD31C, symSize: 0x30 } + - { offsetInCU: 0x59F8, offset: 0xDB5F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x3F7C, symBinAddr: 0xD3A0, symSize: 0x30 } + - { offsetInCU: 0x5A6A, offset: 0xDB664, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivg', symObjAddr: 0x4024, symBinAddr: 0xD448, symSize: 0x44 } + - { offsetInCU: 0x5AD2, offset: 0xDB6CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivs', symObjAddr: 0x4114, symBinAddr: 0xD538, symSize: 0x90 } + - { offsetInCU: 0x5B6B, offset: 0xDB765, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivM', symObjAddr: 0x4238, symBinAddr: 0xD65C, symSize: 0x6C } + - { offsetInCU: 0x5B91, offset: 0xDB78B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivM.resume.0', symObjAddr: 0x42A4, symBinAddr: 0xD6C8, symSize: 0x8C } + - { offsetInCU: 0x5BB3, offset: 0xDB7AD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivg', symObjAddr: 0x4374, symBinAddr: 0xD798, symSize: 0x44 } + - { offsetInCU: 0x5C16, offset: 0xDB810, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivs', symObjAddr: 0x4464, symBinAddr: 0xD888, symSize: 0x84 } + - { offsetInCU: 0x5CAF, offset: 0xDB8A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivM', symObjAddr: 0x4570, symBinAddr: 0xD994, symSize: 0x6C } + - { offsetInCU: 0x5CD5, offset: 0xDB8CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivM.resume.0', symObjAddr: 0x45DC, symBinAddr: 0xDA00, symSize: 0x80 } + - { offsetInCU: 0x5D6F, offset: 0xDB969, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x465C, symBinAddr: 0xDA80, symSize: 0x24C } + - { offsetInCU: 0x6094, offset: 0xDBC8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x48A8, symBinAddr: 0xDCCC, symSize: 0x144 } + - { offsetInCU: 0x61F0, offset: 0xDBDEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x4A2C, symBinAddr: 0xDE50, symSize: 0x4 } + - { offsetInCU: 0x6235, offset: 0xDBE2F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17context2DPathTestyys5Int64VF', symObjAddr: 0x4A38, symBinAddr: 0xDE5C, symSize: 0x4 } + - { offsetInCU: 0x627A, offset: 0xDBE74, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14context2DConicyys5Int64VF', symObjAddr: 0x4A44, symBinAddr: 0xDE68, symSize: 0x4 } + - { offsetInCU: 0x62C6, offset: 0xDBEC0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12scaleSurface33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x4A50, symBinAddr: 0xDE74, symSize: 0x5C0 } + - { offsetInCU: 0x660E, offset: 0xDC208, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x5024, symBinAddr: 0xE448, symSize: 0x1A0 } + - { offsetInCU: 0x6729, offset: 0xDC323, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x5238, symBinAddr: 0xE65C, symSize: 0x2FC } + - { offsetInCU: 0x679A, offset: 0xDC394, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x561C, symBinAddr: 0xEA40, symSize: 0x10 } + - { offsetInCU: 0x6800, offset: 0xDC3FA, size: 0x8, addend: 0x0, symName: '_$sSo6UIViewC12CanvasNativeE21getBoundingClientRectyySvF', symObjAddr: 0x5640, symBinAddr: 0xEA64, symSize: 0xA0 } + - { offsetInCU: 0x693B, offset: 0xDC535, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x5710, symBinAddr: 0xEB34, symSize: 0x64 } + - { offsetInCU: 0x6995, offset: 0xDC58F, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x5774, symBinAddr: 0xEB98, symSize: 0x6C } + - { offsetInCU: 0x6A15, offset: 0xDC60F, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x57E0, symBinAddr: 0xEC04, symSize: 0xD8 } + - { offsetInCU: 0x6A52, offset: 0xDC64C, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x58B8, symBinAddr: 0xECDC, symSize: 0xE0 } + - { offsetInCU: 0x6ACD, offset: 0xDC6C7, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x5998, symBinAddr: 0xEDBC, symSize: 0x1F4 } + - { offsetInCU: 0x6B89, offset: 0xDC783, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x5B8C, symBinAddr: 0xEFB0, symSize: 0x340 } + - { offsetInCU: 0x6CB5, offset: 0xDC8AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTf4gn_n', symObjAddr: 0x6C78, symBinAddr: 0x10098, symSize: 0x29C } + - { offsetInCU: 0x27, offset: 0xDCA3D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0x1051C, symSize: 0x10 } + - { offsetInCU: 0x62, offset: 0xDCA78, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x10, symBinAddr: 0x1052C, symSize: 0x20 } + - { offsetInCU: 0x1AF, offset: 0xDCBC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0x1051C, symSize: 0x10 } + - { offsetInCU: 0x27, offset: 0xDCC16, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTo', symObjAddr: 0x0, symBinAddr: 0x1054C, symSize: 0x44 } + - { offsetInCU: 0x7D, offset: 0xDCC6C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTo', symObjAddr: 0x0, symBinAddr: 0x1054C, symSize: 0x44 } + - { offsetInCU: 0xDB, offset: 0xDCCCA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0xB4, symBinAddr: 0x10600, symSize: 0x3C } + - { offsetInCU: 0x12C, offset: 0xDCD1B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTf4nnndddd_n', symObjAddr: 0x120, symBinAddr: 0x1066C, symSize: 0x148 } + - { offsetInCU: 0x22C, offset: 0xDCE1B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x94, symBinAddr: 0x105E0, symSize: 0x20 } + - { offsetInCU: 0x3ED, offset: 0xDCFDC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x44, symBinAddr: 0x10590, symSize: 0x20 } + - { offsetInCU: 0x401, offset: 0xDCFF0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x64, symBinAddr: 0x105B0, symSize: 0x30 } + - { offsetInCU: 0x437, offset: 0xDD026, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xF0, symBinAddr: 0x1063C, symSize: 0x30 } + - { offsetInCU: 0xD1, offset: 0xDD16A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0xFC4, symBinAddr: 0x11750, symSize: 0x68 } + - { offsetInCU: 0x161, offset: 0xDD1FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0x1038, symBinAddr: 0x117C4, symSize: 0x10 } + - { offsetInCU: 0x190, offset: 0xDD229, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0x1048, symBinAddr: 0x117D4, symSize: 0x4 } + - { offsetInCU: 0x32D, offset: 0xDD3C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x17CC, symBinAddr: 0x11F58, symSize: 0x2C } + - { offsetInCU: 0x5D4, offset: 0xDD66D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1834, symBinAddr: 0x11FC0, symSize: 0x68 } + - { offsetInCU: 0x603, offset: 0xDD69C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x189C, symBinAddr: 0x12028, symSize: 0x20 } + - { offsetInCU: 0x617, offset: 0xDD6B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x18BC, symBinAddr: 0x12048, symSize: 0x20 } + - { offsetInCU: 0x62B, offset: 0xDD6C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x18DC, symBinAddr: 0x12068, symSize: 0x30 } + - { offsetInCU: 0x63F, offset: 0xDD6D8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x190C, symBinAddr: 0x12098, symSize: 0x8 } + - { offsetInCU: 0x653, offset: 0xDD6EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1914, symBinAddr: 0x120A0, symSize: 0x44 } + - { offsetInCU: 0x667, offset: 0xDD700, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1958, symBinAddr: 0x120E4, symSize: 0x64 } + - { offsetInCU: 0x67B, offset: 0xDD714, size: 0x8, addend: 0x0, symName: ___swift_memcpy33_8, symObjAddr: 0x19BC, symBinAddr: 0x12148, symSize: 0x14 } + - { offsetInCU: 0x68F, offset: 0xDD728, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x19D0, symBinAddr: 0x1215C, symSize: 0x4C } + - { offsetInCU: 0x6A3, offset: 0xDD73C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x1A1C, symBinAddr: 0x121A8, symSize: 0x48 } + - { offsetInCU: 0x6B7, offset: 0xDD750, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1A64, symBinAddr: 0x121F0, symSize: 0x44 } + - { offsetInCU: 0x6CB, offset: 0xDD764, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1AA8, symBinAddr: 0x12234, symSize: 0x10 } + - { offsetInCU: 0x6DF, offset: 0xDD778, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1AB8, symBinAddr: 0x12244, symSize: 0x48 } + - { offsetInCU: 0x6F3, offset: 0xDD78C, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1BC4, symBinAddr: 0x1228C, symSize: 0x58 } + - { offsetInCU: 0x707, offset: 0xDD7A0, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1C1C, symBinAddr: 0x122E4, symSize: 0x8 } + - { offsetInCU: 0x71B, offset: 0xDD7B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVWOs', symObjAddr: 0x1C5C, symBinAddr: 0x12324, symSize: 0x28 } + - { offsetInCU: 0x74F, offset: 0xDD7E8, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x1C98, symBinAddr: 0x12360, symSize: 0x10 } + - { offsetInCU: 0xCE3, offset: 0xDDD7C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0x107B4, symSize: 0x534 } + - { offsetInCU: 0xF7A, offset: 0xDE013, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x540, symBinAddr: 0x10CF4, symSize: 0xE0 } + - { offsetInCU: 0xFF9, offset: 0xDE092, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x6E4, symBinAddr: 0x10E84, symSize: 0xB8 } + - { offsetInCU: 0x108C, offset: 0xDE125, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0xEBC, symBinAddr: 0x11648, symSize: 0x108 } + - { offsetInCU: 0x11D6, offset: 0xDE26F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x13C0, symBinAddr: 0x11B4C, symSize: 0x40C } + - { offsetInCU: 0x18EC, offset: 0xDE985, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1C84, symBinAddr: 0x1234C, symSize: 0x14 } + - { offsetInCU: 0x198B, offset: 0xDEA24, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x1CA8, symBinAddr: 0x12370, symSize: 0x1DC } + - { offsetInCU: 0x27, offset: 0xDEC01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0x1254C, symSize: 0x2C } + - { offsetInCU: 0x4B, offset: 0xDEC25, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2D8, symBinAddr: 0x116C448, symSize: 0x0 } + - { offsetInCU: 0x65, offset: 0xDEC3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0x1254C, symSize: 0x2C } + - { offsetInCU: 0x98, offset: 0xDEC72, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x178, symBinAddr: 0x126C4, symSize: 0x40 } + - { offsetInCU: 0x104, offset: 0xDECDE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x228, symBinAddr: 0x12774, symSize: 0x3C } + - { offsetInCU: 0x156, offset: 0xDED30, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x2C, symBinAddr: 0x12578, symSize: 0x10C } + - { offsetInCU: 0x181, offset: 0xDED5B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x208, symBinAddr: 0x12754, symSize: 0x20 } + - { offsetInCU: 0x195, offset: 0xDED6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x294, symBinAddr: 0x127E0, symSize: 0x4 } + - { offsetInCU: 0x1C0, offset: 0xDED9A, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x298, symBinAddr: 0x127E4, symSize: 0x3C } + - { offsetInCU: 0x348, offset: 0xDEF22, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x138, symBinAddr: 0x12684, symSize: 0x40 } + - { offsetInCU: 0x388, offset: 0xDEF62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x1B8, symBinAddr: 0x12704, symSize: 0x20 } + - { offsetInCU: 0x39C, offset: 0xDEF76, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1D8, symBinAddr: 0x12724, symSize: 0x30 } + - { offsetInCU: 0x3D8, offset: 0xDEFB2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x264, symBinAddr: 0x127B0, symSize: 0x30 } + - { offsetInCU: 0x2B, offset: 0xDF000, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0x12820, symSize: 0xA4 } + - { offsetInCU: 0x66, offset: 0xDF03B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZTo', symObjAddr: 0xA4, symBinAddr: 0x128C4, symSize: 0xA4 } + - { offsetInCU: 0xF9, offset: 0xDF0CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheH0a_AFSo012CFDictionaryH0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D8, symBinAddr: 0x129F8, symSize: 0x110 } + - { offsetInCU: 0x1A2, offset: 0xDF177, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x30C, symBinAddr: 0x12B2C, symSize: 0x28 } + - { offsetInCU: 0x21D, offset: 0xDF1F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZTo', symObjAddr: 0x338, symBinAddr: 0x12B58, symSize: 0x64 } + - { offsetInCU: 0x296, offset: 0xDF26B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x494, symBinAddr: 0x12CB4, symSize: 0x15C } + - { offsetInCU: 0x32B, offset: 0xDF300, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfcTo', symObjAddr: 0x640, symBinAddr: 0x12E60, symSize: 0x3C } + - { offsetInCU: 0x37C, offset: 0xDF351, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZTf4nnndddd_n', symObjAddr: 0x6AC, symBinAddr: 0x12ECC, symSize: 0x18C } + - { offsetInCU: 0x4C0, offset: 0xDF495, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC7getFile33_086607F85A042F2B265C7E71FFB9771CLLyS2SKFZTf4nd_g', symObjAddr: 0x838, symBinAddr: 0x13058, symSize: 0x2E4 } + - { offsetInCU: 0x58F, offset: 0xDF564, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCMa', symObjAddr: 0xB1C, symBinAddr: 0x1333C, symSize: 0x20 } + - { offsetInCU: 0x5A3, offset: 0xDF578, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwCP', symObjAddr: 0xB3C, symBinAddr: 0x1335C, symSize: 0x2C } + - { offsetInCU: 0x5B7, offset: 0xDF58C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwxx', symObjAddr: 0xB68, symBinAddr: 0x13388, symSize: 0x8 } + - { offsetInCU: 0x5CB, offset: 0xDF5A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwca', symObjAddr: 0xB70, symBinAddr: 0x13390, symSize: 0x40 } + - { offsetInCU: 0x5DF, offset: 0xDF5B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwta', symObjAddr: 0xBBC, symBinAddr: 0x133D0, symSize: 0x30 } + - { offsetInCU: 0x5F3, offset: 0xDF5C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwet', symObjAddr: 0xBEC, symBinAddr: 0x13400, symSize: 0x48 } + - { offsetInCU: 0x607, offset: 0xDF5DC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwst', symObjAddr: 0xC34, symBinAddr: 0x13448, symSize: 0x3C } + - { offsetInCU: 0x61B, offset: 0xDF5F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwug', symObjAddr: 0xC70, symBinAddr: 0x13484, symSize: 0x8 } + - { offsetInCU: 0x62F, offset: 0xDF604, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwup', symObjAddr: 0xC78, symBinAddr: 0x1348C, symSize: 0x4 } + - { offsetInCU: 0x643, offset: 0xDF618, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwui', symObjAddr: 0xC7C, symBinAddr: 0x13490, symSize: 0x4 } + - { offsetInCU: 0x657, offset: 0xDF62C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOMa', symObjAddr: 0xC80, symBinAddr: 0x13494, symSize: 0x10 } + - { offsetInCU: 0x6DF, offset: 0xDF6B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x39C, symBinAddr: 0x12BBC, symSize: 0x4 } + - { offsetInCU: 0x6FB, offset: 0xDF6D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3A0, symBinAddr: 0x12BC0, symSize: 0x4 } + - { offsetInCU: 0x717, offset: 0xDF6EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3A4, symBinAddr: 0x12BC4, symSize: 0x4 } + - { offsetInCU: 0x733, offset: 0xDF708, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x3A8, symBinAddr: 0x12BC8, symSize: 0x4 } + - { offsetInCU: 0xA01, offset: 0xDF9D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0x12820, symSize: 0xA4 } + - { offsetInCU: 0xA97, offset: 0xDFA6C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheH0a_AFSo012CFDictionaryH0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x148, symBinAddr: 0x12968, symSize: 0x90 } + - { offsetInCU: 0xC34, offset: 0xDFC09, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2E8, symBinAddr: 0x12B08, symSize: 0x24 } + - { offsetInCU: 0xC7E, offset: 0xDFC53, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZ', symObjAddr: 0x334, symBinAddr: 0x12B54, symSize: 0x4 } + - { offsetInCU: 0xCA0, offset: 0xDFC75, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x3AC, symBinAddr: 0x12BCC, symSize: 0xE8 } + - { offsetInCU: 0xD50, offset: 0xDFD25, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfC', symObjAddr: 0x5F0, symBinAddr: 0x12E10, symSize: 0x20 } + - { offsetInCU: 0xD64, offset: 0xDFD39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfc', symObjAddr: 0x610, symBinAddr: 0x12E30, symSize: 0x30 } + - { offsetInCU: 0xD9A, offset: 0xDFD6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCfD', symObjAddr: 0x67C, symBinAddr: 0x12E9C, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0xDFE5A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x134A8, symSize: 0x4 } + - { offsetInCU: 0x71, offset: 0xDFEA4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x4, symBinAddr: 0x134AC, symSize: 0x70 } + - { offsetInCU: 0xF6, offset: 0xDFF29, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x78, symBinAddr: 0x13520, symSize: 0x5C } + - { offsetInCU: 0x191, offset: 0xDFFC4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xD8, symBinAddr: 0x13580, symSize: 0x74 } + - { offsetInCU: 0x254, offset: 0xE0087, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x150, symBinAddr: 0x135F8, symSize: 0xA4 } + - { offsetInCU: 0x323, offset: 0xE0156, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x244, symBinAddr: 0x136EC, symSize: 0x3C } + - { offsetInCU: 0x375, offset: 0xE01A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x2B0, symBinAddr: 0x13758, symSize: 0x20 } + - { offsetInCU: 0x4E5, offset: 0xE0318, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x134A8, symSize: 0x4 } + - { offsetInCU: 0x51D, offset: 0xE0350, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x134A8, symSize: 0x4 } + - { offsetInCU: 0x582, offset: 0xE03B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0x1351C, symSize: 0x4 } + - { offsetInCU: 0x5C2, offset: 0xE03F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x74, symBinAddr: 0x1351C, symSize: 0x4 } + - { offsetInCU: 0x624, offset: 0xE0457, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xD4, symBinAddr: 0x1357C, symSize: 0x4 } + - { offsetInCU: 0x676, offset: 0xE04A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xD4, symBinAddr: 0x1357C, symSize: 0x4 } + - { offsetInCU: 0x6EB, offset: 0xE051E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x14C, symBinAddr: 0x135F4, symSize: 0x4 } + - { offsetInCU: 0x761, offset: 0xE0594, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x14C, symBinAddr: 0x135F4, symSize: 0x4 } + - { offsetInCU: 0x7FF, offset: 0xE0632, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x1F4, symBinAddr: 0x1369C, symSize: 0x20 } + - { offsetInCU: 0x813, offset: 0xE0646, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x214, symBinAddr: 0x136BC, symSize: 0x30 } + - { offsetInCU: 0x84F, offset: 0xE0682, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x280, symBinAddr: 0x13728, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0xE06E0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x13778, symSize: 0x14 } + - { offsetInCU: 0xA9, offset: 0xE0762, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x14, symBinAddr: 0x1378C, symSize: 0x38 } + - { offsetInCU: 0x1A2, offset: 0xE085B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x68, symBinAddr: 0x137E0, symSize: 0x40 } + - { offsetInCU: 0x284, offset: 0xE093D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x118, symBinAddr: 0x13890, symSize: 0x3C } + - { offsetInCU: 0x2D6, offset: 0xE098F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0xF8, symBinAddr: 0x13870, symSize: 0x20 } + - { offsetInCU: 0x480, offset: 0xE0B39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x13778, symSize: 0x14 } + - { offsetInCU: 0x5C4, offset: 0xE0C7D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x4C, symBinAddr: 0x137C4, symSize: 0x1C } + - { offsetInCU: 0x6FA, offset: 0xE0DB3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0xA8, symBinAddr: 0x13820, symSize: 0x20 } + - { offsetInCU: 0x70E, offset: 0xE0DC7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0xC8, symBinAddr: 0x13840, symSize: 0x30 } + - { offsetInCU: 0x744, offset: 0xE0DFD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x154, symBinAddr: 0x138CC, symSize: 0x30 } + - { offsetInCU: 0x61, offset: 0xE0E81, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0x13900, symSize: 0x10 } + - { offsetInCU: 0x81, offset: 0xE0EA1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x4, symBinAddr: 0x13900, symSize: 0x10 } + - { offsetInCU: 0xB7, offset: 0xE0ED7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0x13910, symSize: 0x10 } + - { offsetInCU: 0xD7, offset: 0xE0EF7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x14, symBinAddr: 0x13910, symSize: 0x10 } + - { offsetInCU: 0x110, offset: 0xE0F30, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x24, symBinAddr: 0x13920, symSize: 0x48 } + - { offsetInCU: 0x168, offset: 0xE0F88, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xB4, symBinAddr: 0x139B0, symSize: 0x50 } + - { offsetInCU: 0x1C3, offset: 0xE0FE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0x13A00, symSize: 0x10 } + - { offsetInCU: 0x1E3, offset: 0xE1003, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x104, symBinAddr: 0x13A00, symSize: 0x10 } + - { offsetInCU: 0x219, offset: 0xE1039, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0x13A10, symSize: 0x10 } + - { offsetInCU: 0x239, offset: 0xE1059, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x114, symBinAddr: 0x13A10, symSize: 0x10 } + - { offsetInCU: 0x272, offset: 0xE1092, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1B0, symBinAddr: 0x13AAC, symSize: 0x78 } + - { offsetInCU: 0x2C8, offset: 0xE10E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2D4, symBinAddr: 0x13BD0, symSize: 0xB0 } + - { offsetInCU: 0x32A, offset: 0xE114A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x43C, symBinAddr: 0x13D38, symSize: 0x28 } + - { offsetInCU: 0x35C, offset: 0xE117C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x4E0, symBinAddr: 0x13D60, symSize: 0xA0 } + - { offsetInCU: 0x3DD, offset: 0xE11FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x5BC, symBinAddr: 0x13E00, symSize: 0x60 } + - { offsetInCU: 0x44F, offset: 0xE126F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x620, symBinAddr: 0x13E64, symSize: 0x4 } + - { offsetInCU: 0x4AB, offset: 0xE12CB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x6C4, symBinAddr: 0x13F08, symSize: 0x34 } + - { offsetInCU: 0x509, offset: 0xE1329, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x190, symBinAddr: 0x13A8C, symSize: 0x20 } + - { offsetInCU: 0x533, offset: 0xE1353, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x704, symBinAddr: 0x13F48, symSize: 0x10 } + - { offsetInCU: 0x631, offset: 0xE1451, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0x9C0, symBinAddr: 0x14204, symSize: 0x74 } + - { offsetInCU: 0x66F, offset: 0xE148F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA34, symBinAddr: 0x14278, symSize: 0x10 } + - { offsetInCU: 0x68F, offset: 0xE14AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xA34, symBinAddr: 0x14278, symSize: 0x10 } + - { offsetInCU: 0x6C5, offset: 0xE14E5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA44, symBinAddr: 0x14288, symSize: 0x10 } + - { offsetInCU: 0x6E5, offset: 0xE1505, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xA44, symBinAddr: 0x14288, symSize: 0x10 } + - { offsetInCU: 0x71E, offset: 0xE153E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xA54, symBinAddr: 0x14298, symSize: 0x20 } + - { offsetInCU: 0x776, offset: 0xE1596, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xA74, symBinAddr: 0x142B8, symSize: 0x14 } + - { offsetInCU: 0x7D1, offset: 0xE15F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xA88, symBinAddr: 0x142CC, symSize: 0x44 } + - { offsetInCU: 0x829, offset: 0xE1649, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xB10, symBinAddr: 0x14354, symSize: 0x48 } + - { offsetInCU: 0x8BE, offset: 0xE16DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xC74, symBinAddr: 0x144B8, symSize: 0x78 } + - { offsetInCU: 0x914, offset: 0xE1734, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xDEC, symBinAddr: 0x14630, symSize: 0xB0 } + - { offsetInCU: 0x976, offset: 0xE1796, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0xF48, symBinAddr: 0x1478C, symSize: 0x28 } + - { offsetInCU: 0x9A8, offset: 0xE17C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0xF70, symBinAddr: 0x147B4, symSize: 0xB8 } + - { offsetInCU: 0xA29, offset: 0xE1849, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x102C, symBinAddr: 0x1486C, symSize: 0x28 } + - { offsetInCU: 0xA87, offset: 0xE18A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x1090, symBinAddr: 0x148D0, symSize: 0x10 } + - { offsetInCU: 0xC5E, offset: 0xE1A7E, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgmq5', symObjAddr: 0x1298, symBinAddr: 0x14AD8, symSize: 0x64 } + - { offsetInCU: 0xCAF, offset: 0xE1ACF, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x141C, symBinAddr: 0x14C5C, symSize: 0x44 } + - { offsetInCU: 0xCC3, offset: 0xE1AE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x14A4, symBinAddr: 0x14CA0, symSize: 0x20 } + - { offsetInCU: 0xD9D, offset: 0xE1BBD, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x12FC, symBinAddr: 0x14B3C, symSize: 0x110 } + - { offsetInCU: 0x1048, offset: 0xE1E68, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x6C, symBinAddr: 0x13968, symSize: 0x48 } + - { offsetInCU: 0x10C5, offset: 0xE1EE5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x124, symBinAddr: 0x13A20, symSize: 0x6C } + - { offsetInCU: 0x110C, offset: 0xE1F2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x228, symBinAddr: 0x13B24, symSize: 0xAC } + - { offsetInCU: 0x1170, offset: 0xE1F90, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x384, symBinAddr: 0x13C80, symSize: 0xB8 } + - { offsetInCU: 0x11FB, offset: 0xE201B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x61C, symBinAddr: 0x13E60, symSize: 0x4 } + - { offsetInCU: 0x123A, offset: 0xE205A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x624, symBinAddr: 0x13E68, symSize: 0x74 } + - { offsetInCU: 0x124E, offset: 0xE206E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x698, symBinAddr: 0x13EDC, symSize: 0x2C } + - { offsetInCU: 0x1367, offset: 0xE2187, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x714, symBinAddr: 0x13F58, symSize: 0x2AC } + - { offsetInCU: 0x1711, offset: 0xE2531, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xACC, symBinAddr: 0x14310, symSize: 0x44 } + - { offsetInCU: 0x1750, offset: 0xE2570, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xB58, symBinAddr: 0x1439C, symSize: 0x48 } + - { offsetInCU: 0x1775, offset: 0xE2595, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xBA0, symBinAddr: 0x143E4, symSize: 0x44 } + - { offsetInCU: 0x179A, offset: 0xE25BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xBE4, symBinAddr: 0x14428, symSize: 0x4 } + - { offsetInCU: 0x17C1, offset: 0xE25E1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xBE8, symBinAddr: 0x1442C, symSize: 0x20 } + - { offsetInCU: 0x17D5, offset: 0xE25F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xC08, symBinAddr: 0x1444C, symSize: 0x6C } + - { offsetInCU: 0x181C, offset: 0xE263C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xD40, symBinAddr: 0x14584, symSize: 0xAC } + - { offsetInCU: 0x187B, offset: 0xE269B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0xE9C, symBinAddr: 0x146E0, symSize: 0xAC } + - { offsetInCU: 0x1920, offset: 0xE2740, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x10A0, symBinAddr: 0x148E0, symSize: 0x110 } + - { offsetInCU: 0x1A4F, offset: 0xE286F, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x11B0, symBinAddr: 0x149F0, symSize: 0xE8 } + - { offsetInCU: 0x1B97, offset: 0xE29B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x14C4, symBinAddr: 0x14CC0, symSize: 0x360 } + - { offsetInCU: 0x2B, offset: 0xE2DBB, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x1520C, symSize: 0x2C } + - { offsetInCU: 0x4F, offset: 0xE2DDF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0xF80, symBinAddr: 0x116C588, symSize: 0x0 } + - { offsetInCU: 0x5D, offset: 0xE2DED, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x1520C, symSize: 0x2C } + - { offsetInCU: 0x75, offset: 0xE2E05, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x2C, symBinAddr: 0x15238, symSize: 0x10C } + - { offsetInCU: 0xBC, offset: 0xE2E4C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x13C, symBinAddr: 0x15348, symSize: 0x44 } + - { offsetInCU: 0x132, offset: 0xE2EC2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3AC, symBinAddr: 0x155B8, symSize: 0x80 } + - { offsetInCU: 0x185, offset: 0xE2F15, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC21loadImageFromPathSyncySbs5Int64V_SStFZTo', symObjAddr: 0x48C, symBinAddr: 0x15698, symSize: 0x74 } + - { offsetInCU: 0x243, offset: 0xE2FD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZTo', symObjAddr: 0x760, symBinAddr: 0x1596C, symSize: 0x90 } + - { offsetInCU: 0x2A2, offset: 0xE3032, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x840, symBinAddr: 0x15A4C, symSize: 0x3C } + - { offsetInCU: 0x2F3, offset: 0xE3083, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x8B0, symBinAddr: 0x15ABC, symSize: 0x1DC } + - { offsetInCU: 0x379, offset: 0xE3109, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZTf4nnnd_n', symObjAddr: 0xA8C, symBinAddr: 0x15C98, symSize: 0x1EC } + - { offsetInCU: 0x400, offset: 0xE3190, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x8AC, symBinAddr: 0x15AB8, symSize: 0x4 } + - { offsetInCU: 0x43C, offset: 0xE31CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0xC78, symBinAddr: 0x15E84, symSize: 0x20 } + - { offsetInCU: 0x45B, offset: 0xE31EB, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0xCBC, symBinAddr: 0x15EC8, symSize: 0x14 } + - { offsetInCU: 0x484, offset: 0xE3214, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZyyYbcfU_TA', symObjAddr: 0xCFC, symBinAddr: 0x15F08, symSize: 0x10 } + - { offsetInCU: 0x498, offset: 0xE3228, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0xD0C, symBinAddr: 0x15F18, symSize: 0x10 } + - { offsetInCU: 0x4AC, offset: 0xE323C, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0xD1C, symBinAddr: 0x15F28, symSize: 0x8 } + - { offsetInCU: 0x4C0, offset: 0xE3250, size: 0x8, addend: 0x0, symName: '_$s8Dispatch0A13WorkItemFlagsVACs10SetAlgebraAAWl', symObjAddr: 0xD24, symBinAddr: 0x15F30, symSize: 0x48 } + - { offsetInCU: 0x4D4, offset: 0xE3264, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGSayxGSTsWl', symObjAddr: 0xDAC, symBinAddr: 0x15F78, symSize: 0x4C } + - { offsetInCU: 0x4E8, offset: 0xE3278, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledNameAbstract, symObjAddr: 0xDF8, symBinAddr: 0x15FC4, symSize: 0x44 } + - { offsetInCU: 0x4FC, offset: 0xE328C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0xEC8, symBinAddr: 0x16058, symSize: 0xC } + - { offsetInCU: 0x510, offset: 0xE32A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0xED4, symBinAddr: 0x16064, symSize: 0x24 } + - { offsetInCU: 0x544, offset: 0xE32D4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0xEF8, symBinAddr: 0x16088, symSize: 0x24 } + - { offsetInCU: 0x716, offset: 0xE34A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x15344, symSize: 0x4 } + - { offsetInCU: 0x744, offset: 0xE34D4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x138, symBinAddr: 0x15344, symSize: 0x4 } + - { offsetInCU: 0x7A3, offset: 0xE3533, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x180, symBinAddr: 0x1538C, symSize: 0x4 } + - { offsetInCU: 0x7B7, offset: 0xE3547, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x184, symBinAddr: 0x15390, symSize: 0x228 } + - { offsetInCU: 0x8EE, offset: 0xE367E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC21loadImageFromPathSyncySbs5Int64V_SStFZ', symObjAddr: 0x42C, symBinAddr: 0x15638, symSize: 0x60 } + - { offsetInCU: 0x9A4, offset: 0xE3734, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZ', symObjAddr: 0x500, symBinAddr: 0x1570C, symSize: 0x4 } + - { offsetInCU: 0x9B8, offset: 0xE3748, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZyyYbcfU_', symObjAddr: 0x504, symBinAddr: 0x15710, symSize: 0x25C } + - { offsetInCU: 0xA87, offset: 0xE3817, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x7F0, symBinAddr: 0x159FC, symSize: 0x20 } + - { offsetInCU: 0xA9B, offset: 0xE382B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x810, symBinAddr: 0x15A1C, symSize: 0x30 } + - { offsetInCU: 0xAD1, offset: 0xE3861, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x87C, symBinAddr: 0x15A88, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0xE3907, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x160F0, symSize: 0x20 } + - { offsetInCU: 0x77, offset: 0xE3957, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x16160, symSize: 0x3C } + - { offsetInCU: 0xC9, offset: 0xE39A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x16140, symSize: 0x20 } + - { offsetInCU: 0x214, offset: 0xE3AF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x160F0, symSize: 0x20 } + - { offsetInCU: 0x228, offset: 0xE3B08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x16110, symSize: 0x30 } + - { offsetInCU: 0x264, offset: 0xE3B44, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xAC, symBinAddr: 0x1619C, symSize: 0x30 } + - { offsetInCU: 0x26, offset: 0xE3B8D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x318564, symSize: 0x26E4 } + - { offsetInCU: 0x40, offset: 0xE3BA7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0x9EA8, symBinAddr: 0xA2D438, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0xE3BF9, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0xFEA8, symBinAddr: 0xA33438, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0xE3C5D, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0xFED0, symBinAddr: 0xA33460, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0xE3C73, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x102D8, symBinAddr: 0xA33868, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0xE3C8A, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0xFF18, symBinAddr: 0xA334A8, symSize: 0x0 } + - { offsetInCU: 0xE22, offset: 0xE4989, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x318564, symSize: 0x26E4 } + - { offsetInCU: 0x4BAD, offset: 0xE8714, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0x9A24, symBinAddr: 0x321F88, symSize: 0x210 } + - { offsetInCU: 0x4E0E, offset: 0xE8975, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x4E24, symBinAddr: 0x31D388, symSize: 0x1B8 } + - { offsetInCU: 0x5399, offset: 0xE8F00, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x26E4, symBinAddr: 0x31AC48, symSize: 0x5A8 } + - { offsetInCU: 0x5EE1, offset: 0xE9A48, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x2C8C, symBinAddr: 0x31B1F0, symSize: 0x674 } + - { offsetInCU: 0x6290, offset: 0xE9DF7, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x3300, symBinAddr: 0x31B864, symSize: 0x1F0 } + - { offsetInCU: 0x67A5, offset: 0xEA30C, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x34F0, symBinAddr: 0x31BA54, symSize: 0x7A8 } + - { offsetInCU: 0x75B2, offset: 0xEB119, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x3C98, symBinAddr: 0x31C1FC, symSize: 0x614 } + - { offsetInCU: 0x7F41, offset: 0xEBAA8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x42AC, symBinAddr: 0x31C810, symSize: 0xB78 } + - { offsetInCU: 0x9472, offset: 0xECFD9, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x50D0, symBinAddr: 0x31D634, symSize: 0x23CC } + - { offsetInCU: 0xC9D7, offset: 0xF053E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x4FDC, symBinAddr: 0x31D540, symSize: 0xF4 } + - { offsetInCU: 0xCBD2, offset: 0xF0739, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0x749C, symBinAddr: 0x31FA00, symSize: 0x30 } + - { offsetInCU: 0xCCC3, offset: 0xF082A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0x74CC, symBinAddr: 0x31FA30, symSize: 0x58 } + - { offsetInCU: 0xCD38, offset: 0xF089F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x31FA88, symSize: 0x4 } + - { offsetInCU: 0xCD80, offset: 0xF08E7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x31FA88, symSize: 0x4 } + - { offsetInCU: 0xCDAF, offset: 0xF0916, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0x7524, symBinAddr: 0x31FA88, symSize: 0x4 } + - { offsetInCU: 0xCDD3, offset: 0xF093A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0x7528, symBinAddr: 0x31FA8C, symSize: 0x8C } + - { offsetInCU: 0xCF26, offset: 0xF0A8D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0x31FB18, symSize: 0x4 } + - { offsetInCU: 0xCF5F, offset: 0xF0AC6, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0x75B4, symBinAddr: 0x31FB18, symSize: 0x4 } + - { offsetInCU: 0xD1F8, offset: 0xF0D5F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0x75B8, symBinAddr: 0x31FB1C, symSize: 0x1870 } + - { offsetInCU: 0xF966, offset: 0xF34CD, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0x9C34, symBinAddr: 0x322198, symSize: 0x200 } + - { offsetInCU: 0xFECD, offset: 0xF3A34, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0x8E28, symBinAddr: 0x32138C, symSize: 0x20 } + - { offsetInCU: 0x1036A, offset: 0xF3ED1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0x8E48, symBinAddr: 0x3213AC, symSize: 0xBDC } + - { offsetInCU: 0x26, offset: 0xF4C5E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x322398, symSize: 0x1E0 } + - { offsetInCU: 0x1D2, offset: 0xF4E0A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x322398, symSize: 0x1E0 } + - { offsetInCU: 0x26, offset: 0xF50A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x322578, symSize: 0x3C } + - { offsetInCU: 0x34, offset: 0xF50B3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x322578, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xF51C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3225B4, symSize: 0x90 } + - { offsetInCU: 0x34, offset: 0xF51D1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3225B4, symSize: 0x90 } + - { offsetInCU: 0x86, offset: 0xF5334, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x1080, symBinAddr: 0xA33930, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0xF5366, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1010, symBinAddr: 0xA338C0, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0xF5388, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x1040, symBinAddr: 0xA338F0, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0xF539E, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x1070, symBinAddr: 0xA33920, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0xF5665, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x322644, symSize: 0x18 } + - { offsetInCU: 0x3FB, offset: 0xF56A9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x100, symBinAddr: 0x322644, symSize: 0x18 } + - { offsetInCU: 0x594, offset: 0xF5842, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x1F8, symBinAddr: 0x32265C, symSize: 0x18 } + - { offsetInCU: 0x63F, offset: 0xF58ED, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x290, symBinAddr: 0x322674, symSize: 0x300 } + - { offsetInCU: 0x10C0, offset: 0xF636E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x590, symBinAddr: 0x322974, symSize: 0xAC } + - { offsetInCU: 0x13B6, offset: 0xF6664, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x63C, symBinAddr: 0x322A20, symSize: 0x4D0 } + - { offsetInCU: 0x24CA, offset: 0xF7778, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xB0C, symBinAddr: 0x322EF0, symSize: 0x28C } + - { offsetInCU: 0x2B3F, offset: 0xF7DED, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0xD98, symBinAddr: 0x32317C, symSize: 0xF4 } + - { offsetInCU: 0x2D4A, offset: 0xF7FF8, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0xE8C, symBinAddr: 0x323270, symSize: 0x168 } + - { offsetInCU: 0x26, offset: 0xF831B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3233D8, symSize: 0x38 } + - { offsetInCU: 0xFA, offset: 0xF83EF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3233D8, symSize: 0x38 } + - { offsetInCU: 0x12C, offset: 0xF8421, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3233D8, symSize: 0x38 } + - { offsetInCU: 0x199, offset: 0xF848E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x323410, symSize: 0x3C } + - { offsetInCU: 0x1F3, offset: 0xF84E8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x38, symBinAddr: 0x323410, symSize: 0x3C } + - { offsetInCU: 0x31B, offset: 0xF8610, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0x74, symBinAddr: 0x32344C, symSize: 0x5C } + - { offsetInCU: 0x517, offset: 0xF880C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0xD0, symBinAddr: 0x3234A8, symSize: 0x1C } + - { offsetInCU: 0x636, offset: 0xF892B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0xEC, symBinAddr: 0x3234C4, symSize: 0x54 } + - { offsetInCU: 0x6D0, offset: 0xF89C5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x140, symBinAddr: 0x323518, symSize: 0x4C } + - { offsetInCU: 0x8A8, offset: 0xF8B9D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x323564, symSize: 0xA8 } + - { offsetInCU: 0x90C, offset: 0xF8C01, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x18C, symBinAddr: 0x323564, symSize: 0xA8 } + - { offsetInCU: 0xBA6, offset: 0xF8E9B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x234, symBinAddr: 0x32360C, symSize: 0x124 } + - { offsetInCU: 0xEC3, offset: 0xF91B8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0x323730, symSize: 0xC8 } + - { offsetInCU: 0xF43, offset: 0xF9238, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x358, symBinAddr: 0x323730, symSize: 0xC8 } + - { offsetInCU: 0x10B0, offset: 0xF93A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x420, symBinAddr: 0x3237F8, symSize: 0x180 } + - { offsetInCU: 0x134C, offset: 0xF9641, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_select_512_32, symObjAddr: 0x5A0, symBinAddr: 0x323978, symSize: 0x16C } + - { offsetInCU: 0x14BB, offset: 0xF97B0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0x70C, symBinAddr: 0x323AE4, symSize: 0x18 } + - { offsetInCU: 0x1522, offset: 0xF9817, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0x724, symBinAddr: 0x323AFC, symSize: 0xC } + - { offsetInCU: 0x155B, offset: 0xF9850, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0x730, symBinAddr: 0x323B08, symSize: 0x8 } + - { offsetInCU: 0x15DF, offset: 0xF98D4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0x738, symBinAddr: 0x323B10, symSize: 0x3C } + - { offsetInCU: 0x26, offset: 0xF9A81, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x323B4C, symSize: 0x140 } + - { offsetInCU: 0x34, offset: 0xF9A8F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x323B4C, symSize: 0x140 } + - { offsetInCU: 0x34, offset: 0xF9B95, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_armcap_P, symObjAddr: 0x388, symBinAddr: 0x1173AC8, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0xF9BD7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x323C8C, symSize: 0x35C } + - { offsetInCU: 0x76, offset: 0xF9C27, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xA34000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0xF9CAB, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xA59000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0xF9F0C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x323C8C, symSize: 0x35C } + - { offsetInCU: 0xC70, offset: 0xFA821, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x35C, symBinAddr: 0x323FE8, symSize: 0x1FC } + - { offsetInCU: 0x115F, offset: 0xFAD10, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x558, symBinAddr: 0x3241E4, symSize: 0x1B8 } + - { offsetInCU: 0x10, offset: 0xFB0E5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x3243A0, symSize: 0x1A0 } + - { offsetInCU: 0x50, offset: 0xFB125, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x3243A0, symSize: 0x1A0 } + - { offsetInCU: 0x5E, offset: 0xFB133, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x1A0, symBinAddr: 0x324540, symSize: 0x60 } + - { offsetInCU: 0x81, offset: 0xFB156, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x200, symBinAddr: 0x3245A0, symSize: 0x288 } + - { offsetInCU: 0x10, offset: 0xFB147, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x324830, symSize: 0x130 } + - { offsetInCU: 0x48, offset: 0xFB17F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x324830, symSize: 0x130 } + - { offsetInCU: 0x5F, offset: 0xFB196, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x130, symBinAddr: 0x324960, symSize: 0x70 } + - { offsetInCU: 0x75, offset: 0xFB1AC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x1A0, symBinAddr: 0x3249D0, symSize: 0x160 } + - { offsetInCU: 0x7A, offset: 0xFB1B1, size: 0x8, addend: 0x0, symName: gcm_ghash_v8_4x, symObjAddr: 0x300, symBinAddr: 0x324B30, symSize: 0x378 } + - { offsetInCU: 0x10, offset: 0xFB1BF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x324EC0, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0xFB1F7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x324EC0, symSize: 0x3A0 } + - { offsetInCU: 0x4C, offset: 0xFB1FB, size: 0x8, addend: 0x0, symName: ChaCha20_neon, symObjAddr: 0x3A0, symBinAddr: 0x325260, symSize: 0x6C0 } + - { offsetInCU: 0x66, offset: 0xFB215, size: 0x8, addend: 0x0, symName: ChaCha20_512_neon, symObjAddr: 0xA60, symBinAddr: 0x325920, symSize: 0x1138 } + - { offsetInCU: 0x50, offset: 0xFB261, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x140, symBinAddr: 0x326BC0, symSize: 0x1180 } + - { offsetInCU: 0x66, offset: 0xFB277, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x12C0, symBinAddr: 0x327D40, symSize: 0x1410 } + - { offsetInCU: 0x10, offset: 0xFB26D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x329160, symSize: 0x240 } + - { offsetInCU: 0x45, offset: 0xFB2A2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x329160, symSize: 0x240 } + - { offsetInCU: 0x4D, offset: 0xFB2AA, size: 0x8, addend: 0x0, symName: __bn_sqr8x_mont, symObjAddr: 0x240, symBinAddr: 0x3293A0, symSize: 0x9E0 } + - { offsetInCU: 0x63, offset: 0xFB2C0, size: 0x8, addend: 0x0, symName: __bn_mul4x_mont, symObjAddr: 0xC20, symBinAddr: 0x329D80, symSize: 0x650 } + - { offsetInCU: 0x10, offset: 0xFB2CF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x32A3E0, symSize: 0x40 } + - { offsetInCU: 0x47, offset: 0xFB306, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0x0, symBinAddr: 0x32A3E0, symSize: 0x40 } + - { offsetInCU: 0x5D, offset: 0xFB31C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x40, symBinAddr: 0x32A420, symSize: 0x40 } + - { offsetInCU: 0x76, offset: 0xFB335, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x80, symBinAddr: 0x32A460, symSize: 0x40 } + - { offsetInCU: 0x81, offset: 0xFB340, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_mont, symObjAddr: 0xC0, symBinAddr: 0x32A4A0, symSize: 0x1E0 } + - { offsetInCU: 0x97, offset: 0xFB356, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_mont, symObjAddr: 0x2A0, symBinAddr: 0x32A680, symSize: 0x170 } + - { offsetInCU: 0xAB, offset: 0xFB36A, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_to, symObjAddr: 0x410, symBinAddr: 0x32A7F0, symSize: 0x50 } + - { offsetInCU: 0xC3, offset: 0xFB382, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_from, symObjAddr: 0x460, symBinAddr: 0x32A840, symSize: 0x50 } + - { offsetInCU: 0xD9, offset: 0xFB398, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_morf, symObjAddr: 0x4B0, symBinAddr: 0x32A890, symSize: 0x50 } + - { offsetInCU: 0xEF, offset: 0xFB3AE, size: 0x8, addend: 0x0, symName: __ecp_nistz256_div_by_2, symObjAddr: 0x500, symBinAddr: 0x32A8E0, symSize: 0x60 } + - { offsetInCU: 0x111, offset: 0xFB3D0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x560, symBinAddr: 0x32A940, symSize: 0x1E0 } + - { offsetInCU: 0x124, offset: 0xFB3E3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x740, symBinAddr: 0x32AB20, symSize: 0x360 } + - { offsetInCU: 0x141, offset: 0xFB400, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0xAA0, symBinAddr: 0x32AE80, symSize: 0x2D0 } + - { offsetInCU: 0x156, offset: 0xFB415, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0xD70, symBinAddr: 0x32B150, symSize: 0x2B0 } + - { offsetInCU: 0x170, offset: 0xFB42F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x1020, symBinAddr: 0x32B400, symSize: 0x250 } + - { offsetInCU: 0x184, offset: 0xFB443, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x1270, symBinAddr: 0x32B650, symSize: 0x60 } + - { offsetInCU: 0x19A, offset: 0xFB459, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x12D0, symBinAddr: 0x32B6B0, symSize: 0x44 } + - { offsetInCU: 0x10, offset: 0xFB44F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x32B700, symSize: 0xB90 } + - { offsetInCU: 0x4C, offset: 0xFB48B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_enc_kernel, symObjAddr: 0x0, symBinAddr: 0x32B700, symSize: 0xB90 } + - { offsetInCU: 0x62, offset: 0xFB4A1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_gcm_dec_kernel, symObjAddr: 0xB90, symBinAddr: 0x32C290, symSize: 0xB98 } + - { offsetInCU: 0x10, offset: 0xFB49B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x32CE40, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xFB4DC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x32CE40, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xFB4DC, size: 0x8, addend: 0x0, symName: sha512_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x32DC80, symSize: 0x7E0 } + - { offsetInCU: 0x10, offset: 0xFB4E7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x32E480, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xFB528, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x32E480, symSize: 0xE40 } + - { offsetInCU: 0x51, offset: 0xFB528, size: 0x8, addend: 0x0, symName: sha256_block_armv8, symObjAddr: 0xE40, symBinAddr: 0x32F2C0, symSize: 0x1F0 } ... diff --git a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml index 527ccdb9f..57556f608 100644 --- a/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml +++ b/packages/canvas/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml @@ -2,708 +2,750 @@ triple: 'x86_64-apple-darwin' binary-path: '/Users/triniwiz/Documents/GitHub/canvas/packages/canvas/src-native/canvas-ios/dist/Release-iphonesimulator/CanvasNative.framework/CanvasNative' relocations: - - { offsetInCU: 0x34, offset: 0x7988C, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0xA0E000, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x798C1, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0xA0E038, symSize: 0x0 } - - { offsetInCU: 0x3F, offset: 0x79916, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x30, symBinAddr: 0x25E0, symSize: 0x10 } - - { offsetInCU: 0x53, offset: 0x7992A, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x40, symBinAddr: 0x25F0, symSize: 0x10 } - - { offsetInCU: 0x67, offset: 0x7993E, size: 0x8, addend: 0x0, symName: '_$sSo7CGPointVwet', symObjAddr: 0x50, symBinAddr: 0x2600, symSize: 0x20 } - - { offsetInCU: 0x7B, offset: 0x79952, size: 0x8, addend: 0x0, symName: '_$sSo7CGPointVwst', symObjAddr: 0x70, symBinAddr: 0x2620, symSize: 0x30 } - - { offsetInCU: 0x4F, offset: 0x79B3B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2F70, symBinAddr: 0x1290700, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x79B55, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x2F78, symBinAddr: 0x1290708, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x79B89, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x10, symBinAddr: 0x26B0, symSize: 0x40 } - - { offsetInCU: 0xF3, offset: 0x79BDF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x60, symBinAddr: 0x2700, symSize: 0x60 } - - { offsetInCU: 0x144, offset: 0x79C30, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xD0, symBinAddr: 0x2770, symSize: 0x40 } - - { offsetInCU: 0x197, offset: 0x79C83, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC22loadImageAssetWithPathySbs5Int64V_SStFZTo', symObjAddr: 0x170, symBinAddr: 0x2810, symSize: 0x70 } - - { offsetInCU: 0x24C, offset: 0x79D38, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x1F0, symBinAddr: 0x2890, symSize: 0x60 } - - { offsetInCU: 0x2B1, offset: 0x79D9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x260, symBinAddr: 0x2900, symSize: 0x70 } - - { offsetInCU: 0x32A, offset: 0x79E16, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x2E0, symBinAddr: 0x2980, symSize: 0x90 } - - { offsetInCU: 0x387, offset: 0x79E73, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x380, symBinAddr: 0x2A20, symSize: 0x20 } - - { offsetInCU: 0x409, offset: 0x79EF5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZTo', symObjAddr: 0x3B0, symBinAddr: 0x2A50, symSize: 0x20 } - - { offsetInCU: 0x48B, offset: 0x79F77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AFs6UInt32VAHtFZTo', symObjAddr: 0x3E0, symBinAddr: 0x2A80, symSize: 0x20 } - - { offsetInCU: 0x53A, offset: 0x7A026, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZTo', symObjAddr: 0x470, symBinAddr: 0x2B10, symSize: 0x80 } - - { offsetInCU: 0x5FF, offset: 0x7A0EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZTo', symObjAddr: 0x560, symBinAddr: 0x2C00, symSize: 0x80 } - - { offsetInCU: 0x6CE, offset: 0x7A1BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZTo', symObjAddr: 0x650, symBinAddr: 0x2CF0, symSize: 0x80 } - - { offsetInCU: 0x798, offset: 0x7A284, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZTo', symObjAddr: 0x750, symBinAddr: 0x2DF0, symSize: 0x90 } - - { offsetInCU: 0x830, offset: 0x7A31C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x7F0, symBinAddr: 0x2E90, symSize: 0x10 } - - { offsetInCU: 0x897, offset: 0x7A383, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x810, symBinAddr: 0x2EB0, symSize: 0x10 } - - { offsetInCU: 0x8EE, offset: 0x7A3DA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZTo', symObjAddr: 0x830, symBinAddr: 0x2ED0, symSize: 0x10 } - - { offsetInCU: 0x945, offset: 0x7A431, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZTo', symObjAddr: 0x850, symBinAddr: 0x2EF0, symSize: 0x10 } - - { offsetInCU: 0x99C, offset: 0x7A488, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZTo', symObjAddr: 0x870, symBinAddr: 0x2F10, symSize: 0x10 } - - { offsetInCU: 0x9F3, offset: 0x7A4DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZTo', symObjAddr: 0x890, symBinAddr: 0x2F30, symSize: 0x10 } - - { offsetInCU: 0xA72, offset: 0x7A55E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZTo', symObjAddr: 0x8B0, symBinAddr: 0x2F50, symSize: 0x40 } - - { offsetInCU: 0xB1D, offset: 0x7A609, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x900, symBinAddr: 0x2FA0, symSize: 0x20 } - - { offsetInCU: 0xB90, offset: 0x7A67C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZTo', symObjAddr: 0x930, symBinAddr: 0x2FD0, symSize: 0x10 } - - { offsetInCU: 0xBE7, offset: 0x7A6D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZTo', symObjAddr: 0x9A0, symBinAddr: 0x3040, symSize: 0x70 } - - { offsetInCU: 0xC72, offset: 0x7A75E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0xBB0, symBinAddr: 0x3250, symSize: 0xA0 } - - { offsetInCU: 0xCC3, offset: 0x7A7AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xEB0, symBinAddr: 0x3550, symSize: 0xA0 } - - { offsetInCU: 0xD15, offset: 0x7A801, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0x1210, symBinAddr: 0x38B0, symSize: 0xA0 } - - { offsetInCU: 0xD71, offset: 0x7A85D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1660, symBinAddr: 0x3D00, symSize: 0xD0 } - - { offsetInCU: 0xDB9, offset: 0x7A8A5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1740, symBinAddr: 0x3DE0, symSize: 0x40 } - - { offsetInCU: 0xE19, offset: 0x7A905, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x17D0, symBinAddr: 0x3E70, symSize: 0x30 } - - { offsetInCU: 0xE6C, offset: 0x7A958, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1840, symBinAddr: 0x3EE0, symSize: 0x2C0 } - - { offsetInCU: 0x10CC, offset: 0x7ABB8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x1B00, symBinAddr: 0x41A0, symSize: 0x1C0 } - - { offsetInCU: 0x12C6, offset: 0x7ADB2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1CC0, symBinAddr: 0x4360, symSize: 0xD0 } - - { offsetInCU: 0x13C3, offset: 0x7AEAF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1D90, symBinAddr: 0x4430, symSize: 0x130 } - - { offsetInCU: 0x1538, offset: 0x7B024, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1EC0, symBinAddr: 0x4560, symSize: 0x150 } - - { offsetInCU: 0x16CD, offset: 0x7B1B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x2010, symBinAddr: 0x46B0, symSize: 0x180 } - - { offsetInCU: 0x18B9, offset: 0x7B3A5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x2190, symBinAddr: 0x4830, symSize: 0x1D0 } - - { offsetInCU: 0x1983, offset: 0x7B46F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x2520, symBinAddr: 0x4BC0, symSize: 0x200 } - - { offsetInCU: 0x1A64, offset: 0x7B550, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x2720, symBinAddr: 0x4DC0, symSize: 0x110 } - - { offsetInCU: 0x1B1A, offset: 0x7B606, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0xC50, symBinAddr: 0x32F0, symSize: 0x70 } - - { offsetInCU: 0x1B32, offset: 0x7B61E, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xF50, symBinAddr: 0x35F0, symSize: 0x50 } - - { offsetInCU: 0x1B9F, offset: 0x7B68B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1830, symBinAddr: 0x3ED0, symSize: 0x10 } - - { offsetInCU: 0x1C35, offset: 0x7B721, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2830, symBinAddr: 0x4ED0, symSize: 0x20 } - - { offsetInCU: 0x1C49, offset: 0x7B735, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x2870, symBinAddr: 0x4F10, symSize: 0x10 } - - { offsetInCU: 0x1C68, offset: 0x7B754, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x2880, symBinAddr: 0x4F20, symSize: 0x20 } - - { offsetInCU: 0x1C91, offset: 0x7B77D, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x28A0, symBinAddr: 0x4F40, symSize: 0x10 } - - { offsetInCU: 0x1CA5, offset: 0x7B791, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x28B0, symBinAddr: 0x4F50, symSize: 0x30 } - - { offsetInCU: 0x1CB9, offset: 0x7B7A5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x2930, symBinAddr: 0x4FD0, symSize: 0x40 } - - { offsetInCU: 0x1CCD, offset: 0x7B7B9, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2970, symBinAddr: 0x5010, symSize: 0x20 } - - { offsetInCU: 0x1CE1, offset: 0x7B7CD, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2990, symBinAddr: 0x5030, symSize: 0x10 } - - { offsetInCU: 0x1CF5, offset: 0x7B7E1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x29C0, symBinAddr: 0x5060, symSize: 0x40 } - - { offsetInCU: 0x1D29, offset: 0x7B815, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2A80, symBinAddr: 0x5120, symSize: 0x40 } - - { offsetInCU: 0x1D67, offset: 0x7B853, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2AC0, symBinAddr: 0x5160, symSize: 0x20 } - - { offsetInCU: 0x1D9B, offset: 0x7B887, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2B70, symBinAddr: 0x5210, symSize: 0x40 } - - { offsetInCU: 0x1DCF, offset: 0x7B8BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2BE0, symBinAddr: 0x5280, symSize: 0x30 } - - { offsetInCU: 0x1E0B, offset: 0x7B8F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2C60, symBinAddr: 0x5300, symSize: 0x30 } - - { offsetInCU: 0x1E1F, offset: 0x7B90B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2C90, symBinAddr: 0x5330, symSize: 0x40 } - - { offsetInCU: 0x2335, offset: 0x7BE21, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x26A0, symSize: 0x10 } - - { offsetInCU: 0x2350, offset: 0x7BE3C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x50, symBinAddr: 0x26F0, symSize: 0x10 } - - { offsetInCU: 0x236B, offset: 0x7BE57, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xC0, symBinAddr: 0x2760, symSize: 0x10 } - - { offsetInCU: 0x238D, offset: 0x7BE79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC22loadImageAssetWithPathySbs5Int64V_SStFZ', symObjAddr: 0x110, symBinAddr: 0x27B0, symSize: 0x60 } - - { offsetInCU: 0x2469, offset: 0x7BF55, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x1E0, symBinAddr: 0x2880, symSize: 0x10 } - - { offsetInCU: 0x2484, offset: 0x7BF70, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x250, symBinAddr: 0x28F0, symSize: 0x10 } - - { offsetInCU: 0x249F, offset: 0x7BF8B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x2D0, symBinAddr: 0x2970, symSize: 0x10 } - - { offsetInCU: 0x24BA, offset: 0x7BFA6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x370, symBinAddr: 0x2A10, symSize: 0x10 } - - { offsetInCU: 0x253E, offset: 0x7C02A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AFs6UInt32VAHtFZ', symObjAddr: 0x3A0, symBinAddr: 0x2A40, symSize: 0x10 } - - { offsetInCU: 0x25C3, offset: 0x7C0AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AFs6UInt32VAHtFZ', symObjAddr: 0x3D0, symBinAddr: 0x2A70, symSize: 0x10 } - - { offsetInCU: 0x2642, offset: 0x7C12E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14initGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbtFZ', symObjAddr: 0x400, symBinAddr: 0x2AA0, symSize: 0x70 } - - { offsetInCU: 0x2794, offset: 0x7C280, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20initSharedGLWithViewys5Int64VAF_S4bs5Int32VS5bAHSbAFtFZ', symObjAddr: 0x4F0, symBinAddr: 0x2B90, symSize: 0x70 } - - { offsetInCU: 0x28F2, offset: 0x7C3DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24initGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbtFZ', symObjAddr: 0x5E0, symBinAddr: 0x2C80, symSize: 0x70 } - - { offsetInCU: 0x2A50, offset: 0x7C53C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26initSharedGLWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHSbAFtFZ', symObjAddr: 0x6D0, symBinAddr: 0x2D70, symSize: 0x80 } - - { offsetInCU: 0x2BC4, offset: 0x7C6B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x7E0, symBinAddr: 0x2E80, symSize: 0x10 } - - { offsetInCU: 0x2C34, offset: 0x7C720, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x800, symBinAddr: 0x2EA0, symSize: 0x10 } - - { offsetInCU: 0x2C77, offset: 0x7C763, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC7flushGLySbs5Int64VFZ', symObjAddr: 0x820, symBinAddr: 0x2EC0, symSize: 0x10 } - - { offsetInCU: 0x2CBC, offset: 0x7C7A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9releaseGLyys5Int64VFZ', symObjAddr: 0x840, symBinAddr: 0x2EE0, symSize: 0x10 } - - { offsetInCU: 0x2CFF, offset: 0x7C7EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12getGLPointerys5Int64VAFFZ', symObjAddr: 0x860, symBinAddr: 0x2F00, symSize: 0x10 } - - { offsetInCU: 0x2D42, offset: 0x7C82E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC16releaseGLPointeryys5Int64VFZ', symObjAddr: 0x880, symBinAddr: 0x2F20, symSize: 0x10 } - - { offsetInCU: 0x2D85, offset: 0x7C871, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAF_s5Int32VAHSbSfA2HSfAHtFZ', symObjAddr: 0x8A0, symBinAddr: 0x2F40, symSize: 0x10 } - - { offsetInCU: 0x2E6B, offset: 0x7C957, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23updateGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x8F0, symBinAddr: 0x2F90, symSize: 0x10 } - - { offsetInCU: 0x2EEA, offset: 0x7C9D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC6test2Dyys5Int64VFZ', symObjAddr: 0x920, symBinAddr: 0x2FC0, symSize: 0x10 } - - { offsetInCU: 0x2F2D, offset: 0x7CA19, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13testToDataURLySSs5Int64VFZ', symObjAddr: 0x940, symBinAddr: 0x2FE0, symSize: 0x60 } - - { offsetInCU: 0x2FEE, offset: 0x7CADA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0xA10, symBinAddr: 0x30B0, symSize: 0x10 } - - { offsetInCU: 0x3002, offset: 0x7CAEE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0xA20, symBinAddr: 0x30C0, symSize: 0x190 } - - { offsetInCU: 0x30A2, offset: 0x7CB8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0xCC0, symBinAddr: 0x3360, symSize: 0x30 } - - { offsetInCU: 0x30B6, offset: 0x7CBA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0xCF0, symBinAddr: 0x3390, symSize: 0x1C0 } - - { offsetInCU: 0x31A5, offset: 0x7CC91, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xFA0, symBinAddr: 0x3640, symSize: 0x30 } - - { offsetInCU: 0x31B9, offset: 0x7CCA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xFD0, symBinAddr: 0x3670, symSize: 0x240 } - - { offsetInCU: 0x326D, offset: 0x7CD59, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0x12B0, symBinAddr: 0x3950, symSize: 0x10 } - - { offsetInCU: 0x3281, offset: 0x7CD6D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0x12C0, symBinAddr: 0x3960, symSize: 0x3A0 } - - { offsetInCU: 0x3517, offset: 0x7D003, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1730, symBinAddr: 0x3DD0, symSize: 0x10 } - - { offsetInCU: 0x3532, offset: 0x7D01E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x1780, symBinAddr: 0x3E20, symSize: 0x20 } - - { offsetInCU: 0x3546, offset: 0x7D032, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x17A0, symBinAddr: 0x3E40, symSize: 0x30 } - - { offsetInCU: 0x357C, offset: 0x7D068, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x1800, symBinAddr: 0x3EA0, symSize: 0x30 } - - { offsetInCU: 0x99, offset: 0x7D304, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSYAASY8rawValuexSg03RawG0Qz_tcfCTW', symObjAddr: 0x180, symBinAddr: 0x5780, symSize: 0x20 } - - { offsetInCU: 0xCB, offset: 0x7D336, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSYAASY8rawValue03RawG0QzvgTW', symObjAddr: 0x1A0, symBinAddr: 0x57A0, symSize: 0x40 } - - { offsetInCU: 0xF8, offset: 0x7D363, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValueAESgs6UInt32V_tcfCTf4nd_n', symObjAddr: 0xB20, symBinAddr: 0x6120, symSize: 0x20 } - - { offsetInCU: 0x354, offset: 0x7D5BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfcTo', symObjAddr: 0xAA0, symBinAddr: 0x60A0, symSize: 0x30 } - - { offsetInCU: 0x3D1, offset: 0x7D63C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC10initValues33_A4E23F85F6FCD1159823157DE55F7C54LL2ts11pixelBufferAC0cD6FormatOs5Int64V_So11CVBufferRefatKFZTf4dnd_n', symObjAddr: 0xB60, symBinAddr: 0x6160, symSize: 0x130 } - - { offsetInCU: 0x47D, offset: 0x7D6E8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11pixelBufferSo11CVBufferRefavpACTk', symObjAddr: 0x1E0, symBinAddr: 0x57E0, symSize: 0x60 } - - { offsetInCU: 0x4EC, offset: 0x7D757, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCfETo', symObjAddr: 0xB00, symBinAddr: 0x6100, symSize: 0x20 } - - { offsetInCU: 0x51B, offset: 0x7D786, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCMa', symObjAddr: 0xB40, symBinAddr: 0x6140, symSize: 0x20 } - - { offsetInCU: 0x544, offset: 0x7D7AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASQWb', symObjAddr: 0xC90, symBinAddr: 0x6290, symSize: 0x10 } - - { offsetInCU: 0x558, offset: 0x7D7C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOAESQAAWl', symObjAddr: 0xCA0, symBinAddr: 0x62A0, symSize: 0x30 } - - { offsetInCU: 0x56C, offset: 0x7D7D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOMa', symObjAddr: 0xF70, symBinAddr: 0x6570, symSize: 0x10 } - - { offsetInCU: 0x580, offset: 0x7D7EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0xF80, symBinAddr: 0x6580, symSize: 0x2E } - - { offsetInCU: 0x5AE, offset: 0x7D819, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x50, symBinAddr: 0x5650, symSize: 0x10 } - - { offsetInCU: 0x5CA, offset: 0x7D835, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH9hashValueSivgTW', symObjAddr: 0x60, symBinAddr: 0x5660, symSize: 0x10 } - - { offsetInCU: 0x650, offset: 0x7D8BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0xD0, symBinAddr: 0x56D0, symSize: 0x40 } - - { offsetInCU: 0x6C0, offset: 0x7D92B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x110, symBinAddr: 0x5710, symSize: 0x10 } - - { offsetInCU: 0x8E5, offset: 0x7DB50, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValues6UInt32Vvg', symObjAddr: 0x0, symBinAddr: 0x5600, symSize: 0x40 } - - { offsetInCU: 0x90A, offset: 0x7DB75, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValueAESgs6UInt32V_tcfC', symObjAddr: 0x40, symBinAddr: 0x5640, symSize: 0x10 } - - { offsetInCU: 0x952, offset: 0x7DBBD, size: 0x8, addend: 0x0, symName: '_$sSYsSHRzSH8RawValueSYRpzrlE04hashB0Sivg12CanvasNative13NSCVideoFrameC0fG6FormatO_Tgq5', symObjAddr: 0x70, symBinAddr: 0x5670, symSize: 0x60 } - - { offsetInCU: 0x9E9, offset: 0x7DC54, size: 0x8, addend: 0x0, symName: '_$sSYsSHRzSH8RawValueSYRpzrlE08_rawHashB04seedS2i_tF12CanvasNative13NSCVideoFrameC0hI6FormatO_Tgq5', symObjAddr: 0x120, symBinAddr: 0x5720, symSize: 0x60 } - - { offsetInCU: 0xA97, offset: 0x7DD02, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11pixelBufferSo11CVBufferRefavg', symObjAddr: 0x240, symBinAddr: 0x5840, symSize: 0x40 } - - { offsetInCU: 0xAB4, offset: 0x7DD1F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC9timestamps5Int64Vvg', symObjAddr: 0x280, symBinAddr: 0x5880, symSize: 0x30 } - - { offsetInCU: 0xAD1, offset: 0x7DD3C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6formatAC0cD6FormatOvg', symObjAddr: 0x2B0, symBinAddr: 0x58B0, symSize: 0x30 } - - { offsetInCU: 0xB2F, offset: 0x7DD9A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC010getCurrentD0yACSgSo8AVPlayerC_So0G15ItemVideoOutputCtKFZ', symObjAddr: 0x2E0, symBinAddr: 0x58E0, symSize: 0x100 } - - { offsetInCU: 0xBDA, offset: 0x7DE45, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11currentTime5frameACSo6CMTimea_So11CVBufferRefatKcfC', symObjAddr: 0x3E0, symBinAddr: 0x59E0, symSize: 0x50 } - - { offsetInCU: 0xC11, offset: 0x7DE7C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11currentTime5frameACSo6CMTimea_So11CVBufferRefatKcfc', symObjAddr: 0x430, symBinAddr: 0x5A30, symSize: 0x160 } - - { offsetInCU: 0xD0C, offset: 0x7DF77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6buffer2tsACSo11CVBufferRefa_s5Int64VtKcfC', symObjAddr: 0x590, symBinAddr: 0x5B90, symSize: 0x100 } - - { offsetInCU: 0xD60, offset: 0x7DFCB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6buffer2tsACSo11CVBufferRefa_s5Int64VtKcfc', symObjAddr: 0x690, symBinAddr: 0x5C90, symSize: 0x100 } - - { offsetInCU: 0xDE1, offset: 0x7E04C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC5cloneACyKF', symObjAddr: 0x790, symBinAddr: 0x5D90, symSize: 0x140 } - - { offsetInCU: 0xEC3, offset: 0x7E12E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC9codedRectSo6CGRectVvg', symObjAddr: 0x950, symBinAddr: 0x5F50, symSize: 0x60 } - - { offsetInCU: 0xF88, offset: 0x7E1F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11visibleRectSo6CGRectVvg', symObjAddr: 0x9B0, symBinAddr: 0x5FB0, symSize: 0xA0 } - - { offsetInCU: 0x10E2, offset: 0x7E34D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfC', symObjAddr: 0xA50, symBinAddr: 0x6050, symSize: 0x20 } - - { offsetInCU: 0x10F6, offset: 0x7E361, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfc', symObjAddr: 0xA70, symBinAddr: 0x6070, symSize: 0x30 } - - { offsetInCU: 0x114F, offset: 0x7E3BA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCfD', symObjAddr: 0xAD0, symBinAddr: 0x60D0, symSize: 0x30 } - - { offsetInCU: 0x4F, offset: 0x7E4B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LLSo7GLKViewCvpZ', symObjAddr: 0x5EE0, symBinAddr: 0x1290790, symSize: 0x0 } - - { offsetInCU: 0x69, offset: 0x7E4D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15_shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvpZ', symObjAddr: 0x5EE8, symBinAddr: 0x1290798, symSize: 0x0 } - - { offsetInCU: 0x83, offset: 0x7E4EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x5EF0, symBinAddr: 0x12907A0, symSize: 0x0 } - - { offsetInCU: 0x9D, offset: 0x7E506, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x5EF8, symBinAddr: 0x12907A8, symSize: 0x0 } - - { offsetInCU: 0x101, offset: 0x7E56A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSYAASY8rawValuexSg03RawF0Qz_tcfCTW', symObjAddr: 0x2B0, symBinAddr: 0x6860, symSize: 0x20 } - - { offsetInCU: 0x133, offset: 0x7E59C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSYAASY8rawValue03RawF0QzvgTW', symObjAddr: 0x2D0, symBinAddr: 0x6880, symSize: 0x40 } - - { offsetInCU: 0x160, offset: 0x7E5C9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValueAESgs6UInt32V_tcfCTf4nd_n', symObjAddr: 0x4A50, symBinAddr: 0xB000, symSize: 0x20 } - - { offsetInCU: 0x1FE, offset: 0x7E667, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0xA0, symBinAddr: 0x6650, symSize: 0x10 } - - { offsetInCU: 0x274, offset: 0x7E6DD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH9hashValueSivgTW', symObjAddr: 0xB0, symBinAddr: 0x6660, symSize: 0x40 } - - { offsetInCU: 0x358, offset: 0x7E7C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0xF0, symBinAddr: 0x66A0, symSize: 0x20 } - - { offsetInCU: 0x3E1, offset: 0x7E84A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvgTo', symObjAddr: 0x310, symBinAddr: 0x68C0, symSize: 0x40 } - - { offsetInCU: 0x437, offset: 0x7E8A0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvsTo', symObjAddr: 0x380, symBinAddr: 0x6930, symSize: 0x40 } - - { offsetInCU: 0x4A6, offset: 0x7E90F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvgTo', symObjAddr: 0x5F0, symBinAddr: 0x6BA0, symSize: 0x20 } - - { offsetInCU: 0x4FC, offset: 0x7E965, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3ptrSvSgvsTo', symObjAddr: 0x610, symBinAddr: 0x6BC0, symSize: 0x20 } - - { offsetInCU: 0x555, offset: 0x7E9BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0x630, symBinAddr: 0x6BE0, symSize: 0x20 } - - { offsetInCU: 0x5AB, offset: 0x7EA14, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0x650, symBinAddr: 0x6C00, symSize: 0x20 } - - { offsetInCU: 0x604, offset: 0x7EA6D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0x760, symBinAddr: 0x6D10, symSize: 0x40 } - - { offsetInCU: 0x63F, offset: 0x7EAA8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0x7D0, symBinAddr: 0x6D80, symSize: 0x30 } - - { offsetInCU: 0x6CE, offset: 0x7EB37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvgTo', symObjAddr: 0xA10, symBinAddr: 0x6FC0, symSize: 0x40 } - - { offsetInCU: 0x724, offset: 0x7EB8D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64VvsTo', symObjAddr: 0xA80, symBinAddr: 0x7030, symSize: 0x40 } - - { offsetInCU: 0x77D, offset: 0x7EBE6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0xAC0, symBinAddr: 0x7070, symSize: 0x40 } - - { offsetInCU: 0x7D3, offset: 0x7EC3C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0xB30, symBinAddr: 0x70E0, symSize: 0x40 } - - { offsetInCU: 0x82C, offset: 0x7EC95, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvgTo', symObjAddr: 0xB70, symBinAddr: 0x7120, symSize: 0x20 } - - { offsetInCU: 0x882, offset: 0x7ECEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15native2DContexts5Int64VvsTo', symObjAddr: 0xB90, symBinAddr: 0x7140, symSize: 0x20 } - - { offsetInCU: 0x8DB, offset: 0x7ED44, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0xBB0, symBinAddr: 0x7160, symSize: 0x20 } - - { offsetInCU: 0x931, offset: 0x7ED9A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0xBD0, symBinAddr: 0x7180, symSize: 0x10 } - - { offsetInCU: 0x98A, offset: 0x7EDF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvgTo', symObjAddr: 0xBE0, symBinAddr: 0x7190, symSize: 0x20 } - - { offsetInCU: 0x9E2, offset: 0x7EE4B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo7MTKViewCvsTo', symObjAddr: 0xC00, symBinAddr: 0x71B0, symSize: 0x30 } - - { offsetInCU: 0xA3B, offset: 0x7EEA4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0xC30, symBinAddr: 0x71E0, symSize: 0x20 } - - { offsetInCU: 0xA93, offset: 0x7EEFC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0xC50, symBinAddr: 0x7200, symSize: 0x30 } - - { offsetInCU: 0xAD6, offset: 0x7EF3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidth12CoreGraphics7CGFloatVvgTo', symObjAddr: 0xC80, symBinAddr: 0x7230, symSize: 0x30 } - - { offsetInCU: 0xB1E, offset: 0x7EF87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeight12CoreGraphics7CGFloatVvgTo', symObjAddr: 0xD50, symBinAddr: 0x7300, symSize: 0x30 } - - { offsetInCU: 0xB50, offset: 0x7EFB9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21drawingBufferWidthRaw12CoreGraphics7CGFloatVvgTo', symObjAddr: 0xE20, symBinAddr: 0x73D0, symSize: 0x30 } - - { offsetInCU: 0xB82, offset: 0x7EFEB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22drawingBufferHeightRaw12CoreGraphics7CGFloatVvgTo', symObjAddr: 0xEA0, symBinAddr: 0x7450, symSize: 0x30 } - - { offsetInCU: 0xBCA, offset: 0x7F033, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0xF20, symBinAddr: 0x74D0, symSize: 0x30 } - - { offsetInCU: 0xC32, offset: 0x7F09B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0xF80, symBinAddr: 0x7530, symSize: 0x30 } - - { offsetInCU: 0xCD1, offset: 0x7F13A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0xFF0, symBinAddr: 0x75A0, symSize: 0xD0 } - - { offsetInCU: 0xDC9, offset: 0x7F232, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0x11D0, symBinAddr: 0x7780, symSize: 0x30 } - - { offsetInCU: 0xE5D, offset: 0x7F2C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x1A20, symBinAddr: 0x7FD0, symSize: 0xD0 } - - { offsetInCU: 0xEC7, offset: 0x7F330, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x1DC0, symBinAddr: 0x8370, symSize: 0x90 } - - { offsetInCU: 0xEFF, offset: 0x7F368, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x1F20, symBinAddr: 0x84D0, symSize: 0x40 } - - { offsetInCU: 0xF32, offset: 0x7F39B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x1F60, symBinAddr: 0x8510, symSize: 0x20 } - - { offsetInCU: 0xF8C, offset: 0x7F3F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x1F80, symBinAddr: 0x8530, symSize: 0x30 } - - { offsetInCU: 0xFE7, offset: 0x7F450, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x1FF0, symBinAddr: 0x85A0, symSize: 0x40 } - - { offsetInCU: 0x107D, offset: 0x7F4E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x2070, symBinAddr: 0x8620, symSize: 0x60 } - - { offsetInCU: 0x1142, offset: 0x7F5AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VFTo', symObjAddr: 0x2130, symBinAddr: 0x86E0, symSize: 0xA0 } - - { offsetInCU: 0x11CF, offset: 0x7F638, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x2220, symBinAddr: 0x87D0, symSize: 0x70 } - - { offsetInCU: 0x1231, offset: 0x7F69A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x2330, symBinAddr: 0x88E0, symSize: 0x70 } - - { offsetInCU: 0x128E, offset: 0x7F6F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x23A0, symBinAddr: 0x8950, symSize: 0xB0 } - - { offsetInCU: 0x12DE, offset: 0x7F747, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x2510, symBinAddr: 0x8AC0, symSize: 0x90 } - - { offsetInCU: 0x136B, offset: 0x7F7D4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x2810, symBinAddr: 0x8DC0, symSize: 0x40 } - - { offsetInCU: 0x13D7, offset: 0x7F840, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x2BD0, symBinAddr: 0x9180, symSize: 0x30 } - - { offsetInCU: 0x1454, offset: 0x7F8BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x2EB0, symBinAddr: 0x9460, symSize: 0x40 } - - { offsetInCU: 0x14AC, offset: 0x7F915, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x2F20, symBinAddr: 0x94D0, symSize: 0x60 } - - { offsetInCU: 0x153C, offset: 0x7F9A5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x30C0, symBinAddr: 0x9670, symSize: 0x30 } - - { offsetInCU: 0x1596, offset: 0x7F9FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x30F0, symBinAddr: 0x96A0, symSize: 0x30 } - - { offsetInCU: 0x15F6, offset: 0x7FA5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x3150, symBinAddr: 0x9700, symSize: 0x30 } - - { offsetInCU: 0x1661, offset: 0x7FACA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivgTo', symObjAddr: 0x3180, symBinAddr: 0x9730, symSize: 0x40 } - - { offsetInCU: 0x16D0, offset: 0x7FB39, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivsTo', symObjAddr: 0x31F0, symBinAddr: 0x97A0, symSize: 0xA0 } - - { offsetInCU: 0x179C, offset: 0x7FC05, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivgTo', symObjAddr: 0x3450, symBinAddr: 0x9A00, symSize: 0x40 } - - { offsetInCU: 0x180B, offset: 0x7FC74, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivsTo', symObjAddr: 0x34C0, symBinAddr: 0x9A70, symSize: 0xA0 } - - { offsetInCU: 0x190D, offset: 0x7FD76, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x3A90, symBinAddr: 0xA040, symSize: 0x40 } - - { offsetInCU: 0x1973, offset: 0x7FDDC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x3CA0, symBinAddr: 0xA250, symSize: 0x30 } - - { offsetInCU: 0x19A6, offset: 0x7FE0F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x3FD0, symBinAddr: 0xA580, symSize: 0x20 } - - { offsetInCU: 0x19E4, offset: 0x7FE4D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x40D0, symBinAddr: 0xA680, symSize: 0x20 } - - { offsetInCU: 0x1A2A, offset: 0x7FE93, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14shared_context33_508084857CA7D194CA72FEB80DD78002LLs5Int64VvgZTf4d_n', symObjAddr: 0x5690, symBinAddr: 0xBC30, symSize: 0x2A0 } - - { offsetInCU: 0x1C34, offset: 0x8009D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19shared_context_view33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x440, symBinAddr: 0x69F0, symSize: 0x60 } - - { offsetInCU: 0x1C79, offset: 0x800E2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0x4A0, symBinAddr: 0x6A50, symSize: 0x30 } - - { offsetInCU: 0x1CBE, offset: 0x80127, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0x510, symBinAddr: 0x6AC0, symSize: 0x40 } - - { offsetInCU: 0x1DEB, offset: 0x80254, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x21F0, symBinAddr: 0x87A0, symSize: 0x30 } - - { offsetInCU: 0x1E03, offset: 0x8026C, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x24A0, symBinAddr: 0x8A50, symSize: 0x70 } - - { offsetInCU: 0x1E1B, offset: 0x80284, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x2600, symBinAddr: 0x8BB0, symSize: 0x90 } - - { offsetInCU: 0x1E53, offset: 0x802BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x2690, symBinAddr: 0x8C40, symSize: 0xC0 } - - { offsetInCU: 0x1E93, offset: 0x802FC, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x2750, symBinAddr: 0x8D00, symSize: 0x70 } - - { offsetInCU: 0x1F13, offset: 0x8037C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivpACTk', symObjAddr: 0x3300, symBinAddr: 0x98B0, symSize: 0x80 } - - { offsetInCU: 0x1FBB, offset: 0x80424, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivpACTk', symObjAddr: 0x35D0, symBinAddr: 0x9B80, symSize: 0x70 } - - { offsetInCU: 0x2071, offset: 0x804DA, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x3C50, symBinAddr: 0xA200, symSize: 0x50 } - - { offsetInCU: 0x2089, offset: 0x804F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x3FF0, symBinAddr: 0xA5A0, symSize: 0xC0 } - - { offsetInCU: 0x20D5, offset: 0x8053E, size: 0x8, addend: 0x0, symName: '_$sSo6UIViewC12CanvasNativeE21getBoundingClientRectyySvFTo', symObjAddr: 0x41B0, symBinAddr: 0xA760, symSize: 0x30 } - - { offsetInCU: 0x2270, offset: 0x806D9, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x4A70, symBinAddr: 0xB020, symSize: 0x20 } - - { offsetInCU: 0x2284, offset: 0x806ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x4A90, symBinAddr: 0xB040, symSize: 0x20 } - - { offsetInCU: 0x2298, offset: 0x80701, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFySo7NSTimerCYbcfU_TA', symObjAddr: 0x4AE0, symBinAddr: 0xB090, symSize: 0x30 } - - { offsetInCU: 0x22E9, offset: 0x80752, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x4B10, symBinAddr: 0xB0C0, symSize: 0x20 } - - { offsetInCU: 0x22FD, offset: 0x80766, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x4B30, symBinAddr: 0xB0E0, symSize: 0x10 } - - { offsetInCU: 0x2311, offset: 0x8077A, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x4B40, symBinAddr: 0xB0F0, symSize: 0x40 } - - { offsetInCU: 0x2325, offset: 0x8078E, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x4B80, symBinAddr: 0xB130, symSize: 0x30 } - - { offsetInCU: 0x2339, offset: 0x807A2, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x4BB0, symBinAddr: 0xB160, symSize: 0x30 } - - { offsetInCU: 0x234D, offset: 0x807B6, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x4BE0, symBinAddr: 0xB190, symSize: 0x30 } - - { offsetInCU: 0x2361, offset: 0x807CA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASQWb', symObjAddr: 0x4C10, symBinAddr: 0xB1C0, symSize: 0x10 } - - { offsetInCU: 0x2375, offset: 0x807DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOAESQAAWl', symObjAddr: 0x4C20, symBinAddr: 0xB1D0, symSize: 0x30 } - - { offsetInCU: 0x2389, offset: 0x807F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOMa', symObjAddr: 0x53A0, symBinAddr: 0xB950, symSize: 0x10 } - - { offsetInCU: 0x239D, offset: 0x80806, size: 0x8, addend: 0x0, symName: ___swift_memcpy1_1, symObjAddr: 0x53B0, symBinAddr: 0xB960, symSize: 0x10 } - - { offsetInCU: 0x23B1, offset: 0x8081A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwet', symObjAddr: 0x53D0, symBinAddr: 0xB970, symSize: 0x80 } - - { offsetInCU: 0x23C5, offset: 0x8082E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwst', symObjAddr: 0x5450, symBinAddr: 0xB9F0, symSize: 0xD0 } - - { offsetInCU: 0x23D9, offset: 0x80842, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwug', symObjAddr: 0x5520, symBinAddr: 0xBAC0, symSize: 0x10 } - - { offsetInCU: 0x23ED, offset: 0x80856, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwup', symObjAddr: 0x5530, symBinAddr: 0xBAD0, symSize: 0x10 } - - { offsetInCU: 0x2401, offset: 0x8086A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwui', symObjAddr: 0x5540, symBinAddr: 0xBAE0, symSize: 0x10 } - - { offsetInCU: 0x2415, offset: 0x8087E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOMa', symObjAddr: 0x5550, symBinAddr: 0xBAF0, symSize: 0x10 } - - { offsetInCU: 0x2429, offset: 0x80892, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASQWb', symObjAddr: 0x5560, symBinAddr: 0xBB00, symSize: 0x10 } - - { offsetInCU: 0x243D, offset: 0x808A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOAESQAAWl', symObjAddr: 0x5570, symBinAddr: 0xBB10, symSize: 0x30 } - - { offsetInCU: 0x24B7, offset: 0x80920, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x5C00, symBinAddr: 0xC1A0, symSize: 0x40 } - - { offsetInCU: 0x24E0, offset: 0x80949, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x5C40, symBinAddr: 0xC1E0, symSize: 0x20 } - - { offsetInCU: 0x24FF, offset: 0x80968, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x5C60, symBinAddr: 0xC200, symSize: 0x10 } - - { offsetInCU: 0x2528, offset: 0x80991, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x5C90, symBinAddr: 0xC230, symSize: 0x20 } - - { offsetInCU: 0x2547, offset: 0x809B0, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x5CB0, symBinAddr: 0xC250, symSize: 0x30 } - - { offsetInCU: 0x2570, offset: 0x809D9, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x5CE0, symBinAddr: 0xC280, symSize: 0x20 } - - { offsetInCU: 0x2584, offset: 0x809ED, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x5D30, symBinAddr: 0xC2D0, symSize: 0x30 } - - { offsetInCU: 0x2602, offset: 0x80A6B, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF12CanvasNative9NSCCanvasC0D3FitO_Tgq5', symObjAddr: 0x0, symBinAddr: 0x65B0, symSize: 0x50 } - - { offsetInCU: 0x267D, offset: 0x80AE6, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF12CanvasNative13NSCVideoFrameC0fG6FormatO_Tgq5', symObjAddr: 0x50, symBinAddr: 0x6600, symSize: 0x50 } - - { offsetInCU: 0x2755, offset: 0x80BBE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x110, symBinAddr: 0x66C0, symSize: 0x40 } - - { offsetInCU: 0x27F8, offset: 0x80C61, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x1A0, symBinAddr: 0x6750, symSize: 0x10 } - - { offsetInCU: 0x2878, offset: 0x80CE1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH9hashValueSivgTW', symObjAddr: 0x1B0, symBinAddr: 0x6760, symSize: 0x60 } - - { offsetInCU: 0x2924, offset: 0x80D8D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x210, symBinAddr: 0x67C0, symSize: 0x40 } - - { offsetInCU: 0x2994, offset: 0x80DFD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x250, symBinAddr: 0x6800, symSize: 0x60 } - - { offsetInCU: 0x2C2A, offset: 0x81093, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x55A0, symBinAddr: 0xBB40, symSize: 0xF0 } - - { offsetInCU: 0x3082, offset: 0x814EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValues6UInt32Vvg', symObjAddr: 0x150, symBinAddr: 0x6700, symSize: 0x40 } - - { offsetInCU: 0x30A7, offset: 0x81510, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValueAESgs6UInt32V_tcfC', symObjAddr: 0x190, symBinAddr: 0x6740, symSize: 0x10 } - - { offsetInCU: 0x30F7, offset: 0x81560, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvg', symObjAddr: 0x350, symBinAddr: 0x6900, symSize: 0x30 } - - { offsetInCU: 0x3134, offset: 0x8159D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvs', symObjAddr: 0x3C0, symBinAddr: 0x6970, symSize: 0x40 } - - { offsetInCU: 0x315B, offset: 0x815C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM', symObjAddr: 0x400, symBinAddr: 0x69B0, symSize: 0x40 } - - { offsetInCU: 0x324D, offset: 0x816B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0x7A0, symBinAddr: 0x6D50, symSize: 0x30 } - - { offsetInCU: 0x327E, offset: 0x816E7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0x800, symBinAddr: 0x6DB0, symSize: 0xE0 } - - { offsetInCU: 0x32C8, offset: 0x81731, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0x8E0, symBinAddr: 0x6E90, symSize: 0x50 } - - { offsetInCU: 0x32EB, offset: 0x81754, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x930, symBinAddr: 0x6EE0, symSize: 0xE0 } - - { offsetInCU: 0x332C, offset: 0x81795, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8nativeGLs5Int64Vvg', symObjAddr: 0xA50, symBinAddr: 0x7000, symSize: 0x30 } - - { offsetInCU: 0x3382, offset: 0x817EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0xB00, symBinAddr: 0x70B0, symSize: 0x30 } - - { offsetInCU: 0x34DB, offset: 0x81944, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidth12CoreGraphics7CGFloatVvg', symObjAddr: 0xCB0, symBinAddr: 0x7260, symSize: 0xA0 } - - { offsetInCU: 0x356D, offset: 0x819D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeight12CoreGraphics7CGFloatVvg', symObjAddr: 0xD80, symBinAddr: 0x7330, symSize: 0xA0 } - - { offsetInCU: 0x35FF, offset: 0x81A68, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21drawingBufferWidthRaw12CoreGraphics7CGFloatVvg', symObjAddr: 0xE50, symBinAddr: 0x7400, symSize: 0x50 } - - { offsetInCU: 0x3691, offset: 0x81AFA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22drawingBufferHeightRaw12CoreGraphics7CGFloatVvg', symObjAddr: 0xED0, symBinAddr: 0x7480, symSize: 0x50 } - - { offsetInCU: 0x3744, offset: 0x81BAD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0xF50, symBinAddr: 0x7500, symSize: 0x30 } - - { offsetInCU: 0x378A, offset: 0x81BF3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0xFB0, symBinAddr: 0x7560, symSize: 0x30 } - - { offsetInCU: 0x37BC, offset: 0x81C25, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0xFE0, symBinAddr: 0x7590, symSize: 0x10 } - - { offsetInCU: 0x3975, offset: 0x81DDE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0x10C0, symBinAddr: 0x7670, symSize: 0x110 } - - { offsetInCU: 0x3D32, offset: 0x8219B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0x1200, symBinAddr: 0x77B0, symSize: 0x820 } - - { offsetInCU: 0x4430, offset: 0x82899, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x1AF0, symBinAddr: 0x80A0, symSize: 0x2D0 } - - { offsetInCU: 0x4832, offset: 0x82C9B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x1E50, symBinAddr: 0x8400, symSize: 0xD0 } - - { offsetInCU: 0x498B, offset: 0x82DF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x1FB0, symBinAddr: 0x8560, symSize: 0x40 } - - { offsetInCU: 0x4A0F, offset: 0x82E78, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x2030, symBinAddr: 0x85E0, symSize: 0x40 } - - { offsetInCU: 0x4B2E, offset: 0x82F97, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22context2DTestToDataURLySSs5Int64VF', symObjAddr: 0x20D0, symBinAddr: 0x8680, symSize: 0x60 } - - { offsetInCU: 0x4C24, offset: 0x8308D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x2450, symBinAddr: 0x8A00, symSize: 0x50 } - - { offsetInCU: 0x4C6E, offset: 0x830D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x25A0, symBinAddr: 0x8B50, symSize: 0x60 } - - { offsetInCU: 0x4C95, offset: 0x830FE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x27C0, symBinAddr: 0x8D70, symSize: 0x40 } - - { offsetInCU: 0x4CBB, offset: 0x83124, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x2800, symBinAddr: 0x8DB0, symSize: 0x10 } - - { offsetInCU: 0x4CE4, offset: 0x8314D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x2850, symBinAddr: 0x8E00, symSize: 0x80 } - - { offsetInCU: 0x4D19, offset: 0x83182, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x28D0, symBinAddr: 0x8E80, symSize: 0x300 } - - { offsetInCU: 0x4E6D, offset: 0x832D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14initializeView33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x2C00, symBinAddr: 0x91B0, symSize: 0x2B0 } - - { offsetInCU: 0x50EA, offset: 0x83553, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvg', symObjAddr: 0x2EF0, symBinAddr: 0x94A0, symSize: 0x30 } - - { offsetInCU: 0x5129, offset: 0x83592, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvs', symObjAddr: 0x2F80, symBinAddr: 0x9530, symSize: 0x40 } - - { offsetInCU: 0x5150, offset: 0x835B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x2FC0, symBinAddr: 0x9570, symSize: 0x90 } - - { offsetInCU: 0x520A, offset: 0x83673, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvM', symObjAddr: 0x3050, symBinAddr: 0x9600, symSize: 0x40 } - - { offsetInCU: 0x5230, offset: 0x83699, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvM.resume.0', symObjAddr: 0x3090, symBinAddr: 0x9640, symSize: 0x30 } - - { offsetInCU: 0x528E, offset: 0x836F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x3120, symBinAddr: 0x96D0, symSize: 0x30 } - - { offsetInCU: 0x52FE, offset: 0x83767, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivg', symObjAddr: 0x31C0, symBinAddr: 0x9770, symSize: 0x30 } - - { offsetInCU: 0x5357, offset: 0x837C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivs', symObjAddr: 0x3290, symBinAddr: 0x9840, symSize: 0x70 } - - { offsetInCU: 0x53E6, offset: 0x8384F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivM', symObjAddr: 0x3380, symBinAddr: 0x9930, symSize: 0x50 } - - { offsetInCU: 0x540A, offset: 0x83873, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivM.resume.0', symObjAddr: 0x33D0, symBinAddr: 0x9980, symSize: 0x80 } - - { offsetInCU: 0x5483, offset: 0x838EC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivg', symObjAddr: 0x3490, symBinAddr: 0x9A40, symSize: 0x30 } - - { offsetInCU: 0x54D7, offset: 0x83940, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivs', symObjAddr: 0x3560, symBinAddr: 0x9B10, symSize: 0x70 } - - { offsetInCU: 0x5566, offset: 0x839CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivM', symObjAddr: 0x3640, symBinAddr: 0x9BF0, symSize: 0x50 } - - { offsetInCU: 0x558A, offset: 0x839F3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivM.resume.0', symObjAddr: 0x3690, symBinAddr: 0x9C40, symSize: 0x70 } - - { offsetInCU: 0x5667, offset: 0x83AD0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3700, symBinAddr: 0x9CB0, symSize: 0x210 } - - { offsetInCU: 0x5A62, offset: 0x83ECB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x3910, symBinAddr: 0x9EC0, symSize: 0x180 } - - { offsetInCU: 0x5C05, offset: 0x8406E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x3AD0, symBinAddr: 0xA080, symSize: 0x180 } - - { offsetInCU: 0x5D32, offset: 0x8419B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x3CD0, symBinAddr: 0xA280, symSize: 0x300 } - - { offsetInCU: 0x5DD6, offset: 0x8423F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x40B0, symBinAddr: 0xA660, symSize: 0x20 } - - { offsetInCU: 0x5E41, offset: 0x842AA, size: 0x8, addend: 0x0, symName: '_$sSo6UIViewC12CanvasNativeE21getBoundingClientRectyySvF', symObjAddr: 0x40F0, symBinAddr: 0xA6A0, symSize: 0xC0 } - - { offsetInCU: 0x5F2F, offset: 0x84398, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x41E0, symBinAddr: 0xA790, symSize: 0x60 } - - { offsetInCU: 0x5F89, offset: 0x843F2, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x4240, symBinAddr: 0xA7F0, symSize: 0x60 } - - { offsetInCU: 0x5FF5, offset: 0x8445E, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x42A0, symBinAddr: 0xA850, symSize: 0xB0 } - - { offsetInCU: 0x6032, offset: 0x8449B, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x4350, symBinAddr: 0xA900, symSize: 0xE0 } - - { offsetInCU: 0x609D, offset: 0x84506, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x4430, symBinAddr: 0xA9E0, symSize: 0x260 } - - { offsetInCU: 0x6145, offset: 0x845AE, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x4690, symBinAddr: 0xAC40, symSize: 0x3C0 } - - { offsetInCU: 0x62FB, offset: 0x84764, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTf4gn_n', symObjAddr: 0x5930, symBinAddr: 0xBED0, symSize: 0x2B0 } - - { offsetInCU: 0x27, offset: 0x848B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xC3E0, symSize: 0x20 } - - { offsetInCU: 0x62, offset: 0x848F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x20, symBinAddr: 0xC400, symSize: 0x14 } - - { offsetInCU: 0x1AF, offset: 0x84A3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xC3E0, symSize: 0x20 } - - { offsetInCU: 0x27, offset: 0x84A8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTo', symObjAddr: 0x0, symBinAddr: 0xC420, symSize: 0x40 } - - { offsetInCU: 0x7D, offset: 0x84AE4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTo', symObjAddr: 0x0, symBinAddr: 0xC420, symSize: 0x40 } - - { offsetInCU: 0xDB, offset: 0x84B42, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0xB0, symBinAddr: 0xC4D0, symSize: 0x30 } - - { offsetInCU: 0x12E, offset: 0x84B95, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTf4nnndddd_n', symObjAddr: 0x110, symBinAddr: 0xC530, symSize: 0x15C } - - { offsetInCU: 0x26A, offset: 0x84CD1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x90, symBinAddr: 0xC4B0, symSize: 0x20 } - - { offsetInCU: 0x436, offset: 0x84E9D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x40, symBinAddr: 0xC460, symSize: 0x20 } - - { offsetInCU: 0x44A, offset: 0x84EB1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x60, symBinAddr: 0xC480, symSize: 0x30 } - - { offsetInCU: 0x480, offset: 0x84EE7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xE0, symBinAddr: 0xC500, symSize: 0x30 } - - { offsetInCU: 0xD1, offset: 0x8502B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0x1250, symBinAddr: 0xD8A0, symSize: 0x60 } - - { offsetInCU: 0x161, offset: 0x850BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0x12D0, symBinAddr: 0xD920, symSize: 0x20 } - - { offsetInCU: 0x190, offset: 0x850EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0x12F0, symBinAddr: 0xD940, symSize: 0x10 } - - { offsetInCU: 0x32D, offset: 0x85287, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x1B70, symBinAddr: 0xE1C0, symSize: 0x30 } - - { offsetInCU: 0x5E4, offset: 0x8553E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1BF0, symBinAddr: 0xE240, symSize: 0x60 } - - { offsetInCU: 0x613, offset: 0x8556D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x1C50, symBinAddr: 0xE2A0, symSize: 0x20 } - - { offsetInCU: 0x627, offset: 0x85581, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x1C70, symBinAddr: 0xE2C0, symSize: 0x20 } - - { offsetInCU: 0x63B, offset: 0x85595, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x1C90, symBinAddr: 0xE2E0, symSize: 0x30 } - - { offsetInCU: 0x64F, offset: 0x855A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x1CC0, symBinAddr: 0xE310, symSize: 0x10 } - - { offsetInCU: 0x663, offset: 0x855BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1CD0, symBinAddr: 0xE320, symSize: 0x40 } - - { offsetInCU: 0x677, offset: 0x855D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1D10, symBinAddr: 0xE360, symSize: 0x60 } - - { offsetInCU: 0x68B, offset: 0x855E5, size: 0x8, addend: 0x0, symName: ___swift_memcpy33_8, symObjAddr: 0x1D70, symBinAddr: 0xE3C0, symSize: 0x20 } - - { offsetInCU: 0x69F, offset: 0x855F9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x1D90, symBinAddr: 0xE3E0, symSize: 0x40 } - - { offsetInCU: 0x6B3, offset: 0x8560D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x1DD0, symBinAddr: 0xE420, symSize: 0x40 } - - { offsetInCU: 0x6C7, offset: 0x85621, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1E10, symBinAddr: 0xE460, symSize: 0x50 } - - { offsetInCU: 0x6DB, offset: 0x85635, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1E60, symBinAddr: 0xE4B0, symSize: 0x10 } - - { offsetInCU: 0x6EF, offset: 0x85649, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1E70, symBinAddr: 0xE4C0, symSize: 0x40 } - - { offsetInCU: 0x703, offset: 0x8565D, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1F80, symBinAddr: 0xE500, symSize: 0x50 } - - { offsetInCU: 0x717, offset: 0x85671, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1FD0, symBinAddr: 0xE550, symSize: 0x20 } - - { offsetInCU: 0x72B, offset: 0x85685, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVWOs', symObjAddr: 0x2020, symBinAddr: 0xE5A0, symSize: 0x20 } - - { offsetInCU: 0x75F, offset: 0x856B9, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x2060, symBinAddr: 0xE5E0, symSize: 0x20 } - - { offsetInCU: 0xCDC, offset: 0x85C36, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xC690, symSize: 0x630 } - - { offsetInCU: 0xF61, offset: 0x85EBB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x650, symBinAddr: 0xCCE0, symSize: 0xE0 } - - { offsetInCU: 0xFE0, offset: 0x85F3A, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x800, symBinAddr: 0xCE70, symSize: 0xC0 } - - { offsetInCU: 0x1042, offset: 0x85F9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0x1160, symBinAddr: 0xD7B0, symSize: 0xF0 } - - { offsetInCU: 0x1191, offset: 0x860EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x16C0, symBinAddr: 0xDD10, symSize: 0x4B0 } - - { offsetInCU: 0x18DA, offset: 0x86834, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x2040, symBinAddr: 0xE5C0, symSize: 0x20 } - - { offsetInCU: 0x1972, offset: 0x868CC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x2080, symBinAddr: 0xE600, symSize: 0x1E9 } - - { offsetInCU: 0x27, offset: 0x86A95, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xE7F0, symSize: 0x30 } - - { offsetInCU: 0x4B, offset: 0x86AB9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2A0, symBinAddr: 0x1290A28, symSize: 0x0 } - - { offsetInCU: 0x65, offset: 0x86AD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0xE7F0, symSize: 0x30 } - - { offsetInCU: 0x98, offset: 0x86B06, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x160, symBinAddr: 0xE950, symSize: 0x30 } - - { offsetInCU: 0x104, offset: 0x86B72, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x200, symBinAddr: 0xE9F0, symSize: 0x30 } - - { offsetInCU: 0x158, offset: 0x86BC6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x30, symBinAddr: 0xE820, symSize: 0xF0 } - - { offsetInCU: 0x183, offset: 0x86BF1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x1E0, symBinAddr: 0xE9D0, symSize: 0x20 } - - { offsetInCU: 0x197, offset: 0x86C05, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x260, symBinAddr: 0xEA50, symSize: 0x10 } - - { offsetInCU: 0x1C2, offset: 0x86C30, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x270, symBinAddr: 0xEA60, symSize: 0x2F } - - { offsetInCU: 0x34A, offset: 0x86DB8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x120, symBinAddr: 0xE910, symSize: 0x40 } - - { offsetInCU: 0x38A, offset: 0x86DF8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x190, symBinAddr: 0xE980, symSize: 0x20 } - - { offsetInCU: 0x39E, offset: 0x86E0C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1B0, symBinAddr: 0xE9A0, symSize: 0x30 } - - { offsetInCU: 0x3DA, offset: 0x86E48, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x230, symBinAddr: 0xEA20, symSize: 0x30 } - - { offsetInCU: 0x2B, offset: 0x86E96, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xEA90, symSize: 0xA0 } - - { offsetInCU: 0x66, offset: 0x86ED1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZTo', symObjAddr: 0xA0, symBinAddr: 0xEB30, symSize: 0xA0 } - - { offsetInCU: 0xF9, offset: 0x86F64, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheH0a_AFSo012CFDictionaryH0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D0, symBinAddr: 0xEC60, symSize: 0x100 } - - { offsetInCU: 0x1AD, offset: 0x87018, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x300, symBinAddr: 0xED90, symSize: 0x30 } - - { offsetInCU: 0x228, offset: 0x87093, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZTo', symObjAddr: 0x340, symBinAddr: 0xEDD0, symSize: 0x70 } - - { offsetInCU: 0x2A1, offset: 0x8710C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x4C0, symBinAddr: 0xEF50, symSize: 0x140 } - - { offsetInCU: 0x340, offset: 0x871AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfcTo', symObjAddr: 0x650, symBinAddr: 0xF0E0, symSize: 0x30 } - - { offsetInCU: 0x393, offset: 0x871FE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZTf4nnndddd_n', symObjAddr: 0x6B0, symBinAddr: 0xF140, symSize: 0x180 } - - { offsetInCU: 0x4ED, offset: 0x87358, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC7getFile33_086607F85A042F2B265C7E71FFB9771CLLyS2SKFZTf4nd_g', symObjAddr: 0x830, symBinAddr: 0xF2C0, symSize: 0x310 } - - { offsetInCU: 0x5CC, offset: 0x87437, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCMa', symObjAddr: 0xB40, symBinAddr: 0xF5D0, symSize: 0x20 } - - { offsetInCU: 0x5E0, offset: 0x8744B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwCP', symObjAddr: 0xB60, symBinAddr: 0xF5F0, symSize: 0x30 } - - { offsetInCU: 0x5F4, offset: 0x8745F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwxx', symObjAddr: 0xB90, symBinAddr: 0xF620, symSize: 0x10 } - - { offsetInCU: 0x608, offset: 0x87473, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwca', symObjAddr: 0xBA0, symBinAddr: 0xF630, symSize: 0x40 } - - { offsetInCU: 0x61C, offset: 0x87487, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwta', symObjAddr: 0xBF0, symBinAddr: 0xF670, symSize: 0x30 } - - { offsetInCU: 0x630, offset: 0x8749B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwet', symObjAddr: 0xC20, symBinAddr: 0xF6A0, symSize: 0x40 } - - { offsetInCU: 0x644, offset: 0x874AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwst', symObjAddr: 0xC60, symBinAddr: 0xF6E0, symSize: 0x40 } - - { offsetInCU: 0x658, offset: 0x874C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwug', symObjAddr: 0xCA0, symBinAddr: 0xF720, symSize: 0x10 } - - { offsetInCU: 0x66C, offset: 0x874D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwup', symObjAddr: 0xCB0, symBinAddr: 0xF730, symSize: 0x10 } - - { offsetInCU: 0x680, offset: 0x874EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwui', symObjAddr: 0xCC0, symBinAddr: 0xF740, symSize: 0x10 } - - { offsetInCU: 0x694, offset: 0x874FF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOMa', symObjAddr: 0xCD0, symBinAddr: 0xF750, symSize: 0x10 } - - { offsetInCU: 0x71C, offset: 0x87587, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x3B0, symBinAddr: 0xEE40, symSize: 0x10 } - - { offsetInCU: 0x738, offset: 0x875A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3C0, symBinAddr: 0xEE50, symSize: 0x10 } - - { offsetInCU: 0x754, offset: 0x875BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3D0, symBinAddr: 0xEE60, symSize: 0x10 } - - { offsetInCU: 0x770, offset: 0x875DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x3E0, symBinAddr: 0xEE70, symSize: 0x10 } - - { offsetInCU: 0xA44, offset: 0x878AF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0xEA90, symSize: 0xA0 } - - { offsetInCU: 0xADA, offset: 0x87945, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheH0a_AFSo012CFDictionaryH0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x140, symBinAddr: 0xEBD0, symSize: 0x90 } - - { offsetInCU: 0xC75, offset: 0x87AE0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2D0, symBinAddr: 0xED60, symSize: 0x30 } - - { offsetInCU: 0xCBF, offset: 0x87B2A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZ', symObjAddr: 0x330, symBinAddr: 0xEDC0, symSize: 0x10 } - - { offsetInCU: 0xCE1, offset: 0x87B4C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x3F0, symBinAddr: 0xEE80, symSize: 0xD0 } - - { offsetInCU: 0xD91, offset: 0x87BFC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfC', symObjAddr: 0x600, symBinAddr: 0xF090, symSize: 0x20 } - - { offsetInCU: 0xDA5, offset: 0x87C10, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfc', symObjAddr: 0x620, symBinAddr: 0xF0B0, symSize: 0x30 } - - { offsetInCU: 0xDDB, offset: 0x87C46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCfD', symObjAddr: 0x680, symBinAddr: 0xF110, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x87D38, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xF770, symSize: 0x10 } - - { offsetInCU: 0x71, offset: 0x87D82, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x10, symBinAddr: 0xF780, symSize: 0x60 } - - { offsetInCU: 0xF6, offset: 0x87E07, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x80, symBinAddr: 0xF7F0, symSize: 0x60 } - - { offsetInCU: 0x193, offset: 0x87EA4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xF0, symBinAddr: 0xF860, symSize: 0x70 } - - { offsetInCU: 0x25C, offset: 0x87F6D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x170, symBinAddr: 0xF8E0, symSize: 0x90 } - - { offsetInCU: 0x339, offset: 0x8804A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x250, symBinAddr: 0xF9C0, symSize: 0x30 } - - { offsetInCU: 0x38D, offset: 0x8809E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x2B0, symBinAddr: 0xFA20, symSize: 0x14 } - - { offsetInCU: 0x4FD, offset: 0x8820E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0xF770, symSize: 0x10 } - - { offsetInCU: 0x59A, offset: 0x882AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x70, symBinAddr: 0xF7E0, symSize: 0x10 } - - { offsetInCU: 0x63A, offset: 0x8834B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xE0, symBinAddr: 0xF850, symSize: 0x10 } - - { offsetInCU: 0x6FD, offset: 0x8840E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x160, symBinAddr: 0xF8D0, symSize: 0x10 } - - { offsetInCU: 0x809, offset: 0x8851A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x200, symBinAddr: 0xF970, symSize: 0x20 } - - { offsetInCU: 0x81D, offset: 0x8852E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x220, symBinAddr: 0xF990, symSize: 0x30 } - - { offsetInCU: 0x859, offset: 0x8856A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x280, symBinAddr: 0xF9F0, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x885C8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0xFA40, symSize: 0x30 } - - { offsetInCU: 0xA9, offset: 0x8864A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x30, symBinAddr: 0xFA70, symSize: 0x50 } - - { offsetInCU: 0x1A6, offset: 0x88747, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0xC0, symBinAddr: 0xFB00, symSize: 0x50 } - - { offsetInCU: 0x289, offset: 0x8882A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x180, symBinAddr: 0xFBC0, symSize: 0x30 } - - { offsetInCU: 0x2DD, offset: 0x8887E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0x160, symBinAddr: 0xFBA0, symSize: 0x20 } - - { offsetInCU: 0x487, offset: 0x88A28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0xFA40, symSize: 0x30 } - - { offsetInCU: 0x5DD, offset: 0x88B7E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x80, symBinAddr: 0xFAC0, symSize: 0x40 } - - { offsetInCU: 0x725, offset: 0x88CC6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0x110, symBinAddr: 0xFB50, symSize: 0x20 } - - { offsetInCU: 0x739, offset: 0x88CDA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0x130, symBinAddr: 0xFB70, symSize: 0x30 } - - { offsetInCU: 0x76F, offset: 0x88D10, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x1B0, symBinAddr: 0xFBF0, symSize: 0x2B } - - { offsetInCU: 0x61, offset: 0x88D94, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x10, symBinAddr: 0xFC30, symSize: 0x20 } - - { offsetInCU: 0xB7, offset: 0x88DEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x30, symBinAddr: 0xFC50, symSize: 0x10 } - - { offsetInCU: 0x110, offset: 0x88E43, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x40, symBinAddr: 0xFC60, symSize: 0x40 } - - { offsetInCU: 0x168, offset: 0x88E9B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xC0, symBinAddr: 0xFCE0, symSize: 0x40 } - - { offsetInCU: 0x1C3, offset: 0x88EF6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x100, symBinAddr: 0xFD20, symSize: 0x10 } - - { offsetInCU: 0x219, offset: 0x88F4C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x110, symBinAddr: 0xFD30, symSize: 0x10 } - - { offsetInCU: 0x272, offset: 0x88FA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1C0, symBinAddr: 0xFDE0, symSize: 0x80 } - - { offsetInCU: 0x2CA, offset: 0x88FFD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x300, symBinAddr: 0xFF20, symSize: 0xA0 } - - { offsetInCU: 0x32C, offset: 0x8905F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x470, symBinAddr: 0x10090, symSize: 0x30 } - - { offsetInCU: 0x35E, offset: 0x89091, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x520, symBinAddr: 0x100C0, symSize: 0xA0 } - - { offsetInCU: 0x3DF, offset: 0x89112, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x600, symBinAddr: 0x10160, symSize: 0x60 } - - { offsetInCU: 0x44F, offset: 0x89182, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x670, symBinAddr: 0x101D0, symSize: 0x50 } - - { offsetInCU: 0x4C1, offset: 0x891F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x780, symBinAddr: 0x102E0, symSize: 0x30 } - - { offsetInCU: 0x535, offset: 0x89268, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x1A0, symBinAddr: 0xFDC0, symSize: 0x20 } - - { offsetInCU: 0x55F, offset: 0x89292, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x7D0, symBinAddr: 0x10330, symSize: 0x20 } - - { offsetInCU: 0x65D, offset: 0x89390, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xAF0, symBinAddr: 0x10650, symSize: 0x80 } - - { offsetInCU: 0x69B, offset: 0x893CE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xB70, symBinAddr: 0x106D0, symSize: 0x20 } - - { offsetInCU: 0x6F1, offset: 0x89424, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xB90, symBinAddr: 0x106F0, symSize: 0x10 } - - { offsetInCU: 0x74A, offset: 0x8947D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xBA0, symBinAddr: 0x10700, symSize: 0x20 } - - { offsetInCU: 0x7A2, offset: 0x894D5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xBC0, symBinAddr: 0x10720, symSize: 0x20 } - - { offsetInCU: 0x7FD, offset: 0x89530, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xBE0, symBinAddr: 0x10740, symSize: 0x40 } - - { offsetInCU: 0x853, offset: 0x89586, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xC50, symBinAddr: 0x107B0, symSize: 0x40 } - - { offsetInCU: 0x8E6, offset: 0x89619, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xDC0, symBinAddr: 0x10920, symSize: 0x80 } - - { offsetInCU: 0x93E, offset: 0x89671, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xF90, symBinAddr: 0x10AF0, symSize: 0xA0 } - - { offsetInCU: 0x9A0, offset: 0x896D3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x10E0, symBinAddr: 0x10C40, symSize: 0x30 } - - { offsetInCU: 0x9D2, offset: 0x89705, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0x1110, symBinAddr: 0x10C70, symSize: 0xB0 } - - { offsetInCU: 0xA53, offset: 0x89786, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x11D0, symBinAddr: 0x10D20, symSize: 0x30 } - - { offsetInCU: 0xAB1, offset: 0x897E4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x1250, symBinAddr: 0x10DA0, symSize: 0x20 } - - { offsetInCU: 0xC63, offset: 0x89996, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfC12CanvasNative15NSCTouchHandlerC7PointerV_Tgm5', symObjAddr: 0x13C0, symBinAddr: 0x10F10, symSize: 0x90 } - - { offsetInCU: 0xCE6, offset: 0x89A19, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgm5', symObjAddr: 0x1450, symBinAddr: 0x10FA0, symSize: 0x70 } - - { offsetInCU: 0xD6A, offset: 0x89A9D, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x1630, symBinAddr: 0x11180, symSize: 0x40 } - - { offsetInCU: 0xD7E, offset: 0x89AB1, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x1670, symBinAddr: 0x111C0, symSize: 0x40 } - - { offsetInCU: 0xD92, offset: 0x89AC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x16B0, symBinAddr: 0x11200, symSize: 0x20 } - - { offsetInCU: 0xE6C, offset: 0x89B9F, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x1530, symBinAddr: 0x11080, symSize: 0x100 } - - { offsetInCU: 0x112B, offset: 0x89E5E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x80, symBinAddr: 0xFCA0, symSize: 0x40 } - - { offsetInCU: 0x11A8, offset: 0x89EDB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x120, symBinAddr: 0xFD40, symSize: 0x80 } - - { offsetInCU: 0x11EF, offset: 0x89F22, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x240, symBinAddr: 0xFE60, symSize: 0xC0 } - - { offsetInCU: 0x1251, offset: 0x89F84, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x3A0, symBinAddr: 0xFFC0, symSize: 0xD0 } - - { offsetInCU: 0x12DA, offset: 0x8A00D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x660, symBinAddr: 0x101C0, symSize: 0x10 } - - { offsetInCU: 0x12FB, offset: 0x8A02E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x6C0, symBinAddr: 0x10220, symSize: 0x90 } - - { offsetInCU: 0x130F, offset: 0x8A042, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x750, symBinAddr: 0x102B0, symSize: 0x30 } - - { offsetInCU: 0x1428, offset: 0x8A15B, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x7F0, symBinAddr: 0x10350, symSize: 0x300 } - - { offsetInCU: 0x17D2, offset: 0x8A505, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xC20, symBinAddr: 0x10780, symSize: 0x30 } - - { offsetInCU: 0x180F, offset: 0x8A542, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xC90, symBinAddr: 0x107F0, symSize: 0x40 } - - { offsetInCU: 0x1836, offset: 0x8A569, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xCD0, symBinAddr: 0x10830, symSize: 0x40 } - - { offsetInCU: 0x185B, offset: 0x8A58E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xD10, symBinAddr: 0x10870, symSize: 0x10 } - - { offsetInCU: 0x1882, offset: 0x8A5B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xD20, symBinAddr: 0x10880, symSize: 0x20 } - - { offsetInCU: 0x1896, offset: 0x8A5C9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xD40, symBinAddr: 0x108A0, symSize: 0x80 } - - { offsetInCU: 0x18DD, offset: 0x8A610, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xED0, symBinAddr: 0x10A30, symSize: 0xC0 } - - { offsetInCU: 0x193A, offset: 0x8A66D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x1030, symBinAddr: 0x10B90, symSize: 0xB0 } - - { offsetInCU: 0x19D6, offset: 0x8A709, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1270, symBinAddr: 0x10DC0, symSize: 0xB0 } - - { offsetInCU: 0x1AB8, offset: 0x8A7EB, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x1320, symBinAddr: 0x10E70, symSize: 0xA0 } - - { offsetInCU: 0x1BC4, offset: 0x8A8F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTf4ddn_n', symObjAddr: 0x14C0, symBinAddr: 0x11010, symSize: 0x70 } - - { offsetInCU: 0x1CBF, offset: 0x8A9F2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x16D0, symBinAddr: 0x11220, symSize: 0x410 } - - { offsetInCU: 0x4F, offset: 0x8ADF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x1080, symBinAddr: 0x1290B68, symSize: 0x0 } - - { offsetInCU: 0x5D, offset: 0x8AE02, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x11820, symSize: 0x30 } - - { offsetInCU: 0x75, offset: 0x8AE1A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x30, symBinAddr: 0x11850, symSize: 0xF0 } - - { offsetInCU: 0xBC, offset: 0x8AE61, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x130, symBinAddr: 0x11950, symSize: 0x40 } - - { offsetInCU: 0x130, offset: 0x8AED5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3C0, symBinAddr: 0x11BE0, symSize: 0x80 } - - { offsetInCU: 0x183, offset: 0x8AF28, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC21loadImageFromPathSyncySbs5Int64V_SStFZTo', symObjAddr: 0x4A0, symBinAddr: 0x11CC0, symSize: 0x70 } - - { offsetInCU: 0x255, offset: 0x8AFFA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZTo', symObjAddr: 0x7A0, symBinAddr: 0x11FC0, symSize: 0x80 } - - { offsetInCU: 0x2B4, offset: 0x8B059, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x870, symBinAddr: 0x12090, symSize: 0x30 } - - { offsetInCU: 0x307, offset: 0x8B0AC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x8E0, symBinAddr: 0x12100, symSize: 0x200 } - - { offsetInCU: 0x385, offset: 0x8B12A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZTf4nnnd_n', symObjAddr: 0xAE0, symBinAddr: 0x12300, symSize: 0x210 } - - { offsetInCU: 0x40F, offset: 0x8B1B4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x8D0, symBinAddr: 0x120F0, symSize: 0x10 } - - { offsetInCU: 0x44B, offset: 0x8B1F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0xCF0, symBinAddr: 0x12510, symSize: 0x20 } - - { offsetInCU: 0x46A, offset: 0x8B20F, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0xD30, symBinAddr: 0x12550, symSize: 0x20 } - - { offsetInCU: 0x493, offset: 0x8B238, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZyyYbcfU_TA', symObjAddr: 0xD80, symBinAddr: 0x125A0, symSize: 0x20 } - - { offsetInCU: 0x4A7, offset: 0x8B24C, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0xDA0, symBinAddr: 0x125C0, symSize: 0x20 } - - { offsetInCU: 0x4BB, offset: 0x8B260, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0xDC0, symBinAddr: 0x125E0, symSize: 0x10 } - - { offsetInCU: 0x4CF, offset: 0x8B274, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGMa', symObjAddr: 0xE40, symBinAddr: 0x12620, symSize: 0x50 } - - { offsetInCU: 0x4E3, offset: 0x8B288, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0xF10, symBinAddr: 0x126C0, symSize: 0x20 } - - { offsetInCU: 0x4F7, offset: 0x8B29C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0xF30, symBinAddr: 0x126E0, symSize: 0x20 } - - { offsetInCU: 0x52B, offset: 0x8B2D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0xF50, symBinAddr: 0x12700, symSize: 0x20 } - - { offsetInCU: 0x6FD, offset: 0x8B4A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x120, symBinAddr: 0x11940, symSize: 0x10 } - - { offsetInCU: 0x78A, offset: 0x8B52F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x170, symBinAddr: 0x11990, symSize: 0x10 } - - { offsetInCU: 0x79E, offset: 0x8B543, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x180, symBinAddr: 0x119A0, symSize: 0x240 } - - { offsetInCU: 0x8D5, offset: 0x8B67A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC21loadImageFromPathSyncySbs5Int64V_SStFZ', symObjAddr: 0x440, symBinAddr: 0x11C60, symSize: 0x60 } - - { offsetInCU: 0x99F, offset: 0x8B744, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZ', symObjAddr: 0x510, symBinAddr: 0x11D30, symSize: 0x10 } - - { offsetInCU: 0x9B3, offset: 0x8B758, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZyyYbcfU_', symObjAddr: 0x520, symBinAddr: 0x11D40, symSize: 0x280 } - - { offsetInCU: 0xA96, offset: 0x8B83B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x820, symBinAddr: 0x12040, symSize: 0x20 } - - { offsetInCU: 0xAAA, offset: 0x8B84F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x840, symBinAddr: 0x12060, symSize: 0x30 } - - { offsetInCU: 0xAE0, offset: 0x8B885, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x8A0, symBinAddr: 0x120C0, symSize: 0x30 } - - { offsetInCU: 0x27, offset: 0x8B92B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x12830, symSize: 0x20 } - - { offsetInCU: 0x77, offset: 0x8B97B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x128A0, symSize: 0x30 } - - { offsetInCU: 0xCB, offset: 0x8B9CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x12880, symSize: 0x20 } - - { offsetInCU: 0x216, offset: 0x8BB1A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x12830, symSize: 0x20 } - - { offsetInCU: 0x22A, offset: 0x8BB2E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x12850, symSize: 0x30 } - - { offsetInCU: 0x266, offset: 0x8BB6A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xA0, symBinAddr: 0x128D0, symSize: 0x2B } - - { offsetInCU: 0x26, offset: 0x8BBB3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x375250, symSize: 0x3990 } - - { offsetInCU: 0x40, offset: 0x8BBCD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0xEEC0, symBinAddr: 0xAC77C0, symSize: 0x0 } - - { offsetInCU: 0x92, offset: 0x8BC1F, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0x14EC0, symBinAddr: 0xACD7C0, symSize: 0x0 } - - { offsetInCU: 0xF6, offset: 0x8BC83, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0x14EE8, symBinAddr: 0xACD7E8, symSize: 0x0 } - - { offsetInCU: 0x10C, offset: 0x8BC99, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x152F0, symBinAddr: 0xACDBF0, symSize: 0x0 } - - { offsetInCU: 0x123, offset: 0x8BCB0, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0x14F30, symBinAddr: 0xACD830, symSize: 0x0 } - - { offsetInCU: 0xE22, offset: 0x8C9AF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x375250, symSize: 0x3990 } - - { offsetInCU: 0x4DAE, offset: 0x9093B, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0xE6E0, symBinAddr: 0x383930, symSize: 0x3E0 } - - { offsetInCU: 0x4FF1, offset: 0x90B7E, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x7C20, symBinAddr: 0x37CE70, symSize: 0x270 } - - { offsetInCU: 0x582C, offset: 0x913B9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x3990, symBinAddr: 0x378BE0, symSize: 0xA10 } - - { offsetInCU: 0x684B, offset: 0x923D8, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x43A0, symBinAddr: 0x3795F0, symSize: 0xA10 } - - { offsetInCU: 0x6EE9, offset: 0x92A76, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x4DB0, symBinAddr: 0x37A000, symSize: 0x2B0 } - - { offsetInCU: 0x74BC, offset: 0x93049, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x5060, symBinAddr: 0x37A2B0, symSize: 0xCD0 } - - { offsetInCU: 0x83FE, offset: 0x93F8B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x5D30, symBinAddr: 0x37AF80, symSize: 0xB40 } - - { offsetInCU: 0x8F67, offset: 0x94AF4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x6870, symBinAddr: 0x37BAC0, symSize: 0x13B0 } - - { offsetInCU: 0xA567, offset: 0x960F4, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x7FF0, symBinAddr: 0x37D240, symSize: 0x2A30 } - - { offsetInCU: 0xDC6D, offset: 0x997FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x7E90, symBinAddr: 0x37D0E0, symSize: 0x160 } - - { offsetInCU: 0xDEE7, offset: 0x99A74, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0xAA20, symBinAddr: 0x37FC70, symSize: 0x30 } - - { offsetInCU: 0xDFDC, offset: 0x99B69, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0xAA50, symBinAddr: 0x37FCA0, symSize: 0x50 } - - { offsetInCU: 0xE051, offset: 0x99BDE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0xAAA0, symBinAddr: 0x37FCF0, symSize: 0x10 } - - { offsetInCU: 0xE0EC, offset: 0x99C79, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0xAAB0, symBinAddr: 0x37FD00, symSize: 0xB0 } - - { offsetInCU: 0xE217, offset: 0x99DA4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0xAB60, symBinAddr: 0x37FDB0, symSize: 0x10 } - - { offsetInCU: 0xE4E9, offset: 0x9A076, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0xAB70, symBinAddr: 0x37FDC0, symSize: 0x21A0 } - - { offsetInCU: 0x1118F, offset: 0x9CD1C, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0xEAC0, symBinAddr: 0x383D10, symSize: 0x2D1 } - - { offsetInCU: 0x117CF, offset: 0x9D35C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0xCD10, symBinAddr: 0x381F60, symSize: 0x20 } - - { offsetInCU: 0x11C6C, offset: 0x9D7F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0xCD30, symBinAddr: 0x381F80, symSize: 0x19B0 } - - { offsetInCU: 0x26, offset: 0x9E8A9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x383FF0, symSize: 0x800 } - - { offsetInCU: 0x41, offset: 0x9E8C4, size: 0x8, addend: 0x0, symName: _aes_nohw_rcon, symObjAddr: 0x1B10, symBinAddr: 0xACDCD0, symSize: 0x0 } - - { offsetInCU: 0x484, offset: 0x9ED07, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x383FF0, symSize: 0x800 } - - { offsetInCU: 0x1B2B, offset: 0xA03AE, size: 0x8, addend: 0x0, symName: _aes_nohw_sub_bytes, symObjAddr: 0x15F0, symBinAddr: 0x3855E0, symSize: 0x300 } - - { offsetInCU: 0x32EE, offset: 0xA1B71, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_encrypt, symObjAddr: 0x800, symBinAddr: 0x3847F0, symSize: 0x80 } - - { offsetInCU: 0x33DC, offset: 0xA1C5F, size: 0x8, addend: 0x0, symName: _aes_nohw_expand_round_keys, symObjAddr: 0x880, symBinAddr: 0x384870, symSize: 0x1A0 } - - { offsetInCU: 0x386D, offset: 0xA20F0, size: 0x8, addend: 0x0, symName: _aes_nohw_to_batch, symObjAddr: 0xA20, symBinAddr: 0x384A10, symSize: 0x420 } - - { offsetInCU: 0x3D7D, offset: 0xA2600, size: 0x8, addend: 0x0, symName: _aes_nohw_encrypt_batch, symObjAddr: 0xE40, symBinAddr: 0x384E30, symSize: 0x380 } - - { offsetInCU: 0x424C, offset: 0xA2ACF, size: 0x8, addend: 0x0, symName: _aes_nohw_from_batch, symObjAddr: 0x11C0, symBinAddr: 0x3851B0, symSize: 0x250 } - - { offsetInCU: 0x498D, offset: 0xA3210, size: 0x8, addend: 0x0, symName: _aes_nohw_shift_rows, symObjAddr: 0x18F0, symBinAddr: 0x3858E0, symSize: 0x149 } - - { offsetInCU: 0x4BF9, offset: 0xA347C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_ctr32_encrypt_blocks, symObjAddr: 0x1410, symBinAddr: 0x385400, symSize: 0x1E0 } - - { offsetInCU: 0x26, offset: 0xA389D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x385A30, symSize: 0x2DC } - - { offsetInCU: 0x1D2, offset: 0xA3A49, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x385A30, symSize: 0x2DC } - - { offsetInCU: 0x26, offset: 0xA3CA2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x385D10, symSize: 0x87 } - - { offsetInCU: 0x34, offset: 0xA3CB0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x385D10, symSize: 0x87 } - - { offsetInCU: 0x26, offset: 0xA3DC0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x385DA0, symSize: 0x46 } - - { offsetInCU: 0x34, offset: 0xA3DCE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x385DA0, symSize: 0x46 } - - { offsetInCU: 0x86, offset: 0xA3F31, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x15F0, symBinAddr: 0xACDD50, symSize: 0x0 } - - { offsetInCU: 0xB8, offset: 0xA3F63, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1580, symBinAddr: 0xACDCE0, symSize: 0x0 } - - { offsetInCU: 0xDA, offset: 0xA3F85, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x15B0, symBinAddr: 0xACDD10, symSize: 0x0 } - - { offsetInCU: 0xF0, offset: 0xA3F9B, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x15E0, symBinAddr: 0xACDD40, symSize: 0x0 } - - { offsetInCU: 0x3B7, offset: 0xA4262, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x150, symBinAddr: 0x385DF0, symSize: 0x20 } - - { offsetInCU: 0x594, offset: 0xA443F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x250, symBinAddr: 0x385E10, symSize: 0x20 } - - { offsetInCU: 0x63F, offset: 0xA44EA, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x340, symBinAddr: 0x385E30, symSize: 0x3A0 } - - { offsetInCU: 0x11A7, offset: 0xA5052, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x6E0, symBinAddr: 0x3861D0, symSize: 0x140 } - - { offsetInCU: 0x14A2, offset: 0xA534D, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x820, symBinAddr: 0x386310, symSize: 0x6B0 } - - { offsetInCU: 0x26DA, offset: 0xA6585, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xED0, symBinAddr: 0x3869C0, symSize: 0x380 } - - { offsetInCU: 0x2D37, offset: 0xA6BE2, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0x1250, symBinAddr: 0x386D40, symSize: 0x170 } - - { offsetInCU: 0x2F2F, offset: 0xA6DDA, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0x13C0, symBinAddr: 0x386EB0, symSize: 0x1BF } - - { offsetInCU: 0x26, offset: 0xA7125, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x387070, symSize: 0x50 } - - { offsetInCU: 0xFA, offset: 0xA71F9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x387070, symSize: 0x50 } - - { offsetInCU: 0x18D, offset: 0xA728C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x50, symBinAddr: 0x3870C0, symSize: 0x60 } - - { offsetInCU: 0x2F1, offset: 0xA73F0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0xB0, symBinAddr: 0x387120, symSize: 0x90 } - - { offsetInCU: 0x4C6, offset: 0xA75C5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0x140, symBinAddr: 0x3871B0, symSize: 0x20 } - - { offsetInCU: 0x5E3, offset: 0xA76E2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0x160, symBinAddr: 0x3871D0, symSize: 0xB0 } - - { offsetInCU: 0x696, offset: 0xA7795, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x210, symBinAddr: 0x387280, symSize: 0x70 } - - { offsetInCU: 0x861, offset: 0xA7960, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x280, symBinAddr: 0x3872F0, symSize: 0x170 } - - { offsetInCU: 0xB67, offset: 0xA7C66, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x3F0, symBinAddr: 0x387460, symSize: 0x270 } - - { offsetInCU: 0xE6A, offset: 0xA7F69, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x660, symBinAddr: 0x3876D0, symSize: 0x1A0 } - - { offsetInCU: 0x105D, offset: 0xA815C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x800, symBinAddr: 0x387870, symSize: 0x280 } - - { offsetInCU: 0x128C, offset: 0xA838B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0xC20, symBinAddr: 0x387AF0, symSize: 0x20 } - - { offsetInCU: 0x12F3, offset: 0xA83F2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0xC40, symBinAddr: 0x387B10, symSize: 0x20 } - - { offsetInCU: 0x132A, offset: 0xA8429, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0xC60, symBinAddr: 0x387B30, symSize: 0x10 } - - { offsetInCU: 0x13AC, offset: 0xA84AB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0xC70, symBinAddr: 0x387B40, symSize: 0x4A } - - { offsetInCU: 0x26, offset: 0xA8637, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x387B90, symSize: 0x129 } - - { offsetInCU: 0x34, offset: 0xA8645, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x387B90, symSize: 0x129 } - - { offsetInCU: 0x34, offset: 0xA8747, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_ia32cap_P, symObjAddr: 0x3F0, symBinAddr: 0x1297F70, symSize: 0x0 } - - { offsetInCU: 0x26, offset: 0xA879C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0x387CC0, symSize: 0xF8 } - - { offsetInCU: 0xD5, offset: 0xA884B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0x387CC0, symSize: 0xF8 } - - { offsetInCU: 0x26, offset: 0xA89A0, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0x387DC0, symSize: 0x1210 } - - { offsetInCU: 0x92E, offset: 0xA92A8, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0x387DC0, symSize: 0x1210 } - - { offsetInCU: 0x5347, offset: 0xADCC1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base_adx, symObjAddr: 0x1210, symBinAddr: 0x388FD0, symSize: 0x1E50 } - - { offsetInCU: 0x9B2F, offset: 0xB24A9, size: 0x8, addend: 0x0, symName: _inline_x25519_ge_dbl_4, symObjAddr: 0x3060, symBinAddr: 0x38AE20, symSize: 0x361 } - - { offsetInCU: 0x26, offset: 0xB3896, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0x38B190, symSize: 0xD0 } - - { offsetInCU: 0x303, offset: 0xB3B73, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0x38B190, symSize: 0xD0 } - - { offsetInCU: 0x5A4, offset: 0xB3E14, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_update, symObjAddr: 0xD0, symBinAddr: 0x38B260, symSize: 0x1C0 } - - { offsetInCU: 0x764, offset: 0xB3FD4, size: 0x8, addend: 0x0, symName: _poly1305_blocks, symObjAddr: 0x5F0, symBinAddr: 0x38B780, symSize: 0x780 } - - { offsetInCU: 0x903, offset: 0xB4173, size: 0x8, addend: 0x0, symName: _poly1305_first_block, symObjAddr: 0x290, symBinAddr: 0x38B420, symSize: 0x360 } - - { offsetInCU: 0xEFC, offset: 0xB476C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_finish, symObjAddr: 0xD70, symBinAddr: 0x38BF00, symSize: 0xAA2 } - - { offsetInCU: 0x10, offset: 0xB4EF5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0x38C9A2, symSize: 0x2AF } - - { offsetInCU: 0x51, offset: 0xB4F36, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0x38C9A2, symSize: 0x2AF } - - { offsetInCU: 0x10, offset: 0xB4F2B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0x38CC51, symSize: 0x1F4 } - - { offsetInCU: 0x54, offset: 0xB4F6F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0x38CC51, symSize: 0x1F4 } - - { offsetInCU: 0x26, offset: 0xB4F77, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x38CE50, symSize: 0x490 } - - { offsetInCU: 0x76, offset: 0xB4FC7, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xACE000, symSize: 0x0 } - - { offsetInCU: 0xFA, offset: 0xB504B, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xAF3000, symSize: 0x0 } - - { offsetInCU: 0x35B, offset: 0xB52AC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x38CE50, symSize: 0x490 } - - { offsetInCU: 0xC5A, offset: 0xB5BAB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x490, symBinAddr: 0x38D2E0, symSize: 0x300 } - - { offsetInCU: 0x1135, offset: 0xB6086, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x790, symBinAddr: 0x38D5E0, symSize: 0x25D } - - { offsetInCU: 0x10, offset: 0xB644B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x38D840, symSize: 0x3A0 } - - { offsetInCU: 0x48, offset: 0xB6483, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x38D840, symSize: 0x3A0 } - - { offsetInCU: 0x4D, offset: 0xB6488, size: 0x8, addend: 0x0, symName: ChaCha20_ssse3, symObjAddr: 0x3A0, symBinAddr: 0x38DBE0, symSize: 0x220 } - - { offsetInCU: 0x60, offset: 0xB649B, size: 0x8, addend: 0x0, symName: ChaCha20_4x, symObjAddr: 0x5C0, symBinAddr: 0x38DE00, symSize: 0xA20 } - - { offsetInCU: 0x76, offset: 0xB64B1, size: 0x8, addend: 0x0, symName: ChaCha20_8x, symObjAddr: 0xFE0, symBinAddr: 0x38E820, symSize: 0xB4C } - - { offsetInCU: 0x10, offset: 0xB64C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0x38F380, symSize: 0x40 } - - { offsetInCU: 0x48, offset: 0xB64FB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0x38F380, symSize: 0x40 } - - { offsetInCU: 0x4D, offset: 0xB6500, size: 0x8, addend: 0x0, symName: _aesni_encrypt2, symObjAddr: 0x40, symBinAddr: 0x38F3C0, symSize: 0x60 } - - { offsetInCU: 0x63, offset: 0xB6516, size: 0x8, addend: 0x0, symName: _aesni_encrypt3, symObjAddr: 0xA0, symBinAddr: 0x38F420, symSize: 0x70 } - - { offsetInCU: 0x79, offset: 0xB652C, size: 0x8, addend: 0x0, symName: _aesni_encrypt4, symObjAddr: 0x110, symBinAddr: 0x38F490, symSize: 0x90 } - - { offsetInCU: 0x8F, offset: 0xB6542, size: 0x8, addend: 0x0, symName: _aesni_encrypt6, symObjAddr: 0x1A0, symBinAddr: 0x38F520, symSize: 0xE0 } - - { offsetInCU: 0xA5, offset: 0xB6558, size: 0x8, addend: 0x0, symName: _aesni_encrypt8, symObjAddr: 0x280, symBinAddr: 0x38F600, symSize: 0x110 } - - { offsetInCU: 0xD9, offset: 0xB658C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x390, symBinAddr: 0x38F710, symSize: 0x940 } - - { offsetInCU: 0xEA, offset: 0xB659D, size: 0x8, addend: 0x0, symName: __aesni_set_encrypt_key, symObjAddr: 0xCD0, symBinAddr: 0x390050, symSize: 0x44D } - - { offsetInCU: 0x10, offset: 0xB6593, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0x3904A0, symSize: 0x160 } - - { offsetInCU: 0x3B, offset: 0xB65BE, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0x3904A0, symSize: 0x160 } - - { offsetInCU: 0x54, offset: 0xB65D7, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core_2x, symObjAddr: 0x160, symBinAddr: 0x390600, symSize: 0x290 } - - { offsetInCU: 0x68, offset: 0xB65EB, size: 0x8, addend: 0x0, symName: _vpaes_schedule_core, symObjAddr: 0x3F0, symBinAddr: 0x390890, symSize: 0xF0 } - - { offsetInCU: 0x7F, offset: 0xB6602, size: 0x8, addend: 0x0, symName: _vpaes_schedule_round, symObjAddr: 0x4E0, symBinAddr: 0x390980, symSize: 0x21 } - - { offsetInCU: 0x99, offset: 0xB661C, size: 0x8, addend: 0x0, symName: _vpaes_schedule_low_round, symObjAddr: 0x501, symBinAddr: 0x3909A1, symSize: 0x9F } - - { offsetInCU: 0xAF, offset: 0xB6632, size: 0x8, addend: 0x0, symName: _vpaes_schedule_transform, symObjAddr: 0x5A0, symBinAddr: 0x390A40, symSize: 0x30 } - - { offsetInCU: 0xC2, offset: 0xB6645, size: 0x8, addend: 0x0, symName: _vpaes_schedule_mangle, symObjAddr: 0x5D0, symBinAddr: 0x390A70, symSize: 0x50 } - - { offsetInCU: 0xE9, offset: 0xB666C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_set_encrypt_key, symObjAddr: 0x620, symBinAddr: 0x390AC0, symSize: 0x30 } - - { offsetInCU: 0xF7, offset: 0xB667A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_encrypt, symObjAddr: 0x650, symBinAddr: 0x390AF0, symSize: 0x20 } - - { offsetInCU: 0x11A, offset: 0xB669D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_ctr32_encrypt_blocks, symObjAddr: 0x670, symBinAddr: 0x390B10, symSize: 0xD0 } - - { offsetInCU: 0x112, offset: 0xB6695, size: 0x8, addend: 0x0, symName: _vpaes_preheat, symObjAddr: 0x740, symBinAddr: 0x390BE0, symSize: 0x31 } - - { offsetInCU: 0x10, offset: 0xB66A5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x390C20, symSize: 0x2A0 } - - { offsetInCU: 0x45, offset: 0xB66DA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x390C20, symSize: 0x2A0 } - - { offsetInCU: 0x4C, offset: 0xB66E1, size: 0x8, addend: 0x0, symName: bn_mul4x_mont, symObjAddr: 0x2A0, symBinAddr: 0x390EC0, symSize: 0x560 } - - { offsetInCU: 0x62, offset: 0xB66F7, size: 0x8, addend: 0x0, symName: bn_sqr8x_mont, symObjAddr: 0x800, symBinAddr: 0x391420, symSize: 0x220 } - - { offsetInCU: 0x79, offset: 0xB670E, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont, symObjAddr: 0xA20, symBinAddr: 0x391640, symSize: 0x570 } - - { offsetInCU: 0x10, offset: 0xB671D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0x391BC0, symSize: 0x660 } - - { offsetInCU: 0x4D, offset: 0xB675A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0x391BC0, symSize: 0x660 } - - { offsetInCU: 0x54, offset: 0xB6761, size: 0x8, addend: 0x0, symName: bn_mul4x_mont_gather5, symObjAddr: 0x660, symBinAddr: 0x392220, symSize: 0x100 } - - { offsetInCU: 0x63, offset: 0xB6770, size: 0x8, addend: 0x0, symName: mul4x_internal, symObjAddr: 0x760, symBinAddr: 0x392320, symSize: 0x7E0 } - - { offsetInCU: 0x85, offset: 0xB6792, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_power5, symObjAddr: 0xF40, symBinAddr: 0x392B00, symSize: 0x180 } - - { offsetInCU: 0xA3, offset: 0xB67B0, size: 0x8, addend: 0x0, symName: __bn_sqr8x_internal, symObjAddr: 0x10C0, symBinAddr: 0x392C80, symSize: 0x579 } - - { offsetInCU: 0xAA, offset: 0xB67B7, size: 0x8, addend: 0x0, symName: __bn_sqr8x_reduction, symObjAddr: 0x1639, symBinAddr: 0x3931F9, symSize: 0x347 } - - { offsetInCU: 0xC0, offset: 0xB67CD, size: 0x8, addend: 0x0, symName: __bn_post4x_internal, symObjAddr: 0x1980, symBinAddr: 0x393540, symSize: 0xA0 } - - { offsetInCU: 0xD9, offset: 0xB67E6, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont_gather5, symObjAddr: 0x1A20, symBinAddr: 0x3935E0, symSize: 0xE0 } - - { offsetInCU: 0xE8, offset: 0xB67F5, size: 0x8, addend: 0x0, symName: mulx4x_internal, symObjAddr: 0x1B00, symBinAddr: 0x3936C0, symSize: 0x7E0 } - - { offsetInCU: 0xF9, offset: 0xB6806, size: 0x8, addend: 0x0, symName: bn_powerx5, symObjAddr: 0x22E0, symBinAddr: 0x393EA0, symSize: 0x160 } - - { offsetInCU: 0x128, offset: 0xB6835, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_internal, symObjAddr: 0x2440, symBinAddr: 0x394000, symSize: 0x637 } - - { offsetInCU: 0x12F, offset: 0xB683C, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_reduction, symObjAddr: 0x2A77, symBinAddr: 0x394637, symSize: 0x329 } - - { offsetInCU: 0x145, offset: 0xB6852, size: 0x8, addend: 0x0, symName: __bn_postx4x_internal, symObjAddr: 0x2DA0, symBinAddr: 0x394960, symSize: 0x90 } - - { offsetInCU: 0x163, offset: 0xB6870, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_scatter5, symObjAddr: 0x2E30, symBinAddr: 0x3949F0, symSize: 0x30 } - - { offsetInCU: 0x178, offset: 0xB6885, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_gather5, symObjAddr: 0x2E60, symBinAddr: 0x394A20, symSize: 0x27F } - - { offsetInCU: 0x10, offset: 0xB6887, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0x394CA0, symSize: 0x80 } - - { offsetInCU: 0x4A, offset: 0xB68C1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0x394CA0, symSize: 0x80 } - - { offsetInCU: 0x64, offset: 0xB68DB, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0x80, symBinAddr: 0x394D20, symSize: 0x360 } - - { offsetInCU: 0x7E, offset: 0xB68F5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x3E0, symBinAddr: 0x395080, symSize: 0x300 } - - { offsetInCU: 0x85, offset: 0xB68FC, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_mul_montx, symObjAddr: 0x6E0, symBinAddr: 0x395380, symSize: 0x3C0 } - - { offsetInCU: 0x9B, offset: 0xB6912, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_sqr_montx, symObjAddr: 0xAA0, symBinAddr: 0x395740, symSize: 0x320 } - - { offsetInCU: 0xB5, offset: 0xB692C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0xDC0, symBinAddr: 0x395A60, symSize: 0xA0 } - - { offsetInCU: 0xC4, offset: 0xB693B, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montq, symObjAddr: 0xE60, symBinAddr: 0x395B00, symSize: 0x240 } - - { offsetInCU: 0xE1, offset: 0xB6958, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x10A0, symBinAddr: 0x395D40, symSize: 0x80 } - - { offsetInCU: 0xF0, offset: 0xB6967, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montq, symObjAddr: 0x1120, symBinAddr: 0x395DC0, symSize: 0x1A0 } - - { offsetInCU: 0x106, offset: 0xB697D, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montx, symObjAddr: 0x12C0, symBinAddr: 0x395F60, symSize: 0x260 } - - { offsetInCU: 0x11C, offset: 0xB6993, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montx, symObjAddr: 0x1520, symBinAddr: 0x3961C0, symSize: 0x1C0 } - - { offsetInCU: 0x142, offset: 0xB69B9, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x16E0, symBinAddr: 0x396380, symSize: 0xE0 } - - { offsetInCU: 0x158, offset: 0xB69CF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x17C0, symBinAddr: 0x396460, symSize: 0xC0 } - - { offsetInCU: 0x162, offset: 0xB69D9, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w5, symObjAddr: 0x1880, symBinAddr: 0x396520, symSize: 0xC0 } - - { offsetInCU: 0x178, offset: 0xB69EF, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w7, symObjAddr: 0x1940, symBinAddr: 0x3965E0, symSize: 0xE0 } - - { offsetInCU: 0x188, offset: 0xB69FF, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_toq, symObjAddr: 0x1A20, symBinAddr: 0x3966C0, symSize: 0x60 } - - { offsetInCU: 0x1A0, offset: 0xB6A17, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromq, symObjAddr: 0x1A80, symBinAddr: 0x396720, symSize: 0x60 } - - { offsetInCU: 0x1B1, offset: 0xB6A28, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subq, symObjAddr: 0x1AE0, symBinAddr: 0x396780, symSize: 0x40 } - - { offsetInCU: 0x1CC, offset: 0xB6A43, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2q, symObjAddr: 0x1B20, symBinAddr: 0x3967C0, symSize: 0x60 } - - { offsetInCU: 0x1ED, offset: 0xB6A64, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x1B80, symBinAddr: 0x396820, symSize: 0x320 } - - { offsetInCU: 0x200, offset: 0xB6A77, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x1EA0, symBinAddr: 0x396B40, symSize: 0x780 } - - { offsetInCU: 0x21D, offset: 0xB6A94, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0x2620, symBinAddr: 0x3972C0, symSize: 0x580 } - - { offsetInCU: 0x222, offset: 0xB6A99, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_tox, symObjAddr: 0x2BA0, symBinAddr: 0x397840, symSize: 0x60 } - - { offsetInCU: 0x23A, offset: 0xB6AB1, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromx, symObjAddr: 0x2C00, symBinAddr: 0x3978A0, symSize: 0x60 } - - { offsetInCU: 0x24B, offset: 0xB6AC2, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subx, symObjAddr: 0x2C60, symBinAddr: 0x397900, symSize: 0x60 } - - { offsetInCU: 0x266, offset: 0xB6ADD, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2x, symObjAddr: 0x2CC0, symBinAddr: 0x397960, symSize: 0x60 } - - { offsetInCU: 0x27F, offset: 0xB6AF6, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_doublex, symObjAddr: 0x2D20, symBinAddr: 0x3979C0, symSize: 0x320 } - - { offsetInCU: 0x292, offset: 0xB6B09, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_addx, symObjAddr: 0x3040, symBinAddr: 0x397CE0, symSize: 0x760 } - - { offsetInCU: 0x2AF, offset: 0xB6B26, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_add_affinex, symObjAddr: 0x37A0, symBinAddr: 0x398440, symSize: 0x555 } - - { offsetInCU: 0x10, offset: 0xB6B25, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0x3989A0, symSize: 0x5A0 } - - { offsetInCU: 0x3D, offset: 0xB6B52, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0x3989A0, symSize: 0x5A0 } - - { offsetInCU: 0x61, offset: 0xB6B76, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_decrypt, symObjAddr: 0x5A0, symBinAddr: 0x398F40, symSize: 0x140 } - - { offsetInCU: 0x63, offset: 0xB6B78, size: 0x8, addend: 0x0, symName: _aesni_ctr32_6x, symObjAddr: 0x6E0, symBinAddr: 0x399080, symSize: 0x180 } - - { offsetInCU: 0x8D, offset: 0xB6BA2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_encrypt, symObjAddr: 0x860, symBinAddr: 0x399200, symSize: 0x423 } - - { offsetInCU: 0x10, offset: 0xB6B9D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x399640, symSize: 0x260 } - - { offsetInCU: 0x48, offset: 0xB6BD5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x399640, symSize: 0x260 } - - { offsetInCU: 0x5F, offset: 0xB6BEC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x260, symBinAddr: 0x3998A0, symSize: 0xC0 } - - { offsetInCU: 0x75, offset: 0xB6C02, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x320, symBinAddr: 0x399960, symSize: 0x660 } - - { offsetInCU: 0x88, offset: 0xB6C15, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_avx, symObjAddr: 0x980, symBinAddr: 0x399FC0, symSize: 0x1A0 } - - { offsetInCU: 0x9F, offset: 0xB6C2C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_avx, symObjAddr: 0xB20, symBinAddr: 0x39A160, symSize: 0x697 } - - { offsetInCU: 0x10, offset: 0xB6C2B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x39A800, symSize: 0x1240 } - - { offsetInCU: 0x51, offset: 0xB6C6C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x39A800, symSize: 0x1240 } - - { offsetInCU: 0x5A, offset: 0xB6C75, size: 0x8, addend: 0x0, symName: sha512_block_data_order_avx, symObjAddr: 0x1240, symBinAddr: 0x39BA40, symSize: 0x1176 } - - { offsetInCU: 0x10, offset: 0xB6C77, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0x39CBC0, symSize: 0x200 } - - { offsetInCU: 0x44, offset: 0xB6CAB, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0x39CBC0, symSize: 0x200 } - - { offsetInCU: 0x66, offset: 0xB6CCD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x200, symBinAddr: 0x39CDC0, symSize: 0x21C0 } - - { offsetInCU: 0x7C, offset: 0xB6CE3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x23C0, symBinAddr: 0x39EF80, symSize: 0x1D2D } - - { offsetInCU: 0x83, offset: 0xB6CEA, size: 0x8, addend: 0x0, symName: process_extra_in_trailer, symObjAddr: 0x40ED, symBinAddr: 0x3A0CAD, symSize: 0x553 } - - { offsetInCU: 0x9C, offset: 0xB6D03, size: 0x8, addend: 0x0, symName: chacha20_poly1305_open_avx2, symObjAddr: 0x4640, symBinAddr: 0x3A1200, symSize: 0x25C0 } - - { offsetInCU: 0xB2, offset: 0xB6D19, size: 0x8, addend: 0x0, symName: chacha20_poly1305_seal_avx2, symObjAddr: 0x6C00, symBinAddr: 0x3A37C0, symSize: 0x2F01 } - - { offsetInCU: 0x10, offset: 0xB6D1B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3A6700, symSize: 0x1200 } - - { offsetInCU: 0x51, offset: 0xB6D5C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3A6700, symSize: 0x1200 } - - { offsetInCU: 0x5D, offset: 0xB6D68, size: 0x8, addend: 0x0, symName: sha256_block_data_order_shaext, symObjAddr: 0x1200, symBinAddr: 0x3A7900, symSize: 0x340 } - - { offsetInCU: 0x72, offset: 0xB6D7D, size: 0x8, addend: 0x0, symName: sha256_block_data_order_ssse3, symObjAddr: 0x1540, symBinAddr: 0x3A7C40, symSize: 0xEC0 } - - { offsetInCU: 0x86, offset: 0xB6D91, size: 0x8, addend: 0x0, symName: sha256_block_data_order_avx, symObjAddr: 0x2400, symBinAddr: 0x3A8B00, symSize: 0xEF7 } + - { offsetInCU: 0x34, offset: 0xD39D2, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionString, symObjAddr: 0x0, symBinAddr: 0xAA3000, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xD3A07, size: 0x8, addend: 0x0, symName: _CanvasNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0xAA3038, symSize: 0x0 } + - { offsetInCU: 0x27, offset: 0xD3A44, size: 0x8, addend: 0x0, symName: '-[NSCMTLView canvasView]', symObjAddr: 0x0, symBinAddr: 0x2580, symSize: 0x20 } + - { offsetInCU: 0x110, offset: 0xD3B2D, size: 0x8, addend: 0x0, symName: '-[NSCMTLView canvasView]', symObjAddr: 0x0, symBinAddr: 0x2580, symSize: 0x20 } + - { offsetInCU: 0x15A, offset: 0xD3B77, size: 0x8, addend: 0x0, symName: '+[NSCMTLView layerClass]', symObjAddr: 0x20, symBinAddr: 0x25A0, symSize: 0x20 } + - { offsetInCU: 0x199, offset: 0xD3BB6, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setDrawableSize:]', symObjAddr: 0x40, symBinAddr: 0x25C0, symSize: 0x60 } + - { offsetInCU: 0x227, offset: 0xD3C44, size: 0x8, addend: 0x0, symName: '-[NSCMTLView drawableSize]', symObjAddr: 0xA0, symBinAddr: 0x2620, symSize: 0x60 } + - { offsetInCU: 0x296, offset: 0xD3CB3, size: 0x8, addend: 0x0, symName: '-[NSCMTLView initWithFrame:]', symObjAddr: 0x100, symBinAddr: 0x2680, symSize: 0x70 } + - { offsetInCU: 0x2F0, offset: 0xD3D0D, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setup]', symObjAddr: 0x170, symBinAddr: 0x26F0, symSize: 0xE0 } + - { offsetInCU: 0x418, offset: 0xD3E35, size: 0x8, addend: 0x0, symName: '-[NSCMTLView present]', symObjAddr: 0x250, symBinAddr: 0x27D0, symSize: 0x130 } + - { offsetInCU: 0x517, offset: 0xD3F34, size: 0x8, addend: 0x0, symName: '-[NSCMTLView getDevicePtr]', symObjAddr: 0x380, symBinAddr: 0x2900, symSize: 0xA0 } + - { offsetInCU: 0x5E3, offset: 0xD4000, size: 0x8, addend: 0x0, symName: '-[NSCMTLView getQueuePtr]', symObjAddr: 0x420, symBinAddr: 0x29A0, symSize: 0xD0 } + - { offsetInCU: 0x696, offset: 0xD40B3, size: 0x8, addend: 0x0, symName: '-[NSCMTLView canvas]', symObjAddr: 0x4F0, symBinAddr: 0x2A70, symSize: 0x20 } + - { offsetInCU: 0x6CD, offset: 0xD40EA, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setCanvas:]', symObjAddr: 0x510, symBinAddr: 0x2A90, symSize: 0x20 } + - { offsetInCU: 0x70C, offset: 0xD4129, size: 0x8, addend: 0x0, symName: '-[NSCMTLView queue]', symObjAddr: 0x530, symBinAddr: 0x2AB0, symSize: 0x20 } + - { offsetInCU: 0x743, offset: 0xD4160, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setQueue:]', symObjAddr: 0x550, symBinAddr: 0x2AD0, symSize: 0x20 } + - { offsetInCU: 0x782, offset: 0xD419F, size: 0x8, addend: 0x0, symName: '-[NSCMTLView state]', symObjAddr: 0x570, symBinAddr: 0x2AF0, symSize: 0x10 } + - { offsetInCU: 0x7B7, offset: 0xD41D4, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setState:]', symObjAddr: 0x580, symBinAddr: 0x2B00, symSize: 0x10 } + - { offsetInCU: 0x7F4, offset: 0xD4211, size: 0x8, addend: 0x0, symName: '-[NSCMTLView sampleCount]', symObjAddr: 0x590, symBinAddr: 0x2B10, symSize: 0x20 } + - { offsetInCU: 0x829, offset: 0xD4246, size: 0x8, addend: 0x0, symName: '-[NSCMTLView setSampleCount:]', symObjAddr: 0x5B0, symBinAddr: 0x2B30, symSize: 0x20 } + - { offsetInCU: 0x866, offset: 0xD4283, size: 0x8, addend: 0x0, symName: '-[NSCMTLView .cxx_destruct]', symObjAddr: 0x5D0, symBinAddr: 0x2B50, symSize: 0x2F } + - { offsetInCU: 0x3F, offset: 0xD436D, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwCP', symObjAddr: 0x20, symBinAddr: 0x2BA0, symSize: 0x30 } + - { offsetInCU: 0x53, offset: 0xD4381, size: 0x8, addend: 0x0, symName: ___swift_noop_void_return, symObjAddr: 0x50, symBinAddr: 0x2BD0, symSize: 0x10 } + - { offsetInCU: 0x67, offset: 0xD4395, size: 0x8, addend: 0x0, symName: ___swift_memcpy32_8, symObjAddr: 0x60, symBinAddr: 0x2BE0, symSize: 0x20 } + - { offsetInCU: 0x7B, offset: 0xD43A9, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwet', symObjAddr: 0x80, symBinAddr: 0x2C00, symSize: 0x20 } + - { offsetInCU: 0x8F, offset: 0xD43BD, size: 0x8, addend: 0x0, symName: '_$sSo6CGRectVwst', symObjAddr: 0xA0, symBinAddr: 0x2C20, symSize: 0x30 } + - { offsetInCU: 0xA3, offset: 0xD43D1, size: 0x8, addend: 0x0, symName: ___swift_memcpy16_8, symObjAddr: 0x100, symBinAddr: 0x2C70, symSize: 0x10 } + - { offsetInCU: 0xB7, offset: 0xD43E5, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwet', symObjAddr: 0x110, symBinAddr: 0x2C80, symSize: 0x20 } + - { offsetInCU: 0xCB, offset: 0xD43F9, size: 0x8, addend: 0x0, symName: '_$sSo6CGSizeVwst', symObjAddr: 0x130, symBinAddr: 0x2CA0, symSize: 0x30 } + - { offsetInCU: 0x4F, offset: 0xD45E2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC11_WriteQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x30B0, symBinAddr: 0x12AB4B8, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xD45FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10_ReadQueue33_05178D28796EA758448493B56DC45144LLSo011NSOperationE0CSgvpZ', symObjAddr: 0x30B8, symBinAddr: 0x12AB4C0, symSize: 0x0 } + - { offsetInCU: 0x9D, offset: 0xD4630, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTo', symObjAddr: 0x10, symBinAddr: 0x2D70, symSize: 0x40 } + - { offsetInCU: 0xF3, offset: 0xD4686, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x60, symBinAddr: 0x2DC0, symSize: 0x60 } + - { offsetInCU: 0x144, offset: 0xD46D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0xD0, symBinAddr: 0x2E30, symSize: 0x40 } + - { offsetInCU: 0x197, offset: 0xD472A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC22loadImageAssetWithPathySbs5Int64V_SStFZTo', symObjAddr: 0x170, symBinAddr: 0x2ED0, symSize: 0x70 } + - { offsetInCU: 0x24C, offset: 0xD47DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x1F0, symBinAddr: 0x2F50, symSize: 0x60 } + - { offsetInCU: 0x2B1, offset: 0xD4844, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0x260, symBinAddr: 0x2FC0, symSize: 0x70 } + - { offsetInCU: 0x32A, offset: 0xD48BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x2E0, symBinAddr: 0x3040, symSize: 0x90 } + - { offsetInCU: 0x387, offset: 0xD491A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZTo', symObjAddr: 0x390, symBinAddr: 0x30F0, symSize: 0x30 } + - { offsetInCU: 0x425, offset: 0xD49B8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZTo', symObjAddr: 0x3D0, symBinAddr: 0x3130, symSize: 0x50 } + - { offsetInCU: 0x482, offset: 0xD4A15, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AA9NSCCanvasCs6UInt32VAJtFZTo', symObjAddr: 0x480, symBinAddr: 0x31E0, symSize: 0x60 } + - { offsetInCU: 0x5AE, offset: 0xD4B41, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17initWebGLWithViewys5Int64VAA9NSCCanvasC_S4bs5Int32VS5bAJtFZTo', symObjAddr: 0x4F0, symBinAddr: 0x3250, symSize: 0x90 } + - { offsetInCU: 0x638, offset: 0xD4BCB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC27initWebGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHtFZTo', symObjAddr: 0x5F0, symBinAddr: 0x3350, symSize: 0x70 } + - { offsetInCU: 0x6CC, offset: 0xD4C5F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZTo', symObjAddr: 0x670, symBinAddr: 0x33D0, symSize: 0x10 } + - { offsetInCU: 0x733, offset: 0xD4CC6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZTo', symObjAddr: 0x690, symBinAddr: 0x33F0, symSize: 0x10 } + - { offsetInCU: 0x78A, offset: 0xD4D1D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24flush2DContextAndSyncCPUyys5Int64VFZTo', symObjAddr: 0x6B0, symBinAddr: 0x3410, symSize: 0x10 } + - { offsetInCU: 0x7E1, offset: 0xD4D74, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15presentDrawableyys5Int64VFZTo', symObjAddr: 0x6D0, symBinAddr: 0x3430, symSize: 0x10 } + - { offsetInCU: 0x838, offset: 0xD4DCB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10flushWebGLySbs5Int64VFZTo', symObjAddr: 0x6F0, symBinAddr: 0x3450, symSize: 0x10 } + - { offsetInCU: 0x88F, offset: 0xD4E22, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12releaseWebGLyys5Int64VFZTo', symObjAddr: 0x710, symBinAddr: 0x3470, symSize: 0x10 } + - { offsetInCU: 0x909, offset: 0xD4E9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAA9NSCCanvasC_s5Int32VAJSbSfAJSfAJtFZTo', symObjAddr: 0x7B0, symBinAddr: 0x3510, symSize: 0x90 } + - { offsetInCU: 0xA3F, offset: 0xD4FD2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20create2DContextMetalys5Int64VAA9NSCCanvasC_SbSfs5Int32VSfAJtFZTo', symObjAddr: 0x850, symBinAddr: 0x35B0, symSize: 0x70 } + - { offsetInCU: 0xA9C, offset: 0xD502F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26updateWebGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZTo', symObjAddr: 0x8D0, symBinAddr: 0x3630, symSize: 0x20 } + - { offsetInCU: 0xB17, offset: 0xD50AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTo', symObjAddr: 0xA90, symBinAddr: 0x37F0, symSize: 0xA0 } + - { offsetInCU: 0xB68, offset: 0xD50FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZTo', symObjAddr: 0xD90, symBinAddr: 0x3AF0, symSize: 0xA0 } + - { offsetInCU: 0xBB9, offset: 0xD514C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZTo', symObjAddr: 0x10F0, symBinAddr: 0x3E50, symSize: 0xA0 } + - { offsetInCU: 0xC15, offset: 0xD51A8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTo', symObjAddr: 0x1540, symBinAddr: 0x42A0, symSize: 0xD0 } + - { offsetInCU: 0xC5D, offset: 0xD51F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTo', symObjAddr: 0x1620, symBinAddr: 0x4380, symSize: 0x40 } + - { offsetInCU: 0xCBD, offset: 0xD5250, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfcTo', symObjAddr: 0x16B0, symBinAddr: 0x4410, symSize: 0x30 } + - { offsetInCU: 0xD10, offset: 0xD52A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZTf4nd_n', symObjAddr: 0x1720, symBinAddr: 0x4480, symSize: 0x2C0 } + - { offsetInCU: 0xF70, offset: 0xD5503, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZTf4nnnd_n', symObjAddr: 0x19E0, symBinAddr: 0x4740, symSize: 0x1C0 } + - { offsetInCU: 0x116A, offset: 0xD56FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZTf4nnd_n', symObjAddr: 0x1BA0, symBinAddr: 0x4900, symSize: 0xD0 } + - { offsetInCU: 0x1267, offset: 0xD57FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZTf4nnnnd_n', symObjAddr: 0x1C70, symBinAddr: 0x49D0, symSize: 0x130 } + - { offsetInCU: 0x13DC, offset: 0xD596F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZTf4nnnnnnd_n', symObjAddr: 0x1DA0, symBinAddr: 0x4B00, symSize: 0x150 } + - { offsetInCU: 0x1571, offset: 0xD5B04, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZTf4nnnnnnnnnnd_n', symObjAddr: 0x1EF0, symBinAddr: 0x4C50, symSize: 0x180 } + - { offsetInCU: 0x1746, offset: 0xD5CD9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZTf4nnnnd_n', symObjAddr: 0x2070, symBinAddr: 0x4DD0, symSize: 0x80 } + - { offsetInCU: 0x183A, offset: 0xD5DCD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17initWebGLWithViewys5Int64VAA9NSCCanvasC_S4bs5Int32VS5bAJtFZTf4nnnnnnnnnnnnd_n', symObjAddr: 0x20F0, symBinAddr: 0x4E50, symSize: 0x100 } + - { offsetInCU: 0x19B7, offset: 0xD5F4A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20create2DContextMetalys5Int64VAA9NSCCanvasC_SbSfs5Int32VSfAJtFZTf4nnnnnnd_n', symObjAddr: 0x21F0, symBinAddr: 0x4F50, symSize: 0xE0 } + - { offsetInCU: 0x1B67, offset: 0xD60FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZTf4nnnd_n', symObjAddr: 0x22D0, symBinAddr: 0x5030, symSize: 0x1D0 } + - { offsetInCU: 0x1C31, offset: 0xD61C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZTf4nnnnd_n', symObjAddr: 0x2660, symBinAddr: 0x53C0, symSize: 0x200 } + - { offsetInCU: 0x1D12, offset: 0xD62A5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZTf4d_n', symObjAddr: 0x2860, symBinAddr: 0x55C0, symSize: 0x110 } + - { offsetInCU: 0x1EDC, offset: 0xD646F, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TR', symObjAddr: 0xB30, symBinAddr: 0x3890, symSize: 0x70 } + - { offsetInCU: 0x1EF4, offset: 0xD6487, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TR', symObjAddr: 0xE30, symBinAddr: 0x3B90, symSize: 0x50 } + - { offsetInCU: 0x1F61, offset: 0xD64F4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfETo', symObjAddr: 0x1710, symBinAddr: 0x4470, symSize: 0x10 } + - { offsetInCU: 0x1FF7, offset: 0xD658A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCMa', symObjAddr: 0x2970, symBinAddr: 0x56D0, symSize: 0x20 } + - { offsetInCU: 0x200B, offset: 0xD659E, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgACIeyByy_SSSgADIeggg_TRTA', symObjAddr: 0x29B0, symBinAddr: 0x5710, symSize: 0x10 } + - { offsetInCU: 0x202A, offset: 0xD65BD, size: 0x8, addend: 0x0, symName: '_$sSo7NSErrorCSg10ObjectiveC8ObjCBoolVIeyByy_ACSbIeggy_TRTA', symObjAddr: 0x29C0, symBinAddr: 0x5720, symSize: 0x20 } + - { offsetInCU: 0x2053, offset: 0xD65E6, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgSo6NSDataCSgIeyByy_SSSgAFIeggg_TRTA', symObjAddr: 0x29E0, symBinAddr: 0x5740, symSize: 0x10 } + - { offsetInCU: 0x2067, offset: 0xD65FA, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCMa', symObjAddr: 0x29F0, symBinAddr: 0x5750, symSize: 0x30 } + - { offsetInCU: 0x207B, offset: 0xD660E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_TA', symObjAddr: 0x2A70, symBinAddr: 0x57D0, symSize: 0x40 } + - { offsetInCU: 0x208F, offset: 0xD6622, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x2AB0, symBinAddr: 0x5810, symSize: 0x20 } + - { offsetInCU: 0x20A3, offset: 0xD6636, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x2AD0, symBinAddr: 0x5830, symSize: 0x10 } + - { offsetInCU: 0x20B7, offset: 0xD664A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2B00, symBinAddr: 0x5860, symSize: 0x40 } + - { offsetInCU: 0x20EB, offset: 0xD667E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2BC0, symBinAddr: 0x5920, symSize: 0x40 } + - { offsetInCU: 0x2129, offset: 0xD66BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2C00, symBinAddr: 0x5960, symSize: 0x20 } + - { offsetInCU: 0x215D, offset: 0xD66F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2CB0, symBinAddr: 0x5A10, symSize: 0x40 } + - { offsetInCU: 0x2191, offset: 0xD6724, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_yyYbcfU0_TA', symObjAddr: 0x2D20, symBinAddr: 0x5A80, symSize: 0x30 } + - { offsetInCU: 0x21CD, offset: 0xD6760, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_TA', symObjAddr: 0x2DA0, symBinAddr: 0x5B00, symSize: 0x30 } + - { offsetInCU: 0x21E1, offset: 0xD6774, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_yyYbcfU_TA', symObjAddr: 0x2DD0, symBinAddr: 0x5B30, symSize: 0x40 } + - { offsetInCU: 0x26D3, offset: 0xD6C66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC19getBytesFromUIImageySo13NSMutableDataCSo0G0CFZ', symObjAddr: 0x0, symBinAddr: 0x2D60, symSize: 0x10 } + - { offsetInCU: 0x26EE, offset: 0xD6C81, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x50, symBinAddr: 0x2DB0, symSize: 0x10 } + - { offsetInCU: 0x2709, offset: 0xD6C9C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC25loadImageAssetWithContextySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0xC0, symBinAddr: 0x2E20, symSize: 0x10 } + - { offsetInCU: 0x272B, offset: 0xD6CBE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC22loadImageAssetWithPathySbs5Int64V_SStFZ', symObjAddr: 0x110, symBinAddr: 0x2E70, symSize: 0x60 } + - { offsetInCU: 0x2807, offset: 0xD6D9A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x1E0, symBinAddr: 0x2F40, symSize: 0x10 } + - { offsetInCU: 0x2822, offset: 0xD6DB5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2dx2dy2dw2dhSbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0x250, symBinAddr: 0x2FB0, symSize: 0x10 } + - { offsetInCU: 0x283D, offset: 0xD6DD0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9drawImage7context5image2sx2sy2sw2sh2dx2dy2dw2dhSbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x2D0, symBinAddr: 0x3030, symSize: 0x10 } + - { offsetInCU: 0x2871, offset: 0xD6E04, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC23initWebGPUWithViewLayerys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZ', symObjAddr: 0x370, symBinAddr: 0x30D0, symSize: 0x20 } + - { offsetInCU: 0x2915, offset: 0xD6EA8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC18initWebGPUWithViewys5Int64VAF_AA9NSCCanvasCs6UInt32VAJtFZ', symObjAddr: 0x3C0, symBinAddr: 0x3120, symSize: 0x10 } + - { offsetInCU: 0x2983, offset: 0xD6F16, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20resizeWebGPUWithViewyys5Int64V_AA9NSCCanvasCs6UInt32VAJtFZ', symObjAddr: 0x420, symBinAddr: 0x3180, symSize: 0x60 } + - { offsetInCU: 0x2A8A, offset: 0xD701D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17initWebGLWithViewys5Int64VAA9NSCCanvasC_S4bs5Int32VS5bAJtFZ', symObjAddr: 0x4E0, symBinAddr: 0x3240, symSize: 0x10 } + - { offsetInCU: 0x2AA5, offset: 0xD7038, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC27initWebGLWithWidthAndHeightys5Int64Vs5Int32V_AHS4bAHS5bAHtFZ', symObjAddr: 0x580, symBinAddr: 0x32E0, symSize: 0x70 } + - { offsetInCU: 0x2C2C, offset: 0xD71BF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15resize2DContextyys5Int64V_S2ftFZ', symObjAddr: 0x660, symBinAddr: 0x33C0, symSize: 0x10 } + - { offsetInCU: 0x2C9C, offset: 0xD722F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC14flush2DContextyys5Int64VFZ', symObjAddr: 0x680, symBinAddr: 0x33E0, symSize: 0x10 } + - { offsetInCU: 0x2CDF, offset: 0xD7272, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC24flush2DContextAndSyncCPUyys5Int64VFZ', symObjAddr: 0x6A0, symBinAddr: 0x3400, symSize: 0x10 } + - { offsetInCU: 0x2D22, offset: 0xD72B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15presentDrawableyys5Int64VFZ', symObjAddr: 0x6C0, symBinAddr: 0x3420, symSize: 0x10 } + - { offsetInCU: 0x2D65, offset: 0xD72F8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10flushWebGLySbs5Int64VFZ', symObjAddr: 0x6E0, symBinAddr: 0x3440, symSize: 0x10 } + - { offsetInCU: 0x2DAA, offset: 0xD733D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC12releaseWebGLyys5Int64VFZ', symObjAddr: 0x700, symBinAddr: 0x3460, symSize: 0x10 } + - { offsetInCU: 0x2E49, offset: 0xD73DC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC15create2DContextys5Int64VAA9NSCCanvasC_s5Int32VAJSbSfAJSfAJtFZ', symObjAddr: 0x720, symBinAddr: 0x3480, symSize: 0x90 } + - { offsetInCU: 0x2FAA, offset: 0xD753D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC20create2DContextMetalys5Int64VAA9NSCCanvasC_SbSfs5Int32VSfAJtFZ', symObjAddr: 0x840, symBinAddr: 0x35A0, symSize: 0x10 } + - { offsetInCU: 0x2FC5, offset: 0xD7558, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC26updateWebGLSurfaceWithViewyys5Int64V_s5Int32VAhFtFZ', symObjAddr: 0x8C0, symBinAddr: 0x3620, symSize: 0x10 } + - { offsetInCU: 0x3050, offset: 0xD75E3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZ', symObjAddr: 0x8F0, symBinAddr: 0x3650, symSize: 0x10 } + - { offsetInCU: 0x3064, offset: 0xD75F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC9writeFileyySo6NSDataC_SSySSSg_AGtctFZyyYbcfU_', symObjAddr: 0x900, symBinAddr: 0x3660, symSize: 0x190 } + - { offsetInCU: 0x3104, offset: 0xD7697, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZ', symObjAddr: 0xBA0, symBinAddr: 0x3900, symSize: 0x30 } + - { offsetInCU: 0x3118, offset: 0xD76AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC8readFileyySS_ySSSg_So6NSDataCSgtctFZyyYbcfU_', symObjAddr: 0xBD0, symBinAddr: 0x3930, symSize: 0x1C0 } + - { offsetInCU: 0x31FC, offset: 0xD778F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZ', symObjAddr: 0xE80, symBinAddr: 0x3BE0, symSize: 0x30 } + - { offsetInCU: 0x3210, offset: 0xD77A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC10deleteFileyySS_ySo7NSErrorCSg_SbtctFZyyYbcfU_', symObjAddr: 0xEB0, symBinAddr: 0x3C10, symSize: 0x240 } + - { offsetInCU: 0x32C4, offset: 0xD7857, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZ', symObjAddr: 0x1190, symBinAddr: 0x3EF0, symSize: 0x10 } + - { offsetInCU: 0x32D8, offset: 0xD786B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC17handleBase64ImageyySS_S2SySSSg_AEtctFZyyYbcfU_', symObjAddr: 0x11A0, symBinAddr: 0x3F00, symSize: 0x3A0 } + - { offsetInCU: 0x356E, offset: 0xD7B01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersC32getPixelsPerInchForCurrentDeviceSSyFZ', symObjAddr: 0x1610, symBinAddr: 0x4370, symSize: 0x10 } + - { offsetInCU: 0x3589, offset: 0xD7B1C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfC', symObjAddr: 0x1660, symBinAddr: 0x43C0, symSize: 0x20 } + - { offsetInCU: 0x359D, offset: 0xD7B30, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCACycfc', symObjAddr: 0x1680, symBinAddr: 0x43E0, symSize: 0x30 } + - { offsetInCU: 0x35D3, offset: 0xD7B66, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7HelpersCfD', symObjAddr: 0x16E0, symBinAddr: 0x4440, symSize: 0x30 } + - { offsetInCU: 0x99, offset: 0xD7E45, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSYAASY8rawValuexSg03RawG0Qz_tcfCTW', symObjAddr: 0x180, symBinAddr: 0x5F80, symSize: 0x20 } + - { offsetInCU: 0xCB, offset: 0xD7E77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSYAASY8rawValue03RawG0QzvgTW', symObjAddr: 0x1A0, symBinAddr: 0x5FA0, symSize: 0x40 } + - { offsetInCU: 0xF8, offset: 0xD7EA4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValueAESgs6UInt32V_tcfCTf4nd_n', symObjAddr: 0xB20, symBinAddr: 0x6920, symSize: 0x20 } + - { offsetInCU: 0x354, offset: 0xD8100, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfcTo', symObjAddr: 0xAA0, symBinAddr: 0x68A0, symSize: 0x30 } + - { offsetInCU: 0x3D1, offset: 0xD817D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC10initValues33_A4E23F85F6FCD1159823157DE55F7C54LL2ts11pixelBufferAC0cD6FormatOs5Int64V_So11CVBufferRefatKFZTf4dnd_n', symObjAddr: 0xB60, symBinAddr: 0x6960, symSize: 0x130 } + - { offsetInCU: 0x47D, offset: 0xD8229, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11pixelBufferSo11CVBufferRefavpACTk', symObjAddr: 0x1E0, symBinAddr: 0x5FE0, symSize: 0x60 } + - { offsetInCU: 0x4EC, offset: 0xD8298, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCfETo', symObjAddr: 0xB00, symBinAddr: 0x6900, symSize: 0x20 } + - { offsetInCU: 0x51B, offset: 0xD82C7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCMa', symObjAddr: 0xB40, symBinAddr: 0x6940, symSize: 0x20 } + - { offsetInCU: 0x544, offset: 0xD82F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASQWb', symObjAddr: 0xC90, symBinAddr: 0x6A90, symSize: 0x10 } + - { offsetInCU: 0x558, offset: 0xD8304, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOAESQAAWl', symObjAddr: 0xCA0, symBinAddr: 0x6AA0, symSize: 0x30 } + - { offsetInCU: 0x56C, offset: 0xD8318, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOMa', symObjAddr: 0xF70, symBinAddr: 0x6D70, symSize: 0x10 } + - { offsetInCU: 0x580, offset: 0xD832C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOAEs5ErrorAAWl', symObjAddr: 0xF80, symBinAddr: 0x6D80, symSize: 0x2E } + - { offsetInCU: 0x5AE, offset: 0xD835A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x50, symBinAddr: 0x5E50, symSize: 0x10 } + - { offsetInCU: 0x5CA, offset: 0xD8376, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH9hashValueSivgTW', symObjAddr: 0x60, symBinAddr: 0x5E60, symSize: 0x10 } + - { offsetInCU: 0x650, offset: 0xD83FC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0xD0, symBinAddr: 0x5ED0, symSize: 0x40 } + - { offsetInCU: 0x6C0, offset: 0xD846C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x110, symBinAddr: 0x5F10, symSize: 0x10 } + - { offsetInCU: 0x8E5, offset: 0xD8691, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValues6UInt32Vvg', symObjAddr: 0x0, symBinAddr: 0x5E00, symSize: 0x40 } + - { offsetInCU: 0x90A, offset: 0xD86B6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC0cD6FormatO8rawValueAESgs6UInt32V_tcfC', symObjAddr: 0x40, symBinAddr: 0x5E40, symSize: 0x10 } + - { offsetInCU: 0x952, offset: 0xD86FE, size: 0x8, addend: 0x0, symName: '_$sSYsSHRzSH8RawValueSYRpzrlE04hashB0Sivg12CanvasNative13NSCVideoFrameC0fG6FormatO_Tgq5', symObjAddr: 0x70, symBinAddr: 0x5E70, symSize: 0x60 } + - { offsetInCU: 0x9E9, offset: 0xD8795, size: 0x8, addend: 0x0, symName: '_$sSYsSHRzSH8RawValueSYRpzrlE08_rawHashB04seedS2i_tF12CanvasNative13NSCVideoFrameC0hI6FormatO_Tgq5', symObjAddr: 0x120, symBinAddr: 0x5F20, symSize: 0x60 } + - { offsetInCU: 0xA97, offset: 0xD8843, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11pixelBufferSo11CVBufferRefavg', symObjAddr: 0x240, symBinAddr: 0x6040, symSize: 0x40 } + - { offsetInCU: 0xAB4, offset: 0xD8860, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC9timestamps5Int64Vvg', symObjAddr: 0x280, symBinAddr: 0x6080, symSize: 0x30 } + - { offsetInCU: 0xAD1, offset: 0xD887D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6formatAC0cD6FormatOvg', symObjAddr: 0x2B0, symBinAddr: 0x60B0, symSize: 0x30 } + - { offsetInCU: 0xB2F, offset: 0xD88DB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC010getCurrentD0yACSgSo8AVPlayerC_So0G15ItemVideoOutputCtKFZ', symObjAddr: 0x2E0, symBinAddr: 0x60E0, symSize: 0x100 } + - { offsetInCU: 0xBDA, offset: 0xD8986, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11currentTime5frameACSo6CMTimea_So11CVBufferRefatKcfC', symObjAddr: 0x3E0, symBinAddr: 0x61E0, symSize: 0x50 } + - { offsetInCU: 0xC11, offset: 0xD89BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11currentTime5frameACSo6CMTimea_So11CVBufferRefatKcfc', symObjAddr: 0x430, symBinAddr: 0x6230, symSize: 0x160 } + - { offsetInCU: 0xD0C, offset: 0xD8AB8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6buffer2tsACSo11CVBufferRefa_s5Int64VtKcfC', symObjAddr: 0x590, symBinAddr: 0x6390, symSize: 0x100 } + - { offsetInCU: 0xD60, offset: 0xD8B0C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC6buffer2tsACSo11CVBufferRefa_s5Int64VtKcfc', symObjAddr: 0x690, symBinAddr: 0x6490, symSize: 0x100 } + - { offsetInCU: 0xDE1, offset: 0xD8B8D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC5cloneACyKF', symObjAddr: 0x790, symBinAddr: 0x6590, symSize: 0x140 } + - { offsetInCU: 0xEC3, offset: 0xD8C6F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC9codedRectSo6CGRectVvg', symObjAddr: 0x950, symBinAddr: 0x6750, symSize: 0x60 } + - { offsetInCU: 0xF88, offset: 0xD8D34, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameC11visibleRectSo6CGRectVvg', symObjAddr: 0x9B0, symBinAddr: 0x67B0, symSize: 0xA0 } + - { offsetInCU: 0x10E2, offset: 0xD8E8E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfC', symObjAddr: 0xA50, symBinAddr: 0x6850, symSize: 0x20 } + - { offsetInCU: 0x10F6, offset: 0xD8EA2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCACycfc', symObjAddr: 0xA70, symBinAddr: 0x6870, symSize: 0x30 } + - { offsetInCU: 0x114F, offset: 0xD8EFB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCVideoFrameCfD', symObjAddr: 0xAD0, symBinAddr: 0x68D0, symSize: 0x30 } + - { offsetInCU: 0x4F, offset: 0xD8FF9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvpZ', symObjAddr: 0x79C8, symBinAddr: 0x12AB548, symSize: 0x0 } + - { offsetInCU: 0x69, offset: 0xD9013, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5storeSo19NSMutableDictionaryCvpZ', symObjAddr: 0x79D0, symBinAddr: 0x12AB550, symSize: 0x0 } + - { offsetInCU: 0x83, offset: 0xD902D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LLSo10NSMapTableCySo8NSStringCACGvpZ', symObjAddr: 0x79D8, symBinAddr: 0x12AB558, symSize: 0x0 } + - { offsetInCU: 0xE7, offset: 0xD9091, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSYAASY8rawValuexSg03RawF0Qz_tcfCTW', symObjAddr: 0x3B0, symBinAddr: 0x7160, symSize: 0x20 } + - { offsetInCU: 0x119, offset: 0xD90C3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSYAASY8rawValue03RawF0QzvgTW', symObjAddr: 0x3D0, symBinAddr: 0x7180, symSize: 0x40 } + - { offsetInCU: 0x146, offset: 0xD90F0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValueAESgs6UInt32V_tcfCTf4nd_n', symObjAddr: 0x6460, symBinAddr: 0xD210, symSize: 0x20 } + - { offsetInCU: 0x1D1, offset: 0xD917B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvgZTo', symObjAddr: 0xD0, symBinAddr: 0x6E80, symSize: 0x30 } + - { offsetInCU: 0x21F, offset: 0xD91C9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvsZTo', symObjAddr: 0x140, symBinAddr: 0x6EF0, symSize: 0x30 } + - { offsetInCU: 0x292, offset: 0xD923C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x1A0, symBinAddr: 0x6F50, symSize: 0x10 } + - { offsetInCU: 0x308, offset: 0xD92B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH9hashValueSivgTW', symObjAddr: 0x1B0, symBinAddr: 0x6F60, symSize: 0x40 } + - { offsetInCU: 0x3EC, offset: 0xD9396, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x1F0, symBinAddr: 0x6FA0, symSize: 0x20 } + - { offsetInCU: 0x475, offset: 0xD941F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvgTo', symObjAddr: 0x410, symBinAddr: 0x71C0, symSize: 0x40 } + - { offsetInCU: 0x4E1, offset: 0xD948B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvsTo', symObjAddr: 0x480, symBinAddr: 0x7230, symSize: 0x60 } + - { offsetInCU: 0x57B, offset: 0xD9525, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvgTo', symObjAddr: 0x590, symBinAddr: 0x7340, symSize: 0x40 } + - { offsetInCU: 0x5B6, offset: 0xD9560, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvsTo', symObjAddr: 0x600, symBinAddr: 0x73B0, symSize: 0x30 } + - { offsetInCU: 0x671, offset: 0xD961B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5glPtrSvSgvgTo', symObjAddr: 0xC00, symBinAddr: 0x79B0, symSize: 0x20 } + - { offsetInCU: 0x6C7, offset: 0xD9671, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5glPtrSvSgvsTo', symObjAddr: 0xC20, symBinAddr: 0x79D0, symSize: 0x20 } + - { offsetInCU: 0x720, offset: 0xD96CA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvgTo', symObjAddr: 0xC40, symBinAddr: 0x79F0, symSize: 0x20 } + - { offsetInCU: 0x776, offset: 0xD9720, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6mtlPtrSvSgvsTo', symObjAddr: 0xC60, symBinAddr: 0x7A10, symSize: 0x20 } + - { offsetInCU: 0x7CF, offset: 0xD9779, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11mtlLayerPtrSvSgvgTo', symObjAddr: 0xC80, symBinAddr: 0x7A30, symSize: 0x20 } + - { offsetInCU: 0x825, offset: 0xD97CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11mtlLayerPtrSvSgvsTo', symObjAddr: 0xCA0, symBinAddr: 0x7A50, symSize: 0x20 } + - { offsetInCU: 0x87E, offset: 0xD9828, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14getMtlLayerPtrSvyFTo', symObjAddr: 0xE00, symBinAddr: 0x7BB0, symSize: 0x70 } + - { offsetInCU: 0x92B, offset: 0xD98D5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvgTo', symObjAddr: 0xE70, symBinAddr: 0x7C20, symSize: 0x40 } + - { offsetInCU: 0x966, offset: 0xD9910, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvsTo', symObjAddr: 0xEE0, symBinAddr: 0x7C90, symSize: 0x30 } + - { offsetInCU: 0x9F5, offset: 0xD999F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvgTo', symObjAddr: 0x1120, symBinAddr: 0x7ED0, symSize: 0x40 } + - { offsetInCU: 0xA4B, offset: 0xD99F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64VvsTo', symObjAddr: 0x1190, symBinAddr: 0x7F40, symSize: 0x40 } + - { offsetInCU: 0xAA4, offset: 0xD9A4E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvgTo', symObjAddr: 0x11D0, symBinAddr: 0x7F80, symSize: 0x40 } + - { offsetInCU: 0xAFA, offset: 0xD9AA4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvsTo', symObjAddr: 0x1240, symBinAddr: 0x7FF0, symSize: 0x40 } + - { offsetInCU: 0xB35, offset: 0xD9ADF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo10NSCMTLViewCvgTo', symObjAddr: 0x1280, symBinAddr: 0x8030, symSize: 0x20 } + - { offsetInCU: 0xB8D, offset: 0xD9B37, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7mtlViewSo10NSCMTLViewCvsTo', symObjAddr: 0x12A0, symBinAddr: 0x8050, symSize: 0x30 } + - { offsetInCU: 0xBD0, offset: 0xD9B7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvgTo', symObjAddr: 0x12D0, symBinAddr: 0x8080, symSize: 0x20 } + - { offsetInCU: 0xC28, offset: 0xD9BD2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7glkViewAA0A7GLKViewCvsTo', symObjAddr: 0x12F0, symBinAddr: 0x80A0, symSize: 0x30 } + - { offsetInCU: 0xC6B, offset: 0xD9C15, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidth12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x1320, symBinAddr: 0x80D0, symSize: 0x30 } + - { offsetInCU: 0xCB3, offset: 0xD9C5D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeight12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x13F0, symBinAddr: 0x81A0, symSize: 0x30 } + - { offsetInCU: 0xCE5, offset: 0xD9C8F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21drawingBufferWidthRaw12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x14C0, symBinAddr: 0x8270, symSize: 0x30 } + - { offsetInCU: 0xD17, offset: 0xD9CC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22drawingBufferHeightRaw12CoreGraphics7CGFloatVvgTo', symObjAddr: 0x1540, symBinAddr: 0x82F0, symSize: 0x30 } + - { offsetInCU: 0xD5F, offset: 0xD9D09, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvgTo', symObjAddr: 0x15C0, symBinAddr: 0x8370, symSize: 0x30 } + - { offsetInCU: 0xDC7, offset: 0xD9D71, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvgTo', symObjAddr: 0x1620, symBinAddr: 0x83D0, symSize: 0x30 } + - { offsetInCU: 0xE67, offset: 0xD9E11, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftFTo', symObjAddr: 0x1C00, symBinAddr: 0x89B0, symSize: 0x90 } + - { offsetInCU: 0xED0, offset: 0xD9E7A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x1CA0, symBinAddr: 0x8A50, symSize: 0xD0 } + - { offsetInCU: 0xF84, offset: 0xD9F2E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VFTo', symObjAddr: 0x1EB0, symBinAddr: 0x8C60, symSize: 0x30 } + - { offsetInCU: 0x1004, offset: 0xD9FAE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btFTo', symObjAddr: 0x29B0, symBinAddr: 0x9760, symSize: 0xD0 } + - { offsetInCU: 0x106E, offset: 0xDA018, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtFTo', symObjAddr: 0x2B40, symBinAddr: 0x98F0, symSize: 0xD0 } + - { offsetInCU: 0x1150, offset: 0xDA0FA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbFTo', symObjAddr: 0x2D10, symBinAddr: 0x9AC0, symSize: 0x40 } + - { offsetInCU: 0x1183, offset: 0xDA12D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvgTo', symObjAddr: 0x2D50, symBinAddr: 0x9B00, symSize: 0x20 } + - { offsetInCU: 0x11DD, offset: 0xDA187, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8rendererAA9NSCRenderCSgvsTo', symObjAddr: 0x2D70, symBinAddr: 0x9B20, symSize: 0x30 } + - { offsetInCU: 0x1238, offset: 0xDA1E2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyFTo', symObjAddr: 0x2E40, symBinAddr: 0x9BF0, symSize: 0x30 } + - { offsetInCU: 0x1270, offset: 0xDA21A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC23enterBackgroundListeneryycSgvsTo', symObjAddr: 0x2EC0, symBinAddr: 0x9C70, symSize: 0x70 } + - { offsetInCU: 0x12D2, offset: 0xDA27C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC20becomeActiveListeneryycSgvsTo', symObjAddr: 0x2FD0, symBinAddr: 0x9D80, symSize: 0x70 } + - { offsetInCU: 0x137E, offset: 0xDA328, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvgTo', symObjAddr: 0x3370, symBinAddr: 0xA120, symSize: 0xB0 } + - { offsetInCU: 0x13CE, offset: 0xDA378, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvsTo', symObjAddr: 0x34E0, symBinAddr: 0xA290, symSize: 0x90 } + - { offsetInCU: 0x145B, offset: 0xDA405, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x37E0, symBinAddr: 0xA590, symSize: 0x40 } + - { offsetInCU: 0x14C7, offset: 0xDA471, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x3BE0, symBinAddr: 0xA990, symSize: 0x30 } + - { offsetInCU: 0x1544, offset: 0xDA4EE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvgTo', symObjAddr: 0x3E90, symBinAddr: 0xAC40, symSize: 0x40 } + - { offsetInCU: 0x159C, offset: 0xDA546, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvsTo', symObjAddr: 0x3F00, symBinAddr: 0xACB0, symSize: 0x60 } + - { offsetInCU: 0x162C, offset: 0xDA5D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvgTo', symObjAddr: 0x40A0, symBinAddr: 0xAE50, symSize: 0x30 } + - { offsetInCU: 0x1686, offset: 0xDA630, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13readyListenerAA0cE0_pSgvsTo', symObjAddr: 0x40D0, symBinAddr: 0xAE80, symSize: 0x30 } + - { offsetInCU: 0x16E6, offset: 0xDA690, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgFTo', symObjAddr: 0x4130, symBinAddr: 0xAEE0, symSize: 0x30 } + - { offsetInCU: 0x1751, offset: 0xDA6FB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivgTo', symObjAddr: 0x4160, symBinAddr: 0xAF10, symSize: 0x40 } + - { offsetInCU: 0x17C5, offset: 0xDA76F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivsTo', symObjAddr: 0x41D0, symBinAddr: 0xAF80, symSize: 0xA0 } + - { offsetInCU: 0x1899, offset: 0xDA843, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivgTo', symObjAddr: 0x4450, symBinAddr: 0xB200, symSize: 0x40 } + - { offsetInCU: 0x190D, offset: 0xDA8B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivsTo', symObjAddr: 0x44C0, symBinAddr: 0xB270, symSize: 0xA0 } + - { offsetInCU: 0x1A2F, offset: 0xDA9D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtFTo', symObjAddr: 0x4B00, symBinAddr: 0xB8B0, symSize: 0x40 } + - { offsetInCU: 0x1A67, offset: 0xDAA11, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VFTo', symObjAddr: 0x4B50, symBinAddr: 0xB900, symSize: 0x10 } + - { offsetInCU: 0x1ABF, offset: 0xDAA69, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17context2DPathTestyys5Int64VFTo', symObjAddr: 0x4B70, symBinAddr: 0xB920, symSize: 0x10 } + - { offsetInCU: 0x1B17, offset: 0xDAAC1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14context2DConicyys5Int64VFTo', symObjAddr: 0x4B90, symBinAddr: 0xB940, symSize: 0x10 } + - { offsetInCU: 0x1BB4, offset: 0xDAB5E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFTo', symObjAddr: 0x56D0, symBinAddr: 0xC480, symSize: 0x30 } + - { offsetInCU: 0x1BE7, offset: 0xDAB91, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfDTo', symObjAddr: 0x59E0, symBinAddr: 0xC790, symSize: 0x20 } + - { offsetInCU: 0x1C25, offset: 0xDABCF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZTo', symObjAddr: 0x5AE0, symBinAddr: 0xC890, symSize: 0x20 } + - { offsetInCU: 0x1D50, offset: 0xDACFA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5store_WZ', symObjAddr: 0xAB0, symBinAddr: 0x7860, symSize: 0x30 } + - { offsetInCU: 0x1D95, offset: 0xDAD3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5views33_508084857CA7D194CA72FEB80DD78002LL_WZ', symObjAddr: 0xB20, symBinAddr: 0x78D0, symSize: 0x40 } + - { offsetInCU: 0x1E7F, offset: 0xDAE29, size: 0x8, addend: 0x0, symName: '_$sSo30UIGraphicsImageRendererContextCIegg_ABIyBy_TR', symObjAddr: 0x1BC0, symBinAddr: 0x8970, symSize: 0x40 } + - { offsetInCU: 0x1F17, offset: 0xDAEC1, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x2E90, symBinAddr: 0x9C40, symSize: 0x30 } + - { offsetInCU: 0x1F2F, offset: 0xDAED9, size: 0x8, addend: 0x0, symName: '_$s10Foundation12NotificationVIeghn_So14NSNotificationCIeyBhy_TR', symObjAddr: 0x32A0, symBinAddr: 0xA050, symSize: 0x90 } + - { offsetInCU: 0x1F47, offset: 0xDAEF1, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_So8NSStringCABIeyByy_TR', symObjAddr: 0x3470, symBinAddr: 0xA220, symSize: 0x70 } + - { offsetInCU: 0x1F5F, offset: 0xDAF09, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTK', symObjAddr: 0x35D0, symBinAddr: 0xA380, symSize: 0x90 } + - { offsetInCU: 0x1F97, offset: 0xDAF41, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvpACTk', symObjAddr: 0x3660, symBinAddr: 0xA410, symSize: 0xC0 } + - { offsetInCU: 0x1FD7, offset: 0xDAF81, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TR', symObjAddr: 0x3720, symBinAddr: 0xA4D0, symSize: 0x70 } + - { offsetInCU: 0x204C, offset: 0xDAFF6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivpACTk', symObjAddr: 0x42E0, symBinAddr: 0xB090, symSize: 0x80 } + - { offsetInCU: 0x20FA, offset: 0xDB0A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivpACTk', symObjAddr: 0x45D0, symBinAddr: 0xB380, symSize: 0x70 } + - { offsetInCU: 0x21C8, offset: 0xDB172, size: 0x8, addend: 0x0, symName: '_$sSo7NSTimerCIeghg_ABIeyBhy_TR', symObjAddr: 0x5680, symBinAddr: 0xC430, symSize: 0x50 } + - { offsetInCU: 0x21E0, offset: 0xDB18A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfETo', symObjAddr: 0x5A00, symBinAddr: 0xC7B0, symSize: 0xC0 } + - { offsetInCU: 0x222C, offset: 0xDB1D6, size: 0x8, addend: 0x0, symName: '_$sSo6UIViewC12CanvasNativeE21getBoundingClientRectyySvFTo', symObjAddr: 0x5BC0, symBinAddr: 0xC970, symSize: 0x30 } + - { offsetInCU: 0x23C7, offset: 0xDB371, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftFySo30UIGraphicsImageRendererContextCXEfU_TA', symObjAddr: 0x64A0, symBinAddr: 0xD250, symSize: 0x30 } + - { offsetInCU: 0x23E6, offset: 0xDB390, size: 0x8, addend: 0x0, symName: '_$sSo30UIGraphicsImageRendererContextCIgg_ABIegg_TRTA', symObjAddr: 0x64F0, symBinAddr: 0xD2A0, symSize: 0x20 } + - { offsetInCU: 0x240F, offset: 0xDB3B9, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x6510, symBinAddr: 0xD2C0, symSize: 0x20 } + - { offsetInCU: 0x2423, offset: 0xDB3CD, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x6530, symBinAddr: 0xD2E0, symSize: 0x10 } + - { offsetInCU: 0x2437, offset: 0xDB3E1, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOe', symObjAddr: 0x6540, symBinAddr: 0xD2F0, symSize: 0x40 } + - { offsetInCU: 0x244B, offset: 0xDB3F5, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOy', symObjAddr: 0x6580, symBinAddr: 0xD330, symSize: 0x20 } + - { offsetInCU: 0x245F, offset: 0xDB409, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCMa', symObjAddr: 0x65A0, symBinAddr: 0xD350, symSize: 0x20 } + - { offsetInCU: 0x2473, offset: 0xDB41D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyFySo7NSTimerCYbcfU_TA', symObjAddr: 0x65C0, symBinAddr: 0xD370, symSize: 0x30 } + - { offsetInCU: 0x24C4, offset: 0xDB46E, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x65F0, symBinAddr: 0xD3A0, symSize: 0x40 } + - { offsetInCU: 0x24D8, offset: 0xDB482, size: 0x8, addend: 0x0, symName: '_$sypSgWOh', symObjAddr: 0x6630, symBinAddr: 0xD3E0, symSize: 0x30 } + - { offsetInCU: 0x24EC, offset: 0xDB496, size: 0x8, addend: 0x0, symName: ___swift_project_boxed_opaque_existential_0, symObjAddr: 0x6660, symBinAddr: 0xD410, symSize: 0x30 } + - { offsetInCU: 0x2500, offset: 0xDB4AA, size: 0x8, addend: 0x0, symName: ___swift_destroy_boxed_opaque_existential_0, symObjAddr: 0x6690, symBinAddr: 0xD440, symSize: 0x30 } + - { offsetInCU: 0x2514, offset: 0xDB4BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASQWb', symObjAddr: 0x66C0, symBinAddr: 0xD470, symSize: 0x10 } + - { offsetInCU: 0x2528, offset: 0xDB4D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOAESQAAWl', symObjAddr: 0x66D0, symBinAddr: 0xD480, symSize: 0x30 } + - { offsetInCU: 0x253C, offset: 0xDB4E6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOMa', symObjAddr: 0x6F80, symBinAddr: 0xDD30, symSize: 0x10 } + - { offsetInCU: 0x2550, offset: 0xDB4FA, size: 0x8, addend: 0x0, symName: ___swift_memcpy1_1, symObjAddr: 0x6F90, symBinAddr: 0xDD40, symSize: 0x10 } + - { offsetInCU: 0x2564, offset: 0xDB50E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwet', symObjAddr: 0x6FB0, symBinAddr: 0xDD50, symSize: 0x80 } + - { offsetInCU: 0x2578, offset: 0xDB522, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwst', symObjAddr: 0x7030, symBinAddr: 0xDDD0, symSize: 0xD0 } + - { offsetInCU: 0x258C, offset: 0xDB536, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwug', symObjAddr: 0x7100, symBinAddr: 0xDEA0, symSize: 0x10 } + - { offsetInCU: 0x25A0, offset: 0xDB54A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwup', symObjAddr: 0x7110, symBinAddr: 0xDEB0, symSize: 0x10 } + - { offsetInCU: 0x25B4, offset: 0xDB55E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOwui', symObjAddr: 0x7120, symBinAddr: 0xDEC0, symSize: 0x10 } + - { offsetInCU: 0x25C8, offset: 0xDB572, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOMa', symObjAddr: 0x7130, symBinAddr: 0xDED0, symSize: 0x10 } + - { offsetInCU: 0x25DC, offset: 0xDB586, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASQWb', symObjAddr: 0x7140, symBinAddr: 0xDEE0, symSize: 0x10 } + - { offsetInCU: 0x25F0, offset: 0xDB59A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOAESQAAWl', symObjAddr: 0x7150, symBinAddr: 0xDEF0, symSize: 0x30 } + - { offsetInCU: 0x2604, offset: 0xDB5AE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5setup33_508084857CA7D194CA72FEB80DD78002LLyyFy10Foundation12NotificationVYbcfU_TA', symObjAddr: 0x71B0, symBinAddr: 0xDF50, symSize: 0x20 } + - { offsetInCU: 0x2618, offset: 0xDB5C2, size: 0x8, addend: 0x0, symName: '_$sypSgWOd', symObjAddr: 0x71D0, symBinAddr: 0xDF70, symSize: 0x40 } + - { offsetInCU: 0x262C, offset: 0xDB5D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5setup33_508084857CA7D194CA72FEB80DD78002LLyyFy10Foundation12NotificationVYbcfU0_TA', symObjAddr: 0x7210, symBinAddr: 0xDFB0, symSize: 0x20 } + - { offsetInCU: 0x2640, offset: 0xDB5EA, size: 0x8, addend: 0x0, symName: '_$sIeg_SgWOe', symObjAddr: 0x7230, symBinAddr: 0xDFD0, symSize: 0x20 } + - { offsetInCU: 0x26A9, offset: 0xDB653, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSo19UIGestureRecognizerCIeyByy_SSADIeggg_TRTA', symObjAddr: 0x7650, symBinAddr: 0xE3F0, symSize: 0x40 } + - { offsetInCU: 0x26DD, offset: 0xDB687, size: 0x8, addend: 0x0, symName: '_$sIeyB_Ieg_TRTA', symObjAddr: 0x7690, symBinAddr: 0xE430, symSize: 0x10 } + - { offsetInCU: 0x2706, offset: 0xDB6B0, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCytIegnnr_SSABIeggg_TRTA', symObjAddr: 0x76C0, symBinAddr: 0xE460, symSize: 0x20 } + - { offsetInCU: 0x2725, offset: 0xDB6CF, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SSABytIegnnr_TRTA', symObjAddr: 0x76E0, symBinAddr: 0xE480, symSize: 0x30 } + - { offsetInCU: 0x274E, offset: 0xDB6F8, size: 0x8, addend: 0x0, symName: '_$sypWOb', symObjAddr: 0x7710, symBinAddr: 0xE4B0, symSize: 0x20 } + - { offsetInCU: 0x2762, offset: 0xDB70C, size: 0x8, addend: 0x0, symName: '_$sypWOc', symObjAddr: 0x7760, symBinAddr: 0xE500, symSize: 0x30 } + - { offsetInCU: 0x2784, offset: 0xDB72E, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF12CanvasNative9NSCCanvasC0D3FitO_Tgq5', symObjAddr: 0x0, symBinAddr: 0x6DB0, symSize: 0x50 } + - { offsetInCU: 0x27FF, offset: 0xDB7A9, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF12CanvasNative13NSCVideoFrameC0fG6FormatO_Tgq5', symObjAddr: 0x50, symBinAddr: 0x6E00, symSize: 0x50 } + - { offsetInCU: 0x28D7, offset: 0xDB881, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6EngineOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x210, symBinAddr: 0x6FC0, symSize: 0x40 } + - { offsetInCU: 0x297A, offset: 0xDB924, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x2A0, symBinAddr: 0x7050, symSize: 0x10 } + - { offsetInCU: 0x29FA, offset: 0xDB9A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH9hashValueSivgTW', symObjAddr: 0x2B0, symBinAddr: 0x7060, symSize: 0x60 } + - { offsetInCU: 0x2AA6, offset: 0xDBA50, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x310, symBinAddr: 0x70C0, symSize: 0x40 } + - { offsetInCU: 0x2B16, offset: 0xDBAC0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x350, symBinAddr: 0x7100, symSize: 0x60 } + - { offsetInCU: 0x2E13, offset: 0xDBDBD, size: 0x8, addend: 0x0, symName: '_$sSD17dictionaryLiteralSDyxq_Gx_q_td_tcfCSS_ypTgm5Tf4g_n', symObjAddr: 0x7250, symBinAddr: 0xDFF0, symSize: 0xF0 } + - { offsetInCU: 0x3284, offset: 0xDC22E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvgZ', symObjAddr: 0xA0, symBinAddr: 0x6E50, symSize: 0x30 } + - { offsetInCU: 0x32BE, offset: 0xDC268, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvsZ', symObjAddr: 0x100, symBinAddr: 0x6EB0, symSize: 0x40 } + - { offsetInCU: 0x3308, offset: 0xDC2B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC7forceGLSbvMZ', symObjAddr: 0x170, symBinAddr: 0x6F20, symSize: 0x30 } + - { offsetInCU: 0x3393, offset: 0xDC33D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValues6UInt32Vvg', symObjAddr: 0x250, symBinAddr: 0x7000, symSize: 0x40 } + - { offsetInCU: 0x33B8, offset: 0xDC362, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC0A3FitO8rawValueAESgs6UInt32V_tcfC', symObjAddr: 0x290, symBinAddr: 0x7040, symSize: 0x10 } + - { offsetInCU: 0x3408, offset: 0xDC3B2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvg', symObjAddr: 0x450, symBinAddr: 0x7200, symSize: 0x30 } + - { offsetInCU: 0x3459, offset: 0xDC403, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvs', symObjAddr: 0x4E0, symBinAddr: 0x7290, symSize: 0x40 } + - { offsetInCU: 0x349D, offset: 0xDC447, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM', symObjAddr: 0x520, symBinAddr: 0x72D0, symSize: 0x40 } + - { offsetInCU: 0x34C2, offset: 0xDC46C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC3fitAC0A3FitOvM.resume.0', symObjAddr: 0x560, symBinAddr: 0x7310, symSize: 0x30 } + - { offsetInCU: 0x3516, offset: 0xDC4C0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvg', symObjAddr: 0x5D0, symBinAddr: 0x7380, symSize: 0x30 } + - { offsetInCU: 0x356F, offset: 0xDC519, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvs', symObjAddr: 0x630, symBinAddr: 0x73E0, symSize: 0x230 } + - { offsetInCU: 0x35F3, offset: 0xDC59D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvM', symObjAddr: 0x860, symBinAddr: 0x7610, symSize: 0x50 } + - { offsetInCU: 0x3618, offset: 0xDC5C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12weblikeScaleSbvM.resume.0', symObjAddr: 0x8B0, symBinAddr: 0x7660, symSize: 0x200 } + - { offsetInCU: 0x3725, offset: 0xDC6CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14getMtlLayerPtrSvyF', symObjAddr: 0xDB0, symBinAddr: 0x7B60, symSize: 0x50 } + - { offsetInCU: 0x37CC, offset: 0xDC776, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvg', symObjAddr: 0xEB0, symBinAddr: 0x7C60, symSize: 0x30 } + - { offsetInCU: 0x37FD, offset: 0xDC7A7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvs', symObjAddr: 0xF10, symBinAddr: 0x7CC0, symSize: 0xE0 } + - { offsetInCU: 0x3847, offset: 0xDC7F1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM', symObjAddr: 0xFF0, symBinAddr: 0x7DA0, symSize: 0x50 } + - { offsetInCU: 0x386A, offset: 0xDC814, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9autoScaleSbvM.resume.0', symObjAddr: 0x1040, symBinAddr: 0x7DF0, symSize: 0xE0 } + - { offsetInCU: 0x38AB, offset: 0xDC855, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13nativeContexts5Int64Vvg', symObjAddr: 0x1160, symBinAddr: 0x7F10, symSize: 0x30 } + - { offsetInCU: 0x3901, offset: 0xDC8AB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC4is2DSbvg', symObjAddr: 0x1210, symBinAddr: 0x7FC0, symSize: 0x30 } + - { offsetInCU: 0x39C5, offset: 0xDC96F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18drawingBufferWidth12CoreGraphics7CGFloatVvg', symObjAddr: 0x1350, symBinAddr: 0x8100, symSize: 0xA0 } + - { offsetInCU: 0x3A57, offset: 0xDCA01, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC19drawingBufferHeight12CoreGraphics7CGFloatVvg', symObjAddr: 0x1420, symBinAddr: 0x81D0, symSize: 0xA0 } + - { offsetInCU: 0x3AE9, offset: 0xDCA93, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21drawingBufferWidthRaw12CoreGraphics7CGFloatVvg', symObjAddr: 0x14F0, symBinAddr: 0x82A0, symSize: 0x50 } + - { offsetInCU: 0x3B7B, offset: 0xDCB25, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC22drawingBufferHeightRaw12CoreGraphics7CGFloatVvg', symObjAddr: 0x1570, symBinAddr: 0x8320, symSize: 0x50 } + - { offsetInCU: 0x3C2E, offset: 0xDCBD8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5widthSfvg', symObjAddr: 0x15F0, symBinAddr: 0x83A0, symSize: 0x30 } + - { offsetInCU: 0x3C74, offset: 0xDCC1E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6heightSfvg', symObjAddr: 0x1650, symBinAddr: 0x8400, symSize: 0x30 } + - { offsetInCU: 0x3D5F, offset: 0xDCD09, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftF', symObjAddr: 0x1680, symBinAddr: 0x8430, symSize: 0x480 } + - { offsetInCU: 0x40A2, offset: 0xDD04C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC9toDataURLyS2S_SftFySo30UIGraphicsImageRendererContextCXEfU_', symObjAddr: 0x1B00, symBinAddr: 0x88B0, symSize: 0xC0 } + - { offsetInCU: 0x40DE, offset: 0xDD088, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11initContextyySS_S4bs5Int32VS5btF', symObjAddr: 0x1C90, symBinAddr: 0x8A40, symSize: 0x10 } + - { offsetInCU: 0x4274, offset: 0xDD21E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17initWebGPUContextyys5Int64VF', symObjAddr: 0x1D70, symBinAddr: 0x8B20, symSize: 0x140 } + - { offsetInCU: 0x4678, offset: 0xDD622, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC015initContextWithE10AttributesyySS_S4bs5Int32VS5btF', symObjAddr: 0x1EE0, symBinAddr: 0x8C90, symSize: 0xAD0 } + - { offsetInCU: 0x4E4A, offset: 0xDDDF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC15create2DContextys5Int64VSb_S3bs5Int32VS5bAHtF', symObjAddr: 0x2A80, symBinAddr: 0x9830, symSize: 0xC0 } + - { offsetInCU: 0x503F, offset: 0xDDFE9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC8snapshotySo7UIImageCSgSbF', symObjAddr: 0x2C10, symBinAddr: 0x99C0, symSize: 0x100 } + - { offsetInCU: 0x51DC, offset: 0xDE186, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6renderSbyF', symObjAddr: 0x2DA0, symBinAddr: 0x9B50, symSize: 0xA0 } + - { offsetInCU: 0x5354, offset: 0xDE2FE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5setup33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3040, symBinAddr: 0x9DF0, symSize: 0x260 } + - { offsetInCU: 0x53DB, offset: 0xDE385, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvg', symObjAddr: 0x3420, symBinAddr: 0xA1D0, symSize: 0x50 } + - { offsetInCU: 0x5425, offset: 0xDE3CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvs', symObjAddr: 0x3570, symBinAddr: 0xA320, symSize: 0x60 } + - { offsetInCU: 0x544C, offset: 0xDE3F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM', symObjAddr: 0x3790, symBinAddr: 0xA540, symSize: 0x40 } + - { offsetInCU: 0x5472, offset: 0xDE41C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC18touchEventListenerySS_So19UIGestureRecognizerCtcSgvM.resume.0', symObjAddr: 0x37D0, symBinAddr: 0xA580, symSize: 0x10 } + - { offsetInCU: 0x549B, offset: 0xDE445, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfC', symObjAddr: 0x3820, symBinAddr: 0xA5D0, symSize: 0x80 } + - { offsetInCU: 0x54D0, offset: 0xDE47A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5frameACSo6CGRectV_tcfc', symObjAddr: 0x38A0, symBinAddr: 0xA650, symSize: 0x340 } + - { offsetInCU: 0x5617, offset: 0xDE5C1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14initializeView33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x3C10, symBinAddr: 0xA9C0, symSize: 0x280 } + - { offsetInCU: 0x5888, offset: 0xDE832, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvg', symObjAddr: 0x3ED0, symBinAddr: 0xAC80, symSize: 0x30 } + - { offsetInCU: 0x58C7, offset: 0xDE871, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvs', symObjAddr: 0x3F60, symBinAddr: 0xAD10, symSize: 0x40 } + - { offsetInCU: 0x58EE, offset: 0xDE898, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvW', symObjAddr: 0x3FA0, symBinAddr: 0xAD50, symSize: 0x90 } + - { offsetInCU: 0x59A8, offset: 0xDE952, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvM', symObjAddr: 0x4030, symBinAddr: 0xADE0, symSize: 0x40 } + - { offsetInCU: 0x59CE, offset: 0xDE978, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17ignoreTouchEventsSbvM.resume.0', symObjAddr: 0x4070, symBinAddr: 0xAE20, symSize: 0x30 } + - { offsetInCU: 0x5A2C, offset: 0xDE9D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11setListeneryyAA0cE0_pSgF', symObjAddr: 0x4100, symBinAddr: 0xAEB0, symSize: 0x30 } + - { offsetInCU: 0x5A9C, offset: 0xDEA46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivg', symObjAddr: 0x41A0, symBinAddr: 0xAF50, symSize: 0x30 } + - { offsetInCU: 0x5B02, offset: 0xDEAAC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivs', symObjAddr: 0x4270, symBinAddr: 0xB020, symSize: 0x70 } + - { offsetInCU: 0x5B99, offset: 0xDEB43, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivM', symObjAddr: 0x4360, symBinAddr: 0xB110, symSize: 0x70 } + - { offsetInCU: 0x5BBD, offset: 0xDEB67, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12surfaceWidthSivM.resume.0', symObjAddr: 0x43D0, symBinAddr: 0xB180, symSize: 0x80 } + - { offsetInCU: 0x5BDF, offset: 0xDEB89, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivg', symObjAddr: 0x4490, symBinAddr: 0xB240, symSize: 0x30 } + - { offsetInCU: 0x5C40, offset: 0xDEBEA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivs', symObjAddr: 0x4560, symBinAddr: 0xB310, symSize: 0x70 } + - { offsetInCU: 0x5CD7, offset: 0xDEC81, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivM', symObjAddr: 0x4640, symBinAddr: 0xB3F0, symSize: 0x70 } + - { offsetInCU: 0x5CFB, offset: 0xDECA5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13surfaceHeightSivM.resume.0', symObjAddr: 0x46B0, symBinAddr: 0xB460, symSize: 0x80 } + - { offsetInCU: 0x5D95, offset: 0xDED3F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC6resize33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x4730, symBinAddr: 0xB4E0, symSize: 0x220 } + - { offsetInCU: 0x6109, offset: 0xDF0B3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC11forceLayoutyy12CoreGraphics7CGFloatV_AGtF', symObjAddr: 0x4950, symBinAddr: 0xB700, symSize: 0x1B0 } + - { offsetInCU: 0x6256, offset: 0xDF200, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC13context2DTestyys5Int64VF', symObjAddr: 0x4B40, symBinAddr: 0xB8F0, symSize: 0x10 } + - { offsetInCU: 0x629B, offset: 0xDF245, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC17context2DPathTestyys5Int64VF', symObjAddr: 0x4B60, symBinAddr: 0xB910, symSize: 0x10 } + - { offsetInCU: 0x62E0, offset: 0xDF28A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14context2DConicyys5Int64VF', symObjAddr: 0x4B80, symBinAddr: 0xB930, symSize: 0x10 } + - { offsetInCU: 0x632C, offset: 0xDF2D6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC12scaleSurface33_508084857CA7D194CA72FEB80DD78002LLyyF', symObjAddr: 0x4BA0, symBinAddr: 0xB950, symSize: 0x950 } + - { offsetInCU: 0x6634, offset: 0xDF5DE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC14layoutSubviewsyyF', symObjAddr: 0x54F0, symBinAddr: 0xC2A0, symSize: 0x190 } + - { offsetInCU: 0x674D, offset: 0xDF6F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasCfD', symObjAddr: 0x5700, symBinAddr: 0xC4B0, symSize: 0x2E0 } + - { offsetInCU: 0x67D2, offset: 0xDF77C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC21getBoundingClientRectyySo6UIViewC_SvtFZ', symObjAddr: 0x5AC0, symBinAddr: 0xC870, symSize: 0x20 } + - { offsetInCU: 0x6838, offset: 0xDF7E2, size: 0x8, addend: 0x0, symName: '_$sSo6UIViewC12CanvasNativeE21getBoundingClientRectyySvF', symObjAddr: 0x5B00, symBinAddr: 0xC8B0, symSize: 0xC0 } + - { offsetInCU: 0x6926, offset: 0xDF8D0, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFSS_Tg5', symObjAddr: 0x5BF0, symBinAddr: 0xC9A0, symSize: 0x60 } + - { offsetInCU: 0x6980, offset: 0xDF92A, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV7_insert2at3key5valueys10_HashTableV6BucketV_xnq_ntFSS_ypTg5', symObjAddr: 0x5C50, symBinAddr: 0xCA00, symSize: 0x60 } + - { offsetInCU: 0x69EC, offset: 0xDF996, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV12mutatingFind_8isUniques10_HashTableV6BucketV6bucket_Sb5foundtx_SbtFSS_ypTg5', symObjAddr: 0x5CB0, symBinAddr: 0xCA60, symSize: 0xB0 } + - { offsetInCU: 0x6A29, offset: 0xDF9D3, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFSS_Tg5', symObjAddr: 0x5D60, symBinAddr: 0xCB10, symSize: 0xE0 } + - { offsetInCU: 0x6A94, offset: 0xDFA3E, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV4copyyyFSS_ypTg5', symObjAddr: 0x5E40, symBinAddr: 0xCBF0, symSize: 0x260 } + - { offsetInCU: 0x6B3C, offset: 0xDFAE6, size: 0x8, addend: 0x0, symName: '_$ss17_NativeDictionaryV20_copyOrMoveAndResize8capacity12moveElementsySi_SbtFSS_ypTg5', symObjAddr: 0x60A0, symBinAddr: 0xCE50, symSize: 0x3C0 } + - { offsetInCU: 0x6C54, offset: 0xDFBFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCCanvasC5coderACSgSo7NSCoderC_tcfcTf4gn_n', symObjAddr: 0x7340, symBinAddr: 0xE0E0, symSize: 0x2F0 } + - { offsetInCU: 0x27, offset: 0xDFD76, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xE690, symSize: 0x20 } + - { offsetInCU: 0x62, offset: 0xDFDB1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCMa', symObjAddr: 0x20, symBinAddr: 0xE6B0, symSize: 0x14 } + - { offsetInCU: 0x1AF, offset: 0xDFEFE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative7GLUtilsCfD', symObjAddr: 0x0, symBinAddr: 0xE690, symSize: 0x20 } + - { offsetInCU: 0x27, offset: 0xDFF4D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTo', symObjAddr: 0x0, symBinAddr: 0xE6D0, symSize: 0x40 } + - { offsetInCU: 0x7D, offset: 0xDFFA3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTo', symObjAddr: 0x0, symBinAddr: 0xE6D0, symSize: 0x40 } + - { offsetInCU: 0xDB, offset: 0xE0001, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfcTo', symObjAddr: 0xB0, symBinAddr: 0xE780, symSize: 0x30 } + - { offsetInCU: 0x12E, offset: 0xE0054, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderC9drawFrame6buffer5width6height14internalFormat6format10flipYWebGLySo11CVBufferRefa_S2is5Int32VANSbtFZTf4nnndddd_n', symObjAddr: 0x110, symBinAddr: 0xE7E0, symSize: 0x15C } + - { offsetInCU: 0x26A, offset: 0xE0190, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCMa', symObjAddr: 0x90, symBinAddr: 0xE760, symSize: 0x20 } + - { offsetInCU: 0x436, offset: 0xE035C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfC', symObjAddr: 0x40, symBinAddr: 0xE710, symSize: 0x20 } + - { offsetInCU: 0x44A, offset: 0xE0370, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCACycfc', symObjAddr: 0x60, symBinAddr: 0xE730, symSize: 0x30 } + - { offsetInCU: 0x480, offset: 0xE03A6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative9NSCRenderCfD', symObjAddr: 0xE0, symBinAddr: 0xE7B0, symSize: 0x30 } + - { offsetInCU: 0xD1, offset: 0xE04EA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfcTo', symObjAddr: 0x1250, symBinAddr: 0xFB50, symSize: 0x60 } + - { offsetInCU: 0x161, offset: 0xE057A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCfETo', symObjAddr: 0x12D0, symBinAddr: 0xFBD0, symSize: 0x20 } + - { offsetInCU: 0x190, offset: 0xE05A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6handleyySo19UIGestureRecognizerCFTo', symObjAddr: 0x12F0, symBinAddr: 0xFBF0, symSize: 0x10 } + - { offsetInCU: 0x32D, offset: 0xE0746, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCACycfcTo', symObjAddr: 0x1B70, symBinAddr: 0x10470, symSize: 0x30 } + - { offsetInCU: 0x5E4, offset: 0xE09FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCfETo', symObjAddr: 0x1BF0, symBinAddr: 0x104F0, symSize: 0x60 } + - { offsetInCU: 0x613, offset: 0xE0A2C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerCMa', symObjAddr: 0x1C50, symBinAddr: 0x10550, symSize: 0x20 } + - { offsetInCU: 0x627, offset: 0xE0A40, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerCMa', symObjAddr: 0x1C70, symBinAddr: 0x10570, symSize: 0x20 } + - { offsetInCU: 0x63B, offset: 0xE0A54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwCP', symObjAddr: 0x1C90, symBinAddr: 0x10590, symSize: 0x30 } + - { offsetInCU: 0x64F, offset: 0xE0A68, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwxx', symObjAddr: 0x1CC0, symBinAddr: 0x105C0, symSize: 0x10 } + - { offsetInCU: 0x663, offset: 0xE0A7C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwcp', symObjAddr: 0x1CD0, symBinAddr: 0x105D0, symSize: 0x40 } + - { offsetInCU: 0x677, offset: 0xE0A90, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwca', symObjAddr: 0x1D10, symBinAddr: 0x10610, symSize: 0x60 } + - { offsetInCU: 0x68B, offset: 0xE0AA4, size: 0x8, addend: 0x0, symName: ___swift_memcpy33_8, symObjAddr: 0x1D70, symBinAddr: 0x10670, symSize: 0x20 } + - { offsetInCU: 0x69F, offset: 0xE0AB8, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwta', symObjAddr: 0x1D90, symBinAddr: 0x10690, symSize: 0x40 } + - { offsetInCU: 0x6B3, offset: 0xE0ACC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwet', symObjAddr: 0x1DD0, symBinAddr: 0x106D0, symSize: 0x40 } + - { offsetInCU: 0x6C7, offset: 0xE0AE0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVwst', symObjAddr: 0x1E10, symBinAddr: 0x10710, symSize: 0x50 } + - { offsetInCU: 0x6DB, offset: 0xE0AF4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVMa', symObjAddr: 0x1E60, symBinAddr: 0x10760, symSize: 0x10 } + - { offsetInCU: 0x6EF, offset: 0xE0B08, size: 0x8, addend: 0x0, symName: '_$sypSgWOc', symObjAddr: 0x1E70, symBinAddr: 0x10770, symSize: 0x40 } + - { offsetInCU: 0x703, offset: 0xE0B1C, size: 0x8, addend: 0x0, symName: '_$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl', symObjAddr: 0x1F80, symBinAddr: 0x107B0, symSize: 0x50 } + - { offsetInCU: 0x717, offset: 0xE0B30, size: 0x8, addend: 0x0, symName: '_$sSh8IteratorV8_VariantOyx__GSHRzlWOe', symObjAddr: 0x1FD0, symBinAddr: 0x10800, symSize: 0x20 } + - { offsetInCU: 0x72B, offset: 0xE0B44, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC7PointerVWOs', symObjAddr: 0x2020, symBinAddr: 0x10850, symSize: 0x20 } + - { offsetInCU: 0x75F, offset: 0xE0B78, size: 0x8, addend: 0x0, symName: '_$sSSSo19UIGestureRecognizerCIeggg_SgWOe', symObjAddr: 0x2060, symBinAddr: 0x10890, symSize: 0x20 } + - { offsetInCU: 0xCDC, offset: 0xE10F5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesBegan_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x0, symBinAddr: 0xE940, symSize: 0x630 } + - { offsetInCU: 0xF61, offset: 0xE137A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC12touchesMoved_4withyShySo7UITouchCG_So7UIEventCtF', symObjAddr: 0x650, symBinAddr: 0xEF90, symSize: 0xE0 } + - { offsetInCU: 0xFE0, offset: 0xE13F9, size: 0x8, addend: 0x0, symName: '_$sSa6remove2atxSi_tF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x800, symBinAddr: 0xF120, symSize: 0xC0 } + - { offsetInCU: 0x1042, offset: 0xE145B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC22TouchGestureRecognizerC6target6actionAEypSg_10ObjectiveC8SelectorVSgtcfc', symObjAddr: 0x1160, symBinAddr: 0xFA60, symSize: 0xF0 } + - { offsetInCU: 0x1191, offset: 0xE15AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6onMove33_044DDF836BDB3B89B481C6F58BB6EF6BLLyySo19UIGestureRecognizerC_ShySo7UITouchCGSgtF', symObjAddr: 0x16C0, symBinAddr: 0xFFC0, symSize: 0x4B0 } + - { offsetInCU: 0x18DA, offset: 0xE1CF3, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNewAByxGyF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x2040, symBinAddr: 0x10870, symSize: 0x20 } + - { offsetInCU: 0x1972, offset: 0xE1D8B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative15NSCTouchHandlerC6canvasAcA9NSCCanvasC_tcfcTf4gn_n', symObjAddr: 0x2080, symBinAddr: 0x108B0, symSize: 0x1E9 } + - { offsetInCU: 0x27, offset: 0xE1F54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0x10AA0, symSize: 0x30 } + - { offsetInCU: 0x4B, offset: 0xE1F78, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvpZ', symObjAddr: 0x2A0, symBinAddr: 0x12AB7D8, symSize: 0x0 } + - { offsetInCU: 0x65, offset: 0xE1F92, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC14FAILED_TO_LOADSSvgZTo', symObjAddr: 0x0, symBinAddr: 0x10AA0, symSize: 0x30 } + - { offsetInCU: 0x98, offset: 0xE1FC5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZTo', symObjAddr: 0x160, symBinAddr: 0x10C00, symSize: 0x30 } + - { offsetInCU: 0x104, offset: 0xE2031, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfcTo', symObjAddr: 0x200, symBinAddr: 0x10CA0, symSize: 0x30 } + - { offsetInCU: 0x158, offset: 0xE2085, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queue_WZ', symObjAddr: 0x30, symBinAddr: 0x10AD0, symSize: 0xF0 } + - { offsetInCU: 0x183, offset: 0xE20B0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCMa', symObjAddr: 0x1E0, symBinAddr: 0x10C80, symSize: 0x20 } + - { offsetInCU: 0x197, offset: 0xE20C4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfETo', symObjAddr: 0x260, symBinAddr: 0x10D00, symSize: 0x10 } + - { offsetInCU: 0x1C2, offset: 0xE20EF, size: 0x8, addend: 0x0, symName: '_$sSo17OS_dispatch_queueCMa', symObjAddr: 0x270, symBinAddr: 0x10D10, symSize: 0x2F } + - { offsetInCU: 0x34A, offset: 0xE2277, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapC5queueSo012OS_dispatch_E0CvgZ', symObjAddr: 0x120, symBinAddr: 0x10BC0, symSize: 0x40 } + - { offsetInCU: 0x38A, offset: 0xE22B7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfC', symObjAddr: 0x190, symBinAddr: 0x10C30, symSize: 0x20 } + - { offsetInCU: 0x39E, offset: 0xE22CB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCACycfc', symObjAddr: 0x1B0, symBinAddr: 0x10C50, symSize: 0x30 } + - { offsetInCU: 0x3DA, offset: 0xE2307, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCImageBitmapCfD', symObjAddr: 0x230, symBinAddr: 0x10CD0, symSize: 0x30 } + - { offsetInCU: 0x2B, offset: 0xE2355, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0x10D40, symSize: 0xA0 } + - { offsetInCU: 0x66, offset: 0xE2390, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZTo', symObjAddr: 0xA0, symBinAddr: 0x10DE0, symSize: 0xA0 } + - { offsetInCU: 0xF9, offset: 0xE2423, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheH0a_AFSo012CFDictionaryH0aSgs6UInt32Vs5Int32VA2p2NSitFZTo', symObjAddr: 0x1D0, symBinAddr: 0x10F10, symSize: 0x100 } + - { offsetInCU: 0x1AD, offset: 0xE24D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11setupRenderAA9NSCRenderCyFZTo', symObjAddr: 0x300, symBinAddr: 0x11040, symSize: 0x30 } + - { offsetInCU: 0x228, offset: 0xE2552, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZTo', symObjAddr: 0x340, symBinAddr: 0x11080, symSize: 0x70 } + - { offsetInCU: 0x2A1, offset: 0xE25CB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11writeToFileyySo6NSDataC_SStKFZTo', symObjAddr: 0x4C0, symBinAddr: 0x11200, symSize: 0x140 } + - { offsetInCU: 0x340, offset: 0xE266A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfcTo', symObjAddr: 0x650, symBinAddr: 0x11390, symSize: 0x30 } + - { offsetInCU: 0x393, offset: 0xE26BD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZTf4nnndddd_n', symObjAddr: 0x6B0, symBinAddr: 0x113F0, symSize: 0x180 } + - { offsetInCU: 0x4ED, offset: 0xE2817, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC7getFile33_086607F85A042F2B265C7E71FFB9771CLLyS2SKFZTf4nd_g', symObjAddr: 0x830, symBinAddr: 0x11570, symSize: 0x310 } + - { offsetInCU: 0x5CC, offset: 0xE28F6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCMa', symObjAddr: 0xB40, symBinAddr: 0x11880, symSize: 0x20 } + - { offsetInCU: 0x5E0, offset: 0xE290A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwCP', symObjAddr: 0xB60, symBinAddr: 0x118A0, symSize: 0x30 } + - { offsetInCU: 0x5F4, offset: 0xE291E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwxx', symObjAddr: 0xB90, symBinAddr: 0x118D0, symSize: 0x10 } + - { offsetInCU: 0x608, offset: 0xE2932, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwca', symObjAddr: 0xBA0, symBinAddr: 0x118E0, symSize: 0x40 } + - { offsetInCU: 0x61C, offset: 0xE2946, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwta', symObjAddr: 0xBF0, symBinAddr: 0x11920, symSize: 0x30 } + - { offsetInCU: 0x630, offset: 0xE295A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwet', symObjAddr: 0xC20, symBinAddr: 0x11950, symSize: 0x40 } + - { offsetInCU: 0x644, offset: 0xE296E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwst', symObjAddr: 0xC60, symBinAddr: 0x11990, symSize: 0x40 } + - { offsetInCU: 0x658, offset: 0xE2982, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwug', symObjAddr: 0xCA0, symBinAddr: 0x119D0, symSize: 0x10 } + - { offsetInCU: 0x66C, offset: 0xE2996, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwup', symObjAddr: 0xCB0, symBinAddr: 0x119E0, symSize: 0x10 } + - { offsetInCU: 0x680, offset: 0xE29AA, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOwui', symObjAddr: 0xCC0, symBinAddr: 0x119F0, symSize: 0x10 } + - { offsetInCU: 0x694, offset: 0xE29BE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOMa', symObjAddr: 0xCD0, symBinAddr: 0x11A00, symSize: 0x10 } + - { offsetInCU: 0x71C, offset: 0xE2A46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP7_domainSSvgTW', symObjAddr: 0x3B0, symBinAddr: 0x110F0, symSize: 0x10 } + - { offsetInCU: 0x738, offset: 0xE2A62, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP5_codeSivgTW', symObjAddr: 0x3C0, symBinAddr: 0x11100, symSize: 0x10 } + - { offsetInCU: 0x754, offset: 0xE2A7E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP9_userInfoyXlSgvgTW', symObjAddr: 0x3D0, symBinAddr: 0x11110, symSize: 0x10 } + - { offsetInCU: 0x770, offset: 0xE2A9A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC8NSCErrorOs5ErrorAAsAFP19_getEmbeddedNSErroryXlSgyFTW', symObjAddr: 0x3E0, symBinAddr: 0x11120, symSize: 0x10 } + - { offsetInCU: 0xA44, offset: 0xE2D6E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC18createTextureCacheSo017CVOpenGLESTextureG3RefaSgyFZ', symObjAddr: 0x0, symBinAddr: 0x10D40, symSize: 0xA0 } + - { offsetInCU: 0xADA, offset: 0xE2E04, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11createImageySo11CVBufferRefaSgSo022CVOpenGLESTextureCacheH0a_AFSo012CFDictionaryH0aSgs6UInt32Vs5Int32VA2p2NSitFZ', symObjAddr: 0x140, symBinAddr: 0x10E80, symSize: 0x90 } + - { offsetInCU: 0xC75, offset: 0xE2F9F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11setupRenderAA9NSCRenderCyFZ', symObjAddr: 0x2D0, symBinAddr: 0x11010, symSize: 0x30 } + - { offsetInCU: 0xCBF, offset: 0xE2FE9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC9drawFrameyySo8AVPlayerC_So0G15ItemVideoOutputCSo6CGSizeVs5Int32VALSbtFZ', symObjAddr: 0x330, symBinAddr: 0x11070, symSize: 0x10 } + - { offsetInCU: 0xCE1, offset: 0xE300B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsC11writeToFileyySo6NSDataC_SStKFZ', symObjAddr: 0x3F0, symBinAddr: 0x11130, symSize: 0xD0 } + - { offsetInCU: 0xD91, offset: 0xE30BB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfC', symObjAddr: 0x600, symBinAddr: 0x11340, symSize: 0x20 } + - { offsetInCU: 0xDA5, offset: 0xE30CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCACycfc', symObjAddr: 0x620, symBinAddr: 0x11360, symSize: 0x30 } + - { offsetInCU: 0xDDB, offset: 0xE3105, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative14NSCCanvasUtilsCfD', symObjAddr: 0x680, symBinAddr: 0x113C0, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0xE31F7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x11A20, symSize: 0x10 } + - { offsetInCU: 0x71, offset: 0xE3241, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZTo', symObjAddr: 0x10, symBinAddr: 0x11A30, symSize: 0x60 } + - { offsetInCU: 0xF6, offset: 0xE32C6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZTo', symObjAddr: 0x80, symBinAddr: 0x11AA0, symSize: 0x60 } + - { offsetInCU: 0x193, offset: 0xE3363, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZTo', symObjAddr: 0xF0, symBinAddr: 0x11B10, symSize: 0x70 } + - { offsetInCU: 0x25C, offset: 0xE342C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZTo', symObjAddr: 0x170, symBinAddr: 0x11B90, symSize: 0x90 } + - { offsetInCU: 0x339, offset: 0xE3509, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfcTo', symObjAddr: 0x250, symBinAddr: 0x11C70, symSize: 0x30 } + - { offsetInCU: 0x38D, offset: 0xE355D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCMa', symObjAddr: 0x2B0, symBinAddr: 0x11CD0, symSize: 0x14 } + - { offsetInCU: 0x4FD, offset: 0xE36CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC13createPatternys5Int64VAF_So7UIImageCSStFZ', symObjAddr: 0x0, symBinAddr: 0x11A20, symSize: 0x10 } + - { offsetInCU: 0x59A, offset: 0xE376A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS2ftFZ', symObjAddr: 0x70, symBinAddr: 0x11A90, symSize: 0x10 } + - { offsetInCU: 0x63A, offset: 0xE380A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS4ftFZ', symObjAddr: 0xE0, symBinAddr: 0x11B00, symSize: 0x10 } + - { offsetInCU: 0x6FD, offset: 0xE38CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DC9drawImageySbs5Int64V_So7UIImageCS8ftFZ', symObjAddr: 0x160, symBinAddr: 0x11B80, symSize: 0x10 } + - { offsetInCU: 0x809, offset: 0xE39D9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfC', symObjAddr: 0x200, symBinAddr: 0x11C20, symSize: 0x20 } + - { offsetInCU: 0x81D, offset: 0xE39ED, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCACycfc', symObjAddr: 0x220, symBinAddr: 0x11C40, symSize: 0x30 } + - { offsetInCU: 0x859, offset: 0xE3A29, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative27NSCCanvasRenderingContext2DCfD', symObjAddr: 0x280, symBinAddr: 0x11CA0, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0xE3A87, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x11CF0, symSize: 0x30 } + - { offsetInCU: 0xA9, offset: 0xE3B09, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0x30, symBinAddr: 0x11D20, symSize: 0x50 } + - { offsetInCU: 0x1A6, offset: 0xE3C06, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZTo', symObjAddr: 0xC0, symBinAddr: 0x11DB0, symSize: 0x50 } + - { offsetInCU: 0x289, offset: 0xE3CE9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfcTo', symObjAddr: 0x180, symBinAddr: 0x11E70, symSize: 0x30 } + - { offsetInCU: 0x2DD, offset: 0xE3D3D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCMa', symObjAddr: 0x160, symBinAddr: 0x11E50, symSize: 0x20 } + - { offsetInCU: 0x487, offset: 0xE3EE7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC10texImage2Dyys5Int64V_s5Int32VA4HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x0, symBinAddr: 0x11CF0, symSize: 0x30 } + - { offsetInCU: 0x5DD, offset: 0xE403D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextC13texSubImage2Dyys5Int64V_s5Int32VA5HSpys5UInt8VGSuSo6CGSizeVSbtFZ', symObjAddr: 0x80, symBinAddr: 0x11D70, symSize: 0x40 } + - { offsetInCU: 0x725, offset: 0xE4185, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfC', symObjAddr: 0x110, symBinAddr: 0x11E00, symSize: 0x20 } + - { offsetInCU: 0x739, offset: 0xE4199, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCACycfc', symObjAddr: 0x130, symBinAddr: 0x11E20, symSize: 0x30 } + - { offsetInCU: 0x76F, offset: 0xE41CF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative24NSCWebGLRenderingContextCfD', symObjAddr: 0x1B0, symBinAddr: 0x11EA0, symSize: 0x2B } + - { offsetInCU: 0x61, offset: 0xE4253, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvgTo', symObjAddr: 0x10, symBinAddr: 0x11EE0, symSize: 0x20 } + - { offsetInCU: 0xB7, offset: 0xE42A9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7isDirtySbvsTo', symObjAddr: 0x30, symBinAddr: 0x11F00, symSize: 0x10 } + - { offsetInCU: 0x110, offset: 0xE4302, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvgTo', symObjAddr: 0x40, symBinAddr: 0x11F10, symSize: 0x40 } + - { offsetInCU: 0x168, offset: 0xE435A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvsTo', symObjAddr: 0xC0, symBinAddr: 0x11F90, symSize: 0x40 } + - { offsetInCU: 0x1C3, offset: 0xE43B5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvgTo', symObjAddr: 0x100, symBinAddr: 0x11FD0, symSize: 0x10 } + - { offsetInCU: 0x219, offset: 0xE440B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC3fbos6UInt32VvsTo', symObjAddr: 0x110, symBinAddr: 0x11FE0, symSize: 0x10 } + - { offsetInCU: 0x272, offset: 0xE4464, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfcTo', symObjAddr: 0x1C0, symBinAddr: 0x12090, symSize: 0x80 } + - { offsetInCU: 0x2CA, offset: 0xE44BC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0x300, symBinAddr: 0x121D0, symSize: 0xA0 } + - { offsetInCU: 0x32C, offset: 0xE451E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x470, symBinAddr: 0x12340, symSize: 0x30 } + - { offsetInCU: 0x35E, offset: 0xE4550, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC12bindDrawableyyFTo', symObjAddr: 0x520, symBinAddr: 0x12370, symSize: 0xA0 } + - { offsetInCU: 0x3DF, offset: 0xE45D1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC14deleteDrawableyyFTo', symObjAddr: 0x600, symBinAddr: 0x12410, symSize: 0x60 } + - { offsetInCU: 0x451, offset: 0xE4643, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtFTo', symObjAddr: 0x670, symBinAddr: 0x12480, symSize: 0x10 } + - { offsetInCU: 0x4AD, offset: 0xE469F, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfcTo', symObjAddr: 0x740, symBinAddr: 0x12550, symSize: 0x30 } + - { offsetInCU: 0x50B, offset: 0xE46FD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCMa', symObjAddr: 0x1A0, symBinAddr: 0x12070, symSize: 0x20 } + - { offsetInCU: 0x535, offset: 0xE4727, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCfETo', symObjAddr: 0x790, symBinAddr: 0x125A0, symSize: 0x20 } + - { offsetInCU: 0x633, offset: 0xE4825, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VFTo', symObjAddr: 0xAB0, symBinAddr: 0x128C0, symSize: 0x80 } + - { offsetInCU: 0x671, offset: 0xE4863, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvgTo', symObjAddr: 0xB30, symBinAddr: 0x12940, symSize: 0x20 } + - { offsetInCU: 0x6C7, offset: 0xE48B9, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC7isDirtySbvsTo', symObjAddr: 0xB50, symBinAddr: 0x12960, symSize: 0x10 } + - { offsetInCU: 0x720, offset: 0xE4912, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvgTo', symObjAddr: 0xB60, symBinAddr: 0x12970, symSize: 0x20 } + - { offsetInCU: 0x778, offset: 0xE496A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC8rendererAA9NSCCanvasCSgvsTo', symObjAddr: 0xB80, symBinAddr: 0x12990, symSize: 0x20 } + - { offsetInCU: 0x7D3, offset: 0xE49C5, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvgTo', symObjAddr: 0xBA0, symBinAddr: 0x129B0, symSize: 0x40 } + - { offsetInCU: 0x829, offset: 0xE4A1B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvsTo', symObjAddr: 0xC10, symBinAddr: 0x12A20, symSize: 0x40 } + - { offsetInCU: 0x8BC, offset: 0xE4AAE, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfcTo', symObjAddr: 0xD80, symBinAddr: 0x12B90, symSize: 0x80 } + - { offsetInCU: 0x914, offset: 0xE4B06, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfcTo', symObjAddr: 0xF50, symBinAddr: 0x12D60, symSize: 0xA0 } + - { offsetInCU: 0x976, offset: 0xE4B68, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfcTo', symObjAddr: 0x10A0, symBinAddr: 0x12EB0, symSize: 0x30 } + - { offsetInCU: 0x9A8, offset: 0xE4B9A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC11deviceScaleSfyFTo', symObjAddr: 0x10D0, symBinAddr: 0x12EE0, symSize: 0xB0 } + - { offsetInCU: 0xA29, offset: 0xE4C1B, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTo', symObjAddr: 0x1190, symBinAddr: 0x12F90, symSize: 0x30 } + - { offsetInCU: 0xA87, offset: 0xE4C79, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCfETo', symObjAddr: 0x1210, symBinAddr: 0x13010, symSize: 0x20 } + - { offsetInCU: 0xC39, offset: 0xE4E2B, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfC12CanvasNative15NSCTouchHandlerC7PointerV_Tgm5', symObjAddr: 0x1380, symBinAddr: 0x13180, symSize: 0x90 } + - { offsetInCU: 0xCBC, offset: 0xE4EAE, size: 0x8, addend: 0x0, symName: '_$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCs5UInt8V_Tgm5', symObjAddr: 0x1410, symBinAddr: 0x13210, symSize: 0x70 } + - { offsetInCU: 0xD40, offset: 0xE4F32, size: 0x8, addend: 0x0, symName: '_$s10Foundation4DataV15_RepresentationOWOy', symObjAddr: 0x1580, symBinAddr: 0x13380, symSize: 0x40 } + - { offsetInCU: 0xD54, offset: 0xE4F46, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCMa', symObjAddr: 0x1600, symBinAddr: 0x133C0, symSize: 0x20 } + - { offsetInCU: 0xE2E, offset: 0xE5020, size: 0x8, addend: 0x0, symName: '_$sSaySayxGqd__c7ElementQyd__RszSTRd__lufCs5UInt8V_10Foundation4DataVTgm5Tf4g_n', symObjAddr: 0x1480, symBinAddr: 0x13280, symSize: 0x100 } + - { offsetInCU: 0x10ED, offset: 0xE52DF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC6canvasAA9NSCCanvasCSgvg', symObjAddr: 0x80, symBinAddr: 0x11F50, symSize: 0x40 } + - { offsetInCU: 0x116A, offset: 0xE535C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewCACycfc', symObjAddr: 0x120, symBinAddr: 0x11FF0, symSize: 0x80 } + - { offsetInCU: 0x11B1, offset: 0xE53A3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0x240, symBinAddr: 0x12110, symSize: 0xC0 } + - { offsetInCU: 0x1213, offset: 0xE5405, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0x3A0, symBinAddr: 0x12270, symSize: 0xD0 } + - { offsetInCU: 0x129C, offset: 0xE548E, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC7glkView_6drawInySo0C0C_So6CGRectVtF', symObjAddr: 0x660, symBinAddr: 0x12470, symSize: 0x10 } + - { offsetInCU: 0x12DB, offset: 0xE54CD, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfC', symObjAddr: 0x680, symBinAddr: 0x12490, symSize: 0x90 } + - { offsetInCU: 0x12EF, offset: 0xE54E1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7GLKViewC5frame7contextACSo6CGRectV_So11EAGLContextCtcfc', symObjAddr: 0x710, symBinAddr: 0x12520, symSize: 0x30 } + - { offsetInCU: 0x1408, offset: 0xE55FA, size: 0x8, addend: 0x0, symName: '_$sSo7GLKViewC12CanvasNativeE16snapshotWithDatayy10Foundation0F0VF', symObjAddr: 0x7B0, symBinAddr: 0x125C0, symSize: 0x300 } + - { offsetInCU: 0x17B2, offset: 0xE59A4, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvg', symObjAddr: 0xBE0, symBinAddr: 0x129F0, symSize: 0x30 } + - { offsetInCU: 0x17EF, offset: 0xE59E1, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvs', symObjAddr: 0xC50, symBinAddr: 0x12A60, symSize: 0x40 } + - { offsetInCU: 0x1816, offset: 0xE5A08, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM', symObjAddr: 0xC90, symBinAddr: 0x12AA0, symSize: 0x40 } + - { offsetInCU: 0x183B, offset: 0xE5A2D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC18ignorePixelScalingSbvM.resume.0', symObjAddr: 0xCD0, symBinAddr: 0x12AE0, symSize: 0x10 } + - { offsetInCU: 0x1862, offset: 0xE5A54, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfC', symObjAddr: 0xCE0, symBinAddr: 0x12AF0, symSize: 0x20 } + - { offsetInCU: 0x1876, offset: 0xE5A68, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewCACycfc', symObjAddr: 0xD00, symBinAddr: 0x12B10, symSize: 0x80 } + - { offsetInCU: 0x18BD, offset: 0xE5AAF, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5frameACSo6CGRectV_tcfc', symObjAddr: 0xE90, symBinAddr: 0x12CA0, symSize: 0xC0 } + - { offsetInCU: 0x191A, offset: 0xE5B0C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC5coderACSgSo7NSCoderC_tcfc', symObjAddr: 0xFF0, symBinAddr: 0x12E00, symSize: 0xB0 } + - { offsetInCU: 0x19B6, offset: 0xE5BA8, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtF12CanvasNative15NSCTouchHandlerC7PointerV_Tg5', symObjAddr: 0x1230, symBinAddr: 0x13030, symSize: 0xB0 } + - { offsetInCU: 0x1A98, offset: 0xE5C8A, size: 0x8, addend: 0x0, symName: '_$ss12_ArrayBufferV20_consumeAndCreateNew14bufferIsUnique15minimumCapacity13growForAppendAByxGSb_SiSbtFs5UInt8V_Tg5', symObjAddr: 0x12E0, symBinAddr: 0x130E0, symSize: 0xA0 } + - { offsetInCU: 0x1BA8, offset: 0xE5D9A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative0A7CPUViewC4drawyySo6CGRectVFTf4dn_n', symObjAddr: 0x1620, symBinAddr: 0x133E0, symSize: 0x410 } + - { offsetInCU: 0x4F, offset: 0xE619C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LLSo012OS_dispatch_E0CvpZ', symObjAddr: 0x1080, symBinAddr: 0x12AB918, symSize: 0x0 } + - { offsetInCU: 0x5D, offset: 0xE61AA, size: 0x8, addend: 0x0, symName: '_$sIegh_IeyBh_TR', symObjAddr: 0x0, symBinAddr: 0x139E0, symSize: 0x30 } + - { offsetInCU: 0x75, offset: 0xE61C2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC5queue33_7ED578B0ED4B2B6F6887A622A7B49AA3LL_WZ', symObjAddr: 0x30, symBinAddr: 0x13A10, symSize: 0xF0 } + - { offsetInCU: 0xBC, offset: 0xE6209, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZTo', symObjAddr: 0x130, symBinAddr: 0x13B10, symSize: 0x40 } + - { offsetInCU: 0x130, offset: 0xE627D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTo', symObjAddr: 0x3C0, symBinAddr: 0x13DA0, symSize: 0x80 } + - { offsetInCU: 0x183, offset: 0xE62D0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC21loadImageFromPathSyncySbs5Int64V_SStFZTo', symObjAddr: 0x4A0, symBinAddr: 0x13E80, symSize: 0x70 } + - { offsetInCU: 0x255, offset: 0xE63A2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZTo', symObjAddr: 0x7A0, symBinAddr: 0x14180, symSize: 0x80 } + - { offsetInCU: 0x2B4, offset: 0xE6401, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfcTo', symObjAddr: 0x870, symBinAddr: 0x14250, symSize: 0x30 } + - { offsetInCU: 0x307, offset: 0xE6454, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZTf4nnnd_n', symObjAddr: 0x8E0, symBinAddr: 0x142C0, symSize: 0x200 } + - { offsetInCU: 0x385, offset: 0xE64D2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZTf4nnnd_n', symObjAddr: 0xAE0, symBinAddr: 0x144C0, symSize: 0x210 } + - { offsetInCU: 0x40F, offset: 0xE655C, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfETo', symObjAddr: 0x8D0, symBinAddr: 0x142B0, symSize: 0x10 } + - { offsetInCU: 0x44B, offset: 0xE6598, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCMa', symObjAddr: 0xCF0, symBinAddr: 0x146D0, symSize: 0x20 } + - { offsetInCU: 0x46A, offset: 0xE65B7, size: 0x8, addend: 0x0, symName: '_$s10ObjectiveC8ObjCBoolVIeyBy_SbIegy_TRTA', symObjAddr: 0xD30, symBinAddr: 0x14710, symSize: 0x20 } + - { offsetInCU: 0x493, offset: 0xE65E0, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZyyYbcfU_TA', symObjAddr: 0xD80, symBinAddr: 0x14760, symSize: 0x20 } + - { offsetInCU: 0x4A7, offset: 0xE65F4, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0xDA0, symBinAddr: 0x14780, symSize: 0x20 } + - { offsetInCU: 0x4BB, offset: 0xE6608, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0xDC0, symBinAddr: 0x147A0, symSize: 0x10 } + - { offsetInCU: 0x4CF, offset: 0xE661C, size: 0x8, addend: 0x0, symName: '_$sSay8Dispatch0A13WorkItemFlagsVGMa', symObjAddr: 0xE40, symBinAddr: 0x147E0, symSize: 0x50 } + - { offsetInCU: 0x4E3, offset: 0xE6630, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_TA', symObjAddr: 0xF10, symBinAddr: 0x14880, symSize: 0x20 } + - { offsetInCU: 0x4F7, offset: 0xE6644, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU0_TA', symObjAddr: 0xF30, symBinAddr: 0x148A0, symSize: 0x20 } + - { offsetInCU: 0x52B, offset: 0xE6678, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_yyScMYccfU_TA', symObjAddr: 0xF50, symBinAddr: 0x148C0, symSize: 0x20 } + - { offsetInCU: 0x6FD, offset: 0xE684A, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF4SyncySbs5Int64V_So7UIImageCtFZ', symObjAddr: 0x120, symBinAddr: 0x13B00, symSize: 0x10 } + - { offsetInCU: 0x78A, offset: 0xE68D7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZ', symObjAddr: 0x170, symBinAddr: 0x13B50, symSize: 0x10 } + - { offsetInCU: 0x79E, offset: 0xE68EB, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC013loadImageFromF0yys5Int64V_So7UIImageCySbctFZyyYbcfU_', symObjAddr: 0x180, symBinAddr: 0x13B60, symSize: 0x240 } + - { offsetInCU: 0x8D5, offset: 0xE6A22, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC21loadImageFromPathSyncySbs5Int64V_SStFZ', symObjAddr: 0x440, symBinAddr: 0x13E20, symSize: 0x60 } + - { offsetInCU: 0x99F, offset: 0xE6AEC, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZ', symObjAddr: 0x510, symBinAddr: 0x13EF0, symSize: 0x10 } + - { offsetInCU: 0x9B3, offset: 0xE6B00, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetC17loadImageFromPathyys5Int64V_SSySbctFZyyYbcfU_', symObjAddr: 0x520, symBinAddr: 0x13F00, symSize: 0x280 } + - { offsetInCU: 0xA96, offset: 0xE6BE3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfC', symObjAddr: 0x820, symBinAddr: 0x14200, symSize: 0x20 } + - { offsetInCU: 0xAAA, offset: 0xE6BF7, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCACycfc', symObjAddr: 0x840, symBinAddr: 0x14220, symSize: 0x30 } + - { offsetInCU: 0xAE0, offset: 0xE6C2D, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative13NSCImageAssetCfD', symObjAddr: 0x8A0, symBinAddr: 0x14280, symSize: 0x30 } + - { offsetInCU: 0x27, offset: 0xE6CD3, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x149F0, symSize: 0x20 } + - { offsetInCU: 0x77, offset: 0xE6D23, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfcTo', symObjAddr: 0x70, symBinAddr: 0x14A60, symSize: 0x30 } + - { offsetInCU: 0xCB, offset: 0xE6D77, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCMa', symObjAddr: 0x50, symBinAddr: 0x14A40, symSize: 0x20 } + - { offsetInCU: 0x216, offset: 0xE6EC2, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfC', symObjAddr: 0x0, symBinAddr: 0x149F0, symSize: 0x20 } + - { offsetInCU: 0x22A, offset: 0xE6ED6, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCACycfc', symObjAddr: 0x20, symBinAddr: 0x14A10, symSize: 0x30 } + - { offsetInCU: 0x266, offset: 0xE6F12, size: 0x8, addend: 0x0, symName: '_$s12CanvasNative25NSCCanvasRenderingContextCfD', symObjAddr: 0xA0, symBinAddr: 0x14A90, symSize: 0x2B } + - { offsetInCU: 0x26, offset: 0xE6F5B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x3AC110, symSize: 0x3990 } + - { offsetInCU: 0x40, offset: 0xE6F75, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_k25519Precomp, symObjAddr: 0xEEC0, symBinAddr: 0xB64810, symSize: 0x0 } + - { offsetInCU: 0x92, offset: 0xE6FC7, size: 0x8, addend: 0x0, symName: _d, symObjAddr: 0x14EC0, symBinAddr: 0xB6A810, symSize: 0x0 } + - { offsetInCU: 0xF6, offset: 0xE702B, size: 0x8, addend: 0x0, symName: _sqrtm1, symObjAddr: 0x14EE8, symBinAddr: 0xB6A838, symSize: 0x0 } + - { offsetInCU: 0x10C, offset: 0xE7041, size: 0x8, addend: 0x0, symName: _d2, symObjAddr: 0x152F0, symBinAddr: 0xB6AC40, symSize: 0x0 } + - { offsetInCU: 0x123, offset: 0xE7058, size: 0x8, addend: 0x0, symName: _Bi, symObjAddr: 0x14F30, symBinAddr: 0xB6A880, symSize: 0x0 } + - { offsetInCU: 0xE22, offset: 0xE7D57, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_frombytes_vartime, symObjAddr: 0x0, symBinAddr: 0x3AC110, symSize: 0x3990 } + - { offsetInCU: 0x4DAE, offset: 0xEBCE3, size: 0x8, addend: 0x0, symName: _fe_mul_impl, symObjAddr: 0xE6E0, symBinAddr: 0x3BA7F0, symSize: 0x3E0 } + - { offsetInCU: 0x4FF1, offset: 0xEBF26, size: 0x8, addend: 0x0, symName: _fe_tobytes, symObjAddr: 0x7C20, symBinAddr: 0x3B3D30, symSize: 0x270 } + - { offsetInCU: 0x582C, offset: 0xEC761, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base, symObjAddr: 0x3990, symBinAddr: 0x3AFAA0, symSize: 0xA10 } + - { offsetInCU: 0x684B, offset: 0xED780, size: 0x8, addend: 0x0, symName: _table_select, symObjAddr: 0x43A0, symBinAddr: 0x3B04B0, symSize: 0xA10 } + - { offsetInCU: 0x6EE9, offset: 0xEDE1E, size: 0x8, addend: 0x0, symName: _ge_madd, symObjAddr: 0x4DB0, symBinAddr: 0x3B0EC0, symSize: 0x2B0 } + - { offsetInCU: 0x74BC, offset: 0xEE3F1, size: 0x8, addend: 0x0, symName: _ge_p2_dbl, symObjAddr: 0x5060, symBinAddr: 0x3B1170, symSize: 0xCD0 } + - { offsetInCU: 0x83FE, offset: 0xEF333, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_reduce, symObjAddr: 0x5D30, symBinAddr: 0x3B1E40, symSize: 0xB40 } + - { offsetInCU: 0x8F67, offset: 0xEFE9C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_generic_masked, symObjAddr: 0x6870, symBinAddr: 0x3B2980, symSize: 0x13B0 } + - { offsetInCU: 0xA567, offset: 0xF149C, size: 0x8, addend: 0x0, symName: _fe_loose_invert, symObjAddr: 0x7FF0, symBinAddr: 0x3B4100, symSize: 0x2A30 } + - { offsetInCU: 0xDC6D, offset: 0xF4BA2, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_public_from_private_generic_masked, symObjAddr: 0x7E90, symBinAddr: 0x3B3FA0, symSize: 0x160 } + - { offsetInCU: 0xDEE7, offset: 0xF4E1C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_invert, symObjAddr: 0xAA20, symBinAddr: 0x3B6B30, symSize: 0x30 } + - { offsetInCU: 0xDFDC, offset: 0xF4F11, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_isnegative, symObjAddr: 0xAA50, symBinAddr: 0x3B6B60, symSize: 0x50 } + - { offsetInCU: 0xE051, offset: 0xF4F86, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_mul_ttt, symObjAddr: 0xAAA0, symBinAddr: 0x3B6BB0, symSize: 0x10 } + - { offsetInCU: 0xE0EC, offset: 0xF5021, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_neg, symObjAddr: 0xAAB0, symBinAddr: 0x3B6BC0, symSize: 0xB0 } + - { offsetInCU: 0xE217, offset: 0xF514C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_fe_tobytes, symObjAddr: 0xAB60, symBinAddr: 0x3B6C70, symSize: 0x10 } + - { offsetInCU: 0xE4E9, offset: 0xF541E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_double_scalarmult_vartime, symObjAddr: 0xAB70, symBinAddr: 0x3B6C80, symSize: 0x21A0 } + - { offsetInCU: 0x1118F, offset: 0xF80C4, size: 0x8, addend: 0x0, symName: _x25519_ge_add, symObjAddr: 0xEAC0, symBinAddr: 0x3BABD0, symSize: 0x2D1 } + - { offsetInCU: 0x117CF, offset: 0xF8704, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_mask, symObjAddr: 0xCD10, symBinAddr: 0x3B8E20, symSize: 0x20 } + - { offsetInCU: 0x11C6C, offset: 0xF8BA1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_sc_muladd, symObjAddr: 0xCD30, symBinAddr: 0x3B8E40, symSize: 0x19B0 } + - { offsetInCU: 0x26, offset: 0xF9C51, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x3BAEB0, symSize: 0x800 } + - { offsetInCU: 0x41, offset: 0xF9C6C, size: 0x8, addend: 0x0, symName: _aes_nohw_rcon, symObjAddr: 0x1B10, symBinAddr: 0xB6AD20, symSize: 0x0 } + - { offsetInCU: 0x484, offset: 0xFA0AF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_set_encrypt_key, symObjAddr: 0x0, symBinAddr: 0x3BAEB0, symSize: 0x800 } + - { offsetInCU: 0x1B2B, offset: 0xFB756, size: 0x8, addend: 0x0, symName: _aes_nohw_sub_bytes, symObjAddr: 0x15F0, symBinAddr: 0x3BC4A0, symSize: 0x300 } + - { offsetInCU: 0x32EE, offset: 0xFCF19, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_encrypt, symObjAddr: 0x800, symBinAddr: 0x3BB6B0, symSize: 0x80 } + - { offsetInCU: 0x33DC, offset: 0xFD007, size: 0x8, addend: 0x0, symName: _aes_nohw_expand_round_keys, symObjAddr: 0x880, symBinAddr: 0x3BB730, symSize: 0x1A0 } + - { offsetInCU: 0x386D, offset: 0xFD498, size: 0x8, addend: 0x0, symName: _aes_nohw_to_batch, symObjAddr: 0xA20, symBinAddr: 0x3BB8D0, symSize: 0x420 } + - { offsetInCU: 0x3D7D, offset: 0xFD9A8, size: 0x8, addend: 0x0, symName: _aes_nohw_encrypt_batch, symObjAddr: 0xE40, symBinAddr: 0x3BBCF0, symSize: 0x380 } + - { offsetInCU: 0x424C, offset: 0xFDE77, size: 0x8, addend: 0x0, symName: _aes_nohw_from_batch, symObjAddr: 0x11C0, symBinAddr: 0x3BC070, symSize: 0x250 } + - { offsetInCU: 0x498D, offset: 0xFE5B8, size: 0x8, addend: 0x0, symName: _aes_nohw_shift_rows, symObjAddr: 0x18F0, symBinAddr: 0x3BC7A0, symSize: 0x149 } + - { offsetInCU: 0x4BF9, offset: 0xFE824, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_nohw_ctr32_encrypt_blocks, symObjAddr: 0x1410, symBinAddr: 0x3BC2C0, symSize: 0x1E0 } + - { offsetInCU: 0x26, offset: 0xFEC45, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x3BC8F0, symSize: 0x2DC } + - { offsetInCU: 0x1D2, offset: 0xFEDF1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_from_montgomery_in_place, symObjAddr: 0x0, symBinAddr: 0x3BC8F0, symSize: 0x2DC } + - { offsetInCU: 0x26, offset: 0xFF04A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x3BCBD0, symSize: 0x87 } + - { offsetInCU: 0x34, offset: 0xFF058, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_neg_inv_mod_r_u64, symObjAddr: 0x0, symBinAddr: 0x3BCBD0, symSize: 0x87 } + - { offsetInCU: 0x26, offset: 0xFF168, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3BCC60, symSize: 0x46 } + - { offsetInCU: 0x34, offset: 0xFF176, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_little_endian_bytes_from_scalar, symObjAddr: 0x0, symBinAddr: 0x3BCC60, symSize: 0x46 } + - { offsetInCU: 0x86, offset: 0xFF2D9, size: 0x8, addend: 0x0, symName: _Q_N0, symObjAddr: 0x15F0, symBinAddr: 0xB6ADA0, symSize: 0x0 } + - { offsetInCU: 0xB8, offset: 0xFF30B, size: 0x8, addend: 0x0, symName: _Q, symObjAddr: 0x1580, symBinAddr: 0xB6AD30, symSize: 0x0 } + - { offsetInCU: 0xDA, offset: 0xFF32D, size: 0x8, addend: 0x0, symName: _N, symObjAddr: 0x15B0, symBinAddr: 0xB6AD60, symSize: 0x0 } + - { offsetInCU: 0xF0, offset: 0xFF343, size: 0x8, addend: 0x0, symName: _N_N0, symObjAddr: 0x15E0, symBinAddr: 0xB6AD90, symSize: 0x0 } + - { offsetInCU: 0x3B7, offset: 0xFF60A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_elem_mul_mont, symObjAddr: 0x150, symBinAddr: 0x3BCCB0, symSize: 0x20 } + - { offsetInCU: 0x594, offset: 0xFF7E7, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_scalar_mul_mont, symObjAddr: 0x250, symBinAddr: 0x3BCCD0, symSize: 0x20 } + - { offsetInCU: 0x63F, offset: 0xFF892, size: 0x8, addend: 0x0, symName: _nistz384_point_double, symObjAddr: 0x340, symBinAddr: 0x3BCCF0, symSize: 0x3A0 } + - { offsetInCU: 0x11A7, offset: 0x1003FA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_add, symObjAddr: 0x6E0, symBinAddr: 0x3BD090, symSize: 0x140 } + - { offsetInCU: 0x14A2, offset: 0x1006F5, size: 0x8, addend: 0x0, symName: _nistz384_point_add, symObjAddr: 0x820, symBinAddr: 0x3BD1D0, symSize: 0x6B0 } + - { offsetInCU: 0x26DA, offset: 0x10192D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p384_point_mul, symObjAddr: 0xED0, symBinAddr: 0x3BD880, symSize: 0x380 } + - { offsetInCU: 0x2D37, offset: 0x101F8A, size: 0x8, addend: 0x0, symName: _p384_point_select_w5, symObjAddr: 0x1250, symBinAddr: 0x3BDC00, symSize: 0x170 } + - { offsetInCU: 0x2F2F, offset: 0x102182, size: 0x8, addend: 0x0, symName: _add_precomputed_w5, symObjAddr: 0x13C0, symBinAddr: 0x3BDD70, symSize: 0x1BF } + - { offsetInCU: 0x26, offset: 0x1024CD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3BDF30, symSize: 0x50 } + - { offsetInCU: 0xFA, offset: 0x1025A1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_zero, symObjAddr: 0x0, symBinAddr: 0x3BDF30, symSize: 0x50 } + - { offsetInCU: 0x18D, offset: 0x102634, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal, symObjAddr: 0x50, symBinAddr: 0x3BDF80, symSize: 0x60 } + - { offsetInCU: 0x2F1, offset: 0x102798, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_equal_limb, symObjAddr: 0xB0, symBinAddr: 0x3BDFE0, symSize: 0x90 } + - { offsetInCU: 0x4C6, offset: 0x10296D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_are_even, symObjAddr: 0x140, symBinAddr: 0x3BE070, symSize: 0x20 } + - { offsetInCU: 0x5E3, offset: 0x102A8A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than, symObjAddr: 0x160, symBinAddr: 0x3BE090, symSize: 0xB0 } + - { offsetInCU: 0x696, offset: 0x102B3D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_less_than_limb, symObjAddr: 0x210, symBinAddr: 0x3BE140, symSize: 0x70 } + - { offsetInCU: 0x861, offset: 0x102D08, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_reduce_once, symObjAddr: 0x280, symBinAddr: 0x3BE1B0, symSize: 0x170 } + - { offsetInCU: 0xB67, offset: 0x10300E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_add_mod, symObjAddr: 0x3F0, symBinAddr: 0x3BE320, symSize: 0x270 } + - { offsetInCU: 0xE6A, offset: 0x103311, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_sub_mod, symObjAddr: 0x660, symBinAddr: 0x3BE590, symSize: 0x1A0 } + - { offsetInCU: 0x105D, offset: 0x103504, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_shl_mod, symObjAddr: 0x800, symBinAddr: 0x3BE730, symSize: 0x280 } + - { offsetInCU: 0x128C, offset: 0x103733, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_split_window, symObjAddr: 0xC20, symBinAddr: 0x3BE9B0, symSize: 0x20 } + - { offsetInCU: 0x12F3, offset: 0x10379A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMBS_window5_unsplit_window, symObjAddr: 0xC40, symBinAddr: 0x3BE9D0, symSize: 0x20 } + - { offsetInCU: 0x132A, offset: 0x1037D1, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_LIMB_shr, symObjAddr: 0xC60, symBinAddr: 0x3BE9F0, symSize: 0x10 } + - { offsetInCU: 0x13AC, offset: 0x103853, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_limbs_mul_add_limb, symObjAddr: 0xC70, symBinAddr: 0x3BEA00, symSize: 0x4A } + - { offsetInCU: 0x26, offset: 0x1039DF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x3BEA50, symSize: 0x129 } + - { offsetInCU: 0x34, offset: 0x1039ED, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_memcmp, symObjAddr: 0x0, symBinAddr: 0x3BEA50, symSize: 0x129 } + - { offsetInCU: 0x34, offset: 0x103AEF, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_ia32cap_P, symObjAddr: 0x3F0, symBinAddr: 0x12B30C0, symSize: 0x0 } + - { offsetInCU: 0x26, offset: 0x103B44, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0x3BEB80, symSize: 0xF8 } + - { offsetInCU: 0xD5, offset: 0x103BF3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_OPENSSL_cpuid_setup, symObjAddr: 0x0, symBinAddr: 0x3BEB80, symSize: 0xF8 } + - { offsetInCU: 0x26, offset: 0x103D48, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0x3BEC80, symSize: 0x1210 } + - { offsetInCU: 0x92E, offset: 0x104650, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_scalar_mult_adx, symObjAddr: 0x0, symBinAddr: 0x3BEC80, symSize: 0x1210 } + - { offsetInCU: 0x5347, offset: 0x109069, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_x25519_ge_scalarmult_base_adx, symObjAddr: 0x1210, symBinAddr: 0x3BFE90, symSize: 0x1E50 } + - { offsetInCU: 0x9B2F, offset: 0x10D851, size: 0x8, addend: 0x0, symName: _inline_x25519_ge_dbl_4, symObjAddr: 0x3060, symBinAddr: 0x3C1CE0, symSize: 0x361 } + - { offsetInCU: 0x26, offset: 0x10EC3E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0x3C2050, symSize: 0xD0 } + - { offsetInCU: 0x303, offset: 0x10EF1B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_init, symObjAddr: 0x0, symBinAddr: 0x3C2050, symSize: 0xD0 } + - { offsetInCU: 0x5A4, offset: 0x10F1BC, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_update, symObjAddr: 0xD0, symBinAddr: 0x3C2120, symSize: 0x1C0 } + - { offsetInCU: 0x764, offset: 0x10F37C, size: 0x8, addend: 0x0, symName: _poly1305_blocks, symObjAddr: 0x5F0, symBinAddr: 0x3C2640, symSize: 0x780 } + - { offsetInCU: 0x903, offset: 0x10F51B, size: 0x8, addend: 0x0, symName: _poly1305_first_block, symObjAddr: 0x290, symBinAddr: 0x3C22E0, symSize: 0x360 } + - { offsetInCU: 0xEFC, offset: 0x10FB14, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_CRYPTO_poly1305_finish, symObjAddr: 0xD70, symBinAddr: 0x3C2DC0, symSize: 0xAA2 } + - { offsetInCU: 0x10, offset: 0x11029D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0x3C3862, symSize: 0x2AF } + - { offsetInCU: 0x51, offset: 0x1102DE, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_mul, symObjAddr: 0x0, symBinAddr: 0x3C3862, symSize: 0x2AF } + - { offsetInCU: 0x10, offset: 0x1102D3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0x3C3B11, symSize: 0x1F4 } + - { offsetInCU: 0x54, offset: 0x110317, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_fiat_curve25519_adx_square, symObjAddr: 0x0, symBinAddr: 0x3C3B11, symSize: 0x1F4 } + - { offsetInCU: 0x26, offset: 0x11031F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3C3D10, symSize: 0x490 } + - { offsetInCU: 0x76, offset: 0x11036F, size: 0x8, addend: 0x0, symName: _ecp_nistz256_precomputed, symObjAddr: 0x1000, symBinAddr: 0xB6B000, symSize: 0x0 } + - { offsetInCU: 0xFA, offset: 0x1103F3, size: 0x8, addend: 0x0, symName: _ONE, symObjAddr: 0x26000, symBinAddr: 0xB90000, symSize: 0x0 } + - { offsetInCU: 0x35B, offset: 0x110654, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul, symObjAddr: 0x0, symBinAddr: 0x3C3D10, symSize: 0x490 } + - { offsetInCU: 0xC5A, offset: 0x110F53, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base, symObjAddr: 0x490, symBinAddr: 0x3C41A0, symSize: 0x300 } + - { offsetInCU: 0x1135, offset: 0x11142E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_mul_base_vartime, symObjAddr: 0x790, symBinAddr: 0x3C44A0, symSize: 0x25D } + - { offsetInCU: 0x10, offset: 0x1117F3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x3C4700, symSize: 0x3A0 } + - { offsetInCU: 0x48, offset: 0x11182B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ChaCha20_ctr32, symObjAddr: 0x0, symBinAddr: 0x3C4700, symSize: 0x3A0 } + - { offsetInCU: 0x4D, offset: 0x111830, size: 0x8, addend: 0x0, symName: ChaCha20_ssse3, symObjAddr: 0x3A0, symBinAddr: 0x3C4AA0, symSize: 0x220 } + - { offsetInCU: 0x60, offset: 0x111843, size: 0x8, addend: 0x0, symName: ChaCha20_4x, symObjAddr: 0x5C0, symBinAddr: 0x3C4CC0, symSize: 0xA20 } + - { offsetInCU: 0x76, offset: 0x111859, size: 0x8, addend: 0x0, symName: ChaCha20_8x, symObjAddr: 0xFE0, symBinAddr: 0x3C56E0, symSize: 0xB4C } + - { offsetInCU: 0x10, offset: 0x11186B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0x3C6240, symSize: 0x40 } + - { offsetInCU: 0x48, offset: 0x1118A3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_encrypt, symObjAddr: 0x0, symBinAddr: 0x3C6240, symSize: 0x40 } + - { offsetInCU: 0x4D, offset: 0x1118A8, size: 0x8, addend: 0x0, symName: _aesni_encrypt2, symObjAddr: 0x40, symBinAddr: 0x3C6280, symSize: 0x60 } + - { offsetInCU: 0x63, offset: 0x1118BE, size: 0x8, addend: 0x0, symName: _aesni_encrypt3, symObjAddr: 0xA0, symBinAddr: 0x3C62E0, symSize: 0x70 } + - { offsetInCU: 0x79, offset: 0x1118D4, size: 0x8, addend: 0x0, symName: _aesni_encrypt4, symObjAddr: 0x110, symBinAddr: 0x3C6350, symSize: 0x90 } + - { offsetInCU: 0x8F, offset: 0x1118EA, size: 0x8, addend: 0x0, symName: _aesni_encrypt6, symObjAddr: 0x1A0, symBinAddr: 0x3C63E0, symSize: 0xE0 } + - { offsetInCU: 0xA5, offset: 0x111900, size: 0x8, addend: 0x0, symName: _aesni_encrypt8, symObjAddr: 0x280, symBinAddr: 0x3C64C0, symSize: 0x110 } + - { offsetInCU: 0xD9, offset: 0x111934, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aes_hw_ctr32_encrypt_blocks, symObjAddr: 0x390, symBinAddr: 0x3C65D0, symSize: 0x940 } + - { offsetInCU: 0xEA, offset: 0x111945, size: 0x8, addend: 0x0, symName: __aesni_set_encrypt_key, symObjAddr: 0xCD0, symBinAddr: 0x3C6F10, symSize: 0x44D } + - { offsetInCU: 0x10, offset: 0x11193B, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0x3C7360, symSize: 0x160 } + - { offsetInCU: 0x3B, offset: 0x111966, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core, symObjAddr: 0x0, symBinAddr: 0x3C7360, symSize: 0x160 } + - { offsetInCU: 0x54, offset: 0x11197F, size: 0x8, addend: 0x0, symName: _vpaes_encrypt_core_2x, symObjAddr: 0x160, symBinAddr: 0x3C74C0, symSize: 0x290 } + - { offsetInCU: 0x68, offset: 0x111993, size: 0x8, addend: 0x0, symName: _vpaes_schedule_core, symObjAddr: 0x3F0, symBinAddr: 0x3C7750, symSize: 0xF0 } + - { offsetInCU: 0x7F, offset: 0x1119AA, size: 0x8, addend: 0x0, symName: _vpaes_schedule_round, symObjAddr: 0x4E0, symBinAddr: 0x3C7840, symSize: 0x21 } + - { offsetInCU: 0x99, offset: 0x1119C4, size: 0x8, addend: 0x0, symName: _vpaes_schedule_low_round, symObjAddr: 0x501, symBinAddr: 0x3C7861, symSize: 0x9F } + - { offsetInCU: 0xAF, offset: 0x1119DA, size: 0x8, addend: 0x0, symName: _vpaes_schedule_transform, symObjAddr: 0x5A0, symBinAddr: 0x3C7900, symSize: 0x30 } + - { offsetInCU: 0xC2, offset: 0x1119ED, size: 0x8, addend: 0x0, symName: _vpaes_schedule_mangle, symObjAddr: 0x5D0, symBinAddr: 0x3C7930, symSize: 0x50 } + - { offsetInCU: 0xE9, offset: 0x111A14, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_set_encrypt_key, symObjAddr: 0x620, symBinAddr: 0x3C7980, symSize: 0x30 } + - { offsetInCU: 0xF7, offset: 0x111A22, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_encrypt, symObjAddr: 0x650, symBinAddr: 0x3C79B0, symSize: 0x20 } + - { offsetInCU: 0x11A, offset: 0x111A45, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_vpaes_ctr32_encrypt_blocks, symObjAddr: 0x670, symBinAddr: 0x3C79D0, symSize: 0xD0 } + - { offsetInCU: 0x112, offset: 0x111A3D, size: 0x8, addend: 0x0, symName: _vpaes_preheat, symObjAddr: 0x740, symBinAddr: 0x3C7AA0, symSize: 0x31 } + - { offsetInCU: 0x10, offset: 0x111A4D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x3C7AE0, symSize: 0x2A0 } + - { offsetInCU: 0x45, offset: 0x111A82, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont, symObjAddr: 0x0, symBinAddr: 0x3C7AE0, symSize: 0x2A0 } + - { offsetInCU: 0x4C, offset: 0x111A89, size: 0x8, addend: 0x0, symName: bn_mul4x_mont, symObjAddr: 0x2A0, symBinAddr: 0x3C7D80, symSize: 0x560 } + - { offsetInCU: 0x62, offset: 0x111A9F, size: 0x8, addend: 0x0, symName: bn_sqr8x_mont, symObjAddr: 0x800, symBinAddr: 0x3C82E0, symSize: 0x220 } + - { offsetInCU: 0x79, offset: 0x111AB6, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont, symObjAddr: 0xA20, symBinAddr: 0x3C8500, symSize: 0x570 } + - { offsetInCU: 0x10, offset: 0x111AC5, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0x3C8A80, symSize: 0x660 } + - { offsetInCU: 0x4D, offset: 0x111B02, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_mul_mont_gather5, symObjAddr: 0x0, symBinAddr: 0x3C8A80, symSize: 0x660 } + - { offsetInCU: 0x54, offset: 0x111B09, size: 0x8, addend: 0x0, symName: bn_mul4x_mont_gather5, symObjAddr: 0x660, symBinAddr: 0x3C90E0, symSize: 0x100 } + - { offsetInCU: 0x63, offset: 0x111B18, size: 0x8, addend: 0x0, symName: mul4x_internal, symObjAddr: 0x760, symBinAddr: 0x3C91E0, symSize: 0x7E0 } + - { offsetInCU: 0x85, offset: 0x111B3A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_power5, symObjAddr: 0xF40, symBinAddr: 0x3C99C0, symSize: 0x180 } + - { offsetInCU: 0xA3, offset: 0x111B58, size: 0x8, addend: 0x0, symName: __bn_sqr8x_internal, symObjAddr: 0x10C0, symBinAddr: 0x3C9B40, symSize: 0x579 } + - { offsetInCU: 0xAA, offset: 0x111B5F, size: 0x8, addend: 0x0, symName: __bn_sqr8x_reduction, symObjAddr: 0x1639, symBinAddr: 0x3CA0B9, symSize: 0x347 } + - { offsetInCU: 0xC0, offset: 0x111B75, size: 0x8, addend: 0x0, symName: __bn_post4x_internal, symObjAddr: 0x1980, symBinAddr: 0x3CA400, symSize: 0xA0 } + - { offsetInCU: 0xD9, offset: 0x111B8E, size: 0x8, addend: 0x0, symName: bn_mulx4x_mont_gather5, symObjAddr: 0x1A20, symBinAddr: 0x3CA4A0, symSize: 0xE0 } + - { offsetInCU: 0xE8, offset: 0x111B9D, size: 0x8, addend: 0x0, symName: mulx4x_internal, symObjAddr: 0x1B00, symBinAddr: 0x3CA580, symSize: 0x7E0 } + - { offsetInCU: 0xF9, offset: 0x111BAE, size: 0x8, addend: 0x0, symName: bn_powerx5, symObjAddr: 0x22E0, symBinAddr: 0x3CAD60, symSize: 0x160 } + - { offsetInCU: 0x128, offset: 0x111BDD, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_internal, symObjAddr: 0x2440, symBinAddr: 0x3CAEC0, symSize: 0x637 } + - { offsetInCU: 0x12F, offset: 0x111BE4, size: 0x8, addend: 0x0, symName: __bn_sqrx8x_reduction, symObjAddr: 0x2A77, symBinAddr: 0x3CB4F7, symSize: 0x329 } + - { offsetInCU: 0x145, offset: 0x111BFA, size: 0x8, addend: 0x0, symName: __bn_postx4x_internal, symObjAddr: 0x2DA0, symBinAddr: 0x3CB820, symSize: 0x90 } + - { offsetInCU: 0x163, offset: 0x111C18, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_scatter5, symObjAddr: 0x2E30, symBinAddr: 0x3CB8B0, symSize: 0x30 } + - { offsetInCU: 0x178, offset: 0x111C2D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_bn_gather5, symObjAddr: 0x2E60, symBinAddr: 0x3CB8E0, symSize: 0x27F } + - { offsetInCU: 0x10, offset: 0x111C2F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0x3CBB60, symSize: 0x80 } + - { offsetInCU: 0x4A, offset: 0x111C69, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_neg, symObjAddr: 0x0, symBinAddr: 0x3CBB60, symSize: 0x80 } + - { offsetInCU: 0x64, offset: 0x111C83, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_mul_mont, symObjAddr: 0x80, symBinAddr: 0x3CBBE0, symSize: 0x360 } + - { offsetInCU: 0x7E, offset: 0x111C9D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_scalar_sqr_rep_mont, symObjAddr: 0x3E0, symBinAddr: 0x3CBF40, symSize: 0x300 } + - { offsetInCU: 0x85, offset: 0x111CA4, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_mul_montx, symObjAddr: 0x6E0, symBinAddr: 0x3CC240, symSize: 0x3C0 } + - { offsetInCU: 0x9B, offset: 0x111CBA, size: 0x8, addend: 0x0, symName: ecp_nistz256_ord_sqr_montx, symObjAddr: 0xAA0, symBinAddr: 0x3CC600, symSize: 0x320 } + - { offsetInCU: 0xB5, offset: 0x111CD4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_mul_mont, symObjAddr: 0xDC0, symBinAddr: 0x3CC920, symSize: 0xA0 } + - { offsetInCU: 0xC4, offset: 0x111CE3, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montq, symObjAddr: 0xE60, symBinAddr: 0x3CC9C0, symSize: 0x240 } + - { offsetInCU: 0xE1, offset: 0x111D00, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_sqr_mont, symObjAddr: 0x10A0, symBinAddr: 0x3CCC00, symSize: 0x80 } + - { offsetInCU: 0xF0, offset: 0x111D0F, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montq, symObjAddr: 0x1120, symBinAddr: 0x3CCC80, symSize: 0x1A0 } + - { offsetInCU: 0x106, offset: 0x111D25, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_montx, symObjAddr: 0x12C0, symBinAddr: 0x3CCE20, symSize: 0x260 } + - { offsetInCU: 0x11C, offset: 0x111D3B, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sqr_montx, symObjAddr: 0x1520, symBinAddr: 0x3CD080, symSize: 0x1C0 } + - { offsetInCU: 0x142, offset: 0x111D61, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w5, symObjAddr: 0x16E0, symBinAddr: 0x3CD240, symSize: 0xE0 } + - { offsetInCU: 0x158, offset: 0x111D77, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_ecp_nistz256_select_w7, symObjAddr: 0x17C0, symBinAddr: 0x3CD320, symSize: 0xC0 } + - { offsetInCU: 0x162, offset: 0x111D81, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w5, symObjAddr: 0x1880, symBinAddr: 0x3CD3E0, symSize: 0xC0 } + - { offsetInCU: 0x178, offset: 0x111D97, size: 0x8, addend: 0x0, symName: ecp_nistz256_avx2_select_w7, symObjAddr: 0x1940, symBinAddr: 0x3CD4A0, symSize: 0xE0 } + - { offsetInCU: 0x188, offset: 0x111DA7, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_toq, symObjAddr: 0x1A20, symBinAddr: 0x3CD580, symSize: 0x60 } + - { offsetInCU: 0x1A0, offset: 0x111DBF, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromq, symObjAddr: 0x1A80, symBinAddr: 0x3CD5E0, symSize: 0x60 } + - { offsetInCU: 0x1B1, offset: 0x111DD0, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subq, symObjAddr: 0x1AE0, symBinAddr: 0x3CD640, symSize: 0x40 } + - { offsetInCU: 0x1CC, offset: 0x111DEB, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2q, symObjAddr: 0x1B20, symBinAddr: 0x3CD680, symSize: 0x60 } + - { offsetInCU: 0x1ED, offset: 0x111E0C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_double, symObjAddr: 0x1B80, symBinAddr: 0x3CD6E0, symSize: 0x320 } + - { offsetInCU: 0x200, offset: 0x111E1F, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add, symObjAddr: 0x1EA0, symBinAddr: 0x3CDA00, symSize: 0x780 } + - { offsetInCU: 0x21D, offset: 0x111E3C, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_p256_point_add_affine, symObjAddr: 0x2620, symBinAddr: 0x3CE180, symSize: 0x580 } + - { offsetInCU: 0x222, offset: 0x111E41, size: 0x8, addend: 0x0, symName: __ecp_nistz256_add_tox, symObjAddr: 0x2BA0, symBinAddr: 0x3CE700, symSize: 0x60 } + - { offsetInCU: 0x23A, offset: 0x111E59, size: 0x8, addend: 0x0, symName: __ecp_nistz256_sub_fromx, symObjAddr: 0x2C00, symBinAddr: 0x3CE760, symSize: 0x60 } + - { offsetInCU: 0x24B, offset: 0x111E6A, size: 0x8, addend: 0x0, symName: __ecp_nistz256_subx, symObjAddr: 0x2C60, symBinAddr: 0x3CE7C0, symSize: 0x60 } + - { offsetInCU: 0x266, offset: 0x111E85, size: 0x8, addend: 0x0, symName: __ecp_nistz256_mul_by_2x, symObjAddr: 0x2CC0, symBinAddr: 0x3CE820, symSize: 0x60 } + - { offsetInCU: 0x27F, offset: 0x111E9E, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_doublex, symObjAddr: 0x2D20, symBinAddr: 0x3CE880, symSize: 0x320 } + - { offsetInCU: 0x292, offset: 0x111EB1, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_addx, symObjAddr: 0x3040, symBinAddr: 0x3CEBA0, symSize: 0x760 } + - { offsetInCU: 0x2AF, offset: 0x111ECE, size: 0x8, addend: 0x0, symName: ecp_nistz256_point_add_affinex, symObjAddr: 0x37A0, symBinAddr: 0x3CF300, symSize: 0x555 } + - { offsetInCU: 0x10, offset: 0x111ECD, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0x3CF860, symSize: 0x5A0 } + - { offsetInCU: 0x3D, offset: 0x111EFA, size: 0x8, addend: 0x0, symName: _aesni_ctr32_ghash_6x, symObjAddr: 0x0, symBinAddr: 0x3CF860, symSize: 0x5A0 } + - { offsetInCU: 0x61, offset: 0x111F1E, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_decrypt, symObjAddr: 0x5A0, symBinAddr: 0x3CFE00, symSize: 0x140 } + - { offsetInCU: 0x63, offset: 0x111F20, size: 0x8, addend: 0x0, symName: _aesni_ctr32_6x, symObjAddr: 0x6E0, symBinAddr: 0x3CFF40, symSize: 0x180 } + - { offsetInCU: 0x8D, offset: 0x111F4A, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_aesni_gcm_encrypt, symObjAddr: 0x860, symBinAddr: 0x3D00C0, symSize: 0x423 } + - { offsetInCU: 0x10, offset: 0x111F45, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3D0500, symSize: 0x260 } + - { offsetInCU: 0x48, offset: 0x111F7D, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_clmul, symObjAddr: 0x0, symBinAddr: 0x3D0500, symSize: 0x260 } + - { offsetInCU: 0x5F, offset: 0x111F94, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_gmult_clmul, symObjAddr: 0x260, symBinAddr: 0x3D0760, symSize: 0xC0 } + - { offsetInCU: 0x75, offset: 0x111FAA, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_clmul, symObjAddr: 0x320, symBinAddr: 0x3D0820, symSize: 0x660 } + - { offsetInCU: 0x88, offset: 0x111FBD, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_init_avx, symObjAddr: 0x980, symBinAddr: 0x3D0E80, symSize: 0x1A0 } + - { offsetInCU: 0x9F, offset: 0x111FD4, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_gcm_ghash_avx, symObjAddr: 0xB20, symBinAddr: 0x3D1020, symSize: 0x697 } + - { offsetInCU: 0x10, offset: 0x111FD3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3D16C0, symSize: 0x1240 } + - { offsetInCU: 0x51, offset: 0x112014, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha512_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3D16C0, symSize: 0x1240 } + - { offsetInCU: 0x5A, offset: 0x11201D, size: 0x8, addend: 0x0, symName: sha512_block_data_order_avx, symObjAddr: 0x1240, symBinAddr: 0x3D2900, symSize: 0x1176 } + - { offsetInCU: 0x10, offset: 0x11201F, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0x3D3A80, symSize: 0x200 } + - { offsetInCU: 0x44, offset: 0x112053, size: 0x8, addend: 0x0, symName: poly_hash_ad_internal, symObjAddr: 0x0, symBinAddr: 0x3D3A80, symSize: 0x200 } + - { offsetInCU: 0x66, offset: 0x112075, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_open, symObjAddr: 0x200, symBinAddr: 0x3D3C80, symSize: 0x21C0 } + - { offsetInCU: 0x7C, offset: 0x11208B, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_chacha20_poly1305_seal, symObjAddr: 0x23C0, symBinAddr: 0x3D5E40, symSize: 0x1D2D } + - { offsetInCU: 0x83, offset: 0x112092, size: 0x8, addend: 0x0, symName: process_extra_in_trailer, symObjAddr: 0x40ED, symBinAddr: 0x3D7B6D, symSize: 0x553 } + - { offsetInCU: 0x9C, offset: 0x1120AB, size: 0x8, addend: 0x0, symName: chacha20_poly1305_open_avx2, symObjAddr: 0x4640, symBinAddr: 0x3D80C0, symSize: 0x25C0 } + - { offsetInCU: 0xB2, offset: 0x1120C1, size: 0x8, addend: 0x0, symName: chacha20_poly1305_seal_avx2, symObjAddr: 0x6C00, symBinAddr: 0x3DA680, symSize: 0x2F01 } + - { offsetInCU: 0x10, offset: 0x1120C3, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3DD5C0, symSize: 0x1200 } + - { offsetInCU: 0x51, offset: 0x112104, size: 0x8, addend: 0x0, symName: _ring_core_0_17_8_sha256_block_data_order, symObjAddr: 0x0, symBinAddr: 0x3DD5C0, symSize: 0x1200 } + - { offsetInCU: 0x5D, offset: 0x112110, size: 0x8, addend: 0x0, symName: sha256_block_data_order_shaext, symObjAddr: 0x1200, symBinAddr: 0x3DE7C0, symSize: 0x340 } + - { offsetInCU: 0x72, offset: 0x112125, size: 0x8, addend: 0x0, symName: sha256_block_data_order_ssse3, symObjAddr: 0x1540, symBinAddr: 0x3DEB00, symSize: 0xEC0 } + - { offsetInCU: 0x86, offset: 0x112139, size: 0x8, addend: 0x0, symName: sha256_block_data_order_avx, symObjAddr: 0x2400, symBinAddr: 0x3DF9C0, symSize: 0xEF7 } ... diff --git a/packages/canvas/platforms/ios/src/cpp/CanvasJSIModule.cpp b/packages/canvas/platforms/ios/src/cpp/CanvasJSIModule.cpp index c6054797e..f2ca6aa43 100644 --- a/packages/canvas/platforms/ios/src/cpp/CanvasJSIModule.cpp +++ b/packages/canvas/platforms/ios/src/cpp/CanvasJSIModule.cpp @@ -178,6 +178,10 @@ void CanvasJSIModule::install(v8::Isolate *isolate) { v8::FunctionTemplate::New(isolate, &ReadFile)->GetFunction( context).ToLocalChecked()).FromJust(); + canvasMod->Set(context, ConvertToV8String(isolate, "getMime"), + v8::FunctionTemplate::New(isolate, &GetMime)->GetFunction( + context).ToLocalChecked()).FromJust(); + canvasMod->Set(context, ConvertToV8String(isolate, "createWebGLContext"), v8::FunctionTemplate::New(isolate, &CreateWebGLContext)->GetFunction( context).ToLocalChecked()).FromJust(); @@ -232,19 +236,8 @@ void CanvasJSIModule::Create2DContext(const v8::FunctionCallbackInfo auto isolate = args.GetIsolate(); auto context = isolate->GetCurrentContext(); auto ptr = args[0].As()->Int64Value(); - auto width = (float) args[1]->NumberValue(context).ToChecked(); - auto height = (float) args[2]->NumberValue(context).ToChecked(); - auto density = (float) args[3]->NumberValue(context).ToChecked(); - auto samples = (int) args[4]->NumberValue(context).ToChecked(); - auto alpha = (bool) args[5]->BooleanValue(isolate); - auto font_color = (int) args[6]->NumberValue(context).ToChecked(); - auto ppi = (float) args[7]->NumberValue(context).ToChecked(); - auto direction = (int) args[8]->NumberValue(context).ToChecked(); - - auto context_2d = canvas_native_context_create_gl(width, height, density, - ptr, - samples, alpha, - font_color, ppi, direction); + + auto context_2d = static_cast((void *) ptr); auto ret = CanvasRenderingContext2DImpl::NewInstance(isolate, new CanvasRenderingContext2DImpl( context_2d)); @@ -369,7 +362,7 @@ void CanvasJSIModule::CreateImageBitmap(const v8::FunctionCallbackInfo(data); auto func = async_data->inner_.get(); if (func != nullptr && func->isolate_ != nullptr) { @@ -397,7 +390,7 @@ void CanvasJSIModule::CreateImageBitmap(const v8::FunctionCallbackInfoCall(context, context->Global(), 2, args); // ignore JS return value - + delete asset_data; } else { @@ -609,8 +602,8 @@ void CanvasJSIModule::Create2DContextWithPointer(const v8::FunctionCallbackInfo< struct FileData { char *error_; - U8Buffer* data; - + U8Buffer *data; + ~FileData() { if (error_ != nullptr) { canvas_native_string_destroy(error_); @@ -623,10 +616,9 @@ void CanvasJSIModule::ReadFile(const v8::FunctionCallbackInfo &args) auto isolate = args.GetIsolate(); auto file = ConvertFromV8String(isolate, args[0]); auto cbFunc = args[1].As(); - - + auto callback = new AsyncCallback(isolate, cbFunc, [](bool done, void *data) { - if(data == nullptr){return;} + if (data == nullptr) { return; } auto async_data = static_cast(data); auto func = async_data->inner_.get(); if (func != nullptr && func->isolate_ != nullptr) { @@ -635,13 +627,138 @@ void CanvasJSIModule::ReadFile(const v8::FunctionCallbackInfo &args) v8::Isolate::Scope isolate_scope(isolate); v8::HandleScope handle_scope(isolate); v8::Local callback = func->callback_.Get( - isolate); + isolate); v8::Local context = callback->GetCreationContextChecked(); v8::Context::Scope context_scope(context); - + if (func->data != nullptr) { - auto file_data = static_cast(func->data); - + auto file_data = static_cast(func->data); + + v8::Local args[2]; + + if (done) { + args[0] = v8::Null(isolate); + + auto buf = canvas_native_u8_buffer_get_bytes_mut(file_data->data); + auto size = (size_t) canvas_native_u8_buffer_get_length(file_data->data); + + auto store = v8::ArrayBuffer::NewBackingStore((void *) buf, size, + [](void *data, + size_t length, + void *deleter_data) { + if (deleter_data != + nullptr) { + delete static_cast(deleter_data); + + } + }, + func->data); + + auto ret = v8::Object::New(isolate); + auto buffer = v8::ArrayBuffer::New(isolate, std::move(store)); + ret->Set(context, ConvertToV8String(isolate, "buffer"), buffer); + auto mime = canvas_native_helper_get_mime(buf, size); + if (mime != nullptr) { + if (mime->mime_type != nullptr) { + ret->Set(context, ConvertToV8String(isolate, "mime"), + ConvertToV8String(isolate, mime->mime_type)); + } + if (mime->extension != nullptr) { + ret->Set(context, ConvertToV8String(isolate, "extension"), + ConvertToV8String(isolate, mime->extension)); + } + canvas_native_helper_release_mime(mime); + } + + args[1] = ret; + } else { + auto error = file_data->error_; + args[0] = v8::Exception::Error(ConvertToV8String(isolate, error)); + args[1] = v8::Null(isolate); + delete file_data; + } + + v8::TryCatch tc(isolate); + v8::Local result; + if (!callback->Call(context, context->Global(), 2, args).ToLocal( + &result)) { + if (tc.HasCaught()) { + +// v8::Local stack; +// bool success = tc.StackTrace(context).ToLocal(&stack); +// if (!success || stack.IsEmpty()) { +// if (!done) { +// delete async_data; +// } +// return; +// } +// +// v8::Local stackV8Str; +// success = stack->ToDetailString(context).ToLocal(&stackV8Str); +// if (!success || stackV8Str.IsEmpty()) { +// if (!done) { +// delete async_data; +// } +// return; +// } + + } + } + + delete async_data; + + } + } + }); + + callback->prepare(); + + std::thread thread( + [callback, file]() { + bool done = false; + auto ret = canvas_native_helper_read_file(file.c_str()); + + if (!canvas_native_helper_read_file_has_error(ret)) { + auto buf = canvas_native_helper_read_file_take_data(ret); + callback->inner_->data = new FileData{nullptr, buf}; + done = true; + } else { + auto error = canvas_native_helper_read_file_get_error(ret); + callback->inner_->data = new FileData{const_cast(error), nullptr}; + } + canvas_native_helper_release(ret); + callback->execute(done); + }); + + thread.detach(); + + +} + + +void CanvasJSIModule::GetMime(const v8::FunctionCallbackInfo &args) { + auto isolate = args.GetIsolate(); + auto file = ConvertFromV8String(isolate, args[0]); + auto cbFunc = args[1].As(); + + + auto callback = new AsyncCallback(isolate, cbFunc, [](bool done, void *data) { + if (data == nullptr) { return; } + auto async_data = static_cast(data); + auto func = async_data->inner_.get(); + if (func != nullptr && func->isolate_ != nullptr) { + v8::Isolate *isolate = func->isolate_; + v8::Locker locker(isolate); + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + v8::Local callback = func->callback_.Get( + isolate); + v8::Local context = callback->GetCreationContextChecked(); + v8::Context::Scope context_scope(context); + + if (func->data != nullptr) { + auto file_data = static_cast(func->data); + v8::Local args[2]; if (done) { @@ -657,7 +774,7 @@ void CanvasJSIModule::ReadFile(const v8::FunctionCallbackInfo &args) if (deleter_data != nullptr) { delete static_cast(deleter_data); - + } }, func->data); @@ -698,13 +815,13 @@ void CanvasJSIModule::ReadFile(const v8::FunctionCallbackInfo &args) } delete async_data; - + } } }); - + callback->prepare(); - + std::thread thread( [callback, file]() { bool done = false; @@ -712,22 +829,22 @@ void CanvasJSIModule::ReadFile(const v8::FunctionCallbackInfo &args) if (!canvas_native_helper_read_file_has_error(ret)) { auto buf = canvas_native_helper_read_file_take_data(ret); - callback->inner_->data = new FileData {nullptr, buf}; + callback->inner_->data = new FileData{nullptr, buf}; done = true; } else { auto error = canvas_native_helper_read_file_get_error(ret); - callback->inner_->data = new FileData {const_cast(error), nullptr}; + callback->inner_->data = new FileData{const_cast(error), nullptr}; } canvas_native_helper_release(ret); callback->execute(done); }); thread.detach(); - - + } + void CanvasJSIModule::CreateWebGLContext(const v8::FunctionCallbackInfo &args) { auto options = GLOptions(); @@ -745,20 +862,7 @@ void CanvasJSIModule::CreateWebGLContext(const v8::FunctionCallbackInfo()->Int64Value(); - auto webgl = canvas_native_webgl_create( - ctx, - options.version, - options.alpha, - options.antialias, - options.depth, - options.failIfMajorPerformanceCaveat, - options.powerPreference, - options.premultipliedAlpha, - options.preserveDrawingBuffer, - options.stencil, - options.desynchronized, - options.xrCompatible - ); + auto webgl = (WebGLState *) ctx; auto renderingContext = WebGLRenderingContext::NewInstance(isolate, new WebGLRenderingContext( @@ -842,21 +946,7 @@ void CanvasJSIModule::CreateWebGL2Context(const v8::FunctionCallbackInfo()->Int64Value(); - auto webgl = canvas_native_webgl_create( - ctx, - options.version, - options.alpha, - options.antialias, - options.depth, - options.failIfMajorPerformanceCaveat, - options.powerPreference, - options.premultipliedAlpha, - options.preserveDrawingBuffer, - options.stencil, - options.desynchronized, - options.xrCompatible - ); - + auto webgl = (WebGLState *) ctx; auto renderingContext = WebGL2RenderingContext::NewInstance(isolate, new WebGL2RenderingContext( webgl, diff --git a/packages/canvas/platforms/ios/src/cpp/CanvasJSIModule.h b/packages/canvas/platforms/ios/src/cpp/CanvasJSIModule.h index 5c97d2152..90ce154b2 100644 --- a/packages/canvas/platforms/ios/src/cpp/CanvasJSIModule.h +++ b/packages/canvas/platforms/ios/src/cpp/CanvasJSIModule.h @@ -37,6 +37,8 @@ class CanvasJSIModule { static void ReadFile(const v8::FunctionCallbackInfo &args); + static void GetMime(const v8::FunctionCallbackInfo &args); + static void CreateWebGLContext(const v8::FunctionCallbackInfo &args); static void CreateWebGL2Context(const v8::FunctionCallbackInfo &args); diff --git a/packages/canvas/platforms/ios/src/cpp/ImageAssetImpl.cpp b/packages/canvas/platforms/ios/src/cpp/ImageAssetImpl.cpp index c0099c424..aaa7005ec 100644 --- a/packages/canvas/platforms/ios/src/cpp/ImageAssetImpl.cpp +++ b/packages/canvas/platforms/ios/src/cpp/ImageAssetImpl.cpp @@ -23,11 +23,11 @@ void ImageAssetImpl::Init(v8::Local canvasModule, v8::Isolate *isola v8::Locker locker(isolate); v8::Isolate::Scope isolate_scope(isolate); v8::HandleScope handle_scope(isolate); - + auto ctor = GetCtor(isolate); auto context = isolate->GetCurrentContext(); auto func = ctor->GetFunction(context).ToLocalChecked(); - + canvasModule->Set(context, ConvertToV8String(isolate, "ImageAsset"), func).IsJust(); } @@ -45,93 +45,102 @@ v8::Local ImageAssetImpl::GetCtor(v8::Isolate *isolate) { if (ctor != nullptr) { return ctor->Get(isolate); } - + v8::Local ctorTmpl = v8::FunctionTemplate::New(isolate, Ctor); ctorTmpl->InstanceTemplate()->SetInternalFieldCount(2); ctorTmpl->SetClassName(ConvertToV8String(isolate, "ImageAsset")); - + auto tmpl = ctorTmpl->InstanceTemplate(); tmpl->SetInternalFieldCount(2); tmpl->SetAccessor( - ConvertToV8String(isolate, "width"), - GetWidth); + ConvertToV8String(isolate, "width"), + GetWidth); tmpl->SetAccessor( - ConvertToV8String(isolate, "height"), - GetHeight); + ConvertToV8String(isolate, "height"), + GetHeight); tmpl->SetAccessor( - ConvertToV8String(isolate, "error"), - GetError); - + ConvertToV8String(isolate, "error"), + GetError); + tmpl->SetAccessor( - ConvertToV8String(isolate, "__addr"), - GetAddr); - + ConvertToV8String(isolate, "__addr"), + GetAddr); + tmpl->Set( - ConvertToV8String(isolate, "__getRef"), - v8::FunctionTemplate::New(isolate, GetReference)); - - - -// tmpl->Set( -// ConvertToV8String(isolate, "scale"), -// v8::FunctionTemplate::New(isolate, &Scale)); - + ConvertToV8String(isolate, "__getRef"), + v8::FunctionTemplate::New(isolate, GetReference)); + + + + // tmpl->Set( + // ConvertToV8String(isolate, "scale"), + // v8::FunctionTemplate::New(isolate, &Scale)); + tmpl->Set( - ConvertToV8String(isolate, "fromUrlSync"), - v8::FunctionTemplate::New(isolate, &FromUrlSync)); - + ConvertToV8String(isolate, "fromUrlSync"), + v8::FunctionTemplate::New(isolate, &FromUrlSync)); + tmpl->Set( - ConvertToV8String(isolate, "fromUrlCb"), - v8::FunctionTemplate::New(isolate, &FromUrlCb)); - - + ConvertToV8String(isolate, "fromUrlCb"), + v8::FunctionTemplate::New(isolate, &FromUrlCb)); + + tmpl->Set( - ConvertToV8String(isolate, "fromFileSync"), - v8::FunctionTemplate::New(isolate, &FromFileSync)); - + ConvertToV8String(isolate, "fromFileSync"), + v8::FunctionTemplate::New(isolate, &FromFileSync)); + tmpl->Set( - ConvertToV8String(isolate, "fromFileCb"), - v8::FunctionTemplate::New(isolate, &FromFileCb)); - - + ConvertToV8String(isolate, "fromFileCb"), + v8::FunctionTemplate::New(isolate, &FromFileCb)); + + tmpl->Set( - ConvertToV8String(isolate, "fromBytesSync"), - v8::FunctionTemplate::New(isolate, &FromBytesSync)); - + ConvertToV8String(isolate, "fromBytesSync"), + v8::FunctionTemplate::New(isolate, &FromBytesSync)); + tmpl->Set( - ConvertToV8String(isolate, "fromBytesCb"), - v8::FunctionTemplate::New(isolate, &FromBytesCb)); - - + ConvertToV8String(isolate, "fromBytesCb"), + v8::FunctionTemplate::New(isolate, &FromBytesCb)); + + + tmpl->Set( + ConvertToV8String(isolate, "fromEncodedBytesSync"), + v8::FunctionTemplate::New(isolate, &FromEncodedBytesSync)); + + tmpl->Set( + ConvertToV8String(isolate, "fromEncodedBytesCb"), + v8::FunctionTemplate::New(isolate, &FromEncodedBytesCb)); + + /* tmpl->Set( - ConvertToV8String(isolate, "saveSync"), - v8::FunctionTemplate::New(isolate, &SaveSync)); - - tmpl->Set( - ConvertToV8String(isolate, "saveCb"), - v8::FunctionTemplate::New(isolate, &SaveCb)); - */ - + ConvertToV8String(isolate, "saveSync"), + v8::FunctionTemplate::New(isolate, &SaveSync)); + + tmpl->Set( + ConvertToV8String(isolate, "saveCb"), + v8::FunctionTemplate::New(isolate, &SaveCb)); + */ + cache->ImageAssetTmpl = - std::make_unique>(isolate, ctorTmpl); + std::make_unique>(isolate, ctorTmpl); return ctorTmpl; } void ImageAssetImpl::Ctor(const v8::FunctionCallbackInfo &args) { auto isolate = args.GetIsolate(); - + auto ret = args.This(); - + auto image_asset = canvas_native_image_asset_create(); - + auto object = new ImageAssetImpl(image_asset); - + SetNativeType(object, NativeType::ImageAsset); - + ret->SetAlignedPointerInInternalField(0, object); - + object->BindFinalizer(isolate, ret); - + args.GetReturnValue().Set(ret); } @@ -184,7 +193,7 @@ ImageAssetImpl::GetReference(const v8::FunctionCallbackInfo &args) { args.GetReturnValue().Set(ConvertToV8String(isolate, ret)); return; } - + args.GetReturnValue().SetEmptyString(); } @@ -210,9 +219,9 @@ void ImageAssetImpl::FromUrlSync(const v8::FunctionCallbackInfo &args } auto isolate = args.GetIsolate(); auto url = ConvertFromV8String(isolate, args[0]); - + auto done = canvas_native_image_asset_load_from_url(ptr->GetImageAsset(), url.c_str()); - + args.GetReturnValue().Set(done); } @@ -221,90 +230,90 @@ void ImageAssetImpl::FromUrlCb(const v8::FunctionCallbackInfo &args) if (ptr == nullptr) { return; } - + auto isolate = args.GetIsolate(); - + if (args.Length() < 2) { return; } - + auto url = ConvertFromV8String(isolate, args[0]); - + auto asset = canvas_native_image_asset_reference(ptr->asset_); - + auto callback = args[1].As(); - + auto jsi_callback = new JSICallback(isolate, callback); - + #ifdef __ANDROID__ - + ALooper_addFd(jsi_callback->looper_, jsi_callback->fd_[0], 0, ALOOPER_EVENT_INPUT, [](int fd, int events, void *data) { - auto cb = static_cast(data); - bool done; - read(fd, &done, - sizeof(bool)); - - v8::Isolate *isolate = cb->isolate_; - v8::Locker locker(isolate); - v8::Isolate::Scope isolate_scope(isolate); - v8::HandleScope handle_scope(isolate); - v8::Local callback = cb->callback_->Get(isolate); - v8::Local context = callback->GetCreationContextChecked(); - v8::Context::Scope context_scope(context); - - v8::Local args[1] = {v8::Boolean::New(isolate, done)}; - - // v8::TryCatch tc(isolate); - - callback->Call(context, context->Global(), 1, - args); // ignore JS return value - - - delete static_cast(data); - return 0; - }, jsi_callback); - - + auto cb = static_cast(data); + bool done; + read(fd, &done, + sizeof(bool)); + + v8::Isolate *isolate = cb->isolate_; + v8::Locker locker(isolate); + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + v8::Local callback = cb->callback_->Get(isolate); + v8::Local context = callback->GetCreationContextChecked(); + v8::Context::Scope context_scope(context); + + v8::Local args[1] = {v8::Boolean::New(isolate, done)}; + + // v8::TryCatch tc(isolate); + + callback->Call(context, context->Global(), 1, + args); // ignore JS return value + + + delete static_cast(data); + return 0; + }, jsi_callback); + + std::thread thread( - [jsi_callback, asset]( - const std::string &url) { - auto done = canvas_native_image_asset_load_from_url(asset, url.c_str()); - - canvas_native_image_asset_release(asset); - - write(jsi_callback->fd_[1], - &done, - sizeof(bool)); - - }, std::move(url)); - + [jsi_callback, asset]( + const std::string &url) { + auto done = canvas_native_image_asset_load_from_url(asset, url.c_str()); + + canvas_native_image_asset_release(asset); + + write(jsi_callback->fd_[1], + &done, + sizeof(bool)); + + }, std::move(url)); + thread.detach(); - + #endif - - + + #ifdef __APPLE__ - + auto current_queue = new NSOperationQueueWrapper(true); - + auto queue = new NSOperationQueueWrapper(false); - - - + + + /* std::thread task([jsi_callback, current_queue, asset](std::string url) { - - + + auto done = canvas_native_image_asset_load_from_url(asset, url.c_str()); - - + + auto main_task = [jsi_callback, current_queue, url, done]() { - - + + v8::Isolate *isolate = jsi_callback->isolate_; v8::Locker locker(isolate); v8::Isolate::Scope isolate_scope(isolate); @@ -312,43 +321,43 @@ void ImageAssetImpl::FromUrlCb(const v8::FunctionCallbackInfo &args) v8::Local callback = jsi_callback->callback_->Get(isolate); v8::Local context = callback->GetCreationContextChecked(); v8::Context::Scope context_scope(context); - + v8::Local args[1] = {v8::Boolean::New(isolate, done)}; - + // v8::TryCatch tc(isolate); - + callback->Call(context, context->Global(), 1, args); // ignore JS return value - - + + delete jsi_callback; // delete queue; delete current_queue; - - + + }; - + current_queue->addOperation(main_task); - - + + }, std::move(url)); - + task.detach(); - + */ - - - - - + + + + + auto task = [jsi_callback, current_queue, queue, asset, url]() { - + auto done = canvas_native_image_asset_load_from_url(asset, url.c_str()); canvas_native_image_asset_release(asset); - + auto main_task = [jsi_callback, current_queue, queue, url, done]() { - - + + v8::Isolate *isolate = jsi_callback->isolate_; v8::Locker locker(isolate); v8::Isolate::Scope isolate_scope(isolate); @@ -356,31 +365,31 @@ void ImageAssetImpl::FromUrlCb(const v8::FunctionCallbackInfo &args) v8::Local callback = jsi_callback->callback_->Get(isolate); v8::Local context = callback->GetCreationContextChecked(); v8::Context::Scope context_scope(context); - + v8::Local args[1] = {v8::Boolean::New(isolate, done)}; - + // v8::TryCatch tc(isolate); - + callback->Call(context, context->Global(), 1, args); // ignore JS return value - - + + delete jsi_callback; delete queue; delete current_queue; - - + + }; - + current_queue->addOperation(main_task); - + }; - - - + + + queue->addOperation(task); #endif - + } void ImageAssetImpl::FromFileSync(const v8::FunctionCallbackInfo &args) { @@ -391,9 +400,9 @@ void ImageAssetImpl::FromFileSync(const v8::FunctionCallbackInfo &arg } auto isolate = args.GetIsolate(); auto path = ConvertFromV8String(isolate, args[0]); - + auto done = canvas_native_image_asset_load_from_path(ptr->GetImageAsset(), path.c_str()); - + args.GetReturnValue().Set(done); } @@ -403,85 +412,85 @@ void ImageAssetImpl::FromFileCb(const v8::FunctionCallbackInfo &args) return; } auto isolate = args.GetIsolate(); - + if (args.Length() < 2) { return; } - + auto path = ConvertFromV8String(isolate, args[0]); - + auto asset = canvas_native_image_asset_reference(ptr->GetImageAsset()); - + auto callback = args[1].As(); - + auto jsi_callback = new JSICallback(isolate, callback); - + #ifdef __ANDROID__ - + ALooper_addFd(jsi_callback->looper_, jsi_callback->fd_[0], 0, ALOOPER_EVENT_INPUT, [](int fd, int events, void *data) { - auto cb = static_cast(data); - bool done; - read(fd, &done, - sizeof(bool)); - - v8::Isolate *isolate = cb->isolate_; - v8::Locker locker(isolate); - v8::Isolate::Scope isolate_scope(isolate); - v8::HandleScope handle_scope(isolate); - v8::Local callback = cb->callback_->Get(isolate); - v8::Local context = callback->GetCreationContextChecked(); - v8::Context::Scope context_scope(context); - - v8::Local args[1] = {v8::Boolean::New(isolate, done)}; - - v8::TryCatch tc(isolate); - - callback->Call(context, context->Global(), 1, - args); // ignore JS return value - - delete static_cast(data); - return 0; - }, jsi_callback); - - + auto cb = static_cast(data); + bool done; + read(fd, &done, + sizeof(bool)); + + v8::Isolate *isolate = cb->isolate_; + v8::Locker locker(isolate); + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + v8::Local callback = cb->callback_->Get(isolate); + v8::Local context = callback->GetCreationContextChecked(); + v8::Context::Scope context_scope(context); + + v8::Local args[1] = {v8::Boolean::New(isolate, done)}; + + v8::TryCatch tc(isolate); + + callback->Call(context, context->Global(), 1, + args); // ignore JS return value + + delete static_cast(data); + return 0; + }, jsi_callback); + + std::thread thread( - [jsi_callback, asset]( - const std::string path) { - - auto done = canvas_native_image_asset_load_from_path(asset, path.c_str()); - - write(jsi_callback->fd_[1], - &done, - sizeof(bool)); - - canvas_native_image_asset_release(asset); - - }, std::move(path)); - + [jsi_callback, asset]( + const std::string path) { + + auto done = canvas_native_image_asset_load_from_path(asset, path.c_str()); + + write(jsi_callback->fd_[1], + &done, + sizeof(bool)); + + canvas_native_image_asset_release(asset); + + }, std::move(path)); + thread.detach(); - + #endif - - + + #ifdef __APPLE__ - + auto current_queue = new NSOperationQueueWrapper(true); - + auto queue = new NSOperationQueueWrapper(false); - + auto task = [jsi_callback, current_queue, queue, asset, path]() { - + auto done = canvas_native_image_asset_load_from_path(asset, path.c_str()); - + canvas_native_image_asset_release(asset); - + auto main_task = [jsi_callback, current_queue, queue, done]() { - + v8::Isolate *isolate = jsi_callback->isolate_; v8::Locker locker(isolate); v8::Isolate::Scope isolate_scope(isolate); @@ -489,27 +498,27 @@ void ImageAssetImpl::FromFileCb(const v8::FunctionCallbackInfo &args) v8::Local callback = jsi_callback->callback_->Get(isolate); v8::Local context = callback->GetCreationContextChecked(); v8::Context::Scope context_scope(context); - + v8::Local args[1] = {v8::Boolean::New(isolate, done)}; - + // v8::TryCatch tc(isolate); - + callback->Call(context, context->Global(), 1, args); // ignore JS return value - - delete queue; - delete current_queue; - delete jsi_callback; - + + delete queue; + delete current_queue; + delete jsi_callback; + }; - + current_queue->addOperation(main_task); - + }; - + queue->addOperation(task); - - + + #endif } @@ -519,24 +528,32 @@ void ImageAssetImpl::FromBytesSync(const v8::FunctionCallbackInfo &ar args.GetReturnValue().Set(false); return; } - - auto value = args[0]; - + auto context = args.GetIsolate()->GetCurrentContext(); + auto value = args[2]; + if (value->IsObject()) { if (!value->IsArrayBuffer()) { args.GetReturnValue().Set(false); return; } auto buf = value.As(); - + auto size = (uintptr_t) buf->ByteLength(); auto data = (uint8_t *) buf->GetBackingStore()->Data(); - - auto done = canvas_native_image_asset_load_from_raw(ptr->GetImageAsset(), data, size); - + + uint32_t width; + uint32_t height; + bool done = false; + if(args[0]->Uint32Value(context).To(&width) + && args[1]->Uint32Value(context).To(&height) + ) { + done = canvas_native_image_asset_load_from_raw(ptr->GetImageAsset(), width, height, data, size); + } + args.GetReturnValue().Set(done); + return; } - + args.GetReturnValue().Set(false); } @@ -546,89 +563,96 @@ void ImageAssetImpl::FromBytesCb(const v8::FunctionCallbackInfo &args return; } auto isolate = args.GetIsolate(); - + if (args.Length() < 2) { return; } - - - auto bytes = args[0].As(); - + + + auto bytes = args[2].As(); + auto size = bytes->ByteLength(); - + auto data = (uint8_t *) bytes->GetBackingStore()->Data(); - + auto asset = canvas_native_image_asset_reference(ptr->GetImageAsset()); - - auto callback = args[1].As(); - + + auto context = args.GetIsolate()->GetCurrentContext(); + + uint32_t width; + uint32_t height; + args[0]->Uint32Value(context).To(&width); + args[1]->Uint32Value(context).To(&height); + + auto callback = args[3].As(); + auto jsi_callback = new JSICallback(isolate, callback); - + #ifdef __ANDROID__ - + ALooper_addFd(jsi_callback->looper_, jsi_callback->fd_[0], 0, ALOOPER_EVENT_INPUT, [](int fd, int events, void *data) { - auto cb = static_cast(data); - bool done; - read(fd, &done, - sizeof(bool)); - - v8::Isolate *isolate = cb->isolate_; - v8::Locker locker(isolate); - v8::Isolate::Scope isolate_scope(isolate); - v8::HandleScope handle_scope(isolate); - v8::Local callback = cb->callback_->Get(isolate); - v8::Local context = callback->GetCreationContextChecked(); - v8::Context::Scope context_scope(context); - - v8::Local args[1] = {v8::Boolean::New(isolate, done)}; - - // v8::TryCatch tc(isolate); - - callback->Call(context, context->Global(), 1, - args); // ignore JS return value - - delete static_cast(data); - return 0; - }, jsi_callback); - + auto cb = static_cast(data); + bool done; + read(fd, &done, + sizeof(bool)); + + v8::Isolate *isolate = cb->isolate_; + v8::Locker locker(isolate); + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + v8::Local callback = cb->callback_->Get(isolate); + v8::Local context = callback->GetCreationContextChecked(); + v8::Context::Scope context_scope(context); + + v8::Local args[1] = {v8::Boolean::New(isolate, done)}; + + // v8::TryCatch tc(isolate); + + callback->Call(context, context->Global(), 1, + args); // ignore JS return value + + delete static_cast(data); + return 0; + }, jsi_callback); + std::thread thread( - [jsi_callback, asset, data, size]() { - - auto done = canvas_native_image_asset_load_from_raw(asset, data, size); - - canvas_native_image_asset_release(asset); - - write(jsi_callback->fd_[1], - &done, - sizeof(bool)); - - }); - + [jsi_callback, asset, width, height, data, size]() { + + auto done = canvas_native_image_asset_load_from_raw(asset, width, height, data, size); + + canvas_native_image_asset_release(asset); + + write(jsi_callback->fd_[1], + &done, + sizeof(bool)); + + }); + thread.detach(); - + #endif - - + + #ifdef __APPLE__ - + auto current_queue = new NSOperationQueueWrapper(true); - + auto queue = new NSOperationQueueWrapper(false); - - auto task = [jsi_callback, current_queue, queue, asset, data, size]() { - - auto done = canvas_native_image_asset_load_from_raw(asset, data, size); - + + auto task = [jsi_callback, current_queue, queue, asset, width, height,data, size]() { + + auto done = canvas_native_image_asset_load_from_raw(asset, width, height, data, size); + canvas_native_image_asset_release(asset); - + auto main_task = [jsi_callback, current_queue, queue, done]() { - - + + v8::Isolate *isolate = jsi_callback->isolate_; v8::Locker locker(isolate); v8::Isolate::Scope isolate_scope(isolate); @@ -636,141 +660,150 @@ void ImageAssetImpl::FromBytesCb(const v8::FunctionCallbackInfo &args v8::Local callback = jsi_callback->callback_->Get(isolate); v8::Local context = callback->GetCreationContextChecked(); v8::Context::Scope context_scope(context); - + v8::Local args[1] = {v8::Boolean::New(isolate, done)}; - + // v8::TryCatch tc(isolate); - + callback->Call(context, context->Global(), 1, args); // ignore JS return value - - + + delete jsi_callback; delete queue; delete current_queue; - - + + }; - + current_queue->addOperation(main_task); - + }; - + queue->addOperation(task); #endif - + } -/* -void ImageAssetImpl::SaveSync(const v8::FunctionCallbackInfo &args) { + +void ImageAssetImpl::FromEncodedBytesSync(const v8::FunctionCallbackInfo &args) { ImageAssetImpl *ptr = GetPointer(args.This()); if (ptr == nullptr) { args.GetReturnValue().Set(false); return; } - - auto isolate = args.GetIsolate(); - auto context = isolate->GetCurrentContext(); - auto path = ConvertFromV8String(isolate, args[0]); - auto format = args[1]->Uint32Value(context).ToChecked(); - auto done = canvas_native_image_asset_save_path(ptr->GetImageAsset(), path.c_str(), format); - - args.GetReturnValue().Set(done); + + auto value = args[0]; + + if (value->IsObject()) { + if (!value->IsArrayBuffer()) { + args.GetReturnValue().Set(false); + return; + } + auto buf = value.As(); + + auto size = (uintptr_t) buf->ByteLength(); + auto data = (uint8_t *) buf->GetBackingStore()->Data(); + + auto done = canvas_native_image_asset_load_from_raw_encoded(ptr->GetImageAsset(), data, + size); + + args.GetReturnValue().Set(done); + return; + } + + args.GetReturnValue().Set(false); } -void ImageAssetImpl::SaveCb(const v8::FunctionCallbackInfo &args) { +void ImageAssetImpl::FromEncodedBytesCb(const v8::FunctionCallbackInfo &args) { ImageAssetImpl *ptr = GetPointer(args.This()); if (ptr == nullptr) { return; } auto isolate = args.GetIsolate(); - auto context = isolate->GetCurrentContext(); + if (args.Length() < 2) { return; } - - - auto path = ConvertFromV8String(isolate, args[0]); - - auto format = args[1]->Uint32Value(context).ToChecked(); - - auto asset = canvas_native_image_asset_shared_clone( - ptr->GetImageAsset()); - + + + auto bytes = args[0].As(); + + auto size = bytes->ByteLength(); + + auto data = (uint8_t *) bytes->GetBackingStore()->Data(); + + auto asset = canvas_native_image_asset_reference(ptr->GetImageAsset()); + auto callback = args[1].As(); - + auto jsi_callback = new JSICallback(isolate, callback); - - + #ifdef __ANDROID__ - + ALooper_addFd(jsi_callback->looper_, jsi_callback->fd_[0], 0, ALOOPER_EVENT_INPUT, [](int fd, int events, void *data) { - auto cb = static_cast(data); - bool done; - read(fd, &done, - sizeof(bool)); - - v8::Isolate *isolate = cb->isolate_; - v8::Locker locker(isolate); - v8::Isolate::Scope isolate_scope(isolate); - v8::HandleScope handle_scope(isolate); - v8::Local callback = cb->callback_->Get(isolate); - v8::Local context = callback->GetCreationContextChecked(); - v8::Context::Scope context_scope(context); - - v8::Local args[1] = {v8::Boolean::New(isolate, done)}; - - // v8::TryCatch tc(isolate); - - callback->Call(context, context->Global(), 1, - args); // ignore JS return value - - delete static_cast(data); - return 0; - }, jsi_callback); - + auto cb = static_cast(data); + bool done; + read(fd, &done, + sizeof(bool)); + + v8::Isolate *isolate = cb->isolate_; + v8::Locker locker(isolate); + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + v8::Local callback = cb->callback_->Get(isolate); + v8::Local context = callback->GetCreationContextChecked(); + v8::Context::Scope context_scope(context); + + v8::Local args[1] = {v8::Boolean::New(isolate, done)}; + + // v8::TryCatch tc(isolate); + + callback->Call(context, context->Global(), 1, + args); // ignore JS return value + + delete static_cast(data); + return 0; + }, jsi_callback); + std::thread thread( - [jsi_callback, asset, format]( - const std::string &path) { - - auto done = canvas_native_image_asset_save_path(asset, - path.c_str(), - format); - - canvas_native_image_asset_destroy(asset); - - write(jsi_callback->fd_[1], - &done, - sizeof(bool)); - - }, std::move(path)); - - + [jsi_callback, asset, data, size]() { + + auto done = canvas_native_image_asset_load_from_raw_encoded(asset, data, size); + + canvas_native_image_asset_release(asset); + + write(jsi_callback->fd_[1], + &done, + sizeof(bool)); + + }); + thread.detach(); - + #endif - - + + #ifdef __APPLE__ - + auto current_queue = new NSOperationQueueWrapper(true); - + auto queue = new NSOperationQueueWrapper(false); - - auto task = [jsi_callback, current_queue, queue, asset, path, format]() { - - auto done = canvas_native_image_asset_save_path(asset, path.c_str(), format); - - canvas_native_image_asset_destroy(asset); - + + auto task = [jsi_callback, current_queue, queue, asset, data, size]() { + + auto done = canvas_native_image_asset_load_from_raw_encoded(asset, data, size); + + canvas_native_image_asset_release(asset); + auto main_task = [jsi_callback, current_queue, queue, done]() { - - + + v8::Isolate *isolate = jsi_callback->isolate_; v8::Locker locker(isolate); v8::Isolate::Scope isolate_scope(isolate); @@ -778,30 +811,172 @@ void ImageAssetImpl::SaveCb(const v8::FunctionCallbackInfo &args) { v8::Local callback = jsi_callback->callback_->Get(isolate); v8::Local context = callback->GetCreationContextChecked(); v8::Context::Scope context_scope(context); - + v8::Local args[1] = {v8::Boolean::New(isolate, done)}; - + // v8::TryCatch tc(isolate); - + callback->Call(context, context->Global(), 1, args); // ignore JS return value - - + + delete jsi_callback; delete queue; delete current_queue; - - + + }; + current_queue->addOperation(main_task); + }; - + queue->addOperation(task); #endif - - + } -*/ + +/* + void ImageAssetImpl::SaveSync(const v8::FunctionCallbackInfo &args) { + ImageAssetImpl *ptr = GetPointer(args.This()); + if (ptr == nullptr) { + args.GetReturnValue().Set(false); + return; + } + + auto isolate = args.GetIsolate(); + auto context = isolate->GetCurrentContext(); + auto path = ConvertFromV8String(isolate, args[0]); + auto format = args[1]->Uint32Value(context).ToChecked(); + auto done = canvas_native_image_asset_save_path(ptr->GetImageAsset(), path.c_str(), format); + + args.GetReturnValue().Set(done); + } + + void ImageAssetImpl::SaveCb(const v8::FunctionCallbackInfo &args) { + ImageAssetImpl *ptr = GetPointer(args.This()); + if (ptr == nullptr) { + return; + } + auto isolate = args.GetIsolate(); + auto context = isolate->GetCurrentContext(); + if (args.Length() < 2) { + return; + } + + + auto path = ConvertFromV8String(isolate, args[0]); + + auto format = args[1]->Uint32Value(context).ToChecked(); + + auto asset = canvas_native_image_asset_shared_clone( + ptr->GetImageAsset()); + + auto callback = args[1].As(); + + auto jsi_callback = new JSICallback(isolate, callback); + + + #ifdef __ANDROID__ + + ALooper_addFd(jsi_callback->looper_, + jsi_callback->fd_[0], + 0, + ALOOPER_EVENT_INPUT, + [](int fd, int events, + void *data) { + auto cb = static_cast(data); + bool done; + read(fd, &done, + sizeof(bool)); + + v8::Isolate *isolate = cb->isolate_; + v8::Locker locker(isolate); + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + v8::Local callback = cb->callback_->Get(isolate); + v8::Local context = callback->GetCreationContextChecked(); + v8::Context::Scope context_scope(context); + + v8::Local args[1] = {v8::Boolean::New(isolate, done)}; + + // v8::TryCatch tc(isolate); + + callback->Call(context, context->Global(), 1, + args); // ignore JS return value + + delete static_cast(data); + return 0; + }, jsi_callback); + + std::thread thread( + [jsi_callback, asset, format]( + const std::string &path) { + + auto done = canvas_native_image_asset_save_path(asset, + path.c_str(), + format); + + canvas_native_image_asset_destroy(asset); + + write(jsi_callback->fd_[1], + &done, + sizeof(bool)); + + }, std::move(path)); + + + thread.detach(); + + #endif + + + #ifdef __APPLE__ + + auto current_queue = new NSOperationQueueWrapper(true); + + auto queue = new NSOperationQueueWrapper(false); + + auto task = [jsi_callback, current_queue, queue, asset, path, format]() { + + auto done = canvas_native_image_asset_save_path(asset, path.c_str(), format); + + canvas_native_image_asset_destroy(asset); + + auto main_task = [jsi_callback, current_queue, queue, done]() { + + + v8::Isolate *isolate = jsi_callback->isolate_; + v8::Locker locker(isolate); + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + v8::Local callback = jsi_callback->callback_->Get(isolate); + v8::Local context = callback->GetCreationContextChecked(); + v8::Context::Scope context_scope(context); + + v8::Local args[1] = {v8::Boolean::New(isolate, done)}; + + // v8::TryCatch tc(isolate); + + callback->Call(context, context->Global(), 1, + args); // ignore JS return value + + + delete jsi_callback; + delete queue; + delete current_queue; + + + }; + current_queue->addOperation(main_task); + }; + + queue->addOperation(task); + #endif + + + } + */ const ImageAsset *ImageAssetImpl::GetImageAsset() { return this->asset_; diff --git a/packages/canvas/platforms/ios/src/cpp/ImageAssetImpl.h b/packages/canvas/platforms/ios/src/cpp/ImageAssetImpl.h index 154590d02..75a0c0f2a 100644 --- a/packages/canvas/platforms/ios/src/cpp/ImageAssetImpl.h +++ b/packages/canvas/platforms/ios/src/cpp/ImageAssetImpl.h @@ -61,6 +61,10 @@ class ImageAssetImpl : ObjectWrapperImpl { static void FromBytesCb(const v8::FunctionCallbackInfo &args); + static void FromEncodedBytesSync(const v8::FunctionCallbackInfo &args); + + static void FromEncodedBytesCb(const v8::FunctionCallbackInfo &args); + /* static void SaveSync(const v8::FunctionCallbackInfo &args); static void SaveCb(const v8::FunctionCallbackInfo &args);*/ diff --git a/packages/canvas/platforms/ios/src/cpp/canvas2d/CanvasRenderingContext2DImpl.cpp b/packages/canvas/platforms/ios/src/cpp/canvas2d/CanvasRenderingContext2DImpl.cpp index a7f91bebc..5ce3e11fb 100644 --- a/packages/canvas/platforms/ios/src/cpp/canvas2d/CanvasRenderingContext2DImpl.cpp +++ b/packages/canvas/platforms/ios/src/cpp/canvas2d/CanvasRenderingContext2DImpl.cpp @@ -1110,7 +1110,6 @@ void CanvasRenderingContext2DImpl::SetTextAlign(v8::Local property, void CanvasRenderingContext2DImpl::GetTextBaseline(v8::Local property, const v8::PropertyCallbackInfo &info) { CanvasRenderingContext2DImpl *ptr = GetPointer(info.This()); - auto isolate = info.GetIsolate(); if (ptr == nullptr) { info.GetReturnValue().Set(0); return; @@ -1963,7 +1962,6 @@ CanvasRenderingContext2DImpl::DrawAtlas(const v8::FunctionCallbackInfoIsNullOrUndefined() || !value->IsObject()) { @@ -2968,8 +2966,6 @@ void CanvasRenderingContext2DImpl::Stroke(const v8::FunctionCallbackInfo &args) { CanvasRenderingContext2DImpl *ptr = GetPointer(args.This()); - auto isolate = args.GetIsolate(); - auto value = args[0]; auto type = GetNativeType(value); if (type == NativeType::Path2D) { @@ -3110,7 +3106,7 @@ CanvasRenderingContext2DImpl::__ToDataURL(const v8::FunctionCallbackInfoIsNumber()) { - quality = (int) args[1]->NumberValue(context).ToChecked(); + quality = (int) (args[1]->NumberValue(context).ToChecked() * 100); } @@ -3136,12 +3132,12 @@ CanvasRenderingContext2DImpl::~CanvasRenderingContext2DImpl() { } void CanvasRenderingContext2DImpl::UpdateInvalidateState() { - auto raf = this->GetRaf(); - if (raf != nullptr) { - if (!canvas_native_raf_get_started(raf->GetRaf())) { - canvas_native_raf_start(raf->GetRaf()); - } - } +// auto raf = this->GetRaf(); +// if (raf != nullptr) { +// if (!canvas_native_raf_get_started(raf->GetRaf())) { +// canvas_native_raf_start(raf->GetRaf()); +// } +// } auto state = this->GetInvalidateState(); this->SetInvalidateState((int) state | (int) InvalidateState::InvalidateStatePending); diff --git a/packages/canvas/platforms/ios/src/cpp/webgl/WebGLRenderingContext.cpp b/packages/canvas/platforms/ios/src/cpp/webgl/WebGLRenderingContext.cpp index 91ccf735b..30535d691 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgl/WebGLRenderingContext.cpp +++ b/packages/canvas/platforms/ios/src/cpp/webgl/WebGLRenderingContext.cpp @@ -5883,8 +5883,8 @@ WebGLRenderingContext::__ToDataURL(const v8::FunctionCallbackInfo &ar if (args[1]->IsNumber()) { - quality = (int) args[1]->NumberValue( - context).ToChecked(); + quality = (int) (args[1]->NumberValue( + context).ToChecked() * 100); } diff --git a/packages/canvas/platforms/ios/src/cpp/webgl/WebGLRenderingContextBase.cpp b/packages/canvas/platforms/ios/src/cpp/webgl/WebGLRenderingContextBase.cpp index 2b975a1c9..5d7f84fc8 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgl/WebGLRenderingContextBase.cpp +++ b/packages/canvas/platforms/ios/src/cpp/webgl/WebGLRenderingContextBase.cpp @@ -82,11 +82,11 @@ void WebGLRenderingContextBase::StopRaf() { void WebGLRenderingContextBase::UpdateInvalidateState() { auto raf = this->GetRaf(); - if (raf != nullptr) { - if (!canvas_native_raf_get_started(raf->GetRaf())) { - canvas_native_raf_start(raf->GetRaf()); - } - } +// if (raf != nullptr) { +// if (!canvas_native_raf_get_started(raf->GetRaf())) { +// canvas_native_raf_start(raf->GetRaf()); +// } +// } auto state = this->GetInvalidateState(); this->SetInvalidateState(state | (int) InvalidateState::InvalidateStatePending); } @@ -141,8 +141,8 @@ WebGLRenderingContextBase::~WebGLRenderingContextBase() { if (_raf != nullptr) { canvas_native_raf_stop( _raf->GetRaf()); + canvas_native_raf_release(_raf->GetRaf()); } - canvas_native_raf_release(_raf->GetRaf()); this->raf_ = nullptr; canvas_native_webgl_state_destroy(this->GetState()); this->state_ = nullptr; diff --git a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUCanvasContextImpl.cpp b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUCanvasContextImpl.cpp index b408256dd..45527ea2e 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUCanvasContextImpl.cpp +++ b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUCanvasContextImpl.cpp @@ -6,6 +6,7 @@ #include "Caches.h" #include "GPUAdapterImpl.h" #include "GPUUtils.h" +#include "GPUQueueImpl.h" GPUCanvasContextImpl::GPUCanvasContextImpl(const CanvasGPUCanvasContext *context) : context_( context) {} @@ -70,6 +71,9 @@ v8::Local GPUCanvasContextImpl::GetCtor(v8::Isolate *isola ConvertToV8String(isolate, "getCapabilities"), v8::FunctionTemplate::New(isolate, &GetCapabilities)); + tmpl->Set( + ConvertToV8String(isolate, "__toDataURL"), + v8::FunctionTemplate::New(isolate, &__ToDataURL)); cache->GPUCanvasContextTmpl = std::make_unique>(isolate, ctorTmpl); @@ -211,6 +215,57 @@ void GPUCanvasContextImpl::UnConfigure(const v8::FunctionCallbackInfo } +void GPUCanvasContextImpl::__ToDataURL(const v8::FunctionCallbackInfo &args) { + GPUCanvasContextImpl *ptr = GetPointer(args.This()); + + auto isolate = args.GetIsolate(); + auto context = isolate->GetCurrentContext(); + + + std::string type("image/png"); + int quality = 92; + if (args[0]->IsString()) { + type = ConvertFromV8String(isolate, args[0]); + } + + if (args[1]->IsNumber()) { + quality = (int) (args[1]->NumberValue(context).ToChecked() * 100); + } + + auto deviceType = GetNativeType(args[2]); + auto textureType = GetNativeType(args[3]); + + if (deviceType == NativeType::GPUDevice) { + auto device = GPUDeviceImpl::GetPointer(args[2].As()); + char* data = nullptr; + if(textureType == NativeType::GPUTexture){ + auto texture = GPUTextureImpl::GetPointer(args[3].As()); + data = canvas_native_webgpu_to_data_url_with_texture( + ptr->GetContext(), device->GetGPUDevice(), texture->GetTexture(), + type.c_str(), + quality); + }else { + data = canvas_native_webgpu_to_data_url( + ptr->GetContext(), device->GetGPUDevice(), type.c_str(), + quality); + + } + + if(data == nullptr){ + args.GetReturnValue().Set(ConvertToV8String(isolate, "data:,")); + return; + } + + auto value = new OneByteStringResource((char *) data); + auto ret = v8::String::NewExternalOneByte(isolate, value); + args.GetReturnValue().Set(ret.ToLocalChecked()); + } else { + args.GetReturnValue().Set(ConvertToV8String(isolate, "data:,")); + } + + +} + void GPUCanvasContextImpl::GetCurrentTexture(const v8::FunctionCallbackInfo &args) { GPUCanvasContextImpl *ptr = GetPointer(args.This()); auto isolate = args.GetIsolate(); @@ -225,11 +280,11 @@ void GPUCanvasContextImpl::GetCurrentTexture(const v8::FunctionCallbackInfoSet(context, ConvertToV8String(isolate, "format"), v8::Array::New(isolate)).FromJust(); - ret->Set(context, ConvertToV8String(isolate, "presentModes"), v8::Array::New(isolate)).FromJust(); + ret->Set(context, ConvertToV8String(isolate, "presentModes"), + v8::Array::New(isolate)).FromJust(); ret->Set(context, ConvertToV8String(isolate, "alphaModes"), v8::Array::New(isolate)).FromJust(); ret->Set(context, ConvertToV8String(isolate, "usages"), v8::Uint32::New(isolate, 0)).FromJust(); args.GetReturnValue().Set(ret); diff --git a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUCanvasContextImpl.h b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUCanvasContextImpl.h index 5807b2fc0..9164e3e28 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUCanvasContextImpl.h +++ b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUCanvasContextImpl.h @@ -22,6 +22,8 @@ class GPUCanvasContextImpl : ObjectWrapperImpl { static void Init(v8::Local canvasModule, v8::Isolate *isolate); + static void __ToDataURL(const v8::FunctionCallbackInfo &args); + static GPUCanvasContextImpl *GetPointer(const v8::Local &object); static v8::Local GetCtor(v8::Isolate *isolate); diff --git a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUComputePassEncoderImpl.cpp b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUComputePassEncoderImpl.cpp index 44d05d997..583dedb17 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUComputePassEncoderImpl.cpp +++ b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUComputePassEncoderImpl.cpp @@ -17,7 +17,7 @@ const CanvasGPUComputePassEncoder *GPUComputePassEncoderImpl::GetComputePass() { } -void GPUComputePassEncoderImpl::Init(v8::Local canvasModule, v8::Isolate *isolate) { +void GPUComputePassEncoderImpl::Init(v8::Local canvasModule, v8::Isolate *isolate) { v8::Locker locker(isolate); v8::Isolate::Scope isolate_scope(isolate); v8::HandleScope handle_scope(isolate); @@ -31,7 +31,7 @@ void GPUComputePassEncoderImpl::Init(v8::Local canvasModule, v8::Is } GPUComputePassEncoderImpl * -GPUComputePassEncoderImpl::GetPointer(const v8::Local &object) { +GPUComputePassEncoderImpl::GetPointer(const v8::Local &object) { auto ptr = object->GetAlignedPointerFromInternalField(0); if (ptr == nullptr) { return nullptr; @@ -39,14 +39,14 @@ GPUComputePassEncoderImpl::GetPointer(const v8::Local &object) { return static_cast(ptr); } -v8::Local GPUComputePassEncoderImpl::GetCtor(v8::Isolate *isolate) { +v8::Local GPUComputePassEncoderImpl::GetCtor(v8::Isolate *isolate) { auto cache = Caches::Get(isolate); auto ctor = cache->GPUComputePassEncoderTmpl.get(); if (ctor != nullptr) { return ctor->Get(isolate); } - v8::Local ctorTmpl = v8::FunctionTemplate::New(isolate); + v8::Local ctorTmpl = v8::FunctionTemplate::New(isolate); ctorTmpl->InstanceTemplate()->SetInternalFieldCount(2); ctorTmpl->SetClassName(ConvertToV8String(isolate, "GPUComputePassEncoder")); @@ -92,14 +92,14 @@ v8::Local GPUComputePassEncoderImpl::GetCtor(v8::Isolate cache->GPUComputePassEncoderTmpl = - std::make_unique> - (isolate, ctorTmpl); + std::make_unique> + (isolate, ctorTmpl); return ctorTmpl; } void -GPUComputePassEncoderImpl::GetLabel(v8::Local name, - const v8::PropertyCallbackInfo &info) { +GPUComputePassEncoderImpl::GetLabel(v8::Local name, + const v8::PropertyCallbackInfo &info) { auto ptr = GetPointer(info.This()); if (ptr != nullptr) { auto label = canvas_native_webgpu_compute_pass_encoder_get_label(ptr->computePass_); @@ -119,7 +119,7 @@ GPUComputePassEncoderImpl::GetLabel(v8::Local name, void -GPUComputePassEncoderImpl::DispatchWorkgroups(const v8::FunctionCallbackInfo &args) { +GPUComputePassEncoderImpl::DispatchWorkgroups(const v8::FunctionCallbackInfo &args) { auto *ptr = GetPointer(args.This()); if (ptr == nullptr) { return; @@ -154,7 +154,7 @@ GPUComputePassEncoderImpl::DispatchWorkgroups(const v8::FunctionCallbackInfo &args) { + const v8::FunctionCallbackInfo &args) { auto *ptr = GetPointer(args.This()); if (ptr == nullptr) { return; @@ -178,7 +178,7 @@ void GPUComputePassEncoderImpl::DispatchWorkgroupsIndirect( } -void GPUComputePassEncoderImpl::End(const v8::FunctionCallbackInfo &args) { +void GPUComputePassEncoderImpl::End(const v8::FunctionCallbackInfo &args) { auto *ptr = GetPointer(args.This()); if (ptr == nullptr) { return; @@ -188,7 +188,7 @@ void GPUComputePassEncoderImpl::End(const v8::FunctionCallbackInfo & } void -GPUComputePassEncoderImpl::InsertDebugMarker(const v8::FunctionCallbackInfo &args) { +GPUComputePassEncoderImpl::InsertDebugMarker(const v8::FunctionCallbackInfo &args) { auto *ptr = GetPointer(args.This()); if (ptr == nullptr) { return; @@ -204,7 +204,7 @@ GPUComputePassEncoderImpl::InsertDebugMarker(const v8::FunctionCallbackInfo &args) { +void GPUComputePassEncoderImpl::PopDebugGroup(const v8::FunctionCallbackInfo &args) { auto *ptr = GetPointer(args.This()); if (ptr == nullptr) { return; @@ -213,7 +213,7 @@ void GPUComputePassEncoderImpl::PopDebugGroup(const v8::FunctionCallbackInfo GetComputePass()); } -void GPUComputePassEncoderImpl::PushDebugGroup(const v8::FunctionCallbackInfo &args) { +void GPUComputePassEncoderImpl::PushDebugGroup(const v8::FunctionCallbackInfo &args) { auto *ptr = GetPointer(args.This()); if (ptr == nullptr) { return; @@ -229,7 +229,7 @@ void GPUComputePassEncoderImpl::PushDebugGroup(const v8::FunctionCallbackInfo &args) { +void GPUComputePassEncoderImpl::SetBindGroup(const v8::FunctionCallbackInfo &args) { auto *ptr = GetPointer(args.This()); if (ptr == nullptr) { return; @@ -244,34 +244,39 @@ void GPUComputePassEncoderImpl::SetBindGroup(const v8::FunctionCallbackInfo Uint32Value(context).FromJust(); - auto bindgroup = GPUBindGroupImpl::GetPointer(bindGroupVal.As()); - - if (dynamicOffsets->IsUint8Array()) { - auto buf = dynamicOffsets.As(); - auto buffer = buf->Buffer(); - auto store = buffer->GetBackingStore(); - auto offset = buf->ByteOffset(); - auto data = static_cast(buffer->GetBackingStore()->Data()) + offset; - auto size = buf->Length(); - auto start = (size_t) dynamicOffsetsStart->NumberValue(context).FromJust(); - auto offset_length = (size_t) dynamicOffsetsLength->NumberValue(context).FromJust(); - canvas_native_webgpu_compute_pass_encoder_set_bind_group(ptr->GetComputePass(), index, - bindgroup->GetBindGroup(), - static_cast(static_cast(data)), - size, start, offset_length); - } else { - canvas_native_webgpu_compute_pass_encoder_set_bind_group(ptr->GetComputePass(), index, - bindgroup->GetBindGroup(), - nullptr, 0, 0, 0); - } + auto group = GPUBindGroupImpl::GetPointer(bindGroupVal.As()); + bindGroup = group->GetBindGroup(); + } + + auto index = indexVal->Uint32Value(context).FromJust(); + + + if (dynamicOffsets->IsUint8Array()) { + auto buf = dynamicOffsets.As(); + auto buffer = buf->Buffer(); + auto store = buffer->GetBackingStore(); + auto offset = buf->ByteOffset(); + auto data = static_cast(buffer->GetBackingStore()->Data()) + offset; + auto size = buf->Length(); + auto start = (size_t) dynamicOffsetsStart->NumberValue(context).FromJust(); + auto offset_length = (size_t) dynamicOffsetsLength->NumberValue(context).FromJust(); + canvas_native_webgpu_compute_pass_encoder_set_bind_group(ptr->GetComputePass(), index, + bindGroup, + static_cast(static_cast(data)), + size, start, offset_length); + } else { + canvas_native_webgpu_compute_pass_encoder_set_bind_group(ptr->GetComputePass(), index, + bindGroup, + nullptr, 0, 0, 0); } } -void GPUComputePassEncoderImpl::SetPipeline(const v8::FunctionCallbackInfo &args) { +void GPUComputePassEncoderImpl::SetPipeline(const v8::FunctionCallbackInfo &args) { auto *ptr = GetPointer(args.This()); if (ptr == nullptr) { return; diff --git a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUDeviceImpl.cpp b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUDeviceImpl.cpp index eb130d275..e4cc43e93 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUDeviceImpl.cpp +++ b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUDeviceImpl.cpp @@ -1295,12 +1295,12 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo(); v8::Local stencilValue; - options->Get(context, ConvertToV8String(isolate, "depthStencil")).ToLocal( + auto hasDepthStencil = options->Get(context, ConvertToV8String(isolate, "depthStencil")).ToLocal( &stencilValue); CanvasDepthStencilState *stencil = nullptr; - if (!stencilValue.IsEmpty() && stencilValue->IsObject()) { + if (hasDepthStencil && stencilValue->IsObject()) { auto stencilObj = stencilValue.As(); stencil = new CanvasDepthStencilState{}; stencil->depth_bias = 0; @@ -1491,16 +1491,17 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo fragmentValue; - options->Get(context, ConvertToV8String(isolate, "fragment")).ToLocal( + auto hasFragment = options->Get(context, ConvertToV8String(isolate, "fragment")).ToLocal( &fragmentValue); CanvasFragmentState *fragment = nullptr; std::vector targets; - if (!fragmentValue.IsEmpty() && fragmentValue->IsObject()) { + if (hasFragment && fragmentValue->IsObject()) { auto fragmentValueObj = fragmentValue.As(); fragment = new CanvasFragmentState{}; + fragment->entry_point = nullptr; v8::Local targetsVal; fragmentValueObj->Get(context, ConvertToV8String(isolate, "targets")).ToLocal(&targetsVal); @@ -1532,9 +1533,9 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo writeMaskVal; - state->Get(context, ConvertToV8String(isolate, "writeMask")).ToLocal(&writeMaskVal); + auto hasWriteMask = state->Get(context, ConvertToV8String(isolate, "writeMask")).ToLocal(&writeMaskVal); - if (!writeMaskVal.IsEmpty() && writeMaskVal->IsUint32()) { + if (hasWriteMask && writeMaskVal->IsUint32()) { writeMask = writeMaskVal->Uint32Value(context).FromJust(); } @@ -1544,9 +1545,9 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo blendVal; - state->Get(context, ConvertToV8String(isolate, "blend")).ToLocal(&blendVal); + auto hasBlend = state->Get(context, ConvertToV8String(isolate, "blend")).ToLocal(&blendVal); - if (!blendVal.IsEmpty() && blendVal->IsObject()) { + if (hasBlend && blendVal->IsObject()) { auto blendObj = blendVal.As(); auto alpha = blendObj->Get(context, ConvertToV8String(isolate, "alpha")).ToLocalChecked().As(); @@ -1638,10 +1639,10 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo constantsVal; - fragmentValueObj->Get(context, ConvertToV8String(isolate, "constants")).ToLocal( + auto hasConstants = fragmentValueObj->Get(context, ConvertToV8String(isolate, "constants")).ToLocal( &constantsVal); - if (!constantsVal.IsEmpty() && constantsVal->IsMap()) { + if (hasConstants && constantsVal->IsMap()) { auto constants = constantsVal.As(); auto keyValues = constants->AsArray(); auto length = keyValues->Length(); @@ -1675,11 +1676,11 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo entryPoint; - fragmentValueObj->Get(context, ConvertToV8String(isolate, "entryPoint")).ToLocal( + auto hasEntryPoint = fragmentValueObj->Get(context, ConvertToV8String(isolate, "entryPoint")).ToLocal( &entryPoint); - if (!entryPoint.IsEmpty() && entryPoint->IsString()) { + if (hasEntryPoint && entryPoint->IsString()) { auto ep = v8::String::Utf8Value(isolate, entryPoint); char *entry_point = (char *) malloc(ep.length()); std::strcpy(entry_point, *ep); @@ -1707,7 +1708,6 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo multisampleValue; - options->Get(context, ConvertToV8String(isolate, "multisample")).ToLocal( + auto hasMultisample = options->Get(context, ConvertToV8String(isolate, "multisample")).ToLocal( &multisampleValue); CanvasMultisampleState *multisample = nullptr; - if (!multisampleValue.IsEmpty() && multisampleValue->IsObject()) { + if (hasMultisample && multisampleValue->IsObject()) { auto multisampleObj = multisampleValue.As(); multisample = new CanvasMultisampleState{}; multisample->alpha_to_coverage_enabled = false; @@ -1755,25 +1755,25 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo count; v8::Local mask; - multisampleObj->Get(context, ConvertToV8String(isolate, "alphaToCoverageEnabled")). + auto hasAlphaToCoverageEnabled = multisampleObj->Get(context, ConvertToV8String(isolate, "alphaToCoverageEnabled")). ToLocal(&alphaToCoverageEnabled); - if (!alphaToCoverageEnabled.IsEmpty() && alphaToCoverageEnabled->IsBoolean()) { + if (hasAlphaToCoverageEnabled && alphaToCoverageEnabled->IsBoolean()) { multisample->alpha_to_coverage_enabled = alphaToCoverageEnabled->BooleanValue( isolate); } - multisampleObj->Get(context, ConvertToV8String(isolate, "count")). + auto hasCount = multisampleObj->Get(context, ConvertToV8String(isolate, "count")). ToLocal(&count); - if (!count.IsEmpty() && count->IsUint32()) { + if (hasCount && count->IsUint32()) { multisample->count = count.As()->Value(); } - multisampleObj->Get(context, ConvertToV8String(isolate, "mask")). + auto hasMask = multisampleObj->Get(context, ConvertToV8String(isolate, "mask")). ToLocal(&mask); - if (!mask.IsEmpty() && mask->IsNumber()) { + if (hasMask && mask->IsNumber()) { // todo verify mask auto maskValue = mask.As()->Value(); multisample->mask = (uint64_t) maskValue; @@ -1786,13 +1786,13 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo primitiveValue; - options->Get(context, ConvertToV8String(isolate, "primitive")).ToLocal( + auto hasPrimitive = options->Get(context, ConvertToV8String(isolate, "primitive")).ToLocal( &primitiveValue); CanvasPrimitiveState *primitive = nullptr; - if (!primitiveValue.IsEmpty() && primitiveValue->IsObject()) { + if (hasPrimitive && primitiveValue->IsObject()) { auto primitiveObj = primitiveValue.As(); primitive = new CanvasPrimitiveState{}; @@ -1968,7 +1968,7 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo vertexValue; - options->Get(context, ConvertToV8String(isolate, "vertex")).ToLocal( + auto hasVertex = options->Get(context, ConvertToV8String(isolate, "vertex")).ToLocal( &vertexValue); @@ -1978,7 +1978,7 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo> attributes; - if (!vertexValue.IsEmpty() && vertexValue->IsObject()) { + if (hasVertex && vertexValue->IsObject()) { auto vertexObj = vertexValue.As(); vertex = new CanvasVertexState{}; @@ -1990,9 +1990,9 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfomodule = module->GetShaderModule(); v8::Local constantsVal; - vertexObj->Get(context, ConvertToV8String(isolate, "constants")).ToLocal(&constantsVal); + auto hasConstants = vertexObj->Get(context, ConvertToV8String(isolate, "constants")).ToLocal(&constantsVal); - if (!constantsVal.IsEmpty() && constantsVal->IsMap()) { + if (hasConstants && constantsVal->IsMap()) { auto constants = constantsVal.As(); auto keyValues = constants->AsArray(); auto len = keyValues->Length(); @@ -2027,10 +2027,10 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo buffersVal; - vertexObj->Get(context, ConvertToV8String(isolate, "buffers")).ToLocal(&buffersVal); + auto hasBuffers = vertexObj->Get(context, ConvertToV8String(isolate, "buffers")).ToLocal(&buffersVal); uint64_t stride = 0; - if (!buffersVal.IsEmpty() && buffersVal->IsArray()) { + if (hasBuffers && buffersVal->IsArray()) { auto buffers = buffersVal.As(); auto len = buffers->Length(); @@ -2039,10 +2039,10 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo arrayStride; - buffer->Get(context, ConvertToV8String(isolate, "arrayStride")).ToLocal( + auto hasArrayStride = buffer->Get(context, ConvertToV8String(isolate, "arrayStride")).ToLocal( &arrayStride); - if (!arrayStride.IsEmpty() && arrayStride->IsNumber()) { + if (hasArrayStride && arrayStride->IsNumber()) { stride = (uint64_t) arrayStride.As()->Value(); } @@ -2050,10 +2050,10 @@ void GPUDeviceImpl::CreateRenderPipeline(const v8::FunctionCallbackInfo attributesValue; - buffer->Get(context, ConvertToV8String(isolate, "attributes")).ToLocal( + auto hasAttributes = buffer->Get(context, ConvertToV8String(isolate, "attributes")).ToLocal( &attributesValue); - if (!attributesValue.IsEmpty() && attributesValue->IsArray()) { + if (hasAttributes && attributesValue->IsArray()) { auto attributes_array = attributesValue.As(); auto attributes_len = attributes_array->Length(); @@ -2420,6 +2420,7 @@ void GPUDeviceImpl::CreateRenderPipelineAsync(const v8::FunctionCallbackInfoIsObject()) { auto fragmentValueObj = fragmentValue.As(); fragment = new CanvasFragmentState{}; + fragment->entry_point = nullptr; v8::Local targetsVal; fragmentValueObj->Get(context, ConvertToV8String(isolate, "targets")).ToLocal(&targetsVal); @@ -2899,6 +2900,7 @@ void GPUDeviceImpl::CreateRenderPipelineAsync(const v8::FunctionCallbackInfoIsObject()) { auto vertexObj = vertexValue.As(); vertex = new CanvasVertexState{}; + vertex->entry_point = nullptr; v8::Local moduleVal; vertexObj->Get(context, ConvertToV8String(isolate, "module")).ToLocal(&moduleVal); diff --git a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUQueueImpl.cpp b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUQueueImpl.cpp index aa513af54..e9cac0eca 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgpu/GPUQueueImpl.cpp +++ b/packages/canvas/platforms/ios/src/cpp/webgpu/GPUQueueImpl.cpp @@ -91,7 +91,7 @@ v8::Local GPUQueueImpl::GetCtor(v8::Isolate *isolate) { void GPUQueueImpl::GetLabel(v8::Local name, - const v8::PropertyCallbackInfo &info) { + const v8::PropertyCallbackInfo &info) { auto ptr = GetPointer(info.This()); if (ptr != nullptr) { auto label = canvas_native_webgpu_queue_get_label(ptr->queue_); @@ -136,7 +136,9 @@ void GPUQueueImpl::CopyExternalImageToTexture(const v8::FunctionCallbackInfo()); imageAsset = bitmap->GetImageAsset(); @@ -149,12 +151,14 @@ void GPUQueueImpl::CopyExternalImageToTexture(const v8::FunctionCallbackInfoGetImageData()); height = canvas_native_image_data_get_height(imageData->GetImageData()); } else if (sourceType == NativeType::CanvasRenderingContext2D) { - auto c2d = CanvasRenderingContext2DImpl::GetPointer(sourceSourceValue.As()); + auto ctx = CanvasRenderingContext2DImpl::GetPointer(sourceSourceValue.As()); + c2d = ctx->GetContext(); } else if (sourceType == NativeType::WebGLRenderingContextBase) { auto webgl = WebGLRenderingContextBase::GetPointer(sourceSourceValue.As()); + gl = webgl->GetState(); } - if (buffer == nullptr && imageAsset == nullptr) { + if (buffer == nullptr && imageAsset == nullptr && gl == nullptr && c2d == nullptr) { // todo error ?? return; } @@ -260,7 +264,7 @@ void GPUQueueImpl::CopyExternalImageToTexture(const v8::FunctionCallbackInfoGetGPUQueue(), &source, - &destination, - &extent3D); + &destination, + &extent3D); + return; + } + + + if (c2d != nullptr) { + CanvasImageCopyCanvasRenderingContext2D source{ + c2d, + sourceOrigin, + flipY, + }; + + + canvas_native_webgpu_queue_copy_context_to_texture(ptr->GetGPUQueue(), &source, + &destination, + &extent3D); + return; + } + + if (gl != nullptr) { + CanvasImageCopyWebGL source{ + gl, + sourceOrigin, + flipY, + }; + + + canvas_native_webgpu_queue_copy_webgl_to_texture(ptr->GetGPUQueue(), &source, + &destination, + &extent3D); return; } @@ -279,7 +312,6 @@ void GPUQueueImpl::CopyExternalImageToTexture(const v8::FunctionCallbackInfo GPURenderBundleEncoderImpl::GetCtor(v8::Isolate void GPURenderBundleEncoderImpl::GetLabel(v8::Local name, - const v8::PropertyCallbackInfo &info) { + const v8::PropertyCallbackInfo &info) { auto ptr = GetPointer(info.This()); if (ptr != nullptr) { auto label = canvas_native_webgpu_render_bundle_encoder_get_label(ptr->encoder_); @@ -369,30 +369,33 @@ void GPURenderBundleEncoderImpl::SetBindGroup(const v8::FunctionCallbackInfoUint32Value(context).FromJust(); + if (type == NativeType::GPUBindGroup) { - auto index = indexVal->Uint32Value(context).FromJust(); - auto bindGroup = GPUBindGroupImpl::GetPointer(bindGroupVal.As()); - - if (dynamicOffsets->IsUint32Array()) { - auto buf = dynamicOffsets.As(); - auto buffer = buf->Buffer(); - auto store = buffer->GetBackingStore(); - auto offset = buf->ByteOffset(); - auto data = static_cast(buffer->GetBackingStore()->Data()) + offset; - auto size = buf->Length(); - auto start = (size_t) dynamicOffsetsStart->NumberValue(context).FromJust(); - auto offset_length = (size_t) dynamicOffsetsLength->NumberValue(context).FromJust(); - canvas_native_webgpu_render_bundle_encoder_set_bind_group(ptr->GetEncoder(), index, - bindGroup->GetBindGroup(), - static_cast(static_cast(data)), - size, start, offset_length); - } else { - canvas_native_webgpu_render_bundle_encoder_set_bind_group(ptr->GetEncoder(), index, - bindGroup->GetBindGroup(), - nullptr, 0, 0, 0); - } + auto group = GPUBindGroupImpl::GetPointer(bindGroupVal.As()); + bindGroup = group->GetBindGroup(); + } + + if (dynamicOffsets->IsUint32Array()) { + auto buf = dynamicOffsets.As(); + auto buffer = buf->Buffer(); + auto store = buffer->GetBackingStore(); + auto offset = buf->ByteOffset(); + auto data = static_cast(buffer->GetBackingStore()->Data()) + offset; + auto size = buf->Length(); + auto start = (size_t) dynamicOffsetsStart->NumberValue(context).FromJust(); + auto offset_length = (size_t) dynamicOffsetsLength->NumberValue(context).FromJust(); + canvas_native_webgpu_render_bundle_encoder_set_bind_group(ptr->GetEncoder(), index, + bindGroup, + static_cast(static_cast(data)), + size, start, offset_length); + } else { + canvas_native_webgpu_render_bundle_encoder_set_bind_group(ptr->GetEncoder(), index, + bindGroup, + nullptr, 0, 0, 0); } } @@ -450,7 +453,7 @@ void GPURenderBundleEncoderImpl::SetPipeline(const v8::FunctionCallbackInfo()); if (pipeline != nullptr) { canvas_native_webgpu_render_bundle_encoder_set_pipeline(ptr->GetEncoder(), diff --git a/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.cpp b/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.cpp index f0576f8f1..52519f0c6 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.cpp +++ b/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.cpp @@ -79,6 +79,14 @@ v8::Local GPURenderPassEncoderImpl::GetCtor(v8::Isolate *i ConvertToV8String(isolate, "drawIndirect"), v8::FunctionTemplate::New(isolate, &DrawIndirect)); + tmpl->Set( + ConvertToV8String(isolate, "multiDrawIndexedIndirect"), + v8::FunctionTemplate::New(isolate, &MultiDrawIndexedIndirect)); + + tmpl->Set( + ConvertToV8String(isolate, "multiDrawIndirect"), + v8::FunctionTemplate::New(isolate, &MultiDrawIndirect)); + tmpl->Set( ConvertToV8String(isolate, "end"), v8::FunctionTemplate::New(isolate, &End)); @@ -291,6 +299,36 @@ GPURenderPassEncoderImpl::DrawIndexedIndirect(const v8::FunctionCallbackInfo &args) { + auto *ptr = GetPointer(args.This()); + if (ptr == nullptr) { + return; + } + + auto isolate = args.GetIsolate(); + auto context = isolate->GetCurrentContext(); + + auto indirectBufferVal = args[0]; + auto indirectOffsetVal = args[1]; + auto countVal = args[2]; + + + auto indirectBufferType = GetNativeType(indirectBufferVal); + + if (indirectBufferType == NativeType::GPUBuffer) { + auto indirectBuffer = GPUBufferImpl::GetPointer(indirectBufferVal.As()); + uint64_t offset = (uint64_t) indirectOffsetVal->NumberValue(context).FromJust(); + uint32_t count = countVal->Uint32Value(context).FromJust(); + canvas_native_webgpu_render_pass_encoder_multi_draw_indexed_indirect(ptr->GetPass(), + indirectBuffer->GetGPUBuffer(), + offset, count); + } + + } void @@ -318,6 +356,35 @@ GPURenderPassEncoderImpl::DrawIndirect(const v8::FunctionCallbackInfo } +} + +void +GPURenderPassEncoderImpl::MultiDrawIndirect(const v8::FunctionCallbackInfo &args) { + auto *ptr = GetPointer(args.This()); + if (ptr == nullptr) { + return; + } + + auto isolate = args.GetIsolate(); + auto context = isolate->GetCurrentContext(); + + auto indirectBufferVal = args[0]; + auto indirectOffsetVal = args[1]; + auto countVal = args[2]; + + + auto indirectBufferType = GetNativeType(indirectBufferVal); + + if (indirectBufferType == NativeType::GPUBuffer) { + auto indirectBuffer = GPUBufferImpl::GetPointer(indirectBufferVal.As()); + uint64_t offset = (uint64_t) indirectOffsetVal->NumberValue(context).FromJust(); + uint32_t count = countVal->Uint32Value(context).FromJust(); + canvas_native_webgpu_render_pass_encoder_multi_draw_indirect(ptr->GetPass(), + indirectBuffer->GetGPUBuffer(), + offset, count); + } + + } void GPURenderPassEncoderImpl::End(const v8::FunctionCallbackInfo &args) { @@ -428,30 +495,34 @@ void GPURenderPassEncoderImpl::SetBindGroup(const v8::FunctionCallbackInfoUint32Value(context).FromJust(); + if (type == NativeType::GPUBindGroup) { - auto index = indexVal->Uint32Value(context).FromJust(); - auto bindgroup = GPUBindGroupImpl::GetPointer(bindGroupVal.As()); - - if (dynamicOffsets->IsUint32Array()) { - auto buf = dynamicOffsets.As(); - auto buffer = buf->Buffer(); - auto store = buffer->GetBackingStore(); - auto offset = buf->ByteOffset(); - auto data = static_cast(buffer->GetBackingStore()->Data()) + offset; - auto size = buf->Length(); - auto start = (size_t) dynamicOffsetsStart->NumberValue(context).FromJust(); - auto offset_length = (size_t) dynamicOffsetsLength->NumberValue(context).FromJust(); - canvas_native_webgpu_render_pass_encoder_set_bind_group(ptr->GetPass(), index, - bindgroup->GetBindGroup(), - static_cast(static_cast(data)), - size, start, offset_length); - } else { - canvas_native_webgpu_render_pass_encoder_set_bind_group(ptr->GetPass(), index, - bindgroup->GetBindGroup(), - nullptr, 0, 0, 0); - } + auto group = GPUBindGroupImpl::GetPointer(bindGroupVal.As()); + bindGroup = group->GetBindGroup(); + } + + if (dynamicOffsets->IsUint32Array()) { + auto buf = dynamicOffsets.As(); + auto buffer = buf->Buffer(); + auto store = buffer->GetBackingStore(); + auto offset = buf->ByteOffset(); + auto data = static_cast(buffer->GetBackingStore()->Data()) + offset; + auto size = buf->Length(); + auto start = (size_t) dynamicOffsetsStart->NumberValue(context).FromJust(); + auto offset_length = (size_t) dynamicOffsetsLength->NumberValue(context).FromJust(); + canvas_native_webgpu_render_pass_encoder_set_bind_group(ptr->GetPass(), index, + bindGroup, + static_cast(static_cast(data)), + size, start, offset_length); + } else { + canvas_native_webgpu_render_pass_encoder_set_bind_group(ptr->GetPass(), index, + bindGroup, + nullptr, 0, 0, 0); } } @@ -596,8 +667,7 @@ void GPURenderPassEncoderImpl::SetVertexBuffer(const v8::FunctionCallbackInfoGetCurrentContext(); auto slot = slotVal->ToUint32(context).ToLocalChecked(); - - + auto buffer = GPUBufferImpl::GetPointer(bufferVal.As()); @@ -622,29 +692,32 @@ void GPURenderPassEncoderImpl::SetViewport(const v8::FunctionCallbackInfoGetCurrentContext(); + + + auto x = (float) xVal->NumberValue( + context).FromJust(); + auto y = (float) yVal->NumberValue( + context).FromJust(); + auto width = (float) widthVal->NumberValue( + context).FromJust(); + auto height = (float) heightVal->NumberValue( + context).FromJust(); + + auto minDepth = (float) minDepthVal->NumberValue( + context).FromJust(); + auto maxDepth = (float) maxDepthVal->NumberValue( + context).FromJust(); - canvas_native_webgpu_render_pass_encoder_set_viewport(ptr->GetPass(), - (float) x->NumberValue( - context).FromJust(), - (float) y->NumberValue( - context).FromJust(), - (float) width->NumberValue( - context).FromJust(), - (float) height->NumberValue( - context).FromJust(), - (float) minDepth->NumberValue( - context).FromJust(), - (float) maxDepth->NumberValue( - context).FromJust()); + canvas_native_webgpu_render_pass_encoder_set_viewport(ptr->GetPass(),x,y,width,height, minDepth, maxDepth); } diff --git a/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.h b/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.h index fcc353f8c..0a8c146fa 100644 --- a/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.h +++ b/packages/canvas/platforms/ios/src/cpp/webgpu/GPURenderPassEncoderImpl.h @@ -51,6 +51,10 @@ class GPURenderPassEncoderImpl : ObjectWrapperImpl { static void DrawIndirect(const v8::FunctionCallbackInfo &args); + static void MultiDrawIndexedIndirect(const v8::FunctionCallbackInfo &args); + + static void MultiDrawIndirect(const v8::FunctionCallbackInfo &args); + static void End(const v8::FunctionCallbackInfo &args); static void EndOcclusionQuery(const v8::FunctionCallbackInfo &args); diff --git a/packages/canvas/references.d.ts b/packages/canvas/references.d.ts index 22bac92c6..ec95299f1 100644 --- a/packages/canvas/references.d.ts +++ b/packages/canvas/references.d.ts @@ -1 +1,3 @@ /// +/// +/// diff --git a/packages/canvas/src-native/canvas-android/.idea/compiler.xml b/packages/canvas/src-native/canvas-android/.idea/compiler.xml index b589d56e9..b86273d94 100644 --- a/packages/canvas/src-native/canvas-android/.idea/compiler.xml +++ b/packages/canvas/src-native/canvas-android/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/packages/canvas/src-native/canvas-android/.idea/deploymentTargetSelector.xml b/packages/canvas/src-native/canvas-android/.idea/deploymentTargetSelector.xml index 600a099a3..ec8ec628c 100644 --- a/packages/canvas/src-native/canvas-android/.idea/deploymentTargetSelector.xml +++ b/packages/canvas/src-native/canvas-android/.idea/deploymentTargetSelector.xml @@ -4,10 +4,10 @@