From 96a13eec72c6e3129283bd1f994a690ebbd62270 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Sat, 13 Jun 2026 05:25:36 +0200 Subject: [PATCH] Route VR stroke setup through helpers --- docs/modernization/debt.md | 4 +++ docs/modernization/roadmap.md | 4 +++ src/app_vr.cpp | 65 ++++++++++++++++++----------------- 3 files changed, 42 insertions(+), 31 deletions(-) diff --git a/docs/modernization/debt.md b/docs/modernization/debt.md index 8950786..3d3637e 100644 --- a/docs/modernization/debt.md +++ b/docs/modernization/debt.md @@ -18,6 +18,10 @@ agent or engineer to remove them without reconstructing context from chat. ## Recent Reductions +- 2026-06-13: DEBT-0036 was narrowed again. Desktop VR retained temporary erase + and draw shader setup now route through the shared stroke erase/composite + helpers; VR still owns sampler/texture binding, per-eye/view transforms, + temporary stroke texture selection, and draw execution. - 2026-06-13: DEBT-0036 was narrowed again. `Canvas::stroke_commit` and `Canvas::draw_merge` retained `CompErase` shader setup now route through `legacy_canvas_stroke_erase_services.h`; Canvas still owns texture binding, diff --git a/docs/modernization/roadmap.md b/docs/modernization/roadmap.md index 5f7fb8b..f8a1bed 100644 --- a/docs/modernization/roadmap.md +++ b/docs/modernization/roadmap.md @@ -3013,6 +3013,10 @@ Results: now share the stroke erase shader setup helper, while texture binding, mask RTT binding, dirty/layer mutation, framebuffer feedback, and draw execution remain in retained Canvas code. +- Desktop VR temporary erase/draw compositing now shares the retained stroke + erase and composite shader setup helpers, while sampler/texture binding, + per-eye/view transforms, temporary stroke texture selection, and draw + execution remain in retained VR code. - `Canvas::stroke_draw_mix` now shares the retained stroke composite shader helper for mixer-pass `CompDraw` setup, while preserving its caller-specific texture slot uniforms. Mixer framebuffer/scissor state, sampler and texture diff --git a/src/app_vr.cpp b/src/app_vr.cpp index f737998..8ad1603 100644 --- a/src/app_vr.cpp +++ b/src/app_vr.cpp @@ -3,6 +3,8 @@ #include #include "app.h" +#include "legacy_canvas_stroke_composite_services.h" +#include "legacy_canvas_stroke_erase_services.h" #include "legacy_ui_gl_dispatch.h" #include "node_panel_grid.h" #include "util.h" @@ -306,14 +308,16 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat sampler.bind(1); sampler.bind(2); - ShaderManager::use(kShader::CompErase); - ShaderManager::u_int(kShaderUniform::Tex, 0); - ShaderManager::u_int(kShaderUniform::TexStroke, 1); - ShaderManager::u_int(kShaderUniform::TexMask, 2); - ShaderManager::u_float(kShaderUniform::Alpha, canvas->m_canvas->m_layers[layer_index]->m_opacity); //ShaderManager::u_int(kShaderUniform::Lock, m_canvas->m_layers[layer_index]->m_alpha_locked); - ShaderManager::u_int(kShaderUniform::Mask, canvas->m_canvas->m_smask_active); - ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z); + pp::panopainter::setup_legacy_stroke_erase_shader( + pp::panopainter::LegacyStrokeEraseUniforms { + .mvp = plane_mvp_z, + .texture_slot = 0, + .stroke_texture_slot = 1, + .mask_texture_slot = 2, + .alpha = canvas->m_canvas->m_layers[layer_index]->m_opacity, + .mask_enabled = canvas->m_canvas->m_smask_active, + }); set_active_texture_unit(0); canvas->m_canvas->m_layers[layer_index]->rtt(plane_index).bindTexture(); set_active_texture_unit(1); @@ -340,30 +344,29 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat if (b->m_pattern_flipx) patt_scale.x *= -1.f; if (b->m_pattern_flipy) patt_scale.y *= -1.f; - ShaderManager::use(kShader::CompDraw); - ShaderManager::u_int(kShaderUniform::Tex, 0); - ShaderManager::u_int(kShaderUniform::TexStroke, 1); - ShaderManager::u_int(kShaderUniform::TexMask, 2); - ShaderManager::u_int(kShaderUniform::TexDual, 3); - ShaderManager::u_int(kShaderUniform::TexPattern, 4); - ShaderManager::u_vec2(kShaderUniform::Resolution, canvas->m_canvas->m_size); - ShaderManager::u_float(kShaderUniform::Alpha, canvas->m_canvas->m_layers[layer_index]->m_opacity); - ShaderManager::u_int(kShaderUniform::Mask, canvas->m_canvas->m_smask_active); - ShaderManager::u_int(kShaderUniform::Lock, canvas->m_canvas->m_layers[layer_index]->m_alpha_locked); - ShaderManager::u_int(kShaderUniform::UseFragcoord, false); - ShaderManager::u_int(kShaderUniform::BlendMode, b->m_blend_mode); - ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z); - ShaderManager::u_int(kShaderUniform::UseDual, b->m_dual_enabled); - ShaderManager::u_int(kShaderUniform::DualBlendMode, b->m_dual_blend_mode); - ShaderManager::u_float(kShaderUniform::DualAlpha, b->m_dual_opacity); - ShaderManager::u_int(kShaderUniform::UsePattern, b->m_pattern_enabled && !b->m_pattern_eachsample); - ShaderManager::u_vec2(kShaderUniform::PatternScale, patt_scale); - ShaderManager::u_float(kShaderUniform::PatternInvert, b->m_pattern_invert); - ShaderManager::u_float(kShaderUniform::PatternBright, b->m_pattern_brightness); - ShaderManager::u_float(kShaderUniform::PatternContrast, b->m_pattern_contrast); - ShaderManager::u_float(kShaderUniform::PatternDepth, b->m_pattern_depth); - ShaderManager::u_int(kShaderUniform::PatternBlendMode, b->m_pattern_blend_mode); - ShaderManager::u_vec2(kShaderUniform::PatternOffset, Canvas::I->m_pattern_offset); + pp::panopainter::setup_legacy_stroke_composite_shader( + pp::panopainter::LegacyStrokeCompositeUniforms { + .resolution = canvas->m_canvas->m_size, + .pattern = { + .scale = patt_scale, + .invert = static_cast(b->m_pattern_invert), + .brightness = b->m_pattern_brightness, + .contrast = b->m_pattern_contrast, + .depth = b->m_pattern_depth, + .blend_mode = b->m_pattern_blend_mode, + .offset = Canvas::I->m_pattern_offset, + }, + .mvp = plane_mvp_z, + .layer_alpha = canvas->m_canvas->m_layers[layer_index]->m_opacity, + .alpha_lock = canvas->m_canvas->m_layers[layer_index]->m_alpha_locked, + .mask_enabled = canvas->m_canvas->m_smask_active, + .use_fragcoord = false, + .blend_mode = b->m_blend_mode, + .use_dual = b->m_dual_enabled, + .dual_blend_mode = b->m_dual_blend_mode, + .dual_alpha = b->m_dual_opacity, + .use_pattern = b->m_pattern_enabled && !b->m_pattern_eachsample, + }); set_active_texture_unit(0); canvas->m_canvas->m_layers[layer_index]->rtt(plane_index).bindTexture();