This commit is contained in:
2021-02-20 18:22:21 +01:00
parent d33bceeab8
commit ad6b0730d5
5 changed files with 38 additions and 65 deletions

View File

@@ -5,11 +5,11 @@ authors = ["Till <asuro@posteo.de>"]
edition = "2018" edition = "2018"
[dependencies] [dependencies]
vulkano-shaders = "0.19.0" vulkano-shaders = "0.20"
vulkano = "0.19.0" vulkano = "0.20"
vulkano-win = "0.19.0" vulkano-win = "0.20"
cgmath = "0.17.0" cgmath = "0.17.0"
winit = "0.22.2" winit = "0.24"
image = "0.23.6" image = "0.23.6"
serde = "1.0.114" serde = "1.0.114"
serde_json = "1.0.59" serde_json = "1.0.59"

BIN
build/debug.rdbg Normal file

Binary file not shown.

View File

@@ -0,0 +1,27 @@
{
"rdocCaptureSettings": 1,
"settings": {
"autoStart": false,
"commandLine": "",
"environment": [
],
"executable": "D:\\Code\\rust-engine\\target\\debug\\rust-engine.exe",
"inject": false,
"numQueuedFrames": 0,
"options": {
"allowFullscreen": true,
"allowVSync": true,
"apiValidation": false,
"captureAllCmdLists": false,
"captureCallstacks": false,
"captureCallstacksOnlyDraws": false,
"debugOutputMute": true,
"delayForDebugger": 0,
"hookIntoChildren": false,
"refAllResources": false,
"verifyBufferAccess": false
},
"queuedFrameCap": 0,
"workingDir": "D:/Code/rust-engine"
}
}

View File

@@ -107,8 +107,6 @@ impl TestGame {
} }
pub fn game_start(self: &mut Self, renderer: &mut VulkanRenderer) { pub fn game_start(self: &mut Self, renderer: &mut VulkanRenderer) {
// let plane_mesh = self.load_gltf(renderer, "models/plane.gltf");
// self.add_game_object(renderer, plane_mesh[0].clone());
load_level("levels/test.lvl", self, renderer).unwrap(); load_level("levels/test.lvl", self, renderer).unwrap();
println!("Game loaded!"); println!("Game loaded!");
} }

View File

@@ -4,13 +4,13 @@ use std::time::SystemTime;
use cgmath::{Matrix4, SquareMatrix}; use cgmath::{Matrix4, SquareMatrix};
use image::{ImageBuffer, Rgb, Rgba}; use image::{ImageBuffer, Rgb, Rgba};
use image::buffer::ConvertBuffer; use image::buffer::ConvertBuffer;
use vulkano::{buffer::{BufferUsage, CpuAccessibleBuffer}, command_buffer::CommandBuffer, image::{ImageLayout, MipmapsCount}}; use vulkano::{buffer::{BufferUsage, CpuAccessibleBuffer}, command_buffer::SubpassContents, image::MipmapsCount};
use vulkano::command_buffer::{AutoCommandBuffer, AutoCommandBufferBuilder, DynamicState}; use vulkano::command_buffer::{AutoCommandBuffer, AutoCommandBufferBuilder, DynamicState};
use vulkano::descriptor::DescriptorSet; use vulkano::descriptor::DescriptorSet;
use vulkano::device::{Device, DeviceExtensions, Queue}; use vulkano::device::{Device, DeviceExtensions, Queue};
use vulkano::format::{ClearValue, Format}; use vulkano::format::{ClearValue, Format};
use vulkano::framebuffer::{RenderPassAbstract, FramebufferAbstract}; use vulkano::framebuffer::{RenderPassAbstract, FramebufferAbstract};
use vulkano::image::{Dimensions, ImageUsage, ImmutableImage}; use vulkano::image::{Dimensions, ImmutableImage};
use vulkano::instance::{ApplicationInfo, Instance, InstanceExtensions, PhysicalDevice, Version}; use vulkano::instance::{ApplicationInfo, Instance, InstanceExtensions, PhysicalDevice, Version};
use vulkano::instance::debug::{DebugCallback, MessageSeverity, MessageType}; use vulkano::instance::debug::{DebugCallback, MessageSeverity, MessageType};
use vulkano::sampler::{Filter, MipmapMode, Sampler, SamplerAddressMode}; use vulkano::sampler::{Filter, MipmapMode, Sampler, SamplerAddressMode};
@@ -251,7 +251,7 @@ impl VulkanRenderer {
let pipelines: Vec<Box<dyn Drawcall>> = vec![ let pipelines: Vec<Box<dyn Drawcall>> = vec![
Box::new(DefaultShader::new(device.clone(), render_pass.clone())), Box::new(DefaultShader::new(device.clone(), render_pass.clone())),
Box::new(LineShader::new(device.clone(), render_pass.clone(), line_vertex_buffer.clone())), // Box::new(LineShader::new(device.clone(), render_pass.clone(), line_vertex_buffer.clone())),
]; ];
// Dynamic viewports allow us to recreate just the viewport when the window is resized // Dynamic viewports allow us to recreate just the viewport when the window is resized
@@ -306,9 +306,9 @@ impl VulkanRenderer {
let mut builder = AutoCommandBufferBuilder::primary_simultaneous_use(self.device.clone(), self.queue.family()).unwrap(); let mut builder = AutoCommandBufferBuilder::primary_simultaneous_use(self.device.clone(), self.queue.family()).unwrap();
builder.update_buffer(self.uniform_buffers[fb_index].clone(), uniform_buffer_data).unwrap(); builder.update_buffer(self.uniform_buffers[fb_index].clone(), uniform_buffer_data).unwrap();
if self.render_config.msaa_samples > 0 { if self.render_config.msaa_samples > 0 {
builder.begin_render_pass(self.framebuffers[fb_index].clone(), false, vec![ClearValue::None, ClearValue::Float([0.0, 0.0, 0.0, 1.0]), ClearValue::Depth(1.0)]).unwrap(); builder.begin_render_pass(self.framebuffers[fb_index].clone(), SubpassContents::Inline, vec![ClearValue::None, ClearValue::Float([0.0, 0.0, 0.0, 1.0]), ClearValue::Depth(1.0)]).unwrap();
} else { } else {
builder.begin_render_pass(self.framebuffers[fb_index].clone(), false, vec![ClearValue::Float([0.0, 0.0, 0.0, 1.0]), ClearValue::Depth(1.0)]).unwrap(); builder.begin_render_pass(self.framebuffers[fb_index].clone(), SubpassContents::Inline, vec![ClearValue::Float([0.0, 0.0, 0.0, 1.0]), ClearValue::Depth(1.0)]).unwrap();
} }
// Draw meshes etc. // Draw meshes etc.
@@ -445,60 +445,8 @@ impl VulkanRenderer {
new_buffer.iter().cloned(), new_buffer.iter().cloned(),
).unwrap(); ).unwrap();
// Create image let (image_view, future) = ImmutableImage::from_buffer(source.clone(), dimensions, MipmapsCount::Log2, Format::R8G8B8A8Unorm, self.queue.clone()).unwrap();
let (image_view, init) = ImmutableImage::uninitialized( future.flush().unwrap();
self.device.clone(),
dimensions,
Format::R8G8B8A8Unorm,
MipmapsCount::Log2,
ImageUsage {
transfer_source: true,
transfer_destination: true,
sampled: true,
..ImageUsage::none()
},
ImageLayout::ShaderReadOnlyOptimal,
self.device.active_queue_families()
).unwrap();
// Upload image data
let mut command_buffer_builder = AutoCommandBufferBuilder::new(self.device.clone(), self.queue.family()).unwrap();
command_buffer_builder.copy_buffer_to_image_dimensions(
source,
init,
[0, 0, 0],
dimensions.width_height_depth(),
0,
dimensions.array_layers_with_cube(),
0,
).unwrap();
// Generate mipmaps
// let mut mip_width = image_view.dimensions().width() as i32;
// let mut mip_height = image_view.dimensions().height() as i32;
// for i in 0..image_view.mipmap_levels() {
// command_buffer_builder.blit_image(
// image_view.clone(),
// [0; 3],
// [mip_width, mip_height, 1],
// 0,
// i,
// image_view.clone(),
// [0; 3],
// [mip_width / 2, mip_height / 2, 1],
// 0,
// i + 1,
// dimensions.array_layers_with_cube(),
// Filter::Linear).unwrap();
// if mip_width > 1 { mip_width = mip_width / 2; }
// if mip_height > 1 { mip_height = mip_height / 2; }
// }
let command_buffer = command_buffer_builder.build().unwrap();
let command_buffer_future = command_buffer.execute(self.queue.clone()).unwrap();
command_buffer_future.flush().unwrap();
self.game_data.textures.push(image_view); self.game_data.textures.push(image_view);
} }