fix: alot of stuff changed. Mostly bugfixxes / architechture changes
This commit is contained in:
@@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user