使用硬件合成¶
硬件合成提供了一种高性能的方法,通过显示控制器的层来合成多个窗口。如果您的 Kanzi 应用程序由多个应用程序组成,并且这些应用程序层叠在一起,例如带有叠加的集群,则可以合成多个窗口。使用硬件合成时,您可以分别开发和运行这些应用程序。
硬件合成创建一个可以像纹理一样使用的合成目标。要获得正确的结果,硬件合成必须使用预乘 alpha。请参阅 阿尔法预乘。
当 Screen 节点的 Screen Clear Color 属性被设置时,Kanzi 会将颜色值直接写入屏幕输出。这意味着 Screen Clear Color 的 RGB 值必须与 alpha 值预乘。
如果硬件合成不使用经过预乘的阿尔法,您必须将 Kanzi 输出的 RGBA 值转换为未经预乘的阿尔法。要将 RGBA 值转换为未经预乘的阿尔法:
设置 Kanzi 以将预期输出绘制到纹理。
将该纹理绘制到屏幕上,并将 Blend Mode 属性设置为 Opaque,使用一个片段着色器输出 RGBA 值,其中您将 RGB 值除以 Alpha 值。
例如:
在 Library > Materials and Textures > Material Types 中复制 DefaultBlit 材质类型,并重命名新的材质类型以及使用该材质类型的材质。
小技巧
如果您的项目不包含 DefaultBlit 材质类型,请在 Library > Materials and Textures 按 Alt 并右键单击 Material Types 中,选择 DefaultBlit。
在 Library > Materials and Textures > Material Types 中双击新材质类型的 Fragment Shader 以在 Shader Source Editor 中打开它,并将片段着色器文件的内容替换为:
#version 310 es precision lowp float; uniform sampler2D ContentTexture; in mediump vec2 vTexCoord; layout(location = 0) out vec4 fragColor; void main() { vec4 color = texture(ContentTexture, vTexCoord); if(color.a > 0.0) { color.rgb /= color.a; } fragColor = color; }
在 Library > Materials and Textures > Material Types 中选择您编辑其片段着色器的材质类型,在 Properties 中点击 Sync with Uniforms,并在 Delete Property Type 对话框中点击 Yes 以删除材质类型不再使用的绑定和属性类型。
在 Library > Materials and Textures > Brushes 中创建一个 Material Brush,并在 Properties 中将 Material 属性设置为使用您创建的材质类型的材质。
在 Properties 中,靠近 Material 属性,点击
以转到 Material Brush 使用的材质,并确保将材质的 Blend Mode 属性设置为 Opaque。
在 Node Tree 中选择 RootNode 节点,并在 Properties 中添加并设置:
将您创建的材质画笔应用到 Composition Brush。
将 Force Composition 设置为 enabled。