Move OpenGL extension query into renderer backend
This commit is contained in:
@@ -6,16 +6,6 @@
|
||||
|
||||
namespace {
|
||||
|
||||
[[nodiscard]] GLenum extension_count_query() noexcept
|
||||
{
|
||||
return static_cast<GLenum>(pp::renderer::gl::extension_count_query());
|
||||
}
|
||||
|
||||
[[nodiscard]] GLenum extension_string_name() noexcept
|
||||
{
|
||||
return static_cast<GLenum>(pp::renderer::gl::extension_string_name());
|
||||
}
|
||||
|
||||
[[nodiscard]] pp::renderer::gl::OpenGlCapabilities shader_manager_capabilities() noexcept
|
||||
{
|
||||
pp::renderer::gl::OpenGlCapabilities capabilities;
|
||||
@@ -27,6 +17,19 @@ namespace {
|
||||
return capabilities;
|
||||
}
|
||||
|
||||
void query_gl_integer(std::uint32_t name, std::int32_t* value) noexcept
|
||||
{
|
||||
GLint queried_value = 0;
|
||||
glGetIntegerv(static_cast<GLenum>(name), &queried_value);
|
||||
*value = static_cast<std::int32_t>(queried_value);
|
||||
}
|
||||
|
||||
const char* query_gl_string_indexed(std::uint32_t name, std::uint32_t index) noexcept
|
||||
{
|
||||
return reinterpret_cast<const char*>(
|
||||
glGetStringi(static_cast<GLenum>(name), static_cast<GLuint>(index)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void App::initShaders()
|
||||
@@ -37,17 +40,22 @@ void App::initShaders()
|
||||
#endif // _DEBUG
|
||||
|
||||
render_task([] {
|
||||
GLint n_exts;
|
||||
glGetIntegerv(extension_count_query(), &n_exts);
|
||||
std::vector<std::string> extension_storage;
|
||||
const auto extensions_result = pp::renderer::gl::query_opengl_extensions(
|
||||
pp::renderer::gl::OpenGlExtensionQueryDispatch {
|
||||
.get_integer = query_gl_integer,
|
||||
.get_string_indexed = query_gl_string_indexed,
|
||||
});
|
||||
if (!extensions_result.ok()) {
|
||||
LOG("OpenGL extension query failed: %s", extensions_result.status().message);
|
||||
return;
|
||||
}
|
||||
|
||||
const auto& extension_storage = extensions_result.value();
|
||||
std::vector<std::string_view> extension_views;
|
||||
extension_storage.reserve(n_exts);
|
||||
extension_views.reserve(n_exts);
|
||||
for (int i = 0; i < n_exts; i++)
|
||||
{
|
||||
extension_storage.emplace_back((const char*)glGetStringi(extension_string_name(), i));
|
||||
extension_views.push_back(extension_storage.back());
|
||||
LOG("EXT: %s", extension_storage.back().c_str());
|
||||
extension_views.reserve(extension_storage.size());
|
||||
for (const auto& extension : extension_storage) {
|
||||
extension_views.push_back(extension);
|
||||
LOG("EXT: %s", extension.c_str());
|
||||
}
|
||||
|
||||
const auto runtime = pp::renderer::gl::opengl_runtime_for_current_build();
|
||||
|
||||
Reference in New Issue
Block a user