Thin canvas draw seams and own grid worker

This commit is contained in:
2026-06-16 07:25:57 +02:00
parent 3366b54c7f
commit 17b603536b
7 changed files with 179 additions and 112 deletions

View File

@@ -33,7 +33,6 @@ void set_active_texture_unit(std::uint32_t unit_index)
{
pp::legacy::ui_gl::activate_texture_unit(unit_index, "NodeCanvas");
}
void unbind_texture_2d()
{
pp::legacy::ui_gl::unbind_texture_2d("NodeCanvas");
@@ -719,50 +718,53 @@ void NodeCanvas::draw()
apply_node_canvas_capability(pp::renderer::gl::depth_test_state(), false);
if (m_canvas->m_smask_active || m_canvas->m_current_mode == kCanvasMode::Copy || m_canvas->m_current_mode == kCanvasMode::Cut)
{
if (m_canvas->m_smask_mode == 1)
m_canvas->modes[(int)kCanvasMode::MaskFree][0]->on_Draw(ortho_proj, proj, camera);
else if (m_canvas->m_smask_mode == 2)
m_canvas->modes[(int)kCanvasMode::MaskLine][0]->on_Draw(ortho_proj, proj, camera);
}
if (m_canvas->m_smask_active)
{
pp::panopainter::setup_legacy_canvas_draw_merge_texture_mask_shader(
pp::panopainter::LegacyCanvasDrawMergeTextureMaskUniforms {
.texture_slot = 0,
.pattern_offset = m_outline_pan,
});
set_active_texture_unit(0);
apply_node_canvas_capability(pp::renderer::gl::blend_state(), true);
//draw the cube faces
for (int plane_index = 0; plane_index < 6; plane_index++)
pp::panopainter::execute_legacy_canvas_draw_merge_post_draw(
m_canvas->m_smask_active,
m_canvas->m_current_mode == kCanvasMode::Copy || m_canvas->m_current_mode == kCanvasMode::Cut,
m_canvas->m_smask_mode,
m_canvas->m_current_mode != kCanvasMode::Grid,
{
auto plane_mvp = proj * camera *
glm::scale(glm::vec3(m_canvas->m_layers.size() + 500.f)) *
m_canvas->m_plane_transform[plane_index] *
glm::translate(glm::vec3(0, 0, -1.f));
.draw_mask_free = [&] {
m_canvas->modes[(int)kCanvasMode::MaskFree][0]->on_Draw(ortho_proj, proj, camera);
},
.draw_mask_line = [&] {
m_canvas->modes[(int)kCanvasMode::MaskLine][0]->on_Draw(ortho_proj, proj, camera);
},
.draw_smask_faces = [&] {
pp::panopainter::setup_legacy_canvas_draw_merge_texture_mask_shader(
pp::panopainter::LegacyCanvasDrawMergeTextureMaskUniforms {
.texture_slot = 0,
.pattern_offset = m_outline_pan,
});
set_active_texture_unit(0);
apply_node_canvas_capability(pp::renderer::gl::blend_state(), true);
pp::panopainter::apply_legacy_canvas_draw_merge_mvp(plane_mvp);
m_canvas->m_smask.rtt(plane_index).bindTexture();
m_face_plane.draw_fill();
m_canvas->m_smask.rtt(plane_index).unbindTexture();
}
//draw the cube faces
for (int plane_index = 0; plane_index < 6; plane_index++)
{
auto plane_mvp = proj * camera *
glm::scale(glm::vec3(m_canvas->m_layers.size() + 500.f)) *
m_canvas->m_plane_transform[plane_index] *
glm::translate(glm::vec3(0, 0, -1.f));
}
// keep drawing the grids
if (m_canvas->m_current_mode != kCanvasMode::Grid)
for (auto& mode : Canvas::modes[(int)kCanvasMode::Grid])
mode->on_Draw(ortho_proj, proj, camera);
App::I->grid->draw_heightmap(proj, camera, false);
for (auto& mode : *m_canvas->m_mode)
mode->on_Draw(ortho_proj, proj, camera);
pp::panopainter::apply_legacy_canvas_draw_merge_mvp(plane_mvp);
m_canvas->m_smask.rtt(plane_index).bindTexture();
m_face_plane.draw_fill();
m_canvas->m_smask.rtt(plane_index).unbindTexture();
}
},
.draw_grid_modes = [&] {
for (auto& mode : Canvas::modes[(int)kCanvasMode::Grid])
mode->on_Draw(ortho_proj, proj, camera);
},
.draw_heightmap = [&] {
App::I->grid->draw_heightmap(proj, camera, false);
},
.draw_current_modes = [&] {
for (auto& mode : *m_canvas->m_mode)
mode->on_Draw(ortho_proj, proj, camera);
},
});
if (m_density != 1.f)
{