98 lines
3.2 KiB
C++
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
|