Silverlight5에서 XNA를 사용하여 프로그램을 디버깅하려면

페이지 업데이트 :
페이지 생성 날짜 :

설명은 프로젝트 생성부터 순서대로 설명되므로 이해하신 부분은 건너 뛰십시오.

먼저 Silverlight 응용 프로그램을 만듭니다. Visual Studio 메뉴에서 파일, 새로 만들기, 프로젝트를 선택합니다.

プロジェクトの新規作成

Silverlight 응용 프로그램을 선택합니다.

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

웹 사이트 호스팅과 관련하여 호스팅할 사이트를 지정해야 합니다. Silverlight에서만 디버깅할 때 자동으로 생성되는 테스트 페이지는 GPU를 사용하는 XNA 프로그램을 실행할 수 없습니다. (그러나 테스트 페이지를 수동으로 만들 때는 적용되지 않습니다.)

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

프로젝트를 만든 후 Silverlight 응용 프로그램에서 참조를 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택합니다.

参照の追加

왼쪽 메뉴에서 "어셈블리"와 "프레임워크"를 선택하고 다음 항목을 확인하십시오. (아직 OK 버튼을 누르지 마십시오)

  • Microsoft.Xna.Framework
  • Microsoft.Xna.Framework.Graphics
  • System.Windows.Xna

参照するアセンブリを選択

그런 다음 왼쪽 메뉴에서 "고급"을 선택하고 다음 항목을 확인한 후 OK 버튼을 누릅니다.

  • Microsoft.Xna.Framework.Graphics.Extensions
  • Microsoft.Xna.Framework.Math

XNA 프로그램을 실행하는 데 필요한 최소값을 선택했으므로 필요에 따라 참조할 어셈블리를 선택합니다.

参照するアセンブリを選択

어셈블리에 대한 참조가 추가됩니다.

参照一覧

다음으로 코드를 조정하겠습니다. 이번에는 XNA 프로그램이 올바르게 작동하는지 여부를 보여주는 최소 정보 만 설명합니다.

응용 프로그램에서 MainPage.xaml을 열고 다음 코드를 추가합니다.

<Grid x:Name="LayoutRoot" Background="White">
  <!-- 追加ここから -->
  <DrawingSurface Draw="DrawingSurface_Draw" />
  <TextBlock x:Name="textBlockMessage"/>
  <!-- 追加ここまで -->
</Grid>

는 XNA 프로그램이 그리는 영역입니다. Draw 이벤트를 실행하면 반복적으로 발생하므로 그리기 프로세스를 설명합니다. 이번에는 제대로 작동하는지 확인할 수 있도록 배경색 만 그립니다.

textBlockMessage는 XNA 프로그램이 제대로 작동하는지 여부에 관계없이 텍스트를 표시하는 데 사용됩니다. 이번에는 확인을 위해 넣기 때문에 실제 릴리스에서는 필요하지 않습니다.

그런 다음 "MainPage.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;

다음으로 시작할 때 현재 혼합 모드와 텍스트를 그릴 수 없는 이유를 표시하려고 합니다. 생성자에 작성하는 이유는 Silverlight 응용 프로그램이 언제 시작되는지 알기 때문입니다.

public MainPage()
{
  InitializeComponent();

  textBlockMessage.Text
    = string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
                    GraphicsDeviceManager.Current.RenderMode.ToString(),
                    GraphicsDeviceManager.Current.RenderModeReason);
}

그리기 과정을 작성하십시오. 이 경우 그리기 이벤트가 발생할 때 XNA Framework에서 배경을 그리기만 하면 됩니다.

private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
  GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}

디버깅을 실행해 보겠습니다.

デバッグ実行。

실행하면 그림과 같이 표시됩니다. 렌더 모드: 사용할 수 없음은 하드웨어 렌더링을 허용하지 않으며, 렌더모드이유:GPU가속 비활성화는 GPU 렌더링을 비활성화합니다. 이것은 서버 측 문제이므로 먼저 활성화해야 합니다.

描画ができない

Silverlight 실행에서 호스팅되는 ASP.NET 프로젝트에서 < 프로젝트 이름>TestPage.aspx 파일을 엽니다.

TestPage.aspx を開く

개체의 매개 변수에 "EnableGPUAcceleration"을 추가하고 값을 "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은 이제 SecurityBlocked입니다. GPU 드로잉은 보안상의 이유로 기본적으로 허용되지 않기 때문입니다. 이는 클라이언트 문제이므로 디버깅을 실행하는 것 외에도 사용자가 GPU가 그릴 수 있도록 다음 단계를 수행하도록 해야 합니다.

RenderModeReason が SecurityBlocked に変化

GPU 렌더링을 허용하려면 Silverlight 응용 프로그램을 마우스 오른쪽 단추로 클릭하고 메뉴에서 Silverlight를 선택합니다.

Silverlight を選択

대화 상자가 열리면 "권한"탭을 선택하고 적절한 사이트를 선택한 다음 "허용"버튼을 클릭하십시오.

アクセス許可

권한이 "허용"인 경우 확인 버튼을 클릭합니다.

アクセス許可が「許可」に代わる

디버깅하는 동안 디버깅하는 경우 브라우저를 새로 고쳐도 적용되지 않으므로 브라우저를 닫았다가 다시 실행하면 RenderMode가 하드웨어 드로잉이 되고 XNA 백그라운드 드로잉도 활성화되는 것을 볼 수 있습니다. 이제 XNA 프로그램을 마음껏 만들 수 있습니다.

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