Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
6da55d1
Split renders too dense for Vello GPU and make infinite coordinates f…
Keavon Oct 14, 2026
5eb6c2d
Remove the Render Tile Resolution preference, sizing render regions b…
Keavon Oct 14, 2026
0a8fb97
Add curvature dials to gradients, rendered as a pencil of circles on …
Keavon Oct 14, 2026
fcb33eb
Add Blur, Drop Shadow, Inner Shadow, and Outer Glow effects to any gr…
Keavon Oct 14, 2026
f6e9ec0
Share CPU raster pixels under stable IDs so each image uploads once
Keavon Oct 14, 2026
372da35
Send SVG Preview images once, at a resolution suited to the zoom
Keavon Oct 14, 2026
ceed506
Place Mix's images by their transforms and speed up raster nodes
Keavon Oct 14, 2026
1b5d2bd
Retire the rust-gpu twins of the adjustment nodes, leaving rust-gpu d…
Keavon Oct 14, 2026
f08f0ce
Gather each adjustment's settings into plain data run by a CPU kernel
Keavon Oct 14, 2026
bc86e7d
Carry out a raster's effects on the CPU for nodes that read its pixels
Keavon Oct 14, 2026
306b8d1
Adjust any graphic, carrying out the adjustments on the GPU from bake…
Keavon Oct 14, 2026
c75afc8
Upload images with mipmaps so they average their pixels when zoomed out
Keavon Oct 25, 2026
fcb67e2
Stamp adjustments on images, colors, and gradients too, carrying them…
Keavon Oct 15, 2026
66cf71c
Carry out an image's leading adjustments on a copy of its texture
Keavon Oct 14, 2026
665c3dd
Fold leading adjustments into solid vector paints instead of an effec…
Keavon Oct 14, 2026
5ab5d1e
Move the noise and Mandelbrot kernels into a generator module renderi…
Keavon Oct 14, 2026
03c605a
Add a Generator graphic type that renderers draw at the resolution th…
Keavon Oct 14, 2026
5cba934
Add Inner Glow, Satin, and Outline effects to any graphic
Keavon Oct 15, 2026
4c344ac
Add a Bevel & Emboss effect lighting the inner, outer, emboss, and pi…
Keavon Oct 15, 2026
f5f33c9
Replace Color Overlay with a Paint Overlay effect that paints with an…
Keavon Oct 15, 2026
636b79b
Render the 'Noise Pattern' and 'Mandelbrot' generators on the GPU
Keavon Oct 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .github/workflows/provide-shaders.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
name: "Provide Shaders"

on:
push:
branches:
- master
workflow_dispatch: {}

jobs:
Expand Down
2 changes: 1 addition & 1 deletion .nix/pkgs/graphite-raster-nodes-shaders.nix
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
env = deps.rustGPU.env;

buildPhase = ''
cargo build -r -p raster-nodes-shaders
cargo build -r -p raster-nodes-shaders --features compile
'';

installPhase = ''
Expand Down
1 change: 0 additions & 1 deletion .nix/pkgs/graphite.nix
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ deps.crane.lib.buildPackage (
makeCacheWritable = true;

env = {
RASTER_NODES_SHADER_PATH = self.packages.${system}.graphite-raster-nodes-shaders;
GRAPHITE_GIT_COMMIT_HASH = self.rev or "unknown";
GRAPHITE_GIT_COMMIT_DATE = self.lastModified or "unknown";
CEF_PATH = "${self.packages.${system}.graphite-cef}/lib";
Expand Down
47 changes: 11 additions & 36 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,6 @@ debug = true
[patch.crates-io]
rfd = { git = "https://github.com/timon-schelling/rfd.git", branch = "graphite" } # TODO: Remove this once https://github.com/PolyMeilex/rfd/pull/317 is merged and released
# TODO: Remove these once the fork's fixes are upstreamed and released
vello_gpu = { git = "https://github.com/Keavon/vello.git", rev = "7306bb4f206d956a8989173237c406b1d7798b35" }
vello_common = { git = "https://github.com/Keavon/vello.git", rev = "7306bb4f206d956a8989173237c406b1d7798b35" }
vello_gpu_shaders = { git = "https://github.com/Keavon/vello.git", rev = "7306bb4f206d956a8989173237c406b1d7798b35" }
vello_gpu = { git = "https://github.com/Keavon/vello.git", rev = "d11b17aaf78e5c8c2439ad3074d8cffa618994c2" }
vello_common = { git = "https://github.com/Keavon/vello.git", rev = "d11b17aaf78e5c8c2439ad3074d8cffa618994c2" }
vello_gpu_shaders = { git = "https://github.com/Keavon/vello.git", rev = "d11b17aaf78e5c8c2439ad3074d8cffa618994c2" }
4 changes: 2 additions & 2 deletions desktop/src/render/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ pub(crate) struct RenderState {
ui_texture: Option<wgpu::Texture>,
bind_group: Option<wgpu::BindGroup>,
#[derivative(Debug = "ignore")]
overlays_scene: Option<VelloSceneBuilder>,
overlays_scene: Option<VelloSceneBuilder<'static>>,
#[derivative(Debug = "ignore")]
overlays_canvas: VelloCanvas,
surface_outdated: bool,
Expand Down Expand Up @@ -220,7 +220,7 @@ impl RenderState {
self.viewport_offset = offset;
}

pub(crate) fn set_overlays_scene(&mut self, scene: VelloSceneBuilder) {
pub(crate) fn set_overlays_scene(&mut self, scene: VelloSceneBuilder<'static>) {
self.surface_outdated = true;
self.overlays_scene = Some(scene);
}
Expand Down
2 changes: 1 addition & 1 deletion desktop/wrapper/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ publish.workspace = true
workspace = true

[features]
gpu = ["graphite-editor/gpu", "graphene-std/shader-nodes"]
gpu = ["graphite-editor/gpu"]

[dependencies]
# Local dependencies
Expand Down
2 changes: 1 addition & 1 deletion desktop/wrapper/src/messages.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ pub enum DesktopFrontendMessage {
WindowUpdateDirectInput {
enabled: bool,
},
UpdateOverlays(wgpu_executor::VelloSceneBuilder),
UpdateOverlays(wgpu_executor::VelloSceneBuilder<'static>),
PersistenceWritePreferences {
preferences: Preferences,
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ use crate::messages::layout::utility_types::widget_prelude::*;
use crate::messages::portfolio::document::utility_types::wires::GraphWireStyle;
use crate::messages::preferences::SelectionMode;
use crate::messages::prelude::*;
use graph_craft::application_io::EditorPreferences;

#[derive(ExtractField)]
pub struct PreferencesDialogMessageContext<'a> {
Expand Down Expand Up @@ -362,44 +361,10 @@ impl PreferencesDialogMessageHandler {
// =============
{
let is_desktop = cfg!(not(target_family = "wasm"));
let header = vec![TextLabel::new("Compatibility").italic(true).widget_instance()];

let render_tile_resolution_description = "
Maximum X or Y resolution per render tile. Larger tiles may improve performance but can cause flickering or missing content in complex artwork if set too high.\n\
\n\
*Default: 1280 px.*
"
.trim();
let render_tile_resolution_label = vec![
Separator::new(SeparatorStyle::Unrelated).widget_instance(),
Separator::new(SeparatorStyle::Unrelated).widget_instance(),
TextLabel::new("Render Tile Resolution")
.tooltip_label("Render Tile Resolution")
.tooltip_description(render_tile_resolution_description)
.widget_instance(),
];
let render_tile_resolution = vec![
Separator::new(SeparatorStyle::Unrelated).widget_instance(),
Separator::new(SeparatorStyle::Unrelated).widget_instance(),
NumberInput::new(Some(preferences.max_render_region_size as f64))
.tooltip_label("Render Tile Resolution")
.tooltip_description(render_tile_resolution_description)
.mode_range()
.int()
.min(256.)
.max(4096.)
.increment_step(256.)
.unit(" px")
.on_update(|number_input: &NumberInput| {
let size = number_input.value.unwrap_or(EditorPreferences::default().max_render_region_size as f64) as u32;
PreferencesMessage::MaxRenderRegionSize { size }.into()
})
.widget_instance(),
];

rows.extend_from_slice(&[header, render_tile_resolution_label, render_tile_resolution]);

if is_desktop {
let header = vec![TextLabel::new("Compatibility").italic(true).widget_instance()];
rows.push(header);

let ui_acceleration_description = "
Use the CPU to draw the Graphite user interface (areas outside of the canvas) instead of the GPU. This does not affect the rendering of artwork in the canvas, which remains hardware accelerated.\n\
\n\
Expand Down
3 changes: 3 additions & 0 deletions editor/src/messages/frontend/frontend_message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -263,8 +263,11 @@ pub enum FrontendMessage {
UpdateRenderStatus {
status: RenderStatus,
},
/// Gives the frontend the canvas images it lacks, and names every canvas the latest render uses so it can drop the rest.
UpdateImageData {
image_data: Vec<RasterizedImage>,
#[serde(rename = "canvasIdsInUse")]
canvas_ids_in_use: Vec<u64>,
},
UpdateDocumentLayerDetails {
data: LayerPanelEntry,
Expand Down
Loading
Loading