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;
|
|
|
|
|
|
|
|
|
|
virtual PRenderPass createRenderPass(PRenderTargetLayout layout) = 0;
|
|
|
|
|
virtual void beginRenderPass(PRenderPass renderPass) = 0;
|
|
|
|
|
virtual void endRenderPass() = 0;
|
|
|
|
|
|
2020-05-05 01:51:13 +02:00
|
|
|
virtual void executeCommands(Array<PRenderCommand> commands) = 0;
|
|
|
|
|
|
2020-04-12 15:47:19 +02:00
|
|
|
virtual PTexture2D createTexture2D(const TextureCreateInfo &createInfo) = 0;
|
2020-11-03 01:18:30 +01:00
|
|
|
virtual PUniformBuffer createUniformBuffer(const UniformBufferCreateInfo &bulkData) = 0;
|
2020-04-12 15:47:19 +02:00
|
|
|
virtual PStructuredBuffer createStructuredBuffer(const BulkResourceData &bulkData) = 0;
|
2020-05-05 01:51:13 +02:00
|
|
|
virtual PVertexBuffer createVertexBuffer(const VertexBufferCreateInfo &bulkData) = 0;
|
|
|
|
|
virtual PIndexBuffer createIndexBuffer(const IndexBufferCreateInfo &bulkData) = 0;
|
|
|
|
|
virtual PRenderCommand createRenderCommand() = 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;
|
2020-05-05 01:51:13 +02:00
|
|
|
virtual PGraphicsPipeline createGraphicsPipeline(const GraphicsPipelineCreateInfo& createInfo) = 0;
|
2020-10-03 11:00:10 +02:00
|
|
|
virtual PSamplerState createSamplerState(const SamplerCreateInfo& createInfo) = 0;
|
|
|
|
|
|
|
|
|
|
virtual PDescriptorLayout createDescriptorLayout() = 0;
|
|
|
|
|
virtual PPipelineLayout createPipelineLayout() = 0;
|
|
|
|
|
|
|
|
|
|
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
|