Rust `rustfmt` on the GPU crate

This commit is contained in:
Patrick Walton 2019-04-29 16:57:56 -07:00
parent 328e804378
commit f129f09bd8
2 changed files with 109 additions and 70 deletions

View File

@ -35,44 +35,52 @@ pub trait Device {
fn create_texture(&self, format: TextureFormat, size: Point2DI32) -> Self::Texture; fn create_texture(&self, format: TextureFormat, size: Point2DI32) -> Self::Texture;
fn create_texture_from_data(&self, size: Point2DI32, data: &[u8]) -> Self::Texture; fn create_texture_from_data(&self, size: Point2DI32, data: &[u8]) -> Self::Texture;
fn create_shader_from_source(&self, fn create_shader_from_source(
&self,
name: &str, name: &str,
source: &[u8], source: &[u8],
kind: ShaderKind, kind: ShaderKind,
template_input: HashBuilder) template_input: HashBuilder,
-> Self::Shader; ) -> Self::Shader;
fn create_vertex_array(&self) -> Self::VertexArray; fn create_vertex_array(&self) -> Self::VertexArray;
fn create_program_from_shaders(&self, fn create_program_from_shaders(
&self,
name: &str, name: &str,
vertex_shader: Self::Shader, vertex_shader: Self::Shader,
fragment_shader: Self::Shader) fragment_shader: Self::Shader,
-> Self::Program; ) -> Self::Program;
fn get_vertex_attr(&self, program: &Self::Program, name: &str) -> Self::VertexAttr; fn get_vertex_attr(&self, program: &Self::Program, name: &str) -> Self::VertexAttr;
fn get_uniform(&self, program: &Self::Program, name: &str) -> Self::Uniform; fn get_uniform(&self, program: &Self::Program, name: &str) -> Self::Uniform;
fn use_program(&self, program: &Self::Program); fn use_program(&self, program: &Self::Program);
fn configure_float_vertex_attr(&self, fn configure_float_vertex_attr(
&self,
attr: &Self::VertexAttr, attr: &Self::VertexAttr,
size: usize, size: usize,
attr_type: VertexAttrType, attr_type: VertexAttrType,
normalized: bool, normalized: bool,
stride: usize, stride: usize,
offset: usize, offset: usize,
divisor: u32); divisor: u32,
fn configure_int_vertex_attr(&self, );
fn configure_int_vertex_attr(
&self,
attr: &Self::VertexAttr, attr: &Self::VertexAttr,
size: usize, size: usize,
attr_type: VertexAttrType, attr_type: VertexAttrType,
stride: usize, stride: usize,
offset: usize, offset: usize,
divisor: u32); divisor: u32,
);
fn set_uniform(&self, uniform: &Self::Uniform, data: UniformData); fn set_uniform(&self, uniform: &Self::Uniform, data: UniformData);
fn create_framebuffer(&self, texture: Self::Texture) -> Self::Framebuffer; fn create_framebuffer(&self, texture: Self::Texture) -> Self::Framebuffer;
fn create_buffer(&self) -> Self::Buffer; fn create_buffer(&self) -> Self::Buffer;
fn allocate_buffer<T>(&self, fn allocate_buffer<T>(
&self,
buffer: &Self::Buffer, buffer: &Self::Buffer,
data: BufferData<T>, data: BufferData<T>,
target: BufferTarget, target: BufferTarget,
mode: BufferUploadMode); mode: BufferUploadMode,
);
fn framebuffer_texture<'f>(&self, framebuffer: &'f Self::Framebuffer) -> &'f Self::Texture; fn framebuffer_texture<'f>(&self, framebuffer: &'f Self::Framebuffer) -> &'f Self::Texture;
fn texture_size(&self, texture: &Self::Texture) -> Point2DI32; fn texture_size(&self, texture: &Self::Texture) -> Point2DI32;
fn upload_to_texture(&self, texture: &Self::Texture, size: Point2DI32, data: &[u8]); fn upload_to_texture(&self, texture: &Self::Texture, size: Point2DI32, data: &[u8]);
@ -80,11 +88,13 @@ pub trait Device {
fn clear(&self, params: &ClearParams); fn clear(&self, params: &ClearParams);
fn draw_arrays(&self, primitive: Primitive, index_count: u32, render_state: &RenderState); fn draw_arrays(&self, primitive: Primitive, index_count: u32, render_state: &RenderState);
fn draw_elements(&self, primitive: Primitive, index_count: u32, render_state: &RenderState); fn draw_elements(&self, primitive: Primitive, index_count: u32, render_state: &RenderState);
fn draw_arrays_instanced(&self, fn draw_arrays_instanced(
&self,
primitive: Primitive, primitive: Primitive,
index_count: u32, index_count: u32,
instance_count: u32, instance_count: u32,
render_state: &RenderState); render_state: &RenderState,
);
fn create_timer_query(&self) -> Self::TimerQuery; fn create_timer_query(&self) -> Self::TimerQuery;
fn begin_timer_query(&self, query: &Self::TimerQuery); fn begin_timer_query(&self, query: &Self::TimerQuery);
fn end_timer_query(&self, query: &Self::TimerQuery); fn end_timer_query(&self, query: &Self::TimerQuery);
@ -98,18 +108,28 @@ pub trait Device {
fn bind_framebuffer(&self, framebuffer: &Self::Framebuffer); fn bind_framebuffer(&self, framebuffer: &Self::Framebuffer);
fn bind_texture(&self, texture: &Self::Texture, unit: u32); fn bind_texture(&self, texture: &Self::Texture, unit: u32);
fn create_texture_from_png(&self, resources: &dyn ResourceLoader, name: &str) fn create_texture_from_png(&self, resources: &dyn ResourceLoader, name: &str) -> Self::Texture {
-> Self::Texture {
let data = resources.slurp(&format!("textures/{}.png", name)).unwrap(); let data = resources.slurp(&format!("textures/{}.png", name)).unwrap();
let image = image::load_from_memory_with_format(&data, ImageFormat::PNG).unwrap().to_luma(); let image = image::load_from_memory_with_format(&data, ImageFormat::PNG)
.unwrap()
.to_luma();
let size = Point2DI32::new(image.width() as i32, image.height() as i32); let size = Point2DI32::new(image.width() as i32, image.height() as i32);
self.create_texture_from_data(size, &image) self.create_texture_from_data(size, &image)
} }
fn create_shader(&self, resources: &dyn ResourceLoader, name: &str, kind: ShaderKind) fn create_shader(
-> Self::Shader { &self,
let suffix = match kind { ShaderKind::Vertex => 'v', ShaderKind::Fragment => 'f' }; resources: &dyn ResourceLoader,
let source = resources.slurp(&format!("shaders/{}.{}s.glsl", name, suffix)).unwrap(); name: &str,
kind: ShaderKind,
) -> Self::Shader {
let suffix = match kind {
ShaderKind::Vertex => 'v',
ShaderKind::Fragment => 'f',
};
let source = resources
.slurp(&format!("shaders/{}.{}s.glsl", name, suffix))
.unwrap();
let mut load_include_tile_alpha_vertex = let mut load_include_tile_alpha_vertex =
|_| load_shader_include(resources, "tile_alpha_vertex"); |_| load_shader_include(resources, "tile_alpha_vertex");
@ -122,33 +142,36 @@ pub trait Device {
let mut load_include_post_convolve = |_| load_shader_include(resources, "post_convolve"); let mut load_include_post_convolve = |_| load_shader_include(resources, "post_convolve");
let mut load_include_post_gamma_correct = let mut load_include_post_gamma_correct =
|_| load_shader_include(resources, "post_gamma_correct"); |_| load_shader_include(resources, "post_gamma_correct");
let template_input = let template_input = HashBuilder::new()
HashBuilder::new().insert_lambda("include_tile_alpha_vertex", .insert_lambda(
&mut load_include_tile_alpha_vertex) "include_tile_alpha_vertex",
.insert_lambda("include_tile_monochrome", &mut load_include_tile_alpha_vertex,
&mut load_include_tile_monochrome) )
.insert_lambda("include_tile_multicolor", .insert_lambda("include_tile_monochrome", &mut load_include_tile_monochrome)
&mut load_include_tile_multicolor) .insert_lambda("include_tile_multicolor", &mut load_include_tile_multicolor)
.insert_lambda("include_tile_solid_vertex", .insert_lambda(
&mut load_include_tile_solid_vertex) "include_tile_solid_vertex",
.insert_lambda("include_post_convolve", &mut load_include_tile_solid_vertex,
&mut load_include_post_convolve) )
.insert_lambda("include_post_gamma_correct", .insert_lambda("include_post_convolve", &mut load_include_post_convolve)
&mut load_include_post_gamma_correct); .insert_lambda(
"include_post_gamma_correct",
&mut load_include_post_gamma_correct,
);
self.create_shader_from_source(name, &source, kind, template_input) self.create_shader_from_source(name, &source, kind, template_input)
} }
fn create_program_from_shader_names(&self, fn create_program_from_shader_names(
&self,
resources: &dyn ResourceLoader, resources: &dyn ResourceLoader,
program_name: &str, program_name: &str,
vertex_shader_name: &str, vertex_shader_name: &str,
fragment_shader_name: &str) fragment_shader_name: &str,
-> Self::Program { ) -> Self::Program {
let vertex_shader = self.create_shader(resources, vertex_shader_name, ShaderKind::Vertex); let vertex_shader = self.create_shader(resources, vertex_shader_name, ShaderKind::Vertex);
let fragment_shader = self.create_shader(resources, let fragment_shader =
fragment_shader_name, self.create_shader(resources, fragment_shader_name, ShaderKind::Fragment);
ShaderKind::Fragment);
self.create_program_from_shaders(program_name, vertex_shader, fragment_shader) self.create_program_from_shaders(program_name, vertex_shader, fragment_shader)
} }
@ -268,7 +291,12 @@ pub enum StencilFunc {
impl Default for RenderState { impl Default for RenderState {
#[inline] #[inline]
fn default() -> RenderState { fn default() -> RenderState {
RenderState { blend: BlendState::default(), depth: None, stencil: None, color_mask: true } RenderState {
blend: BlendState::default(),
depth: None,
stencil: None,
color_mask: true,
}
} }
} }
@ -282,7 +310,12 @@ impl Default for BlendState {
impl Default for StencilState { impl Default for StencilState {
#[inline] #[inline]
fn default() -> StencilState { fn default() -> StencilState {
StencilState { func: StencilFunc::default(), reference: 0, mask: !0, write: false } StencilState {
func: StencilFunc::default(),
reference: 0,
mask: !0,
write: false,
}
} }
} }
@ -308,6 +341,8 @@ impl UniformData {
} }
fn load_shader_include(resources: &dyn ResourceLoader, include_name: &str) -> String { fn load_shader_include(resources: &dyn ResourceLoader, include_name: &str) -> String {
let resource = resources.slurp(&format!("shaders/{}.inc.glsl", include_name)).unwrap(); let resource = resources
.slurp(&format!("shaders/{}.inc.glsl", include_name))
.unwrap();
String::from_utf8_lossy(&resource).to_string() String::from_utf8_lossy(&resource).to_string()
} }

View File

@ -40,7 +40,9 @@ impl FilesystemResourceLoader {
shaders_directory.push("shaders"); shaders_directory.push("shaders");
textures_directory.push("textures"); textures_directory.push("textures");
if shaders_directory.is_dir() && textures_directory.is_dir() { if shaders_directory.is_dir() && textures_directory.is_dir() {
return FilesystemResourceLoader { directory: resources_directory }; return FilesystemResourceLoader {
directory: resources_directory,
};
} }
} }
@ -56,7 +58,9 @@ impl FilesystemResourceLoader {
impl ResourceLoader for FilesystemResourceLoader { impl ResourceLoader for FilesystemResourceLoader {
fn slurp(&self, virtual_path: &str) -> Result<Vec<u8>, IOError> { fn slurp(&self, virtual_path: &str) -> Result<Vec<u8>, IOError> {
let mut path = self.directory.clone(); let mut path = self.directory.clone();
virtual_path.split('/').for_each(|segment| path.push(segment)); virtual_path
.split('/')
.for_each(|segment| path.push(segment));
let mut data = vec![]; let mut data = vec![];
File::open(&path)?.read_to_end(&mut data)?; File::open(&path)?.read_to_end(&mut data)?;