Route UI capability queries through GL backend

This commit is contained in:
2026-06-04 23:29:30 +02:00
parent 2a4698e9f6
commit c9fb91ab48
6 changed files with 108 additions and 20 deletions

View File

@@ -63,6 +63,11 @@ void disable_opengl_state(std::uint32_t state) noexcept
glDisable(static_cast<GLenum>(state));
}
std::uint8_t is_opengl_state_enabled(std::uint32_t state) noexcept
{
return static_cast<std::uint8_t>(glIsEnabled(static_cast<GLenum>(state)));
}
void set_opengl_viewport(std::int32_t x, std::int32_t y, std::int32_t width, std::int32_t height) noexcept
{
glViewport(static_cast<GLint>(x), static_cast<GLint>(y), static_cast<GLsizei>(width), static_cast<GLsizei>(height));
@@ -172,6 +177,20 @@ void apply_node_canvas_capability(std::uint32_t state, bool enabled)
LOG("NodeCanvas capability dispatch failed because: %s", status.message);
}
bool query_node_canvas_capability(std::uint32_t state)
{
const auto result = pp::renderer::gl::query_opengl_capability_state(
state,
pp::renderer::gl::OpenGlCapabilityStateQueryDispatch {
.is_enabled = is_opengl_state_enabled,
});
if (!result.ok()) {
LOG("NodeCanvas capability query failed because: %s", result.status().message);
return false;
}
return result.value();
}
pp::renderer::RenderDeviceFeatures node_canvas_stroke_composite_features() noexcept
{
return ShaderManager::render_device_features();
@@ -359,9 +378,9 @@ void NodeCanvas::draw()
const auto vp = query_node_canvas_viewport();
const auto cc = query_node_canvas_clear_color();
auto blend = glIsEnabled(pp::renderer::gl::blend_state());
auto depth = glIsEnabled(pp::renderer::gl::depth_test_state());
auto scissor = glIsEnabled(pp::renderer::gl::scissor_test_state());
const auto blend = query_node_canvas_capability(pp::renderer::gl::blend_state());
const auto depth = query_node_canvas_capability(pp::renderer::gl::depth_test_state());
const auto scissor = query_node_canvas_capability(pp::renderer::gl::scissor_test_state());
apply_node_canvas_capability(pp::renderer::gl::scissor_test_state(), false);