|
@ -0,0 +1,42 @@ |
|
|
|
|
|
use std::borrow::Cow;
|
|
|
|
|
|
|
|
|
|
|
|
use glium::texture::{RawImage2d, Texture2dDataSource};
|
|
|
|
|
|
pub use glium::texture::PixelValue;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pub struct Texture2dData<T> where T: Clone {
|
|
|
|
|
|
pub data: Vec<T>,
|
|
|
|
|
|
pub width: u32,
|
|
|
|
|
|
pub height: u32,
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl<'a, P> Texture2dDataSource<'a> for &'a Texture2dData<P>
|
|
|
|
|
|
where P: Clone + PixelValue
|
|
|
|
|
|
{
|
|
|
|
|
|
type Data = P;
|
|
|
|
|
|
|
|
|
|
|
|
fn into_raw(self) -> RawImage2d<'a, P> {
|
|
|
|
|
|
RawImage2d {
|
|
|
|
|
|
data: Cow::Borrowed(&self.data),
|
|
|
|
|
|
width: self.width,
|
|
|
|
|
|
height: self.height,
|
|
|
|
|
|
format: <P as PixelValue>::get_format(),
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pub fn get_nearest_pow2(mut x: u32) -> u32 {
|
|
|
|
|
|
// A nice, fast bit hack.
|
|
|
|
|
|
// Taken from https://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
|
|
|
|
|
|
|
|
|
|
|
|
assert!(x > 0);
|
|
|
|
|
|
|
|
|
|
|
|
x -= 1;
|
|
|
|
|
|
x = x | (x >> 1);
|
|
|
|
|
|
x = x | (x >> 2);
|
|
|
|
|
|
x = x | (x >> 4);
|
|
|
|
|
|
x = x | (x >> 8);
|
|
|
|
|
|
x = x | (x >> 16);
|
|
|
|
|
|
|
|
|
|
|
|
x + 1
|
|
|
|
|
|
}
|