在银光 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 程序。

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