use cgmath::conv::array4x4;
-use cgmath::{Matrix4, One};
+use cgmath::{Matrix4, Vector3};
use glium;
use glium::{Surface, texture};
use image;
use std;
+fn gamma<T>(x: T) -> f32
+where
+ f32: From<T>,
+ T: Copy,
+{
+ ((f32::from(x)) / 255.).powf(2.2)
+}
+
+fn srgb<T>(c: [T; 3]) -> [f32; 4]
+where
+ f32: From<T>,
+ T: Copy,
+{
+ [gamma(c[0]), gamma(c[1]), gamma(c[2]), 0.0]
+}
+
#[derive(Copy, Clone)]
struct Vertex {
position: [f32; 2],
implement_vertex!(Vertex, position, tex_coords);
pub struct Text<'a> {
- tex: texture::UnsignedTexture2d,
+ tex: texture::Texture2d,
vertex_buffer: glium::VertexBuffer<Vertex>,
index_buffer: glium::IndexBuffer<u16>,
program: glium::Program,
height: h,
format: glium::texture::ClientFormat::U8,
};
- let tex = glium::texture::UnsignedTexture2d::with_format(
+ let tex = glium::texture::Texture2d::with_format(
display,
image,
- glium::texture::UncompressedUintFormat::U8,
+ glium::texture::UncompressedFloatFormat::U8,
glium::texture::MipmapsOption::NoMipmap,
).unwrap();
// Characters are arranged in a 16x16 square.
int xpos = index % 16;
int ypos = index / 16;
- v_tex_coords = (tex_coords) / 16.0 + vec2(xpos / 16., ypos / 16.);
+ v_tex_coords = (tex_coords + vec2(xpos, ypos)) / 16.;
}
",
fragment: "
#version 140
- uniform usampler2D tex;
+ uniform sampler2D tex;
uniform vec4 bgcolor;
uniform vec4 fgcolor;
};
Text {
- model: Matrix4::one(),
+ model: Matrix4::from_translation(Vector3::unit_z() * (-1.0)),
tex: tex,
vertex_buffer: vertex_buffer,
index_buffer: index_buffer,
.magnify_filter(glium::uniforms::MagnifySamplerFilter::Nearest),
index: 'C' as i32,
// RGB values from http://unusedino.de/ec64/technical/misc/vic656x/colors/
- bgcolor: [ 53./255., 40./255., 121./255., 0.0/255. ] as [f32; 4],
- fgcolor: [ 120./255., 106./255., 255./255., 188.0/255. ] as [f32; 4],
+ bgcolor: srgb([ 64, 50, 133u8]), // 6 - blue
+ fgcolor: srgb([120, 106, 189u8]), // 14 - light blue
};
frame
.draw(