mirror of
https://github.com/stenzek/duckstation.git
synced 2025-06-12 22:37:21 +00:00
57 lines
1.5 KiB
C++
57 lines
1.5 KiB
C++
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
|
|
// SPDX-License-Identifier: CC-BY-NC-ND-4.0
|
|
|
|
#pragma once
|
|
|
|
#include "window_info.h"
|
|
|
|
#include "common/types.h"
|
|
|
|
#include <memory>
|
|
#include <span>
|
|
|
|
class Error;
|
|
|
|
class OpenGLContext
|
|
{
|
|
public:
|
|
OpenGLContext();
|
|
virtual ~OpenGLContext();
|
|
|
|
using SurfaceHandle = void*;
|
|
static constexpr SurfaceHandle MAIN_SURFACE = nullptr;
|
|
|
|
enum class Profile
|
|
{
|
|
NoProfile,
|
|
Core,
|
|
ES
|
|
};
|
|
|
|
struct Version
|
|
{
|
|
Profile profile;
|
|
int major_version;
|
|
int minor_version;
|
|
};
|
|
|
|
ALWAYS_INLINE bool IsGLES() const { return (m_version.profile == Profile::ES); }
|
|
|
|
virtual void* GetProcAddress(const char* name) = 0;
|
|
virtual SurfaceHandle CreateSurface(WindowInfo& wi, Error* error = nullptr) = 0;
|
|
virtual void DestroySurface(SurfaceHandle handle) = 0;
|
|
virtual void ResizeSurface(WindowInfo& wi, SurfaceHandle handle) = 0;
|
|
virtual bool SwapBuffers() = 0;
|
|
virtual bool IsCurrent() const = 0;
|
|
virtual bool MakeCurrent(SurfaceHandle surface, Error* error = nullptr) = 0;
|
|
virtual bool DoneCurrent() = 0;
|
|
virtual bool SupportsNegativeSwapInterval() const = 0;
|
|
virtual bool SetSwapInterval(s32 interval, Error* error = nullptr) = 0;
|
|
virtual std::unique_ptr<OpenGLContext> CreateSharedContext(WindowInfo& wi, SurfaceHandle* surface, Error* error) = 0;
|
|
|
|
static std::unique_ptr<OpenGLContext> Create(WindowInfo& wi, SurfaceHandle* surface, Error* error);
|
|
|
|
protected:
|
|
Version m_version = {};
|
|
};
|