Actually do anaglyph

This commit is contained in:
Simon Gellis 2024-11-03 13:49:10 -05:00
parent b025f72604
commit a0e39796bf
4 changed files with 55 additions and 2 deletions

15
Cargo.lock generated
View File

@ -220,6 +220,20 @@ name = "bytemuck"
version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
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]]
name = "bytes"
@ -1489,6 +1503,7 @@ name = "shrooms-vb-native"
version = "0.1.0"
dependencies = [
"anyhow",
"bytemuck",
"cc",
"clap",
"imgui",

View File

@ -5,6 +5,7 @@ edition = "2021"
[dependencies]
anyhow = "1"
bytemuck = { version = "1", features = ["derive"] }
clap = { version = "4", features = ["derive"] }
imgui = "0.12"
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)
var u_sampler: sampler;
struct Colors {
left: vec4<f32>,
right: vec4<f32>,
};
@group(0) @binding(2)
var<uniform> colors: Colors;
@fragment
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
return textureSample(u_texture, u_sampler, in.tex_coords);
// return vec4<f32>(0.3, 0.2, 0.1, 1.0);
let brt = textureSample(u_texture, u_sampler, in.tex_coords);
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 pollster::block_on;
use std::{sync::Arc, time::Instant};
use wgpu::util::DeviceExt as _;
#[cfg(target_os = "windows")]
use winit::platform::windows::{CornerPreference, WindowAttributesExtWindows as _};
use winit::{
@ -79,6 +80,15 @@ impl AppWindow {
}));
let eyes = eyes.create_view(&wgpu::TextureViewDescriptor::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 =
device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
label: Some("texture bind group layout"),
@ -99,6 +109,16 @@ impl AppWindow {
ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering),
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 {
@ -113,6 +133,10 @@ impl AppWindow {
binding: 1,
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],
}