Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #[macro_use]
- extern crate gfx;
- extern crate gfx_window_sdl;
- extern crate sdl2;
- use gfx::Device;
- pub type ColorFormat = gfx::format::Srgba8;
- pub type DepthFormat = gfx::format::DepthStencil;
- const BLACK: [f32; 4] = [0.0, 0.0, 0.0, 1.0];
- //#[macro_use]
- // use gfx;
- // use gfx_window_sdl;
- // use sdl2;
- // use gfx::Device;
- gfx_defines!{
- vertex Vertex {
- pos: [f32; 4] = "a_Pos",
- color: [f32; 3] = "a_Color",
- }
- constant Transform {
- transform: [[f32; 4];4] = "u_Transform",
- }
- pipeline pipe {
- vbuf: gfx::VertexBuffer<Vertex> = (),
- transform: gfx::ConstantBuffer<Transform> = "Transform",
- out: gfx::RenderTarget<ColorFormat> = "Target0",
- }
- }
- #[derive(Debug, Clone, Copy)]
- struct Square {
- pub pos: (f32, f32),
- pub size: f32,
- pub color: [f32; 3]
- }
- pub fn main() {
- use gfx::traits::FactoryExt;
- let sdl_context = sdl2::init().unwrap();
- let video = sdl_context.video().unwrap();
- let mut builder = video.window("Example", 800, 600);
- let (mut window, mut gl_context, mut device, mut factory, color_view, depth_view) =
- gfx_window_sdl::init::<ColorFormat, DepthFormat>(&video, builder).unwrap();
- println!("{:?}", device.get_info().shading_language);
- println!("{:?}", device.get_info().version);
- let vertex_shader = r#"
- #version 120
- attribute vec4 a_Pos;
- attribute vec3 a_Color;
- uniform Transform {
- mat4 u_Transform;
- };
- varying vec4 v_Color;
- void main() {
- v_Color = vec4(a_Color, 1.0);
- gl_Position = a_Pos; //* u_Transform;
- }
- "#;
- let fragment_shader = r#"
- #version 120
- varying vec4 v_Color;
- vec4 Target0;
- void main() {
- Target0 = v_Color;
- gl_FragColor = v_Color;
- }
- "#;
- let pso = factory.create_pipeline_simple(
- vertex_shader.as_bytes(),
- fragment_shader.as_bytes(),
- pipe::new()
- ).unwrap();
- let mut encoder: gfx::Encoder<_, _> = factory.create_command_buffer().into();
- const TRIANGLE: [Vertex; 3] = [
- Vertex { pos: [ -0.5, -0.5, 0.0, 1.0 ], color: [1.0, 0.0, 0.0] },
- Vertex { pos: [ 0.5, -0.5, 0.0, 1.0 ], color: [0.0, 1.0, 0.0] },
- Vertex { pos: [ 0.0, 0.5, 0.0, 1.0 ], color: [0.0, 0.0, 1.0] },
- ];
- //Identity Matrix
- const TRANSFORM: Transform = Transform {
- transform: [[1.0, 0.0, 0.0, 0.0],
- [0.0, 1.0, 0.0, 0.0],
- [0.0, 0.0, 1.0, 0.0],
- [0.0, 0.0, 0.0, 1.0]]
- };
- let (vertex_buffer, slice) = factory.create_vertex_buffer_with_slice(&TRIANGLE, ());
- let transform_buffer = factory.create_constant_buffer(1);
- let data = pipe::Data {
- vbuf: vertex_buffer,
- transform: transform_buffer,
- out: color_view.clone(),
- };
- 'main: loop {
- let mut event_pump = sdl_context.event_pump().unwrap();
- for event in event_pump.poll_iter() {
- match event {
- sdl2::event::Event::Quit { .. } => {
- break 'main;
- }
- _ => {}
- }
- }
- encoder.clear(&color_view, BLACK); //clear the framebuffer with a color(color needs to be an array of 4 f32s, RGBa)
- encoder.update_buffer(&data.transform, &[TRANSFORM], 0); //update buffers
- encoder.draw(&slice, &pso, &data); // draw commands with buffer data and attached pso
- encoder.flush(&mut device); // execute draw commands
- window.gl_swap_window();
- device.cleanup();
- }
- }
Add Comment
Please, Sign In to add comment