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);
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
|
@ -994,6 +1010,72 @@ void VulkanExample::getEnabledFeatures()
|
|||
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()
|
||||
{
|
||||
VulkanExampleBase::prepare();
|
||||
|
|
|
@ -357,6 +357,8 @@ public:
|
|||
}
|
||||
void loadglTFFile(std::string filename);
|
||||
virtual void getEnabledFeatures();
|
||||
void createAttachment(VkFormat format, VkImageUsageFlagBits usage, FrameBufferAttachment* attachment, uint32_t width, uint32_t height);
|
||||
virtual void setupFrameBuffer();
|
||||
void buildCommandBuffers();
|
||||
void loadAssets();
|
||||
void setupDescriptors();
|
||||
|
|
Loading…
Reference in New Issue