mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-19 02:48:12 +08:00
* Update GPU and quantization to new node system Squashed commit of the following: commit 3b69bdafed79f0bb1279609537a8eeead3f06830 Author: Dennis Kobert <dennis@kobert.dev> Date: Sun Mar 5 11:37:17 2023 +0100 Disable dev tools by default commit dbbbedd68e48d1162442574ad8877c9922d40e4a Merge: b1018eb5 a8f6e11e Author: Dennis Kobert <dennis@kobert.dev> Date: Sun Mar 5 10:45:00 2023 +0100 Merge branch 'vite' into tauri-restructure-lite commit b1018eb5ee56c2d23f9d5a4f034608ec684bd746 Merge: 3195833e0512cb24Author: Dennis Kobert <dennis@kobert.dev> Date: Fri Mar 3 17:06:21 2023 +0100 Merge branch 'master' into tauri-restructure-lite commit 3195833e4088a4ed7984955c72617b27b7e39bfc Author: Dennis Kobert <dennis@kobert.dev> Date: Fri Mar 3 17:06:02 2023 +0100 Bump number of samples commit 3e57e1e3280759cf4f75726635e31d2b8e9387f9 Author: Dennis Kobert <dennis@kobert.dev> Date: Fri Mar 3 16:55:52 2023 +0100 Move part of quantization code to gcore commit 10c15b0bc6ffb51e2bf2d94cd4eb0e24d761fb6f Merge: 2b3db45a8fe8896cAuthor: Dennis Kobert <dennis@kobert.dev> Date: Fri Mar 3 14:28:56 2023 +0100 Merge remote-tracking branch 'origin/master' into tauri-restructure-lite commit 2b3db45aee44a20660f0b1204666bb81e5a7e4b6 Author: Dennis Kobert <dennis@kobert.dev> Date: Fri Mar 3 14:17:11 2023 +0100 Fix types in node registry commit 9122f35c0ba9a86255709680d744a48d3c7dcac4 Merge: 26eefc432cf4ee0fAuthor: Dennis Kobert <dennis@kobert.dev> Date: Fri Mar 3 01:04:55 2023 +0100 Merge remote-tracking branch 'origin/master' into tauri-restructure-lite commit 26eefc437eaad873f8d38fdb1fae0a1e3ec189e4 Author: Dennis Kobert <dennis@kobert.dev> Date: Thu Mar 2 23:05:53 2023 +0100 Add Quantize node to document_node_types commit 3f7606a91329200b2c025010d4a0cffee840a11c Author: Dennis Kobert <dennis@kobert.dev> Date: Thu Mar 2 17:47:51 2023 +0100 Add quantization nodes to node registry commit 22d8e477ef79eef5b57b1dc9805e41bbf81cae43 Author: Dennis Kobert <dennis@kobert.dev> Date: Thu Mar 2 17:13:28 2023 +0100 Introduce scopes (#1053) * Implement let binding * Add lambda inputs * Fix tests * Fix proto network formatting * Generate a template Scoped network by default * Add comment to explain the lambda parameter * Move binding wrapping out of the template * Fix errors cause by image frames commit 9e0c29d92a164d4a4063e93480e1e289ef5243fe Author: Alexandru Ică <alexandru@seyhanlee.com> Date: Thu Mar 2 15:55:10 2023 +0200 Make use of ImageFrame in the node system more extensively (#1055) (#1062) Make the node system use ImageFrame more extensively (#1055) commit 5912ef9a1a807917eeb90c1f4835bd8a5de9c821 Author: Dennis Kobert <dennis@kobert.dev> Date: Wed Mar 1 16:15:21 2023 +0100 Split quantization into multiple nodes commit 285d7b76c176b3e2679ea24eecb38ef867a79f3b Author: Dennis Kobert <dennis@kobert.dev> Date: Mon Feb 27 12:35:57 2023 +0100 Fix gpu support commit e0b6327eebba8caf7545c4fedc6670abc4c3652e Author: Dennis Kobert <dennis@kobert.dev> Date: Thu Feb 16 22:08:53 2023 +0100 Don't watch frontend files when using tauri commit 58ae146f6da935cfd37afbd25e1c331b615252da Author: Dennis Kobert <dennis@kobert.dev> Date: Thu Feb 16 21:48:54 2023 +0100 Migrate vue code base to vite commit f996390cc312618a60f98ccb9cd515f1bae5006d Author: Dennis Kobert <dennis@kobert.dev> Date: Thu Feb 16 19:34:33 2023 +0100 Start migrating vue to use vite commit 29d752f47cfd1c74ee51fac6f3d75557a378471c Author: Dennis Kobert <dennis@kobert.dev> Date: Thu Feb 16 19:00:53 2023 +0100 Kill cargo watch process automatically commit 4d1c76b07acadbf609dbab7d57d9a7769b81d4b5 Author: Dennis Kobert <dennis@kobert.dev> Date: Thu Feb 16 17:37:27 2023 +0100 Start playing around with vite infrastructure commit 8494f5e9227aa433fd5ca75b268a6a96b2706b36 Author: Locria Cyber <74560659+locriacyber@users.noreply.github.com> Date: Thu Jan 19 18:40:46 2023 +0000 Fix import style and eslint rules commit 92490f7774a7351bb40091bcec78f79c28704768 Author: Locria Cyber <74560659+locriacyber@users.noreply.github.com> Date: Thu Jan 19 18:25:09 2023 +0000 Fix icons commit dc67821abad87f8ff780b12ae96668af2f7bb355 Author: Locria Cyber <74560659+locriacyber@users.noreply.github.com> Date: Thu Jan 19 18:20:48 2023 +0000 Add license generator with rollup commit 441e339d31b76dac4f91321d39a39900b5a79bc1 Author: Locria Cyber <74560659+locriacyber@users.noreply.github.com> Date: Thu Jan 19 18:14:22 2023 +0000 Use eslint --fix to fix TS-in-svelte type imports. Now it compiles. commit 2e847d339e7dcd51ed4c4677ed337c1e20636724 Author: Locria Cyber <74560659+locriacyber@users.noreply.github.com> Date: Thu Jan 19 17:31:49 2023 +0000 Remove webpack and plugins commit 3adab1b7f40ff17b91163e7ca47a403ef3c02fbc Author: Dennis Kobert <dennis@kobert.dev> Date: Thu Mar 2 16:10:19 2023 +0100 Fix errors cause by image frames commit 4e5f838995e213b4696225a473b9c56c0084e7a8 Author: Alexandru Ică <alexandru@seyhanlee.com> Date: Thu Mar 2 15:55:10 2023 +0200 Make use of ImageFrame in the node system more extensively (#1055) (#1062) Make the node system use ImageFrame more extensively (#1055) commit 1d4b0e29c693a53c068f1a30f0e857a9c1a59587 Author: Dennis Kobert <dennis@kobert.dev> Date: Wed Mar 1 15:13:51 2023 +0100 Update node graph guide readme with new syntax (#1061) commit 6735d8c61f5709e22d2b22abd037bab417e868d6 Author: Rob Nadal <Robnadal44@gmail.com> Date: Tue Feb 28 18:59:06 2023 -0500 Bezier-rs: Add function to smoothly join bezier curves (#1037) * Added bezier join * Stylistic changes per review commit cd1d7aa7fbcce39fbbf7762d131ee16ad9cb46dd Author: Dennis Kobert <dennis@kobert.dev> Date: Wed Feb 22 23:42:32 2023 +0100 Implement let binding Add lambda inputs Fix tests Fix proto network formatting Generate a template Scoped network by default Add comment to explain the lambda parameter Move binding wrapping out of the template * Update package-lock.json * Regenerate package-lock.json and fix lint errors * Readd git keep dir * Revert change to panic.ts * Fix clippy warnings * Apply code review * Clean up node_registry * Fix test / spriv -> spirv typos
126 lines
4.2 KiB
Rust
126 lines
4.2 KiB
Rust
#![cfg_attr(all(not(debug_assertions), target_os = "windows"), windows_subsystem = "windows")]
|
|
|
|
use graphite_editor::application::Editor;
|
|
use graphite_editor::messages::frontend::utility_types::FrontendImageData;
|
|
use graphite_editor::messages::prelude::*;
|
|
|
|
use axum::body::StreamBody;
|
|
use axum::extract::Path;
|
|
use axum::http;
|
|
use axum::response::IntoResponse;
|
|
use axum::routing::get;
|
|
use axum::Router;
|
|
use fern::colors::{Color, ColoredLevelConfig};
|
|
use http::{Response, StatusCode};
|
|
use std::collections::HashMap;
|
|
use std::sync::Arc;
|
|
use std::sync::Mutex;
|
|
|
|
static IMAGES: Mutex<Option<HashMap<String, FrontendImageData>>> = Mutex::new(None);
|
|
static EDITOR: Mutex<Option<Editor>> = Mutex::new(None);
|
|
|
|
async fn respond_to(id: Path<String>) -> impl IntoResponse {
|
|
let builder = Response::builder().header("Access-Control-Allow-Origin", "*").status(StatusCode::OK);
|
|
|
|
let guard = IMAGES.lock().unwrap();
|
|
let images = guard;
|
|
let image = images.as_ref().unwrap().get(&id.0).unwrap();
|
|
|
|
println!("image: {:#?}", image.path);
|
|
let result: Result<Vec<u8>, &str> = Ok((*image.image_data).clone());
|
|
let stream = futures::stream::once(async move { result });
|
|
builder.body(StreamBody::new(stream)).unwrap()
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
println!("Starting server...");
|
|
|
|
let colors = ColoredLevelConfig::new().debug(Color::Magenta).info(Color::Green).error(Color::Red);
|
|
|
|
fern::Dispatch::new()
|
|
.chain(std::io::stdout())
|
|
.level(log::LevelFilter::Trace)
|
|
.format(move |out, message, record| {
|
|
out.finish(format_args!(
|
|
"[{}]{} {}",
|
|
// This will color the log level only, not the whole line. Just a touch.
|
|
colors.color(record.level()),
|
|
chrono::Utc::now().format("[%Y-%m-%d %H:%M:%S]"),
|
|
message
|
|
))
|
|
})
|
|
.apply()
|
|
.unwrap();
|
|
|
|
*(IMAGES.lock().unwrap()) = Some(HashMap::new());
|
|
graphite_editor::application::set_uuid_seed(0);
|
|
*(EDITOR.lock().unwrap()) = Some(Editor::new());
|
|
let app = Router::new().route("/", get(|| async { "Hello, World!" })).route("/image/:id", get(respond_to));
|
|
|
|
// run it with hyper on localhost:3000
|
|
tauri::async_runtime::spawn(async {
|
|
axum::Server::bind(&"0.0.0.0:3001".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
|
});
|
|
|
|
tauri::Builder::default()
|
|
.invoke_handler(tauri::generate_handler![set_random_seed, handle_message])
|
|
.setup(|_app| {
|
|
//use tauri::Manager;
|
|
//_app.get_window("main").unwrap().open_devtools();
|
|
Ok(())
|
|
})
|
|
.run(tauri::generate_context!())
|
|
.expect("error while running tauri application");
|
|
}
|
|
#[tauri::command]
|
|
fn set_random_seed(seed: f64) {
|
|
let seed = seed as u64;
|
|
graphite_editor::application::set_uuid_seed(seed);
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn handle_message(message: String) -> String {
|
|
let Ok(message) = ron::from_str::<graphite_editor::messages::message::Message>(&message) else {
|
|
panic!("Error parsing message: {}", message)
|
|
};
|
|
let mut guard = EDITOR.lock().unwrap();
|
|
let editor = (*guard).as_mut().unwrap();
|
|
let responses = editor.handle_message(message);
|
|
|
|
// Sends a FrontendMessage to JavaScript
|
|
fn send_frontend_message_to_js(message: FrontendMessage) -> FrontendMessage {
|
|
// Special case for update image data to avoid serialization times.
|
|
if let FrontendMessage::UpdateImageData { document_id, image_data } = message {
|
|
let mut guard = IMAGES.lock().unwrap();
|
|
let images = (*guard).as_mut().unwrap();
|
|
let mut stub_data = Vec::with_capacity(image_data.len());
|
|
for image in image_data {
|
|
let path = image.path.clone();
|
|
let mime = image.mime.clone();
|
|
images.insert(format!("{:?}_{}", &image.path, document_id), image);
|
|
stub_data.push(FrontendImageData {
|
|
path,
|
|
mime,
|
|
image_data: Arc::new(Vec::new()),
|
|
});
|
|
}
|
|
FrontendMessage::UpdateImageData { document_id, image_data: stub_data }
|
|
} else {
|
|
message
|
|
}
|
|
}
|
|
|
|
for response in &responses {
|
|
let serialized = ron::to_string(&send_frontend_message_to_js(response.clone())).unwrap();
|
|
if let Err(error) = ron::from_str::<FrontendMessage>(&serialized) {
|
|
log::error!("Error deserializing message: {}", error);
|
|
}
|
|
}
|
|
|
|
// Process any `FrontendMessage` responses resulting from the backend processing the dispatched message
|
|
let result: Vec<_> = responses.into_iter().map(send_frontend_message_to_js).collect();
|
|
|
|
ron::to_string(&result).expect("Failed to serialize FrontendMessage")
|
|
}
|