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