mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-08 13:43:43 +00:00
gl_engine: implement darken and lighten mask method
Add new shader to support darken and lighten mask method.
This commit is contained in:
parent
2238109ada
commit
894ecd7461
4 changed files with 48 additions and 0 deletions
|
@ -99,6 +99,8 @@ void GlRenderer::initShaders()
|
||||||
mPrograms.push_back(make_unique<GlProgram>(GlShader::gen(MASK_VERT_SHADER, MASK_SUB_FRAG_SHADER)));
|
mPrograms.push_back(make_unique<GlProgram>(GlShader::gen(MASK_VERT_SHADER, MASK_SUB_FRAG_SHADER)));
|
||||||
mPrograms.push_back(make_unique<GlProgram>(GlShader::gen(MASK_VERT_SHADER, MASK_INTERSECT_FRAG_SHADER)));
|
mPrograms.push_back(make_unique<GlProgram>(GlShader::gen(MASK_VERT_SHADER, MASK_INTERSECT_FRAG_SHADER)));
|
||||||
mPrograms.push_back(make_unique<GlProgram>(GlShader::gen(MASK_VERT_SHADER, MASK_DIFF_FRAG_SHADER)));
|
mPrograms.push_back(make_unique<GlProgram>(GlShader::gen(MASK_VERT_SHADER, MASK_DIFF_FRAG_SHADER)));
|
||||||
|
mPrograms.push_back(make_unique<GlProgram>(GlShader::gen(MASK_VERT_SHADER, MASK_LIGHTEN_FRAG_SHADER)));
|
||||||
|
mPrograms.push_back(make_unique<GlProgram>(GlShader::gen(MASK_VERT_SHADER, MASK_DARKEN_FRAG_SHADER)));
|
||||||
// stencil Renderer
|
// stencil Renderer
|
||||||
mPrograms.push_back(make_unique<GlProgram>(GlShader::gen(STENCIL_VERT_SHADER, STENCIL_FRAG_SHADER)));
|
mPrograms.push_back(make_unique<GlProgram>(GlShader::gen(STENCIL_VERT_SHADER, STENCIL_FRAG_SHADER)));
|
||||||
// blit Renderer
|
// blit Renderer
|
||||||
|
@ -797,6 +799,12 @@ void GlRenderer::endRenderPass(RenderCompositor* cmp)
|
||||||
case CompositeMethod::DifferenceMask:
|
case CompositeMethod::DifferenceMask:
|
||||||
program = mPrograms[RT_MaskDifference].get();
|
program = mPrograms[RT_MaskDifference].get();
|
||||||
break;
|
break;
|
||||||
|
case CompositeMethod::LightenMask:
|
||||||
|
program = mPrograms[RT_MaskLighten].get();
|
||||||
|
break;
|
||||||
|
case CompositeMethod::DarkenMask:
|
||||||
|
program = mPrograms[RT_MaskDarken].get();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,8 @@ public:
|
||||||
RT_MaskSub,
|
RT_MaskSub,
|
||||||
RT_MaskIntersect,
|
RT_MaskIntersect,
|
||||||
RT_MaskDifference,
|
RT_MaskDifference,
|
||||||
|
RT_MaskLighten,
|
||||||
|
RT_MaskDarken,
|
||||||
RT_Stencil,
|
RT_Stencil,
|
||||||
RT_Blit,
|
RT_Blit,
|
||||||
RT_MultiplyBlend,
|
RT_MultiplyBlend,
|
||||||
|
|
|
@ -473,6 +473,42 @@ void main() { \n
|
||||||
} \n
|
} \n
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const char* MASK_DARKEN_FRAG_SHADER = TVG_COMPOSE_SHADER(
|
||||||
|
uniform sampler2D uSrcTexture; \n
|
||||||
|
uniform sampler2D uMaskTexture; \n
|
||||||
|
\n
|
||||||
|
in vec2 vUV; \n
|
||||||
|
\n
|
||||||
|
out vec4 FragColor; \n
|
||||||
|
\n
|
||||||
|
void main() { \n
|
||||||
|
vec4 srcColor = texture(uSrcTexture, vUV); \n
|
||||||
|
vec4 maskColor = texture(uMaskTexture, vUV); \n
|
||||||
|
if (srcColor.a > 0.0) srcColor.rgb /= srcColor.a; \n
|
||||||
|
float alpha = min(srcColor.a, maskColor.a); \n
|
||||||
|
\n
|
||||||
|
FragColor = vec4(srcColor.rgb * alpha, alpha); \n
|
||||||
|
} \n
|
||||||
|
);
|
||||||
|
|
||||||
|
const char* MASK_LIGHTEN_FRAG_SHADER = TVG_COMPOSE_SHADER(
|
||||||
|
uniform sampler2D uSrcTexture; \n
|
||||||
|
uniform sampler2D uMaskTexture; \n
|
||||||
|
\n
|
||||||
|
in vec2 vUV; \n
|
||||||
|
\n
|
||||||
|
out vec4 FragColor; \n
|
||||||
|
\n
|
||||||
|
void main() { \n
|
||||||
|
vec4 srcColor = texture(uSrcTexture, vUV); \n
|
||||||
|
vec4 maskColor = texture(uMaskTexture, vUV); \n
|
||||||
|
if (srcColor.a > 0.0) srcColor.rgb /= srcColor.a; \n
|
||||||
|
float alpha = max(srcColor.a, maskColor.a); \n
|
||||||
|
\n
|
||||||
|
FragColor = vec4(srcColor.rgb * alpha, alpha); \n
|
||||||
|
} \n
|
||||||
|
);
|
||||||
|
|
||||||
const char* STENCIL_VERT_SHADER = TVG_COMPOSE_SHADER(
|
const char* STENCIL_VERT_SHADER = TVG_COMPOSE_SHADER(
|
||||||
uniform float uDepth; \n
|
uniform float uDepth; \n
|
||||||
layout(location = 0) in vec2 aLocation; \n
|
layout(location = 0) in vec2 aLocation; \n
|
||||||
|
|
|
@ -39,6 +39,8 @@ extern const char* MASK_ADD_FRAG_SHADER;
|
||||||
extern const char* MASK_SUB_FRAG_SHADER;
|
extern const char* MASK_SUB_FRAG_SHADER;
|
||||||
extern const char* MASK_INTERSECT_FRAG_SHADER;
|
extern const char* MASK_INTERSECT_FRAG_SHADER;
|
||||||
extern const char* MASK_DIFF_FRAG_SHADER;
|
extern const char* MASK_DIFF_FRAG_SHADER;
|
||||||
|
extern const char* MASK_DARKEN_FRAG_SHADER;
|
||||||
|
extern const char* MASK_LIGHTEN_FRAG_SHADER;
|
||||||
extern const char* STENCIL_VERT_SHADER;
|
extern const char* STENCIL_VERT_SHADER;
|
||||||
extern const char* STENCIL_FRAG_SHADER;
|
extern const char* STENCIL_FRAG_SHADER;
|
||||||
extern const char* BLIT_VERT_SHADER;
|
extern const char* BLIT_VERT_SHADER;
|
||||||
|
|
Loading…
Add table
Reference in a new issue