rewrite it in rust #1

Merged
SonicSwordcane merged 20 commits from riir into main 2024-11-10 23:34:55 +00:00
4 changed files with 55 additions and 2 deletions
Showing only changes of commit a0e39796bf - Show all commits

15
Cargo.lock generated
View File

@ -220,6 +220,20 @@ name = "bytemuck"
version = "1.19.0" version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d"
dependencies = [
"bytemuck_derive",
]
[[package]]
name = "bytemuck_derive"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
]
[[package]] [[package]]
name = "bytes" name = "bytes"
@ -1489,6 +1503,7 @@ name = "shrooms-vb-native"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"bytemuck",
"cc", "cc",
"clap", "clap",
"imgui", "imgui",

View File

@ -5,6 +5,7 @@ edition = "2021"
[dependencies] [dependencies]
anyhow = "1" anyhow = "1"
bytemuck = { version = "1", features = ["derive"] }
clap = { version = "4", features = ["derive"] } clap = { version = "4", features = ["derive"] }
imgui = "0.12" imgui = "0.12"
imgui-wgpu = { git = "https://github.com/Yatekii/imgui-wgpu-rs", rev = "2edd348" } imgui-wgpu = { git = "https://github.com/Yatekii/imgui-wgpu-rs", rev = "2edd348" }

View File

@ -41,9 +41,15 @@ var u_texture: texture_2d<f32>;
@group(0) @binding(1) @group(0) @binding(1)
var u_sampler: sampler; var u_sampler: sampler;
struct Colors {
left: vec4<f32>,
right: vec4<f32>,
};
@group(0) @binding(2)
var<uniform> colors: Colors;
@fragment @fragment
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> { fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
return textureSample(u_texture, u_sampler, in.tex_coords); let brt = textureSample(u_texture, u_sampler, in.tex_coords);
// return vec4<f32>(0.3, 0.2, 0.1, 1.0); return colors.left * brt[0] + colors.right * brt[1];
} }

View File

@ -3,6 +3,7 @@ use imgui_wgpu::{Renderer, RendererConfig};
use imgui_winit_support::WinitPlatform; use imgui_winit_support::WinitPlatform;
use pollster::block_on; use pollster::block_on;
use std::{sync::Arc, time::Instant}; use std::{sync::Arc, time::Instant};
use wgpu::util::DeviceExt as _;
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
use winit::platform::windows::{CornerPreference, WindowAttributesExtWindows as _}; use winit::platform::windows::{CornerPreference, WindowAttributesExtWindows as _};
use winit::{ use winit::{
@ -79,6 +80,15 @@ impl AppWindow {
})); }));
let eyes = eyes.create_view(&wgpu::TextureViewDescriptor::default()); let eyes = eyes.create_view(&wgpu::TextureViewDescriptor::default());
let sampler = device.create_sampler(&wgpu::SamplerDescriptor::default()); let sampler = device.create_sampler(&wgpu::SamplerDescriptor::default());
let colors = Colors {
left: [1.0, 0.0, 0.0, 1.0],
right: [0.0, 0.7734375, 0.9375, 1.0],
};
let color_buf = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
label: Some("colors"),
contents: bytemuck::bytes_of(&colors),
usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST,
});
let texture_bind_group_layout = let texture_bind_group_layout =
device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
label: Some("texture bind group layout"), label: Some("texture bind group layout"),
@ -99,6 +109,16 @@ impl AppWindow {
ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering), ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering),
count: None, count: None,
}, },
wgpu::BindGroupLayoutEntry {
binding: 2,
visibility: wgpu::ShaderStages::FRAGMENT,
ty: wgpu::BindingType::Buffer {
ty: wgpu::BufferBindingType::Uniform,
has_dynamic_offset: false,
min_binding_size: None,
},
count: None,
},
], ],
}); });
let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
@ -113,6 +133,10 @@ impl AppWindow {
binding: 1, binding: 1,
resource: wgpu::BindingResource::Sampler(&sampler), resource: wgpu::BindingResource::Sampler(&sampler),
}, },
wgpu::BindGroupEntry {
binding: 2,
resource: color_buf.as_entire_binding(),
},
], ],
}); });
@ -438,3 +462,10 @@ impl ApplicationHandler for App {
); );
} }
} }
#[derive(Clone, Copy, bytemuck::Pod, bytemuck::Zeroable)]
#[repr(C)]
struct Colors {
left: [f32; 4],
right: [f32; 4],
}