क्या कोई तरीका है कि मैं एक प्रतीकात्मक ब्रेकपॉइंट सेट कर सकता हूं जो किसी भी OpenGL फ़ंक्शन कॉल GL_NO_ERROR
के अलावा किसी अन्य राज्य को सेट करते समय ट्रिगर करेगा? शुरुआती सबूत बताते हैं कि opengl_error_break
का उद्देश्य केवल उस उद्देश्य को पूरा करना है, लेकिन यह तोड़ नहीं देता है।क्या मैं एक्सकोड 4 में ओपनजीएल त्रुटियों पर ब्रेकपॉइंट ट्रिगर कर सकता हूं?
उत्तर
लार्स के दृष्टिकोण के आधार पर आप स्वचालित रूप से त्रुटियों की इस ट्रैकिंग को प्राप्त कर सकते हैं, यह कुछ प्रीप्रोसेसर जादू और स्टब फ़ंक्शन उत्पन्न करने पर आधारित है।
मैंने एक छोटा Python script लिखा जो ओपनजीएल हेडर को संसाधित करता है (मैंने उदाहरण में मैक ओएस एक्स का उपयोग किया था, लेकिन इसे आईओएस में से एक के साथ भी काम करना चाहिए)।
अजगर स्क्रिप्ट हर जगह अपनी परियोजना में शामिल करने के लिए दो फ़ाइलों, a header उत्पन्न करता है जहाँ आप इस तरह ओपन कॉल (आप शीर्ष लेख को मनचाहे नाम कर सकते हैं):
#include "gl_debug_overwrites.h"
हेडर के बाद मैक्रो और समारोह घोषणाओं में शामिल है इस योजना:
#define glGenLists _gl_debug_error_glGenLists
GLuint _gl_debug_error_glGenLists(GLsizei range);
स्क्रिप्ट भी एक ही धारा में एक source file पैदा करता है जो आप अलग से बचाने चाहिए, संकलन और अपनी परियोजना के साथ लिंक।
GLuint _gl_debug_error_glGenLists(GLsizei range) {
GLuint var = glGenLists(range);
CHECK_GL_ERROR();
return var;
}
कूल सामान! @ मैटविल्डिंग: मुझे लगता है कि टॉर्स्टन ने मेरे मुकाबले ज्यादा बकाया होने का हकदार है। अगर यह अभी भी संभव है तो कृपया बदलें! –
@LarsSchneider, 24 घंटे की समयसीमा समाप्त हो गई, तो यह हमेशा के लिए आपका है। सबसे अच्छा मैं कर सकता हूं ग्रीन चेकमार्क ले जाया गया है। आपके इनपुट के लिए दोनों के लिए धन्यवाद। –
एक्सकोड में आप इस पायथन स्क्रिप्ट का उपयोग कैसे करते हैं? – Jonny
मुझे लगता है कि समस्या से आपको क्या मिल सकता है capture OpenGL ES Frames ("ओपनजीएल ईएस फ्रेम्स कैप्चर करें" पर नीचे स्क्रॉल करें), जो अब एक्सकोड द्वारा समर्थित है। कम से कम इस तरह मैं अपने ओपनजीएल गेम्स को डिबग कर रहा हूं।
जब आप जानते हैं कि कोई त्रुटि हो रही है तो फ्रेम को कैप्चर करके आप ओपनजीएल स्टैक में इस मुद्दे को बहुत अधिक प्रयास किए बिना पहचान सकते हैं।
उम्मीद है कि यह मदद करता है!
हाँ, फ़्रेम कैप्चरिंग एक बहुत ही अच्छी क्षमता है, और मैं इसे बड़े पैमाने पर उपयोग करता हूं। दुर्भाग्यवश, मुझे सबसे पहले नोटिस करना होगा कि OpenGL एक त्रुटि स्थिति में है, फिर मैन्युअल रूप से फ्रेम को कैप्चर करें, फिर त्रुटि को अलग करने के लिए फ्रेम के लिए कॉल चलाएं। यह काम करता है, लेकिन मैं वास्तव में बस स्वचालित रूप से तोड़ना चाहूंगा। यह मुझे कुछ समय बचाएगा, और ऐसा लगता है कि यह संभव होना चाहिए। आपके समय के लिए धन्यवाद। –
हाँ, मैं समझता हूं कि आप इसे स्वचालित रूप से करना चाहते हैं ... मुझे यकीन नहीं है कि यह एक्सकोड के साथ संभव है या नहीं। देखेंगे कि मुझे कुछ और मिला है – Goles
डीबग मोड में प्रत्येक कॉल के बाद glGetError
पर कॉल करने के लिए अपने ओपनजीएल कॉल को लपेटें। रैपर विधि के भीतर एक सशर्त ब्रेकपॉइंट बनाएं और जांचें कि glGetError
का वापसी मूल्य GL_NO_ERROR
से कुछ अलग है या नहीं।
विवरण:
(OolongEngine परियोजना से) अपनी परियोजना के लिए इस मैक्रो जोड़ें: आपके सभी ओपन स्वयं या एक उपयुक्त RegEx के साथ कॉल के लिए
#define CHECK_GL_ERROR() ({ GLenum __error = glGetError(); if(__error) printf("OpenGL error 0x%04X in %s\n", __error, __FUNCTION__); (__error ? NO : YES); })
खोजें। तो आपके पास दो विकल्प अनुकरणीय glViewport()
कॉल के लिए दिखाया गया है:
glViewport(...); CHECK_GL_ERROR()
- साथ कॉल बदलें
glDebugViewport(...);
साथ कॉल बदलें औरglDebugViewport
लागू रूप में दिखाया गया है (1)।
यह निश्चित रूप से काम करेगा, लेकिन सशर्त रूप से संकलित 'glGetError' कॉल हर जगह छिड़कने के लिए एक बड़ी परियोजना के माध्यम से वापस जाना ठीक है जो मैं नहीं करना चाहता हूं। मुझे आश्चर्य है कि कोई प्रतीक नहीं है जिसे मैं बस तोड़ सकता हूं। –
- 1. मैं एक्सकोड 4 में अनुक्रमण कैसे अक्षम कर सकता हूं?
- 2. मैं एक्सकोड 4 में कॉपीराइट टेम्पलेट कैसे बदल सकता हूं?
- 3. मैं एक्सकोड 4.3.2 पर थीम कैसे स्थापित कर सकता हूं?
- 4. मैं एक्सकोड 4 में सी ++ प्रोग्राम कैसे चला सकता हूं?
- 5. मैं एक्सकोड में _WebThreadLockFromAnyThread पर प्रतीकात्मक ब्रेकपॉइंट कैसे सेट करूं?
- 6. एक्सकोड 4 क्या मैं एक मशीन से दूसरे मशीन में डाउनलोड कर सकता हूं
- 7. एक्सकोड 4
- 8. एक्सकोड 4
- 9. क्या मैं DataGridView.EndEdit सेलविलिडेटिंग ईवेंट को ट्रिगर कर सकता हूं?
- 10. मैं एक्सकोड 4 में फ़ाइल प्रकार में सिंटैक्स रंग कैसे निर्दिष्ट कर सकता हूं?
- 11. मैं एक्सकोड 4
- 12. मैं एक्सकोड में ओपनजीएल ईएस फ्रेम कैप्चर डेटा में एनोटेशन कैसे जोड़ सकता हूं?
- 13. क्या मैं एक्सकोड पर एक्सकर्चिव पुनः खोल सकता हूं?
- 14. मैं एक्सकोड 4 में .xcconfig फ़ाइलों का उपयोग कैसे कर सकता हूं?
- 15. मैं एक्सकोड 4
- 16. विजुअल स्टूडियो में क्या मैं अपना वैरिएबल ब्रेकपॉइंट में प्लॉट कर सकता हूं?
- 17. क्या मैं आईफोन अभिविन्यास परिवर्तन पर मोबाइल सफारी में एक सीएसएस कार्यक्रम ट्रिगर कर सकता हूं?
- 18. क्या मैं mysql में चुनिंदा कथन पर एक ट्रिगर लॉन्च कर सकता हूं?
- 19. एक्सकोड 4
- 20. मैं एक्सकोड 4
- 21. मैं वास्तव में एक्सकोड को कैसे अनइंस्टॉल कर सकता हूं?
- 22. एक्सकोड 4 ब्रेकपॉइंट क्रियाओं का उपयोग कैसे करें
- 23. मैं एक्सकोड में कार्य कैसे स्वचालित कर सकता हूं?
- 24. मैं एक्सकोड 4 में असेंबली की जांच कैसे कर सकता हूं?
- 25. एक्सकोड 4
- 26. मैं एक्सकोड 4 में कोड की एक विशिष्ट पंक्ति पर कैसे जा सकता हूं?
- 27. मैं ब्रू डॉक्टर त्रुटियों को कैसे ठीक कर सकता हूं
- 28. मैं एक्सकोड में ब्रांड्स को मिलान कैसे कर सकता हूं?
- 29. मैं एक्सकोड में एक बटन कैसे अक्षम कर सकता हूं?
- 30. एक्सकोड 4
आप एक पृष्ठभूमि NSTimer कि हर 3 फ्रेम आग या तो बना सकते हैं कि त्रुटि पर नज़र रखता है:
यह फिर एक और समारोह जो
_gl_debug_error_
लगी होती है तो जो इस के समान त्रुटियों के लिए जाँच करता है में सभीgl*
कार्यों लपेटो जाएगा कोड और यह एक अपवाद फेंक दिया है/एक ब्रेकपॉइंट है। –यह तुरंत त्रुटि की स्थिति को सतर्क करने के करीब आ जाएगा, लेकिन मुख्य लक्ष्य मुझे त्रुटि के समय कॉलस्टैक दे रहा है ताकि मैं आसानी से अपमानजनक कॉल को ट्रैक कर सकूं। –
संदर्भ के लिए, कोड काम नहीं करता प्रतीत होता है। मैंने अपना एक रोल किया: https://gist.github.com/3352303 – Eonil