default skybox is shader skybox

This commit is contained in:
galister 2026-04-23 17:21:25 +09:00
parent f3732c7087
commit 6cddb43b0f
3 changed files with 59 additions and 27 deletions

View File

@ -24,7 +24,7 @@ use super::{
};
pub(super) struct Skybox {
view: Arc<ImageView>,
view: Option<Arc<ImageView>>,
sky: Option<WlxSwapchain>,
grid: Option<WlxSwapchain>,
grid_pose: xr::Posef,
@ -73,14 +73,12 @@ impl Skybox {
"".into()
};
if maybe_image.is_none() {
let p = include_bytes!("../../res/table_mountain_2.dds");
maybe_image = Some(command_buffer.upload_image_dds(p.as_slice())?);
}
command_buffer.build_and_execute_now()?;
let view = ImageView::new_default(maybe_image.unwrap())?; // safe unwrap
let view = if let Some(image) = maybe_image {
command_buffer.build_and_execute_now()?;
Some(ImageView::new_default(image)?)
} else {
None
};
let grid_color_scale_bias_khr = xr
.instance
@ -125,7 +123,12 @@ impl Skybox {
}
let opts = SwapchainOpts::new().immutable();
let extent = self.view.extent_u32arr();
let extent = self
.view
.as_ref()
.map(|v| v.extent_u32arr())
.unwrap_or([4096, 4096]);
let mut swapchain = create_swapchain(xr, app.gfx.clone(), extent, 1, opts)?;
let tgt = swapchain
.acquire_wait_image()?
@ -133,23 +136,42 @@ impl Skybox {
.into_iter()
.next()
.unwrap();
let pipeline = app.gfx.create_pipeline(
app.gfx_extras.shaders.get("vert_quad").unwrap(), // want panic
app.gfx_extras.shaders.get("frag_srgb").unwrap(), // want panic
WPipelineCreateInfo::new(app.gfx.surface_format),
)?;
let set0 = pipeline.uniform_sampler(0, self.view.clone(), app.gfx.texture_filter)?;
let set1 = pipeline.uniform_buffer_upload(1, vec![1f32])?;
let pass = pipeline.create_pass(
tgt.extent_f32(),
[0.0, 0.0],
app.gfx_extras.quad_verts.clone(),
0..4,
0..1,
vec![set0, set1],
&Default::default(),
)?;
let pass = if let Some(view) = self.view.as_ref() {
let pipeline = app.gfx.create_pipeline(
app.gfx_extras.shaders.get("vert_quad").unwrap(), // want panic
app.gfx_extras.shaders.get("frag_srgb").unwrap(), // want panic
WPipelineCreateInfo::new(app.gfx.surface_format),
)?;
let set0 = pipeline.uniform_sampler(0, view.clone(), app.gfx.texture_filter)?;
let set1 = pipeline.uniform_buffer_upload(1, vec![1f32])?;
pipeline.create_pass(
tgt.extent_f32(),
[0.0, 0.0],
app.gfx_extras.quad_verts.clone(),
0..4,
0..1,
vec![set0, set1],
&Default::default(),
)?
} else {
let pipeline = app.gfx.create_pipeline(
app.gfx_extras.shaders.get("vert_quad").unwrap(), // want panic
app.gfx_extras.shaders.get("frag_sky").unwrap(), // want panic
WPipelineCreateInfo::new(app.gfx.surface_format),
)?;
pipeline.create_pass(
tgt.extent_f32(),
[0.0, 0.0],
app.gfx_extras.quad_verts.clone(),
0..4,
0..1,
vec![],
&Default::default(),
)?
};
let mut cmd_buffer = app
.gfx

View File

@ -21,7 +21,7 @@ use wgui::gfx::WGfx;
use vulkano::instance::InstanceCreateFlags;
use wlx_capture::DrmFormat;
use crate::shaders::{frag_color, frag_grid, frag_screen, frag_srgb, vert_quad};
use crate::shaders::{frag_color, frag_grid, frag_screen, frag_sky, frag_srgb, vert_quad};
#[cfg(feature = "openxr")]
use {ash::vk, std::os::raw::c_void};
@ -74,6 +74,9 @@ impl WGfxExtras {
let shader = frag_srgb::load(gfx.device.clone())?;
shaders.insert("frag_srgb", shader);
let shader = frag_sky::load(gfx.device.clone())?;
shaders.insert("frag_sky", shader);
let shader = frag_grid::load(gfx.device.clone())?;
shaders.insert("frag_grid", shader);

View File

@ -32,3 +32,10 @@ pub mod frag_srgb {
path: "src/shaders/srgb.frag",
}
}
pub mod frag_sky {
vulkano_shaders::shader! {
ty: "fragment",
path: "src/shaders/sky.frag",
}
}