Program hibakeresése XNA-val a Silverlight5-ben
A magyarázatokat a projekt létrehozásától kezdve sorrendben magyarázzák, ezért kérjük, hagyja ki a megértett részeket.
Először hozzon létre egy Silverlight-alkalmazást. A Visual Studio menüjében válassza a Fájl, Új, Projekt lehetőséget.
Válassza a Silverlight alkalmazás lehetőséget.
A webhelyek üzemeltetésével kapcsolatban mindenképpen adja meg a üzemeltetni kívánt webhelyet. A Silverlightban történő hibakeresés során automatikusan generált tesztoldalak önmagukban nem futtathatók GPU-t használó XNA-programok. (Ez azonban nem vonatkozik a tesztoldal manuális létrehozására.)
A projekt létrehozása után kattintson a jobb gombbal a Hivatkozások elemre a Silverlight alkalmazásban, és válassza a Hivatkozás hozzáadása lehetőséget.
Válassza az "Összeszerelés" és a "Keretrendszer" lehetőséget a bal oldali menüből, és ellenőrizze a következő elemeket. (Még ne nyomja meg az OK gombot)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- Rendszer.Windows.Xna
Ezután válassza a bal oldali menüből az "Advance" lehetőséget, ellenőrizze a következő elemeket, és nyomja meg az OK gombot.
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
Kiválasztottuk az XNA program futtatásához minimálisan szükséges összeget, ezért válassza ki az igényeinek megfelelően a referenciálni kívánt szerelvényt.
A szöveg kiegészül a szerelvényre való hivatkozással.
Ezután módosítjuk a kódot. Ezúttal csak azokat a minimális információkat írják le, amelyek azt mutatják, hogy az XNA program megfelelően működött-e.
A Silverlight alkalmazásban nyissa meg a MainPage.xaml fájlt, és adja hozzá a következő kódot:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
A DrawingSurface az a terület, amelyre az XNA program rajzol. Végrehajtáskor a Rajzolás esemény többször is megtörténik, ezért írja le ott a rajzolási folyamatot. Ezúttal csak a háttérszínt rajzolom meg, hogy lássa, megfelelően működik-e.
A textBlockMessage a szöveg megjelenítésére szolgál, függetlenül attól, hogy egy XNA program megfelelően működik-e vagy sem. Ezúttal azért teszem be, hogy megerősítsem, így nincs rá szükségem a tényleges kiadásban.
Ezután nyissa meg a "MainPage.xaml.cs" fájlt. Először is rendezzük a használt alkatrészeket. A Silverlight alkalmazás névtere meg van adva, ezért az XNA-ra módosítjuk. Amikor ténylegesen létrehozza, kérjük, határozza meg az alkalmazásnak megfelelően.
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;
Ezután az indításkor meg szeretné jeleníteni az aktuális keverési módot és azt, hogy miért nem tudott szövegesen rajzolni. Azért írom a konstruktorba, mert tudom, mikor indul el a Silverlight alkalmazás.
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
Írja meg a rajzolási folyamatot. Ebben az esetben csak azt szeretnénk, hogy az XNA keretrendszer megrajzolja a hátteret, amikor a rajzolási esemény bekövetkezik.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
Futtassuk a hibakeresést.
Amikor futtatja, az ábrán látható módon jelenik meg. RenderMode: Az Unavailable nem engedélyezi a hardveres renderelést, a RenderModeReason:GPUAccelerationDisabled letiltja a GPU-renderelést. Ez egy kiszolgálóoldali probléma, ezért először engedélyeznie kell.
Nyissa meg a < projektnevét>TestPage.aspx fájlt a Silverlight-futtatásban üzemeltetett ASP.NET projektből.
Adja hozzá az "EnableGPUAcceleration" elemet az objektum paraméteréhez, és állítsa az értéket "true" értékre. Ez engedélyt ad a kiszolgálóoldali alkalmazásnak a GPU használatára. (Valójában kliens feldolgozással oldják meg, de mivel a szerver adja ki a HTML-t, ez egy szerveroldali probléma.)
<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>
Ha ezzel próbálja futtatni, akkor úgy fog kinézni, mint az ábra. A RenderModeReason mostantól SecurityBlocked. Ennek az az oka, hogy a GPU-rajzolás biztonsági okokból alapértelmezés szerint nem engedélyezett. Mivel ez egy ügyfélprobléma, a hibakeresés futtatása mellett a felhasználónak a következő lépéseket is végre kell hajtania, hogy a GPU rajzolhasson.
A GPU-renderelés engedélyezéséhez kattintson a jobb gombbal a Silverlight alkalmazásra, és válassza a Silverlight lehetőséget a menüből.
A megnyíló párbeszédpanelen válassza ki az "Engedélyek" fület, válassza ki a megfelelő webhelyet, majd kattintson az "Engedélyezés" gombra.
Ha az engedély "Engedélyezés", kattintson az OK gombra.
Ha hibakeresés közben hibakeresést végez, a böngésző frissítése nem lép érvénybe, így ha bezárja a böngészőt, és újra futtatja, látni fogja, hogy a RenderMode hardveres rajzzá válik, és az XNA háttérrajz is engedélyezve van. Most már szíve szerint hozhat létre XNA programokat.