使用硬件合成

硬件合成提供了一种高性能的方法,通过显示控制器的层来合成多个窗口。如果您的 Kanzi 应用程序由多个应用程序组成,并且这些应用程序层叠在一起,例如带有叠加的集群,则可以合成多个窗口。使用硬件合成时,您可以分别开发和运行这些应用程序。

硬件合成创建一个可以像纹理一样使用的合成目标。要获得正确的结果,硬件合成必须使用预乘 alpha。请参阅 阿尔法预乘。

当 Screen 节点的 Screen Clear Color 属性被设置时,Kanzi 会将颜色值直接写入屏幕输出。这意味着 Screen Clear Color 的 RGB 值必须与 alpha 值预乘。

如果硬件合成不使用经过预乘的阿尔法,您必须将 Kanzi 输出的 RGBA 值转换为未经预乘的阿尔法。要将 RGBA 值转换为未经预乘的阿尔法:

  1. 设置 Kanzi 以将预期输出绘制到纹理。

  2. 将该纹理绘制到屏幕上,并将 Blend Mode 属性设置为 Opaque,使用一个片段着色器输出 RGBA 值,其中您将 RGB 值除以 Alpha 值。

例如:

  1. 在 Library > Materials and Textures > Material Types 中复制 DefaultBlit 材质类型,并重命名新的材质类型以及使用该材质类型的材质。

    小技巧

    如果您的项目不包含 DefaultBlit 材质类型,请在 Library > Materials and Textures 按 Alt 并右键单击 Material Types 中,选择 DefaultBlit。

    ../../_images/duplicate-defaultblit-material-type.png ../../_images/non-premultiplied-material-type.png
  2. 在 Library > Materials and Textures > Material Types 中双击新材质类型的 Fragment Shader 以在 Shader Source Editor 中打开它,并将片段着色器文件的内容替换为:

    uniform sampler2D ContentTexture;
    varying mediump vec2 vTexCoord;
    
    void main()
    {
        precision lowp float;
    
        vec4 color = texture2D(ContentTexture, vTexCoord);
    
        if(color.a > 0.0)
        {
            color.rgb /= color.a;
        }
    
        gl_FragColor = color;
    }
    
  3. 在 Library > Materials and Textures > Material Types 中选择您编辑其片段着色器的材质类型,在 Properties 中点击 Sync with Uniforms,并在 Delete Property Type 对话框中点击 Yes 以删除材质类型不再使用的绑定和属性类型。

    ../../_images/non-premultiplied-sync-with-uniforms.png
  4. 在 Library > Materials and Textures > Brushes 中创建一个 Material Brush,并在 Properties 中将 Material 属性设置为使用您创建的材质类型的材质。

    ../../_images/create-material-brush.png ../../_images/non-premultiplied-brush.png ../../_images/non-premultiplied-brush-properties.png
  5. 在 Properties 中,靠近 Material 属性,点击 image0 以转到 Material Brush 使用的材质,并确保将材质的 Blend Mode 属性设置为 Opaque。

    ../../_images/non-premultiplied-material-properties.png
  6. 在 Node Tree 中选择 RootPage 节点,并在 Properties 中添加和设置:

    • 将您创建的材质画笔应用到 Composition Brush。

    • 将 Force Composition 设置为 enabled。

    ../../_images/rootpage-properties-non-premultiplied-brush.png

另请参阅

合成和混合

材质类型和材质

着色器 (Shaders)