diff --git a/data/shaders/texture-mask.glsl b/data/shaders/texture-mask.glsl index 04dbb46..f3e50f2 100644 --- a/data/shaders/texture-mask.glsl +++ b/data/shaders/texture-mask.glsl @@ -15,14 +15,13 @@ void main() [[fragment]] uniform sampler2D tex; +uniform vec2 pattern_offset; in mediump vec2 uv; out mediump vec4 frag; void main() { - mediump float stroke = 1.0 - texture(tex, uv).r; - int zero_count = 0; if (textureOffset(tex, uv, ivec2(-1, -1)).r > 0.99) zero_count++; if (textureOffset(tex, uv, ivec2(-1, 0)).r > 0.99) zero_count++; @@ -37,7 +36,7 @@ void main() const mediump vec4 c1 = vec4(1.0, 1.0, 1.0, 1.0); const mediump vec4 c2 = vec4(0.9, 0.9, 0.9, 1.0); - mediump vec2 c = floor(fract(uv * 50.0) * 2.0); + mediump vec2 c = floor(fract((uv + pattern_offset) * 50.0) * 2.0); mediump float alpha = mix(c.x, 1.0 - c.x, c.y); frag = vec4(vec3(edge * alpha), edge); diff --git a/src/node_canvas.cpp b/src/node_canvas.cpp index e35dbb5..d88b6b4 100644 --- a/src/node_canvas.cpp +++ b/src/node_canvas.cpp @@ -441,15 +441,20 @@ void NodeCanvas::draw() } glDisable(GL_DEPTH_TEST); + 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_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) + { ShaderManager::use(kShader::TextureMask); ShaderManager::u_int(kShaderUniform::Tex, 0); + ShaderManager::u_vec2(kShaderUniform::PatternOffset, m_outline_pan); glActiveTexture(GL_TEXTURE0); glEnable(GL_BLEND); @@ -644,6 +649,11 @@ void NodeCanvas::reset_camera() m_canvas->m_pan = {0, 0}; } +void NodeCanvas::on_tick(float dt) +{ + m_outline_pan = glm::fract(m_outline_pan + dt * 0.01f); +} + void NodeCanvas::destroy_immediate() { Node::destroy_immediate(); diff --git a/src/node_canvas.h b/src/node_canvas.h index b84d869..3639df1 100644 --- a/src/node_canvas.h +++ b/src/node_canvas.h @@ -16,6 +16,7 @@ public: Plane m_face_plane; LineSegment m_line; Plane m_grid; + glm::vec2 m_outline_pan; int m_grid_divs = 30; virtual Node* clone_instantiate() const override; virtual void init() override; @@ -25,5 +26,6 @@ public: virtual void handle_resize(glm::vec2 old_size, glm::vec2 new_size) override; virtual kEventResult handle_event(Event* e) override; virtual void destroy_immediate() override; + virtual void on_tick(float dt) override; void reset_camera(); };