diff --git a/Cargo.lock b/Cargo.lock index 08954b2a..48a9dfeb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -223,6 +223,7 @@ dependencies = [ "pathfinder_gl 0.1.0", "pathfinder_gpu 0.1.0", "pathfinder_renderer 0.1.0", + "pathfinder_resources 0.1.0", ] [[package]] @@ -257,6 +258,7 @@ dependencies = [ "pathfinder_gl 0.1.0", "pathfinder_gpu 0.1.0", "pathfinder_renderer 0.1.0", + "pathfinder_resources 0.1.0", "sdl2 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "sdl2-sys 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -273,6 +275,7 @@ dependencies = [ "pathfinder_gl 0.1.0", "pathfinder_gpu 0.1.0", "pathfinder_renderer 0.1.0", + "pathfinder_resources 0.1.0", "sdl2 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "sdl2-sys 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -307,6 +310,7 @@ dependencies = [ "pathfinder_gl 0.1.0", "pathfinder_gpu 0.1.0", "pathfinder_renderer 0.1.0", + "pathfinder_resources 0.1.0", "sdl2 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "sdl2-sys 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -643,6 +647,7 @@ dependencies = [ "pathfinder_gl 0.1.0", "pathfinder_gpu 0.1.0", "pathfinder_metal 0.1.0", + "pathfinder_resources 0.1.0", "pathfinder_simd 0.4.0", "pretty_env_logger 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "sdl2 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -815,35 +820,11 @@ dependencies = [ "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "foreign-types" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "foreign-types-macros 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "foreign-types-shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "foreign-types-macros" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "foreign-types-shared" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "foreign-types-shared" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "freetype" version = "0.4.1" @@ -1646,7 +1627,7 @@ version = "0.1.0" dependencies = [ "cbindgen 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", "font-kit 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "foreign-types 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "gl 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", "metal 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1658,6 +1639,7 @@ dependencies = [ "pathfinder_gpu 0.1.0", "pathfinder_metal 0.1.0", "pathfinder_renderer 0.1.0", + "pathfinder_resources 0.1.0", "pathfinder_simd 0.4.0", ] @@ -1713,6 +1695,7 @@ dependencies = [ "pathfinder_gpu 0.1.0", "pathfinder_metal 0.1.0", "pathfinder_renderer 0.1.0", + "pathfinder_resources 0.1.0", "pathfinder_simd 0.4.0", "pathfinder_svg 0.1.0", "pathfinder_ui 0.1.0", @@ -1748,6 +1731,7 @@ dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "pathfinder_geometry 0.4.0", "pathfinder_gpu 0.1.0", + "pathfinder_resources 0.1.0", "pathfinder_simd 0.4.0", ] @@ -1760,6 +1744,7 @@ dependencies = [ "image 0.22.4 (registry+https://github.com/rust-lang/crates.io-index)", "pathfinder_color 0.1.0", "pathfinder_geometry 0.4.0", + "pathfinder_resources 0.1.0", "pathfinder_simd 0.4.0", ] @@ -1810,6 +1795,7 @@ dependencies = [ "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "pathfinder_geometry 0.4.0", "pathfinder_gpu 0.1.0", + "pathfinder_resources 0.1.0", "pathfinder_simd 0.4.0", ] @@ -1825,6 +1811,7 @@ dependencies = [ "pathfinder_content 0.1.0", "pathfinder_geometry 0.4.0", "pathfinder_gpu 0.1.0", + "pathfinder_resources 0.1.0", "pathfinder_simd 0.4.0", "pathfinder_ui 0.1.0", "quickcheck 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1834,6 +1821,10 @@ dependencies = [ "smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "pathfinder_resources" +version = "0.1.0" + [[package]] name = "pathfinder_simd" version = "0.4.0" @@ -1889,6 +1880,7 @@ dependencies = [ "pathfinder_color 0.1.0", "pathfinder_geometry 0.4.0", "pathfinder_gpu 0.1.0", + "pathfinder_resources 0.1.0", "pathfinder_simd 0.4.0", "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2455,6 +2447,7 @@ dependencies = [ "pathfinder_gl 0.1.0", "pathfinder_gpu 0.1.0", "pathfinder_renderer 0.1.0", + "pathfinder_resources 0.1.0", "pathfinder_swf 0.1.0", "sdl2 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "sdl2-sys 0.33.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2977,10 +2970,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum float-ord 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7bad48618fdb549078c333a7a8528acb57af271d0433bdecd523eb620628364e" "checksum font-kit 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "09b6e2b877097ffd0abac6597fea26fccb5ed7eb9da0a4094f11ccc8aba64efb" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -"checksum foreign-types 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" -"checksum foreign-types-macros 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db8b4c717941b6d03ebb6fc0815b262b8168c187bb5829e8106139e95cd3e174" "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" -"checksum foreign-types-shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7684cf33bb7f28497939e8c7cf17e3e4e3b8d9a0080ffa4f8ae2f515442ee855" "checksum freetype 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "11926b2b410b469d0e9399eca4cbbe237a9ef02176c485803b29216307e8e028" "checksum fs_extra 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5f2a4a2034423744d2cc7ca2068453168dcdb82c438419e639a26bd87839c674" "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" diff --git a/Cargo.toml b/Cargo.toml index 1d80d4a2..f1cf1654 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ members = [ "export", "metal", "renderer", + "resources", "simd", "svg", "swf", diff --git a/c/Cargo.toml b/c/Cargo.toml index 6d89ef59..5e1d4345 100644 --- a/c/Cargo.toml +++ b/c/Cargo.toml @@ -10,7 +10,7 @@ crate-type = ["staticlib"] [dependencies] font-kit = "0.5" -foreign-types = "0.5" +foreign-types = "0.3" gl = "0.14" libc = "0.2" @@ -36,6 +36,9 @@ path = "../gpu" [dependencies.pathfinder_renderer] path = "../renderer" +[dependencies.pathfinder_resources] +path = "../resources" + [dependencies.pathfinder_simd] path = "../simd" diff --git a/c/src/lib.rs b/c/src/lib.rs index fdf730d8..e6a62734 100644 --- a/c/src/lib.rs +++ b/c/src/lib.rs @@ -11,6 +11,7 @@ //! C bindings to Pathfinder. use font_kit::handle::Handle; +use foreign_types::ForeignTypeRef; use gl; use pathfinder_canvas::{CanvasFontContext, CanvasRenderingContext2D, FillStyle, LineJoin, Path2D}; use pathfinder_canvas::{TextAlign, TextMetrics}; @@ -23,7 +24,8 @@ use pathfinder_geometry::transform2d::{Matrix2x2F, Transform2F}; use pathfinder_geometry::transform3d::{Perspective, Transform4F}; use pathfinder_geometry::vector::{Vector2F, Vector2I}; use pathfinder_gl::{GLDevice, GLVersion}; -use pathfinder_gpu::resources::{FilesystemResourceLoader, ResourceLoader}; +use pathfinder_resources::ResourceLoader; +use pathfinder_resources::fs::FilesystemResourceLoader; use pathfinder_renderer::concurrent::rayon::RayonExecutor; use pathfinder_renderer::concurrent::scene_proxy::SceneProxy; use pathfinder_renderer::gpu::options::{DestFramebuffer, RendererOptions}; diff --git a/demo/android/rust/src/lib.rs b/demo/android/rust/src/lib.rs index 4fdf1fa7..aa417190 100644 --- a/demo/android/rust/src/lib.rs +++ b/demo/android/rust/src/lib.rs @@ -19,7 +19,7 @@ use pathfinder_demo::Options; use pathfinder_geometry::vector::Vector2I; use pathfinder_geometry::rect::RectI; use pathfinder_gl::GLVersion; -use pathfinder_gpu::resources::ResourceLoader; +use pathfinder_resources::ResourceLoader; use std::cell::RefCell; use std::io::Error as IOError; use std::mem; diff --git a/demo/common/Cargo.toml b/demo/common/Cargo.toml index 1a94097e..2e1c0af7 100644 --- a/demo/common/Cargo.toml +++ b/demo/common/Cargo.toml @@ -42,6 +42,9 @@ path = "../../gpu" [dependencies.pathfinder_renderer] path = "../../renderer" +[dependencies.pathfinder_resources] +path = "../../resources" + [dependencies.pathfinder_simd] path = "../../simd" diff --git a/demo/common/src/device.rs b/demo/common/src/device.rs index 1417bb0b..6d685b02 100644 --- a/demo/common/src/device.rs +++ b/demo/common/src/device.rs @@ -10,8 +10,8 @@ //! GPU rendering code specifically for the demo. -use pathfinder_gpu::resources::ResourceLoader; use pathfinder_gpu::{BufferTarget, Device, VertexAttrClass, VertexAttrDescriptor, VertexAttrType}; +use pathfinder_resources::ResourceLoader; pub struct GroundProgram where diff --git a/demo/common/src/lib.rs b/demo/common/src/lib.rs index d92819cf..9d6e6b48 100644 --- a/demo/common/src/lib.rs +++ b/demo/common/src/lib.rs @@ -29,13 +29,13 @@ use pathfinder_geometry::rect::RectF; use pathfinder_geometry::transform2d::Transform2F; use pathfinder_geometry::transform3d::Transform4F; use pathfinder_geometry::vector::{Vector2F, Vector2I, Vector4F}; -use pathfinder_gpu::resources::ResourceLoader; use pathfinder_gpu::Device; use pathfinder_renderer::concurrent::scene_proxy::{RenderCommandStream, SceneProxy}; use pathfinder_renderer::gpu::options::{DestFramebuffer, RendererOptions}; use pathfinder_renderer::gpu::renderer::{RenderStats, RenderTime, Renderer}; use pathfinder_renderer::options::{BuildOptions, RenderTransform}; use pathfinder_renderer::scene::{RenderTarget, Scene}; +use pathfinder_resources::ResourceLoader; use pathfinder_svg::BuiltSVG; use pathfinder_ui::{MousePosition, UIEvent}; use std::fs::File; diff --git a/demo/common/src/ui.rs b/demo/common/src/ui.rs index 69e12b32..4e4d76fb 100644 --- a/demo/common/src/ui.rs +++ b/demo/common/src/ui.rs @@ -14,9 +14,9 @@ use crate::{BackgroundColor, Options}; use pathfinder_color::ColorU; use pathfinder_geometry::rect::RectI; use pathfinder_geometry::vector::Vector2I; -use pathfinder_gpu::resources::ResourceLoader; use pathfinder_gpu::Device; use pathfinder_renderer::gpu::debug::DebugUIPresenter; +use pathfinder_resources::ResourceLoader; use pathfinder_ui::{BUTTON_HEIGHT, BUTTON_TEXT_OFFSET, BUTTON_WIDTH, FONT_ASCENT, PADDING}; use pathfinder_ui::{TEXT_COLOR, TOOLTIP_HEIGHT, WINDOW_COLOR}; use std::f32::consts::PI; diff --git a/demo/common/src/window.rs b/demo/common/src/window.rs index b86e115b..c7a44f1e 100644 --- a/demo/common/src/window.rs +++ b/demo/common/src/window.rs @@ -13,7 +13,7 @@ use pathfinder_geometry::vector::Vector2I; use pathfinder_geometry::rect::RectI; use pathfinder_geometry::transform3d::{Perspective, Transform4F}; -use pathfinder_gpu::resources::ResourceLoader; +use pathfinder_resources::ResourceLoader; use rayon::ThreadPoolBuilder; use std::path::PathBuf; diff --git a/demo/magicleap/src/display.rs b/demo/magicleap/src/display.rs index fed60f2a..143ff24a 100644 --- a/demo/magicleap/src/display.rs +++ b/demo/magicleap/src/display.rs @@ -15,7 +15,7 @@ use pathfinder_geometry::rect::RectI32; use pathfinder_geometry::transform3d::Perspective; use pathfinder_geometry::transform3d::Transform4F32; use pathfinder_gl::GLVersion; -use pathfinder_gpu::resources::ResourceLoader; +use pathfinder_resources::ResourceLoader; pub trait Display: Sized { type Error: DisplayError; diff --git a/demo/magicleap/src/glwindow.rs b/demo/magicleap/src/glwindow.rs index 9f412b92..2f580e6a 100644 --- a/demo/magicleap/src/glwindow.rs +++ b/demo/magicleap/src/glwindow.rs @@ -30,8 +30,8 @@ use pathfinder_geometry::rect::RectI32; use pathfinder_geometry::transform3d::Transform4F32; use pathfinder_geometry::transform3d::Perspective; use pathfinder_gl::GLVersion; -use pathfinder_gpu::resources::FilesystemResourceLoader; -use pathfinder_gpu::resources::ResourceLoader; +use pathfinder_resources::ResourceLoader; +use pathfinder_resources::fs::FilesystemResourceLoader; use std::env; use std::error::Error; diff --git a/demo/magicleap/src/lib.rs b/demo/magicleap/src/lib.rs index cb448aae..9da86739 100644 --- a/demo/magicleap/src/lib.rs +++ b/demo/magicleap/src/lib.rs @@ -38,14 +38,14 @@ use pathfinder_gl::GLDevice; use pathfinder_gl::GLVersion; use pathfinder_gpu::ClearParams; use pathfinder_gpu::Device; -use pathfinder_gpu::resources::FilesystemResourceLoader; -use pathfinder_gpu::resources::ResourceLoader; use pathfinder_renderer::concurrent::executor::SequentialExecutor; use pathfinder_renderer::concurrent::scene_proxy::SceneProxy; use pathfinder_renderer::gpu::renderer::Renderer; use pathfinder_renderer::gpu::renderer::DestFramebuffer; use pathfinder_renderer::options::RenderOptions; use pathfinder_renderer::options::RenderTransform; +use pathfinder_resources::ResourceLoader; +use pathfinder_resources::fs::FilesystemResourceLoader; use pathfinder_simd::default::F32x4; use pathfinder_svg::BuiltSVG; diff --git a/demo/magicleap/src/magicleap.rs b/demo/magicleap/src/magicleap.rs index a96040c0..4fd2fc75 100644 --- a/demo/magicleap/src/magicleap.rs +++ b/demo/magicleap/src/magicleap.rs @@ -56,8 +56,8 @@ use pathfinder_geometry::transform3d::Perspective; use pathfinder_geometry::transform3d::Transform4F; use pathfinder_geometry::util; use pathfinder_gl::GLVersion; -use pathfinder_gpu::resources::FilesystemResourceLoader; -use pathfinder_gpu::resources::ResourceLoader; +use pathfinder_resources::ResourceLoader; +use pathfinder_resources::fs::FilesystemResourceLoader; use pathfinder_simd::default::F32x4; use rayon::ThreadPoolBuilder; diff --git a/demo/native/Cargo.toml b/demo/native/Cargo.toml index 127de9df..0d6d406f 100644 --- a/demo/native/Cargo.toml +++ b/demo/native/Cargo.toml @@ -28,6 +28,9 @@ path = "../../gl" [dependencies.pathfinder_gpu] path = "../../gpu" +[dependencies.pathfinder_resources] +path = "../../resources" + [dependencies.pathfinder_simd] path = "../../simd" diff --git a/demo/native/src/main.rs b/demo/native/src/main.rs index 29069ae1..0718c592 100644 --- a/demo/native/src/main.rs +++ b/demo/native/src/main.rs @@ -15,7 +15,8 @@ use pathfinder_demo::window::{Event, Keycode, SVGPath, View, Window, WindowSize} use pathfinder_demo::{DemoApp, Options}; use pathfinder_geometry::vector::Vector2I; use pathfinder_geometry::rect::RectI; -use pathfinder_gpu::resources::{FilesystemResourceLoader, ResourceLoader}; +use pathfinder_resources::ResourceLoader; +use pathfinder_resources::fs::FilesystemResourceLoader; use sdl2::event::{Event as SDLEvent, WindowEvent}; use sdl2::keyboard::Keycode as SDLKeycode; use sdl2::video::Window as SDLWindow; diff --git a/examples/canvas_glutin_minimal/Cargo.toml b/examples/canvas_glutin_minimal/Cargo.toml index b0cb8215..52779904 100644 --- a/examples/canvas_glutin_minimal/Cargo.toml +++ b/examples/canvas_glutin_minimal/Cargo.toml @@ -29,3 +29,5 @@ path = "../../gpu" [dependencies.pathfinder_renderer] path = "../../renderer" +[dependencies.pathfinder_resources] +path = "../../resources" diff --git a/examples/canvas_glutin_minimal/src/main.rs b/examples/canvas_glutin_minimal/src/main.rs index d7c5a818..9cbc9102 100644 --- a/examples/canvas_glutin_minimal/src/main.rs +++ b/examples/canvas_glutin_minimal/src/main.rs @@ -20,7 +20,7 @@ use pathfinder_color::ColorF; use pathfinder_geometry::rect::RectF; use pathfinder_geometry::vector::{Vector2F, Vector2I}; use pathfinder_gl::{GLDevice, GLVersion}; -use pathfinder_gpu::resources::FilesystemResourceLoader; +use pathfinder_resources::fs::FilesystemResourceLoader; use pathfinder_renderer::concurrent::rayon::RayonExecutor; use pathfinder_renderer::concurrent::scene_proxy::SceneProxy; use pathfinder_renderer::gpu::renderer::Renderer; diff --git a/examples/canvas_metal_minimal/src/main.rs b/examples/canvas_metal_minimal/src/main.rs index b96ee3d6..498d6639 100644 --- a/examples/canvas_metal_minimal/src/main.rs +++ b/examples/canvas_metal_minimal/src/main.rs @@ -14,13 +14,13 @@ use pathfinder_canvas::{CanvasFontContext, CanvasRenderingContext2D, Path2D}; use pathfinder_color::ColorF; use pathfinder_geometry::vector::{Vector2F, Vector2I}; use pathfinder_geometry::rect::RectF; -use pathfinder_gpu::resources::FilesystemResourceLoader; use pathfinder_metal::MetalDevice; use pathfinder_renderer::concurrent::rayon::RayonExecutor; use pathfinder_renderer::concurrent::scene_proxy::SceneProxy; use pathfinder_renderer::gpu::options::{DestFramebuffer, RendererOptions}; use pathfinder_renderer::gpu::renderer::Renderer; use pathfinder_renderer::options::BuildOptions; +use pathfinder_resources::fs::FilesystemResourceLoader; use sdl2::event::Event; use sdl2::hint; use sdl2::keyboard::Keycode; diff --git a/examples/canvas_minimal/Cargo.toml b/examples/canvas_minimal/Cargo.toml index fa4f030e..ca133cad 100644 --- a/examples/canvas_minimal/Cargo.toml +++ b/examples/canvas_minimal/Cargo.toml @@ -29,3 +29,6 @@ path = "../../gpu" [dependencies.pathfinder_renderer] path = "../../renderer" + +[dependencies.pathfinder_resources] +path = "../../resources" diff --git a/examples/canvas_minimal/src/main.rs b/examples/canvas_minimal/src/main.rs index 044f76cd..99a3a9e7 100644 --- a/examples/canvas_minimal/src/main.rs +++ b/examples/canvas_minimal/src/main.rs @@ -13,12 +13,12 @@ use pathfinder_color::ColorF; use pathfinder_geometry::rect::RectF; use pathfinder_geometry::vector::{Vector2F, Vector2I}; use pathfinder_gl::{GLDevice, GLVersion}; -use pathfinder_gpu::resources::FilesystemResourceLoader; use pathfinder_renderer::concurrent::rayon::RayonExecutor; use pathfinder_renderer::concurrent::scene_proxy::SceneProxy; use pathfinder_renderer::gpu::options::{DestFramebuffer, RendererOptions}; use pathfinder_renderer::gpu::renderer::Renderer; use pathfinder_renderer::options::BuildOptions; +use pathfinder_resources::embedded::EmbeddedResourceLoader; use sdl2::event::Event; use sdl2::keyboard::Keycode; use sdl2::video::GLProfile; @@ -47,7 +47,7 @@ fn main() { // Create a Pathfinder renderer. let mut renderer = Renderer::new(GLDevice::new(GLVersion::GL3, 0), - &FilesystemResourceLoader::locate(), + &EmbeddedResourceLoader::new(), DestFramebuffer::full_window(window_size), RendererOptions { background_color: Some(ColorF::white()) }); diff --git a/examples/canvas_moire/Cargo.toml b/examples/canvas_moire/Cargo.toml index fec0d610..3f9a1f9a 100644 --- a/examples/canvas_moire/Cargo.toml +++ b/examples/canvas_moire/Cargo.toml @@ -30,3 +30,6 @@ path = "../../gpu" [dependencies.pathfinder_renderer] path = "../../renderer" + +[dependencies.pathfinder_resources] +path = "../../resources" diff --git a/examples/canvas_moire/src/main.rs b/examples/canvas_moire/src/main.rs index f23f5988..7deca089 100644 --- a/examples/canvas_moire/src/main.rs +++ b/examples/canvas_moire/src/main.rs @@ -12,12 +12,12 @@ use pathfinder_canvas::{CanvasFontContext, CanvasRenderingContext2D, FillStyle, use pathfinder_color::{ColorF, ColorU}; use pathfinder_geometry::vector::{Vector2F, Vector2I}; use pathfinder_gl::{GLDevice, GLVersion}; -use pathfinder_gpu::resources::FilesystemResourceLoader; use pathfinder_renderer::concurrent::rayon::RayonExecutor; use pathfinder_renderer::concurrent::scene_proxy::SceneProxy; use pathfinder_renderer::gpu::options::{DestFramebuffer, RendererOptions}; use pathfinder_renderer::gpu::renderer::Renderer; use pathfinder_renderer::options::BuildOptions; +use pathfinder_resources::fs::FilesystemResourceLoader; use sdl2::event::Event; use sdl2::keyboard::Keycode; use sdl2::video::GLProfile; diff --git a/examples/canvas_nanovg/src/main.rs b/examples/canvas_nanovg/src/main.rs index 201bd747..792eac3c 100644 --- a/examples/canvas_nanovg/src/main.rs +++ b/examples/canvas_nanovg/src/main.rs @@ -23,12 +23,12 @@ use pathfinder_geometry::transform2d::Transform2F; use pathfinder_geometry::util; use pathfinder_geometry::vector::{Vector2F, Vector2I}; use pathfinder_gl::{GLDevice, GLVersion}; -use pathfinder_gpu::resources::FilesystemResourceLoader; use pathfinder_renderer::concurrent::rayon::RayonExecutor; use pathfinder_renderer::concurrent::scene_proxy::SceneProxy; use pathfinder_renderer::gpu::options::{DestFramebuffer, RendererOptions}; use pathfinder_renderer::gpu::renderer::Renderer; use pathfinder_renderer::options::BuildOptions; +use pathfinder_resources::fs::FilesystemResourceLoader; use sdl2::event::Event; use sdl2::keyboard::Keycode; use sdl2::video::GLProfile; diff --git a/examples/canvas_text/Cargo.toml b/examples/canvas_text/Cargo.toml index 9373998b..f5da5294 100644 --- a/examples/canvas_text/Cargo.toml +++ b/examples/canvas_text/Cargo.toml @@ -31,3 +31,6 @@ path = "../../gpu" [dependencies.pathfinder_renderer] path = "../../renderer" + +[dependencies.pathfinder_resources] +path = "../../resources" diff --git a/examples/canvas_text/src/main.rs b/examples/canvas_text/src/main.rs index b969313f..dd48d3ab 100644 --- a/examples/canvas_text/src/main.rs +++ b/examples/canvas_text/src/main.rs @@ -13,12 +13,13 @@ use pathfinder_canvas::{CanvasFontContext, CanvasRenderingContext2D, TextAlign}; use pathfinder_color::ColorF; use pathfinder_geometry::vector::{Vector2F, Vector2I}; use pathfinder_gl::{GLDevice, GLVersion}; -use pathfinder_gpu::resources::{FilesystemResourceLoader, ResourceLoader}; use pathfinder_renderer::concurrent::rayon::RayonExecutor; use pathfinder_renderer::concurrent::scene_proxy::SceneProxy; use pathfinder_renderer::gpu::options::{DestFramebuffer, RendererOptions}; use pathfinder_renderer::gpu::renderer::Renderer; use pathfinder_renderer::options::BuildOptions; +use pathfinder_resources::ResourceLoader; +use pathfinder_resources::fs::FilesystemResourceLoader; use sdl2::event::Event; use sdl2::keyboard::Keycode; use sdl2::video::GLProfile; diff --git a/examples/swf_basic/Cargo.toml b/examples/swf_basic/Cargo.toml index f59db7ba..095c779a 100644 --- a/examples/swf_basic/Cargo.toml +++ b/examples/swf_basic/Cargo.toml @@ -24,5 +24,8 @@ path = "../../gpu" [dependencies.pathfinder_renderer] path = "../../renderer" +[dependencies.pathfinder_resources] +path = "../../resources" + [dependencies.pathfinder_swf] path = "../../swf" diff --git a/examples/swf_basic/src/main.rs b/examples/swf_basic/src/main.rs index 4a7c0f9c..2d6ff01f 100644 --- a/examples/swf_basic/src/main.rs +++ b/examples/swf_basic/src/main.rs @@ -11,12 +11,13 @@ use pathfinder_geometry::vector::{Vector2F, Vector2I}; use pathfinder_geometry::rect::RectF; use pathfinder_gl::{GLDevice, GLVersion}; -use pathfinder_gpu::resources::{FilesystemResourceLoader, ResourceLoader}; use pathfinder_renderer::concurrent::rayon::RayonExecutor; use pathfinder_renderer::concurrent::scene_proxy::SceneProxy; use pathfinder_renderer::gpu::renderer::Renderer; use pathfinder_renderer::gpu::options::{DestFramebuffer, RendererOptions}; use pathfinder_renderer::options::{RenderTransform, BuildOptions}; +use pathfinder_resources::ResourceLoader; +use pathfinder_resources::fs::FilesystemResourceLoader; use sdl2::event::Event; use sdl2::keyboard::Keycode; use sdl2::video::GLProfile; diff --git a/gl/Cargo.toml b/gl/Cargo.toml index 9485ecad..b9c787d2 100644 --- a/gl/Cargo.toml +++ b/gl/Cargo.toml @@ -20,5 +20,8 @@ path = "../geometry" [dependencies.pathfinder_gpu] path = "../gpu" +[dependencies.pathfinder_resources] +path = "../resources" + [dependencies.pathfinder_simd] path = "../simd" diff --git a/gl/src/lib.rs b/gl/src/lib.rs index eb1caa1e..05f180d4 100644 --- a/gl/src/lib.rs +++ b/gl/src/lib.rs @@ -18,12 +18,12 @@ use gl::types::{GLuint, GLvoid}; use half::f16; use pathfinder_geometry::rect::RectI; use pathfinder_geometry::vector::Vector2I; -use pathfinder_gpu::resources::ResourceLoader; use pathfinder_gpu::{BlendFactor, BlendOp, BufferData, BufferTarget, BufferUploadMode, ClearOps}; use pathfinder_gpu::{DepthFunc, Device, Primitive, RenderOptions, RenderState, RenderTarget}; use pathfinder_gpu::{ShaderKind, StencilFunc, TextureData, TextureDataRef, TextureFormat}; use pathfinder_gpu::{TextureSamplingFlags, UniformData, VertexAttrClass}; use pathfinder_gpu::{VertexAttrDescriptor, VertexAttrType}; +use pathfinder_resources::ResourceLoader; use pathfinder_simd::default::F32x4; use std::ffi::CString; use std::mem; diff --git a/gpu/Cargo.toml b/gpu/Cargo.toml index ed6eeea1..5e0b6cb6 100644 --- a/gpu/Cargo.toml +++ b/gpu/Cargo.toml @@ -19,5 +19,8 @@ path = "../color" [dependencies.pathfinder_geometry] path = "../geometry" +[dependencies.pathfinder_resources] +path = "../resources" + [dependencies.pathfinder_simd] path = "../simd" diff --git a/gpu/src/lib.rs b/gpu/src/lib.rs index 35f94086..640676c0 100644 --- a/gpu/src/lib.rs +++ b/gpu/src/lib.rs @@ -13,19 +13,17 @@ #[macro_use] extern crate bitflags; -use crate::resources::ResourceLoader; use half::f16; use image::ImageFormat; use pathfinder_color::ColorF; use pathfinder_geometry::rect::RectI; use pathfinder_geometry::transform3d::Transform4F; use pathfinder_geometry::vector::Vector2I; +use pathfinder_resources::ResourceLoader; use pathfinder_simd::default::{F32x2, F32x4}; use std::os::raw::c_void; use std::time::Duration; -pub mod resources; - pub trait Device: Sized { type Buffer; type Framebuffer; diff --git a/metal/Cargo.toml b/metal/Cargo.toml index c864ca72..fb6fe7ac 100644 --- a/metal/Cargo.toml +++ b/metal/Cargo.toml @@ -21,5 +21,8 @@ path = "../geometry" [dependencies.pathfinder_gpu] path = "../gpu" +[dependencies.pathfinder_resources] +path = "../resources" + [dependencies.pathfinder_simd] path = "../simd" diff --git a/metal/src/lib.rs b/metal/src/lib.rs index d8d99ce1..67f6d41b 100644 --- a/metal/src/lib.rs +++ b/metal/src/lib.rs @@ -43,11 +43,11 @@ use metal::{VertexAttributeRef, VertexDescriptor, VertexDescriptorRef}; use objc::runtime::{Class, Object}; use pathfinder_geometry::rect::RectI; use pathfinder_geometry::vector::Vector2I; -use pathfinder_gpu::resources::ResourceLoader; use pathfinder_gpu::{BlendFactor, BlendOp, BufferData, BufferTarget, BufferUploadMode, DepthFunc}; use pathfinder_gpu::{Device, Primitive, RenderState, RenderTarget, ShaderKind, StencilFunc}; use pathfinder_gpu::{TextureData, TextureDataRef, TextureFormat, TextureSamplingFlags}; use pathfinder_gpu::{UniformData, VertexAttrClass, VertexAttrDescriptor, VertexAttrType}; +use pathfinder_resources::ResourceLoader; use pathfinder_simd::default::{F32x2, F32x4}; use std::cell::{Cell, RefCell}; use std::mem; diff --git a/renderer/Cargo.toml b/renderer/Cargo.toml index caf2af68..8b1037dc 100644 --- a/renderer/Cargo.toml +++ b/renderer/Cargo.toml @@ -28,6 +28,9 @@ path = "../geometry" [dependencies.pathfinder_gpu] path = "../gpu" +[dependencies.pathfinder_resources] +path = "../resources" + [dependencies.pathfinder_simd] path = "../simd" diff --git a/renderer/src/gpu/debug.rs b/renderer/src/gpu/debug.rs index 7d28b952..d6a53d02 100644 --- a/renderer/src/gpu/debug.rs +++ b/renderer/src/gpu/debug.rs @@ -18,8 +18,8 @@ use crate::gpu::renderer::{RenderStats, RenderTime}; use pathfinder_geometry::vector::Vector2I; use pathfinder_geometry::rect::RectI; -use pathfinder_gpu::resources::ResourceLoader; use pathfinder_gpu::Device; +use pathfinder_resources::ResourceLoader; use pathfinder_ui::{FONT_ASCENT, LINE_HEIGHT, PADDING, UIPresenter, WINDOW_COLOR}; use std::collections::VecDeque; use std::ops::{Add, Div}; diff --git a/renderer/src/gpu/renderer.rs b/renderer/src/gpu/renderer.rs index 1748bb29..ea1198ca 100644 --- a/renderer/src/gpu/renderer.rs +++ b/renderer/src/gpu/renderer.rs @@ -31,11 +31,11 @@ use pathfinder_content::pattern::RenderTargetId; use pathfinder_geometry::vector::{Vector2F, Vector2I, Vector4F}; use pathfinder_geometry::rect::RectI; use pathfinder_geometry::transform3d::Transform4F; -use pathfinder_gpu::resources::ResourceLoader; use pathfinder_gpu::{BlendFactor, BlendOp, BlendState, BufferData, BufferTarget, BufferUploadMode}; use pathfinder_gpu::{ClearOps, DepthFunc, DepthState, Device, Primitive, RenderOptions}; use pathfinder_gpu::{RenderState, RenderTarget, StencilFunc, StencilState, TextureDataRef}; use pathfinder_gpu::{TextureFormat, TextureSamplingFlags, UniformData}; +use pathfinder_resources::ResourceLoader; use pathfinder_simd::default::{F32x2, F32x4}; use std::cmp; use std::collections::VecDeque; diff --git a/renderer/src/gpu/shaders.rs b/renderer/src/gpu/shaders.rs index 93faa7fd..c3a10698 100644 --- a/renderer/src/gpu/shaders.rs +++ b/renderer/src/gpu/shaders.rs @@ -12,7 +12,7 @@ use crate::gpu_data::FillBatchPrimitive; use pathfinder_content::fill::FillRule; use pathfinder_gpu::{BufferData, BufferTarget, BufferUploadMode, Device, VertexAttrClass}; use pathfinder_gpu::{VertexAttrDescriptor, VertexAttrType}; -use pathfinder_gpu::resources::ResourceLoader; +use pathfinder_resources::ResourceLoader; // TODO(pcwalton): Replace with `mem::size_of` calls? const FILL_INSTANCE_SIZE: usize = 8; diff --git a/resources/Cargo.toml b/resources/Cargo.toml new file mode 100644 index 00000000..bf93efcf --- /dev/null +++ b/resources/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "pathfinder_resources" +version = "0.1.0" +authors = ["Patrick Walton "] +edition = "2018" + +[dependencies] diff --git a/resources/MANIFEST b/resources/MANIFEST new file mode 100644 index 00000000..1b246bba --- /dev/null +++ b/resources/MANIFEST @@ -0,0 +1,94 @@ +# This file must contain the paths of all resources that are used by the Pathfinder library. +# +# When you add a new resource, make sure to add it to this file. + +debug-fonts/regular.json +shaders/gl3/debug_solid.fs.glsl +shaders/gl3/debug_solid.vs.glsl +shaders/gl3/debug_texture.fs.glsl +shaders/gl3/debug_texture.vs.glsl +shaders/gl3/demo_ground.fs.glsl +shaders/gl3/demo_ground.vs.glsl +shaders/gl3/fill.fs.glsl +shaders/gl3/fill.vs.glsl +shaders/gl3/filter.vs.glsl +shaders/gl3/filter_basic.fs.glsl +shaders/gl3/filter_blur.fs.glsl +shaders/gl3/filter_text.fs.glsl +shaders/gl3/mask.vs.glsl +shaders/gl3/mask_evenodd.fs.glsl +shaders/gl3/mask_winding.fs.glsl +shaders/gl3/mask_winding.vs.glsl +shaders/gl3/post.fs.glsl +shaders/gl3/post.vs.glsl +shaders/gl3/reproject.fs.glsl +shaders/gl3/reproject.vs.glsl +shaders/gl3/stencil.fs.glsl +shaders/gl3/stencil.vs.glsl +shaders/gl3/tile_alpha.fs.glsl +shaders/gl3/tile_alpha.vs.glsl +shaders/gl3/tile_alpha_difference.fs.glsl +shaders/gl3/tile_alpha_dodgeburn.fs.glsl +shaders/gl3/tile_alpha_exclusion.fs.glsl +shaders/gl3/tile_alpha_hsl.fs.glsl +shaders/gl3/tile_alpha_monochrome.vs.glsl +shaders/gl3/tile_alpha_multicolor.vs.glsl +shaders/gl3/tile_alpha_overlay.fs.glsl +shaders/gl3/tile_alpha_softlight.fs.glsl +shaders/gl3/tile_copy.fs.glsl +shaders/gl3/tile_copy.vs.glsl +shaders/gl3/tile_solid.fs.glsl +shaders/gl3/tile_solid.vs.glsl +shaders/gl3/tile_solid_monochrome.vs.glsl +shaders/gl3/tile_solid_multicolor.vs.glsl +shaders/metal/debug_solid.fs.metal +shaders/metal/debug_solid.vs.metal +shaders/metal/debug_texture.fs.metal +shaders/metal/debug_texture.vs.metal +shaders/metal/demo_ground.fs.metal +shaders/metal/demo_ground.vs.metal +shaders/metal/fill.fs.metal +shaders/metal/fill.vs.metal +shaders/metal/filter.vs.metal +shaders/metal/filter_basic.fs.metal +shaders/metal/filter_blur.fs.metal +shaders/metal/filter_text.fs.metal +shaders/metal/mask.vs.metal +shaders/metal/mask_evenodd.fs.metal +shaders/metal/mask_winding.fs.metal +shaders/metal/mask_winding.vs.metal +shaders/metal/post.fs.metal +shaders/metal/post.vs.metal +shaders/metal/reproject.fs.metal +shaders/metal/reproject.vs.metal +shaders/metal/stencil.fs.metal +shaders/metal/stencil.vs.metal +shaders/metal/tile_alpha.fs.metal +shaders/metal/tile_alpha.vs.metal +shaders/metal/tile_alpha_difference.fs.metal +shaders/metal/tile_alpha_dodgeburn.fs.metal +shaders/metal/tile_alpha_exclusion.fs.metal +shaders/metal/tile_alpha_hsl.fs.metal +shaders/metal/tile_alpha_monochrome.vs.metal +shaders/metal/tile_alpha_multicolor.vs.metal +shaders/metal/tile_alpha_overlay.fs.metal +shaders/metal/tile_alpha_softlight.fs.metal +shaders/metal/tile_copy.fs.metal +shaders/metal/tile_copy.vs.metal +shaders/metal/tile_solid.fs.metal +shaders/metal/tile_solid.vs.metal +shaders/metal/tile_solid_monochrome.vs.metal +shaders/metal/tile_solid_multicolor.vs.metal +textures/area-lut.png +textures/debug-corner-fill.png +textures/debug-corner-outline.png +textures/debug-font.png +textures/demo-background.png +textures/demo-effects.png +textures/demo-open.png +textures/demo-rotate.png +textures/demo-screenshot.png +textures/demo-zoom-actual-size.png +textures/demo-zoom-in.png +textures/demo-zoom-out.png +textures/gamma-lut.png diff --git a/resources/build.rs b/resources/build.rs new file mode 100644 index 00000000..0912c1ad --- /dev/null +++ b/resources/build.rs @@ -0,0 +1,51 @@ +// pathfinder/resources/build.rs +// +// Copyright © 2020 The Pathfinder Project Developers. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use std::env; +use std::fs::File; +use std::io::{BufRead, BufReader, Write}; +use std::path::Path; + +fn main() { + let out_dir = env::var_os("OUT_DIR").unwrap(); + let dest_path = Path::new(&out_dir).join("manifest.rs"); + let mut dest = File::create(dest_path).unwrap(); + let cwd = env::current_dir().unwrap(); + + writeln!(&mut dest, "// Generated by `pathfinder/resources/build.rs`. Do not edit!\n").unwrap(); + writeln!(&mut dest, + "pub static RESOURCES: &'static [(&'static str, &'static [u8])] = &[").unwrap(); + + let src = BufReader::new(File::open("MANIFEST").unwrap()); + for line in src.lines() { + let line = line.unwrap(); + let line = line.trim_start().trim_end(); + if line.is_empty() || line.starts_with("#") { + continue; + } + + let escaped_path = line.escape_default().to_string(); + let mut full_path = cwd.clone(); + full_path.push(line); + let escaped_full_path = full_path.to_str().unwrap().escape_default().to_string(); + + writeln!(&mut dest, + " (\"{}\", include_bytes!(\"{}\")),", + escaped_path, + escaped_full_path).unwrap(); + + println!("cargo:rerun-if-changed={}", line); + } + + writeln!(&mut dest, "];").unwrap(); + + println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed=MANIFEST"); +} diff --git a/resources/src/embedded.rs b/resources/src/embedded.rs new file mode 100644 index 00000000..e9879cde --- /dev/null +++ b/resources/src/embedded.rs @@ -0,0 +1,34 @@ +// pathfinder/resources/src/embedded.rs +// +// Copyright © 2020 The Pathfinder Project Developers. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! Embeds needed resources statically in the binary. + +use crate::ResourceLoader; +use std::io::{Error as IOError, ErrorKind}; + +include!(concat!(env!("OUT_DIR"), "/manifest.rs")); + +pub struct EmbeddedResourceLoader; + +impl EmbeddedResourceLoader { + #[inline] + pub fn new() -> EmbeddedResourceLoader { + EmbeddedResourceLoader + } +} + +impl ResourceLoader for EmbeddedResourceLoader { + fn slurp(&self, virtual_path: &str) -> Result, IOError> { + match RESOURCES.iter().filter(|&(path, _)| *path == virtual_path).next() { + Some((_, data)) => Ok(data.to_vec()), + None => Err(IOError::from(ErrorKind::NotFound)), + } + } +} diff --git a/gpu/src/resources.rs b/resources/src/fs.rs similarity index 81% rename from gpu/src/resources.rs rename to resources/src/fs.rs index 13e40729..37ffec91 100644 --- a/gpu/src/resources.rs +++ b/resources/src/fs.rs @@ -1,6 +1,6 @@ -// pathfinder/gpu/src/resources.rs +// pathfinder/resources/src/fs.rs // -// Copyright © 2019 The Pathfinder Project Developers. +// Copyright © 2020 The Pathfinder Project Developers. // // Licensed under the Apache License, Version 2.0 or the MIT license @@ -8,21 +8,14 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -//! An abstraction for reading resources. -//! -//! We can't always count on a filesystem being present. +//! Reads resources from the filesystem. +use crate::ResourceLoader; use std::env; use std::fs::File; use std::io::{Error as IOError, Read}; use std::path::PathBuf; -pub trait ResourceLoader { - /// This is deliberately not a `Path`, because these are virtual paths - /// that do not necessarily correspond to real paths on a filesystem. - fn slurp(&self, path: &str) -> Result, IOError>; -} - pub struct FilesystemResourceLoader { pub directory: PathBuf, } diff --git a/resources/src/lib.rs b/resources/src/lib.rs new file mode 100644 index 00000000..33fe80c5 --- /dev/null +++ b/resources/src/lib.rs @@ -0,0 +1,29 @@ +// pathfinder/resources/src/lib.rs +// +// Copyright © 2020 The Pathfinder Project Developers. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! An abstraction for reading resources. +//! +//! This accomplishes two purposes over just using the filesystem to locate shaders and so forth: +//! +//! 1. Downstream users of Pathfinder shouldn't be burdened with having to install the resources +//! alongside their binary. +//! +//! 2. There may not be a traditional filesystem available, as for example is the case on Android. + +use std::io::Error as IOError; + +pub mod embedded; +pub mod fs; + +pub trait ResourceLoader { + /// This is deliberately not a `Path`, because these are virtual paths + /// that do not necessarily correspond to real paths on a filesystem. + fn slurp(&self, path: &str) -> Result, IOError>; +} diff --git a/ui/Cargo.toml b/ui/Cargo.toml index 12828b56..50ce9685 100644 --- a/ui/Cargo.toml +++ b/ui/Cargo.toml @@ -22,5 +22,8 @@ path = "../geometry" [dependencies.pathfinder_gpu] path = "../gpu" +[dependencies.pathfinder_resources] +path = "../resources" + [dependencies.pathfinder_simd] path = "../simd" diff --git a/ui/src/lib.rs b/ui/src/lib.rs index c5c925b7..533316a1 100644 --- a/ui/src/lib.rs +++ b/ui/src/lib.rs @@ -20,10 +20,10 @@ use hashbrown::HashMap; use pathfinder_color::ColorU; use pathfinder_geometry::rect::RectI; use pathfinder_geometry::vector::{Vector2F, Vector2I}; -use pathfinder_gpu::resources::ResourceLoader; use pathfinder_gpu::{BlendFactor, BlendState, BufferData, BufferTarget, BufferUploadMode, Device}; use pathfinder_gpu::{Primitive, RenderOptions, RenderState, RenderTarget, UniformData}; use pathfinder_gpu::{VertexAttrClass, VertexAttrDescriptor, VertexAttrType}; +use pathfinder_resources::ResourceLoader; use pathfinder_simd::default::F32x4; use serde_json; use std::mem; diff --git a/webgl/src/lib.rs b/webgl/src/lib.rs index 680dc059..06914c13 100644 --- a/webgl/src/lib.rs +++ b/webgl/src/lib.rs @@ -15,12 +15,12 @@ extern crate log; use pathfinder_geometry::rect::RectI; use pathfinder_geometry::vector::Vector2I; -use pathfinder_gpu::resources::ResourceLoader; use pathfinder_gpu::{BlendFactor, BlendOp, BufferData, BufferTarget, RenderTarget}; use pathfinder_gpu::{BufferUploadMode, ClearOps, DepthFunc, Device, Primitive, RenderOptions}; use pathfinder_gpu::{RenderState, ShaderKind, StencilFunc, TextureData, TextureDataRef}; use pathfinder_gpu::{TextureFormat, TextureSamplingFlags, UniformData, VertexAttrClass}; use pathfinder_gpu::{VertexAttrDescriptor, VertexAttrType}; +use pathfinder_resources::ResourceLoader; use std::mem; use std::str; use std::time::Duration;