fix: alot of stuff changed. Mostly bugfixxes / architechture changes

This commit is contained in:
2026-08-09 02:24:17 +02:00
parent 4b6f773c0c
commit 05384debbf
98 changed files with 5461 additions and 1751 deletions
+45 -32
View File
@@ -11,6 +11,7 @@
#include <stdexcept>
#include <utility>
#include "volk.h"
#include "spdlog/spdlog.h"
CubeMap::CubeMap()
@@ -69,7 +70,7 @@ void CubeMap::RenderToCubemap(
);
}
gfxDevice.GetImmediateExecuter().immediateSubmit([&](VkCommandBuffer cmd) {
gfxDevice.getImmediateExecuter().immediateSubmit([&](VkCommandBuffer cmd) {
VkImageMemoryBarrier barrier{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER};
barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
barrier.newLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
@@ -201,45 +202,57 @@ void CubeMap::CreateCubeMap(
std::array<VkImageView, 6> faceViews{};
for (std::uint32_t face = 0; face < 6; ++face) {
VkImageViewCreateInfo viewInfo{};
viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
viewInfo.image = cubeMapImage.image;
viewInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
viewInfo.format = VK_FORMAT_R32G32B32A32_SFLOAT;
viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
viewInfo.subresourceRange.baseMipLevel = 0;
viewInfo.subresourceRange.levelCount = 1;
viewInfo.subresourceRange.baseArrayLayer = face;
viewInfo.subresourceRange.layerCount = 1;
try {
for (std::uint32_t face = 0; face < 6; ++face) {
VkImageViewCreateInfo viewInfo{};
viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
viewInfo.image = cubeMapImage.image;
viewInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
viewInfo.format = VK_FORMAT_R32G32B32A32_SFLOAT;
viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
viewInfo.subresourceRange.baseMipLevel = 0;
viewInfo.subresourceRange.levelCount = 1;
viewInfo.subresourceRange.baseArrayLayer = face;
viewInfo.subresourceRange.layerCount = 1;
if (vkCreateImageView(
VK_CHECK(vkCreateImageView(
gfxDevice.getDevice(),
&viewInfo,
nullptr,
&faceViews[face]) != VK_SUCCESS)
{
throw std::runtime_error("Failed to create cubemap face image view.");
&faceViews[face]));
}
}
spdlog::info("HDRI image id = {}", m_hdrImage);
spdlog::info("HDRI image id = {}", m_hdrImage);
RenderToCubemap(
gfxDevice,
resources,
m_hdrImage,
cubeMapImage.image,
faceViews,
m_cubeMapSize
);
RenderToCubemap(
gfxDevice,
resources,
m_hdrImage,
cubeMapImage.image,
faceViews,
m_cubeMapSize
);
m_cubemapImageID = resources.addImageToCache(std::move(cubeMapImage));
for (VkImageView view : faceViews) {
if (view != VK_NULL_HANDLE) {
vkDestroyImageView(gfxDevice.getDevice(), view, nullptr);
for (std::uint32_t face = 0; face < 6; ++face) {
cubeMapImage.setLayout(VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, face);
}
m_cubemapImageID = resources.addImageToCache(std::move(cubeMapImage));
for (VkImageView& view : faceViews) {
if (view != VK_NULL_HANDLE) {
vkDestroyImageView(gfxDevice.getDevice(), view, nullptr);
view = VK_NULL_HANDLE;
}
}
} catch (...) {
for (VkImageView& view : faceViews) {
if (view != VK_NULL_HANDLE) {
vkDestroyImageView(gfxDevice.getDevice(), view, nullptr);
}
}
gfxDevice.destroyImage(cubeMapImage);
throw;
}
}
@@ -308,4 +321,4 @@ void CubeMap::InitCubemapPipeline(
fragPath,
pipelineConfig
);
}
}