From e9f687014b8b6003922a651a3d92bdeb06bae0c9 Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Fri, 14 Jun 2019 00:31:32 -0400 Subject: [PATCH 1/3] Mipmapping example --- .gitignore | 3 + Cargo.toml | 2 +- examples/mipmap/blit.frag | 10 + examples/mipmap/blit.vert | 15 ++ examples/mipmap/draw.frag | 12 ++ examples/mipmap/draw.vert | 15 ++ examples/mipmap/main.rs | 419 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 475 insertions(+), 1 deletion(-) create mode 100644 examples/mipmap/blit.frag create mode 100644 examples/mipmap/blit.vert create mode 100644 examples/mipmap/draw.frag create mode 100644 examples/mipmap/draw.vert create mode 100644 examples/mipmap/main.rs diff --git a/.gitignore b/.gitignore index 088ba6ba7d..2de194b171 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ Cargo.lock # These are backup files generated by rustfmt **/*.rs.bk + +# Other +.DS_Store diff --git a/Cargo.toml b/Cargo.toml index c34ebfbf22..ef77f551f7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ gl = ["wgn/gfx-backend-gl"] [dependencies] #TODO: only depend on the published version -wgn = { package = "wgpu-native", features = ["local", "window-winit"], git = "https://github.com/gfx-rs/wgpu", rev = "8cc50253c428fb0a9aab3c74639a866465d65272" } +wgn = { package = "wgpu-native", version = "0.2.6", features = ["local", "window-winit"], git = "https://github.com/gfx-rs/wgpu", rev = "a667d50d01c3df03b8540c523278e111da7fc82a" } arrayvec = "0.4" [dev-dependencies] diff --git a/examples/mipmap/blit.frag b/examples/mipmap/blit.frag new file mode 100644 index 0000000000..cfe6499aa0 --- /dev/null +++ b/examples/mipmap/blit.frag @@ -0,0 +1,10 @@ +#version 450 + +layout(location = 0) in vec2 v_TexCoord; +layout(location = 0) out vec4 o_Target; +layout(set = 0, binding = 0) uniform texture2D t_Color; +layout(set = 0, binding = 1) uniform sampler s_Color; + +void main() { + o_Target = textureLod(sampler2D(t_Color, s_Color), v_TexCoord, 0.0); +} diff --git a/examples/mipmap/blit.vert b/examples/mipmap/blit.vert new file mode 100644 index 0000000000..2be374a119 --- /dev/null +++ b/examples/mipmap/blit.vert @@ -0,0 +1,15 @@ +#version 450 + +layout(location = 0) out vec2 v_TexCoord; + +void main() { + vec2 tc = vec2(0.0); + switch(gl_VertexIndex) { + case 0: tc = vec2(1.0, 0.0); break; + case 1: tc = vec2(1.0, 1.0); break; + case 2: tc = vec2(0.0, 0.0); break; + case 3: tc = vec2(0.0, 1.0); break; + } + v_TexCoord = tc; + gl_Position = vec4(tc * 2.0 - 1.0, 0.5, 1.0); +} diff --git a/examples/mipmap/draw.frag b/examples/mipmap/draw.frag new file mode 100644 index 0000000000..b88e3abf0c --- /dev/null +++ b/examples/mipmap/draw.frag @@ -0,0 +1,12 @@ +#version 450 + +layout(location = 0) in vec2 v_TexCoord; +layout(location = 0) out vec4 o_Target; +layout(set = 0, binding = 1) uniform texture2D t_Color; +layout(set = 0, binding = 2) uniform sampler s_Color; + +void main() { + vec4 tex = texture(sampler2D(t_Color, s_Color), v_TexCoord); + float mag = length(v_TexCoord-vec2(0.5)); + o_Target = mix(tex, vec4(0.0), mag*mag); +} diff --git a/examples/mipmap/draw.vert b/examples/mipmap/draw.vert new file mode 100644 index 0000000000..a3caa12e54 --- /dev/null +++ b/examples/mipmap/draw.vert @@ -0,0 +1,15 @@ +#version 450 + +layout(location = 0) in vec4 a_Pos; +layout(location = 0) out vec2 v_TexCoord; + +layout(set = 0, binding = 0) uniform Locals { + mat4 u_Transform; +}; + +void main() { + v_TexCoord = a_Pos.xy / 10.0; + gl_Position = u_Transform * a_Pos; + // convert from -1,1 Z to 0,1 + gl_Position.z = 0.5 * (gl_Position.z + gl_Position.w); +} diff --git a/examples/mipmap/main.rs b/examples/mipmap/main.rs new file mode 100644 index 0000000000..08ae411b6c --- /dev/null +++ b/examples/mipmap/main.rs @@ -0,0 +1,419 @@ +#[path = "../framework.rs"] +mod framework; + +const TEXTURE_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::R8Unorm; + +#[derive(Clone, Copy)] +struct Vertex { + #[allow(dead_code)] + pos: [f32; 4], +} + +fn create_vertices() -> Vec { + vec![ + Vertex { + pos: [100.0, 0.0, 0.0, 1.0], + }, + Vertex { + pos: [100.0, 1000.0, 0.0, 1.0], + }, + Vertex { + pos: [-100.0, 0.0, 0.0, 1.0], + }, + Vertex { + pos: [-100.0, 1000.0, 0.0, 1.0], + }, + ] +} + +fn create_texels(size: usize) -> Vec { + (0 .. size * size) + .map(|id| { + if (id + id / size) % 2 == 1 { + 0xFF + } else { + 0 + } + }) + .collect() +} + +struct Example { + vertex_buf: wgpu::Buffer, + bind_group: wgpu::BindGroup, + uniform_buf: wgpu::Buffer, + draw_pipeline: wgpu::RenderPipeline, +} + +impl Example { + fn generate_matrix(aspect_ratio: f32) -> cgmath::Matrix4 { + let mx_projection = cgmath::perspective(cgmath::Deg(45f32), aspect_ratio, 1.0, 1000.0); + let mx_view = cgmath::Matrix4::look_at( + cgmath::Point3::new(0f32, 0.0, 10.0), + cgmath::Point3::new(0f32, 100.0, 0.0), + -cgmath::Vector3::unit_z(), + ); + mx_projection * mx_view + } + + fn generate_mipmaps( + device: &wgpu::Device, texture: &wgpu::Texture, mip_count: u32 + ) -> wgpu::CommandBuffer { + let bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + bindings: &[ + wgpu::BindGroupLayoutBinding { + binding: 0, + visibility: wgpu::ShaderStage::FRAGMENT, + ty: wgpu::BindingType::SampledTexture, + }, + wgpu::BindGroupLayoutBinding { + binding: 1, + visibility: wgpu::ShaderStage::FRAGMENT, + ty: wgpu::BindingType::Sampler, + }, + ], + }); + let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { + bind_group_layouts: &[&bind_group_layout], + }); + + let vs_bytes = framework::load_glsl( + include_str!("blit.vert"), + framework::ShaderStage::Vertex, + ); + let fs_bytes = framework::load_glsl( + include_str!("blit.frag"), + framework::ShaderStage::Fragment, + ); + let vs_module = device.create_shader_module(&vs_bytes); + let fs_module = device.create_shader_module(&fs_bytes); + + let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { + layout: &pipeline_layout, + vertex_stage: wgpu::PipelineStageDescriptor { + module: &vs_module, + entry_point: "main", + }, + fragment_stage: Some(wgpu::PipelineStageDescriptor { + module: &fs_module, + entry_point: "main", + }), + rasterization_state: wgpu::RasterizationStateDescriptor { + front_face: wgpu::FrontFace::Cw, + cull_mode: wgpu::CullMode::None, + depth_bias: 0, + depth_bias_slope_scale: 0.0, + depth_bias_clamp: 0.0, + }, + primitive_topology: wgpu::PrimitiveTopology::TriangleStrip, + color_states: &[wgpu::ColorStateDescriptor { + format: TEXTURE_FORMAT, + color_blend: wgpu::BlendDescriptor::REPLACE, + alpha_blend: wgpu::BlendDescriptor::REPLACE, + write_mask: wgpu::ColorWrite::ALL, + }], + depth_stencil_state: None, + index_format: wgpu::IndexFormat::Uint16, + vertex_buffers: &[], + sample_count: 1, + }); + + let sampler = device.create_sampler(&wgpu::SamplerDescriptor { + address_mode_u: wgpu::AddressMode::ClampToEdge, + address_mode_v: wgpu::AddressMode::ClampToEdge, + address_mode_w: wgpu::AddressMode::ClampToEdge, + mag_filter: wgpu::FilterMode::Nearest, + min_filter: wgpu::FilterMode::Nearest, + mipmap_filter: wgpu::FilterMode::Nearest, + lod_min_clamp: -100.0, + lod_max_clamp: 100.0, + compare_function: wgpu::CompareFunction::Always, + }); + + let views = (0 .. mip_count) + .map(|mip| texture.create_view(&wgpu::TextureViewDescriptor { + format: TEXTURE_FORMAT, + dimension: wgpu::TextureViewDimension::D2, + aspect: wgpu::TextureAspectFlags::COLOR, + base_mip_level: mip, + level_count: 1, + base_array_layer: 0, + array_count: 1, + })) + .collect::>(); + + let mut encoder = device.create_command_encoder( + &wgpu::CommandEncoderDescriptor { todo: 0 } + ); + + for target_mip in 1 .. mip_count as usize { + let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { + layout: &bind_group_layout, + bindings: &[ + wgpu::Binding { + binding: 0, + resource: wgpu::BindingResource::TextureView(&views[target_mip - 1]), + }, + wgpu::Binding { + binding: 1, + resource: wgpu::BindingResource::Sampler(&sampler), + }, + ], + }); + + let mut rpass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + color_attachments: &[wgpu::RenderPassColorAttachmentDescriptor { + attachment: &views[target_mip], + resolve_target: None, + load_op: wgpu::LoadOp::Clear, + store_op: wgpu::StoreOp::Store, + clear_color: wgpu::Color::WHITE, + }], + depth_stencil_attachment: None, + }); + rpass.set_pipeline(&pipeline); + rpass.set_bind_group(0, &bind_group, &[]); + rpass.draw(0 .. 4, 0 .. 1); + } + + encoder.finish() + } +} + +impl framework::Example for Example { + fn init(sc_desc: &wgpu::SwapChainDescriptor, device: &mut wgpu::Device) -> Self { + use std::mem; + + let mut init_encoder = + device.create_command_encoder(&wgpu::CommandEncoderDescriptor { todo: 0 }); + + // Create the vertex and index buffers + let vertex_size = mem::size_of::(); + let vertex_data = create_vertices(); + let vertex_buf = device + .create_buffer_mapped(vertex_data.len(), wgpu::BufferUsage::VERTEX) + .fill_from_slice(&vertex_data); + + // Create pipeline layout + let bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + bindings: &[ + wgpu::BindGroupLayoutBinding { + binding: 0, + visibility: wgpu::ShaderStage::VERTEX, + ty: wgpu::BindingType::UniformBuffer, + }, + wgpu::BindGroupLayoutBinding { + binding: 1, + visibility: wgpu::ShaderStage::FRAGMENT, + ty: wgpu::BindingType::SampledTexture, + }, + wgpu::BindGroupLayoutBinding { + binding: 2, + visibility: wgpu::ShaderStage::FRAGMENT, + ty: wgpu::BindingType::Sampler, + }, + ], + }); + let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { + bind_group_layouts: &[&bind_group_layout], + }); + + // Create the texture + let mip_level_count = 10; + let size = 1 << mip_level_count; + let texels = create_texels(size as usize); + let texture_extent = wgpu::Extent3d { + width: size, + height: size, + depth: 1, + }; + let texture = device.create_texture(&wgpu::TextureDescriptor { + size: texture_extent, + array_layer_count: 1, + mip_level_count, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: TEXTURE_FORMAT, + usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::OUTPUT_ATTACHMENT | wgpu::TextureUsage::TRANSFER_DST, + }); + let texture_view = texture.create_default_view(); + let temp_buf = device + .create_buffer_mapped(texels.len(), wgpu::BufferUsage::TRANSFER_SRC) + .fill_from_slice(&texels); + init_encoder.copy_buffer_to_texture( + wgpu::BufferCopyView { + buffer: &temp_buf, + offset: 0, + row_pitch: 1 * size, + image_height: size, + }, + wgpu::TextureCopyView { + texture: &texture, + mip_level: 0, + array_layer: 0, + origin: wgpu::Origin3d { + x: 0.0, + y: 0.0, + z: 0.0, + }, + }, + texture_extent, + ); + + // Create other resources + let sampler = device.create_sampler(&wgpu::SamplerDescriptor { + address_mode_u: wgpu::AddressMode::Repeat, + address_mode_v: wgpu::AddressMode::Repeat, + address_mode_w: wgpu::AddressMode::Repeat, + mag_filter: wgpu::FilterMode::Linear, + min_filter: wgpu::FilterMode::Linear, + mipmap_filter: wgpu::FilterMode::Linear, + lod_min_clamp: -100.0, + lod_max_clamp: 100.0, + compare_function: wgpu::CompareFunction::Always, + }); + let mx_total = Self::generate_matrix(sc_desc.width as f32 / sc_desc.height as f32); + let mx_ref: &[f32; 16] = mx_total.as_ref(); + let uniform_buf = device + .create_buffer_mapped( + 16, + wgpu::BufferUsage::UNIFORM | wgpu::BufferUsage::TRANSFER_DST, + ) + .fill_from_slice(mx_ref); + + // Create bind group + let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { + layout: &bind_group_layout, + bindings: &[ + wgpu::Binding { + binding: 0, + resource: wgpu::BindingResource::Buffer { + buffer: &uniform_buf, + range: 0 .. 64, + }, + }, + wgpu::Binding { + binding: 1, + resource: wgpu::BindingResource::TextureView(&texture_view), + }, + wgpu::Binding { + binding: 2, + resource: wgpu::BindingResource::Sampler(&sampler), + }, + ], + }); + + // Create the render pipeline + let vs_bytes = framework::load_glsl( + include_str!("draw.vert"), + framework::ShaderStage::Vertex, + ); + let fs_bytes = framework::load_glsl( + include_str!("draw.frag"), + framework::ShaderStage::Fragment, + ); + let vs_module = device.create_shader_module(&vs_bytes); + let fs_module = device.create_shader_module(&fs_bytes); + + let draw_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { + layout: &pipeline_layout, + vertex_stage: wgpu::PipelineStageDescriptor { + module: &vs_module, + entry_point: "main", + }, + fragment_stage: Some(wgpu::PipelineStageDescriptor { + module: &fs_module, + entry_point: "main", + }), + rasterization_state: wgpu::RasterizationStateDescriptor { + front_face: wgpu::FrontFace::Cw, + cull_mode: wgpu::CullMode::Back, + depth_bias: 0, + depth_bias_slope_scale: 0.0, + depth_bias_clamp: 0.0, + }, + primitive_topology: wgpu::PrimitiveTopology::TriangleStrip, + color_states: &[wgpu::ColorStateDescriptor { + format: sc_desc.format, + color_blend: wgpu::BlendDescriptor::REPLACE, + alpha_blend: wgpu::BlendDescriptor::REPLACE, + write_mask: wgpu::ColorWrite::ALL, + }], + depth_stencil_state: None, + index_format: wgpu::IndexFormat::Uint16, + vertex_buffers: &[wgpu::VertexBufferDescriptor { + stride: vertex_size as wgpu::BufferAddress, + step_mode: wgpu::InputStepMode::Vertex, + attributes: &[ + wgpu::VertexAttributeDescriptor { + format: wgpu::VertexFormat::Float4, + offset: 0, + shader_location: 0, + }, + ], + }], + sample_count: 1, + }); + + // Done + let init_command_buf = init_encoder.finish(); + let mipmap_command_buf = Self::generate_mipmaps(&device, &texture, mip_level_count); + device.get_queue().submit(&[init_command_buf, mipmap_command_buf]); + Example { + vertex_buf, + bind_group, + uniform_buf, + draw_pipeline, + } + } + + fn update(&mut self, _event: wgpu::winit::WindowEvent) { + //empty + } + + fn resize(&mut self, sc_desc: &wgpu::SwapChainDescriptor, device: &mut wgpu::Device) { + let mx_total = Self::generate_matrix(sc_desc.width as f32 / sc_desc.height as f32); + let mx_ref: &[f32; 16] = mx_total.as_ref(); + + let temp_buf = device + .create_buffer_mapped(16, wgpu::BufferUsage::TRANSFER_SRC) + .fill_from_slice(mx_ref); + + let mut encoder = + device.create_command_encoder(&wgpu::CommandEncoderDescriptor { todo: 0 }); + encoder.copy_buffer_to_buffer(&temp_buf, 0, &self.uniform_buf, 0, 64); + device.get_queue().submit(&[encoder.finish()]); + } + + fn render(&mut self, frame: &wgpu::SwapChainOutput, device: &mut wgpu::Device) { + let mut encoder = + device.create_command_encoder(&wgpu::CommandEncoderDescriptor { todo: 0 }); + { + let mut rpass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + color_attachments: &[wgpu::RenderPassColorAttachmentDescriptor { + attachment: &frame.view, + resolve_target: None, + load_op: wgpu::LoadOp::Clear, + store_op: wgpu::StoreOp::Store, + clear_color: wgpu::Color { + r: 0.1, + g: 0.2, + b: 0.3, + a: 1.0, + }, + }], + depth_stencil_attachment: None, + }); + rpass.set_pipeline(&self.draw_pipeline); + rpass.set_bind_group(0, &self.bind_group, &[]); + rpass.set_vertex_buffers(&[(&self.vertex_buf, 0)]); + rpass.draw(0 .. 4, 0 .. 1); + } + + device.get_queue().submit(&[encoder.finish()]); + } +} + +fn main() { + framework::run::("cube"); +} From 3f29a6d957a5cca49871e17e29d4e537337cc060 Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Fri, 14 Jun 2019 10:06:04 -0400 Subject: [PATCH 2/3] Mipmap example shader and code fixes --- examples/mipmap/draw.frag | 4 +--- examples/mipmap/draw.vert | 2 +- examples/mipmap/main.rs | 35 +++++++++++++++++++++++------------ 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/examples/mipmap/draw.frag b/examples/mipmap/draw.frag index b88e3abf0c..c705c207c8 100644 --- a/examples/mipmap/draw.frag +++ b/examples/mipmap/draw.frag @@ -6,7 +6,5 @@ layout(set = 0, binding = 1) uniform texture2D t_Color; layout(set = 0, binding = 2) uniform sampler s_Color; void main() { - vec4 tex = texture(sampler2D(t_Color, s_Color), v_TexCoord); - float mag = length(v_TexCoord-vec2(0.5)); - o_Target = mix(tex, vec4(0.0), mag*mag); + o_Target = texture(sampler2D(t_Color, s_Color), v_TexCoord); } diff --git a/examples/mipmap/draw.vert b/examples/mipmap/draw.vert index a3caa12e54..5d920f6753 100644 --- a/examples/mipmap/draw.vert +++ b/examples/mipmap/draw.vert @@ -8,7 +8,7 @@ layout(set = 0, binding = 0) uniform Locals { }; void main() { - v_TexCoord = a_Pos.xy / 10.0; + v_TexCoord = a_Pos.xy / 20.0 + 0.5; gl_Position = u_Transform * a_Pos; // convert from -1,1 Z to 0,1 gl_Position.z = 0.5 * (gl_Position.z + gl_Position.w); diff --git a/examples/mipmap/main.rs b/examples/mipmap/main.rs index 08ae411b6c..1200948ebe 100644 --- a/examples/mipmap/main.rs +++ b/examples/mipmap/main.rs @@ -1,7 +1,7 @@ #[path = "../framework.rs"] mod framework; -const TEXTURE_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::R8Unorm; +const TEXTURE_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Rgba8Unorm; #[derive(Clone, Copy)] struct Vertex { @@ -26,14 +26,25 @@ fn create_vertices() -> Vec { ] } -fn create_texels(size: usize) -> Vec { +fn create_texels(size: usize, cx: f32, cy: f32) -> Vec { + use std::iter; + (0 .. size * size) - .map(|id| { - if (id + id / size) % 2 == 1 { - 0xFF - } else { - 0 + .flat_map(|id| { + // get high five for recognizing this ;) + let mut x = 4.0 * (id % size) as f32 / (size - 1) as f32 - 2.0; + let mut y = 2.0 * (id / size) as f32 / (size - 1) as f32 - 1.0; + let mut count = 0; + while count < 0xFF && x * x + y * y < 4.0 { + let old_x = x; + x = x * x - y * y + cx; + y = 2.0 * old_x * y + cy; + count += 1; } + iter::once(0xFF - (count * 2) as u8) + .chain(iter::once(0xFF - (count * 5) as u8)) + .chain(iter::once(0xFF - (count * 13) as u8)) + .chain(iter::once(1)) }) .collect() } @@ -50,7 +61,7 @@ impl Example { let mx_projection = cgmath::perspective(cgmath::Deg(45f32), aspect_ratio, 1.0, 1000.0); let mx_view = cgmath::Matrix4::look_at( cgmath::Point3::new(0f32, 0.0, 10.0), - cgmath::Point3::new(0f32, 100.0, 0.0), + cgmath::Point3::new(0f32, 50.0, 0.0), -cgmath::Vector3::unit_z(), ); mx_projection * mx_view @@ -123,7 +134,7 @@ impl Example { address_mode_v: wgpu::AddressMode::ClampToEdge, address_mode_w: wgpu::AddressMode::ClampToEdge, mag_filter: wgpu::FilterMode::Nearest, - min_filter: wgpu::FilterMode::Nearest, + min_filter: wgpu::FilterMode::Linear, mipmap_filter: wgpu::FilterMode::Nearest, lod_min_clamp: -100.0, lod_max_clamp: 100.0, @@ -219,9 +230,9 @@ impl framework::Example for Example { }); // Create the texture - let mip_level_count = 10; + let mip_level_count = 9; let size = 1 << mip_level_count; - let texels = create_texels(size as usize); + let texels = create_texels(size as usize, -0.8, 0.156); let texture_extent = wgpu::Extent3d { width: size, height: size, @@ -244,7 +255,7 @@ impl framework::Example for Example { wgpu::BufferCopyView { buffer: &temp_buf, offset: 0, - row_pitch: 1 * size, + row_pitch: 4 * size, image_height: size, }, wgpu::TextureCopyView { From 84434103c01dca2583b9c65360f12287b5467386 Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Fri, 14 Jun 2019 10:06:18 -0400 Subject: [PATCH 3/3] Mipmap screenshot --- README.md | 12 +++++++++--- etc/example-mipmap.png | Bin 0 -> 96591 bytes examples/mipmap/main.rs | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 etc/example-mipmap.png diff --git a/README.md b/README.md index 0933a877bc..0f618d3f27 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,8 @@ This is an idiomatic Rust wrapper over [wgpu-native](https://github.com/gfx-rs/w ## Gallery -![Cube](etc/example-cube.png) ![Shadow](etc/example-shadow.png) -![vange-rs](etc/vange-rs.png) ![Brawl](etc/brawl-attack.gif) -![GLX map](etc/glx-map.png) +![Cube](etc/example-cube.png) ![Shadow](etc/example-shadow.png) ![MipMap](etc/example-mipmap.png) +![vange-rs](etc/vange-rs.png) ![Brawl](etc/brawl-attack.gif) ![GLX map](etc/glx-map.png) ## Usage @@ -20,3 +19,10 @@ The library requires one of the following features enabled in order to run any o - "dx11" These examples assume that necessary dependencies for the graphics backend are already installed. For more information about installation and usage, refer to the [Getting Started](https://github.com/gfx-rs/gfx/blob/master/info/getting_started.md) gfx-rs guide. + +## Friends + +Shout out to the following projects that work best with wgpu-rs: + - [wgpu_glyph](https://github.com/hecrj/wgpu_glyph) - for your text-y rendering needs + - [coffee](https://github.com/hecrj/coffee) - a whole 2D engine + - [imgui-wgpu](https://github.com/unconed/imgui-wgpu-rs) - Dear ImGui interfacing diff --git a/etc/example-mipmap.png b/etc/example-mipmap.png new file mode 100644 index 0000000000000000000000000000000000000000..a5568746b2df57034547648d1b600fdc3afd8071 GIT binary patch literal 96591 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%0D7$&ynLpyP;~5QiXYNKT$& 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 e2("cube"); + framework::run::("mipmap"); }