Route renderer feature gates through device snapshot
This commit is contained in:
@@ -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,
|
||||
});
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user