Grindstone Game Engine v0.2.0
An open source game engine and toolkit.
Loading...
Searching...
No Matches
Core.hpp
1#pragma once
2
3#include <Common/Window/Window.hpp>
4
5#include "Buffer.hpp"
6#include "RenderPass.hpp"
7#include "Framebuffer.hpp"
8#include "GraphicsPipeline.hpp"
9#include "ComputePipeline.hpp"
10#include "PipelineLayout.hpp"
11#include "CommandBuffer.hpp"
12#include "VertexArrayObject.hpp"
13#include "Image.hpp"
14#include "Sampler.hpp"
15#include "DescriptorSet.hpp"
16#include "DescriptorSetLayout.hpp"
17
18namespace Grindstone {
19 class Window;
20}
21
22namespace Grindstone::GraphicsAPI {
23 enum class API {
24 OpenGL = 0,
25 Vulkan,
26 DirectX11,
27 DirectX12
28 };
29
30 enum class VendorType {
31 Unset,
32 Unknown,
33 AMD,
34 Imagination,
35 Nvidia,
36 Arm,
37 Qualcomm,
38 Intel
39 };
40
41 class Core {
42 public:
43 struct CreateInfo {
44 Window* window;
45 bool debug;
46 };
47
48 virtual ~Core() {}
49 virtual bool Initialize(const CreateInfo& createInfo) = 0;
50 virtual void RegisterWindow(Window* window) = 0;
51 API GetAPI() const {
52 return apiType;
53 }
54 public:
55 virtual const char* GetVendorName() const = 0;
56 virtual const char* GetAdapterName() const = 0;
57 virtual const char* GetAPIName() const = 0;
58 virtual const char* GetAPIVersion() const = 0;
59 virtual const char* GetDefaultShaderExtension() const = 0;
60
61 virtual void Clear(ClearMode mask, float clearColor[4] = nullptr, float clearDepth = 0, uint32_t clearStencil = 0) = 0;
62
63 virtual void AdjustPerspective(float *perspective) = 0;
64
65 virtual void DeleteImage(Image* ptr) = 0;
66 virtual void DeleteSampler(Sampler* ptr) = 0;
67 virtual void DeleteFramebuffer(Framebuffer* ptr) = 0;
68 virtual void DeleteBuffer(Buffer* ptr) = 0;
69 virtual void DeleteGraphicsPipeline(GraphicsPipeline* ptr) = 0;
70 virtual void DeleteComputePipeline(ComputePipeline* ptr) = 0;
71 virtual void DeletePipelineLayout(PipelineLayout* ptr) = 0;
72 virtual void DeleteRenderPass(RenderPass* ptr) = 0;
73 virtual void DeleteDescriptorSet(DescriptorSet* ptr) = 0;
74 virtual void DeleteDescriptorSetLayout(DescriptorSetLayout* ptr) = 0;
75 virtual void DeleteCommandBuffer(CommandBuffer* ptr) = 0;
76 virtual void DeleteVertexArrayObject(VertexArrayObject* ptr) = 0;
77
78 virtual GraphicsAPI::Framebuffer* CreateFramebuffer(const Framebuffer::CreateInfo& ci) = 0;
79 virtual GraphicsAPI::RenderPass* CreateRenderPass(const RenderPass::CreateInfo& ci) = 0;
80 virtual GraphicsAPI::GraphicsPipeline* CreateGraphicsPipeline(const GraphicsPipeline::CreateInfo& ci) = 0;
81 virtual GraphicsAPI::ComputePipeline* CreateComputePipeline(const ComputePipeline::CreateInfo& ci) = 0;
82 virtual GraphicsAPI::PipelineLayout* CreatePipelineLayout(const PipelineLayout::CreateInfo& ci) = 0;
83 virtual GraphicsAPI::CommandBuffer* CreateCommandBuffer(const CommandBuffer::CreateInfo& ci) = 0;
84 virtual GraphicsAPI::VertexArrayObject* CreateVertexArrayObject(const VertexArrayObject::CreateInfo& ci) = 0;
85 virtual GraphicsAPI::Buffer* CreateBuffer(const Buffer::CreateInfo& ci) = 0;
86 virtual GraphicsAPI::Sampler* CreateSampler(const Sampler::CreateInfo& createInfo) = 0;
87 virtual GraphicsAPI::Image* CreateImage(const Image::CreateInfo& createInfo) = 0;
88 virtual GraphicsAPI::DescriptorSet* CreateDescriptorSet(const DescriptorSet::CreateInfo& ci) = 0;
89 virtual GraphicsAPI::DescriptorSetLayout* CreateDescriptorSetLayout(const DescriptorSetLayout::CreateInfo& ci) = 0;
90
91 virtual GraphicsAPI::DescriptorSetLayout* GetOrCreateDescriptorSetLayoutFromCache(const Grindstone::GraphicsAPI::DescriptorSetLayout::CreateInfo& createInfo) = 0;
92 virtual GraphicsAPI::GraphicsPipeline* GetOrCreateGraphicsPipelineFromCache(
93 GraphicsAPI::PipelineLayout* pipelineLayout,
95 const GraphicsAPI::VertexInputLayout* vertexInputLayout
96 ) = 0;
97 virtual Grindstone::GraphicsAPI::PipelineLayout* GetOrCreatePipelineLayoutFromCache(const Grindstone::GraphicsAPI::PipelineLayout::CreateInfo& createInfo) = 0;
98 virtual GraphicsAPI::Sampler* GetOrCreateSampler(const Grindstone::GraphicsAPI::Sampler::CreateInfo& createInfo) = 0;
99
100 virtual void CopyDepthBufferFromReadToWrite(uint32_t srcWidth, uint32_t srcHeight, uint32_t dstWidth, uint32_t dstHeight) = 0;
101
102 virtual bool ShouldUseImmediateMode() const = 0;
103 virtual bool SupportsCommandBuffers() const = 0;
104 virtual bool SupportsTesselation() const = 0;
105 virtual bool SupportsGeometryShader() const = 0;
106 virtual bool SupportsComputeShader() const = 0;
107 virtual bool SupportsMultiDrawIndirect() const = 0;
108
109 virtual void BindDefaultFramebuffer() = 0;
110 virtual void BindDefaultFramebufferWrite() = 0;
111 virtual void BindDefaultFramebufferRead() = 0;
112
113 virtual void WaitUntilIdle() = 0;
114
115 virtual void BindGraphicsPipeline(GraphicsPipeline* pipeline) = 0;
116 virtual void BindVertexArrayObject(VertexArrayObject*) = 0;
117 virtual void DrawImmediateIndexed(GeometryType geom_type, bool largeBuffer, int32_t baseVertex, uint32_t indexOffsetPtr, uint32_t indexCount) = 0;
118 virtual void DrawImmediateVertices(GeometryType geom_type, uint32_t base, uint32_t count) = 0;
119 virtual void SetImmediateBlending(
120 BlendOperation colorOp, BlendFactor colorSrc, BlendFactor colorDst,
121 BlendOperation alphaOp, BlendFactor alphaSrc, BlendFactor alphaDst
122 ) = 0;
123 virtual void EnableDepthWrite(bool isDepthEnabled) = 0;
124 virtual void SetColorMask(ColorMask mask) = 0;
125 virtual void ResizeViewport(uint32_t w, uint32_t h) = 0;
126
127 protected:
128 bool debug;
129 API apiType;
130 VendorType vendorType;
131 };
132}
Definition Buffer.hpp:9
Definition Buffer.hpp:49
Definition CommandBuffer.hpp:109
Definition ComputePipeline.hpp:19
Definition Core.hpp:41
Definition DescriptorSetLayout.hpp:14
Definition DescriptorSet.hpp:15
Definition Framebuffer.hpp:16
Definition GraphicsPipeline.hpp:20
Definition Image.hpp:49
Definition PipelineLayout.hpp:18
Definition RenderPass.hpp:10
Definition Sampler.hpp:49
Definition VertexArrayObject.hpp:9
Definition Window.hpp:12