mirror of
https://github.com/Kbz-8/42_vox.git
synced 2026-01-11 14:43:34 +00:00
fixing camera FOV issue
This commit is contained in:
@@ -31,7 +31,7 @@ int main(int ac, char** av)
|
|||||||
|
|
||||||
Scop::SceneDescriptor main_scene_desc;
|
Scop::SceneDescriptor main_scene_desc;
|
||||||
main_scene_desc.fragment_shader = Scop::RenderCore::Get().GetDefaultFragmentShader();
|
main_scene_desc.fragment_shader = Scop::RenderCore::Get().GetDefaultFragmentShader();
|
||||||
main_scene_desc.camera = std::make_shared<Scop::FirstPerson3D>(Scop::Vec3f{ -10.0f, 0.0f, 0.0f });
|
main_scene_desc.camera = std::make_shared<Scop::FirstPerson3D>(Scop::Vec3f{ -10.0f, 0.0f, 0.0f }, 80.f);
|
||||||
Scop::Scene& main_scene = splash_scene->AddChildScene("main", std::move(main_scene_desc));
|
Scop::Scene& main_scene = splash_scene->AddChildScene("main", std::move(main_scene_desc));
|
||||||
|
|
||||||
Scop::Vec2ui32 skybox_size;
|
Scop::Vec2ui32 skybox_size;
|
||||||
|
|||||||
@@ -776,7 +776,7 @@ namespace Scop
|
|||||||
{
|
{
|
||||||
angle /= T(2.0);
|
angle /= T(2.0);
|
||||||
|
|
||||||
T yScale = angle.GetTan();
|
T yScale = std::abs(angle.GetTan());
|
||||||
|
|
||||||
return Mat4(
|
return Mat4(
|
||||||
T(1.0) / (ratio * yScale), T(0.0), T(0.0), T(0.0),
|
T(1.0) / (ratio * yScale), T(0.0), T(0.0), T(0.0),
|
||||||
|
|||||||
@@ -80,8 +80,8 @@ namespace Scop
|
|||||||
std::vector<VkFormat> candidates = { VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT };
|
std::vector<VkFormat> candidates = { VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT };
|
||||||
VkFormat format = kvfFindSupportFormatInCandidates(RenderCore::Get().GetDevice(), candidates.data(), candidates.size(), VK_IMAGE_TILING_OPTIMAL, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT);
|
VkFormat format = kvfFindSupportFormatInCandidates(RenderCore::Get().GetDevice(), candidates.data(), candidates.size(), VK_IMAGE_TILING_OPTIMAL, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT);
|
||||||
Image::Init(ImageType::Depth, width, height, format, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, is_multisampled);
|
Image::Init(ImageType::Depth, width, height, format, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, is_multisampled);
|
||||||
Image::CreateImageView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_DEPTH_BIT);
|
|
||||||
Image::TransitionLayout(VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
Image::TransitionLayout(VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
||||||
|
Image::CreateImageView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_DEPTH_BIT);
|
||||||
}
|
}
|
||||||
~DepthImage() = default;
|
~DepthImage() = default;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -108,6 +108,7 @@ namespace Scop
|
|||||||
|
|
||||||
void Scene::Destroy()
|
void Scene::Destroy()
|
||||||
{
|
{
|
||||||
|
RenderCore::Get().WaitDeviceIdle();
|
||||||
p_skybox.reset();
|
p_skybox.reset();
|
||||||
m_depth.Destroy();
|
m_depth.Destroy();
|
||||||
m_actors.clear();
|
m_actors.clear();
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ namespace Scop
|
|||||||
{
|
{
|
||||||
if(m_buffer == VK_NULL_HANDLE)
|
if(m_buffer == VK_NULL_HANDLE)
|
||||||
return;
|
return;
|
||||||
|
RenderCore::Get().WaitDeviceIdle();
|
||||||
RenderCore::Get().vkDestroyBuffer(RenderCore::Get().GetDevice(), m_buffer, nullptr);
|
RenderCore::Get().vkDestroyBuffer(RenderCore::Get().GetDevice(), m_buffer, nullptr);
|
||||||
RenderCore::Get().GetAllocator().Deallocate(m_memory);
|
RenderCore::Get().GetAllocator().Deallocate(m_memory);
|
||||||
m_buffer = VK_NULL_HANDLE;
|
m_buffer = VK_NULL_HANDLE;
|
||||||
|
|||||||
@@ -80,6 +80,8 @@ namespace Scop
|
|||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
kvfTransitionImageLayout(RenderCore::Get().GetDevice(), m_image, kvf_type, cmd, m_format, m_layout, new_layout, is_single_time_cmd_buffer);
|
kvfTransitionImageLayout(RenderCore::Get().GetDevice(), m_image, kvf_type, cmd, m_format, m_layout, new_layout, is_single_time_cmd_buffer);
|
||||||
|
if(is_single_time_cmd_buffer)
|
||||||
|
kvfDestroyCommandBuffer(RenderCore::Get().GetDevice(), cmd);
|
||||||
m_layout = new_layout;
|
m_layout = new_layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,8 +96,8 @@ namespace Scop
|
|||||||
if(m_type == ImageType::Color || m_type == ImageType::Cube)
|
if(m_type == ImageType::Color || m_type == ImageType::Cube)
|
||||||
{
|
{
|
||||||
VkImageLayout old_layout = m_layout;
|
VkImageLayout old_layout = m_layout;
|
||||||
TransitionLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, cmd);
|
|
||||||
subresource_range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
subresource_range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||||
|
TransitionLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, cmd);
|
||||||
VkClearColorValue clear_color = VkClearColorValue({ { color.x, color.y, color.z, color.w } });
|
VkClearColorValue clear_color = VkClearColorValue({ { color.x, color.y, color.z, color.w } });
|
||||||
RenderCore::Get().vkCmdClearColorImage(cmd, m_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clear_color, 1, &subresource_range);
|
RenderCore::Get().vkCmdClearColorImage(cmd, m_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clear_color, 1, &subresource_range);
|
||||||
TransitionLayout(old_layout, cmd);
|
TransitionLayout(old_layout, cmd);
|
||||||
@@ -126,6 +128,7 @@ namespace Scop
|
|||||||
|
|
||||||
void Image::Destroy() noexcept
|
void Image::Destroy() noexcept
|
||||||
{
|
{
|
||||||
|
RenderCore::Get().WaitDeviceIdle();
|
||||||
DestroySampler();
|
DestroySampler();
|
||||||
DestroyImageView();
|
DestroyImageView();
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ namespace Scop
|
|||||||
set_layouts.insert(set_layouts.end(), p_fragment_shader->GetPipelineLayout().set_layouts.begin(), p_fragment_shader->GetPipelineLayout().set_layouts.end());
|
set_layouts.insert(set_layouts.end(), p_fragment_shader->GetPipelineLayout().set_layouts.begin(), p_fragment_shader->GetPipelineLayout().set_layouts.end());
|
||||||
m_pipeline_layout = kvfCreatePipelineLayout(RenderCore::Get().GetDevice(), set_layouts.data(), set_layouts.size(), push_constants.data(), push_constants.size());
|
m_pipeline_layout = kvfCreatePipelineLayout(RenderCore::Get().GetDevice(), set_layouts.data(), set_layouts.size(), push_constants.data(), push_constants.size());
|
||||||
|
|
||||||
TransitionAttachments();
|
|
||||||
CreateFramebuffers(m_attachments, descriptor.clear_color_attachments);
|
CreateFramebuffers(m_attachments, descriptor.clear_color_attachments);
|
||||||
|
|
||||||
VkPhysicalDeviceFeatures features{};
|
VkPhysicalDeviceFeatures features{};
|
||||||
@@ -66,6 +65,7 @@ namespace Scop
|
|||||||
bool GraphicPipeline::BindPipeline(VkCommandBuffer command_buffer, std::size_t framebuffer_index, std::array<float, 4> clear) noexcept
|
bool GraphicPipeline::BindPipeline(VkCommandBuffer command_buffer, std::size_t framebuffer_index, std::array<float, 4> clear) noexcept
|
||||||
{
|
{
|
||||||
TransitionAttachments(command_buffer);
|
TransitionAttachments(command_buffer);
|
||||||
|
|
||||||
VkFramebuffer fb = m_framebuffers[framebuffer_index];
|
VkFramebuffer fb = m_framebuffers[framebuffer_index];
|
||||||
VkExtent2D fb_extent = kvfGetFramebufferSize(fb);
|
VkExtent2D fb_extent = kvfGetFramebufferSize(fb);
|
||||||
|
|
||||||
@@ -128,6 +128,8 @@ namespace Scop
|
|||||||
|
|
||||||
void GraphicPipeline::CreateFramebuffers(const std::vector<NonOwningPtr<Texture>>& render_targets, bool clear_attachments)
|
void GraphicPipeline::CreateFramebuffers(const std::vector<NonOwningPtr<Texture>>& render_targets, bool clear_attachments)
|
||||||
{
|
{
|
||||||
|
TransitionAttachments();
|
||||||
|
|
||||||
std::vector<VkAttachmentDescription> attachments;
|
std::vector<VkAttachmentDescription> attachments;
|
||||||
std::vector<VkImageView> attachment_views;
|
std::vector<VkImageView> attachment_views;
|
||||||
if(p_renderer)
|
if(p_renderer)
|
||||||
@@ -138,13 +140,13 @@ namespace Scop
|
|||||||
|
|
||||||
for(NonOwningPtr<Texture> image : render_targets)
|
for(NonOwningPtr<Texture> image : render_targets)
|
||||||
{
|
{
|
||||||
attachments.push_back(kvfBuildAttachmentDescription((kvfIsDepthFormat(image->GetFormat()) ? KVF_IMAGE_DEPTH : KVF_IMAGE_COLOR), image->GetFormat(), image->GetLayout(), image->GetLayout(), clear_attachments, VK_SAMPLE_COUNT_1_BIT));
|
attachments.push_back(kvfBuildAttachmentDescription(KVF_IMAGE_COLOR, image->GetFormat(), image->GetLayout(), image->GetLayout(), clear_attachments, VK_SAMPLE_COUNT_1_BIT));
|
||||||
attachment_views.push_back(image->GetImageView());
|
attachment_views.push_back(image->GetImageView());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(p_depth)
|
if(p_depth)
|
||||||
{
|
{
|
||||||
attachments.push_back(kvfBuildAttachmentDescription((kvfIsDepthFormat(p_depth->GetFormat()) ? KVF_IMAGE_DEPTH : KVF_IMAGE_COLOR), p_depth->GetFormat(), p_depth->GetLayout(), p_depth->GetLayout(), clear_attachments, VK_SAMPLE_COUNT_1_BIT));
|
attachments.push_back(kvfBuildAttachmentDescription(KVF_IMAGE_DEPTH, p_depth->GetFormat(), p_depth->GetLayout(), p_depth->GetLayout(), clear_attachments, VK_SAMPLE_COUNT_1_BIT));
|
||||||
attachment_views.push_back(p_depth->GetImageView());
|
attachment_views.push_back(p_depth->GetImageView());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ namespace Scop
|
|||||||
case ShaderType::Vertex : m_stage = VK_SHADER_STAGE_VERTEX_BIT; break;
|
case ShaderType::Vertex : m_stage = VK_SHADER_STAGE_VERTEX_BIT; break;
|
||||||
case ShaderType::Fragment : m_stage = VK_SHADER_STAGE_FRAGMENT_BIT; break;
|
case ShaderType::Fragment : m_stage = VK_SHADER_STAGE_FRAGMENT_BIT; break;
|
||||||
case ShaderType::Compute : m_stage = VK_SHADER_STAGE_COMPUTE_BIT; break;
|
case ShaderType::Compute : m_stage = VK_SHADER_STAGE_COMPUTE_BIT; break;
|
||||||
|
|
||||||
default : FatalError("wtf"); break;
|
default : FatalError("wtf"); break;
|
||||||
}
|
}
|
||||||
m_module = kvfCreateShaderModule(RenderCore::Get().GetDevice(), m_bytecode.data(), m_bytecode.size());
|
m_module = kvfCreateShaderModule(RenderCore::Get().GetDevice(), m_bytecode.data(), m_bytecode.size());
|
||||||
@@ -56,6 +55,8 @@ namespace Scop
|
|||||||
|
|
||||||
void Shader::Destroy()
|
void Shader::Destroy()
|
||||||
{
|
{
|
||||||
|
if(m_module == VK_NULL_HANDLE)
|
||||||
|
return;
|
||||||
kvfDestroyShaderModule(RenderCore::Get().GetDevice(), m_module);
|
kvfDestroyShaderModule(RenderCore::Get().GetDevice(), m_module);
|
||||||
m_module = VK_NULL_HANDLE;
|
m_module = VK_NULL_HANDLE;
|
||||||
Message("Vulkan: shader module destroyed");
|
Message("Vulkan: shader module destroyed");
|
||||||
@@ -68,8 +69,7 @@ namespace Scop
|
|||||||
|
|
||||||
Shader::~Shader()
|
Shader::~Shader()
|
||||||
{
|
{
|
||||||
if(m_module != VK_NULL_HANDLE)
|
Destroy();
|
||||||
Destroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<Shader> LoadShaderFromFile(const std::filesystem::path& filepath, ShaderType type, ShaderLayout layout)
|
std::shared_ptr<Shader> LoadShaderFromFile(const std::filesystem::path& filepath, ShaderType type, ShaderLayout layout)
|
||||||
|
|||||||
2
ScopEngine/ThirdParty/KVF/kvf.h
vendored
2
ScopEngine/ThirdParty/KVF/kvf.h
vendored
@@ -2544,7 +2544,7 @@ VkAttachmentDescription kvfBuildAttachmentDescription(KvfImageType type, VkForma
|
|||||||
__KvfSwapchain* kvf_swapchain = __kvfGetKvfSwapchainFromVkSwapchainKHR(swapchain);
|
__KvfSwapchain* kvf_swapchain = __kvfGetKvfSwapchainFromVkSwapchainKHR(swapchain);
|
||||||
KVF_ASSERT(kvf_swapchain != NULL);
|
KVF_ASSERT(kvf_swapchain != NULL);
|
||||||
KVF_ASSERT(kvf_swapchain->images_count != 0);
|
KVF_ASSERT(kvf_swapchain->images_count != 0);
|
||||||
return kvfBuildAttachmentDescription(KVF_IMAGE_COLOR, kvf_swapchain->images_format, VK_IMAGE_LAYOUT_UNDEFINED,VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, clear, VK_SAMPLE_COUNT_1_BIT);
|
return kvfBuildAttachmentDescription(KVF_IMAGE_COLOR, kvf_swapchain->images_format, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, clear, VK_SAMPLE_COUNT_1_BIT);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user