// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - OpenGL Renderer" // For conditions of distribution and use, see copyright notice in Config.hpp #include #include #include #include #include #include #include #include #include #include #include #include namespace Nz { OpenGLDevice::OpenGLDevice(GL::Loader& loader) : m_loader(loader) { m_referenceContext = loader.CreateContext(this, {}); if (!m_referenceContext) throw std::runtime_error("failed to create reference context"); m_contexts.insert(m_referenceContext.get()); } OpenGLDevice::~OpenGLDevice() { m_referenceContext.reset(); } std::unique_ptr OpenGLDevice::CreateContext(const GL::ContextParams& params) const { auto contextPtr = m_loader.CreateContext(this, params, m_referenceContext.get()); m_contexts.insert(contextPtr.get()); return contextPtr; } std::unique_ptr OpenGLDevice::CreateContext(const GL::ContextParams& params, WindowHandle handle) const { auto contextPtr = m_loader.CreateContext(this, params, handle, m_referenceContext.get()); m_contexts.insert(contextPtr.get()); return contextPtr; } std::shared_ptr OpenGLDevice::InstantiateBuffer(BufferType type) { return std::make_shared(*this, type); } std::shared_ptr OpenGLDevice::InstantiateCommandPool(QueueType /*queueType*/) { return std::make_shared(); } std::shared_ptr OpenGLDevice::InstantiateRenderPipeline(RenderPipelineInfo pipelineInfo) { return std::make_shared(*this, std::move(pipelineInfo)); } std::shared_ptr OpenGLDevice::InstantiateRenderPipelineLayout(RenderPipelineLayoutInfo pipelineLayoutInfo) { return std::make_shared(std::move(pipelineLayoutInfo)); } std::shared_ptr OpenGLDevice::InstantiateShaderStage(const ShaderAst& shaderAst, const ShaderWriter::States& states) { return std::make_shared(*this, shaderAst, states); } std::shared_ptr OpenGLDevice::InstantiateShaderStage(ShaderStageType type, ShaderLanguage lang, const void* source, std::size_t sourceSize) { return std::make_shared(*this, type, lang, source, sourceSize); } std::shared_ptr OpenGLDevice::InstantiateTexture(const TextureInfo& params) { return std::make_shared(*this, params); } std::shared_ptr OpenGLDevice::InstantiateTextureSampler(const TextureSamplerInfo& params) { return std::make_shared(*this, params); } }