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

74 lines
3.2 KiB
C++
Raw Normal View History

#pragma once
#include "MinimalEngine.h"
#include "GraphicsResources.h"
2020-03-02 19:07:49 +01:00
#include "Containers/Array.h"
#include "VertexShaderInput.h"
2020-09-19 14:36:50 +02:00
#include "ShaderCompiler.h"
2020-04-12 15:47:19 +02:00
namespace Seele
{
namespace Gfx
{
class Graphics
{
public:
Graphics();
virtual ~Graphics();
virtual void init(GraphicsInitializer initializer) = 0;
2020-06-02 11:46:18 +02:00
const QueueFamilyMapping getFamilyMapping() const
{
return queueMapping;
}
2020-09-19 14:36:50 +02:00
PShaderCompiler getShaderCompiler() const
{
return shaderCompiler;
}
2020-06-02 11:46:18 +02:00
2020-04-12 15:47:19 +02:00
virtual PWindow createWindow(const WindowCreateInfo &createInfo) = 0;
virtual PViewport createViewport(PWindow owner, const ViewportCreateInfo &createInfo) = 0;
2021-09-23 10:10:39 +02:00
virtual PRenderPass createRenderPass(PRenderTargetLayout 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
2020-04-12 15:47:19 +02:00
virtual PTexture2D createTexture2D(const TextureCreateInfo &createInfo) = 0;
2023-01-29 18:58:59 +01:00
virtual PTexture3D createTexture3D(const TextureCreateInfo &createInfo) = 0;
virtual PTextureCube createTextureCube(const TextureCreateInfo &createInfo) = 0;
virtual PUniformBuffer createUniformBuffer(const UniformBufferCreateInfo &bulkData) = 0;
2021-05-10 23:57:55 +02:00
virtual PStructuredBuffer createStructuredBuffer(const StructuredBufferCreateInfo &bulkData) = 0;
2020-05-05 01:51:13 +02:00
virtual PVertexBuffer createVertexBuffer(const VertexBufferCreateInfo &bulkData) = 0;
virtual PIndexBuffer 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;
2020-10-03 11:00:10 +02:00
virtual PVertexDeclaration createVertexDeclaration(const Array<VertexElement>& element) = 0;
2020-06-02 11:46:18 +02:00
virtual PVertexShader createVertexShader(const ShaderCreateInfo& createInfo) = 0;
virtual PControlShader createControlShader(const ShaderCreateInfo& createInfo) = 0;
virtual PEvaluationShader createEvaluationShader(const ShaderCreateInfo& createInfo) = 0;
virtual PGeometryShader createGeometryShader(const ShaderCreateInfo& createInfo) = 0;
virtual PFragmentShader createFragmentShader(const ShaderCreateInfo& createInfo) = 0;
2021-05-10 23:57:55 +02:00
virtual PComputeShader createComputeShader(const ShaderCreateInfo& createInfo) = 0;
2020-05-05 01:51:13 +02:00
virtual PGraphicsPipeline createGraphicsPipeline(const GraphicsPipelineCreateInfo& createInfo) = 0;
2021-05-06 17:02:10 +02:00
virtual PComputePipeline createComputePipeline(const ComputePipelineCreateInfo& createInfo) = 0;
2020-10-03 11:00:10 +02:00
virtual PSamplerState createSamplerState(const SamplerCreateInfo& createInfo) = 0;
2021-05-06 17:02:10 +02:00
virtual PDescriptorLayout createDescriptorLayout(const std::string& name = "") = 0;
2022-01-12 14:40:26 +01:00
virtual PPipelineLayout createPipelineLayout(PPipelineLayout baseLayout = nullptr) = 0;
2020-10-03 11:00:10 +02:00
2021-05-10 23:57:55 +02:00
virtual void copyTexture(Gfx::PTexture srcTexture, Gfx::PTexture dstTexture) = 0;
2020-10-03 11:00:10 +02:00
PVertexBuffer getNullVertexBuffer();
2020-06-02 11:46:18 +02:00
2020-04-12 15:47:19 +02:00
protected:
2020-10-03 11:00:10 +02:00
PVertexBuffer nullVertexBuffer;
2020-06-02 11:46:18 +02:00
QueueFamilyMapping queueMapping;
2020-09-19 14:36:50 +02:00
PShaderCompiler shaderCompiler;
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