// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - Renderer module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_RENDERDEVICEINSTANCE_HPP #define NAZARA_RENDERDEVICEINSTANCE_HPP #include #include #include #include #include #include #include #include #include #include namespace Nz { class CommandPool; class ShaderStageImpl; class NAZARA_RENDERER_API RenderDevice { public: RenderDevice() = default; virtual ~RenderDevice(); virtual std::unique_ptr InstantiateBuffer(BufferType type) = 0; virtual std::unique_ptr InstantiateCommandPool(QueueType queueType) = 0; virtual std::unique_ptr InstantiateRenderPipeline(RenderPipelineInfo pipelineInfo) = 0; virtual std::shared_ptr InstantiateRenderPipelineLayout(RenderPipelineLayoutInfo pipelineLayoutInfo) = 0; virtual std::shared_ptr InstantiateShaderStage(ShaderStageType type, ShaderLanguage lang, const void* source, std::size_t sourceSize) = 0; std::shared_ptr InstantiateShaderStage(ShaderStageType type, ShaderLanguage lang, const std::filesystem::path& sourcePath); virtual std::unique_ptr InstantiateTexture(const TextureInfo& params) = 0; virtual std::unique_ptr InstantiateTextureSampler(const TextureSamplerInfo& params) = 0; }; } #include #endif // NAZARA_RENDERDEVICEINSTANCE_HPP