53 lines
1.9 KiB
C++
53 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include "XCEngine/RHI/RHIResourceView.h"
|
|
#include "XCEngine/RHI/Vulkan/VulkanCommon.h"
|
|
|
|
namespace XCEngine {
|
|
namespace RHI {
|
|
|
|
class VulkanBuffer;
|
|
class VulkanTexture;
|
|
|
|
class VulkanResourceView : public RHIResourceView {
|
|
public:
|
|
VulkanResourceView() = default;
|
|
~VulkanResourceView() override;
|
|
|
|
bool InitializeAsRenderTarget(VkDevice device, VulkanTexture* texture, const ResourceViewDesc& desc);
|
|
bool InitializeAsShaderResource(VkDevice device, VulkanTexture* texture, const ResourceViewDesc& desc);
|
|
bool InitializeAsVertexBuffer(VulkanBuffer* buffer, const ResourceViewDesc& desc);
|
|
bool InitializeAsIndexBuffer(VulkanBuffer* buffer, const ResourceViewDesc& desc);
|
|
|
|
void Shutdown() override;
|
|
void* GetNativeHandle() override;
|
|
bool IsValid() const override;
|
|
|
|
ResourceViewType GetViewType() const override { return m_viewType; }
|
|
ResourceViewDimension GetDimension() const override { return m_dimension; }
|
|
Format GetFormat() const override { return m_format; }
|
|
|
|
VulkanTexture* GetTexture() const { return m_texture; }
|
|
VkImageView GetImageView() const { return m_imageView; }
|
|
VulkanBuffer* GetBufferResource() const { return m_buffer; }
|
|
VkBuffer GetBuffer() const;
|
|
uint64_t GetBufferOffset() const { return m_bufferOffset; }
|
|
uint32_t GetBufferSize() const { return m_bufferSize; }
|
|
uint32_t GetBufferStride() const { return m_bufferStride; }
|
|
|
|
private:
|
|
VkDevice m_device = VK_NULL_HANDLE;
|
|
VkImageView m_imageView = VK_NULL_HANDLE;
|
|
VulkanTexture* m_texture = nullptr;
|
|
VulkanBuffer* m_buffer = nullptr;
|
|
ResourceViewType m_viewType = ResourceViewType::RenderTarget;
|
|
ResourceViewDimension m_dimension = ResourceViewDimension::Texture2D;
|
|
Format m_format = Format::Unknown;
|
|
uint64_t m_bufferOffset = 0;
|
|
uint32_t m_bufferSize = 0;
|
|
uint32_t m_bufferStride = 0;
|
|
};
|
|
|
|
} // namespace RHI
|
|
} // namespace XCEngine
|