Route canvas clear state through GL backend
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user