diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 83 |
1 files changed, 18 insertions, 65 deletions
diff --git a/src/main.rs b/src/main.rs index 07d3857..917bd64 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,6 @@ pub mod constants; +pub mod tom; + use luminance::context::GraphicsContext; use luminance::pipeline::{PipelineState, Viewport}; use luminance::render_state::RenderState; @@ -6,50 +8,7 @@ use luminance::shader::program::Program; use luminance::tess::{Mode, TessBuilder, TessSliceIndex}; use luminance_derive::{Semantics, Vertex}; use luminance_glfw::{GlfwSurface, Surface, WindowDim, WindowEvent, WindowOpt}; - -#[derive(Vertex)] -#[vertex(sem = "VertexSemantics")] -pub struct Vertex { - position: VertexPosition, - #[vertex(normalized = "true")] - color: VertexRGB, -} - -#[derive(Copy, Clone, Debug, Semantics)] -pub enum VertexSemantics { - #[sem(name = "position", repr = "[f32; 2]", wrapper = "VertexPosition")] - Position, - #[sem(name = "color", repr = "[u8; 3]", wrapper = "VertexRGB")] - Color, -} - -fn gen_vertices() -> Vec<Vertex> { - let mut vertices: Vec<Vertex> = Vec::new(); - - vertices.push(Vertex { - position: VertexPosition::new([-0.5, -0.5]), - color: VertexRGB::new([255, 0, 0]), - }); - vertices.push(Vertex { - position: VertexPosition::new([0.5, -0.5]), - color: VertexRGB::new([0, 255, 0]), - }); - vertices.push(Vertex { - position: VertexPosition::new([0.0, 0.5]), - color: VertexRGB::new([0, 0, 255]), - }); - - vertices -} - -fn alter_vertices(vertices: &mut Vec<Vertex>) { - for vertex in vertices { - vertex.position[0] += 0.01; - if vertex.color[1] < 255 { - vertex.color[1] += 1; - } - } -} +use tom::{Tom, VertexSemantics}; fn gen_viewports() -> Vec<Viewport> { let mut viewports = Vec::new(); @@ -63,7 +22,7 @@ fn gen_viewports() -> Vec<Viewport> { viewports.push(Viewport::Specific { x: 0, - y: constants::WIDTH / 2, + y: constants::HEIGHT / 2, width: constants::WIDTH / 2, height: constants::HEIGHT / 2, }); @@ -88,7 +47,7 @@ fn gen_viewports() -> Vec<Viewport> { fn main() { let mut surface = GlfwSurface::new( WindowDim::Windowed(constants::WIDTH, constants::HEIGHT), - "art", + "revision2020", WindowOpt::default(), ) .unwrap(); @@ -98,7 +57,7 @@ fn main() { .unwrap() .ignore_warnings(); - let mut vertices = gen_vertices(); + let mut tom = Tom::new(); let viewports = gen_viewports(); let mut run = true; @@ -109,29 +68,23 @@ fn main() { } } let back_buffer = surface.back_buffer().unwrap(); - alter_vertices(&mut vertices); - let triangle = TessBuilder::new(&mut surface) - .add_vertices(&vertices) - .set_mode(Mode::Triangle) - .build() - .unwrap(); + tom.update(); let mut pipeline_state = PipelineState::default(); - for viewport in viewports.iter() { + surface + .pipeline_builder() + .pipeline(&back_buffer, &pipeline_state, |_, _| {}); + + for (i, viewport) in viewports.iter().enumerate() { pipeline_state = pipeline_state.set_viewport(*viewport); + pipeline_state = pipeline_state.enable_clear_color(false); - surface.pipeline_builder().pipeline( - &back_buffer, - &pipeline_state, - |_pipeline, mut shd_gate| { - shd_gate.shade(&program, |_, mut rdr_gate| { - rdr_gate.render(&RenderState::default(), |mut tess_gate| { - tess_gate.render(triangle.slice(..)); - }); - }); - }, - ); + if i == 0 { + tom.draw(); + } else if i == 1 { + // lowman.draw() + } } surface.swap_buffers(); |