mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-22 23:30:14 +00:00
Stabilize Vulkan rendering state for minimap, foliage, and water
This commit is contained in:
parent
8efc1548dc
commit
bd0305f6dd
10 changed files with 834 additions and 117 deletions
|
|
@ -59,6 +59,7 @@ public:
|
|||
VkFormat getSwapchainFormat() const { return swapchainFormat; }
|
||||
VkExtent2D getSwapchainExtent() const { return swapchainExtent; }
|
||||
const std::vector<VkImageView>& getSwapchainImageViews() const { return swapchainImageViews; }
|
||||
const std::vector<VkImage>& getSwapchainImages() const { return swapchainImages; }
|
||||
uint32_t getSwapchainImageCount() const { return static_cast<uint32_t>(swapchainImages.size()); }
|
||||
|
||||
uint32_t getCurrentFrame() const { return currentFrame; }
|
||||
|
|
@ -76,6 +77,14 @@ public:
|
|||
VkSampleCountFlagBits getMsaaSamples() const { return msaaSamples_; }
|
||||
void setMsaaSamples(VkSampleCountFlagBits samples);
|
||||
VkSampleCountFlagBits getMaxUsableSampleCount() const;
|
||||
VkImage getDepthImage() const { return depthImage; }
|
||||
VkImage getDepthCopySourceImage() const {
|
||||
return (depthResolveImage != VK_NULL_HANDLE) ? depthResolveImage : depthImage;
|
||||
}
|
||||
bool isDepthCopySourceMsaa() const {
|
||||
return (depthResolveImage == VK_NULL_HANDLE) && (msaaSamples_ > VK_SAMPLE_COUNT_1_BIT);
|
||||
}
|
||||
VkFormat getDepthFormat() const { return depthFormat; }
|
||||
|
||||
// UI texture upload: creates a Vulkan texture from RGBA data and returns
|
||||
// a VkDescriptorSet suitable for use as ImTextureID.
|
||||
|
|
@ -146,6 +155,15 @@ private:
|
|||
|
||||
bool createMsaaColorImage();
|
||||
void destroyMsaaColorImage();
|
||||
bool createDepthResolveImage();
|
||||
void destroyDepthResolveImage();
|
||||
|
||||
// MSAA depth resolve support (for sampling/copying resolved depth)
|
||||
bool depthResolveSupported_ = false;
|
||||
VkResolveModeFlagBits depthResolveMode_ = VK_RESOLVE_MODE_NONE;
|
||||
VkImage depthResolveImage = VK_NULL_HANDLE;
|
||||
VkImageView depthResolveImageView = VK_NULL_HANDLE;
|
||||
VmaAllocation depthResolveAllocation = VK_NULL_HANDLE;
|
||||
|
||||
// ImGui resources
|
||||
VkRenderPass imguiRenderPass = VK_NULL_HANDLE;
|
||||
|
|
|
|||
|
|
@ -82,6 +82,11 @@ public:
|
|||
void recreatePipelines();
|
||||
|
||||
void render(VkCommandBuffer cmd, VkDescriptorSet perFrameSet, const Camera& camera, float time);
|
||||
void captureSceneHistory(VkCommandBuffer cmd,
|
||||
VkImage srcColorImage,
|
||||
VkImage srcDepthImage,
|
||||
VkExtent2D srcExtent,
|
||||
bool srcDepthIsMsaa);
|
||||
|
||||
void setEnabled(bool enabled) { renderingEnabled = enabled; }
|
||||
bool isEnabled() const { return renderingEnabled; }
|
||||
|
|
@ -100,6 +105,8 @@ private:
|
|||
|
||||
void updateMaterialUBO(WaterSurface& surface);
|
||||
VkDescriptorSet allocateMaterialSet();
|
||||
void createSceneHistoryResources(VkExtent2D extent, VkFormat colorFormat, VkFormat depthFormat);
|
||||
void destroySceneHistoryResources();
|
||||
|
||||
VkContext* vkCtx = nullptr;
|
||||
|
||||
|
|
@ -108,8 +115,22 @@ private:
|
|||
VkPipelineLayout pipelineLayout = VK_NULL_HANDLE;
|
||||
VkDescriptorSetLayout materialSetLayout = VK_NULL_HANDLE;
|
||||
VkDescriptorPool materialDescPool = VK_NULL_HANDLE;
|
||||
VkDescriptorSetLayout sceneSetLayout = VK_NULL_HANDLE;
|
||||
VkDescriptorPool sceneDescPool = VK_NULL_HANDLE;
|
||||
VkDescriptorSet sceneSet = VK_NULL_HANDLE;
|
||||
static constexpr uint32_t MAX_WATER_SETS = 2048;
|
||||
|
||||
VkSampler sceneColorSampler = VK_NULL_HANDLE;
|
||||
VkSampler sceneDepthSampler = VK_NULL_HANDLE;
|
||||
VkImage sceneColorImage = VK_NULL_HANDLE;
|
||||
VmaAllocation sceneColorAlloc = VK_NULL_HANDLE;
|
||||
VkImageView sceneColorView = VK_NULL_HANDLE;
|
||||
VkImage sceneDepthImage = VK_NULL_HANDLE;
|
||||
VmaAllocation sceneDepthAlloc = VK_NULL_HANDLE;
|
||||
VkImageView sceneDepthView = VK_NULL_HANDLE;
|
||||
VkExtent2D sceneHistoryExtent = {0, 0};
|
||||
bool sceneHistoryReady = false;
|
||||
|
||||
std::vector<WaterSurface> surfaces;
|
||||
bool renderingEnabled = true;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue