Grindstone Game Engine v0.2.0
An open source game engine and toolkit.
Loading...
Searching...
No Matches
GLCore.hpp
1#pragma once
2
3#define NOMINMAX
4#include <GL/gl3w.h>
5#include <vector>
6#include <unordered_map>
7
8#include <Common/Graphics/Core.hpp>
9#include <Common/Graphics/DLLDefs.hpp>
10
11namespace Grindstone::GraphicsAPI::OpenGL {
13 public:
14 virtual bool Initialize(const CreateInfo& createInfo) override;
15 virtual void Clear(ClearMode mask, float clear_color[4], float clear_depth, uint32_t clear_stencil) override;
16 virtual void AdjustPerspective(float *perspective) override;
17 virtual void RegisterWindow(Window* window) override;
18
19 virtual const char* GetVendorName() const override;
20 virtual const char* GetAdapterName() const override;
21 virtual const char* GetAPIName() const override;
22 virtual const char* GetAPIVersion() const override;
23 virtual const char* GetDefaultShaderExtension() const override;
24
25 virtual void DeleteFramebuffer(Grindstone::GraphicsAPI::Framebuffer *ptr) override;
26 virtual void DeleteBuffer(Grindstone::GraphicsAPI::Buffer *ptr) override;
27 virtual void DeleteGraphicsPipeline(Grindstone::GraphicsAPI::GraphicsPipeline* ptr) override;
28 virtual void DeleteComputePipeline(Grindstone::GraphicsAPI::ComputePipeline* ptr) override;
29 virtual void DeleteRenderPass(Grindstone::GraphicsAPI::RenderPass *ptr) override;
30 virtual void DeleteSampler(Grindstone::GraphicsAPI::Sampler* ptr) override;
31 virtual void DeleteImage(Grindstone::GraphicsAPI::Image* ptr) override;
32 virtual void DeleteDescriptorSet(Grindstone::GraphicsAPI::DescriptorSet *ptr) override;
33 virtual void DeleteDescriptorSetLayout(Grindstone::GraphicsAPI::DescriptorSetLayout *ptr) override;
34 virtual void DeleteCommandBuffer(Grindstone::GraphicsAPI::CommandBuffer * ptr) override;
35 virtual void DeleteVertexArrayObject(Grindstone::GraphicsAPI::VertexArrayObject *ptr) override;
36
37 virtual Grindstone::GraphicsAPI::Framebuffer* CreateFramebuffer(const Framebuffer::CreateInfo& ci) override;
38 virtual Grindstone::GraphicsAPI::RenderPass* CreateRenderPass(const RenderPass::CreateInfo& ci) override;
39 virtual Grindstone::GraphicsAPI::GraphicsPipeline* CreateGraphicsPipeline(const GraphicsPipeline::CreateInfo& ci) override;
40 virtual Grindstone::GraphicsAPI::ComputePipeline* CreateComputePipeline(const ComputePipeline::CreateInfo& ci) override;
41 virtual Grindstone::GraphicsAPI::CommandBuffer* CreateCommandBuffer(const CommandBuffer::CreateInfo& ci) override;
42 virtual Grindstone::GraphicsAPI::VertexArrayObject* CreateVertexArrayObject(const VertexArrayObject::CreateInfo& gp) override;
43 virtual Grindstone::GraphicsAPI::Buffer* CreateBuffer(const Buffer::CreateInfo& ci) override;
44 virtual Grindstone::GraphicsAPI::Sampler* CreateSampler(const Sampler::CreateInfo& createInfo) override;
45 virtual Grindstone::GraphicsAPI::Image* CreateImage(const Image::CreateInfo& createInfo) override;
46 virtual Grindstone::GraphicsAPI::DescriptorSet* CreateDescriptorSet(const DescriptorSet::CreateInfo& createInfo) override;
47 virtual Grindstone::GraphicsAPI::DescriptorSetLayout* CreateDescriptorSetLayout(const DescriptorSetLayout::CreateInfo& createInfo) override;
48
49 virtual Grindstone::GraphicsAPI::GraphicsPipeline* GetOrCreateGraphicsPipelineFromCache(const GraphicsPipeline::PipelineData& pipelineData, const VertexInputLayout* vertexInputLayout) override;
50
51 virtual void CopyDepthBufferFromReadToWrite(uint32_t srcWidth, uint32_t srcHeight, uint32_t dstWidth, uint32_t dstHeight) override;
52
53 virtual bool ShouldUseImmediateMode() const override;
54 virtual bool SupportsCommandBuffers() const override;
55 virtual bool SupportsTesselation() const override;
56 virtual bool SupportsGeometryShader() const override;
57 virtual bool SupportsComputeShader() const override;
58 virtual bool SupportsMultiDrawIndirect() const override;
59
60 virtual void WaitUntilIdle() override;
61
62 virtual void BindGraphicsPipeline(Grindstone::GraphicsAPI::GraphicsPipeline* pipeline) override;
63 virtual void BindVertexArrayObject(Grindstone::GraphicsAPI::VertexArrayObject *) override;
64 virtual void DrawImmediateIndexed(GeometryType geom_type, bool largeBuffer, int32_t baseVertex, uint32_t indexOffsetPtr, uint32_t indexCount) override;
65 virtual void DrawImmediateVertices(GeometryType geom_type, uint32_t base, uint32_t count) override;
66 virtual void SetImmediateBlending(
67 BlendOperation colorOp, BlendFactor colorSrc, BlendFactor colorDst,
68 BlendOperation alphaOp, BlendFactor alphaSrc, BlendFactor alphaDst
69 ) override;
70 virtual void EnableDepthWrite(bool state) override;
71 virtual void BindDefaultFramebuffer() override;
72 virtual void BindDefaultFramebufferWrite() override;
73 virtual void BindDefaultFramebufferRead() override;
74 virtual void SetColorMask(ColorMask mask) override;
75 virtual void ResizeViewport(uint32_t w, uint32_t h) override;
76 private:
77 std::string vendorName;
78 std::string adapterName;
79 std::string apiVersion;
80
81 Window* primaryWindow;
82
83 using PipelineHash = size_t;
84 std::unordered_map<PipelineHash, Grindstone::GraphicsAPI::GraphicsPipeline*> graphicsPipelineCache;
85 };
86}
Definition Buffer.hpp:56
Definition CommandBuffer.hpp:59
Definition ComputePipeline.hpp:18
Definition Core.hpp:29
Definition DescriptorSetLayout.hpp:13
Definition DescriptorSet.hpp:15
Definition Framebuffer.hpp:16
Definition GraphicsPipeline.hpp:19
Definition Image.hpp:48
Definition RenderPass.hpp:27
Definition Sampler.hpp:31
Definition VertexArrayObject.hpp:9
Definition Window.hpp:12