Files
Seele/src/Engine/Graphics/Graphics.h
T

96 lines
3.6 KiB
C++
Raw Normal View History

#pragma once
#include "MinimalEngine.h"
2023-11-15 00:06:00 +01:00
#include "Initializer.h"
2023-10-26 18:37:29 +02:00
#include "Resources.h"
2020-03-02 19:07:49 +01:00
#include "Containers/Array.h"
2020-04-12 15:47:19 +02:00
namespace Seele
{
namespace Gfx
{
2023-10-26 18:37:29 +02:00
DECLARE_REF(Window)
DECLARE_REF(Viewport)
DECLARE_REF(RenderTargetLayout)
DECLARE_REF(ShaderCompiler)
DECLARE_REF(Texture)
DECLARE_REF(Texture2D)
DECLARE_REF(Texture3D)
DECLARE_REF(TextureCube)
DECLARE_REF(DescriptorLayout)
DECLARE_REF(VertexShader)
DECLARE_REF(FragmentShader)
DECLARE_REF(ComputeShader)
DECLARE_REF(TaskShader)
DECLARE_REF(MeshShader)
DECLARE_REF(ShaderBuffer)
DECLARE_REF(VertexBuffer)
DECLARE_REF(IndexBuffer)
DECLARE_REF(UniformBuffer)
DECLARE_REF(PipelineLayout)
2023-11-15 00:06:00 +01:00
DECLARE_REF(GraphicsPipeline)
DECLARE_REF(ComputePipeline)
2023-11-15 17:42:57 +01:00
DECLARE_REF(RenderCommand)
DECLARE_REF(ComputeCommand)
2020-04-12 15:47:19 +02:00
class Graphics
{
public:
Graphics();
virtual ~Graphics();
virtual void init(GraphicsInitializer initializer) = 0;
2020-06-02 11:46:18 +02:00
2023-10-31 17:55:30 +01:00
const QueueFamilyMapping getFamilyMapping() const
{
return queueMapping;
}
2020-09-19 14:36:50 +02:00
2023-11-01 23:12:30 +01:00
PShaderCompiler getShaderCompiler()
2020-09-19 14:36:50 +02:00
{
return shaderCompiler;
}
2020-06-02 11:46:18 +02:00
2023-11-01 23:12:30 +01:00
virtual OWindow createWindow(const WindowCreateInfo &createInfo) = 0;
virtual OViewport createViewport(PWindow owner, const ViewportCreateInfo &createInfo) = 0;
2020-04-12 15:47:19 +02:00
2023-11-01 23:12:30 +01:00
virtual ORenderPass createRenderPass(ORenderTargetLayout layout, PViewport renderArea) = 0;
2020-04-12 15:47:19 +02:00
virtual void beginRenderPass(PRenderPass renderPass) = 0;
virtual void endRenderPass() = 0;
2021-05-10 23:57:55 +02:00
virtual void executeCommands(const Array<PRenderCommand>& commands) = 0;
virtual void executeCommands(const Array<PComputeCommand>& commands) = 0;
2020-05-05 01:51:13 +02:00
2023-11-01 23:12:30 +01:00
virtual OTexture2D createTexture2D(const TextureCreateInfo &createInfo) = 0;
virtual OTexture3D createTexture3D(const TextureCreateInfo &createInfo) = 0;
virtual OTextureCube createTextureCube(const TextureCreateInfo &createInfo) = 0;
virtual OUniformBuffer createUniformBuffer(const UniformBufferCreateInfo &bulkData) = 0;
virtual OShaderBuffer createShaderBuffer(const ShaderBufferCreateInfo &bulkData) = 0;
virtual OVertexBuffer createVertexBuffer(const VertexBufferCreateInfo &bulkData) = 0;
virtual OIndexBuffer createIndexBuffer(const IndexBufferCreateInfo &bulkData) = 0;
2021-05-10 23:57:55 +02:00
virtual PRenderCommand createRenderCommand(const std::string& name = "") = 0;
virtual PComputeCommand createComputeCommand(const std::string& name = "") = 0;
2023-11-01 23:12:30 +01:00
virtual OVertexShader createVertexShader(const ShaderCreateInfo& createInfo) = 0;
virtual OFragmentShader createFragmentShader(const ShaderCreateInfo& createInfo) = 0;
virtual OComputeShader createComputeShader(const ShaderCreateInfo& createInfo) = 0;
virtual OMeshShader createMeshShader(const ShaderCreateInfo& createInfo) = 0;
virtual OTaskShader createTaskShader(const ShaderCreateInfo& createInfo) = 0;
2023-11-09 22:15:51 +01:00
virtual PGraphicsPipeline createGraphicsPipeline(LegacyPipelineCreateInfo createInfo) = 0;
virtual PGraphicsPipeline createGraphicsPipeline(MeshPipelineCreateInfo createInfo) = 0;
virtual PComputePipeline createComputePipeline(ComputePipelineCreateInfo createInfo) = 0;
2023-11-15 17:42:57 +01:00
virtual OSampler createSampler(const SamplerCreateInfo& createInfo) = 0;
2020-10-03 11:00:10 +02:00
2023-11-01 23:12:30 +01:00
virtual ODescriptorLayout createDescriptorLayout(const std::string& name = "") = 0;
virtual OPipelineLayout createPipelineLayout(PPipelineLayout baseLayout = nullptr) = 0;
2020-10-03 11:00:10 +02:00
2023-12-10 22:27:59 +01:00
virtual void resolveTexture(Gfx::PTexture source, Gfx::PTexture destination) = 0;
2023-11-07 16:55:13 +01:00
bool supportMeshShading() const { return meshShadingEnabled; }
2020-04-12 15:47:19 +02:00
protected:
2020-06-02 11:46:18 +02:00
QueueFamilyMapping queueMapping;
2023-11-01 23:12:30 +01:00
OShaderCompiler shaderCompiler;
2023-11-07 16:55:13 +01:00
bool meshShadingEnabled = false;
2020-04-12 15:47:19 +02:00
friend class Window;
};
2021-04-01 16:40:14 +02:00
DEFINE_REF(Graphics)
2020-04-12 15:47:19 +02:00
} // namespace Gfx
} // namespace Seele