डायरेक्टएक्स डिबगिंग - आसान

"हुड के तहत" हो रही प्रक्रियाओं को समझना, डायरेक्टएक्स हमेशा कुछ कठिनाइयों से भरा हुआ है और अतिरिक्त उपकरणों का उपयोग करने के लिए मजबूर किया गया है, जैसे कि पिक्स। लेकिन प्रगति बंद नहीं होती है, कई विचार और टर्नकी समाधान अब विज़ुअल स्टूडियो 11 बीटा में लागू किए गए हैं। यह टूलकिट डायरेक्टएक्स अनुप्रयोगों के डिबगिंग को काफी सरल कर सकता है और प्रोग्रामर को उन प्रक्रियाओं को विस्तार से समझने का अवसर देता है जो छवि बनाते हैं। अब प्रत्येक पिक्सेल का अच्छी तरह से अध्ययन किया जा सकता है, और उसके जीवन की पूरी कहानी प्राप्त की जाती है।

नई डिबग मोड


दृश्य स्टूडियो 11 बीटा के डिबगिंग मेनू में एक नया आइटम दिखाई दिया - "डीबग / ग्राफिक्स" , और इस लेख के भाग के रूप में मैं प्रत्येक आइटम के उद्देश्य की व्याख्या करूंगा।



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



"प्रिंट स्क्रीन" बटन दबाने से फ्रेम की स्थिति का एक पूरा डंप उत्पन्न होता है, जिसमें उत्पन्न छवि, साथ ही बहुत सारी अतिरिक्त जानकारी शामिल होती है, जो बाद में हमें यह समझने की अनुमति देती है कि स्क्रीन पर हम क्या देख रहे हैं, साथ ही साथ क्या संसाधन हैं। की आवश्यकता है।



मेनू आइटम "डीबग / ग्राफिक्स / ऑब्जेक्ट टेबल" को कॉल करने से आपको यह पता लगाने में मदद मिलेगी कि इस स्क्रीन को बनाने के लिए वर्तमान में किन संसाधनों का उपयोग किया जा रहा था, वे कितनी मेमोरी में रहते थे, जब वे बनाए गए थे (किस फ्रेम में), उनका रिज़ॉल्यूशन, और कई अन्य जानकारी। स्वाभाविक रूप से, संसाधन न केवल बनावट हैं, बल्कि शेड्स, सभी प्रकार के बफ़र्स, स्टेट्स और विचार भी हैं। यह जानकारी आगे अनुकूलन के लिए उठाए जाने वाले कदमों की अनुमति देगी। उदाहरण के लिए, कमजोर हार्डवेयर पर आपके एप्लिकेशन को चलाने में सक्षम होना।



अधिक जानकारी



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



पैनल में दिखाई देने वाली चार ड्रा कॉल वास्तव में एक रेंडर हैं:
  1. पृष्ठभूमि
  2. ग्लोब के पीछे
  3. पारदर्शिता के मद्देनजर ग्लोब के सामने
  4. मध्याह्न के साथ यात्रा करने वाली किरणें



प्रत्येक ड्रा विधि, बदले में, ग्राफिक्स सबसिस्टम पाइपलाइन के साथ इंटरैक्ट करती है, और मेनू आइटम "डिबग / ग्राफिक्स / पाइपलाइन चरणों" के लिए धन्यवाद आप इस इंटरैक्शन का विवरण देख सकते हैं।



कन्वेयर के चार चरणों में से प्रत्येक चरण में जाँच की जा सकती है।

  1. मूल ज्यामिति का रिसेप्शन।
  2. आमतौर पर स्क्रीन पर किसी ऑब्जेक्ट के अनुपात और घुमाव को सेट करने के लिए, वर्टिकल शेड्स के साथ ज्यामितीय रूपांतरण, कैमरे की दिशा।
  3. पिक्सेल शेड्स के साथ प्रसंस्करण ज्यामिति, वास्तव में, कुछ प्रकार के प्रकाश मॉडल और बनावट के आधार पर रंग।
  4. अंतिम छवि के उदाहरण के संयोजन के साथ पिछले रेंडर चरणों।




कोड पर वापस जाएं


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



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



हमारे पिक्सेल के लिए ड्रा कॉल के समय डायरेक्टएक्स सबसिस्टम की पूरी स्थिति ग्राफिक्स पिक्सेल इतिहास पैनल में कॉल पर क्लिक करके एक रिपोर्ट के रूप में प्राप्त की जा सकती है। रिपोर्ट बहुत ही स्वैच्छिक है।




रिपोर्ट में पिक्सेल शेडर की स्थिति के बारे में जानकारी प्राप्त करने के बाद, आप निरंतर बफर पर डेटा प्राप्त कर सकते हैं जो कि पैरामीटराइजेशन के लिए उपयोग किया जाता है।



लिंक obj: 35 पर क्लिक करके आप इस बफर की स्थिति देख सकते हैं। इनमें से पहली चार कोशिकाओं के मान इनपुट पैरामीटर इनरकोलर के रंग (आर, जी, बी, अल्फा) हैं।



लेकिन यह निश्चित रूप से सभी नहीं है। भविष्य में, प्रोग्राम के स्रोत कोड को प्राप्त करना संभव है जो इन मूल्यों (0.3 0.3 0.3 1.0) को उत्पन्न करता है। ऐसा करने के लिए, मेनू आइटम "डीबग / ग्राफिक्स / इवेंट सूची" का उपयोग करें । ड्रॉ कॉल का चयन करना जो हमें ग्राफिक्स पिक्सेल हिस्ट्री पैनल में दिलचस्पी देता है, ग्राफिक्स इवेंट लिस्ट पैनल में हमें डायरेक्टएक्स एपीआई कॉल की पूरी सूची मिलती है और शेडर मापदंडों को अपडेट करने के लिए एक विधि की तलाश करते हैं - UpdateSubResource। संकेत है कि यह वास्तव में वह विधि है जो हमें रूचि देती है, जो कि obj: 35 का संदर्भ है। और फिर, "ग्राफिक्स कॉल स्टैक" पैनल का उपयोग करके, हम अपने आप को हमारे कार्यक्रम में एक विशिष्ट स्थान पर पाते हैं जहां यह कॉल किया गया था।



अब परिचित मेनू आइटम "सभी संदर्भों को ढूंढें" का उपयोग करना पर्याप्त है, उसी मापदंडों के साथ एक पंक्ति खोजने के लिए जिसे हम रुचि रखते थे।



डिबगिंग शेड्स


Visual Studio 11 बीटा के लिए HLSL शेड्स डीबग करना भी कुछ असाधारण नहीं है। ऐसा करने के लिए, बस स्रोत shader फ़ाइल के लिए डिबगिंग जानकारी बनाने के लिए मोड चालू करें।



यह केवल दृश्य स्टूडियो के लिए सामान्य मोड में ब्रेकपॉइंट्स सेट करने के लिए और उसी सुविधाओं के साथ रहता है (उदाहरण के लिए, शर्त ब्रेक पॉइंट)। जब एक ब्रेकपॉइंट वाले एक shader फ़ंक्शन को बुलाया जाता है, तो एक व्यवधान उत्पन्न होगा और चर के मौजूदा मूल्यों की जांच करना संभव होगा।



निष्कर्ष


जैसा कि यह लेख से स्पष्ट हो गया है, डायरेक्टएक्स एप्लिकेशन को डीबग करना विज़ुअल स्टूडियो 11 बीटा में शामिल टूल के लिए बहुत सरल हो सकता है।

आपको याद दिला दूं कि आप अभी www.microsoft.com/visualstudio/ru-ru पर विजुअल स्टूडियो 11 बीटा डाउनलोड कर सकते हैं

Source: https://habr.com/ru/post/In140638/


All Articles