add more colors

This commit is contained in:
Vinzenz Schroeter 2024-05-16 17:42:23 +02:00
parent e3d80204a6
commit 7cdbd41dea
2 changed files with 39 additions and 15 deletions

View file

@ -2,10 +2,10 @@ use std::sync::mpsc::Sender;
use std::sync::RwLock; use std::sync::RwLock;
use log::{info, warn}; use log::{info, warn};
use pixels::wgpu::TextureFormat;
use pixels::{Pixels, PixelsBuilder, SurfaceTexture}; use pixels::{Pixels, PixelsBuilder, SurfaceTexture};
use pixels::wgpu::TextureFormat;
use servicepoint2::{ use servicepoint2::{
ByteGrid, PixelGrid, PIXEL_HEIGHT, PIXEL_WIDTH, TILE_SIZE, ByteGrid, PIXEL_HEIGHT, PIXEL_WIDTH, PixelGrid, TILE_SIZE,
}; };
use winit::application::ApplicationHandler; use winit::application::ApplicationHandler;
use winit::dpi::{LogicalSize, Size}; use winit::dpi::{LogicalSize, Size};
@ -13,13 +13,15 @@ use winit::event::WindowEvent;
use winit::event_loop::ActiveEventLoop; use winit::event_loop::ActiveEventLoop;
use winit::window::{Window, WindowId}; use winit::window::{Window, WindowId};
use crate::Cli;
pub struct App<'t> { pub struct App<'t> {
display: &'t RwLock<PixelGrid>, display: &'t RwLock<PixelGrid>,
luma: &'t RwLock<ByteGrid>, luma: &'t RwLock<ByteGrid>,
window: Option<Window>, window: Option<Window>,
pixels: Option<Pixels>, pixels: Option<Pixels>,
stop_udp_tx: Sender<()>, stop_udp_tx: Sender<()>,
spacers: bool, cli: &'t Cli,
} }
const SPACER_HEIGHT: u16 = 4; const SPACER_HEIGHT: u16 = 4;
@ -35,7 +37,7 @@ impl<'t> App<'t> {
display: &'t RwLock<PixelGrid>, display: &'t RwLock<PixelGrid>,
luma: &'t RwLock<ByteGrid>, luma: &'t RwLock<ByteGrid>,
stop_udp_tx: Sender<()>, stop_udp_tx: Sender<()>,
spacers: bool, cli: &'t Cli,
) -> Self { ) -> Self {
App { App {
display, display,
@ -43,14 +45,14 @@ impl<'t> App<'t> {
stop_udp_tx, stop_udp_tx,
pixels: None, pixels: None,
window: None, window: None,
spacers, cli,
} }
} }
} }
impl ApplicationHandler<AppEvents> for App<'_> { impl ApplicationHandler<AppEvents> for App<'_> {
fn resumed(&mut self, event_loop: &ActiveEventLoop) { fn resumed(&mut self, event_loop: &ActiveEventLoop) {
let height = if self.spacers { let height = if self.cli.spacers {
let num_spacers = (PIXEL_HEIGHT / TILE_SIZE) - 1; let num_spacers = (PIXEL_HEIGHT / TILE_SIZE) - 1;
PIXEL_HEIGHT + num_spacers * SPACER_HEIGHT PIXEL_HEIGHT + num_spacers * SPACER_HEIGHT
} else { } else {
@ -122,7 +124,7 @@ impl ApplicationHandler<AppEvents> for App<'_> {
let luma = self.luma.read().unwrap(); let luma = self.luma.read().unwrap();
for y in 0..PIXEL_HEIGHT as usize { for y in 0..PIXEL_HEIGHT as usize {
if self.spacers && y != 0 && y % TILE_SIZE as usize == 0 { if self.cli.spacers && y != 0 && y % TILE_SIZE as usize == 0 {
// cannot just frame.skip(PIXEL_WIDTH as usize * SPACER_HEIGHT as usize) because of typing // cannot just frame.skip(PIXEL_WIDTH as usize * SPACER_HEIGHT as usize) because of typing
for _ in 0..PIXEL_WIDTH as usize * SPACER_HEIGHT as usize { for _ in 0..PIXEL_WIDTH as usize * SPACER_HEIGHT as usize {
frame.next().unwrap(); frame.next().unwrap();
@ -135,7 +137,12 @@ impl ApplicationHandler<AppEvents> for App<'_> {
luma.get(x / TILE_SIZE as usize, y / TILE_SIZE as usize); luma.get(x / TILE_SIZE as usize, y / TILE_SIZE as usize);
let color = if is_set { let color = if is_set {
[0u8, brightness, 0, 255] [
if self.cli.red { brightness } else { 0u8 },
if self.cli.green { brightness } else { 0u8 },
if self.cli.blue { brightness } else { 0u8 },
255,
]
} else { } else {
[0u8, 0, 0, 255] [0u8, 0, 0, 255]
}; };

View file

@ -23,19 +23,28 @@ mod gui;
#[derive(Parser, Debug)] #[derive(Parser, Debug)]
struct Cli { struct Cli {
#[arg(short, long, default_value = "0.0.0.0:2342")] #[arg(long, default_value = "0.0.0.0:2342")]
bind: String, bind: String,
#[arg(short, long, default_value_t = false)] #[arg(short, long, default_value_t = false)]
spacers: bool, spacers: bool,
#[arg(short, long, default_value_t = false)]
red: bool,
#[arg(short, long, default_value_t = false)]
green: bool,
#[arg(short, long, default_value_t = false)]
blue: bool,
} }
fn main() { fn main() {
env_logger::init(); env_logger::init();
let cli = Cli::parse(); let mut cli = Cli::parse();
info!("starting with args: {:?}", &cli); if !(cli.red || cli.blue || cli.green) {
cli.green = true;
}
let socket = UdpSocket::bind(cli.bind).expect("could not bind socket"); info!("starting with args: {:?}", &cli);
let socket = UdpSocket::bind(&cli.bind).expect("could not bind socket");
socket socket
.set_nonblocking(true) .set_nonblocking(true)
.expect("could not enter non blocking mode"); .expect("could not enter non blocking mode");
@ -46,16 +55,24 @@ fn main() {
PIXEL_WIDTH as usize, PIXEL_WIDTH as usize,
PIXEL_HEIGHT as usize, PIXEL_HEIGHT as usize,
)); ));
let display_ref = &display;
let mut luma = ByteGrid::new(TILE_WIDTH as usize, TILE_HEIGHT as usize); let mut luma = ByteGrid::new(TILE_WIDTH as usize, TILE_HEIGHT as usize);
luma.fill(u8::MAX); luma.fill(u8::MAX);
let luma = RwLock::new(luma); let luma = RwLock::new(luma);
let luma_ref = &luma;
run(&display, &luma, socket, font, &cli);
}
fn run(
display_ref: &RwLock<PixelGrid>,
luma_ref: &RwLock<ByteGrid>,
socket: UdpSocket,
font: BitmapFont,
cli: &Cli,
) {
let (stop_udp_tx, stop_udp_rx) = mpsc::channel(); let (stop_udp_tx, stop_udp_rx) = mpsc::channel();
let mut app = App::new(display_ref, luma_ref, stop_udp_tx, cli.spacers); let mut app = App::new(display_ref, luma_ref, stop_udp_tx, cli);
let event_loop = EventLoop::with_user_event() let event_loop = EventLoop::with_user_event()
.build() .build()