मैं OpenGL में फ़्रेम बफ़र ऑब्जेक्ट को प्रदान की जा रही डिबग कैसे कर सकता हूं?


17

मेरे पास एक बिंदु बादल है जिसे स्क्रीन पर प्रस्तुत किया जा रहा है। प्रत्येक बिंदु की स्थिति और रंग के साथ-साथ एक आईडी भी है।

मुझे एक बनावट के लिए प्रत्येक बिंदु के लिए आईडी प्रस्तुत करने के लिए कहा गया था, इसलिए मैंने एक FBO बनाया और दो बनावट, एक रंग के लिए और एक गहराई से जुड़ा हुआ था। मैंने इस ऑफ-स्क्रीन रेंडरिंग के लिए आवश्यक VAO और VBO का निर्माण किया और प्रत्येक बिंदु के लिए अपनी स्थिति और ID अपलोड की।

एक बार FBO को रेंडर करने के बाद, मैं कलर-टेक्सचर के पिक्सल को यह glReadPixels()देखने के लिए पढ़ता हूं कि वैल्यूज क्या हैं, लेकिन लगता है कि वे सभी क्लीयर आउट हो गए हैं, यानी उनका जो वैल्यू है, वह वैसा ही है glClearColor()

क्या कोई ऐसा तरीका है जिससे मैं डिबग कर सकता हूं कि यह मेरे FBO की रंग बनावट के लिए क्या प्रस्तुत किया जा रहा है? कोई भी सुझाव जो आप प्रदान कर सकते हैं, उसका बहुत स्वागत है।

जवाबों:


21

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

एक बहुत अच्छा रेंडरडोक है जो पूरी तरह से मुक्त और ओपनसोर्स दोनों है। इसके अलावा यह सक्रिय रूप से समर्थित है।

एक अन्य इंटेल जीपीए है जो दुर्भाग्य से, अपने वेबपेज के अनुसार, ओजीएल 3.3 कोर तक समर्थन करता है।

बस एक और जोड़ने के लिए, मैं gDEBugger का उपयोग करता था , लेकिन यह पिछले अपडेट के बाद लंबा समय बीत चुका है। यह AMD CodeXL में विकसित हुआ है कि दुर्भाग्य से मैंने कभी उपयोग नहीं किया।


इसके अतिरिक्त, मेरे पास कभी-कभी एक कमांड भी होती है जो किसी कुंजी को दबाने पर एक निर्दिष्ट फ़ॉब को एक छवि से बाहर निकाल देगा। यह लो-टेक तरीका है।
जॉर्ज रोड्रिग्ज

आपके विज़ुअलाइज़ेशन FBO में रेंडरिंग के लिए यह सुनिश्चित करना कि आपके पास सही गहराई परीक्षण सेटअप है, यह शायद एक अच्छा विचार है।
rys

मैं अभी भी पुराने जीएल संस्करणों के लिए समय-समय पर gDEbugger का उपयोग करता हूं। CodeXL इसका अधिक आधुनिक संस्करण है और इसे यहां पाया जा सकता है: github.com/GPUOpen-Tools/CodeXL ध्यान दें कि एपिट्रेस पृष्ठ पर ग्राफिक्स डिबगिंग टूल की एक व्यापक सूची यहां है: apitrace .github.io
Bim

11

उदाहरण के लिए gbuffer का उपयोग करने वाले अनुप्रयोगों में FBO से डेटा प्राप्त करने के लिए मैंने कई एप्लिकेशन / एपीआई / लाइब्रेरी का परीक्षण किया। महीनों की पीड़ा के बाद मैंने ओपनबग , डायरेक्ट 3 डी और वेबजीएल को डिबग करने के लिए जीथब पर उपलब्ध एपिट्रेस की खोज की । मैंने समस्याओं के बिना विंडोज और लिनक्स में उपयोग किया।

मुझे उम्मीद है कि यह आपके लिए उपयोगी हो सकता है।


7

Cifz की प्रतिक्रिया के अलावा, FBO की कल्पना करने का एक और तरीका जिसमें बहुत अधिक कोड खर्च नहीं होता है, एक विंडो से फ्रेमबफ़र से पिक्सेल स्थानांतरित करने के लिए glBlitFramebuffer () का उपयोग करना है।

// XXX WARNING: Untested code follows

// Blit from fbo...
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
// ...to the front buffer.
glBindFramebuffer(GL_WRITE_FRAMEBUFFER, GL_FRONT);

GLsizei HalfWindowWidth = (GLsizei)(WindowWidth / 2.0f);
GLsizei HalfWindowHeight = (GLsizei)(WindowHeight / 2.0f);

// Blit attachment 0 to the lower-left quadrant of the window
glReadBuffer(GL_COLOR_ATTACHMENT0);
glBlitFramebuffer(0, 0, FboWidth, FboHeight,
                  0, 0, HalfWindowWidth, HalfWindowHeight,
                  GL_COLOR_BUFFER_BIT, GL_LINEAR);

// Blit attachment 1 to the lower-right quadrant of the window
glReadBuffer(GL_COLOR_ATTACHMENT1);
glBlitFramebuffer(0, 0, FboWidth, FboHeight,
                  HalfWindowWidth, 0, WindowWidth, HalfWindowHeight,
                  GL_COLOR_BUFFER_BIT, GL_LINEAR);

// ...and so on. You can switch FBOs if you have more than one to read from.

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

लेकिन जितनी जल्दी 'एन गंदा हैक्स जाते हैं, यह बहुत अच्छा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.