diff --git a/textium/src/lib.rs b/textium/src/lib.rs index 83b9740..c99d35f 100644 --- a/textium/src/lib.rs +++ b/textium/src/lib.rs @@ -15,6 +15,7 @@ pub mod geometry; pub mod rasterizer; pub mod packer; pub mod cache; +pub mod renderer; use std::collections::HashMap; use std::hash::{Hash, Hasher}; diff --git a/textium/src/renderer/gl_renderer_140.frag b/textium/src/renderer/gl_renderer_140.frag new file mode 100644 index 0000000..fb00b9d --- /dev/null +++ b/textium/src/renderer/gl_renderer_140.frag @@ -0,0 +1,17 @@ +#version 140 + +in vec2 v_tex_coord; + +out vec4 frag_color; + +uniform sampler2D tex; + +void main() { + vec4 c = vec4(0, 0, 0, texture(tex, v_tex_coord)); + + if (c.a <= 0.01) { + discard; + } else { + frag_color = c; + } +} diff --git a/textium/src/renderer/gl_renderer_140.vert b/textium/src/renderer/gl_renderer_140.vert new file mode 100644 index 0000000..f97643d --- /dev/null +++ b/textium/src/renderer/gl_renderer_140.vert @@ -0,0 +1,12 @@ +#version 140 + +in vec2 position; +in vec2 tex_coord; + +out vec2 v_tex_coord; + +void main() { + gl_Position = vec4(position, 0.0, 1.0); + + v_tex_coord = tex_coord; +} diff --git a/textium/src/renderer/glium_renderer.rs b/textium/src/renderer/glium_renderer.rs new file mode 100644 index 0000000..6f65e7e --- /dev/null +++ b/textium/src/renderer/glium_renderer.rs @@ -0,0 +1,34 @@ +use glium::Program; +use glium::backend::Facade; + +#[derive(Copy, Clone, Debug)] +struct Vertex { + position: [u32; 2], + tex_coords: [u32; 2], +} + +implement_vertex!(Vertex, position, tex_coords); + +static SHADER_FRAG_140: &'static str = include_str!("gl_renderer_140.frag"); +static SHADER_VERT_140: &'static str = include_str!("gl_renderer_140.vert"); + +pub struct TextRenderer { + gl_program: Program, +} + +impl TextRenderer { + pub fn new(display: &F) -> TextRenderer where F: Facade { + let program = program!(display, + 140 => { + vertex: SHADER_VERT_140, + fragment: SHADER_FRAG_140, + }, + ).expect("textium: could not compile glium renderer shaders"); + + TextRenderer { + gl_program: program, + } + } + + // pub fn draw(text: RenderableText) +} diff --git a/textium/src/renderer/mod.rs b/textium/src/renderer/mod.rs new file mode 100644 index 0000000..84ae47f --- /dev/null +++ b/textium/src/renderer/mod.rs @@ -0,0 +1,3 @@ +mod glium_renderer; + +pub use self::glium_renderer::TextRenderer as GliumRenderer;