2020-02-25 00:44:40 +01:00
|
|
|
#pragma once
|
|
|
|
|
#include "MinimalEngine.h"
|
|
|
|
|
#include "GraphicsResources.h"
|
2020-03-02 19:07:49 +01:00
|
|
|
#include "Containers/Array.h"
|
2020-08-06 00:54:43 +02:00
|
|
|
#include "VertexShaderInput.h"
|
2020-09-19 14:36:50 +02:00
|
|
|
#include "ShaderCompiler.h"
|
2020-02-25 00:44:40 +01:00
|
|
|
|
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;
|
2020-11-03 01:18:30 +01:00
|
|
|
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
|