Custom size environment map

This commit is contained in:
numzero 2024-12-29 21:57:48 +03:00
parent 9c1ad95f37
commit a2646f8f29

View File

@ -1,4 +1,4 @@
use std::error::Error;
use std::{env, error::Error};
use glam::{mat3, vec2, vec3, Mat3, Vec3};
use image::buffer::ConvertBuffer;
@ -16,6 +16,8 @@ fn make_viewport(m: Mat3) -> [Vertex; 4] {
}
fn main() {
let args: Vec<_> = env::args().collect();
let extent = args.get(1).and_then(|s| s.parse().ok()).unwrap_or(EXTENT);
let (device, queue) = pollster::block_on(init_gpu()).unwrap();
let format = wgpu::TextureFormat::Rgba8UnormSrgb;
@ -38,8 +40,8 @@ fn main() {
let output = device.create_texture(&wgpu::TextureDescriptor {
label: None,
size: wgpu::Extent3d {
width: EXTENT,
height: EXTENT,
width: extent,
height: extent,
depth_or_array_layers: 6,
},
mip_level_count: 1,
@ -52,7 +54,7 @@ fn main() {
let buffers = faces.map(|_| {
device.create_buffer(&wgpu::BufferDescriptor {
label: None,
size: (4 * EXTENT * EXTENT) as u64,
size: (4 * extent * extent) as u64,
usage: wgpu::BufferUsages::COPY_DST | wgpu::BufferUsages::MAP_READ,
mapped_at_creation: false,
})
@ -97,13 +99,13 @@ fn main() {
buffer: &buffer,
layout: wgpu::ImageDataLayout {
offset: 0,
bytes_per_row: Some(4 * EXTENT),
rows_per_image: Some(EXTENT),
bytes_per_row: Some(4 * extent),
rows_per_image: Some(extent),
},
},
wgpu::Extent3d {
width: EXTENT,
height: EXTENT,
width: extent,
height: extent,
depth_or_array_layers: 1,
},
);
@ -117,7 +119,7 @@ fn main() {
for (face, buf) in buffers.iter().enumerate() {
s.spawn(move || {
let img =
image::RgbaImage::from_raw(EXTENT, EXTENT, buf.slice(..).get_mapped_range().to_vec()).unwrap();
image::RgbaImage::from_raw(extent, extent, buf.slice(..).get_mapped_range().to_vec()).unwrap();
let img: image::RgbImage = img.convert();
img.save(format!("textures/env{face}.jpeg")).unwrap();
});