procedural-3d-engine/examples/variablerateshading/variablerateshading.h
Sascha Willems d0211d1f14 Replaced per-sample validation define with global define in base class
Toggling validation via command line arguments is the preferred way anyway
Define was also added as a CMake option
2023-12-30 13:15:37 +01:00

70 lines
No EOL
1.9 KiB
C++

/*
* Vulkan Example - Variable rate shading
*
* Copyright (C) 2020-2023 by Sascha Willems - www.saschawillems.de
*
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*/
#include "vulkanexamplebase.h"
#include "VulkanglTFModel.h"
class VulkanExample : public VulkanExampleBase
{
public:
vkglTF::Model scene;
struct ShadingRateImage {
VkImage image{ VK_NULL_HANDLE };
VkDeviceMemory memory;
VkImageView view;
} shadingRateImage;
bool enableShadingRate = true;
bool colorShadingRate = false;
struct ShaderData {
vks::Buffer buffer;
struct Values {
glm::mat4 projection;
glm::mat4 view;
glm::mat4 model = glm::mat4(1.0f);
glm::vec4 lightPos = glm::vec4(0.0f, 2.5f, 0.0f, 1.0f);
glm::vec4 viewPos;
int32_t colorShadingRate;
} values;
} shaderData;
struct Pipelines {
VkPipeline opaque;
VkPipeline masked;
} pipelines;
VkPipelineLayout pipelineLayout;
VkDescriptorSet descriptorSet;
VkDescriptorSetLayout descriptorSetLayout;
VkPhysicalDeviceFragmentShadingRatePropertiesKHR physicalDeviceShadingRateImageProperties{};
VkPhysicalDeviceFragmentShadingRateFeaturesKHR enabledPhysicalDeviceShadingRateImageFeaturesKHR{};
PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR vkGetPhysicalDeviceFragmentShadingRatesKHR{ nullptr };
PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR{ nullptr };
PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR{ nullptr };
VulkanExample();
~VulkanExample();
virtual void getEnabledFeatures();
void handleResize();
void buildCommandBuffers();
void loadAssets();
void prepareShadingRateImage();
void setupDescriptors();
void preparePipelines();
void prepareUniformBuffers();
void updateUniformBuffers();
void prepare();
void setupFrameBuffer() override;
void setupRenderPass() override;
virtual void render();
virtual void OnUpdateUIOverlay(vks::UIOverlay* overlay);
};