OpenGL: Link contexts to device

This commit is contained in:
Lynix
2020-04-19 15:33:36 +02:00
parent bd6924d66d
commit 349e915e10
12 changed files with 78 additions and 21 deletions

View File

@@ -14,6 +14,11 @@
#include <string>
#include <unordered_set>
namespace Nz
{
class OpenGLDevice;
}
namespace Nz::GL
{
enum class ContextType
@@ -55,13 +60,13 @@ namespace Nz::GL
class Context
{
public:
Context() = default;
inline Context(const OpenGLDevice* device);
virtual ~Context();
virtual bool Activate() = 0;
virtual void EnableVerticalSync(bool enabled) = 0;
inline const OpenGLDevice* GetDevice() const;
inline ExtensionStatus GetExtensionStatus(Extension extension) const;
inline const ContextParams& GetParams() const;
@@ -95,6 +100,7 @@ namespace Nz::GL
std::array<ExtensionStatus, UnderlyingCast(Extension::Max) + 1> m_extensionStatus;
std::unordered_set<std::string> m_supportedExtensions;
const OpenGLDevice* m_device;
};
}

View File

@@ -7,6 +7,15 @@
namespace Nz::GL
{
inline Context::Context(const OpenGLDevice* device) :
m_device(device)
{
}
inline const OpenGLDevice* Context::GetDevice() const
{
return m_device;
}
inline ExtensionStatus Context::GetExtensionStatus(Extension extension) const
{

View File

@@ -13,6 +13,11 @@
#include <Nazara/OpenGLRenderer/Wrapper/Context.hpp>
#include <memory>
namespace Nz
{
class OpenGLDevice;
}
namespace Nz::GL
{
class Context;
@@ -25,8 +30,8 @@ namespace Nz::GL
Loader() = default;
virtual ~Loader();
virtual std::unique_ptr<Context> CreateContext(const ContextParams& params, Context* shareContext = nullptr) const = 0;
virtual std::unique_ptr<Context> CreateContext(const ContextParams& params, WindowHandle handle, Context* shareContext = nullptr) const = 0;
virtual std::unique_ptr<Context> CreateContext(const OpenGLDevice* device, const ContextParams& params, Context* shareContext = nullptr) const = 0;
virtual std::unique_ptr<Context> CreateContext(const OpenGLDevice* device, const ContextParams& params, WindowHandle handle, Context* shareContext = nullptr) const = 0;
virtual GLFunction LoadFunction(const char* name) const = 0;
};

View File

@@ -26,7 +26,7 @@ namespace Nz::GL
class WGLContext : public Context
{
public:
WGLContext(const WGLLoader& loader);
inline WGLContext(const OpenGLDevice* device, const WGLLoader& loader);
WGLContext(const WGLContext&) = delete;
WGLContext(WGLContext&&) = delete;
~WGLContext();

View File

@@ -7,6 +7,12 @@
namespace Nz::GL
{
inline GL::WGLContext::WGLContext(const OpenGLDevice* device, const WGLLoader& loader) :
Context(device),
m_loader(loader)
{
}
inline bool WGLContext::HasPlatformExtension(const std::string& str) const
{
return m_supportedPlatformExtensions.find(str) != m_supportedPlatformExtensions.end();

View File

@@ -24,8 +24,8 @@ namespace Nz::GL
WGLLoader(DynLib& openglLib);
~WGLLoader() = default;
std::unique_ptr<Context> CreateContext(const ContextParams& params, Context* shareContext) const override;
std::unique_ptr<Context> CreateContext(const ContextParams& params, WindowHandle handle, Context* shareContext) const override;
std::unique_ptr<Context> CreateContext(const OpenGLDevice* device, const ContextParams& params, Context* shareContext) const override;
std::unique_ptr<Context> CreateContext(const OpenGLDevice* device, const ContextParams& params, WindowHandle handle, Context* shareContext) const override;
GLFunction LoadFunction(const char* name) const override;