Publish renderer feature snapshot for canvas gates
This commit is contained in:
@@ -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");
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user