77 lines
2.5 KiB
C++
77 lines
2.5 KiB
C++
#include "glsupport.h"
|
|
#include <algorithm>
|
|
|
|
namespace celestia::gl
|
|
{
|
|
|
|
#ifdef GL_ES
|
|
bool OES_vertex_array_object = false;
|
|
bool OES_texture_border_clamp = false;
|
|
#else
|
|
bool ARB_vertex_array_object = false;
|
|
bool EXT_framebuffer_object = false;
|
|
#endif
|
|
bool ARB_shader_texture_lod = false;
|
|
bool EXT_texture_compression_s3tc = false;
|
|
bool EXT_texture_filter_anisotropic = false;
|
|
bool MESA_pack_invert = false;
|
|
GLint maxPointSize = 0;
|
|
GLint maxTextureSize = 0;
|
|
GLfloat maxLineWidth = 0.0f;
|
|
GLint maxTextureAnisotropy = 0;
|
|
|
|
namespace
|
|
{
|
|
inline bool has_extension(const char* name) noexcept
|
|
{
|
|
return epoxy_has_gl_extension(name);
|
|
}
|
|
|
|
bool check_extension(util::array_view<std::string> list, const char* name) noexcept
|
|
{
|
|
return std::find(list.begin(), list.end(), std::string(name)) == list.end() && has_extension(name);
|
|
}
|
|
}
|
|
|
|
bool init(util::array_view<std::string> ignore) noexcept
|
|
{
|
|
#ifdef GL_ES
|
|
OES_vertex_array_object = check_extension(ignore, "GL_OES_vertex_array_object");
|
|
OES_texture_border_clamp = check_extension(ignore, "GL_OES_texture_border_clamp") || check_extension(ignore, "GL_EXT_texture_border_clamp") ;
|
|
#else
|
|
ARB_vertex_array_object = check_extension(ignore, "GL_ARB_vertex_array_object");
|
|
EXT_framebuffer_object = check_extension(ignore, "GL_EXT_framebuffer_object");
|
|
#endif
|
|
ARB_shader_texture_lod = check_extension(ignore, "GL_ARB_shader_texture_lod");
|
|
EXT_texture_compression_s3tc = check_extension(ignore, "GL_EXT_texture_compression_s3tc");
|
|
EXT_texture_filter_anisotropic = check_extension(ignore, "GL_EXT_texture_filter_anisotropic");
|
|
MESA_pack_invert = check_extension(ignore, "GL_MESA_pack_invert");
|
|
|
|
GLint pointSizeRange[2];
|
|
GLfloat lineWidthRange[2];
|
|
#ifdef GL_ES
|
|
glGetIntegerv(GL_ALIASED_POINT_SIZE_RANGE, pointSizeRange);
|
|
glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, lineWidthRange);
|
|
#else
|
|
glGetIntegerv(GL_SMOOTH_POINT_SIZE_RANGE, pointSizeRange);
|
|
glGetFloatv(GL_SMOOTH_LINE_WIDTH_RANGE, lineWidthRange);
|
|
#endif
|
|
maxPointSize = pointSizeRange[1];
|
|
maxLineWidth = lineWidthRange[1];
|
|
|
|
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize);
|
|
|
|
#ifndef GL_ES
|
|
if (gl::EXT_texture_filter_anisotropic)
|
|
glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maxTextureAnisotropy);
|
|
#endif
|
|
|
|
return true;
|
|
}
|
|
|
|
bool checkVersion(int v) noexcept
|
|
{
|
|
return epoxy_gl_version() >= v;
|
|
}
|
|
} // end namespace celestia::gl
|