Extra2D/include/renderer/rhi/rhi_device.h

170 lines
3.6 KiB
C
Raw Permalink Normal View History

#pragma once
#include <memory>
#include <renderer/rhi/rhi_types.h>
namespace extra2d {
/**
* @brief RHI
*
*
*/
class RHIDevice {
public:
virtual ~RHIDevice() = default;
/**
* @brief
* @param nativeWindow SDL_Window*
* @return
*/
virtual bool initialize(void* nativeWindow) = 0;
/**
* @brief
*/
virtual void shutdown() = 0;
//===========================================================================
// 资源创建
//===========================================================================
/**
* @brief
* @param desc
* @return
*/
virtual std::unique_ptr<RHIBuffer> createBuffer(const BufferDesc &desc) = 0;
/**
* @brief
* @param desc
* @return
*/
virtual std::unique_ptr<RHITexture>
createTexture(const TextureDesc &desc) = 0;
/**
* @brief
* @param desc
* @return
*/
virtual std::unique_ptr<RHIShader> createShader(const ShaderDesc &desc) = 0;
/**
* @brief 线
* @param desc 线
* @return 线
*/
virtual std::unique_ptr<RHIPipeline>
createPipeline(const PipelineDesc &desc) = 0;
/**
* @brief
* @param desc
* @return
*/
virtual std::unique_ptr<RHIFramebuffer>
createFramebuffer(const RenderPassDesc &desc) = 0;
/**
* @brief
* @return
*/
virtual std::unique_ptr<RHICommandList> createCommandList() = 0;
//===========================================================================
// 上下文管理
//===========================================================================
/**
* @brief
* @return
*/
virtual RHIContext *getContext() = 0;
/**
* @brief
* @return "OpenGL", "Vulkan"
*/
virtual const char *getBackendName() const = 0;
/**
* @brief GPU
*/
virtual void waitIdle() = 0;
/**
* @brief
* @return
*/
virtual const RenderStats &getStats() const = 0;
/**
* @brief
*/
virtual void resetStats() = 0;
};
/**
* @brief RHI
*
*
*/
class RHIContext {
public:
virtual ~RHIContext() = default;
/**
* @brief
* @return
*/
virtual bool initialize() = 0;
/**
* @brief
*/
virtual void shutdown() = 0;
/**
* @brief
*/
virtual void beginFrame() = 0;
/**
* @brief
*/
virtual void endFrame() = 0;
/**
* @brief
* @param x X
* @param y Y
* @param width
* @param height
*/
virtual void setViewport(int32_t x, int32_t y, uint32_t width,
uint32_t height) = 0;
/**
* @brief
*/
virtual void bindDefaultFramebuffer() = 0;
/**
* @brief
* @return
*/
virtual RHIFramebuffer *getDefaultFramebuffer() = 0;
/**
* @brief
* @param feature
* @return
*/
virtual bool isFeatureSupported(const char *feature) const = 0;
};
} // namespace extra2d