mirror of https://github.com/wayvr-org/wayvr.git
default skybox is shader skybox
This commit is contained in:
parent
f3732c7087
commit
6cddb43b0f
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue