3D游戲的在新設備(智能手機,平板電腦)上呈現一個巨大的機會,為開發人員。用于訪問底層的圖形硬件,在 Windows 上全部的力量的主 API 是DirectX 11 (包括Direct3D和Direct2D).
?Visual Studio 11 最重要創新之一是一系列的工具幫助開發 Direct3D 游戲。
在 Visual Studio 中的新圖形調試器是捕獲從 Direct3D 應用程序的詳細的信息,如執行調試和分析工具。可以使用它:
- 捕獲呈現的幀,后來的檢驗和分析。
- 查看 DirectX 事件和其對應用程序的影響。
- 之前和之后頂點著色器轉換,請查看 3D 網格。
- 發現哪個 DirectX 事件作出貢獻的一個特定的像素的顏色。
- 直接跳轉到特定的 DirectX 調用的源代碼中的位置
假設解決一個簡單的問題,一步一步使用圖形調試器。這是一個旋轉的模游戲。這里是它應該是什么樣子。

然而,當運行應用程序時找出模具不在游戲中呈現。

若要開始調試此游戲,右鍵單擊該項目在解決方案資源管理器中,在"啟用圖形捕獲"中設置為"是"調試節點。

現在,F5 啟動調試您的應用程序,注意到這個游戲現在有一些基本的統計數據,在左上角顯示。這表明 VS 是準備捕獲從游戲要調查呈現問題的診斷信息.

為了捕獲的幀,只需點擊"打印屏幕"的關鍵。可以重復此步驟 ;每個幀將顯示在 Visual Studio 中作為"圖形 Experiment.vsglog"文件的一部分。日志文件包含為您呈現問題的調試所需的所有信息。默認情況下的該文件位于在一個臨時位置,但您可以選擇保存該文件,并與其他開發人員共享它。

進一步挖到什么正在通過分析在 Visual Studio 中的捕獲的幀。若要理解這一點更好想知道什么了繪制時,稱為"DrawIndexed"的 API的代碼。
若要檢查"DrawIndexed"調用框架的縮略圖上右鍵單擊,然后從上下文菜單中調出事件列表窗口中選擇"事件列表"。
圖形事件列表窗口列出了所有由運行在 VS 調試器下的程序捕獲的 DirectX 事件。它還模擬圖形調試器,重新使用相同的輸入所使用的正在運行的程序的命令下的事件。在搜索框,可以鍵入要篩選列表以顯示"畫"DirectX 繪制調用。通過繪制調用,將能夠看到 (右側) 框架窗口中單擊該框架繪制化零為整的方式。
在此窗口類型"畫"中的搜索框中,這將篩選以顯示游戲所作的畫調用列表。選擇"DrawIndexed"調用事件列表,檢查在框架窗口中呈現的東西。
[](http://www.microsofttranslator.com/bv.aspx?from=&to=zh-CHS&a=http%3A%2F%2Fblogs.msdn.com%2Fcfs-file.ashx%2F__key%2Fcommunityserver-blogs-components-weblogfiles%2F00-00-00-65-69-metablogapi%2F6215.image18_5F00_6CB3C2AC.png)
不幸的是在此情況下,正如上面什么被呈現,因此要繼續我們的調試過程。 (DrawIndexed) 提交渲染管線的工作。所以來檢查看看是否東西被提交的"DrawIndexed"作為渲染管線的調用。為了看看發生了什么事圖形管道中繪制調用被執行時,用鼠標右鍵單擊事件列表中的調用和造就管道查看器通過從上下文菜單中選擇"查看器管道"。
圖形管道查看器顯示圖形管道和這些階段如何修改模型中的過程的不同階段。
[](http://www.microsofttranslator.com/bv.aspx?from=&to=zh-CHS&a=http%3A%2F%2Fblogs.msdn.com%2Fcfs-file.ashx%2F__key%2Fcommunityserver-blogs-components-weblogfiles%2F00-00-00-65-69-metablogapi%2F3678.image21_5F00_3815F722.png)
查看器顯示四種不同視圖的網格的數據 ;它們對應于在管道中的四個不同階段
<table style="WIDTH: 100%" border="1" cellspacing="0" cellpadding="2"><tbody><tr><td valign="top" width="30%"><strong lang="zh-CHS">視圖</strong></td><td valign="top" width="70%"><strong lang="zh-CHS">說明</strong></td></tr><tr><td lang="zh-CHS" valign="top">Pre-Vertex 著色器</td><td valign="top">查看網格頂點之前頂點著色器。相機被指向該對象的中心。</td></tr><tr><td lang="zh-CHS" valign="top">開機自檢頂點著色器</td><td valign="top">頂點著色器后查看網格頂點。相機被指向該對象的中心。</td></tr><tr><td valign="top">幾何著色器<br/>(不視為在此示例中不使用)</td><td valign="top">查看網格頂點著色器幾何后。相機被指向該對象的中心。如果沒有指定的幾何著色器,此視圖為空 (固體的淺灰色陰影)。</td></tr><tr><td lang="zh-CHS" valign="top">視圖端口</td><td valign="top">查看網格頂點的屏幕空間。相機設置了相機在目標程序相同。</td></tr></tbody></table>
注意有圖形管道中沒有代表在此視圖中的其他階段。更多的新的圖形上管道在 DirectX 11 。
可以看到的東西正在繪制的圖形管線視圖中,看起來像應用程序想要呈現的模具。似乎從上圖的"死"(多維數據集) 的結構正在通過圖形管道正確指示著色器是否工作正常 。
此時,需要繼續調試,其它地方看一看。這可能是像素被覆蓋或丟棄。要驗證這一假設需要去看看像素 (模具是應該要呈現) 框架的中心。幀緩沖區窗口中單擊中心首先選擇一個像素然后右擊并從上下文菜單中選擇"像素歷史"。
圖形像素史窗口顯示當前幀中的選定像素的顏色作出貢獻的活動。它包含有關如何修改像素了 DirectX 像素歷史記錄窗口中的每個事件的信息。這包括初始幀緩沖區狀態,其次是中間畫事件的呈現和最終的結果。
[](http://www.microsofttranslator.com/bv.aspx?from=&to=zh-CHS&a=http%3A%2F%2Fblogs.msdn.com%2Fcfs-file.ashx%2F__key%2Fcommunityserver-blogs-components-weblogfiles%2F00-00-00-65-69-metablogapi%2F4263.image24_5F00_0DCBE0A9.png)
幀緩沖區像素顏色是藍色,,然后像素著色器的像素應用一種不同的顏色 (灰色) 時,可以看到從"像素歷史記錄"窗口。但是,仍然藍色最終顏色。不是在所有應用正在呈現所需的像素顏色。這是混合狀態設置可能不正確的指示。如何混合了組合時的顏色和 alpha 值的混合狀態控件呈現數據與現有呈現目標數據。要檢查的混合狀態,右鍵單擊像素,并從上下文菜單中選擇"對象列表"。這將彈出"圖形對象表"窗口。
圖形對象表顯示 Direct3D 對象創建的目標程序。可以通過單擊表中的對象上的雙查看任何包含狀態信息的對象。
排序對象表 (按"類型"),然后滾動到列表中的"D3D11 混合狀態"對象。雙擊"D3D11 混合狀態"對象將最低有效 (不無)"使用時代"。"使用時代"幫助的范圍調查于所選對象繪制調用,使用年齡降低很多有關。雙擊與使用情況的最低年齡的混合狀態對象,將打開一個文檔內 Visual Studio 的對象的詳細信息。
[](http://www.microsofttranslator.com/bv.aspx?from=&to=zh-CHS&a=http%3A%2F%2Fblogs.msdn.com%2Fcfs-file.ashx%2F__key%2Fcommunityserver-blogs-components-weblogfiles%2F00-00-00-65-69-metablogapi%2F0363.image27_5F00_45A0B57D.png)
從上面的圖片,可以看到:
Blend Source = D3D11_BLEND_ZERO; //Source 表示像素著色器的混合上執行操作的彩色輸出
Blend Destination = D3D11_BLEND_ONE; //Destination 代表的混合執行操作的框架的顏色
Blend Op = D3D11_BLEND_ADD; //Blend 操作執行的源和目標。
可以看到從這源的混合狀態被遮罩,因為它被設置為零 (D3D11_BLEND_ZERO) 和目標的混合狀態設置為 1 (D3D11_BLEND_ONE)。這將導致的背景色來出作為主色后混合,因此我們沒有看到正在呈現的模具。這樣的像素著色器輸出是主輸出的混合操作,應切換值。
Blend Source = D3D11_BLEND_ONE;
Blend Destination = D3D11_BLEND_ZERO;
Blend Op = D3D11_BLEND_ADD;
可以返回到事件列表窗口并篩選尋找"blendstate",因為事件列表中列出了所有的 DirectX 事件已捕獲幀的時期發生的事件列表中,找出混合狀態被設置的位置。一旦您篩選,您可以看到"OMSetBlendState"的呼吁。調用,將混合狀態設置為"OMSetBlendState"。獲取源代碼凡正在作出此調用,右鍵單擊"OMSetBlendState"調用,并從上下文菜單中會出現"圖形調用堆棧"窗口中選擇"調用堆棧"
圖形事件調用堆棧窗口聯系正在調試的 c + + 源代碼的 DirectX 事件。
雙擊第一個調用調用堆棧中,它將您帶到"OMSetBlendState"在代碼中調用。幾行上方的"OMBlendState"調用,會注意到設置的源和目標位置混合值的代碼行。
[](http://www.microsofttranslator.com/bv.aspx?from=&to=zh-CHS&a=http%3A%2F%2Fblogs.msdn.com%2Fcfs-file.ashx%2F__key%2Fcommunityserver-blogs-components-weblogfiles%2F00-00-00-65-69-metablogapi%2F0044.image_5F00_2E753AFF.png)
切換通過更改以反映以下代碼:
blenddesc.RenderTarget[0].SrcBlend=D3D11_BLEND_ONE;
blenddesc.RenderTarget[0].DestBlend=D3D11_BLEND_ZERO;
生成并運行。

游戲開發并不容易,工具可幫助您使基礎 DirectX 平臺的使用。在此版本中,將這種新型的診斷經驗帶入 Visual Studio11。
趕緊下載VS11體驗吧
[http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200098144](http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200098144)
- 前言
- Visual Studio 11開發指南(1) Visual Studio 11簡介與新特性
- Visual Studio 11開發指南(2) Visual Studio 11放棄宏處理
- Visual Studio 11開發指南(3)Visual Studio 11開發SharePoint 2011程序
- Visual Studio 11開發指南(4)Visual Studio 11編程語言發展
- Visual Studio 11開發指南(5)Visual Studio 11 IDE增強
- Visual Studio 11開發指南(6)Visual Studio 11平臺改進
- Visual Studio 11開發指南(7)NET 4.5的改善
- Visual Studio 11開發指南(8)Visual C++ 11新特色
- Visual Studio 11開發指南(9)Visual C++ 新功能體驗
- Visual Studio 11開發指南(10)Visual C++11 IDE 新功能體驗
- Visual Studio 11開發指南(11)Visual Studio 11調試游戲
- Visual Studio 11開發指南(12)Visual Studio 11可視化多核多線程編程的行為
- Visual Studio 11開發指南(13)C++11語言新特性
- Visual Studio 11開發指南(14)C++11---C++/ CX設計
- Visual Studio 11開發指南(15)C++11單元測試
- Visual Studio 11開發指南(16)C++11更新-多線程和異步操作管理
- Visual Studio 11開發指南(17)C++11更新- Lambda表達式
- Visual Studio 11開發指南(18)C++11更新-自動矢量器使用
- Visual Studio 11開發指南(19)C++11更新-并行模式庫和代理庫
- 在 C++ 中使用 PPL 進行異步編程
- 基于VisualStudio11開發Windows8的Metro sample講解(1)MessageBox
- Visual C++ 11 中新的并發功能
- 基于Windows8與Visual Studio2012開發內核隱藏注冊表
- 基于VC++2012在Windows8上實現文件隱藏
- 實現諾基亞 lumia Windows phone 的手機通話記錄截取
- 最短代碼實現windows8下的下載器-下載安裝執行一體化
- 用Visual studio2012在Windows8上開發內核驅動監視線程創建
- 用Visual studio2012在Windows8上開發內核驅動監視進程創建
- 基于Windows8與Visual Studio2012實現殺毒通用模塊
- 用Visual studio2012在Windows8上開發內核中隱藏進程
- 用Visual studio11在Windows8上開發內核枚舉注冊表
- 用Visual studio11在Windows8上開發內核驅動隱藏注冊表
- 用Visual studio11在Windows8上開發驅動實現注冊表監控和過濾
- 用Visual studio11在Windows8上開發驅動實現內存填0殺進程
- 【CSDN2012年度博客之星】喜歡本博客的讀者,投票贈送《visual C++2010開發權威指南》電子稿--感謝支持 ~(截至到2012年12月30日)
- 今天在清華圖書館看到我的杰作,感慨萬千,而我要歸零一切 !
- use Visual studio2012 developing kernel driver monitor thread creation on Windows8
- To kernel driver monitoring process developed in Windows8 create using Visual studio2012
- Under Windows8 kernel mode development NDIS application-NDIS Filter explain
- use Visual studio2012 development kernel to hidden process on Windows8