Rename project structure with /core and /client
|
@ -42,8 +42,8 @@ We are also focusing initial feature development on a destructive SVG vector edi
|
|||
- Launch a website at www.graphite.design with a home page, blog, manual, and code documentation
|
||||
|
||||
### Remaining tasks for the MVP (0.1 release)
|
||||
- Graphite Editor Library
|
||||
- WASM wrapper for Graphite Editor Library
|
||||
- Editor Core Library
|
||||
- WASM wrapper for Editor Core Library
|
||||
- Panel system
|
||||
- Drawing vector shapes on screen
|
||||
- Properties panel and vector styling
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "cli"
|
||||
name = "graphite-cli"
|
||||
version = "0.1.0"
|
||||
authors = ["Keavon Chambers <graphite@keavon.com>"]
|
||||
authors = ["Graphite Authors <graphite@keavon.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
3
client/native/README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# Native editor client
|
||||
|
||||
This will be the official desktop and web client. While the Rust GUI ecosystem is relatively immature and the Graphite project does not have the resources to make a custom GUI system that nicely supports extensions, the web frontend is the temporary official editor client. The HTML-based frontend client will be replaced by the native client compiled to WASM and running in an HTML Canvas with the WebGPU browser graphics API.
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "render-engine"
|
||||
name = "graphite-document-core"
|
||||
version = "0.1.0"
|
||||
authors = ["Keavon Chambers <graphite@keavon.com>"]
|
||||
authors = ["Graphite Authors <graphite@keavon.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
8
core/editor/Cargo.toml
Normal file
|
@ -0,0 +1,8 @@
|
|||
[package]
|
||||
name = "graphite-editor-core"
|
||||
version = "0.1.0"
|
||||
authors = ["Graphite Authors <graphite@keavon.com>"]
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
log = "0.4"
|
9
core/renderer/Cargo.toml
Normal file
|
@ -0,0 +1,9 @@
|
|||
[package]
|
||||
name = "graphite-renderer-core"
|
||||
version = "0.1.0"
|
||||
authors = ["Graphite Authors <graphite@keavon.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
7
core/renderer/src/lib.rs
Normal file
|
@ -0,0 +1,7 @@
|
|||
#[cfg(test)]
|
||||
mod tests {
|
||||
#[test]
|
||||
fn it_works() {
|
||||
assert_eq!(2 + 2, 4);
|
||||
}
|
||||
}
|
|
@ -13,20 +13,20 @@
|
|||
|
||||
// Hierarchy
|
||||
|
||||
[<dependencies> Dependencies|
|
||||
[<dependencies> Core Libraries|
|
||||
[<client> Frontend Editor Client]
|
||||
[<client> Headless Editor Client]
|
||||
[<client> Application Client
|
||||
(like a game engine or game that renders .grd graphs at runtime)]
|
||||
[<editor> Editor Library]
|
||||
[<document> Document Library]
|
||||
[<renderer> Renderer Library]
|
||||
[<editor> Editor Core Library]
|
||||
[<document> Document Core Library]
|
||||
[<renderer> Renderer Core Library]
|
||||
|
||||
[Frontend Editor Client] Depends On -> [Editor Library]
|
||||
[Editor Library] Depends On -> [Document Library]
|
||||
[Headless Editor Client] Depends On -> [Document Library]
|
||||
[Document Library] Depends On -> [Renderer Library]
|
||||
[Application Client] Depends On -> [Renderer Library]
|
||||
[Frontend Editor Client] Depends On -> [Editor Core Library]
|
||||
[Editor Core Library] Depends On -> [Document Core Library]
|
||||
[Headless Editor Client] Depends On -> [Document Core Library]
|
||||
[Document Core Library] Depends On -> [Renderer Core Library]
|
||||
[Application Client] Depends On -> [Renderer Core Library]
|
||||
]
|
||||
|
||||
// Client
|
||||
|
|
|
@ -6,9 +6,9 @@ This is a great place to start learning about the Graphite codebase and its arch
|
|||
|
||||
Graphite's core rust codebase is split into three reusable libraries:
|
||||
|
||||
- Graphite Editor Library
|
||||
- Graphite Document Library
|
||||
- Graphite Renderer Library
|
||||
- Graphite Editor Core Library
|
||||
- Graphite Document Core Library
|
||||
- Graphite Renderer Core Library
|
||||
|
||||
Each depends on its successor in the list. These are used internally but also intended for usage by third parties through Rust or linked by a project in C, C++, or another language.
|
||||
|
||||
|
@ -16,22 +16,22 @@ Each depends on its successor in the list. These are used internally but also in
|
|||
|
||||
The main modules of the project architecture are outlined below. Some parts describe future features and the directories don't exist yet. **Bold** modules are required for Graphite 0.1 which is purely an SVG editor.
|
||||
|
||||
- **Web frontend**: `/web-frontend/`
|
||||
- **Web frontend**: `/client/web/`
|
||||
Initial GUI for Graphite that will eventually be replaced by a native GUI implementation
|
||||
- **Vue web app**: `src/`
|
||||
Imports the WASM code and uses Vue props to customize and reuse most GUI components
|
||||
- **Rust WebAssembly wrapper**: `wasm-wrapper/`
|
||||
Wraps the Graphite Editor Library and provides an API for the web app to use unburdened by Rust's complex data types that are not supported by WASM
|
||||
- Native frontend: `/editor-client/`
|
||||
- **Rust WebAssembly wrapper**: `wasm/`
|
||||
Wraps the Editor Core Library and provides an API for the web app to use unburdened by Rust's complex data types that are not supported by WASM
|
||||
- Native frontend: `/client/native/`
|
||||
The future official desktop client. Blocked on Rust's GUI ecosystem improving or dedicating the time to build a custom system that can nicely support editor extensions. The whole GUI should use WGPU for rendering and compile to WASM to make those calls to the WebGPU API.
|
||||
- CLI: `/packages/cli/`
|
||||
A headless, command line GDD document editor (using the Graphite Document Library) and GRD render graph renderer (using the Graphite Renderer Library). Not the initial focus of development, but perhaps useful in testing for certain features throughout the development process. A future version of the CLI will probably redesign the command structure.
|
||||
- **Graphite Editor Library**: `/packages/graphite-editor/`
|
||||
Used by a frontend editor client to maintain GUI state and dispatch user events. The official Graphite editor is the primary user, but others software like game engines could embed their own customized editor implementations. Depends on the Graphite Document Library.
|
||||
- Graphite Document Library: `/packages/graphite-document/`
|
||||
A stateless library for updating Graphite design document (GDD) files. The official Graphite CLI and Graphite Editor Library are the primary users, but this library is intended to be useful to any application that wants to link the library for the purpose of updating GDD files by sending edit operations. Optionally depends on the Graphite Renderer Library if rendering is required.
|
||||
- Graphite Renderer Library: `/packages/graphite-renderer/`
|
||||
A stateless library (with the help of in-memory and/or on-disk caches for performance) for rendering Graphite's render graph (GRD) files. The official Graphite CLI and Graphite Document Library are the primary users, but this library is intended to be useful to any application that wants to link the library for the purpose of rendering Graphite's render graphs. For example, games can link the library and render procedural textures with customizable parametric input values.
|
||||
- CLI: `/client/cli/`
|
||||
A headless, command line GDD document editor (using the Document Core Library) and GRD render graph renderer (using the Renderer Core Library). Not the initial focus of development, but perhaps useful in testing for certain features throughout the development process. A future version of the CLI will probably redesign the command structure.
|
||||
- **Graphite Editor Core Library**: `/core/editor/`
|
||||
Used by a frontend editor client to maintain GUI state and dispatch user events. The official Graphite editor is the primary user, but others software like game engines could embed their own customized editor implementations. Depends on the Document Core Library.
|
||||
- Graphite Document Core Library: `/core/document/`
|
||||
A stateless library for updating Graphite design document (GDD) files. The official Graphite CLI and Editor Core Library are the primary users, but this library is intended to be useful to any application that wants to link the library for the purpose of updating GDD files by sending edit operations. Optionally depends on the Renderer Core Library if rendering is required.
|
||||
- Graphite Renderer Core Library: `/core/renderer/`
|
||||
A stateless library (with the help of in-memory and/or on-disk caches for performance) for rendering Graphite's render graph (GRD) files. The official Graphite CLI and Document Core Library are the primary users, but this library is intended to be useful to any application that wants to link the library for the purpose of rendering Graphite's render graphs. For example, games can link the library and render procedural textures with customizable parametric input values.
|
||||
|
||||
## Architecture diagram
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ Contributions welcome! If you think of something Graphite would be great for, su
|
|||
- Removing translucent watermarks that were applied in the same location to a batch of photos by finding their shared similarities and differences and using that as a subtraction diff
|
||||
|
||||
## Game development
|
||||
- Design a GUI for the game and use the Graphite Renderer Library to render the in-game GUI textures at runtime at the desired resolution without scaling problems, or even render it live as data updates its state
|
||||
- Design a GUI for the game and use the Graphite Renderer Core Library to render the in-game GUI textures at runtime at the desired resolution without scaling problems, or even render it live as data updates its state
|
||||
- Authoring procedural noise-based textures and PBR materials
|
||||
|
||||
## Data visualization
|
||||
|
|
|
@ -17,7 +17,7 @@ TODO: Add more to make a comprehensive list, finish writing definitions, separat
|
|||
- GDD file
|
||||
Graphite Design Document. A binary serialization of a *document* source file. The format includes a chain of *operations* that describe changes to the *layer graph* and the *properties* of *layers* throughout the history of the document since its creation. It also stores certain metadata and *embedded* file data. GDD files, along with *GRD files*, represent *assets* when shared. Because GDD files are editable (unlike *GRD files*), the *layers* of GDD *assets* may be expanded in the layer graph to reveal and modify their contents using a copy-on-write scheme stored to the *asset's* *layer*.
|
||||
- GRD file
|
||||
Graphite Render Data. A binary serialization of a *render graph* file. The format includes a single directed acyclic graph (DAG) compiled from the *layer graph* of a *document* as well as certain *properties* of set *data types* that are *imported* and *exported*. GRD files, along with *GDD files*, represent *assets* when shared. Because GRD files are read-only and can't be edited (unlike *GDD files*), the *layers* of GRD *assets* do not offer an ability to be expanded in the layer graph. GRD files are useful for sharing *assets* when their authors do not wish to provide the source *documents* used for their authoring. They are also the input format included in games that utilize the *Graphite Renderer Library* to render graphical content at runtime, as well as similar applications like headless renderers on web servers and image processing pipelines.
|
||||
Graphite Render Data. A binary serialization of a *render graph* file. The format includes a single directed acyclic graph (DAG) compiled from the *layer graph* of a *document* as well as certain *properties* of set *data types* that are *imported* and *exported*. GRD files, along with *GDD files*, represent *assets* when shared. Because GRD files are read-only and can't be edited (unlike *GDD files*), the *layers* of GRD *assets* do not offer an ability to be expanded in the layer graph. GRD files are useful for sharing *assets* when their authors do not wish to provide the source *documents* used for their authoring. They are also the input format included in games that utilize the *Graphite Renderer Core Library* to render graphical content at runtime, as well as similar applications like headless renderers on web servers and image processing pipelines.
|
||||
- Window
|
||||
- Main window
|
||||
- Popout window
|
||||
|
@ -53,6 +53,7 @@ TODO: Add more to make a comprehensive list, finish writing definitions, separat
|
|||
- Connection
|
||||
- Pixel bounds
|
||||
- Canvas
|
||||
- Graphite Editor Library
|
||||
- Graphite Document Library
|
||||
- Graphite Renderer Library
|
||||
- Core Libraries
|
||||
- Editor Core Library
|
||||
- Document Core Library
|
||||
- Renderer Core Library
|
|
@ -1,8 +0,0 @@
|
|||
[package]
|
||||
name = "graphite-editor"
|
||||
version = "0.1.0"
|
||||
authors = ["Keavon Chambers <graphite@keavon.com>"]
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
log = "0.4"
|