From 92d4a43fcf1cee7c3ed8d6099a7bf68c6ffcecd0 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Sun, 28 Jul 2019 14:51:33 +0200 Subject: [PATCH] fix stroke padding rect --- src/canvas.cpp | 28 +++++++--------------------- src/node_canvas.cpp | 2 ++ 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/src/canvas.cpp b/src/canvas.cpp index c178185..16e0ec8 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -606,8 +606,11 @@ void Canvas::stroke_draw() m_tmp[i].bindFramebuffer(); if (!ShaderManager::ext_framebuffer_fetch) { + glm::vec2 o = glm::max({0, 0}, xy(b) - pad); + glm::vec2 sz = glm::min(m_size, zw(b) + pad) - o; m_tex[i].bind(); - glCopyTexSubImage2D(GL_TEXTURE_2D, 0, b.x, b.y, b.x, b.y, box_size.x, box_size.y); + if (sz.x > 0 && sz.y > 0) + glCopyTexSubImage2D(GL_TEXTURE_2D, 0, o.x, o.y, o.x, o.y, sz.x, sz.y); } m_brush_shape.draw_fill(); m_tmp[i].unbindFramebuffer(); @@ -1228,26 +1231,9 @@ void Canvas::stroke_start(glm::vec3 point, float pressure) m_dirty_box[i] = glm::vec4(m_width, m_height, 0, 0); // reset bounding box m_dirty_face[i] = false; - if (l->m_dirty_face[i]) - { - m_tmp[i].bindFramebuffer(); - // clear - m_tmp[i].clear(); - glActiveTexture(GL_TEXTURE1); - m_tex[i].bind(); - glCopyTexSubImage2D(GL_TEXTURE_2D, 0, - 0, 0, 0, 0, m_width, m_height); - - m_tmp[i].copy(l->m_rtt[i]); - m_tmp[i].clear_mask({ 0, 0, 0, 1 }); - m_tmp[i].unbindFramebuffer(); - } - else - { - m_tmp[i].bindFramebuffer(); - m_tmp[i].clear({ 0, 0, 0, 0 }); - m_tmp[i].unbindFramebuffer(); - } + m_tmp[i].bindFramebuffer(); + m_tmp[i].clear({ 0, 0, 0, 0 }); + m_tmp[i].unbindFramebuffer(); if (m_current_brush->m_dual_enabled) { diff --git a/src/node_canvas.cpp b/src/node_canvas.cpp index 41f46ea..3308f1b 100644 --- a/src/node_canvas.cpp +++ b/src/node_canvas.cpp @@ -167,6 +167,8 @@ void NodeCanvas::draw() { use_blend |= m_canvas->m_layers[i]->m_blend_mode != 0; } + if (Canvas::I->m_current_stroke) + use_blend |= Canvas::I->m_current_stroke->m_brush->m_blend_mode != 0; if (use_blend) {