2012-06-18 25 views
6

हर बार जब मैं glClear(GL_COLOR_BUFFER_BIT); पर कॉल करता हूं, तो मुझे ओपनजीएल त्रुटि "अमान्य फ्रेमबफर ऑपरेशन" मिलता है।GlClear (GL_COLOR_BUFFER_BIT) के बाद ओपनजीएल अमान्य फ्रेमबफर ऑपरेशन;

कॉल ठीक काम करने लगता है, और कुछ भी गलत नहीं लगता है। मैं विधि ::paintGL() विधि में पहली बात कहता हूं।

हू? क्या मुझे बस इस त्रुटि की उपेक्षा करनी चाहिए?

+0

क्या आपने एक स्पष्ट रंग सेट किया है? – cmannett85

+0

@ cbamber85: नहीं, लेकिन मैंने अभी यह देखने के लिए 'ग्ल्लेक्लर रंग (0,0,0,0)' रखा है कि यह कोई फर्क पड़ता है, और दूसरा अभी भी वहां है। – houbysoft

+0

बहुत संभवतः पिछले ओपनजीएल कॉल द्वारा त्रुटि उठाई गई है जिसे कोड चेक नहीं किया गया था। सत्यापित करें कि सभी ओपनजीएल संचालन त्रुटियों की जांच द्वारा संरक्षित हैं। –

उत्तर

4

मेरा सबसे अच्छा अनुमान यह है कि आपका फ्रेमबफर पूरा नहीं हुआ है और अधूरा फ्रेमबफर पर glClear पर कॉल करना त्रुटि को फेंक रहा है।

glCheckFramebufferStatus का उपयोग करके फ्रेमबफर की स्थिति की जांच करें और सुनिश्चित करें कि यह GL_FRAMEBUFFER_COMPLETE देता है।

+0

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

+0

अपडेट: मेरे मामले में srgb8 को "रंगरेंडरबल" के रूप में समर्थित नहीं है (वैकल्पिक कार्यों के रूप में GL_SRGB8_ALPHA8 का उपयोग करके)। जैसा कि जेम्स ने कहा था, glCheckFrameBufferStatus ** ** को एक त्रुटि लौटा दी जानी चाहिए, लेकिन इसका मतलब यह नहीं है कि ओपनजीएल कार्यान्वयन में एक बग है जिसका उपयोग मैं कर रहा हूं (ओएसजीएक्स पर एक्सकोड 7.3 में ओपनजीएल-ईएस 3)। – kalmiya

2

मुझे यह समस्या ओएसएक्स पर एनएसओपेनजीएलवी व्यू के साथ एक सीवीडिस्प्ले लिंक के साथ रेंडर कॉलबैक ट्रिगर करने के लिए थी।

-(void)viewDidAppear { 
    [super viewDidAppear]; 

    CVDisplayLinkStart(_displayLink); 
} 

viewDidLoad में यह कर बहुत जल्दी है:

पूरी तरह से शुरू करने से पहले प्रतिपादन दिखाया गया है, यानी NSOpenGLView के लिए प्रतीक्षा करने होना सुनिश्चित करें।