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 "CommandBuffer.hpp"
11#include "VertexArrayObject.hpp"
12#include "Image.hpp"
13#include "Sampler.hpp"
14#include "DescriptorSet.hpp"
15#include "DescriptorSetLayout.hpp"
16
17namespace Grindstone {
18 class Window;
19}
20
21namespace Grindstone::GraphicsAPI {
22 enum class API {
23 OpenGL = 0,
24 Vulkan,
25 DirectX11,
26 DirectX12
27 };
28
29 class Core {
30 public:
31 struct CreateInfo {
32 Window* window;
33 bool debug;
34 };
35
36 virtual ~Core() {}
37 virtual bool Initialize(const CreateInfo& createInfo) = 0;
38 virtual void RegisterWindow(Window* window) = 0;
39 API GetAPI() const {
40 return apiType;
41 }
42 public:
43 virtual const char* GetVendorName() const = 0;
44 virtual const char* GetAdapterName() const = 0;
45 virtual const char* GetAPIName() const = 0;
46 virtual const char* GetAPIVersion() const = 0;
47 virtual const char* GetDefaultShaderExtension() const = 0;
48
49 virtual void Clear(ClearMode mask, float clearColor[4] = nullptr, float clearDepth = 0, uint32_t clearStencil = 0) = 0;
50
51 virtual void AdjustPerspective(float *perspective) = 0;
52
53 virtual void DeleteImage(Image* ptr) = 0;
54 virtual void DeleteSampler(Sampler* ptr) = 0;
55 virtual void DeleteFramebuffer(Framebuffer* ptr) = 0;
56 virtual void DeleteBuffer(Buffer* ptr) = 0;
57 virtual void DeleteGraphicsPipeline(GraphicsPipeline* ptr) = 0;
58 virtual void DeleteComputePipeline(ComputePipeline* ptr) = 0;
59 virtual void DeleteRenderPass(RenderPass* ptr) = 0;
60 virtual void DeleteDescriptorSet(DescriptorSet* ptr) = 0;
61 virtual void DeleteDescriptorSetLayout(DescriptorSetLayout* ptr) = 0;
62 virtual void DeleteCommandBuffer(CommandBuffer* ptr) = 0;
63 virtual void DeleteVertexArrayObject(VertexArrayObject* ptr) = 0;
64
65 virtual Framebuffer* CreateFramebuffer(const Framebuffer::CreateInfo& ci) = 0;
66 virtual RenderPass* CreateRenderPass(const RenderPass::CreateInfo& ci) = 0;
67 virtual GraphicsPipeline* CreateGraphicsPipeline(const GraphicsPipeline::CreateInfo& ci) = 0;
68 virtual ComputePipeline* CreateComputePipeline(const ComputePipeline::CreateInfo& ci) = 0;
69 virtual CommandBuffer* CreateCommandBuffer(const CommandBuffer::CreateInfo& ci) = 0;
70 virtual VertexArrayObject* CreateVertexArrayObject(const VertexArrayObject::CreateInfo& ci) = 0;
71 virtual Buffer* CreateBuffer(const Buffer::CreateInfo& ci) = 0;
72 virtual Sampler* CreateSampler(const Sampler::CreateInfo& createInfo) = 0;
73 virtual Image* CreateImage(const Image::CreateInfo& createInfo) = 0;
74 virtual DescriptorSet* CreateDescriptorSet(const DescriptorSet::CreateInfo& ci) = 0;
75 virtual DescriptorSetLayout* CreateDescriptorSetLayout(const DescriptorSetLayout::CreateInfo& ci) = 0;
76
77 virtual GraphicsPipeline* GetOrCreateGraphicsPipelineFromCache(const GraphicsPipeline::PipelineData& pipelineData, const VertexInputLayout* vertexInputLayout) = 0;
78
79 virtual void CopyDepthBufferFromReadToWrite(uint32_t srcWidth, uint32_t srcHeight, uint32_t dstWidth, uint32_t dstHeight) = 0;
80
81 virtual bool ShouldUseImmediateMode() const = 0;
82 virtual bool SupportsCommandBuffers() const = 0;
83 virtual bool SupportsTesselation() const = 0;
84 virtual bool SupportsGeometryShader() const = 0;
85 virtual bool SupportsComputeShader() const = 0;
86 virtual bool SupportsMultiDrawIndirect() const = 0;
87
88 virtual void BindDefaultFramebuffer() = 0;
89 virtual void BindDefaultFramebufferWrite() = 0;
90 virtual void BindDefaultFramebufferRead() = 0;
91
92 virtual void WaitUntilIdle() = 0;
93
94 virtual void BindGraphicsPipeline(GraphicsPipeline* pipeline) = 0;
95 virtual void BindVertexArrayObject(VertexArrayObject*) = 0;
96 virtual void DrawImmediateIndexed(GeometryType geom_type, bool largeBuffer, int32_t baseVertex, uint32_t indexOffsetPtr, uint32_t indexCount) = 0;
97 virtual void DrawImmediateVertices(GeometryType geom_type, uint32_t base, uint32_t count) = 0;
98 virtual void SetImmediateBlending(
99 BlendOperation colorOp, BlendFactor colorSrc, BlendFactor colorDst,
100 BlendOperation alphaOp, BlendFactor alphaSrc, BlendFactor alphaDst
101 ) = 0;
102 virtual void EnableDepthWrite(bool isDepthEnabled) = 0;
103 virtual void SetColorMask(ColorMask mask) = 0;
104 virtual void ResizeViewport(uint32_t w, uint32_t h) = 0;
105
106 const char* GetVendorNameFromID(uint32_t vendorID) {
107 switch (vendorID) {
108 case 0x1002:
109 return "Advanced Micro Devices (AMD)";
110 break;
111 case 0x1010:
112 return "Imagination Technologies";
113 break;
114 case 0x10DE:
115 return "NVIDIA Corporation";
116 break;
117 case 0x13B5:
118 return "Arm Limited";
119 break;
120 case 0x5143:
121 return "Qualcomm Technologies, Inc.";
122 break;
123 case 0x163C:
124 case 0x8086:
125 case 0x8087:
126 return "Intel Corporation";
127 break;
128 default:
129 return 0;
130 }
131 };
132 protected:
133 bool debug;
134 API apiType;
135 };
136}
Definition Buffer.hpp:9
Definition Core.hpp:29
Definition Window.hpp:12