Programos derinimas naudojant XNA programoje "Silverlight"5
Paaiškinimai paaiškinami nuo projekto sukūrimo, todėl praleiskite suprantamas dalis.
Pirmiausia sukurkite "Silverlight" programą. "Visual Studio" meniu pasirinkite Failas, Naujas, Projektas.
Pasirinkite "Silverlight" programą.
Kalbant apie žiniatinklio svetainių prieglobą, būtinai nurodykite svetainę, kurią norite priglobti. Bandomieji puslapiai, kurie automatiškai generuojami derinant vien "Silverlight", negali paleisti XNA programų, naudojančių GPU. (Tačiau tai netaikoma, kai rankiniu būdu kuriate bandomąjį puslapį.)
Sukūrę projektą, dešiniuoju pelės mygtuku spustelėkite Nuorodos "Silverlight" programoje ir pasirinkite Pridėti nuorodą.
Kairėje esančiame meniu pasirinkite "Surinkimas" ir "Sistema" ir patikrinkite šiuos elementus. (Dar nespauskite mygtuko Gerai)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- Sistema.Windows.Xna
Tada kairėje esančiame meniu pasirinkite "Advance", patikrinkite šiuos elementus ir paspauskite mygtuką Gerai.
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
Mes pasirinkome minimumą, reikalingą XNA programai paleisti, todėl pasirinkite rinkinį, kurį norite nurodyti pagal savo poreikius.
Pridedama nuoroda į surinkimą.
Tada pakoreguosime kodą. Šį kartą aprašoma tik minimali informacija, rodanti, ar XNA programa veikė tinkamai.
"Silverlight" programoje atidarykite MainPage.xaml ir pridėkite šį kodą:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
"DrawingSurface" yra sritis, į kurią atkreipia XNA programa. Kai vykdoma, piešimo įvykis vyksta pakartotinai, todėl aprašykite piešimo procesą ten. Šį kartą nupiešiu tik fono spalvą, kad pamatytumėte, ar ji veikia tinkamai.
textBlockMessage naudojamas tekstui rodyti, ar XNA programa veikia tinkamai, ar ne. Šį kartą įdedu jį, kad patvirtinčiau, todėl man jo nereikia tikrame leidime.
Tada atidarykite failą "MainPage.xaml.cs". Pirma, išsiaiškinkime naudojamas dalis. Nurodyta "Silverlight" programos vardų sritis, todėl pakeisime ją į XNA. Iš tikrųjų kurdami jį, apibrėžkite jį pagal savo paraišką.
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;
Tada, kai paleidžiate, norite parodyti dabartinį maišymo režimą ir priežastį, kodėl negalėjote piešti teksto. Rašau jį konstruktoriuje, nes žinau, kada paleidžiama "Silverlight" programa.
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
Parašykite piešimo procesą. Šiuo atveju mes tiesiog norime, kad XNA sistema nupieštų foną, kai įvyksta piešimo įvykis.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
Paleiskime derinimą.
Kai jį paleisite, jis bus rodomas taip, kaip parodyta paveikslėlyje. RenderMode: Nepasiekiamas neleidžia aparatinės įrangos atvaizdavimo, RenderModeReason:GPUAccelerationDisabled išjungia GPU atvaizdavimą. Tai yra serverio problema, todėl pirmiausia turite ją įjungti.
Atidarykite < projekto pavadinimą>TestPage.aspx failą iš ASP.NET projekto, laikomo "Silverlight" paleidime.
Prie objekto parametro pridėkite "EnableGPUAcceleration" ir nustatykite reikšmę į "true". Tai suteikia serverio pusei leidimą šiai "Silverlight" programai naudoti GPU. (Tiesą sakant, tai išsprendžiama apdorojant klientą, bet kadangi HTML išveda serveris, tai yra serverio problema.)
<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>
Jei bandysite jį paleisti su tuo, jis atrodys kaip figūra. "RenderModeReason" dabar yra "SecurityBlocked". Taip yra todėl, kad GPU piešimas pagal numatytuosius nustatymus neleidžiamas saugumo sumetimais. Kadangi tai yra kliento problema, be derinimo vykdymo, taip pat turite leisti vartotojui atlikti šiuos veiksmus, kad GPU galėtų piešti.
Norėdami leisti GPU atvaizdavimą, dešiniuoju pelės mygtuku spustelėkite "Silverlight" programą ir meniu pasirinkite "Silverlight".
Atsidariusiame dialogo lange pasirinkite skirtuką "Leidimai", pasirinkite atitinkamą svetainę ir spustelėkite mygtuką "Leisti".
Kai leidimas yra "Leisti", spustelėkite mygtuką Gerai.
Jei derinate derindami, naršyklės atnaujinimas neįsigalioja, todėl jei uždarysite naršyklę ir paleisite ją dar kartą, pamatysite, kad "RenderMode" tampa aparatinės įrangos piešiniu, o XNA fono piešimas taip pat įjungtas. Dabar galite kurti XNA programas pagal savo skonį.