139 lines
2.7 KiB
C++
139 lines
2.7 KiB
C++
#pragma once
|
|
|
|
#include <glad/glad.h>
|
|
#include <string>
|
|
|
|
namespace extra2d {
|
|
|
|
// ============================================================================
|
|
// OpenGL 版本信息
|
|
// ============================================================================
|
|
struct GLVersion {
|
|
int major = 0;
|
|
int minor = 0;
|
|
bool es = false; // 是否为 ES 版本
|
|
};
|
|
|
|
// ============================================================================
|
|
// OpenGL 上下文管理类
|
|
// ============================================================================
|
|
class GLContext {
|
|
public:
|
|
/**
|
|
* @brief 获取全局 GLContext 实例
|
|
*/
|
|
static GLContext &get();
|
|
|
|
/**
|
|
* @brief 初始化 OpenGL 上下文
|
|
* @return 成功返回 true
|
|
*/
|
|
bool init();
|
|
|
|
/**
|
|
* @brief 关闭 OpenGL 上下文
|
|
*/
|
|
void shutdown();
|
|
|
|
/**
|
|
* @brief 检查上下文是否有效
|
|
* @return 有效返回 true
|
|
*/
|
|
bool isValid() const { return initialized_; }
|
|
|
|
/**
|
|
* @brief 获取 OpenGL 版本信息
|
|
*/
|
|
const GLVersion &getVersion() const { return version_; }
|
|
|
|
/**
|
|
* @brief 获取 OpenGL 版本字符串
|
|
*/
|
|
std::string getVersionString() const;
|
|
|
|
/**
|
|
* @brief 获取 GPU 厂商信息
|
|
*/
|
|
std::string getVendor() const;
|
|
|
|
/**
|
|
* @brief 获取 GPU 渲染器信息
|
|
*/
|
|
std::string getRenderer() const;
|
|
|
|
/**
|
|
* @brief 检查是否支持指定扩展
|
|
* @param extension 扩展名称
|
|
* @return 支持返回 true
|
|
*/
|
|
bool hasExtension(const std::string &extension) const;
|
|
|
|
/**
|
|
* @brief 获取最大纹理尺寸
|
|
*/
|
|
int getMaxTextureSize() const;
|
|
|
|
/**
|
|
* @brief 获取最大纹理单元数
|
|
*/
|
|
int getMaxTextureUnits() const;
|
|
|
|
/**
|
|
* @brief 获取最大顶点属性数
|
|
*/
|
|
int getMaxVertexAttribs() const;
|
|
|
|
/**
|
|
* @brief 获取最大 uniform 缓冲区绑定点数
|
|
*/
|
|
int getMaxUniformBufferBindings() const;
|
|
|
|
/**
|
|
* @brief 检查是否为 OpenGL ES
|
|
*/
|
|
bool isGLES() const { return version_.es; }
|
|
|
|
/**
|
|
* @brief 检查是否支持 VAO
|
|
*/
|
|
bool hasVAO() const;
|
|
|
|
/**
|
|
* @brief 检查是否支持 FBO
|
|
*/
|
|
bool hasFBO() const;
|
|
|
|
/**
|
|
* @brief 检查是否支持 Shader
|
|
*/
|
|
bool hasShader() const;
|
|
|
|
private:
|
|
GLContext() = default;
|
|
~GLContext() = default;
|
|
|
|
GLContext(const GLContext &) = delete;
|
|
GLContext &operator=(const GLContext &) = delete;
|
|
|
|
bool initialized_ = false;
|
|
GLVersion version_;
|
|
|
|
// 缓存的限制值
|
|
mutable int maxTextureSize_ = -1;
|
|
mutable int maxTextureUnits_ = -1;
|
|
mutable int maxVertexAttribs_ = -1;
|
|
mutable int maxUniformBufferBindings_ = -1;
|
|
|
|
/**
|
|
* @brief 解析 OpenGL 版本
|
|
*/
|
|
void parseVersion();
|
|
|
|
/**
|
|
* @brief 加载 OpenGL 扩展
|
|
*/
|
|
bool loadExtensions();
|
|
};
|
|
|
|
} // namespace extra2d
|