Route texture alpha setup through helper

This commit is contained in:
2026-06-13 05:48:47 +02:00
parent 14ea181ec3
commit 5ab06a42e3
6 changed files with 70 additions and 24 deletions

View File

@@ -398,11 +398,13 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat
else
{
sampler.bind(0);
ShaderManager::use(kShader::TextureAlpha);
ShaderManager::u_int(kShaderUniform::Tex, 0);
ShaderManager::u_float(kShaderUniform::Alpha, canvas->m_canvas->m_layers[layer_index]->m_opacity);
ShaderManager::u_int(kShaderUniform::Highlight, canvas->m_canvas->m_layers[layer_index]->m_hightlight);
ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
pp::panopainter::setup_legacy_canvas_draw_merge_texture_alpha_shader(
pp::panopainter::LegacyCanvasDrawMergeTextureAlphaUniforms {
.mvp = plane_mvp_z,
.texture_slot = 0,
.alpha = canvas->m_canvas->m_layers[layer_index]->m_opacity,
.highlight = canvas->m_canvas->m_layers[layer_index]->m_hightlight,
});
set_active_texture_unit(0);
canvas->m_canvas->m_layers[layer_index]->rtt(plane_index).bindTexture();

View File

@@ -1393,11 +1393,13 @@ void Canvas::draw_merge(bool draw_checkerboard, std::array<bool, 6> faces /*= SI
else
{
m_cam_fov < 20.f ? m_sampler_nearest.bind(0) : m_sampler.bind(0);
ShaderManager::use(kShader::TextureAlpha);
ShaderManager::u_int(kShaderUniform::Tex, 0);
ShaderManager::u_float(kShaderUniform::Alpha, m_layers[layer_index]->m_opacity);
ShaderManager::u_int(kShaderUniform::Highlight, m_layers[layer_index]->m_hightlight);
ShaderManager::u_mat4(kShaderUniform::MVP, ortho);
pp::panopainter::setup_legacy_canvas_draw_merge_texture_alpha_shader(
pp::panopainter::LegacyCanvasDrawMergeTextureAlphaUniforms {
.mvp = ortho,
.texture_slot = 0,
.alpha = m_layers[layer_index]->m_opacity,
.highlight = m_layers[layer_index]->m_hightlight,
});
set_active_texture_unit(0);
m_layers[layer_index]->rtt(plane_index).bindTexture();
@@ -2216,11 +2218,13 @@ void Canvas::export_depth_thread(std::string file_name)
glm::scale(glm::vec3(2));
m_sampler.bind(0);
ShaderManager::use(kShader::TextureAlpha);
ShaderManager::u_int(kShaderUniform::Tex, 0);
ShaderManager::u_float(kShaderUniform::Alpha, 1.f);
ShaderManager::u_int(kShaderUniform::Highlight, false);
ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
pp::panopainter::setup_legacy_canvas_draw_merge_texture_alpha_shader(
pp::panopainter::LegacyCanvasDrawMergeTextureAlphaUniforms {
.mvp = plane_mvp_z,
.texture_slot = 0,
.alpha = 1.f,
.highlight = false,
});
set_active_texture_unit(0);
m_layers_merge.rtt(plane_index).bindTexture();

View File

@@ -16,6 +16,13 @@ struct LegacyCanvasDrawMergeTextureUniforms {
int texture_slot = 0;
};
struct LegacyCanvasDrawMergeTextureAlphaUniforms {
glm::mat4 mvp { 1.0f };
int texture_slot = 0;
float alpha = 1.0f;
int highlight = 0;
};
struct LegacyCanvasDrawMergeTextureBlendUniforms {
glm::mat4 mvp { 1.0f };
int texture_slot = 0;
@@ -72,6 +79,23 @@ inline void setup_legacy_canvas_draw_merge_texture_shader(
setup_legacy_canvas_draw_merge_texture_shader(uniforms, legacy_shader_manager_draw_merge_execution());
}
inline void setup_legacy_canvas_draw_merge_texture_alpha_shader(
const LegacyCanvasDrawMergeTextureAlphaUniforms& uniforms,
const LegacyCanvasDrawMergeShaderExecution& execution) noexcept
{
execution.use_shader(kShader::TextureAlpha);
execution.set_int(kShaderUniform::Tex, uniforms.texture_slot);
execution.set_float(kShaderUniform::Alpha, uniforms.alpha);
execution.set_int(kShaderUniform::Highlight, uniforms.highlight);
execution.set_mat4(kShaderUniform::MVP, uniforms.mvp);
}
inline void setup_legacy_canvas_draw_merge_texture_alpha_shader(
const LegacyCanvasDrawMergeTextureAlphaUniforms& uniforms)
{
setup_legacy_canvas_draw_merge_texture_alpha_shader(uniforms, legacy_shader_manager_draw_merge_execution());
}
inline void setup_legacy_canvas_draw_merge_texture_blend_shader(
const LegacyCanvasDrawMergeTextureBlendUniforms& uniforms,
const LegacyCanvasDrawMergeShaderExecution& execution) noexcept

View File

@@ -392,11 +392,13 @@ void NodeCanvas::draw()
glm::translate(glm::vec3(0, 0, -1));
m_sampler.bind(0);
ShaderManager::use(kShader::TextureAlpha);
ShaderManager::u_int(kShaderUniform::Tex, 0);
ShaderManager::u_float(kShaderUniform::Alpha, 1.f);
ShaderManager::u_int(kShaderUniform::Highlight, false);
ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
pp::panopainter::setup_legacy_canvas_draw_merge_texture_alpha_shader(
pp::panopainter::LegacyCanvasDrawMergeTextureAlphaUniforms {
.mvp = plane_mvp_z,
.texture_slot = 0,
.alpha = 1.f,
.highlight = false,
});
set_active_texture_unit(0);
m_canvas->m_layers_merge.rtt(plane_index).bindTexture();
@@ -583,10 +585,13 @@ void NodeCanvas::draw()
else
{
m_canvas->m_cam_fov < 20.f ? m_sampler_nearest.bind(0) : m_sampler.bind(0);
ShaderManager::use(kShader::TextureAlpha);
ShaderManager::u_int(kShaderUniform::Tex, 0);
ShaderManager::u_int(kShaderUniform::Highlight, m_canvas->m_layers[layer_index]->m_hightlight);
ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
pp::panopainter::setup_legacy_canvas_draw_merge_texture_alpha_shader(
pp::panopainter::LegacyCanvasDrawMergeTextureAlphaUniforms {
.mvp = plane_mvp_z,
.texture_slot = 0,
.alpha = 1.f,
.highlight = m_canvas->m_layers[layer_index]->m_hightlight,
});
for (int frame = onion_range.first_frame; frame <= onion_range.last_frame; frame++)
{