Move OpenGL extension query into renderer backend
This commit is contained in:
@@ -344,6 +344,31 @@ pp::foundation::Result<OpenGlRuntimeInfo> query_opengl_runtime_info(
|
||||
});
|
||||
}
|
||||
|
||||
pp::foundation::Result<std::vector<std::string>> query_opengl_extensions(
|
||||
OpenGlExtensionQueryDispatch dispatch)
|
||||
{
|
||||
if (dispatch.get_integer == nullptr || dispatch.get_string_indexed == nullptr) {
|
||||
return pp::foundation::Result<std::vector<std::string>>::failure(
|
||||
pp::foundation::Status::invalid_argument("OpenGL extension query callbacks must not be null"));
|
||||
}
|
||||
|
||||
std::int32_t extension_count = 0;
|
||||
dispatch.get_integer(extension_count_query(), &extension_count);
|
||||
if (extension_count <= 0) {
|
||||
return pp::foundation::Result<std::vector<std::string>>::success({});
|
||||
}
|
||||
|
||||
std::vector<std::string> extensions;
|
||||
extensions.reserve(static_cast<std::size_t>(extension_count));
|
||||
for (std::int32_t index = 0; index < extension_count; ++index) {
|
||||
const char* extension = dispatch.get_string_indexed(
|
||||
extension_string_name(),
|
||||
static_cast<std::uint32_t>(index));
|
||||
extensions.emplace_back(extension != nullptr ? extension : "");
|
||||
}
|
||||
return pp::foundation::Result<std::vector<std::string>>::success(std::move(extensions));
|
||||
}
|
||||
|
||||
OpenGlDefaultClear panopainter_default_clear() noexcept
|
||||
{
|
||||
return OpenGlDefaultClear {
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
#include <span>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <vector>
|
||||
|
||||
namespace pp::renderer::gl {
|
||||
|
||||
@@ -459,11 +461,17 @@ struct OpenGlRuntimeInfo {
|
||||
};
|
||||
|
||||
using OpenGlStringQueryFn = const char* (*)(std::uint32_t name) noexcept;
|
||||
using OpenGlIndexedStringQueryFn = const char* (*)(std::uint32_t name, std::uint32_t index) noexcept;
|
||||
|
||||
struct OpenGlRuntimeInfoDispatch {
|
||||
OpenGlStringQueryFn get_string = nullptr;
|
||||
};
|
||||
|
||||
struct OpenGlExtensionQueryDispatch {
|
||||
OpenGlGetIntegerFn get_integer = nullptr;
|
||||
OpenGlIndexedStringQueryFn get_string_indexed = nullptr;
|
||||
};
|
||||
|
||||
struct OpenGlDefaultClear {
|
||||
std::array<float, 4> color {};
|
||||
std::uint32_t mask = 0;
|
||||
@@ -690,6 +698,8 @@ struct OpenGlMeshDeleteDispatch {
|
||||
OpenGlStateRestoreDispatch dispatch) noexcept;
|
||||
[[nodiscard]] pp::foundation::Result<OpenGlRuntimeInfo> query_opengl_runtime_info(
|
||||
OpenGlRuntimeInfoDispatch dispatch) noexcept;
|
||||
[[nodiscard]] pp::foundation::Result<std::vector<std::string>> query_opengl_extensions(
|
||||
OpenGlExtensionQueryDispatch dispatch);
|
||||
[[nodiscard]] OpenGlDefaultClear panopainter_default_clear() noexcept;
|
||||
[[nodiscard]] pp::foundation::Status clear_panopainter_default_target(OpenGlClearDispatch dispatch) noexcept;
|
||||
[[nodiscard]] pp::foundation::Status apply_opengl_viewport(
|
||||
|
||||
Reference in New Issue
Block a user