feat(RHI): 实现 RHIDevice 抽象基类
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "../RHIDevice.h"
|
||||
#include "../RHIEnums.h"
|
||||
#include "../RHITypes.h"
|
||||
#include "D3D12Enum.h"
|
||||
@@ -44,13 +45,13 @@ struct AdapterInfo {
|
||||
bool isSoftware;
|
||||
};
|
||||
|
||||
class D3D12Device {
|
||||
class D3D12Device : public RHIDevice {
|
||||
public:
|
||||
D3D12Device();
|
||||
~D3D12Device();
|
||||
~D3D12Device() override;
|
||||
|
||||
bool Initialize(bool enableDebugLayer = false);
|
||||
void Shutdown();
|
||||
bool Initialize(const RHIDeviceDesc& desc) override;
|
||||
void Shutdown() override;
|
||||
|
||||
ID3D12Device* GetDevice() const { return m_device.Get(); }
|
||||
IDXGIFactory4* GetFactory() const { return m_factory.Get(); }
|
||||
@@ -65,20 +66,33 @@ public:
|
||||
void SetDeviceRemoved() { m_isDeviceRemoved = true; }
|
||||
bool IsDeviceRemoved() const { return m_isDeviceRemoved; }
|
||||
|
||||
// Factory methods
|
||||
D3D12CommandQueue* CreateCommandQueue(const CommandQueueDesc& desc);
|
||||
D3D12CommandList* CreateCommandList(const CommandListDesc& desc);
|
||||
RHIBuffer* CreateBuffer(const BufferDesc& desc) override;
|
||||
RHITexture* CreateTexture(const TextureDesc& desc) override;
|
||||
RHISwapChain* CreateSwapChain(const SwapChainDesc& desc) override;
|
||||
RHICommandList* CreateCommandList(const CommandListDesc& desc) override;
|
||||
RHICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc) override;
|
||||
RHIShader* CompileShader(const ShaderCompileDesc& desc) override;
|
||||
RHIPipelineState* CreatePipelineState(const PipelineStateDesc& desc) override;
|
||||
RHIFence* CreateFence(const FenceDesc& desc) override;
|
||||
RHISampler* CreateSampler(const SamplerDesc& desc) override;
|
||||
|
||||
const RHICapabilities& GetCapabilities() const override;
|
||||
const RHIDeviceInfo& GetDeviceInfo() const override;
|
||||
|
||||
void* GetNativeDevice() override;
|
||||
void* GetNativeHandle() const override;
|
||||
|
||||
bool PollEvents() override;
|
||||
void SwapBuffers() override;
|
||||
bool ShouldClose() const override;
|
||||
void SetShouldClose(bool shouldClose) override;
|
||||
|
||||
D3D12CommandQueue* CreateCommandQueueImpl(const CommandQueueDesc& desc);
|
||||
D3D12CommandList* CreateCommandListImpl(const CommandListDesc& desc);
|
||||
D3D12CommandAllocator* CreateCommandAllocator(const CommandAllocatorDesc& desc);
|
||||
D3D12Fence* CreateFence(const FenceDesc& desc);
|
||||
D3D12DescriptorHeap* CreateDescriptorHeap(const DescriptorHeapDesc& desc);
|
||||
D3D12QueryHeap* CreateQueryHeap(const QueryHeapDesc& desc);
|
||||
D3D12RootSignature* CreateRootSignature(const RootSignatureDesc& desc);
|
||||
D3D12PipelineState* CreatePipelineState(const PipelineStateDesc& desc);
|
||||
D3D12Sampler* CreateSampler(const SamplerDesc& desc);
|
||||
D3D12Texture* CreateTexture(const TextureDesc& desc);
|
||||
D3D12Buffer* CreateBuffer(const BufferDesc& desc);
|
||||
D3D12SwapChain* CreateSwapChain(const SwapChainDesc& desc);
|
||||
D3D12Shader* CompileShader(const ShaderCompileDesc& desc);
|
||||
|
||||
D3D12RenderTargetView* CreateRenderTargetView(D3D12Buffer* resource, const RenderTargetViewDesc& desc);
|
||||
D3D12DepthStencilView* CreateDepthStencilView(D3D12Buffer* resource, const DepthStencilViewDesc& desc);
|
||||
@@ -86,8 +100,6 @@ public:
|
||||
D3D12UnorderedAccessView* CreateUnorderedAccessView(D3D12Buffer* resource, const UnorderedAccessViewDesc& desc);
|
||||
D3D12ConstantBufferView* CreateConstantBufferView(D3D12Buffer* resource, const ConstantBufferViewDesc& desc);
|
||||
|
||||
void* GetNativeHandle() const;
|
||||
|
||||
private:
|
||||
bool CreateDXGIFactory(bool enableDebugLayer);
|
||||
bool CreateDevice(IDXGIAdapter1* adapter);
|
||||
@@ -98,6 +110,8 @@ private:
|
||||
ComPtr<IDXGIAdapter1> m_adapter;
|
||||
|
||||
AdapterInfo m_adapterInfo;
|
||||
RHICapabilities m_capabilities;
|
||||
RHIDeviceInfo m_deviceInfo;
|
||||
bool m_isDeviceRemoved;
|
||||
bool m_initialized;
|
||||
};
|
||||
|
||||
@@ -3,37 +3,52 @@
|
||||
#include <string>
|
||||
#include <GLFW/glfw3.h>
|
||||
|
||||
#include "../RHIDevice.h"
|
||||
#include "../RHICapabilities.h"
|
||||
|
||||
namespace XCEngine {
|
||||
namespace RHI {
|
||||
|
||||
struct OpenGLDeviceInfo {
|
||||
std::string vendor;
|
||||
std::string renderer;
|
||||
std::string version;
|
||||
int majorVersion;
|
||||
int minorVersion;
|
||||
};
|
||||
|
||||
class OpenGLDevice {
|
||||
class OpenGLDevice : public RHIDevice {
|
||||
public:
|
||||
OpenGLDevice();
|
||||
~OpenGLDevice();
|
||||
~OpenGLDevice() override;
|
||||
|
||||
bool Initialize(const RHIDeviceDesc& desc) override;
|
||||
void Shutdown() override;
|
||||
|
||||
bool CreateRenderWindow(int width, int height, const char* title, bool enableDebug = false);
|
||||
bool InitializeWithExistingWindow(GLFWwindow* window);
|
||||
void Shutdown();
|
||||
|
||||
GLFWwindow* GetWindow() const { return m_window; }
|
||||
const OpenGLDeviceInfo& GetDeviceInfo() const { return m_deviceInfo; }
|
||||
const OpenGLDeviceInfo& GetDeviceInfoImpl() const { return m_deviceInfo; }
|
||||
|
||||
void SwapBuffers();
|
||||
bool PollEvents();
|
||||
void SetShouldClose(bool shouldClose);
|
||||
bool ShouldClose() const;
|
||||
void SwapBuffers() override;
|
||||
bool PollEvents() override;
|
||||
void SetShouldClose(bool shouldClose) override;
|
||||
bool ShouldClose() const override;
|
||||
|
||||
RHIBuffer* CreateBuffer(const BufferDesc& desc) override;
|
||||
RHITexture* CreateTexture(const TextureDesc& desc) override;
|
||||
RHISwapChain* CreateSwapChain(const SwapChainDesc& desc) override;
|
||||
RHICommandList* CreateCommandList(const CommandListDesc& desc) override;
|
||||
RHICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc) override;
|
||||
RHIShader* CompileShader(const ShaderCompileDesc& desc) override;
|
||||
RHIPipelineState* CreatePipelineState(const PipelineStateDesc& desc) override;
|
||||
RHIFence* CreateFence(const FenceDesc& desc) override;
|
||||
RHISampler* CreateSampler(const SamplerDesc& desc) override;
|
||||
|
||||
const RHICapabilities& GetCapabilities() const override;
|
||||
const RHIDeviceInfo& GetDeviceInfo() const override;
|
||||
|
||||
void* GetNativeDevice() override;
|
||||
void* GetNativeHandle() const override;
|
||||
|
||||
private:
|
||||
GLFWwindow* m_window;
|
||||
OpenGLDeviceInfo m_deviceInfo;
|
||||
RHICapabilities m_capabilities;
|
||||
RHIDeviceInfo m_deviceInfoBase;
|
||||
bool m_initialized;
|
||||
bool m_ownsWindow;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user