Directx 使用Direct2D1透明的Z订单问题

Directx 使用Direct2D1透明的Z订单问题,directx,transparency,directx-11,direct2d,sharpdx,Directx,Transparency,Directx 11,Direct2d,Sharpdx,虽然我的电子游戏的整个过程很好,但我还是遇到了一个问题。这可能是一个简单的问题,但我目前无法解决 我正在使用SharpDX和Direct2D1创建我的用户界面。到目前为止,我创建了几个控件,有些控件由其他控件组成,有些控件有子控件。例如,我的用户界面中的窗口始终有一个关闭按钮、一个边框控件和一个内容控件。列表框控件可以有多个控件作为列表项等 这在大多数情况下都很有效。然而,当涉及透明度时,我遇到了一些麻烦 示例1 我的窗口周围有一个半透明的边框,我想在这个边框的顶部显示一个文本。很容易看出,透明

虽然我的电子游戏的整个过程很好,但我还是遇到了一个问题。这可能是一个简单的问题,但我目前无法解决

我正在使用SharpDX和Direct2D1创建我的用户界面。到目前为止,我创建了几个控件,有些控件由其他控件组成,有些控件有子控件。例如,我的用户界面中的窗口始终有一个关闭按钮、一个边框控件和一个内容控件。列表框控件可以有多个控件作为列表项等

这在大多数情况下都很有效。然而,当涉及透明度时,我遇到了一些麻烦

示例1

我的窗口周围有一个半透明的边框,我想在这个边框的顶部显示一个文本。很容易看出,透明边框颜色会影响文本的颜色

示例2

我有一个纯黑色的矩形背景。渲染完这个矩形后,我绘制了一个位图,它几乎不包含任何内容(=大的透明区域)。当我运行游戏时,我看到黑色背景上的不透明区域,这是完美的。但是,如果我在第一个位图之后绘制另一个位图,它将绘制在背景后面(实心黑色矩形),因此不可见


如何控制z顺序?什么都欢迎

在黑暗中拍摄。。。调用
ID2D1RenderTarget::Flush()
以强制执行刚性渲染顺序?如果这样做有效的话,这听起来像是Direct2D中的某种bug。听起来alpha模式可能存在问题。您是否正在使用D2D1_ALPHA_模式_IGNORE?试试D2D1字母模式预乘。对不起,我忘了回答!几天后我解决了这个问题。我为我的用户界面开发了几个自定义控件,其中一个以错误的顺序呈现其子组件。这导致了我的z订单问题!在黑暗中拍摄。。。调用
ID2D1RenderTarget::Flush()
以强制执行刚性渲染顺序?如果这样做有效的话,这听起来像是Direct2D中的某种bug。听起来alpha模式可能存在问题。您是否正在使用D2D1_ALPHA_模式_IGNORE?试试D2D1字母模式预乘。对不起,我忘了回答!几天后我解决了这个问题。我为我的用户界面开发了几个自定义控件,其中一个以错误的顺序呈现其子组件。这导致了我的z订单问题!