Files
XCEngine/engine/include/XCEngine/RHI/OpenGL/OpenGLResourceView.h

98 lines
3.2 KiB
C++

#pragma once
#include "XCEngine/RHI/OpenGL/OpenGLFramebuffer.h"
#include "XCEngine/RHI/OpenGL/OpenGLTexture.h"
#include "XCEngine/RHI/RHIResourceView.h"
#include "XCEngine/RHI/RHITypes.h"
namespace XCEngine {
namespace RHI {
class OpenGLTexture;
class OpenGLBuffer;
class OpenGLFramebuffer;
class OpenGLTextureUnitAllocator;
class OpenGLUniformBufferManager;
class OpenGLResourceView : public RHIResourceView {
public:
OpenGLResourceView();
~OpenGLResourceView() override;
void Shutdown() override;
void* GetNativeHandle() override;
bool IsValid() const override;
bool InitializeAsRenderTarget(
OpenGLTexture* texture,
const ResourceViewDesc& desc,
OpenGLFramebuffer* framebuffer);
bool InitializeAsDepthStencil(
OpenGLTexture* texture,
const ResourceViewDesc& desc,
OpenGLFramebuffer* framebuffer);
bool InitializeAsShaderResource(
OpenGLTexture* texture,
const ResourceViewDesc& desc,
OpenGLTextureUnitAllocator* allocator);
bool InitializeAsShaderResource(
OpenGLBuffer* buffer,
const ResourceViewDesc& desc);
bool InitializeAsUnorderedAccess(
OpenGLTexture* texture,
const ResourceViewDesc& desc,
OpenGLTextureUnitAllocator* allocator);
bool InitializeAsUnorderedAccess(
OpenGLBuffer* buffer,
const ResourceViewDesc& desc);
bool InitializeAsConstantBuffer(
OpenGLBuffer* buffer,
const ResourceViewDesc& desc,
OpenGLUniformBufferManager* manager);
bool InitializeAsVertexBuffer(
OpenGLBuffer* buffer,
const ResourceViewDesc& desc);
bool InitializeAsIndexBuffer(
OpenGLBuffer* buffer,
const ResourceViewDesc& desc);
ResourceViewType GetViewType() const override { return m_viewType; }
ResourceViewDimension GetDimension() const override { return m_dimension; }
Format GetFormat() const override { return m_format; }
unsigned int GetFramebuffer() const;
int32_t GetTextureUnit() const { return m_textureUnit; }
int32_t GetBindingPoint() const { return m_bindingPoint; }
unsigned int GetTexture() const;
unsigned int GetBuffer() const;
uint64_t GetBufferOffset() const { return m_bufferOffset; }
uint32_t GetBufferSize() const { return m_bufferSize; }
uint32_t GetBufferStride() const { return m_bufferStride; }
const FramebufferAttachment& GetFramebufferAttachment() const { return m_framebufferAttachment; }
RHITexture* GetTextureResource() const override { return m_texture; }
OpenGLTexture* GetOpenGLTextureResource() const { return m_texture; }
private:
ResourceViewType m_viewType;
Format m_format;
ResourceViewDimension m_dimension;
unsigned int m_framebufferID;
int32_t m_textureUnit;
int32_t m_bindingPoint;
OpenGLTexture* m_texture;
OpenGLBuffer* m_buffer;
OpenGLFramebuffer* m_framebuffer;
OpenGLTextureUnitAllocator* m_textureUnitAllocator;
OpenGLUniformBufferManager* m_uniformBufferManager;
FramebufferAttachment m_framebufferAttachment;
uint64_t m_bufferOffset;
uint32_t m_bufferSize;
uint32_t m_bufferStride;
};
} // namespace RHI
} // namespace XCEngine