mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-16 12:49:59 +01:00
Implementation of 2 corner masks
This commit is contained in:
@@ -293,6 +293,8 @@ set(VMIX_RSC_FILES
|
||||
./rsc/shaders/mask_elipse.fs
|
||||
./rsc/shaders/mask_box.fs
|
||||
./rsc/shaders/mask_round.fs
|
||||
./rsc/shaders/mask_lowleftcorner.fs
|
||||
./rsc/shaders/mask_uprightcorner.fs
|
||||
./rsc/shaders/image.vs
|
||||
./rsc/shaders/imageprocessing.fs
|
||||
./rsc/fonts/Hack-Regular.ttf
|
||||
|
||||
@@ -9,7 +9,12 @@
|
||||
|
||||
static ShadingProgram imageShadingProgram("shaders/image.vs", "shaders/image.fs");
|
||||
|
||||
const char* MaskShader::mask_names[4] = { ICON_FA_EXPAND, ICON_FA_CIRCLE, ICON_FA_MINUS_CIRCLE, ICON_FA_SQUARE };
|
||||
const char* MaskShader::mask_names[6] = { ICON_FA_EXPAND,
|
||||
ICON_FA_CIRCLE,
|
||||
ICON_FA_MINUS_CIRCLE,
|
||||
ICON_FA_SQUARE,
|
||||
ICON_FA_CARET_SQUARE_RIGHT,
|
||||
ICON_FA_CARET_SQUARE_LEFT };
|
||||
std::vector< ShadingProgram* > MaskShader::mask_programs;
|
||||
|
||||
ImageShader::ImageShader(): Shader(), stipple(0.0)
|
||||
@@ -70,6 +75,8 @@ MaskShader::MaskShader(): Shader(), mode(0)
|
||||
mask_programs.push_back(new ShadingProgram("shaders/simple.vs", "shaders/mask_elipse.fs"));
|
||||
mask_programs.push_back(new ShadingProgram("shaders/simple.vs", "shaders/mask_round.fs"));
|
||||
mask_programs.push_back(new ShadingProgram("shaders/simple.vs", "shaders/mask_box.fs"));
|
||||
mask_programs.push_back(new ShadingProgram("shaders/simple.vs", "shaders/mask_lowleftcorner.fs"));
|
||||
mask_programs.push_back(new ShadingProgram("shaders/simple.vs", "shaders/mask_uprightcorner.fs"));
|
||||
}
|
||||
// reset instance
|
||||
reset();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#ifndef IMAGESHADER_H
|
||||
#ifndef IMAGESHADER_H
|
||||
#define IMAGESHADER_H
|
||||
|
||||
#include <string>
|
||||
@@ -47,7 +47,7 @@ public:
|
||||
float blur;
|
||||
glm::vec2 size;
|
||||
|
||||
static const char* mask_names[4];
|
||||
static const char* mask_names[6];
|
||||
static std::vector< ShadingProgram* > mask_programs;
|
||||
};
|
||||
|
||||
|
||||
10
View.cpp
10
View.cpp
@@ -1881,8 +1881,9 @@ AppearanceView::AppearanceView() : View(APPEARANCE), edit_source_(nullptr), need
|
||||
// marks on the frame to show scale
|
||||
show_scale_ = false;
|
||||
horizontal_mark_ = new Mesh("mesh/h_mark.ply");
|
||||
horizontal_mark_->translation_ = glm::vec3(0.f, 1.f, 0.0f);
|
||||
horizontal_mark_->translation_ = glm::vec3(0.f, -1.f, 0.0f);
|
||||
horizontal_mark_->scale_ = glm::vec3(2.5f, -2.5f, 0.0f);
|
||||
horizontal_mark_->rotation_.z = M_PI;
|
||||
horizontal_mark_->shader()->color = glm::vec4( COLOR_TRANSITION_LINES, 0.9f );
|
||||
scene.bg()->attach(horizontal_mark_);
|
||||
vertical_mark_ = new Mesh("mesh/h_mark.ply");
|
||||
@@ -2146,7 +2147,14 @@ void AppearanceView::adjustBackground()
|
||||
mask_node_->visible_ = edit_source_->maskShader()->mode > 0;
|
||||
mask_circle_->visible_ = edit_source_->maskShader()->mode == 1;
|
||||
mask_square_->visible_ = edit_source_->maskShader()->mode >= 2;
|
||||
if (edit_source_->maskShader()->mode >= 4) {
|
||||
mask_node_->scale_ = scale;
|
||||
mask_node_->translation_ = scale - glm::vec3(edit_source_->maskShader()->size, 0.f) * scale ;
|
||||
mask_node_->translation_.z = 0.f;
|
||||
} else {
|
||||
mask_node_->scale_ = scale * glm::vec3(edit_source_->maskShader()->size, 1.f);
|
||||
mask_node_->translation_ = glm::vec3(0.f);
|
||||
}
|
||||
mask_corner_->scale_.y = mask_corner_->scale_.x * mask_node_->scale_.x / mask_node_->scale_.y;
|
||||
}
|
||||
|
||||
|
||||
36
rsc/shaders/mask_lowleftcorner.fs
Normal file
36
rsc/shaders/mask_lowleftcorner.fs
Normal file
@@ -0,0 +1,36 @@
|
||||
#version 330 core
|
||||
|
||||
out vec4 FragColor;
|
||||
|
||||
in vec4 vertexColor;
|
||||
in vec2 vertexUV;
|
||||
|
||||
// from General Shader
|
||||
uniform vec3 iResolution; // viewport resolution (in pixels)
|
||||
uniform mat4 iTransform; // image transformation
|
||||
uniform vec4 color; // drawing color
|
||||
uniform vec4 uv;
|
||||
|
||||
// Mask Shader
|
||||
uniform vec2 size;
|
||||
uniform float blur;
|
||||
|
||||
float sdRoundSide( in vec2 p, in vec2 b, in float r )
|
||||
{
|
||||
vec2 q = vec2(-1.0, 1.0) * p - b + r;
|
||||
return min(max(q.x,q.y),0.0) + length(max(q,0.0)) - r;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 uv = -1.0 + 2.0 * gl_FragCoord.xy / iResolution.xy;
|
||||
uv.x *= iResolution.x / iResolution.y;
|
||||
|
||||
float d = sdRoundSide( uv, vec2(size.x * iResolution.x/iResolution.y, size.y), blur );
|
||||
|
||||
vec3 col = vec3(1.0 - sign(d));
|
||||
float delta = 0.5 * length(min(size,1.0));
|
||||
col *= 1.0 - exp( -30.0/ (blur * 100.0 * delta + 1.0) * abs(d));
|
||||
|
||||
FragColor = vec4( col, 1.0 );
|
||||
}
|
||||
38
rsc/shaders/mask_uprightcorner.fs
Normal file
38
rsc/shaders/mask_uprightcorner.fs
Normal file
@@ -0,0 +1,38 @@
|
||||
#version 330 core
|
||||
|
||||
out vec4 FragColor;
|
||||
|
||||
in vec4 vertexColor;
|
||||
in vec2 vertexUV;
|
||||
|
||||
// from General Shader
|
||||
uniform vec3 iResolution; // viewport resolution (in pixels)
|
||||
uniform mat4 iTransform; // image transformation
|
||||
uniform vec4 color; // drawing color
|
||||
uniform vec4 uv;
|
||||
|
||||
// Mask Shader
|
||||
uniform vec2 size;
|
||||
uniform float blur;
|
||||
|
||||
|
||||
float sdRoundSide( in vec2 p, in vec2 b, in float r )
|
||||
{
|
||||
vec2 q = vec2(1.0, -1.0) * p - b + r;
|
||||
return min(max(q.x,q.y),0.0) + length(max(q,0.0)) - r;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 uv = -1.0 + 2.0 * gl_FragCoord.xy / iResolution.xy;
|
||||
uv.x *= iResolution.x / iResolution.y;
|
||||
|
||||
vec2 s = 2.0 - size;
|
||||
float d = sdRoundSide( uv, vec2(s.x * iResolution.x/iResolution.y, s.y), blur );
|
||||
|
||||
vec3 col = vec3(1.0 - sign(d));
|
||||
float delta = 0.5 * length(min(size,1.0));
|
||||
col *= 1.0 - exp( -20.0/ (blur * 100.0 * delta + 1.0) * abs(d) );
|
||||
|
||||
FragColor = vec4( col, 1.0 );
|
||||
}
|
||||
Reference in New Issue
Block a user