#[macro_use]
extern crate glium;
use glium::Surface;
mod support;
#[test]
fn basic() {
let display = support::build_display();
let (vb, ib) = support::build_rectangle_vb_ib(&display);
let program = glium::Program::from_source(&display,
"
#version 110
attribute vec2 position;
void main() {
gl_Position = vec4(position, 0.0, 1.0);
}
",
"
#version 430
out vec4 f_color;
layout(binding = 1) uniform atomic_uint counter;
void main() {
f_color = vec4(0.0, 0.0, 0.0, 1.0);
atomicCounterIncrement(counter);
}
",
None);
let program = match program {
Ok(p) => p,
Err(_) => return
};
let buffer = match glium::buffer::Buffer::new(&display, &10u32, glium::buffer::BufferType::AtomicCounterBuffer,
glium::buffer::BufferMode::Default) {
Err(_) => return,
Ok(b) => b
};
let uniforms = uniform!{
counter: &buffer,
};
let texture = support::build_renderable_texture(&display);
texture.as_surface().clear_color(0.0, 0.0, 0.0, 0.0);
texture.as_surface().draw(&vb, &ib, &program, &uniforms, &Default::default()).unwrap();
let data = buffer.read().unwrap();
assert_eq!(data, 1024 * 1024 + 10);
display.assert_no_error(None);
}