सिल्वरलाइट 5 में एक्सएनए का उपयोग करके प्रोग्राम को डीबग करने के लिए

पेज अद्यतन :
पेज निर्माण की तारीख :

स्पष्टीकरण परियोजना के निर्माण से क्रम में समझाया गया है, इसलिए कृपया उन हिस्सों को छोड़ दें जिन्हें आप समझते हैं।

सबसे पहले, एक सिल्वरलाइट एप्लिकेशन बनाएं। दृश्य स्टूडियो मेनू से, फ़ाइल, नया, प्रोजेक्ट चुनें।

プロジェクトの新規作成

सिल्वरलाइट एप्लिकेशन का चयन करें।

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

वेब साइटों की मेजबानी के बारे में, उस साइट को निर्दिष्ट करना सुनिश्चित करें जिसे आप होस्ट करना चाहते हैं. अकेले सिल्वरलाइट में डीबगिंग करते समय स्वचालित रूप से जनरेट किए गए परीक्षण पृष्ठ GPU का उपयोग करने वाले XNA प्रोग्राम नहीं चला सकते। (हालाँकि, यह तब लागू नहीं होता जब आप मैन्युअल रूप से कोई परीक्षण पृष्ठ बनाते हैं.)

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

प्रोजेक्ट बनाने के बाद, सिल्वरलाइट अनुप्रयोग में संदर्भराइट-क्लिक करें और संदर्भ जोड़ेंका चयन करें।

参照の追加

बाईं ओर मेनू से "असेंबली" और "फ्रेमवर्क" चुनें और निम्नलिखित वस्तुओं की जांच करें। (अभी तक ठीक बटन दबाएं नहीं)

  • माइक्रोसॉफ्ट.एक्सएनए.फ्रेमवर्क
  • माइक्रोसॉफ्ट.एक्सएनए.फ्रेमवर्क.ग्राफिक्स
  • सिस्टम.विंडोज.एक्सएनए

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

अगला, बाईं ओर मेनू से "अग्रिम" चुनें, निम्नलिखित वस्तुओं की जांच करें, और ठीक बटन दबाएं।

  • माइक्रोसॉफ्ट.एक्सएनए.फ्रेमवर्क.ग्राफिक्स.एक्सटेंशन
  • माइक्रोसॉफ्ट.एक्सएनए.फ्रेमवर्क.मैथ

हमने एक्सएनए प्रोग्राम चलाने के लिए आवश्यक न्यूनतम का चयन किया है, इसलिए अपनी आवश्यकताओं के अनुसार संदर्भ ति करने के लिए असेंबली का चयन करें।

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

असेंबली का संदर्भ जोड़ा जाता है।

参照一覧

अगला, हम कोड को ट्विक करेंगे। इस बार, केवल XNA प्रोग्राम ठीक से काम करता है जो दिखाता है जो न्यूनतम जानकारी वर्णित है।

अपने सिल्वरलाइट एप्लिकेशन से, MainPage.xaml खोलें और निम्न कोड जोड़ें:

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

ड्राइंगसरफेस वह क्षेत्र है जिसे एक्सएनए प्रोग्राम खींचता है। निष्पादित होने पर, ड्रा ईवेंट बार-बार होता है, इसलिए वहां ड्राइंग प्रक्रिया का वर्णन करें। इस बार, मैं केवल पृष्ठभूमि रंग आकर्षित करूंगा ताकि आप देख सकें कि यह ठीक से काम कर रहा है या नहीं।

टेक्स्टब्लॉकमैसेज का उपयोग टेक्स्ट प्रदर्शित करने के लिए किया जाता है कि कोई एक्सएनए प्रोग्राम ठीक से काम कर रहा है या नहीं। इस बार मैं इसकी पुष्टि करने के लिए डाल रहा हूं, इसलिए मुझे वास्तविक रिलीज में इसकी आवश्यकता नहीं है।

फिर "मेनपेज.एक्सएएमएल.cs" फ़ाइल खोलें। सबसे पहले, आइए उपयोग किए गए भागों को हल करें। सिल्वरलाइट एप्लिकेशन के लिए नामस्थान निर्दिष्ट किया गया है, इसलिए हम इसे एक्सएनए के लिए बदल देंगे। वास्तव में इसे बनाते समय, कृपया इसे अपने आवेदन के अनुसार परिभाषित करें।

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;

अगला, जब आप शुरू करते हैं, तो आप वर्तमान सम्मिश्रण मोड और पाठ में आकर्षित नहीं कर पाने का कारण प्रदर्शित करना चाहते हैं। मैं इसे कन्स्ट्रक्टर में लिखता हूं क्योंकि मुझे पता है कि सिल्वरलाइट एप्लिकेशन कब लॉन्च किया गया है।

public MainPage()
{
  InitializeComponent();

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

ड्राइंग प्रक्रिया लिखें। इस मामले में, हम चाहते हैं कि ड्राइंग ईवेंट होने पर एक्सएनए फ्रेमवर्क पृष्ठभूमि खींचे।

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

चलो डीबगिंग चलाते हैं।

デバッグ実行。

जब आप इसे चलाते हैं, तो यह चित्र में दिखाए गए अनुसार प्रदर्शित किया जाएगा। रेंडरमोड: अनुपलब्ध हार्डवेयर रेंडरिंग की अनुमति नहीं देता है, रेंडरमोडरीज़न: जीपीयूएक्सेलरेशन डिसेबल्ड जीपीयू रेंडरिंग को अक्षम करता है। यह एक सर्वर-साइड समस्या है, इसलिए आपको इसे पहले सक्षम करने की आवश्यकता है।

描画ができない

सिल्वरलाइट रन में होस्ट किए गए ASP.NET प्रोजेक्ट से < प्रोजेक्ट नाम>टेस्टपेज.aspx फ़ाइल खोलें।

TestPage.aspx を開く

ऑब्जेक्ट के पैरामीटर में "सक्षम जीपीयूएक्सेलरेशन" जोड़ें और मान को "सत्य" पर सेट करें। यह इस सिल्वरलाइट एप्लिकेशन के लिए सर्वर साइड अनुमति देता है ताकि जीपीयू का उपयोग किया जा सके। (वास्तव में, यह क्लाइंट प्रोसेसिंग द्वारा हल किया जाता है, लेकिन चूंकि यह सर्वर है जो एचटीएमएल को आउटपुट करता है, इसलिए यह एक सर्वर-साइड समस्या है।

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

यदि आप इसे इसके साथ चलाने की कोशिश करते हैं, तो यह आकृति की तरह दिखेगा। रेंडरमोडरीज़न अब सिक्योरिटीब्लॉक्ड है। ऐसा इसलिए है क्योंकि सुरक्षा कारणों से डिफ़ॉल्ट रूप से GPU आरेखण की अनुमति नहीं है। चूंकि यह एक क्लाइंट समस्या है, इसलिए डीबगिंग चलाने के अलावा, आपको उपयोगकर्ता को जीपीयू को आकर्षित करने की अनुमति देने के लिए निम्न चरणों को पूरा करने की भी आवश्यकता है।

RenderModeReason が SecurityBlocked に変化

जीपीयू रेंडरिंग की अनुमति देने के लिए, सिल्वरलाइट एप्लिकेशन पर राइट-क्लिक करें और मेनू से सिल्वरलाइट चुनें।

Silverlight を選択

खुलने वाले संवाद में, "अनुमतियाँ" टैब का चयन करें, उपयुक्त साइट का चयन करें, और तब "अनुमति दें" बटन क्लिक करें।

アクセス許可

जब अनुमति "अनुमति दें" हो, तो ठीक बटन पर क्लिक करें।

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

यदि आप डीबगिंग करते समय डीबगिंग कर रहे हैं, तो ब्राउज़र को ताज़ा करना प्रभावी नहीं होता है, इसलिए यदि आप ब्राउज़र को बंद करते हैं और इसे फिर से चलाते हैं, तो आप देखेंगे कि रेंडरमोड हार्डवेयर ड्राइंग बन जाता है और एक्सएनए पृष्ठभूमि ड्राइंग भी सक्षम है। अब आप अपने दिल की सामग्री के लिए एक्सएनए प्रोग्राम बना सकते हैं।

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