🚧 Need to remember how pixel-perfect text works
parent
7e8902a040
commit
26fc58cdd0
BIN
font.png
BIN
font.png
Binary file not shown.
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
@ -474,6 +474,11 @@ struct RenderableArrow {
|
||||||
color: Vec3,
|
color: Vec3,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct TriangleStream {
|
||||||
|
pub verts: gpu_buffers::VertexBuffer,
|
||||||
|
pub indices: gpu_buffers::IndexBuffer,
|
||||||
|
}
|
||||||
|
|
||||||
struct GameGraphics {
|
struct GameGraphics {
|
||||||
passes: Vec <Pass>,
|
passes: Vec <Pass>,
|
||||||
|
|
||||||
|
@ -486,6 +491,8 @@ struct GameGraphics {
|
||||||
mesh_arrow: RenderableModel,
|
mesh_arrow: RenderableModel,
|
||||||
mesh_truck: RenderableModel,
|
mesh_truck: RenderableModel,
|
||||||
|
|
||||||
|
text_stream: TriangleStream,
|
||||||
|
|
||||||
texture_sky: Texture,
|
texture_sky: Texture,
|
||||||
texture_grass: Texture,
|
texture_grass: Texture,
|
||||||
texture_font: Texture,
|
texture_font: Texture,
|
||||||
|
@ -802,6 +809,14 @@ impl GameGraphics {
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
let text_stream = TriangleStream {
|
||||||
|
verts: gpu_buffers::VertexBuffer::streaming (4 * 5 * 6 * 1024),
|
||||||
|
indices: {
|
||||||
|
let v: Vec <u32> = (0u32..6 * 1024).collect ();
|
||||||
|
gpu_buffers::IndexBuffer::from_slice_u32 (&v)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
passes,
|
passes,
|
||||||
shaders,
|
shaders,
|
||||||
|
@ -813,6 +828,8 @@ impl GameGraphics {
|
||||||
mesh_arrow,
|
mesh_arrow,
|
||||||
mesh_truck,
|
mesh_truck,
|
||||||
|
|
||||||
|
text_stream,
|
||||||
|
|
||||||
texture_sky,
|
texture_sky,
|
||||||
texture_grass,
|
texture_grass,
|
||||||
texture_font,
|
texture_font,
|
||||||
|
@ -1090,14 +1107,14 @@ impl GameGraphics {
|
||||||
|
|
||||||
let font_size = (8.0, 18.0);
|
let font_size = (8.0, 18.0);
|
||||||
|
|
||||||
let mvp = Mat4::from_scale ((2.0 * 256.0 / screen_size.0, 2.0 * 72.0 / screen_size.1, 1.0).into ());
|
let mvp = Mat4::from_scale ((2.0 * 256.0 / screen_size.0, 2.0 * 256.0 / screen_size.1, 1.0).into ());
|
||||||
glezz::uniform_matrix_4fv (unis [&MVP], &mvp);
|
glezz::uniform_matrix_4fv (unis [&MVP], &mvp);
|
||||||
|
|
||||||
let pos: Vec <f32> = vec! [
|
let pos: Vec <f32> = vec! [
|
||||||
|
-1.0, 0.0, 0.0,
|
||||||
0.0, 0.0, 0.0,
|
0.0, 0.0, 0.0,
|
||||||
1.0, 0.0, 0.0,
|
|
||||||
1.0, 1.0, 0.0,
|
|
||||||
0.0, 1.0, 0.0,
|
0.0, 1.0, 0.0,
|
||||||
|
-1.0, 1.0, 0.0,
|
||||||
];
|
];
|
||||||
|
|
||||||
use std::convert::TryInto;
|
use std::convert::TryInto;
|
||||||
|
|
|
@ -18,7 +18,7 @@ const FLOAT_SIZE: usize = 4;
|
||||||
impl VertexBuffer {
|
impl VertexBuffer {
|
||||||
// len is the number of floats
|
// len is the number of floats
|
||||||
|
|
||||||
fn allocate_buffer (len: usize) -> u32 {
|
fn allocate_buffer (len: usize, usage: u32) -> u32 {
|
||||||
let mut id = 0;
|
let mut id = 0;
|
||||||
unsafe {
|
unsafe {
|
||||||
gl::GenBuffers (1, &mut id);
|
gl::GenBuffers (1, &mut id);
|
||||||
|
@ -29,7 +29,7 @@ impl VertexBuffer {
|
||||||
gl::ARRAY_BUFFER,
|
gl::ARRAY_BUFFER,
|
||||||
(len * FLOAT_SIZE).try_into ().unwrap (),
|
(len * FLOAT_SIZE).try_into ().unwrap (),
|
||||||
std::ptr::null (),
|
std::ptr::null (),
|
||||||
gl::STATIC_DRAW
|
usage
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
assert! (id != 0);
|
assert! (id != 0);
|
||||||
|
@ -41,7 +41,7 @@ impl VertexBuffer {
|
||||||
.map (|slice| slice.len ())
|
.map (|slice| slice.len ())
|
||||||
.sum ();
|
.sum ();
|
||||||
|
|
||||||
let id = Self::allocate_buffer (len);
|
let id = Self::allocate_buffer (len, gl::STATIC_DRAW);
|
||||||
|
|
||||||
let mut offset = 0;
|
let mut offset = 0;
|
||||||
for slice in slices.iter () {
|
for slice in slices.iter () {
|
||||||
|
@ -67,6 +67,17 @@ impl VertexBuffer {
|
||||||
Self::from_slices (&[slice])
|
Self::from_slices (&[slice])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// len is the number of floats
|
||||||
|
|
||||||
|
pub fn streaming (len: usize) -> Self {
|
||||||
|
let id = Self::allocate_buffer (len, gl::STREAM_DRAW);
|
||||||
|
|
||||||
|
Self {
|
||||||
|
id,
|
||||||
|
len,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn bind (&self) {
|
pub fn bind (&self) {
|
||||||
unsafe {
|
unsafe {
|
||||||
gl::BindBuffer (gl::ARRAY_BUFFER, self.id);
|
gl::BindBuffer (gl::ARRAY_BUFFER, self.id);
|
||||||
|
@ -87,15 +98,21 @@ impl Drop for VertexBuffer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A buffer of triangle indices in OpenGL server memory
|
||||||
pub struct IndexBuffer {
|
pub struct IndexBuffer {
|
||||||
|
/// The OpenGL ID of the buffer
|
||||||
id: u32,
|
id: u32,
|
||||||
// Not bytes. Number of indexes.
|
|
||||||
|
/// The count of 32-bit indices the buffer can store
|
||||||
len: usize,
|
len: usize,
|
||||||
|
|
||||||
|
/// The largest index stored in the buffer when it was created
|
||||||
max: u32,
|
max: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl IndexBuffer {
|
impl IndexBuffer {
|
||||||
pub fn from_slice (slice: &[u8]) -> Self {
|
/// Interprets a u8 slice as a u32 slice
|
||||||
|
pub fn from_slice_u8 (slice: &[u8]) -> Self {
|
||||||
let mut rdr = Cursor::new (slice);
|
let mut rdr = Cursor::new (slice);
|
||||||
|
|
||||||
let mut max = None;
|
let mut max = None;
|
||||||
|
@ -132,6 +149,28 @@ impl IndexBuffer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn from_slice_u32 (slice: &[u32]) -> Self {
|
||||||
|
let max = slice.iter ().max ();
|
||||||
|
|
||||||
|
let id = {
|
||||||
|
let mut id = 0;
|
||||||
|
unsafe {
|
||||||
|
gl::GenBuffers (1, &mut id);
|
||||||
|
gl::BindBuffer (gl::ELEMENT_ARRAY_BUFFER, id);
|
||||||
|
|
||||||
|
gl::BufferData (gl::ELEMENT_ARRAY_BUFFER, (slice.len () * 4).try_into ().unwrap (), &slice [0] as *const u32 as *const c_void, gl::STATIC_DRAW);
|
||||||
|
}
|
||||||
|
assert! (id != 0);
|
||||||
|
id
|
||||||
|
};
|
||||||
|
|
||||||
|
Self {
|
||||||
|
id,
|
||||||
|
len: slice.len (),
|
||||||
|
max: *max.unwrap (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn bind (&self) {
|
pub fn bind (&self) {
|
||||||
unsafe {
|
unsafe {
|
||||||
gl::BindBuffer (gl::ELEMENT_ARRAY_BUFFER, self.id);
|
gl::BindBuffer (gl::ELEMENT_ARRAY_BUFFER, self.id);
|
||||||
|
|
|
@ -71,7 +71,7 @@ impl RenderableModel {
|
||||||
let vertexes = VertexBuffer::from_slice (&vertex_vec);
|
let vertexes = VertexBuffer::from_slice (&vertex_vec);
|
||||||
|
|
||||||
let index_slice = model.get_all_indexes ();
|
let index_slice = model.get_all_indexes ();
|
||||||
let indexes = IndexBuffer::from_slice (index_slice);
|
let indexes = IndexBuffer::from_slice_u8 (index_slice);
|
||||||
|
|
||||||
let max_index: usize = indexes.max ().try_into ().unwrap ();
|
let max_index: usize = indexes.max ().try_into ().unwrap ();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue