Compare commits
2 commits
39a7d0e54b
...
984a7a5c10
Author | SHA1 | Date | |
---|---|---|---|
984a7a5c10 | |||
834b06e34d |
1 changed files with 48 additions and 10 deletions
|
@ -1,6 +1,6 @@
|
|||
mod vertex;
|
||||
|
||||
use std::{path::PathBuf, sync::Arc};
|
||||
use std::{path::PathBuf, sync::Arc, time::Duration};
|
||||
|
||||
use anyhow::Result;
|
||||
use ecs::*;
|
||||
|
@ -94,8 +94,24 @@ impl SkyBox {
|
|||
.add_descriptor_set_layout(&descriptor_set_layout)
|
||||
.build(context.device().clone())?;
|
||||
|
||||
let pipeline =
|
||||
Self::create_pipeline(context, sample_count, &render_target, &pipeline_layout)?;
|
||||
let vertex_shader = ShaderModule::from_slice(
|
||||
context.device().clone(),
|
||||
include_bytes!("../shader/skybox.vert.spv"),
|
||||
)?;
|
||||
|
||||
let fragment_shader = ShaderModule::from_slice(
|
||||
context.device().clone(),
|
||||
include_bytes!("../shader/skybox.frag.spv"),
|
||||
)?;
|
||||
|
||||
let pipeline = Self::create_pipeline(
|
||||
context,
|
||||
sample_count,
|
||||
&render_target,
|
||||
&pipeline_layout,
|
||||
&vertex_shader,
|
||||
&fragment_shader,
|
||||
)?;
|
||||
|
||||
let descriptor_pool = DescriptorPool::builder()
|
||||
.set_layout(descriptor_set_layout)
|
||||
|
@ -124,17 +140,32 @@ impl SkyBox {
|
|||
.map(|t| VertexPoint::new(t[0] as f32, t[1] as f32, t[2] as f32))
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let cube_buffer = Buffer::builder()
|
||||
.set_memory_usage(MemoryUsage::GpuOnly)
|
||||
.set_sharing_mode(VK_SHARING_MODE_EXCLUSIVE)
|
||||
.set_usage(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
|
||||
.set_data(&cube_mesh)
|
||||
.build(context.device().clone())?;
|
||||
let command_buffer = CommandBuffer::new_primary()
|
||||
.build(context.device().clone(), context.queue().clone())?;
|
||||
|
||||
let cube_buffer = SingleSubmit::builder(&command_buffer, context.queue(), |recorder| {
|
||||
Buffer::builder()
|
||||
.set_memory_usage(MemoryUsage::CpuToGpu)
|
||||
.set_usage(VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
|
||||
.set_data(&cube_mesh)
|
||||
.build(context.device().clone())?
|
||||
.into_device_local(
|
||||
recorder,
|
||||
VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
|
||||
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,
|
||||
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
|
||||
)
|
||||
})
|
||||
.wait_for_timeout(Duration::from_secs(2))
|
||||
.submit()?;
|
||||
|
||||
let me = Self {
|
||||
_cube_map: cube_map,
|
||||
cube_buffer,
|
||||
|
||||
vertex_shader,
|
||||
fragment_shader,
|
||||
|
||||
render_target,
|
||||
pipeline,
|
||||
descriptor_set,
|
||||
|
@ -195,11 +226,18 @@ impl SkyBox {
|
|||
sample_count: VkSampleCountFlags,
|
||||
render_target: &TargetMode<RenderTarget>,
|
||||
pipeline_layout: &Arc<PipelineLayout>,
|
||||
vertex_shader: &Arc<ShaderModule<Vertex>>,
|
||||
fragment_shader: &Arc<ShaderModule<Fragment>>,
|
||||
) -> Result<TargetMode<Arc<Pipeline>>> {
|
||||
render_target.execute(|render_target| {
|
||||
Pipeline::new_graphics()
|
||||
.set_vertex_shader::<VertexPoint>(vertex_shader.clone())
|
||||
.set_fragment_shader(fragment_shader.clone())
|
||||
.input_assembly(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, false)
|
||||
.default_multisample(sample_count)
|
||||
.default_color_blend(vec![VkPipelineColorBlendAttachmentState::default()])
|
||||
.default_rasterization(VK_CULL_MODE_NONE, VK_FRONT_FACE_CLOCKWISE)
|
||||
.whole_area(render_target.width(), render_target.height())
|
||||
.build(
|
||||
context.device().clone(),
|
||||
pipeline_layout,
|
||||
|
@ -245,6 +283,6 @@ impl TScene for SkyBox {
|
|||
window_height: f32,
|
||||
images: &TargetMode<Vec<Arc<Image>>>,
|
||||
) -> Result<()> {
|
||||
todo!()
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue