Beginnings of rust emulation
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user