selection outline animated
This commit is contained in:
@@ -15,14 +15,13 @@ void main()
|
|||||||
[[fragment]]
|
[[fragment]]
|
||||||
|
|
||||||
uniform sampler2D tex;
|
uniform sampler2D tex;
|
||||||
|
uniform vec2 pattern_offset;
|
||||||
|
|
||||||
in mediump vec2 uv;
|
in mediump vec2 uv;
|
||||||
out mediump vec4 frag;
|
out mediump vec4 frag;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
mediump float stroke = 1.0 - texture(tex, uv).r;
|
|
||||||
|
|
||||||
int zero_count = 0;
|
int zero_count = 0;
|
||||||
if (textureOffset(tex, uv, ivec2(-1, -1)).r > 0.99) zero_count++;
|
if (textureOffset(tex, uv, ivec2(-1, -1)).r > 0.99) zero_count++;
|
||||||
if (textureOffset(tex, uv, ivec2(-1, 0)).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 c1 = vec4(1.0, 1.0, 1.0, 1.0);
|
||||||
const mediump vec4 c2 = vec4(0.9, 0.9, 0.9, 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);
|
mediump float alpha = mix(c.x, 1.0 - c.x, c.y);
|
||||||
|
|
||||||
frag = vec4(vec3(edge * alpha), edge);
|
frag = vec4(vec3(edge * alpha), edge);
|
||||||
|
|||||||
@@ -441,15 +441,20 @@ void NodeCanvas::draw()
|
|||||||
}
|
}
|
||||||
|
|
||||||
glDisable(GL_DEPTH_TEST);
|
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_active || m_canvas->m_current_mode == kCanvasMode::Copy || m_canvas->m_current_mode == kCanvasMode::Cut)
|
||||||
{
|
{
|
||||||
// if (m_canvas->m_smask_mode == 1)
|
if (m_canvas->m_smask_mode == 1)
|
||||||
// m_canvas->modes[(int)kCanvasMode::MaskFree][0]->on_Draw(ortho_proj, proj, camera);
|
m_canvas->modes[(int)kCanvasMode::MaskFree][0]->on_Draw(ortho_proj, proj, camera);
|
||||||
// else if (m_canvas->m_smask_mode == 2)
|
else if (m_canvas->m_smask_mode == 2)
|
||||||
// m_canvas->modes[(int)kCanvasMode::MaskLine][0]->on_Draw(ortho_proj, proj, camera);
|
m_canvas->modes[(int)kCanvasMode::MaskLine][0]->on_Draw(ortho_proj, proj, camera);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_canvas->m_smask_active)
|
||||||
|
{
|
||||||
ShaderManager::use(kShader::TextureMask);
|
ShaderManager::use(kShader::TextureMask);
|
||||||
ShaderManager::u_int(kShaderUniform::Tex, 0);
|
ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||||
|
ShaderManager::u_vec2(kShaderUniform::PatternOffset, m_outline_pan);
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
|
|
||||||
@@ -644,6 +649,11 @@ void NodeCanvas::reset_camera()
|
|||||||
m_canvas->m_pan = {0, 0};
|
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()
|
void NodeCanvas::destroy_immediate()
|
||||||
{
|
{
|
||||||
Node::destroy_immediate();
|
Node::destroy_immediate();
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ public:
|
|||||||
Plane m_face_plane;
|
Plane m_face_plane;
|
||||||
LineSegment m_line;
|
LineSegment m_line;
|
||||||
Plane m_grid;
|
Plane m_grid;
|
||||||
|
glm::vec2 m_outline_pan;
|
||||||
int m_grid_divs = 30;
|
int m_grid_divs = 30;
|
||||||
virtual Node* clone_instantiate() const override;
|
virtual Node* clone_instantiate() const override;
|
||||||
virtual void init() override;
|
virtual void init() override;
|
||||||
@@ -25,5 +26,6 @@ public:
|
|||||||
virtual void handle_resize(glm::vec2 old_size, glm::vec2 new_size) override;
|
virtual void handle_resize(glm::vec2 old_size, glm::vec2 new_size) override;
|
||||||
virtual kEventResult handle_event(Event* e) override;
|
virtual kEventResult handle_event(Event* e) override;
|
||||||
virtual void destroy_immediate() override;
|
virtual void destroy_immediate() override;
|
||||||
|
virtual void on_tick(float dt) override;
|
||||||
void reset_camera();
|
void reset_camera();
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user