Add an embedded resource loader that places resources directly in the binary.

This is useful for WebGL and for downstream crates.io use.
This commit is contained in:
Patrick Walton 2020-02-28 17:10:53 -08:00
parent ee6c7e0797
commit 0f35d9c817
47 changed files with 312 additions and 72 deletions

46
Cargo.lock generated
View File

@ -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"

View File

@ -23,6 +23,7 @@ members = [
"export",
"metal",
"renderer",
"resources",
"simd",
"svg",
"swf",

View File

@ -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"

View File

@ -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};

View File

@ -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;

View File

@ -42,6 +42,9 @@ path = "../../gpu"
[dependencies.pathfinder_renderer]
path = "../../renderer"
[dependencies.pathfinder_resources]
path = "../../resources"
[dependencies.pathfinder_simd]
path = "../../simd"

View File

@ -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<D>
where

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -28,6 +28,9 @@ path = "../../gl"
[dependencies.pathfinder_gpu]
path = "../../gpu"
[dependencies.pathfinder_resources]
path = "../../resources"
[dependencies.pathfinder_simd]
path = "../../simd"

View File

@ -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;

View File

@ -29,3 +29,5 @@ path = "../../gpu"
[dependencies.pathfinder_renderer]
path = "../../renderer"
[dependencies.pathfinder_resources]
path = "../../resources"

View File

@ -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;

View File

@ -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;

View File

@ -29,3 +29,6 @@ path = "../../gpu"
[dependencies.pathfinder_renderer]
path = "../../renderer"
[dependencies.pathfinder_resources]
path = "../../resources"

View File

@ -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()) });

View File

@ -30,3 +30,6 @@ path = "../../gpu"
[dependencies.pathfinder_renderer]
path = "../../renderer"
[dependencies.pathfinder_resources]
path = "../../resources"

View File

@ -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;

View File

@ -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;

View File

@ -31,3 +31,6 @@ path = "../../gpu"
[dependencies.pathfinder_renderer]
path = "../../renderer"
[dependencies.pathfinder_resources]
path = "../../resources"

View File

@ -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;

View File

@ -24,5 +24,8 @@ path = "../../gpu"
[dependencies.pathfinder_renderer]
path = "../../renderer"
[dependencies.pathfinder_resources]
path = "../../resources"
[dependencies.pathfinder_swf]
path = "../../swf"

View File

@ -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;

View File

@ -20,5 +20,8 @@ path = "../geometry"
[dependencies.pathfinder_gpu]
path = "../gpu"
[dependencies.pathfinder_resources]
path = "../resources"
[dependencies.pathfinder_simd]
path = "../simd"

View File

@ -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;

View File

@ -19,5 +19,8 @@ path = "../color"
[dependencies.pathfinder_geometry]
path = "../geometry"
[dependencies.pathfinder_resources]
path = "../resources"
[dependencies.pathfinder_simd]
path = "../simd"

View File

@ -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;

View File

@ -21,5 +21,8 @@ path = "../geometry"
[dependencies.pathfinder_gpu]
path = "../gpu"
[dependencies.pathfinder_resources]
path = "../resources"
[dependencies.pathfinder_simd]
path = "../simd"

View File

@ -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;

View File

@ -28,6 +28,9 @@ path = "../geometry"
[dependencies.pathfinder_gpu]
path = "../gpu"
[dependencies.pathfinder_resources]
path = "../resources"
[dependencies.pathfinder_simd]
path = "../simd"

View File

@ -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};

View File

@ -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;

View File

@ -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;

7
resources/Cargo.toml Normal file
View File

@ -0,0 +1,7 @@
[package]
name = "pathfinder_resources"
version = "0.1.0"
authors = ["Patrick Walton <pcwalton@mimiga.net>"]
edition = "2018"
[dependencies]

94
resources/MANIFEST Normal file
View File

@ -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

51
resources/build.rs Normal file
View File

@ -0,0 +1,51 @@
// pathfinder/resources/build.rs
//
// Copyright © 2020 The Pathfinder Project Developers.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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");
}

34
resources/src/embedded.rs Normal file
View File

@ -0,0 +1,34 @@
// pathfinder/resources/src/embedded.rs
//
// Copyright © 2020 The Pathfinder Project Developers.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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<Vec<u8>, IOError> {
match RESOURCES.iter().filter(|&(path, _)| *path == virtual_path).next() {
Some((_, data)) => Ok(data.to_vec()),
None => Err(IOError::from(ErrorKind::NotFound)),
}
}
}

View File

@ -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 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-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<Vec<u8>, IOError>;
}
pub struct FilesystemResourceLoader {
pub directory: PathBuf,
}

29
resources/src/lib.rs Normal file
View File

@ -0,0 +1,29 @@
// pathfinder/resources/src/lib.rs
//
// Copyright © 2020 The Pathfinder Project Developers.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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<Vec<u8>, IOError>;
}

View File

@ -22,5 +22,8 @@ path = "../geometry"
[dependencies.pathfinder_gpu]
path = "../gpu"
[dependencies.pathfinder_resources]
path = "../resources"
[dependencies.pathfinder_simd]
path = "../simd"

View File

@ -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;

View File

@ -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;