diff options
Diffstat (limited to 'client/src/scene_prepare.rs')
-rw-r--r-- | client/src/scene_prepare.rs | 72 |
1 files changed, 66 insertions, 6 deletions
diff --git a/client/src/scene_prepare.rs b/client/src/scene_prepare.rs index 4b298a1..e7d3403 100644 --- a/client/src/scene_prepare.rs +++ b/client/src/scene_prepare.rs @@ -18,7 +18,6 @@ use crate::{ armature::RArmature, download::Downloader, meshops::{generate_normals, generate_tangents, generate_texcoords}, - scene_render::SceneBgLayouts, shaders::SceneShaders, }; use anyhow::Result; @@ -42,14 +41,16 @@ use weareshared::{ resources::{Image, MeshPart, Prefab}, }; use wgpu::{ - AddressMode, BindGroup, BindGroupDescriptor, BindGroupEntry, BindGroupLayout, BindingResource, - BlendState, Buffer, BufferUsages, ColorTargetState, ColorWrites, CompareFunction, + AddressMode, BindGroup, BindGroupDescriptor, BindGroupEntry, BindGroupLayout, + BindGroupLayoutDescriptor, BindGroupLayoutEntry, BindingResource, BindingType, BlendState, + Buffer, BufferBindingType, BufferUsages, ColorTargetState, ColorWrites, CompareFunction, DepthBiasState, DepthStencilState, Device, Extent3d, Face, FilterMode, FragmentState, FrontFace, MultisampleState, PipelineCompilationOptions, PipelineLayoutDescriptor, PolygonMode, PrimitiveState, PrimitiveTopology, PushConstantRange, Queue, RenderPipeline, - RenderPipelineDescriptor, SamplerDescriptor, ShaderStages, StencilState, Texture, - TextureDescriptor, TextureDimension, TextureFormat, TextureUsages, TextureViewDescriptor, - VertexAttribute, VertexBufferLayout, VertexFormat, VertexState, VertexStepMode, + RenderPipelineDescriptor, SamplerBindingType, SamplerDescriptor, ShaderStages, StencilState, + Texture, TextureDescriptor, TextureDimension, TextureFormat, TextureSampleType, TextureUsages, + TextureViewDescriptor, TextureViewDimension, VertexAttribute, VertexBufferLayout, VertexFormat, + VertexState, VertexStepMode, util::{BufferInitDescriptor, DeviceExt, TextureDataOrder}, }; @@ -618,6 +619,65 @@ fn create_texture( (Arc::new(texture), Arc::new(bindgroup)) } +pub struct SceneBgLayouts { + pub texture: BindGroupLayout, + pub material: BindGroupLayout, + pub joints: BindGroupLayout, +} +impl SceneBgLayouts { + pub fn load(device: &Device) -> Self { + Self { + texture: device.create_bind_group_layout(&BindGroupLayoutDescriptor { + entries: &[ + BindGroupLayoutEntry { + binding: 0, + count: None, + visibility: ShaderStages::FRAGMENT, + ty: BindingType::Texture { + sample_type: TextureSampleType::Float { filterable: true }, + view_dimension: TextureViewDimension::D2, + multisampled: false, + }, + }, + BindGroupLayoutEntry { + binding: 1, + count: None, + visibility: ShaderStages::FRAGMENT, + ty: BindingType::Sampler(SamplerBindingType::Filtering), + }, + ], + label: None, + }), + material: device.create_bind_group_layout(&BindGroupLayoutDescriptor { + entries: &[BindGroupLayoutEntry { + binding: 0, + count: None, + visibility: ShaderStages::FRAGMENT, + ty: BindingType::Buffer { + ty: BufferBindingType::Uniform, + has_dynamic_offset: false, + min_binding_size: None, + }, + }], + label: None, + }), + joints: device.create_bind_group_layout(&BindGroupLayoutDescriptor { + entries: &[BindGroupLayoutEntry { + binding: 0, + count: None, + visibility: ShaderStages::VERTEX, + ty: BindingType::Buffer { + ty: BufferBindingType::Uniform, + has_dynamic_offset: false, + min_binding_size: None, + }, + }], + label: None, + }), + } + } +} + impl PipelineConfig { pub fn create( &self, |