-
-
Save not-fl3/9ed781924402dfbe3de6161185051db8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use miniquad::*; | |
#[repr(C)] | |
struct Vec2 { | |
x: f32, | |
y: f32, | |
} | |
#[repr(C)] | |
struct Vertex { | |
pos: Vec2, | |
uv: Vec2, | |
} | |
struct Stage { | |
pipeline: Pipeline, | |
bindings: Bindings, | |
} | |
impl Stage { | |
pub fn new(ctx: &mut Context) -> Stage { | |
#[rustfmt::skip] | |
let vertices: [Vertex; 4] = [ | |
Vertex { pos : Vec2 { x: -0.5, y: -0.5 }, uv: Vec2 { x: 0., y: 0. } }, | |
Vertex { pos : Vec2 { x: 0.5, y: -0.5 }, uv: Vec2 { x: 1., y: 0. } }, | |
Vertex { pos : Vec2 { x: 0.5, y: 0.5 }, uv: Vec2 { x: 1., y: 1. } }, | |
Vertex { pos : Vec2 { x: -0.5, y: 0.5 }, uv: Vec2 { x: 0., y: 1. } }, | |
]; | |
let vertex_buffer = | |
unsafe { Buffer::new(ctx, BufferType::VertexBuffer, Usage::Immutable, &vertices) }; | |
let indices: [u16; 6] = [0, 1, 2, 0, 2, 3]; | |
let index_buffer = | |
unsafe { Buffer::new(ctx, BufferType::IndexBuffer, Usage::Immutable, &indices) }; | |
let pixels: [u8; 4 * 4 * 4] = [ | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, | |
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, | |
]; | |
let texture = Texture::from_rgba8(4, 4, &pixels); | |
let bindings = Bindings { | |
vertex_buffer: vertex_buffer, | |
index_buffer: index_buffer, | |
images: vec![texture], | |
}; | |
let shader = Shader::new(ctx, shader::VERTEX, shader::FRAGMENT, shader::META); | |
let pipeline = Pipeline::new( | |
ctx, | |
VertexLayout::new(&[ | |
(VertexAttribute::Custom("pos"), VertexFormat::Float2), | |
(VertexAttribute::Custom("uv"), VertexFormat::Float2), | |
]), | |
shader, | |
); | |
Stage { pipeline, bindings } | |
} | |
} | |
impl EventHandler for Stage { | |
fn update(&mut self, _ctx: &mut Context) {} | |
fn draw(&mut self, ctx: &mut Context) { | |
ctx.begin_render_pass(); | |
ctx.apply_pipeline(&self.pipeline); | |
ctx.apply_bindings(&self.bindings); | |
unsafe { | |
ctx.apply_uniforms(&shader::Uniforms { | |
offset: (date::now().sin() as f32, 0.), | |
}); | |
} | |
ctx.draw(6); | |
ctx.end_render_pass(); | |
ctx.commit_frame(); | |
} | |
} | |
fn main() { | |
miniquad::start(conf::Conf::default(), |ctx| Box::new(Stage::new(ctx))); | |
} | |
mod shader { | |
use miniquad::*; | |
pub const VERTEX: &str = r#"#version 300 es | |
in vec2 pos; | |
in vec2 uv; | |
uniform vec2 offset; | |
out lowp vec2 texcoord; | |
void main() { | |
gl_Position = vec4(pos + offset, 0, 1); | |
texcoord = uv; | |
}"#; | |
pub const FRAGMENT: &str = r#"#version 300 es | |
in lowp vec2 texcoord; | |
out lowp vec4 fragColor; | |
uniform sampler2D tex; | |
void main() { | |
fragColor = texture2D(tex, texcoord); | |
}"#; | |
pub const META: ShaderMeta = ShaderMeta { | |
images: &["tex"], | |
uniforms: UniformBlockLayout { | |
uniforms: &[("offset", UniformType::Float2)], | |
}, | |
}; | |
#[repr(C)] | |
pub struct Uniforms { | |
pub offset: (f32, f32), | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment