Beginnings of rust emulation

This commit is contained in:
2024-11-03 11:32:53 -05:00
parent 59e14b43e8
commit 40c4561748
9 changed files with 936 additions and 332 deletions
+58
View File
@@ -0,0 +1,58 @@
use std::sync::Arc;
use wgpu::{
Extent3d, ImageCopyTexture, ImageDataLayout, Origin3d, Queue, Texture, TextureDescriptor,
TextureFormat, TextureUsages,
};
#[derive(Debug)]
pub struct GameRenderer {
pub queue: Arc<Queue>,
pub eyes: [Arc<Texture>; 2],
}
impl GameRenderer {
pub fn render(&self, buffers: &[Vec<u8>; 2]) {
for (texture, buffer) in self.eyes.iter().zip(buffers) {
self.update_texture(texture, buffer);
}
}
fn update_texture(&self, texture: &Texture, buffer: &[u8]) {
let texture = ImageCopyTexture {
texture,
mip_level: 0,
origin: Origin3d::ZERO,
aspect: wgpu::TextureAspect::All,
};
let size = Extent3d {
width: 384,
height: 224,
depth_or_array_layers: 1,
};
let data_layout = ImageDataLayout {
offset: 0,
bytes_per_row: Some(384),
rows_per_image: Some(224),
};
self.queue.write_texture(texture, buffer, data_layout, size);
}
pub fn create_texture(device: &wgpu::Device, name: &str) -> Texture {
let desc = TextureDescriptor {
label: Some(name),
size: Extent3d {
width: 384,
height: 224,
depth_or_array_layers: 1,
},
mip_level_count: 1,
sample_count: 1,
dimension: wgpu::TextureDimension::D2,
format: TextureFormat::R8Unorm,
usage: TextureUsages::COPY_SRC
| TextureUsages::COPY_DST
| TextureUsages::TEXTURE_BINDING,
view_formats: &[TextureFormat::R8Unorm],
};
device.create_texture(&desc)
}
}