在銀光 5 上調試和運行使用 XNA 的程式

更新頁 :
頁面創建日期 :

我們將按順序解釋專案,因此請跳過您知道的部分。

首先,創建銀光應用程式。 從「視覺工作室」功能表中選擇「檔」、「新建」和“專案”。

プロジェクトの新規作成

選擇「銀光應用程式」。

Silverlight アプリケーションを選択

對於網站主機,請確保指定要託管的網站。 在 Silverlight 單元中調試時自動生成的測試頁無法使用 GPU 運行 XNA 程式。 (但是,如果您手動創建測試頁,則不適用。

ホストする Web サイトの作成

創建專案後,右鍵按兩下 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」 檔。

TestPage.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 繪製:

RenderModeReason が SecurityBlocked に変化

要允許 GPU 繪圖,請右鍵按兩下「銀光」應用程式,然後從功能表中選擇「銀光」。。

Silverlight を選択

打開對話框后,選擇“許可權”選項卡,選擇相應的網站,然後按下“允許”按鈕。

アクセス許可

當許可權變為「允許」時,按兩下確定按鈕。

アクセス許可が「許可」に代わる

在調試期間,刷新瀏覽器不會生效,因此,如果關閉並再次運行瀏覽器,您將看到 RenderMode 是硬體繪圖,並且啟用 XNA 背景繪製。 現在,您可以充分利用 XNA 程式。

ハードウェアによる描画が有効