Route renderer feature gates through device snapshot

This commit is contained in:
2026-06-04 19:58:38 +02:00
parent f2cb0f2276
commit 0bd1e92ee1
10 changed files with 30 additions and 9 deletions

View File

@@ -1526,7 +1526,7 @@ void App::initLayout()
const auto renderer_diagnostics = pp::app::plan_renderer_diagnostics({
.framebuffer_fetch = renderer_features.framebuffer_fetch,
.float32_render_targets = renderer_features.float32_render_targets,
.float32_linear_filtering = ShaderManager::ext_float32_linear,
.float32_linear_filtering = renderer_features.float32_linear_filtering,
.float16_render_targets = renderer_features.float16_render_targets,
});

View File

@@ -19,9 +19,10 @@ namespace {
GLint current_canvas_stroke_internal_format()
{
if (ShaderManager::ext_float32_linear)
const auto renderer_features = ShaderManager::render_device_features();
if (renderer_features.float32_linear_filtering)
return static_cast<GLint>(pp::renderer::gl::rgba32f_internal_format());
if (ShaderManager::ext_float16)
if (renderer_features.float16_render_targets)
return static_cast<GLint>(pp::renderer::gl::rgba16f_internal_format());
return static_cast<GLint>(pp::renderer::gl::rgba8_internal_format());
}

View File

@@ -100,10 +100,11 @@ void NodePanelGrid::init_controls()
m_render->on_click = [this](Node*)
{
const auto renderer_features = ShaderManager::render_device_features();
const auto plan = pp::app::plan_grid_lightmap_render(
static_cast<bool>(m_hm_image.data()),
ShaderManager::ext_float32,
ShaderManager::ext_float16,
renderer_features.float32_render_targets,
renderer_features.float16_render_targets,
get_texres(),
get_samples());
if (!plan)
@@ -356,11 +357,12 @@ void NodePanelGrid::bake_uvs()
return;
RTT fb;
if (ShaderManager::ext_float32)
const auto renderer_features = ShaderManager::render_device_features();
if (renderer_features.float32_render_targets)
{
fb.create(m_texture.size().x, m_texture.size().y, -1, pp::renderer::gl::rgba32f_internal_format());
}
else if (ShaderManager::ext_float16)
else if (renderer_features.float16_render_targets)
{
fb.create(m_texture.size().x, m_texture.size().y, -1, pp::renderer::gl::rgba16f_internal_format());
}

View File

@@ -240,6 +240,7 @@ struct RenderDeviceFeatures {
bool frame_capture = false;
bool float16_render_targets = false;
bool float32_render_targets = false;
bool float32_linear_filtering = false;
};
struct PaintFeedbackPlan {

View File

@@ -225,6 +225,7 @@ pp::renderer::RenderDeviceFeatures render_device_features(OpenGlCapabilities cap
.frame_capture = true,
.float16_render_targets = capabilities.float16_textures,
.float32_render_targets = capabilities.float32_textures,
.float32_linear_filtering = capabilities.float32_linear,
};
}