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"呼叫事件列表,檢查在架構視窗中呈現的東西。
不幸的是在此情況下,正如上面什麼被呈現,因此要繼續我們的調試過程。 (DrawIndexed) 提交渲染管線的工作。所以來檢查看看是否東西被提交的"DrawIndexed"作為渲染管線的調用。為了看看發生了什麼事圖形管道中繪製調用被執行時,用滑鼠右鍵單擊事件列表中的調用和造就管道查看器通過從操作功能表中選擇"查看器管道"。
圖形管道查看器顯示圖形管道和這些階段如何修改模型中的過程的不同階段。
查看器顯示四種不同視圖的網格的資料 ;它們對應於在管道中的四個不同階段
視圖 |
說明 |
Pre-Vertex 著色器 |
查看網格頂點之前頂點著色器。相機被指向該對象的中心。 |
開機自我測試 (POST)頂點著色器 |
頂點著色器後查看網格頂點。相機被指向該對象的中心。 |
幾何著色器 (不視為在此樣本中不使用) |
查看網格頂點著色器幾何後。相機被指向該對象的中心。如果沒有指定的幾何著色器,此視圖為空白 (固體的淺灰色陰影)。 |
視圖連接埠 |
查看網格頂點的螢幕空間。相機設定了相機在目標程式相同。 |
注意有圖形管道中沒有代表在此視圖中的其他階段。更多的新的圖形上管道在 DirectX 11 。
可以看到的東西正在繪製的圖形管線視圖中,看起來像應用程式想要呈現的模具。似乎從的"死"(Cube) 的結構正在通過圖形管道正確指示著色器是否工作正常 。
此時,需要繼續調試,其它地方看一看。這可能是像素被覆蓋或丟棄。要驗證這一假設需要去看看像素 (模具是應該要呈現) 架構的中心。框架緩衝區視窗中單擊中心首先選擇一個像素然後右擊並從操作功能表中選擇"像素曆史"。
圖形像素史視窗顯示當前幀中的選定像素的顏色作出貢獻的活動。它包含有關如何修改像素了 DirectX 像素記錄視窗中的每個事件的資訊。這包括初始框架緩衝區狀態,其次是中間畫事件的呈現和最終的結果。
框架緩衝區像素顏色是藍色,,然後像素著色器的像素應用一種不同的顏色 (灰色) 時,可以看到從"像素記錄"視窗。但是,仍然藍色最終顏色。不是在所有應用正在呈現所需的像素顏色。這是混合狀態設定可能不正確的指示。如何混合了組合時的顏色和 alpha 值的混合狀態控制項呈現資料與現有呈現目標資料。要檢查的混合狀態,按右鍵像素,並從操作功能表中選擇"對象列表"。這將彈出"繪圖物件表"視窗。
繪圖物件表顯示 Direct3D 對象建立的目標程式。可以通過單擊表中的對象上的雙查看任何包含狀態資訊的對象。
排序對象表 (按"類型"),然後滾動到列表中的"D3D11 混合狀態"對象。雙擊"D3D11 混合狀態"對象將最低有效 (不無)"使用時代"。"使用時代"協助的範圍調查於所選對象繪製調用,使用年齡降低很多有關。雙擊與使用方式的最低年齡的混合狀態物件,將開啟一個文檔內 Visual Studio 的對象的詳細資料。
從上面的圖片,可以看到:
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"調用,會注意到設定的源和目標位置混合值的程式碼。
切換通過更改以反映以下代碼:
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