2012-03-15 103 views
1

我設置了模板緩衝區,因此只有部分屏幕受到繪製調用的影響。具體來說,我想繪製一個小區域。它將成爲一個用戶界面,所以繪製的一切都將是某種2D精靈。使用精靈對象工作得很好。區域外的精靈被切斷。 但是,當我添加文本時,以後繪製的所有內容和文本本身都不會被切斷。 PIX顯示,一旦調用繪製文本,關閉模板緩衝區就會設置新的DepthStencilState。文本由負責繪製其他精靈的同一個精靈對象繪製。用模板緩衝區繪製文本

圖形通過SlimDX.Direct3D10.Font.Draw方法執行。

有沒有辦法強制DirectX不改變狀態對象?我使用SlimDX,但根據它的代碼,它似乎不負責狀態變化。

尼科

+0

大概是因爲它的DirectX10您使用着色器來畫這個,如果使用效果框架我相信你可以在效果中設置深度貼圖狀態。也許你正在使用的效果是設置這個,你不得不在效果文件中查看程序代碼嗎? – jcoder 2012-03-16 10:48:12

+0

那麼,這可能是可能的。但是,我直接使用Font類。所以我無法訪問效果文件。但是繪圖是通過Sprite對象執行的,我假設Font類使用與繪製簡單精靈相同的方法。所以我懷疑它在着色器本身是一個問題。 – 2012-03-16 12:46:08

+1

http://www.gamedev.net/topic/573166-dx10-id3dx10sprite-and-sampler-states/討論了這種......並不幸似乎得出結論,沒有一些可怕的黑客,你無法避免它設置說明它的意圖 – jcoder 2012-03-16 12:56:18

回答

0

如果你切換到D3D11,你可能會感興趣的字體渲染庫我一直工作在移植到SlimDX(連同從工具箱的DirectX庫已經發布了一些其他位過去幾個月)。

它仍處於開發階段,所以沒有任何事情擔保,但你可以在這裏找到它(SVN):http://code.google.com/p/slimdx/source/browse/#svn%2Fbranches%2Flite%2FSlimDX.Toolkit

+0

感謝您的回答。在此期間,我一直在開始自己開發引擎... – 2012-03-30 07:13:56

+0

如果任何人對結果感興趣:http://sdxspritetext.codeplex.com/ – 2012-08-01 08:36:33