【发布时间】:2012-03-15 21:17:00
【问题描述】:
我设置了模板缓冲区,因此只有部分屏幕会受到绘图调用的影响。具体来说,我想画一个小区域。它将成为一个 UI,因此绘制的所有内容都将是某种 2D 精灵。使用 sprite 对象效果很好。该区域之外的精灵被切断。 但是,当我添加文本时,之后绘制的所有内容和文本本身都不会被切断。 PIX 显示,一旦调用绘制文本,就会设置一个新的 DepthStencilState 并关闭模板缓冲区。文本由负责绘制其他精灵的同一精灵对象绘制。
通过 SlimDX.Direct3D10.Font.Draw 方法进行绘制。
有没有办法强制 DirectX 不改变状态对象?我使用 SlimDX,但根据它的代码,它似乎并不负责状态变化。
妮可
【问题讨论】:
-
大概因为它是directx10,你正在使用着色器来绘制它,如果它使用效果框架,我相信你可以在效果中设置depthstencil状态。也许您使用的效果是设置它的原因,您必须查看效果文件而不是程序代码?
-
嗯,这是可能的。但是,我直接使用 Font 类。所以我无法访问效果文件。但是绘图是通过 Sprite 对象执行的,我假设 Font 类使用与绘制简单精灵相同的方法。所以我怀疑这是着色器本身的问题。
-
gamedev.net/topic/573166-dx10-id3dx10sprite-and-sampler-states 讨论了这种......不幸的是似乎得出的结论是,如果没有一些可怕的黑客,你就无法避免它将状态设置为它想要的
-
感谢您的评论。如果绘制文本根本不起作用,我会考虑使用自定义精灵引擎切换到 DX11,因为文本是我留在 DX10 的唯一原因。
标签: text directx slimdx directx-10 stencil-buffer