update framebuffer setup
parent
7733ba49ee
commit
1629bbdcf5
|
@ -660,7 +660,23 @@ VulkanExample::VulkanExample():
|
||||||
camera.setPerspective(60.0f, (float)width / (float)height, 0.1f, 256.0f);
|
camera.setPerspective(60.0f, (float)width / (float)height, 0.1f, 256.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VulkanExample::setupFrameBuffer()
|
||||||
|
{
|
||||||
|
if (pbrFrameBuffer.bCreate && (pbrFrameBuffer.fbo.width != width || pbrFrameBuffer.fbo.height != height))
|
||||||
|
{
|
||||||
|
pbrFrameBuffer.color.destroy(device);
|
||||||
|
pbrFrameBuffer.depth.destroy(device);
|
||||||
|
pbrFrameBuffer.fbo.destroy(device);
|
||||||
|
vkDestroySampler(device, colorSampler, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
pbrFrameBuffer.fbo.setSize(width, height);
|
||||||
|
VkFormat attachDepthFormat;
|
||||||
|
VkBool32 validDepthFormat = vks::tools::getSupportedDepthFormat(physicalDevice, &attachDepthFormat);
|
||||||
|
assert(validDepthFormat);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void VulkanExample::getEnabledFeatures()
|
void VulkanExample::getEnabledFeatures()
|
||||||
{
|
{
|
||||||
|
@ -994,6 +1010,72 @@ void VulkanExample::getEnabledFeatures()
|
||||||
memcpy(shaderData.buffer.mapped, &shaderData.values, sizeof(shaderData.values));
|
memcpy(shaderData.buffer.mapped, &shaderData.values, sizeof(shaderData.values));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-------------------------- pbr precompute start ----------------------------------
|
||||||
|
|
||||||
|
#pragma region pbr render pass setting
|
||||||
|
|
||||||
|
void VulkanExample::createAttachment(VkFormat format, VkImageUsageFlagBits usage, VulkanExample::FrameBufferAttachment* attachment, uint32_t width, uint32_t height)
|
||||||
|
{
|
||||||
|
VkImageAspectFlags aspectMask = 0;
|
||||||
|
VkImageUsageFlags imageUsage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT;
|
||||||
|
attachment->format = format;
|
||||||
|
if (usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
|
||||||
|
{
|
||||||
|
aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||||
|
imageUsage |= VK_IMAGE_USAGE_SAMPLED_BIT;
|
||||||
|
}
|
||||||
|
if (usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
|
||||||
|
{
|
||||||
|
aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT;
|
||||||
|
if (format >= VK_FORMAT_D16_UNORM_S8_UINT)
|
||||||
|
aspectMask |= VK_IMAGE_ASPECT_STENCIL_BIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(aspectMask > 0);
|
||||||
|
|
||||||
|
VkImageCreateInfo image = vks::initializers::imageCreateInfo();
|
||||||
|
image.imageType = VK_IMAGE_TYPE_2D;
|
||||||
|
image.format = format;
|
||||||
|
image.extent.width = width;
|
||||||
|
image.extent.height = height;
|
||||||
|
image.extent.depth = 1;
|
||||||
|
image.mipLevels = 1;
|
||||||
|
image.arrayLayers = 1;
|
||||||
|
image.samples = VK_SAMPLE_COUNT_1_BIT;
|
||||||
|
image.tiling = VK_IMAGE_TILING_OPTIMAL;
|
||||||
|
image.usage = imageUsage | usage;
|
||||||
|
|
||||||
|
VkMemoryAllocateInfo memAlloc = vks::initializers::memoryAllocateInfo();
|
||||||
|
VkMemoryRequirements memReqs;
|
||||||
|
|
||||||
|
VK_CHECK_RESULT(vkCreateImage(device, &image, nullptr, &attachment->image));
|
||||||
|
vkGetImageMemoryRequirements(device, attachment->image, &memReqs);
|
||||||
|
memAlloc.allocationSize = memReqs.size;
|
||||||
|
memAlloc.memoryTypeIndex = vulkanDevice->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
|
||||||
|
VK_CHECK_RESULT(vkAllocateMemory(device, &memAlloc, nullptr, &attachment->deviceMemory));
|
||||||
|
VK_CHECK_RESULT(vkBindImageMemory(device, attachment->image, attachment->deviceMemory, 0));
|
||||||
|
|
||||||
|
VkImageViewCreateInfo imageView = vks::initializers::imageViewCreateInfo();
|
||||||
|
imageView.viewType = VK_IMAGE_VIEW_TYPE_2D;
|
||||||
|
imageView.format = format;
|
||||||
|
imageView.subresourceRange = {};
|
||||||
|
imageView.subresourceRange.aspectMask = aspectMask;
|
||||||
|
imageView.subresourceRange.baseMipLevel = 0;
|
||||||
|
imageView.subresourceRange.levelCount = 1;
|
||||||
|
imageView.subresourceRange.baseArrayLayer = 0;
|
||||||
|
imageView.subresourceRange.layerCount = 1;
|
||||||
|
imageView.image = attachment->image;
|
||||||
|
VK_CHECK_RESULT(vkCreateImageView(device, &imageView, nullptr, &attachment->imageView));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#pragma endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------- pbr precompute end ---------------------------------------
|
||||||
void VulkanExample::prepare()
|
void VulkanExample::prepare()
|
||||||
{
|
{
|
||||||
VulkanExampleBase::prepare();
|
VulkanExampleBase::prepare();
|
||||||
|
|
|
@ -357,6 +357,8 @@ public:
|
||||||
}
|
}
|
||||||
void loadglTFFile(std::string filename);
|
void loadglTFFile(std::string filename);
|
||||||
virtual void getEnabledFeatures();
|
virtual void getEnabledFeatures();
|
||||||
|
void createAttachment(VkFormat format, VkImageUsageFlagBits usage, FrameBufferAttachment* attachment, uint32_t width, uint32_t height);
|
||||||
|
virtual void setupFrameBuffer();
|
||||||
void buildCommandBuffers();
|
void buildCommandBuffers();
|
||||||
void loadAssets();
|
void loadAssets();
|
||||||
void setupDescriptors();
|
void setupDescriptors();
|
||||||
|
|
Loading…
Reference in New Issue