Use one texture with two channels for video

This commit is contained in:
2024-11-03 13:26:01 -05:00
parent 8fdff927eb
commit b025f72604
5 changed files with 25 additions and 42 deletions
+7 -19
View File
@@ -2,7 +2,7 @@ use imgui::*;
use imgui_wgpu::{Renderer, RendererConfig};
use imgui_winit_support::WinitPlatform;
use pollster::block_on;
use std::{num::NonZero, sync::Arc, time::Instant};
use std::{sync::Arc, time::Instant};
#[cfg(target_os = "windows")]
use winit::platform::windows::{CornerPreference, WindowAttributesExtWindows as _};
use winit::{
@@ -69,27 +69,15 @@ impl AppWindow {
}))
.unwrap();
let (device, queue) = block_on(adapter.request_device(
&wgpu::DeviceDescriptor {
required_features: wgpu::Features::TEXTURE_BINDING_ARRAY,
..wgpu::DeviceDescriptor::default()
},
None,
))
.unwrap();
let (device, queue) =
block_on(adapter.request_device(&wgpu::DeviceDescriptor::default(), None)).unwrap();
let queue = Arc::new(queue);
let eyes = [
Arc::new(GameRenderer::create_texture(&device, "left eye")),
Arc::new(GameRenderer::create_texture(&device, "right eye")),
];
let eyes = Arc::new(GameRenderer::create_texture(&device, "eye"));
client.send_command(EmulatorCommand::SetRenderer(GameRenderer {
queue: queue.clone(),
eyes: eyes.clone(),
}));
let eyes = [
eyes[0].create_view(&wgpu::TextureViewDescriptor::default()),
eyes[1].create_view(&wgpu::TextureViewDescriptor::default()),
];
let eyes = eyes.create_view(&wgpu::TextureViewDescriptor::default());
let sampler = device.create_sampler(&wgpu::SamplerDescriptor::default());
let texture_bind_group_layout =
device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
@@ -103,7 +91,7 @@ impl AppWindow {
view_dimension: wgpu::TextureViewDimension::D2,
multisampled: false,
},
count: NonZero::new(2),
count: None,
},
wgpu::BindGroupLayoutEntry {
binding: 1,
@@ -119,7 +107,7 @@ impl AppWindow {
entries: &[
wgpu::BindGroupEntry {
binding: 0,
resource: wgpu::BindingResource::TextureViewArray(&[&eyes[0], &eyes[1]]),
resource: wgpu::BindingResource::TextureView(&eyes),
},
wgpu::BindGroupEntry {
binding: 1,