डिबगिंग Shader कोड?


13

मैं एक खेल इंजन लिख रहा हूं, और जब मैं एक परिप्रेक्ष्य कैमरा का उपयोग करता हूं तो मुझे एक काली स्क्रीन मिलती है। मैं वास्तव में यह नहीं पूछने जा रहा हूं कि ऐसा क्यों है क्योंकि साझा करने के लिए बहुत सारे कोड होंगे और, स्पष्ट रूप से, मुझे लगता है कि यह एक छोटा सा सवाल है, यहां तक ​​कि आप सभी को परेशान करने के लिए भी।

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

तो मेरा सवाल है: मैं अपनी समस्या को कैसे दूंगा? केवल एक चीज जिसके बारे में मैं सोच सकता हूं कि मैं क्लाइंट-साइड और फिर क्रमपरिवर्तन द्वारा प्रोग्रामिंग के रूप में कई मूल्यों की जांच कर रहा हूं, लेकिन मैंने ऐसा किया है और कहीं नहीं मिला है। क्या कोई तरीका है जो मैं देख सकता हूं कि वीडियो कार्ड में क्या हो रहा है? क्या एक पूरी तरह से अलग तकनीक है जिसका मैं उपयोग कर सकता हूं?

मैं GLSL संस्करण 420 का उपयोग कर रहा हूं (और उस संस्करण के लिए विशिष्ट विशेषताएं), इसलिए मुझे नहीं लगता कि glslDevil एक विकल्प है, यह देखते हुए कि यह 2010 में अंतिम रूप से अपडेट किया गया था।

संपादित करें

मैं कुछ पूरी तरह से असंबंधित डिबगिंग के माध्यम से अपनी समस्या को हल करने में कामयाब रहा।

जवाबों:


2

आप glIntercept जैसे प्रोग्राम का भी उपयोग कर सकते हैं, जो PIX की तरह है लेकिन फिर OpenGL के लिए। सभी कॉल को इंटरसेप्ट करने और लॉग इन करने के बाद, यह भी कि आप शेडर उपयोग को प्रदर्शित करते हैं और रन टाइम पर शेड्स को संपादित करते हैं। डिबगिंग करते समय यह अंतिम विकल्प (रनटाइम पर शेड्स को संपादित करना) बेहद मददगार हो सकता है क्योंकि आप कुछ हिस्सों में संपादन तब तक कर सकते हैं जब तक कि कुछ गलत न हो जाए और आप किसी रंग को आउटपुट करके किसी मान को तुरंत डीबग कर सकते हैं।

http://code.google.com/p/glintercept/


यह उपयोगी लगता है। मैं यह देखने के लिए परीक्षण करूंगा कि क्या यह GLSL 4.20 EDIT के साथ काम करता है: कुछ कारणों से, मुझे नहीं लगता कि यह काम करने वाला है। यह OpenGL की बहुत सी विशेषताओं पर निर्भर करता है जो कि वंचित हैं और इस तरह मेरे shader कोड में नहीं है।
अवी

आह बहुत बुरा है, मुझे नहीं पता था कि यह पुराना था। हालांकि GLSL4.2 के लिए किसी प्रकार का डीबगर होना चाहिए। मैं आसपास पूछूंगा। इस बीच, यह काम कर सकता है? developer.nvidia.com/content/nvidia-shader-debugger#Features
रॉय टी

केवल Cg शेड के लिए काम करता है: |
अवी

4

हालांकि मुझे यकीन नहीं है, NVIDIA Nsight को Shaders को डिबग करने में सक्षम होना चाहिए, कम से कम मुझे लगता है कि यह कुछ पिछले संस्करण में GLSL का समर्थन करता था (जो आपको खोजने में सक्षम होना चाहिए)। यह विज़ुअल स्टूडियो के साथ काफी ठीक है, यह आसान नहीं है, लेकिन इसमें उपयोगी चीजों का भार है, लेकिन पुराने संस्करणों में आपको एक नेटवर्क के माध्यम से शेड को डीबग करने के लिए प्रत्येक के साथ 2 मशीनें चाहिए थीं (जबकि नवीनतम संस्करण कहता है कि यह "स्थानीय" डीबगिंग की अनुमति देता है) । इसके अलावा, Shader Designer [2] की जाँच करें जो एक उपयोगी IDE (लेकिन GLSL डिबगिंग की कमी है) लगता है।

[१] http://developer.nvidia.com/content/nvidia-nsight-visual-studio-bition

[२] http://www.opengl.org/sdk/tools/ShaderDesigner/


ध्यान दें कि वास्तव में शेड को डीबग करने के लिए NSight को प्रशासक की अनुमति की आवश्यकता होती है।
स्टारबिम्रेनबोलाब्स

1

दुर्भाग्य से opengl डिबगिंग आसान नहीं है। यहां ऐसी चीजें हैं जो मुझे उपयोगी लगीं:

  • हर कॉल के बाद glGetError का उपयोग करें
  • नए डिबग एक्सटेंशन (ARB_debug _ ???) का उपयोग करने का प्रयास करें
  • प्रत्येक कॉल के बाद स्क्रीन पर क्या खींचा है यह देखने के लिए gDebugger का उपयोग करें
  • प्रत्येक opengl कमांड के बाद क्या होता है यह देखने के लिए apitrace का उपयोग करें
  • वर्तमान इनपुट के आधार पर विभिन्न रंगों को आउटपुट करने के लिए अपने शेडर को संशोधित करें और यह समझने की कोशिश करें कि यह एक निश्चित रंग क्यों दिखाता है
  • ड्राइंग क्षमताओं को सीमित करने वाले प्रत्येक ओपेंग्ल कार्यक्षमता को अक्षम करें: कैंची परीक्षण, गहराई परीक्षण, बैकफेस कुलिंग, आदि।

1
यह वास्तव में मेरे सवाल का जवाब नहीं है। यह क्लाइंट-साइड OpenGL कॉल्स डीबग करने के लिए सहायक है, लेकिन शेडर प्रोग्राम डिबगिंग के लिए नहीं। मुझे पता है कि क्लाइंट-साइड ओपन कॉल डीबग कैसे करें।
एवी

1

व्यक्तिगत रूप से मैं अभी भी RenderMonkey का उपयोग करता हूं। हालाँकि, यह इस सटीक प्रश्न के लिए पूरी तरह उपयुक्त नहीं है क्योंकि यह केवल एक वास्तविक ऐप का एक पहलू है और इसलिए इसकी कुछ विषम सीमाएँ हैं। यह अच्छी तरह से समर्थन से बाहर है, लेकिन मुझे अभी GLSL डिबगिंग के लिए कुछ बेहतर नहीं मिला है।


मुझे विश्वास नहीं हो रहा है कि मैं यहाँ क्या चाहता हूं, विशेष रूप से कैमरा आंदोलन जैसी चीजें gl_ModelViewProjectMatrix को संशोधित करने पर भरोसा करने वाली हैं, जिसका मैं उपयोग नहीं करता हूं।
अवी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.