#![feature(core, libc)]
#[macro_use]
extern crate log;
extern crate libc;
extern crate "gfx_device_gl" as device;
pub use render::{DeviceHelper, ProgramError, Renderer};
pub use render::batch;
pub use render::mesh::{Attribute, Mesh, VertexFormat};
pub use render::mesh::{Slice, ToSlice};
pub use render::mesh::SliceKind;
pub use render::state::{BlendPreset, DrawState};
pub use render::shade;
pub use render::target::{Frame, Plane};
pub use device::Device;
pub use device::{attrib, state, tex};
pub use device::as_byte_slice;
pub use device::{BufferHandle, BufferInfo, RawBufferHandle, ShaderHandle};
pub use device::{ProgramHandle, SurfaceHandle, TextureHandle};
pub use device::BufferUsage;
pub use device::{VertexCount, InstanceCount};
pub use device::PrimitiveType;
pub use device::draw::CommandBuffer;
pub use device::shade::UniformValue;
pub use device::shade::{ShaderSource, ProgramInfo};
pub use device::target::{ColorValue, ClearData, Mask, Layer, Level, Rect, Target};
pub use device::target::{COLOR, DEPTH, STENCIL};
pub use device::gl_device::{GlDevice, GlCommandBuffer};
#[path = "../render/lib.rs"] pub mod render;
pub struct Graphics<D: device::Device> {
pub device: D,
pub renderer: Renderer<<D as device::Device>::CommandBuffer>,
context: batch::Context,
}
impl<D: device::Device> Graphics<D> {
pub fn new(mut device: D) -> Graphics<D> {
let rend = device.create_renderer();
Graphics {
device: device,
renderer: rend,
context: batch::Context::new(),
}
}
pub fn make_batch<T: shade::ShaderParam>(&mut self,
program: &ProgramHandle,
mesh: &Mesh,
slice: Slice,
state: &DrawState)
-> Result<batch::RefBatch<T>, batch::BatchError> {
self.context.make_batch(program, mesh, slice, state)
}
pub fn clear(&mut self, data: ClearData, mask: Mask, frame: &Frame) {
self.renderer.clear(data, mask, frame)
}
pub fn draw<'a, T: shade::ShaderParam>(&'a mut self,
batch: &'a batch::RefBatch<T>, data: &'a T, frame: &Frame) {
self.renderer.draw(&(batch, data, &self.context), frame)
}
pub fn draw_instanced<'a, T: shade::ShaderParam>(&'a mut self,
batch: &'a batch::RefBatch<T>,
data: &'a T,
count: u32,
vertex_offset: u32,
frame: &Frame) {
self.renderer.draw_instanced((batch, data, &self.context), count, vertex_offset, frame)
}
pub fn end_frame(&mut self) {
self.device.submit(self.renderer.as_buffer());
self.renderer.reset();
}
}