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