Compare commits
2 commits
a5a3c63214
...
1fb9da7282
Author | SHA1 | Date | |
---|---|---|---|
1fb9da7282 | |||
834b06e34d |
1 changed files with 48 additions and 10 deletions
|
@ -1,6 +1,6 @@
|
||||||
mod vertex;
|
mod vertex;
|
||||||
|
|
||||||
use std::{path::PathBuf, sync::Arc};
|
use std::{path::PathBuf, sync::Arc, time::Duration};
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use ecs::*;
|
use ecs::*;
|
||||||
|
@ -94,8 +94,24 @@ impl SkyBox {
|
||||||
.add_descriptor_set_layout(&descriptor_set_layout)
|
.add_descriptor_set_layout(&descriptor_set_layout)
|
||||||
.build(context.device().clone())?;
|
.build(context.device().clone())?;
|
||||||
|
|
||||||
let pipeline =
|
let vertex_shader = ShaderModule::from_slice(
|
||||||
Self::create_pipeline(context, sample_count, &render_target, &pipeline_layout)?;
|
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()
|
let descriptor_pool = DescriptorPool::builder()
|
||||||
.set_layout(descriptor_set_layout)
|
.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))
|
.map(|t| VertexPoint::new(t[0] as f32, t[1] as f32, t[2] as f32))
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
let cube_buffer = Buffer::builder()
|
let command_buffer = CommandBuffer::new_primary()
|
||||||
.set_memory_usage(MemoryUsage::GpuOnly)
|
.build(context.device().clone(), context.queue().clone())?;
|
||||||
.set_sharing_mode(VK_SHARING_MODE_EXCLUSIVE)
|
|
||||||
.set_usage(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
|
let cube_buffer = SingleSubmit::builder(&command_buffer, context.queue(), |recorder| {
|
||||||
.set_data(&cube_mesh)
|
Buffer::builder()
|
||||||
.build(context.device().clone())?;
|
.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 {
|
let me = Self {
|
||||||
_cube_map: cube_map,
|
_cube_map: cube_map,
|
||||||
cube_buffer,
|
cube_buffer,
|
||||||
|
|
||||||
|
vertex_shader,
|
||||||
|
fragment_shader,
|
||||||
|
|
||||||
render_target,
|
render_target,
|
||||||
pipeline,
|
pipeline,
|
||||||
descriptor_set,
|
descriptor_set,
|
||||||
|
@ -195,11 +226,18 @@ impl SkyBox {
|
||||||
sample_count: VkSampleCountFlags,
|
sample_count: VkSampleCountFlags,
|
||||||
render_target: &TargetMode<RenderTarget>,
|
render_target: &TargetMode<RenderTarget>,
|
||||||
pipeline_layout: &Arc<PipelineLayout>,
|
pipeline_layout: &Arc<PipelineLayout>,
|
||||||
|
vertex_shader: &Arc<ShaderModule<Vertex>>,
|
||||||
|
fragment_shader: &Arc<ShaderModule<Fragment>>,
|
||||||
) -> Result<TargetMode<Arc<Pipeline>>> {
|
) -> Result<TargetMode<Arc<Pipeline>>> {
|
||||||
render_target.execute(|render_target| {
|
render_target.execute(|render_target| {
|
||||||
Pipeline::new_graphics()
|
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_multisample(sample_count)
|
||||||
|
.default_color_blend(vec![VkPipelineColorBlendAttachmentState::default()])
|
||||||
.default_rasterization(VK_CULL_MODE_NONE, VK_FRONT_FACE_CLOCKWISE)
|
.default_rasterization(VK_CULL_MODE_NONE, VK_FRONT_FACE_CLOCKWISE)
|
||||||
|
.whole_area(render_target.width(), render_target.height())
|
||||||
.build(
|
.build(
|
||||||
context.device().clone(),
|
context.device().clone(),
|
||||||
pipeline_layout,
|
pipeline_layout,
|
||||||
|
@ -245,6 +283,6 @@ impl TScene for SkyBox {
|
||||||
window_height: f32,
|
window_height: f32,
|
||||||
images: &TargetMode<Vec<Arc<Image>>>,
|
images: &TargetMode<Vec<Arc<Image>>>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
todo!()
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue