Skip to content

Commit f68f26a

Browse files
Merge pull request #66 from Live2D/develop
Update to Cubism 5 SDK for Native R5 beta3_1
2 parents 86890a4 + 6c1d4a1 commit f68f26a

26 files changed

Lines changed: 62 additions & 44 deletions

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,19 @@ All notable changes to this project will be documented in this file.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
66

7+
8+
## [5-r.5-beta.3.1] - 2026-02-19
9+
10+
### Added
11+
12+
* Add missing default labels in switch statements of `CubismShader_OpenGLES2` and `CubismRenderer_Vulkan`.
13+
14+
### Fixed
15+
16+
* Fix incorrect implementation of `csmVector::Insert`.
17+
* Fix a bug where rendering results were not as expected when using Blend mode on semi-transparent objects.
18+
19+
720
## [5-r.5-beta.3] - 2026-01-29
821

922
### Added
@@ -533,6 +546,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
533546
* Fix invalid expressions of `CubismCdiJson`.
534547

535548

549+
[5-r.5-beta.3.1]: https://github.com/Live2D/CubismNativeFramework/compare/5-r.5-beta.3...5-r.5-beta.3.1
536550
[5-r.5-beta.3]: https://github.com/Live2D/CubismNativeFramework/compare/5-r.5-beta.2...5-r.5-beta.3
537551
[5-r.5-beta.2]: https://github.com/Live2D/CubismNativeFramework/compare/5-r.5-beta.1...5-r.5-beta.2
538552
[5-r.5-beta.1]: https://github.com/Live2D/CubismNativeFramework/compare/5-r.4.1...5-r.5-beta.1

src/Rendering/D3D11/Shaders/CubismBlendMode.fx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ ColorInfo GetMaskedColorInfo(VS_OUT In) {
381381
maskUv.y = 1.0f + maskUv.y;
382382
float4 clipMask = (1.0f - maskTexture.Sample(mainSampler, maskUv)) * channelFlag;
383383
float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a;
384-
color.source = color.source * maskVal;
384+
color.source = float4(color.source.rgb, color.source.a * maskVal);
385385
color.destination = ConvertPremultipliedToStraight(blendTexture.Sample(mainSampler, In.blendUv));
386386
return color;
387387
}
@@ -397,7 +397,7 @@ ColorInfo GetMaskedInvertedColorInfo(VS_OUT In) {
397397
maskUv.y = 1.0f + maskUv.y;
398398
float4 clipMask = (1.0f - maskTexture.Sample(mainSampler, maskUv)) * channelFlag;
399399
float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a;
400-
color.source = color.source * (1.0f - maskVal);
400+
color.source = float4(color.source.rgb, color.source.a * (1.0f - maskVal));
401401
color.destination = ConvertPremultipliedToStraight(blendTexture.Sample(mainSampler, In.blendUv));
402402
return color;
403403
}
@@ -413,7 +413,7 @@ ColorInfo GetMaskedPremultColorInfo(VS_OUT In) {
413413
maskUv.y = 1.0f + maskUv.y;
414414
float4 clipMask = (1.0f - maskTexture.Sample(mainSampler, maskUv)) * channelFlag;
415415
float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a;
416-
color.source = color.source * maskVal;
416+
color.source = float4(color.source.rgb, color.source.a * maskVal);
417417
color.destination = ConvertPremultipliedToStraight(blendTexture.Sample(mainSampler, In.blendUv));
418418
return color;
419419
}
@@ -429,7 +429,7 @@ ColorInfo GetMaskedInvertedPremultColorInfo(VS_OUT In) {
429429
maskUv.y = 1.0f + maskUv.y;
430430
float4 clipMask = (1.0f - maskTexture.Sample(mainSampler, maskUv)) * channelFlag;
431431
float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a;
432-
color.source = color.source * (1.0f - maskVal);
432+
color.source = float4(color.source.rgb, color.source.a * (1.0f - maskVal));
433433
color.destination = ConvertPremultipliedToStraight(blendTexture.Sample(mainSampler, In.blendUv));
434434
return color;
435435
}

src/Rendering/D3D9/Shaders/CubismBlendMode.fx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ ColorInfo GetMaskedColorInfo(VS_OUT In) {
389389
maskUv.y = 1.0f + maskUv.y;
390390
float4 clipMask = (1.0f - tex2D(maskSampler, maskUv)) * channelFlag;
391391
float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a;
392-
color.source = color.source * maskVal;
392+
color.source = float4(color.source.rgb, color.source.a * maskVal);
393393
color.destination = ConvertPremultipliedToStraight(tex2D(blendSampler, In.blendUv));
394394
return color;
395395
}
@@ -405,7 +405,7 @@ ColorInfo GetMaskedInvertedColorInfo(VS_OUT In) {
405405
maskUv.y = 1.0f + maskUv.y;
406406
float4 clipMask = (1.0f - tex2D(maskSampler, maskUv)) * channelFlag;
407407
float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a;
408-
color.source = color.source * (1.0f - maskVal);
408+
color.source = float4(color.source.rgb, color.source.a * (1.0f - maskVal));
409409
color.destination = ConvertPremultipliedToStraight(tex2D(blendSampler, In.blendUv));
410410
return color;
411411
}
@@ -421,7 +421,7 @@ ColorInfo GetMaskedPremultColorInfo(VS_OUT In) {
421421
maskUv.y = 1.0f + maskUv.y;
422422
float4 clipMask = (1.0f - tex2D(maskSampler, maskUv)) * channelFlag;
423423
float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a;
424-
color.source = color.source * maskVal;
424+
color.source = float4(color.source.rgb, color.source.a * maskVal);
425425
color.destination = ConvertPremultipliedToStraight(tex2D(blendSampler, In.blendUv));
426426
return color;
427427
}
@@ -437,7 +437,7 @@ ColorInfo GetMaskedInvertedPremultColorInfo(VS_OUT In) {
437437
maskUv.y = 1.0f + maskUv.y;
438438
float4 clipMask = (1.0f - tex2D(maskSampler, maskUv)) * channelFlag;
439439
float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a;
440-
color.source = color.source * (1.0f - maskVal);
440+
color.source = float4(color.source.rgb, color.source.a * (1.0f - maskVal));
441441
color.destination = ConvertPremultipliedToStraight(tex2D(blendSampler, In.blendUv));
442442
return color;
443443
}

src/Rendering/Metal/Shaders/FragShaderSrcMaskBlend.metal

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,9 @@ FragShaderSrcMaskBlend(MaskedBlendRasterizerData in [[stage_in]],
2727
texColor.rgb = texColor.rgb * uniforms.multiplyColor.rgb;
2828
texColor.rgb = texColor.rgb + uniforms.screenColor.rgb - (texColor.rgb * uniforms.screenColor.rgb);
2929
float4 col_formask = texColor * uniforms.baseColor;
30-
col_formask.rgb = col_formask.rgb * col_formask.a ;
3130
float4 clipMask = (1.0 - texture1.sample(smp, in.myPos.xy / in.myPos.w)) * uniforms.channelFlag;
3231
float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a;
33-
col_formask = col_formask * maskVal;
34-
float4 colorSource = col_formask;
32+
float4 colorSource = float4(col_formask.rgb, col_formask.a * maskVal);
3533
float4 colorDestination = ConvertPremultipliedToStraight(blendTexture.sample(smp, in.blendCoord));
3634
float4 outColor = AlphaBlend(ColorBlend(colorSource.rgb, colorDestination.rgb), colorSource, colorDestination);
3735

src/Rendering/Metal/Shaders/FragShaderSrcMaskInvertedBlend.metal

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,9 @@ FragShaderSrcMaskInvertedBlend(MaskedBlendRasterizerData in [[stage_in]],
2727
texColor.rgb = texColor.rgb * uniforms.multiplyColor.rgb;
2828
texColor.rgb = texColor.rgb + uniforms.screenColor.rgb - (texColor.rgb * uniforms.screenColor.rgb);
2929
float4 col_formask = texColor * uniforms.baseColor;
30-
col_formask.rgb = col_formask.rgb * col_formask.a ;
3130
float4 clipMask = (1.0 - texture1.sample(smp, in.myPos.xy / in.myPos.w)) * uniforms.channelFlag;
3231
float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a;
33-
col_formask = col_formask * (1.0 - maskVal);
34-
float4 colorSource = col_formask;
32+
float4 colorSource = float4(col_formask.rgb, col_formask.a * (1.0 - maskVal));
3533
float4 colorDestination = ConvertPremultipliedToStraight(blendTexture.sample(smp, in.blendCoord));
3634
float4 outColor = AlphaBlend(ColorBlend(colorSource.rgb, colorDestination.rgb), colorSource, colorDestination);
3735

src/Rendering/Metal/Shaders/FragShaderSrcMaskInvertedPremultipliedAlphaBlend.metal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ FragShaderSrcMaskInvertedPremultipliedAlphaBlend(MaskedBlendRasterizerData in [[
2929
float4 col_formask = ConvertPremultipliedToStraight(texColor * uniforms.baseColor);
3030
float4 clipMask = (1.0 - texture1.sample(smp, in.myPos.xy / in.myPos.w)) * uniforms.channelFlag;
3131
float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a;
32-
float4 colorSource = col_formask * (1.0 - maskVal);
32+
float4 colorSource = float4(col_formask.rgb, col_formask.a * (1.0 - maskVal));
3333
float4 colorDestination = ConvertPremultipliedToStraight(blendTexture.sample(smp, in.blendCoord));
3434
float4 outColor = AlphaBlend(ColorBlend(colorSource.rgb, colorDestination.rgb), colorSource, colorDestination);
3535

src/Rendering/Metal/Shaders/FragShaderSrcMaskPremultipliedAlphaBlend.metal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ FragShaderSrcMaskPremultipliedAlphaBlend(MaskedBlendRasterizerData in [[stage_in
2929
float4 col_formask = ConvertPremultipliedToStraight(texColor * uniforms.baseColor);
3030
float4 clipMask = (1.0 - texture1.sample(smp, in.myPos.xy / in.myPos.w)) * uniforms.channelFlag;
3131
float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a;
32-
float4 colorSource = col_formask * maskVal;
32+
float4 colorSource = float4(col_formask.rgb, col_formask.a * maskVal);
3333
float4 colorDestination = ConvertPremultipliedToStraight(blendTexture.sample(smp, in.blendCoord));
3434
float4 outColor = AlphaBlend(ColorBlend(colorSource.rgb, colorDestination.rgb), colorSource, colorDestination);
3535

src/Rendering/OpenGL/CubismShader_OpenGLES2.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,8 @@ void CubismShader_OpenGLES2::SetShaderSet(CubismShaderSet& shaderSets, const Mas
183183
shaderSets.UniformClipMatrixLocation = glGetUniformLocation(shaderSets.ShaderProgram, "u_clipMatrix");
184184
shaderSets.UnifromChannelFlagLocation = glGetUniformLocation(shaderSets.ShaderProgram, "u_channelFlag");
185185
break;
186+
default:
187+
break;
186188
}
187189
}
188190

src/Rendering/OpenGL/Shaders/Standard/FragShaderSrcMaskBlend.frag

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ void main()
3030
vec4 col_formask = texColor * u_baseColor;
3131
vec4 clipMask = (1.0 - texture2D(s_texture1, v_clipPos.xy / v_clipPos.w)) * u_channelFlag;
3232
float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a;
33-
vec4 colorSource = col_formask * maskVal;
33+
vec4 colorSource = vec4(col_formask.rgb, col_formask.a * maskVal);
3434
vec4 colorDestination = ConvertPremultipliedToStraight(texture2D(s_blendTexture, v_blendCoord));
3535
gl_FragColor = AlphaBlend(ColorBlend(colorSource.rgb, colorDestination.rgb), colorSource, colorDestination);
3636
}

src/Rendering/OpenGL/Shaders/Standard/FragShaderSrcMaskInvertedBlend.frag

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ void main()
3030
vec4 col_formask = texColor * u_baseColor;
3131
vec4 clipMask = (1.0 - texture2D(s_texture1, v_clipPos.xy / v_clipPos.w)) * u_channelFlag;
3232
float maskVal = clipMask.r + clipMask.g + clipMask.b + clipMask.a;
33-
vec4 colorSource = col_formask * (1.0 - maskVal);
33+
vec4 colorSource = vec4(col_formask.rgb, col_formask.a * (1.0 - maskVal));
3434
vec4 colorDestination = ConvertPremultipliedToStraight(texture2D(s_blendTexture, v_blendCoord));
3535
gl_FragColor = AlphaBlend(ColorBlend(colorSource.rgb, colorDestination.rgb), colorSource, colorDestination);
3636
}

0 commit comments

Comments
 (0)