Publish renderer feature snapshot for canvas gates

This commit is contained in:
2026-06-03 18:32:17 +02:00
parent 1369a9048e
commit bc5b39057d
7 changed files with 40 additions and 9 deletions

View File

@@ -16,6 +16,17 @@ namespace {
return static_cast<GLenum>(pp::renderer::gl::extension_string_name());
}
[[nodiscard]] pp::renderer::gl::OpenGlCapabilities shader_manager_capabilities() noexcept
{
pp::renderer::gl::OpenGlCapabilities capabilities;
capabilities.framebuffer_fetch = ShaderManager::ext_framebuffer_fetch;
capabilities.map_buffer_alignment = ShaderManager::ext_map_aligned;
capabilities.float32_textures = ShaderManager::ext_float32;
capabilities.float32_linear = ShaderManager::ext_float32_linear;
capabilities.float16_textures = ShaderManager::ext_float16;
return capabilities;
}
}
void App::initShaders()
@@ -55,6 +66,7 @@ void App::initShaders()
ShaderManager::ext_float32 = capabilities.float32_textures;
ShaderManager::ext_float32_linear = capabilities.float32_linear;
ShaderManager::ext_float16 = capabilities.float16_textures;
ShaderManager::set_render_device_features(pp::renderer::gl::render_device_features(capabilities));
});
#if __GL__
@@ -63,6 +75,8 @@ void App::initShaders()
ShaderManager::ext_float32 = true;
ShaderManager::ext_float16 = true;
#endif
ShaderManager::set_render_device_features(
pp::renderer::gl::render_device_features(shader_manager_capabilities()));
LOG("Shader Extension shader_framebuffer_fetch: %s", ShaderManager::ext_framebuffer_fetch ? "enabled" : "disabled");

View File

@@ -46,10 +46,7 @@ GLenum rgba_pixel_format()
pp::renderer::RenderDeviceFeatures canvas_stroke_composite_features() noexcept
{
return pp::renderer::RenderDeviceFeatures {
.framebuffer_fetch = ShaderManager::ext_framebuffer_fetch,
.texture_copy = !ShaderManager::ext_framebuffer_fetch,
};
return ShaderManager::render_device_features();
}
bool draw_merge_needs_shader_blend(

View File

@@ -29,10 +29,7 @@ void unbind_texture_2d()
pp::renderer::RenderDeviceFeatures node_canvas_stroke_composite_features() noexcept
{
return pp::renderer::RenderDeviceFeatures {
.framebuffer_fetch = ShaderManager::ext_framebuffer_fetch,
.texture_copy = !ShaderManager::ext_framebuffer_fetch,
};
return ShaderManager::render_device_features();
}
bool node_canvas_needs_shader_blend(

View File

@@ -211,6 +211,7 @@ std::int32_t get_opengl_uniform_location(std::uint32_t program, const char* name
std::map<kShader, Shader> ShaderManager::m_shaders;
Shader* ShaderManager::m_current;
pp::renderer::RenderDeviceFeatures ShaderManager::m_render_device_features {};
bool ShaderManager::ext_framebuffer_fetch = false;
bool ShaderManager::ext_float32 = false;
bool ShaderManager::ext_float32_linear = false;
@@ -816,6 +817,16 @@ void ShaderManager::u_float(kShaderUniform id, float f)
m_current->u_float(id, f);
}
void ShaderManager::set_render_device_features(pp::renderer::RenderDeviceFeatures features) noexcept
{
m_render_device_features = features;
}
pp::renderer::RenderDeviceFeatures ShaderManager::render_device_features() noexcept
{
return m_render_device_features;
}
void ShaderManager::invalidate()
{
m_shaders.clear();

View File

@@ -1,4 +1,5 @@
#pragma once
#include "renderer_api/renderer_api.h"
#include "util.h"
bool check_uniform_uniqueness();
@@ -108,6 +109,7 @@ class ShaderManager
{
static std::map<kShader, Shader> m_shaders;
static Shader* m_current;
static pp::renderer::RenderDeviceFeatures m_render_device_features;
public:
static bool ext_framebuffer_fetch;
static bool ext_float32;
@@ -127,5 +129,7 @@ public:
static void u_int(kShaderUniform id, int i);
static void u_int(const char* name, int i);
static void u_float(kShaderUniform id, float f);
static void set_render_device_features(pp::renderer::RenderDeviceFeatures features) noexcept;
static pp::renderer::RenderDeviceFeatures render_device_features() noexcept;
static void invalidate();
};