Route canvas clear state through GL backend

This commit is contained in:
2026-06-04 23:13:21 +02:00
parent b8c7cd6e99
commit 9190e9053a
5 changed files with 128 additions and 54 deletions

View File

@@ -6,6 +6,8 @@
#include "rtt.h"
#include "util.h"
#include <array>
uint32_t Layer::s_count = 0;
namespace {
@@ -40,6 +42,11 @@ void clear_opengl_buffer(std::uint32_t mask) noexcept
glClear(static_cast<GLbitfield>(mask));
}
void get_opengl_float(std::uint32_t name, float* values) noexcept
{
glGetFloatv(static_cast<GLenum>(name), values);
}
void copy_opengl_tex_sub_image_2d(
std::uint32_t target,
std::int32_t level,
@@ -142,9 +149,27 @@ void clear_layer_color_buffer(const glm::vec4& color)
LOG("Layer clear dispatch failed because: %s", status.message);
}
void restore_layer_clear_color(const GLfloat* color)
std::array<float, 4> query_layer_clear_color()
{
set_opengl_clear_color(color[0], color[1], color[2], color[3]);
const auto result = pp::renderer::gl::query_opengl_clear_color(
pp::renderer::gl::OpenGlClearColorQueryDispatch {
.get_float = get_opengl_float,
});
if (!result.ok()) {
LOG("Layer clear-color query dispatch failed because: %s", result.status().message);
}
return result.value();
}
void restore_layer_clear_color(std::array<float, 4> color)
{
const auto status = pp::renderer::gl::apply_opengl_clear_color(
color,
pp::renderer::gl::OpenGlClearColorDispatch {
.clear_color = set_opengl_clear_color,
});
if (!status.ok())
LOG("Layer clear-color dispatch failed because: %s", status.message);
}
}
@@ -601,8 +626,7 @@ void LayerFrame::clear(const glm::vec4& c)
App::I->render_task([&]
{
// push clear color state
GLfloat cc[4];
glGetFloatv(pp::renderer::gl::color_clear_value_query(), cc);
const auto cc = query_layer_clear_color();
bool erase = (c.a == 0.f);