-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.rs
72 lines (55 loc) · 2.06 KB
/
main.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
use sursface::{display::Display, std::{clear_screen, create_render_pipeline, create_shader, get_framebuffer}, wgpu::{self, Color, RenderPipeline}, winit::event::WindowEvent};
#[cfg(not(target_arch = "wasm32"))]
fn main() {
use sursface::winit::dpi::PhysicalSize;
sursface::start::create_window_desktop(PhysicalSize::new(1280, 720), &init, &render, &event);
}
#[cfg(target_arch = "wasm32")]
fn main() {}
#[cfg(target_arch = "wasm32")]
#[wasm_bindgen::prelude::wasm_bindgen]
pub fn start_browser(canvas: sursface::wgpu::web_sys::HtmlCanvasElement) {
use sursface::start;
start::create_window_browser(canvas, &init, &render, &event);
}
struct TriangleState {
render_pipeline: RenderPipeline,
}
fn init(display: &mut Display) -> TriangleState {
let device = &display.device;
let shader = create_shader(device, include_str!("assets/shader.wgsl"));
let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
label: None,
bind_group_layouts: &[],
push_constant_ranges: &[],
});
let render_pipeline = create_render_pipeline(display, pipeline_layout, shader, &[]);
TriangleState { render_pipeline }
}
fn render(display: &mut Display, state: &mut TriangleState) {
let clear_color = Color {
r: 100.0 / 255.0,
g: 149.0 / 255.0,
b: 237.0 / 255.0,
a: 255.0 / 255.0,
};
let device = &display.device;
let mut encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor {
label: Some("Encoder"),
});
let (output, view) = get_framebuffer(&display.surface);
{
let mut rpass = clear_screen(&view, &mut encoder, clear_color);
draw_triangle(&mut rpass, &state.render_pipeline);
}
display.queue.submit(std::iter::once(encoder.finish()));
output.present();
}
pub fn draw_triangle<'a>(
rpass: &mut wgpu::RenderPass<'a>,
pipeline: &'a RenderPipeline,
) {
rpass.set_pipeline(pipeline);
rpass.draw(0..3, 0..1);
}
fn event<'a>(_display: &mut Display, _state: &mut TriangleState, _event: WindowEvent) {}