OpenGL: Link contexts to device
This commit is contained in:
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user