Silverlight5'te XNA kullanarak bir programda hata ayıklamak için

Sayfa güncel :
Sayfa oluşturma tarihi :

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.

Silverlight アプリケーションを選択

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.)

ホストする Web サイトの作成

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.

TestPage.aspx を開く

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.

RenderModeReason が SecurityBlocked に変化

GPU işlemeye izin vermek için Silverlight uygulamasını sağ tıklatın ve menüden Silverlight'ı seçin.

Silverlight を選択

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.

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