Silverlight5'te XNA kullanarak bir programda hata ayıklamak için
Açıklamalar, projenin oluşturulmasından itibaren sırayla açıklanmaktadır, bu nedenle lütfen anladığınız kısımları atlayın.
İlk olarak, bir Silverlight uygulaması oluşturun. Visual Studio menüsünden Dosya, Yeni, Proje'yi seçin.
Silverlight Uygulaması'nı seçin.
Web sitelerini barındırma ile ilgili olarak, barındırmak istediğiniz siteyi belirttiğinizden emin olun. Yalnızca Silverlight'ta hata ayıklama sırasında otomatik olarak oluşturulan test sayfaları, GPU kullanan XNA programlarını çalıştıramaz. (Ancak, el ile bir test sayfası oluşturduğunuzda bu geçerli değildir.)
Proje oluşturulduktan sonra, Silverlight uygulamasında Başvurular'a sağ tıklayın ve Başvuru Ekle'yi seçin.
Soldaki menüden "Assembly" ve "Framework" ü seçin ve aşağıdaki öğeleri kontrol edin. (Henüz OK düğmesine basmayın)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- System.Windows.Xna
Ardından, soldaki menüden "İlerle" yi seçin, aşağıdaki öğeleri kontrol edin ve OK düğmesine basın.
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
Bir XNA programını çalıştırmak için gereken minimum değeri seçtik, bu nedenle ihtiyaçlarınıza göre başvuracak montajı seçin.
Derlemeye bir başvuru eklenir.
Ardından, kodu değiştireceğiz. Bu kez, yalnızca XNA programının doğru çalışıp çalışmadığını gösteren minimum bilgiler açıklanmaktadır.
Silverlight uygulamanızdan MainPage.xaml dosyasını açın ve aşağıdaki kodu ekleyin:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
DrawingSurface, XNA programının çizdiği alandır. Yürütüldüğünde, Draw olayı tekrar tekrar gerçekleşir, bu nedenle çizim işlemini orada açıklayın. Bu sefer, düzgün çalışıp çalışmadığını görebilmeniz için yalnızca arka plan rengini çizeceğim.
textBlockMessage, bir XNA programının düzgün çalışıp çalışmadığını metin görüntülemek için kullanılır. Bu sefer onaylamak için koyuyorum, bu yüzden gerçek sürümde ihtiyacım yok.
Ardından "MainPage.xaml.cs" dosyasını açın. İlk olarak, kullanım parçalarını sıralayalım. Silverlight uygulamasının ad alanı belirtilir, bu nedenle XNA için değiştireceğiz. Gerçekten oluştururken, lütfen uygulamanıza göre tanımlayın.
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;
Ardından, başlattığınızda, geçerli karıştırma modunu ve metin içinde çizim yapamamanızın nedenini görüntülemek istersiniz. Silverlight uygulamasının ne zaman başlatıldığını bildiğim için oluşturucuya yazıyorum.
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
Çizim işlemini yazın. Bu durumda, çizim olayı gerçekleştiğinde XNA Framework'ün arka planı çizmesini istiyoruz.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
Hata ayıklamayı çalıştıralım.
Çalıştırdığınızda, şekilde gösterildiği gibi görüntülenecektir. RenderMode: Kullanılamıyor seçeneği donanım işlemeye izin vermiyor, RenderModeReason:GPUAccelerationDisabled GPU işlemeyi devre dışı bırakıyor. Bu bir sunucu tarafı sorunudur, bu nedenle önce etkinleştirmeniz gerekir.
Silverlight çalıştırmasında barındırılan < projesinden > proje adı.aspx TestPage ASP.NET dosyasını açın.
object parametresine "EnableGPUAcceleration" ekleyin ve değeri "true" olarak ayarlayın. Bu, sunucu tarafına bu Silverlight uygulamasının GPU'yu kullanma izni verir. (Aslında, istemci işleme ile çözülür, ancak HTML çıktısı veren sunucu olduğundan, sunucu tarafı bir sorundur.)
<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>
Bununla çalıştırmaya çalışırsanız, şekle benzeyecektir. RenderModeReason artık SecurityBlock oldu. Bunun nedeni, GPU çizimine güvenlik nedenleriyle varsayılan olarak izin verilmemesidir. Bu bir istemci sorunu olduğundan, hata ayıklamayı çalıştırmanın yanı sıra, GPU'nun çizim yapmasına izin vermek için kullanıcının aşağıdaki adımları gerçekleştirmesini de sağlamanız gerekir.
GPU işlemeye izin vermek için Silverlight uygulamasını sağ tıklatın ve menüden Silverlight'ı seçin.
Açılan iletişim kutusunda, "İzinler" sekmesini seçin, uygun siteyi seçin ve ardından "İzin Ver" düğmesini tıklayın.
İzin "İzin Ver" olduğunda, Tamam düğmesini tıklayın.
Hata ayıklama sırasında hata ayıklama yapıyorsanız, tarayıcıyı yenilemek etkili olmaz, bu nedenle tarayıcıyı kapatıp yeniden çalıştırırsanız, RenderMode'un donanım çizimi haline geldiğini ve XNA arka plan çiziminin de etkinleştirildiğini göreceksiniz. Artık kalbinizin içeriğine göre XNA programları oluşturabilirsiniz.