wip: clear_color command words.
This commit is contained in:
parent
9e1bb5db14
commit
7a812e8e63
14
native/renderling_window/Cargo.lock
generated
14
native/renderling_window/Cargo.lock
generated
|
@ -1038,6 +1038,18 @@ version = "0.2.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
|
||||
|
||||
[[package]]
|
||||
name = "hsl"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "575fb7f1167f3b88ed825e90eb14918ac460461fdeaa3965c6a50951dee1c970"
|
||||
|
||||
[[package]]
|
||||
name = "hsv"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a03664f940932e7453c5f1dd0ce278a7af2ff47d440fad00f679b4f5bf0da869"
|
||||
|
||||
[[package]]
|
||||
name = "image"
|
||||
version = "0.24.9"
|
||||
|
@ -1841,6 +1853,8 @@ version = "0.1.0"
|
|||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
"hsl",
|
||||
"hsv",
|
||||
"ipc-channel",
|
||||
"renderling",
|
||||
"rustler",
|
||||
|
|
|
@ -12,6 +12,8 @@ path = "src/lib.rs"
|
|||
[dependencies]
|
||||
anyhow = "1"
|
||||
clap = {version = "4", features = ["derive"]}
|
||||
hsl = "0.1.1"
|
||||
hsv = "0.1.1"
|
||||
ipc-channel = "0.18.0"
|
||||
renderling = "0.4.2"
|
||||
rustler = {version = "0.32.1", features = ["serde", "nif_version_2_16"]}
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
use std::collections::HashMap;
|
||||
|
||||
use renderling::{
|
||||
camera::Camera,
|
||||
math::{UVec2, Vec4},
|
||||
|
@ -6,10 +8,13 @@ use renderling::{
|
|||
Context,
|
||||
};
|
||||
|
||||
use crate::message::{Color, ScriptItem};
|
||||
|
||||
pub struct Renderer {
|
||||
pub stage: Stage,
|
||||
pub ctx: Context,
|
||||
camera: Hybrid<Camera>,
|
||||
scripts: HashMap<String, Vec<ScriptItem>>,
|
||||
}
|
||||
|
||||
impl Renderer {
|
||||
|
@ -18,12 +23,18 @@ impl Renderer {
|
|||
.new_stage()
|
||||
.with_lighting(false)
|
||||
.with_bloom(false)
|
||||
.with_background_color(Vec4::new(0.0, 0.0, 0.0, 1.0));
|
||||
.with_background_color(Vec4::new(1.0, 0.0, 0.0, 1.0));
|
||||
|
||||
let size = ctx.get_size();
|
||||
let camera = stage.new_value(Camera::default_ortho2d(size.x as f32, size.y as f32));
|
||||
let scripts = HashMap::default();
|
||||
|
||||
Self { stage, camera, ctx }
|
||||
Self {
|
||||
stage,
|
||||
camera,
|
||||
ctx,
|
||||
scripts,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_size(&mut self, width: u32, height: u32) {
|
||||
|
@ -39,4 +50,70 @@ impl Renderer {
|
|||
self.stage.render(&frame.view());
|
||||
frame.present();
|
||||
}
|
||||
|
||||
pub fn clear_color(&mut self, color: Color) {
|
||||
self.stage.set_background_color(color);
|
||||
}
|
||||
|
||||
pub fn reset_scene(&mut self) {
|
||||
// ?
|
||||
}
|
||||
|
||||
pub fn update_scene(&mut self, script_id: String, script: Vec<ScriptItem>) {
|
||||
self.scripts.insert(script_id, script);
|
||||
}
|
||||
|
||||
pub fn delete_scripts(&mut self, script_ids: Vec<String>) {
|
||||
for script_id in script_ids {
|
||||
self.scripts.remove(&script_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Into<Vec4> for Color {
|
||||
fn into(self) -> Vec4 {
|
||||
match self {
|
||||
Color::Gray(g) => {
|
||||
let c = g as f32 / 255 as f32;
|
||||
Vec4::new(c, c, c, 1.0)
|
||||
}
|
||||
Color::GrayAlpha(g, a) => {
|
||||
let c = g as f32 / 255 as f32;
|
||||
let a = a as f32 / 255 as f32;
|
||||
Vec4::new(c, c, c, a)
|
||||
}
|
||||
Color::Rgb(r, g, b) => {
|
||||
let r = r as f32 / 255 as f32;
|
||||
let g = g as f32 / 255 as f32;
|
||||
let b = b as f32 / 255 as f32;
|
||||
Vec4::new(r, g, b, 1.0)
|
||||
}
|
||||
Color::RgbA(r, g, b, a) => {
|
||||
let r = r as f32 / 255 as f32;
|
||||
let g = g as f32 / 255 as f32;
|
||||
let b = b as f32 / 255 as f32;
|
||||
let a = a as f32 / 255 as f32;
|
||||
Vec4::new(r, g, b, a)
|
||||
}
|
||||
Color::Hsv(h, s, v) => {
|
||||
let (r, g, b) = hsv::hsv_to_rgb(h as f64, s as f64, v as f64);
|
||||
let r = r as f32 / 255 as f32;
|
||||
let g = g as f32 / 255 as f32;
|
||||
let b = b as f32 / 255 as f32;
|
||||
Vec4::new(r, g, b, 1.0)
|
||||
}
|
||||
Color::Hsl(h, s, l) => {
|
||||
let (r, g, b) = hsl::HSL {
|
||||
h: h as f64,
|
||||
s: s as f64,
|
||||
l: l as f64,
|
||||
}
|
||||
.to_rgb();
|
||||
let r = r as f32 / 255 as f32;
|
||||
let g = g as f32 / 255 as f32;
|
||||
let b = b as f32 / 255 as f32;
|
||||
Vec4::new(r, g, b, 1.0)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,9 +62,9 @@ fn main() -> anyhow::Result<()> {
|
|||
let event = c2s_recv.recv().unwrap();
|
||||
|
||||
match event {
|
||||
Message::Init { .. } => unreachable!(),
|
||||
Message::Shutdown(message::ShutdownReason::Normal) => exit(0),
|
||||
Message::Shutdown(message::ShutdownReason::Terminate) => exit(1),
|
||||
Message::Init { .. } => unreachable!(),
|
||||
_ => event_loop_proxy.send_event(event).unwrap(),
|
||||
};
|
||||
});
|
||||
|
@ -141,7 +141,17 @@ impl Application {
|
|||
|
||||
impl ApplicationHandler<Message> for Application {
|
||||
fn user_event(&mut self, _event_loop: &ActiveEventLoop, event: Message) {
|
||||
println!("message event {:?}", event)
|
||||
if let Some(renderer) = &mut self.renderer {
|
||||
match event {
|
||||
Message::ClearColor(color) => renderer.clear_color(color),
|
||||
Message::ResetScene => renderer.reset_scene(),
|
||||
Message::UpdateScene(script_id, script) => renderer.update_scene(script_id, script),
|
||||
Message::DeleteScripts(script_ids) => renderer.delete_scripts(script_ids),
|
||||
_ => {
|
||||
println!("unhandled message event {:?}", event)
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
fn window_event(
|
||||
|
|
Loading…
Reference in a new issue