wgpu basics

This commit is contained in:
core 2023-11-07 09:35:37 -05:00
parent 1d5d1f627d
commit 6d003d2c98
Signed by: core
GPG Key ID: FDBF740DADDCEECF
2 changed files with 42 additions and 6 deletions

View File

@ -10,13 +10,16 @@ pub mod colors;
use std::io::Cursor; use std::io::Cursor;
use std::ops::{Deref, DerefMut}; use std::ops::{Deref, DerefMut};
use js_sys::Uint8Array; use js_sys::Uint8Array;
use log::info; use log::{debug, info};
use wasm_bindgen::prelude::*; use wasm_bindgen::prelude::*;
use web_sys::{CanvasRenderingContext2d, HtmlCanvasElement}; use web_sys::{CanvasRenderingContext2d, HtmlCanvasElement};
use winit::dpi::PhysicalSize; use winit::dpi::PhysicalSize;
use winit::event_loop::EventLoop; use winit::event::{ElementState, Event, WindowEvent};
use winit::event::WindowEvent::KeyboardInput;
use winit::event_loop::{EventLoop, EventLoopWindowTarget};
use winit::keyboard::KeyCode;
use winit::window::WindowBuilder; use winit::window::WindowBuilder;
use winit::platform::web::WindowExtWebSys; use winit::platform::web::{WindowExtWebSys, EventLoopExtWebSys};
use crate::command::{exec, should_newline}; use crate::command::{exec, should_newline};
use crate::mode::Mode; use crate::mode::Mode;
use crate::mode::Mode::Reflectivity; use crate::mode::Mode::Reflectivity;
@ -46,13 +49,33 @@ pub fn __nxrd_browser_init() -> AbiScopeState {
web_sys::window() web_sys::window()
.and_then(|win| win.document()) .and_then(|win| win.document())
.and_then(|doc| { .and_then(|doc| {
let dst = doc.get_element_by_id("wasm-example")?; let dst = doc.get_element_by_id("canvas-container")?;
// If you see an error here, your IDE is not compiling for webassembly
let canvas = web_sys::Element::from(window.canvas().unwrap()); let canvas = web_sys::Element::from(window.canvas().unwrap());
dst.append_child(&canvas).ok()?; dst.append_child(&canvas).ok()?;
Some(()) Some(())
}) })
.expect("Couldn't append canvas to document body."); .expect("Couldn't append canvas to document body.");
// If you see an error here, your IDE is not compiling for webassembly
event_loop.spawn(move |event: Event<_>, window: &EventLoopWindowTarget<_>| {
match event {
Event::WindowEvent { ref event, window_id} => {
match event {
KeyboardInput { event, .. } => {
debug!("{:?}", event.physical_key);
if event.physical_key == KeyCode::Escape {
window.exit();
}
},
WindowEvent::CloseRequested => { window.exit(); },
_ => {}
}
},
_ => {}
}
});
info!("initializing the scope"); info!("initializing the scope");
let document = web_sys::window().expect("window should exist").document().expect("document should exist"); let document = web_sys::window().expect("window should exist").document().expect("document should exist");

View File

@ -1,8 +1,19 @@
<html> <!DOCTYPE html>
<html lang="en">
<head> <head>
<title>NEXRAD Browser</title> <title>NEXRAD Browser</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style> <style>
#canvas { #canvas-container {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
canvas {
width: 100%; width: 100%;
height: 100%; height: 100%;
image-rendering: pixelated; image-rendering: pixelated;
@ -16,6 +27,8 @@
</style> </style>
</head> </head>
<body> <body>
<div id="canvas-container"></div>
<input type="file" id="file" style="display: none;" /> <input type="file" id="file" style="display: none;" />
<script src="bootstrap.js"></script> <script src="bootstrap.js"></script>