mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
[rs] Get skybox working
This commit is contained in:
committed by
Josh Groves
parent
49ef627bb0
commit
c7dc1f6140
@@ -151,10 +151,12 @@ web-sys = { version = "0.3.36", features = [
|
||||
"GpuSwapChain",
|
||||
"GpuSwapChainDescriptor",
|
||||
"GpuTexture",
|
||||
"GpuTextureAspect",
|
||||
"GpuTextureCopyView",
|
||||
"GpuTextureDescriptor",
|
||||
"GpuTextureDimension",
|
||||
"GpuTextureFormat",
|
||||
"GpuTextureViewDescriptor",
|
||||
"GpuTextureViewDimension",
|
||||
"GpuTextureView",
|
||||
"GpuVertexAttributeDescriptor",
|
||||
|
||||
@@ -32,7 +32,7 @@ fn buffer_from_uniforms(
|
||||
uniforms: &Uniforms,
|
||||
usage: wgpu::BufferUsage,
|
||||
) -> wgpu::Buffer {
|
||||
let uniform_buf = device.create_buffer_mapped(&wgpu::BufferDescriptor {
|
||||
let mut uniform_buf = device.create_buffer_mapped(&wgpu::BufferDescriptor {
|
||||
size: std::mem::size_of::<Uniforms>() as u64,
|
||||
usage,
|
||||
label: None,
|
||||
@@ -40,7 +40,7 @@ fn buffer_from_uniforms(
|
||||
// FIXME: Align and use `LayoutVerified`
|
||||
for (u, slot) in uniforms.iter().zip(
|
||||
uniform_buf
|
||||
.data
|
||||
.data()
|
||||
.chunks_exact_mut(std::mem::size_of::<Uniform>()),
|
||||
) {
|
||||
slot.copy_from_slice(bytemuck::cast_slice(AsRef::<[[f32; 4]; 4]>::as_ref(u)));
|
||||
@@ -82,16 +82,12 @@ impl framework::Example for Skybox {
|
||||
});
|
||||
|
||||
// Create the render pipeline
|
||||
let vs_bytes = framework::load_glsl(
|
||||
include_str!("skybox_vert.glsl"),
|
||||
framework::ShaderStage::Vertex,
|
||||
);
|
||||
let fs_bytes = framework::load_glsl(
|
||||
include_str!("skybox_frag.glsl"),
|
||||
framework::ShaderStage::Fragment,
|
||||
);
|
||||
let vs_module = device.create_shader_module(&vs_bytes);
|
||||
let fs_module = device.create_shader_module(&fs_bytes);
|
||||
let vs_bytes = include_bytes!("shader.vert.spv");
|
||||
let fs_bytes = include_bytes!("shader.frag.spv");
|
||||
let vs_module = device
|
||||
.create_shader_module(&wgpu::read_spirv(std::io::Cursor::new(&vs_bytes[..])).unwrap());
|
||||
let fs_module = device
|
||||
.create_shader_module(&wgpu::read_spirv(std::io::Cursor::new(&fs_bytes[..])).unwrap());
|
||||
|
||||
let aspect = sc_desc.width as f32 / sc_desc.height as f32;
|
||||
let uniforms = Self::generate_uniforms(aspect);
|
||||
@@ -148,7 +144,7 @@ impl framework::Example for Skybox {
|
||||
mag_filter: wgpu::FilterMode::Nearest,
|
||||
min_filter: wgpu::FilterMode::Linear,
|
||||
mipmap_filter: wgpu::FilterMode::Nearest,
|
||||
lod_min_clamp: -100.0,
|
||||
lod_min_clamp: 0.0,
|
||||
lod_max_clamp: 100.0,
|
||||
compare: wgpu::CompareFunction::Undefined,
|
||||
});
|
||||
|
||||
BIN
wgpu/examples/skybox/shader.frag.spv
Normal file
BIN
wgpu/examples/skybox/shader.frag.spv
Normal file
Binary file not shown.
BIN
wgpu/examples/skybox/shader.vert.spv
Normal file
BIN
wgpu/examples/skybox/shader.vert.spv
Normal file
Binary file not shown.
@@ -4,7 +4,7 @@ use crate::{
|
||||
backend::native_gpu_future, BindGroupDescriptor, BindGroupLayoutDescriptor, BindingResource,
|
||||
BindingType, BufferDescriptor, CommandEncoderDescriptor, ComputePipelineDescriptor,
|
||||
PipelineLayoutDescriptor, RenderPipelineDescriptor, SamplerDescriptor, TextureDescriptor,
|
||||
TextureViewDimension,
|
||||
TextureViewDescriptor, TextureViewDimension,
|
||||
};
|
||||
|
||||
use arrayvec::ArrayVec;
|
||||
@@ -710,8 +710,11 @@ pub(crate) fn render_pass_end_pass(render_pass: &RenderPassEncoderId) {
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn texture_create_default_view(texture: &TextureId) -> TextureViewId {
|
||||
wgn::wgpu_texture_create_view(*texture, None)
|
||||
pub(crate) fn texture_create_view(
|
||||
texture: &TextureId,
|
||||
desc: Option<&TextureViewDescriptor>,
|
||||
) -> TextureViewId {
|
||||
wgn::wgpu_texture_create_view(*texture, desc)
|
||||
}
|
||||
|
||||
pub(crate) fn swap_chain_present(swap_chain: &SwapChainId) {
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::{
|
||||
BindGroupDescriptor, BindGroupLayoutDescriptor, BindingResource, BindingType, BufferDescriptor,
|
||||
CommandEncoderDescriptor, ComputePipelineDescriptor, PipelineLayoutDescriptor,
|
||||
ProgrammableStageDescriptor, RenderPipelineDescriptor, SamplerDescriptor, TextureDescriptor,
|
||||
TextureViewDimension,
|
||||
TextureViewDescriptor, TextureViewDimension,
|
||||
};
|
||||
|
||||
use std::ops::Range;
|
||||
@@ -91,7 +91,6 @@ pub(crate) fn create_bind_group_layout(
|
||||
desc: &BindGroupLayoutDescriptor,
|
||||
) -> BindGroupLayoutId {
|
||||
use web_sys::GpuBindingType as bt;
|
||||
use web_sys::GpuTextureViewDimension as tvd;
|
||||
|
||||
let mapped_bindings = desc
|
||||
.bindings
|
||||
@@ -127,15 +126,10 @@ pub(crate) fn create_bind_group_layout(
|
||||
|
||||
let mapped_view_dimension = match bind.ty {
|
||||
BindingType::SampledTexture { dimension, .. }
|
||||
| BindingType::StorageTexture { dimension, .. } => match dimension {
|
||||
TextureViewDimension::D1 => tvd::N1d,
|
||||
TextureViewDimension::D2 => tvd::N2d,
|
||||
TextureViewDimension::D2Array => tvd::N2dArray,
|
||||
TextureViewDimension::Cube => tvd::Cube,
|
||||
TextureViewDimension::CubeArray => tvd::CubeArray,
|
||||
TextureViewDimension::D3 => tvd::N3d,
|
||||
},
|
||||
_ => tvd::N2d,
|
||||
| BindingType::StorageTexture { dimension, .. } => {
|
||||
map_texture_view_dimension(dimension)
|
||||
}
|
||||
_ => web_sys::GpuTextureViewDimension::N2d,
|
||||
};
|
||||
|
||||
let mut mapped_binding = web_sys::GpuBindGroupLayoutBinding::new(
|
||||
@@ -491,6 +485,20 @@ fn map_texture_dimension(texture_dimension: wgt::TextureDimension) -> web_sys::G
|
||||
}
|
||||
}
|
||||
|
||||
fn map_texture_view_dimension(
|
||||
texture_view_dimension: wgt::TextureViewDimension,
|
||||
) -> web_sys::GpuTextureViewDimension {
|
||||
use web_sys::GpuTextureViewDimension as tvd;
|
||||
match texture_view_dimension {
|
||||
TextureViewDimension::D1 => tvd::N1d,
|
||||
TextureViewDimension::D2 => tvd::N2d,
|
||||
TextureViewDimension::D2Array => tvd::N2dArray,
|
||||
TextureViewDimension::Cube => tvd::Cube,
|
||||
TextureViewDimension::CubeArray => tvd::CubeArray,
|
||||
TextureViewDimension::D3 => tvd::N3d,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_buffer_copy_view(view: crate::BufferCopyView<'_>) -> web_sys::GpuBufferCopyView {
|
||||
let mut mapped =
|
||||
web_sys::GpuBufferCopyView::new(&view.buffer.id, view.rows_per_image, view.bytes_per_row);
|
||||
@@ -506,6 +514,14 @@ fn map_texture_copy_view<'a>(view: crate::TextureCopyView<'a>) -> web_sys::GpuTe
|
||||
mapped
|
||||
}
|
||||
|
||||
fn map_texture_aspect(aspect: wgt::TextureAspect) -> web_sys::GpuTextureAspect {
|
||||
match aspect {
|
||||
wgt::TextureAspect::All => web_sys::GpuTextureAspect::All,
|
||||
wgt::TextureAspect::StencilOnly => web_sys::GpuTextureAspect::StencilOnly,
|
||||
wgt::TextureAspect::DepthOnly => web_sys::GpuTextureAspect::DepthOnly,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_filter_mode(mode: wgt::FilterMode) -> web_sys::GpuFilterMode {
|
||||
match mode {
|
||||
wgt::FilterMode::Nearest => web_sys::GpuFilterMode::Nearest,
|
||||
@@ -1007,8 +1023,24 @@ pub(crate) fn render_pass_end_pass(render_pass: &RenderPassEncoderId) {
|
||||
render_pass.end_pass();
|
||||
}
|
||||
|
||||
pub(crate) fn texture_create_default_view(texture: &TextureId) -> TextureViewId {
|
||||
texture.create_view()
|
||||
pub(crate) fn texture_create_view(
|
||||
texture: &TextureId,
|
||||
desc: Option<&TextureViewDescriptor>,
|
||||
) -> TextureViewId {
|
||||
match desc {
|
||||
Some(d) => {
|
||||
let mut mapped_desc = web_sys::GpuTextureViewDescriptor::new();
|
||||
mapped_desc.array_layer_count(d.array_layer_count);
|
||||
mapped_desc.aspect(map_texture_aspect(d.aspect));
|
||||
mapped_desc.base_array_layer(d.base_array_layer);
|
||||
mapped_desc.base_mip_level(d.base_mip_level);
|
||||
mapped_desc.dimension(map_texture_view_dimension(d.dimension));
|
||||
mapped_desc.format(map_texture_format(d.format));
|
||||
mapped_desc.mip_level_count(d.level_count);
|
||||
texture.create_view_with_descriptor(&mapped_desc)
|
||||
}
|
||||
None => texture.create_view(),
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn swap_chain_present(_swap_chain: &SwapChainId) {
|
||||
|
||||
@@ -828,20 +828,18 @@ impl Drop for Buffer {
|
||||
*/
|
||||
|
||||
impl Texture {
|
||||
/*
|
||||
/// Creates a view of this texture.
|
||||
pub fn create_view(&self, desc: &TextureViewDescriptor) -> TextureView {
|
||||
TextureView {
|
||||
id: wgn::wgpu_texture_create_view(self.id, Some(desc)),
|
||||
owned: true,
|
||||
}
|
||||
/// Creates a view of this texture.
|
||||
pub fn create_view(&self, desc: &TextureViewDescriptor) -> TextureView {
|
||||
TextureView {
|
||||
id: backend::texture_create_view(&self.id, Some(desc)),
|
||||
owned: true,
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
/// Creates a default view of this whole texture.
|
||||
pub fn create_default_view(&self) -> TextureView {
|
||||
TextureView {
|
||||
id: backend::texture_create_default_view(&self.id),
|
||||
id: backend::texture_create_view(&self.id, None),
|
||||
owned: true,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user