started windowless

pull/1/head
Ben Hansen 5 years ago
parent e35d51ee7b
commit f6c607a6ea

@ -22,6 +22,10 @@ path = "src/beginner/tutorial3-pipeline/main.rs"
name = "tutorial4-buffer"
path = "src/beginner/tutorial4-buffer/main.rs"
[[bin]]
name = "windowless"
path = "src/intermediate/windowless/main.rs"
[dependencies]
image = "0.22"
raw-window-handle = "0.1"

@ -0,0 +1,87 @@
fn main() {
let instance = wgpu::Instance::new();
let adapter = instance.request_adapter(&Default::default());
let mut device = adapter.request_device(&Default::default());
let texture_size = 32u32;
let texture_desc = wgpu::TextureDescriptor {
size: wgpu::Extent3d {
width: texture_size,
height: texture_size,
depth: 1,
},
array_layer_count: 1,
mip_level_count: 0,
sample_count: 1,
dimension: wgpu::TextureDimension::D2,
format: wgpu::TextureFormat::Rgba8UnormSrgb,
usage: wgpu::TextureUsage::COPY_SRC
| wgpu::TextureUsage::OUTPUT_ATTACHMENT,
};
let texture = device.create_texture(&texture_desc);
let texture_view = texture.create_default_view();
let row_pitch = std::mem::size_of::<u32>() as u32;
let output_buffer_size = (row_pitch * texture_size * texture_size) as wgpu::BufferAddress;
let output_buffer_desc = wgpu::BufferDescriptor {
size: output_buffer_size,
usage: wgpu::BufferUsage::COPY_DST,
};
let output_buffer = device.create_buffer(&output_buffer_desc);
let mut encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor {
todo: 0,
});
{
let render_pass_desc = wgpu::RenderPassDescriptor {
color_attachments: &[
wgpu::RenderPassColorAttachmentDescriptor {
attachment: &texture_view,
resolve_target: None,
load_op: wgpu::LoadOp::Clear,
store_op: wgpu::StoreOp::Store,
clear_color: wgpu::Color::BLACK,
}
],
depth_stencil_attachment: None,
};
let mut render_pass = encoder.begin_render_pass(&render_pass_desc);
}
encoder.copy_texture_to_buffer(
wgpu::TextureCopyView {
texture: &texture,
mip_level: 0,
array_layer: 1,
origin: wgpu::Origin3d::ZERO,
},
wgpu::BufferCopyView {
buffer: &output_buffer,
offset: 0,
row_pitch,
image_height: texture_size,
},
texture_desc.size,
);
device.get_queue().submit(&[encoder.finish()]);
output_buffer.map_read_async(0, output_buffer_size, move |result: wgpu::BufferMapAsyncResult<&[u8]>| {
println!("Testing 1, 2, 3");
let mapping = result.unwrap();
let data = mapping.data;
use image::{ImageBuffer, Rgba};
let buffer = ImageBuffer::<Rgba<u8>, _>::from_raw(
texture_size,
texture_size,
data,
).unwrap();
buffer.save("image.png").unwrap();
});
device.poll(true);
}

@ -1 +1 @@
Subproject commit 1afac80a4bb0e26d87557f264e3331acfd811f8a
Subproject commit 1ab10bd51ebd6c97053daa5c6f0a60095d111964
Loading…
Cancel
Save