// 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 namespace Nz::GL { template ContextObject::~ContextObject() { Destroy(); } template bool ContextObject::Create(const Context& context, CreateArgs... args) { Destroy(); m_context = &context; EnsureContext(); m_objectId = C::CreateHelper(*m_context, args...); if (m_objectId == InvalidObject) { NazaraError("Failed to create OpenGL object"); //< TODO: Handle error message return false; } return true; } template void ContextObject::Destroy() { if (IsValid()) { EnsureContext(); C::DestroyHelper(*m_context, m_objectId); m_objectId = InvalidObject; } } template bool ContextObject::IsValid() const { return m_objectId != InvalidObject; } template const Context* ContextObject::GetContext() const { return m_context.Get(); } template GLuint ContextObject::GetObjectId() const { return m_objectId; } template void ContextObject::SetDebugName(const std::string_view& name) { EnsureContext(); if (m_context->glObjectLabel) m_context->glObjectLabel(ObjectType, m_objectId, name.size(), name.data()); } template void ContextObject::EnsureContext() { const Context* activeContext = Context::GetCurrentContext(); if (activeContext != m_context.Get()) { if (!Context::SetCurrentContext(m_context.Get())) throw std::runtime_error("failed to activate context"); } } } #include