Text rendering works, though it's still ugly
parent
6602e36e5b
commit
1c4edfbcd1
|
@ -561,7 +561,7 @@ impl GameGraphics {
|
|||
|
||||
let texture_sky = Texture::from_file ("sky.png");
|
||||
let texture_grass = Texture::from_file ("grass.png");
|
||||
let texture_font = Texture::from_file ("checkerboard.png");
|
||||
let texture_font = Texture::from_file ("font.png");
|
||||
|
||||
let (pitch_colors, grass_index) = {
|
||||
let silver = (255.0, 255.0, 255.0);
|
||||
|
@ -818,7 +818,7 @@ impl GameGraphics {
|
|||
];
|
||||
|
||||
let v: Vec <u32> = (0u32..1024).map (|i| {
|
||||
quad.iter ().map (move |j| 6 * i + j)
|
||||
quad.iter ().map (move |j| 4 * i + j)
|
||||
}).flatten ().collect ();
|
||||
gpu_buffers::IndexBuffer::from_slice_u32 (&v)
|
||||
}
|
||||
|
@ -1119,11 +1119,46 @@ impl GameGraphics {
|
|||
Mat4::from_scale ((2.0 / screen_size.0, 2.0 / screen_size.1, 1.0).into ());
|
||||
glezz::uniform_matrix_4fv (unis [&MVP], &mvp);
|
||||
|
||||
let stride_floats = 3 + 2;
|
||||
let stride_bytes = stride_floats * 4;
|
||||
|
||||
let mut vert_buffer = Vec::with_capacity (stride_floats * 1024);
|
||||
|
||||
// X and Y are in screen pixels, c is ASCII
|
||||
let mut add_char = |x: f32, y: f32, c: char| {
|
||||
let c = c as u32 - 1;
|
||||
|
||||
assert! (c >= 0);
|
||||
assert! (c < 128);
|
||||
|
||||
let u = (c % 32) as f32;
|
||||
let v = (c / 32) as f32;
|
||||
|
||||
for vert in &[
|
||||
(0.0, 0.0),
|
||||
(1.0, 0.0),
|
||||
(1.0, 1.0),
|
||||
(0.0, 1.0),
|
||||
] {
|
||||
vert_buffer.push (x + vert.0 * 8.0);
|
||||
vert_buffer.push (y + vert.1 * 18.0);
|
||||
|
||||
vert_buffer.push ((u + vert.0) * 8.0 / 256.0);
|
||||
vert_buffer.push ((v + 1.0 - vert.1) * 18.0 / 256.0);
|
||||
}
|
||||
};
|
||||
|
||||
let s = "Pumpkin";
|
||||
|
||||
for (i, c) in s.chars ().enumerate () {
|
||||
add_char (30.0 + i as f32 * 8.0, 30.0, c);
|
||||
}
|
||||
|
||||
let pos: Vec <f32> = vec! [
|
||||
0.0, 0.0, 0.0,
|
||||
256.0, 0.0, 0.0,
|
||||
256.0, 256.0, 0.0,
|
||||
0.0, 256.0, 0.0,
|
||||
0.0, 0.0,
|
||||
256.0, 0.0,
|
||||
256.0, 256.0,
|
||||
0.0, 256.0,
|
||||
];
|
||||
|
||||
use std::convert::TryInto;
|
||||
|
@ -1144,24 +1179,21 @@ impl GameGraphics {
|
|||
use renderable_model::attributes::*;
|
||||
use std::ffi::c_void;
|
||||
|
||||
if true {
|
||||
gl::BufferSubData (
|
||||
gl::ARRAY_BUFFER,
|
||||
0.try_into ().unwrap (),
|
||||
(4 * 4 * 3).try_into ().unwrap (),
|
||||
&pos [0] as *const f32 as *const c_void
|
||||
(s.len () * 4 * 4 * 4).try_into ().unwrap (),
|
||||
&vert_buffer [0] as *const f32 as *const c_void
|
||||
);
|
||||
|
||||
gl::BufferSubData (
|
||||
gl::ARRAY_BUFFER,
|
||||
(4 * 4 * 3).try_into ().unwrap (),
|
||||
(4 * 4 * 2).try_into ().unwrap (),
|
||||
&uv [0] as *const f32 as *const c_void
|
||||
);
|
||||
gl::VertexAttribPointer (attrs [POS].unwrap (), 2, gl::FLOAT, 0u8, 4 * 4, 0 as *const f32 as *const c_void);
|
||||
gl::VertexAttribPointer (attrs [UV].unwrap (), 2, gl::FLOAT, 0u8, 4 * 4, (4 * 2) as *const f32 as *const c_void);
|
||||
}
|
||||
|
||||
gl::VertexAttribPointer (attrs [POS].unwrap (), 3, gl::FLOAT, 0u8, 4 * 3, 0 as *const f32 as *const c_void);
|
||||
gl::VertexAttribPointer (attrs [UV].unwrap (), 2, gl::FLOAT, 0u8, 4 * 2, (4 * 4 * 3) as *const f32 as *const c_void);
|
||||
let num_indices = s.len () as u32 * 6;
|
||||
|
||||
gl::DrawRangeElements (gl::TRIANGLES, 0, 6, 6, gl::UNSIGNED_INT, 0 as *const u32 as *const c_void);
|
||||
gl::DrawRangeElements (gl::TRIANGLES, 0, num_indices, num_indices as i32, gl::UNSIGNED_INT, 0 as *const u32 as *const c_void);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue