在銀光 5 上調試和運行使用 XNA 的程式
我們將按順序解釋專案,因此請跳過您知道的部分。
首先,創建銀光應用程式。 從「視覺工作室」功能表中選擇「檔」、「新建」和“專案”。
選擇「銀光應用程式」。
對於網站主機,請確保指定要託管的網站。 在 Silverlight 單元中調試時自動生成的測試頁無法使用 GPU 運行 XNA 程式。 (但是,如果您手動創建測試頁,則不適用。
創建專案後,右鍵按兩下 Silverlight 應用程式中的「瀏覽設置」,然後選擇「添加引用」。
從左側選單中選擇「程式集」和「框架」以選取以下內容: (不要仍然按“確定”按鈕)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- System.Windows.Xna
然後,從左側功能表中選擇“擴展”,選中以下專案,然後按“確定”按鈕。
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
我們選擇運行 XNA 程式所需的最低要求,因此請根據需要選擇要引用的程式集。
將添加對程式集的引用。
接下來,我們將修改代碼。 這一次,我們只列出了 XNA 程式是否正常工作的最小資訊。
從銀光應用程式開啟主頁面.xaml 並新增以下代碼:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
繪製曲面是 XNA 程式繪製的區域。 重複 Draw 事件,並在那裡編寫繪圖過程。 這一次,我們只繪製背景顏色,以便您可以看到它是否正常工作。
文字塊消息用於以文字形式顯示 XNA 程式是否正常工作。 這一次,我把它放在一起檢查它,所以它不需要在實際版本中。
然後打開主頁面.xaml.cs檔。 首先,我們整理一下使用位置。 為 Silverlight 應用程式指定命名空間,因此請為 XNA 進行更改。 實際創建時,請根據應用程式定義它。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
//using System.Windows.Input;
//using System.Windows.Media;
//using System.Windows.Media.Animation;
//using System.Windows.Shapes;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System.Windows.Graphics;
然後,在文本中顯示當前混合模式和無法繪製時啟動的原因。 我編寫構造函數,因為我知道何時啟動銀光應用程式。
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
編寫繪圖過程。 這一次,我們只是在發生繪圖事件時在 XNA 框架中繪製背景。
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
現在,讓我們運行調試。
運行后,它將顯示為圖形。 渲染模型:不可分配且硬體繪製不可用,在渲染模型:GPU 啟用禁用中禁用 GPU 繪製。 由於這是一個伺服器端問題,因此必須首先啟用它。
從運行 Silverlight 時託管的 ASP.NET 項目中打開「<項目名稱>.aspx」 檔。
將啟用 GPU 檢查添加到物件參數,並將值設置為 true。 然後,伺服器端授予此 Silverlight 應用程式使用 GPU 的許可權。 (它實際上通過客戶端處理來解決,但我們決定列印 HTML 是伺服器端問題,因為它是伺服器。
<body>
<form id="form1" runat="server" style="height:100%">
<div id="silverlightControlHost">
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/DebugXna.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="5.0.61118.0" />
<param name="autoUpgrade" value="true" />
<!-- 追加ここから -->
<param name="EnableGPUAcceleration" value="true" />
<!-- 追加ここまで -->
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Microsoft Silverlight の取得" style="border-style:none"/>
</a>
</object>
<iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
</div>
</form>
</body>
現在,當我嘗試這樣做時,它看起來像一個圖表。 RenderModeReason 現在被安全塊選中。 這是因為預設情況下不允許 GPU 繪製,因為出於安全考慮。 由於這是一個客戶端問題,因此除了調試運行之外,如果實際發佈,用戶還必須執行以下步驟以允許 GPU 繪製:
要允許 GPU 繪圖,請右鍵按兩下「銀光」應用程式,然後從功能表中選擇「銀光」。。
打開對話框后,選擇“許可權”選項卡,選擇相應的網站,然後按下“允許”按鈕。
當許可權變為「允許」時,按兩下確定按鈕。
在調試期間,刷新瀏覽器不會生效,因此,如果關閉並再次運行瀏覽器,您將看到 RenderMode 是硬體繪圖,並且啟用 XNA 背景繪製。 現在,您可以充分利用 XNA 程式。