mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-14 12:04:29 +00:00
webgpu: light/dark mask mode support
[issues 2608: light/dark mask](#2608) * CompositeMethod::LightMask * CompositeMethod::DarkMask
This commit is contained in:
parent
a4bbf14371
commit
132b22cb47
3 changed files with 16 additions and 4 deletions
|
@ -40,7 +40,7 @@ private:
|
||||||
WGPUShaderModule shaderBlendSolid[14];
|
WGPUShaderModule shaderBlendSolid[14];
|
||||||
WGPUShaderModule shaderBlendGradient[14];
|
WGPUShaderModule shaderBlendGradient[14];
|
||||||
WGPUShaderModule shaderBlendImage[14];
|
WGPUShaderModule shaderBlendImage[14];
|
||||||
WGPUShaderModule shaderCompose[10];
|
WGPUShaderModule shaderCompose[12];
|
||||||
WGPUShaderModule shaderCopy;
|
WGPUShaderModule shaderCopy;
|
||||||
private:
|
private:
|
||||||
// graphics pipeline layouts
|
// graphics pipeline layouts
|
||||||
|
@ -68,7 +68,7 @@ public:
|
||||||
WGPUComputePipeline blendSolid[14];
|
WGPUComputePipeline blendSolid[14];
|
||||||
WGPUComputePipeline blendGradient[14];
|
WGPUComputePipeline blendGradient[14];
|
||||||
WGPUComputePipeline blendImage[14];
|
WGPUComputePipeline blendImage[14];
|
||||||
WGPUComputePipeline compose[10];
|
WGPUComputePipeline compose[12];
|
||||||
WGPUComputePipeline copy;
|
WGPUComputePipeline copy;
|
||||||
private:
|
private:
|
||||||
void releaseGraphicHandles(WgContext& context);
|
void releaseGraphicHandles(WgContext& context);
|
||||||
|
|
|
@ -652,6 +652,14 @@ std::string cComposeEquation_DifferenceMask = WG_SHADER_SOURCE(
|
||||||
Rc = Sc;
|
Rc = Sc;
|
||||||
Ra = Sa * (1.0 - Ma) + Ma * (1.0 - Sa);
|
Ra = Sa * (1.0 - Ma) + Ma * (1.0 - Sa);
|
||||||
);
|
);
|
||||||
|
std::string cComposeEquation_LightenMask = WG_SHADER_SOURCE(
|
||||||
|
Rc = Sc;
|
||||||
|
Ra = select(Ma, Sa, Sa > Ma);
|
||||||
|
);
|
||||||
|
std::string cComposeEquation_DarkenMask = WG_SHADER_SOURCE(
|
||||||
|
Rc = Sc;
|
||||||
|
Ra = select(Sa, Ma, Sa > Ma);
|
||||||
|
);
|
||||||
|
|
||||||
std::string cComposeFooter = WG_SHADER_SOURCE(
|
std::string cComposeFooter = WG_SHADER_SOURCE(
|
||||||
textureStore(imageTgt, id.xy, vec4f(Rc, Ra));
|
textureStore(imageTgt, id.xy, vec4f(Rc, Ra));
|
||||||
|
@ -668,8 +676,10 @@ std::string compose_AddMask = cComposeHeader + cComposeEquation_AddMask
|
||||||
std::string compose_SubtractMask = cComposeHeader + cComposeEquation_SubtractMask + cComposeFooter;
|
std::string compose_SubtractMask = cComposeHeader + cComposeEquation_SubtractMask + cComposeFooter;
|
||||||
std::string compose_IntersectMask = cComposeHeader + cComposeEquation_IntersectMask + cComposeFooter;
|
std::string compose_IntersectMask = cComposeHeader + cComposeEquation_IntersectMask + cComposeFooter;
|
||||||
std::string compose_DifferenceMask = cComposeHeader + cComposeEquation_DifferenceMask + cComposeFooter;
|
std::string compose_DifferenceMask = cComposeHeader + cComposeEquation_DifferenceMask + cComposeFooter;
|
||||||
|
std::string compose_LightenMask = cComposeHeader + cComposeEquation_LightenMask + cComposeFooter;
|
||||||
|
std::string compose_DarkenMask = cComposeHeader + cComposeEquation_DarkenMask + cComposeFooter;
|
||||||
|
|
||||||
const char* cShaderSrc_Compose[10] {
|
const char* cShaderSrc_Compose[12] {
|
||||||
compose_None.c_str(),
|
compose_None.c_str(),
|
||||||
compose_ClipPath.c_str(),
|
compose_ClipPath.c_str(),
|
||||||
compose_AlphaMask.c_str(),
|
compose_AlphaMask.c_str(),
|
||||||
|
@ -680,6 +690,8 @@ const char* cShaderSrc_Compose[10] {
|
||||||
compose_SubtractMask.c_str(),
|
compose_SubtractMask.c_str(),
|
||||||
compose_IntersectMask.c_str(),
|
compose_IntersectMask.c_str(),
|
||||||
compose_DifferenceMask.c_str(),
|
compose_DifferenceMask.c_str(),
|
||||||
|
compose_LightenMask.c_str(),
|
||||||
|
compose_DarkenMask.c_str()
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* cShaderSrc_Copy = WG_SHADER_SOURCE(
|
const char* cShaderSrc_Copy = WG_SHADER_SOURCE(
|
||||||
|
|
|
@ -36,7 +36,7 @@ extern const char* cShaderSrc_Blend_Solid[14];
|
||||||
extern const char* cShaderSrc_Blend_Solid[14];
|
extern const char* cShaderSrc_Blend_Solid[14];
|
||||||
extern const char* cShaderSrc_Blend_Gradient[14];
|
extern const char* cShaderSrc_Blend_Gradient[14];
|
||||||
extern const char* cShaderSrc_Blend_Image[14];
|
extern const char* cShaderSrc_Blend_Image[14];
|
||||||
extern const char* cShaderSrc_Compose[10];
|
extern const char* cShaderSrc_Compose[12];
|
||||||
extern const char* cShaderSrc_Copy;
|
extern const char* cShaderSrc_Copy;
|
||||||
|
|
||||||
#endif // _TVG_WG_SHEDER_SRC_H_
|
#endif // _TVG_WG_SHEDER_SRC_H_
|
||||||
|
|
Loading…
Add table
Reference in a new issue