Use the new OpenGL Loader Generator for the gl loader

This commit is contained in:
Nikita Lisitsa 2020-10-27 23:14:12 +03:00
parent 98a015fbed
commit fe5cd6510c
10 changed files with 2997 additions and 3375 deletions

View file

@ -569,7 +569,7 @@ struct cloud_app
gl::Enable(gl::BLEND); gl::Enable(gl::BLEND);
gl::BlendFunc(gl::SRC_ALPHA, gl::ONE_MINUS_SRC_ALPHA); gl::BlendFunc(gl::SRC_ALPHA, gl::ONE_MINUS_SRC_ALPHA);
gl::DepthMask(gl::FALSE_); gl::DepthMask(gl::FALSE);
cloud_program.bind(); cloud_program.bind();
cloud_program["u_transform"] = camera.transform(); cloud_program["u_transform"] = camera.transform();
@ -586,7 +586,7 @@ struct cloud_app
shadow_texture.bind(); shadow_texture.bind();
slice_mesh.draw(); slice_mesh.draw();
gl::DepthMask(gl::TRUE_); gl::DepthMask(gl::TRUE);
} }
}; };

View file

@ -57,8 +57,8 @@ namespace psemek::app
impl().start_time = clock::now(); impl().start_time = clock::now();
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, gl::sys::GetLeastMajorVersion()); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, gl::sys::major_version());
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, gl::sys::GetLeastMinorVersion()); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, gl::sys::minor_version());
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
@ -85,13 +85,16 @@ namespace psemek::app
SDL_GL_MakeCurrent(impl().window, impl().gl_context); SDL_GL_MakeCurrent(impl().window, impl().gl_context);
if (!gl::sys::LoadFunctions()) if (!gl::sys::initialize())
throw std::runtime_error("Failed to load OpenGL functions"); throw std::runtime_error("Failed to load OpenGL functions");
auto vendor = gl::GetString(gl::VENDOR); auto vendor = gl::GetString(gl::VENDOR);
auto renderer = gl::GetString(gl::RENDERER); auto renderer = gl::GetString(gl::RENDERER);
log::info() << "Initialized OpenGL " << gl::sys::GetMajorVersion() << '.' << gl::sys::GetMinorVersion() << ", " << vendor << ", " << renderer; int major, minor;
gl::GetIntegerv(gl::MAJOR_VERSION, &major);
gl::GetIntegerv(gl::MINOR_VERSION, &minor);
log::info() << "Initialized OpenGL " << major << '.' << minor << ", " << vendor << ", " << renderer;
SDL_GetWindowSize(impl().window, &impl().width, &impl().height); SDL_GetWindowSize(impl().window, &impl().width, &impl().height);
} }

View file

@ -0,0 +1,18 @@
{
"spec_file": "gl.xml",
"api": "gl",
"version": "3.3",
"profile": "core",
"extensions": [
"ARB_texture_filter_anisotropic"
],
"indent": "\t",
"namespace": "gl",
"loader_namespace": "sys",
"internal_namespace": "internal",
"internal_prefix": "",
"undef": 4,
"strip": true,
"out_header": "gl.hpp",
"out_source": "gl.cpp"
}

View file

@ -81,7 +81,7 @@ namespace psemek::gfx
static constexpr GLint size = 1; static constexpr GLint size = 1;
static constexpr GLenum type = gl::UNSIGNED_BYTE; static constexpr GLenum type = gl::UNSIGNED_BYTE;
static constexpr GLboolean normalized = gl::FALSE_; static constexpr GLboolean normalized = gl::FALSE;
}; };
template <> template <>
@ -91,7 +91,7 @@ namespace psemek::gfx
static constexpr GLint size = 1; static constexpr GLint size = 1;
static constexpr GLenum type = gl::BYTE; static constexpr GLenum type = gl::BYTE;
static constexpr GLboolean normalized = gl::FALSE_; static constexpr GLboolean normalized = gl::FALSE;
}; };
template <> template <>
@ -101,7 +101,7 @@ namespace psemek::gfx
static constexpr GLint size = 1; static constexpr GLint size = 1;
static constexpr GLenum type = gl::UNSIGNED_SHORT; static constexpr GLenum type = gl::UNSIGNED_SHORT;
static constexpr GLboolean normalized = gl::FALSE_; static constexpr GLboolean normalized = gl::FALSE;
}; };
template <> template <>
@ -111,7 +111,7 @@ namespace psemek::gfx
static constexpr GLint size = 1; static constexpr GLint size = 1;
static constexpr GLenum type = gl::SHORT; static constexpr GLenum type = gl::SHORT;
static constexpr GLboolean normalized = gl::FALSE_; static constexpr GLboolean normalized = gl::FALSE;
}; };
template <> template <>
@ -121,7 +121,7 @@ namespace psemek::gfx
static constexpr GLint size = 1; static constexpr GLint size = 1;
static constexpr GLenum type = gl::UNSIGNED_INT; static constexpr GLenum type = gl::UNSIGNED_INT;
static constexpr GLboolean normalized = gl::FALSE_; static constexpr GLboolean normalized = gl::FALSE;
}; };
template <> template <>
@ -131,7 +131,7 @@ namespace psemek::gfx
static constexpr GLint size = 1; static constexpr GLint size = 1;
static constexpr GLenum type = gl::INT; static constexpr GLenum type = gl::INT;
static constexpr GLboolean normalized = gl::FALSE_; static constexpr GLboolean normalized = gl::FALSE;
}; };
template <> template <>
@ -141,7 +141,7 @@ namespace psemek::gfx
static constexpr GLint size = 1; static constexpr GLint size = 1;
static constexpr GLenum type = gl::FLOAT; static constexpr GLenum type = gl::FLOAT;
static constexpr GLboolean normalized = gl::FALSE_; static constexpr GLboolean normalized = gl::FALSE;
}; };
template <> template <>
@ -151,7 +151,7 @@ namespace psemek::gfx
static constexpr GLint size = 1; static constexpr GLint size = 1;
static constexpr GLenum type = gl::DOUBLE; static constexpr GLenum type = gl::DOUBLE;
static constexpr GLboolean normalized = gl::FALSE_; static constexpr GLboolean normalized = gl::FALSE;
}; };
template <typename T, std::size_t N> template <typename T, std::size_t N>
@ -161,7 +161,7 @@ namespace psemek::gfx
static constexpr GLint size = N; static constexpr GLint size = N;
static constexpr GLenum type = attrib_traits<T>::type; static constexpr GLenum type = attrib_traits<T>::type;
static constexpr GLboolean normalized = gl::FALSE_; static constexpr GLboolean normalized = gl::FALSE;
}; };
template <typename T, std::size_t N> template <typename T, std::size_t N>
@ -171,7 +171,7 @@ namespace psemek::gfx
static constexpr GLint size = N; static constexpr GLint size = N;
static constexpr GLenum type = attrib_traits<T>::type; static constexpr GLenum type = attrib_traits<T>::type;
static constexpr GLboolean normalized = gl::FALSE_; static constexpr GLboolean normalized = gl::FALSE;
}; };
template <typename T, std::size_t N> template <typename T, std::size_t N>
@ -181,7 +181,7 @@ namespace psemek::gfx
static constexpr GLint size = N; static constexpr GLint size = N;
static constexpr GLenum type = attrib_traits<T>::type; static constexpr GLenum type = attrib_traits<T>::type;
static constexpr GLboolean normalized = gl::FALSE_; static constexpr GLboolean normalized = gl::FALSE;
}; };
template <typename T, std::size_t R, std::size_t C> template <typename T, std::size_t R, std::size_t C>
@ -197,7 +197,7 @@ namespace psemek::gfx
static constexpr GLint size = attrib_traits<T>::size; static constexpr GLint size = attrib_traits<T>::size;
static constexpr GLenum type = attrib_traits<T>::type; static constexpr GLenum type = attrib_traits<T>::type;
static constexpr GLboolean normalized = gl::TRUE_; static constexpr GLboolean normalized = gl::TRUE;
}; };
template <typename T> template <typename T>

File diff suppressed because it is too large Load diff

View file

@ -344,7 +344,7 @@ namespace psemek::gfx
if (level) if (level)
{ {
bind(); bind();
gl::TexParameterf(Target, gl::TEXTURE_MAX_ANISOTROPY_EXT, *level); gl::TexParameterf(Target, gl::TEXTURE_MAX_ANISOTROPY, *level);
} }
} }

View file

@ -13,7 +13,7 @@ namespace psemek::gfx
{ {
switch (e) switch (e)
{ {
case gl::NO_ERROR_: return "GL_NO_ERROR"; case gl::NO_ERROR: return "GL_NO_ERROR";
case gl::INVALID_ENUM: return "GL_INVALID_ENUM"; case gl::INVALID_ENUM: return "GL_INVALID_ENUM";
case gl::INVALID_VALUE: return "GL_INVALID_VALUE"; case gl::INVALID_VALUE: return "GL_INVALID_VALUE";
case gl::INVALID_OPERATION: return "GL_INVALID_OPERATION"; case gl::INVALID_OPERATION: return "GL_INVALID_OPERATION";

File diff suppressed because it is too large Load diff

View file

@ -151,47 +151,47 @@ namespace psemek::gfx
void program::uniform_proxy::operator = (geom::matrix<float, 2, 2> const & m) void program::uniform_proxy::operator = (geom::matrix<float, 2, 2> const & m)
{ {
gl::UniformMatrix2fv(location_, 1, gl::TRUE_, m.coords); gl::UniformMatrix2fv(location_, 1, gl::TRUE, m.coords);
} }
void program::uniform_proxy::operator = (geom::matrix<float, 2, 3> const & m) void program::uniform_proxy::operator = (geom::matrix<float, 2, 3> const & m)
{ {
gl::UniformMatrix3x2fv(location_, 1, gl::TRUE_, m.coords); gl::UniformMatrix3x2fv(location_, 1, gl::TRUE, m.coords);
} }
void program::uniform_proxy::operator = (geom::matrix<float, 2, 4> const & m) void program::uniform_proxy::operator = (geom::matrix<float, 2, 4> const & m)
{ {
gl::UniformMatrix4x2fv(location_, 1, gl::TRUE_, m.coords); gl::UniformMatrix4x2fv(location_, 1, gl::TRUE, m.coords);
} }
void program::uniform_proxy::operator = (geom::matrix<float, 3, 2> const & m) void program::uniform_proxy::operator = (geom::matrix<float, 3, 2> const & m)
{ {
gl::UniformMatrix2x3fv(location_, 1, gl::TRUE_, m.coords); gl::UniformMatrix2x3fv(location_, 1, gl::TRUE, m.coords);
} }
void program::uniform_proxy::operator = (geom::matrix<float, 3, 3> const & m) void program::uniform_proxy::operator = (geom::matrix<float, 3, 3> const & m)
{ {
gl::UniformMatrix3fv(location_, 1, gl::TRUE_, m.coords); gl::UniformMatrix3fv(location_, 1, gl::TRUE, m.coords);
} }
void program::uniform_proxy::operator = (geom::matrix<float, 3, 4> const & m) void program::uniform_proxy::operator = (geom::matrix<float, 3, 4> const & m)
{ {
gl::UniformMatrix4x3fv(location_, 1, gl::TRUE_, m.coords); gl::UniformMatrix4x3fv(location_, 1, gl::TRUE, m.coords);
} }
void program::uniform_proxy::operator = (geom::matrix<float, 4, 2> const & m) void program::uniform_proxy::operator = (geom::matrix<float, 4, 2> const & m)
{ {
gl::UniformMatrix2x4fv(location_, 1, gl::TRUE_, m.coords); gl::UniformMatrix2x4fv(location_, 1, gl::TRUE, m.coords);
} }
void program::uniform_proxy::operator = (geom::matrix<float, 4, 3> const & m) void program::uniform_proxy::operator = (geom::matrix<float, 4, 3> const & m)
{ {
gl::UniformMatrix3x4fv(location_, 1, gl::TRUE_, m.coords); gl::UniformMatrix3x4fv(location_, 1, gl::TRUE, m.coords);
} }
void program::uniform_proxy::operator = (geom::matrix<float, 4, 4> const & m) void program::uniform_proxy::operator = (geom::matrix<float, 4, 4> const & m)
{ {
gl::UniformMatrix4fv(location_, 1, gl::TRUE_, m.coords); gl::UniformMatrix4fv(location_, 1, gl::TRUE, m.coords);
} }
void program::uniform_proxy::operator = (geom::interval<int> const & i) void program::uniform_proxy::operator = (geom::interval<int> const & i)
@ -218,7 +218,7 @@ namespace psemek::gfx
GLint status; GLint status;
gl::GetShaderiv(shader, gl::COMPILE_STATUS, &status); gl::GetShaderiv(shader, gl::COMPILE_STATUS, &status);
if (status != gl::TRUE_) if (status != gl::TRUE)
{ {
GLint log_len; GLint log_len;
gl::GetShaderiv(shader, gl::INFO_LOG_LENGTH, &log_len); gl::GetShaderiv(shader, gl::INFO_LOG_LENGTH, &log_len);
@ -236,7 +236,7 @@ namespace psemek::gfx
GLint status; GLint status;
gl::GetProgramiv(program, gl::LINK_STATUS, &status); gl::GetProgramiv(program, gl::LINK_STATUS, &status);
if (status != gl::TRUE_) if (status != gl::TRUE)
{ {
GLint log_len; GLint log_len;
gl::GetProgramiv(program, gl::INFO_LOG_LENGTH, &log_len); gl::GetProgramiv(program, gl::INFO_LOG_LENGTH, &log_len);

View file

@ -17,11 +17,12 @@ namespace psemek::gfx
static std::optional<float> get_max_anisotropy() static std::optional<float> get_max_anisotropy()
{ {
if (!gl::exts::var_EXT_texture_filter_anisotropic) return std::nullopt; if (!gl::sys::ext_ARB_texture_filter_anisotropic()) return std::nullopt;
float level; float level;
gl::GetFloatv(gl::MAX_TEXTURE_MAX_ANISOTROPY_EXT, &level); gl::GetFloatv(gl::MAX_TEXTURE_MAX_ANISOTROPY, &level);
return level; return level;
return 0.f;
} }
std::optional<float> max_anisotropy() std::optional<float> max_anisotropy()