Route UI and VR shader setup through helpers

This commit is contained in:
2026-06-13 06:04:25 +02:00
parent 20ecffa18c
commit d7c88e6653
7 changed files with 104 additions and 37 deletions

View File

@@ -6,6 +6,7 @@
#include "legacy_canvas_draw_merge_services.h"
#include "legacy_canvas_stroke_composite_services.h"
#include "legacy_canvas_stroke_erase_services.h"
#include "legacy_canvas_stroke_preview_services.h"
#include "legacy_ui_gl_dispatch.h"
#include "node_panel_grid.h"
#include "util.h"
@@ -427,9 +428,11 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat
glm::transpose(canvas->m_canvas->m_cam_rot) *
glm::translate(glm::vec3(0, 0, -1)) *
glm::scale(aspect * tan_fov);
ShaderManager::use(kShader::Color);
ShaderManager::u_vec4(kShaderUniform::Col, { 0, 0, 0, 1 });
ShaderManager::u_mat4(kShaderUniform::MVP, mvp);
pp::panopainter::setup_legacy_vr_color_shader(
pp::panopainter::LegacyVrColorUniforms {
.color = { 0, 0, 0, 1 },
.mvp = mvp,
});
m_face_plane.draw_stroke();
}
@@ -496,12 +499,17 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat
glm::scale(glm::vec3(100)) *
glm::transpose(canvas->m_canvas->m_cam_rot) *
glm::translate(glm::vec3(cur * glm::vec2(aspect * tan_fov), -1));
ShaderManager::use(kShader::Color);
ShaderManager::u_vec4(kShaderUniform::Col, { 0, 0, 0, 1 });
ShaderManager::u_mat4(kShaderUniform::MVP, mvp * glm::scale(glm::vec3(.01)));
pp::panopainter::setup_legacy_vr_color_shader(
pp::panopainter::LegacyVrColorUniforms {
.color = { 0, 0, 0, 1 },
.mvp = mvp * glm::scale(glm::vec3(.01f)),
});
m_face_plane.draw_fill();
ShaderManager::u_vec4(kShaderUniform::Col, { 1, 1, 1, 1 });
ShaderManager::u_mat4(kShaderUniform::MVP, mvp * glm::scale(glm::vec3(.005)));
pp::panopainter::setup_legacy_vr_color_shader(
pp::panopainter::LegacyVrColorUniforms {
.color = { 1, 1, 1, 1 },
.mvp = mvp * glm::scale(glm::vec3(.005f)),
});
m_face_plane.draw_fill();
}
@@ -510,9 +518,11 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat
if (vr_controllers_enabled && ui_visible && ui_inside)
{
auto mvp = proj * camera * vr_controllers[0].m_mat * glm::eulerAngleX(glm::radians(-30.f));
ShaderManager::use(kShader::Color);
ShaderManager::u_vec4(kShaderUniform::Col, { 1, 0, 1, 1 });
ShaderManager::u_mat4(kShaderUniform::MVP, mvp * glm::scale(glm::vec3(.0125, .0125, .07)));
pp::panopainter::setup_legacy_vr_color_shader(
pp::panopainter::LegacyVrColorUniforms {
.color = { 1, 0, 1, 1 },
.mvp = mvp * glm::scale(glm::vec3(.0125f, .0125f, .07f)),
});
sphere.draw_fill();
}
@@ -522,18 +532,18 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat
{
glm::vec3 cpos = vr_controllers[0].get_pos() - xyz(pose[3]);
auto pos = glm::translate(glm::normalize(cpos) * 100.f);
ShaderManager::use(kShader::StrokePreview);
ShaderManager::u_int(kShaderUniform::Tex, 0);
ShaderManager::u_float(kShaderUniform::Alpha, canvas->m_canvas->m_current_brush->m_tip_flow);
ShaderManager::u_int(kShaderUniform::DrawOutline, false);
auto tip_color = glm::vec4(glm::vec3(canvas->m_canvas->m_current_brush->m_tip_color), 1);
ShaderManager::u_vec4(kShaderUniform::Col, tip_color);
ShaderManager::u_mat4(kShaderUniform::MVP,
proj * camera * pos *
glm::inverse(glm::lookAt({ 0, 0, 0 }, cpos, { 0, 1, 0 })) *
glm::scale(glm::vec3(canvas->m_canvas->m_current_brush->m_tip_size * 100.f / height)) *
glm::eulerAngleZ(canvas->m_canvas->m_current_brush->m_tip_angle * (float)(M_PI * 2.0))
);
pp::panopainter::setup_legacy_vr_stroke_preview_shader(
pp::panopainter::LegacyVrStrokePreviewUniforms {
.texture_slot = 0,
.alpha = canvas->m_canvas->m_current_brush->m_tip_flow,
.draw_outline = false,
.color = tip_color,
.mvp = proj * camera * pos *
glm::inverse(glm::lookAt({ 0, 0, 0 }, cpos, { 0, 1, 0 })) *
glm::scale(glm::vec3(canvas->m_canvas->m_current_brush->m_tip_size * 100.f / height)) *
glm::eulerAngleZ(canvas->m_canvas->m_current_brush->m_tip_angle * (float)(M_PI * 2.0)),
});
apply_vr_render_capability(pp::renderer::gl::blend_state(), true);
set_active_texture_unit(0);
auto& tex = *canvas->m_canvas->m_current_brush->m_tip_texture;