2010-11-06 10 views
5

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

मैं Gentoo Linux NVIDIA चालकों में एक एसडीएल/ओपन कार्यक्रम लिख रहा हूँ 195.36.31 पर GeForce जाओ 6150.

उत्तर

10

नहीं - आपकी GPU को कभी स्पष्ट अपनी स्मृति के लिए कोई कारण नहीं है। उनका उपयोग करने से पहले अपने बनावट को साफ़ करना (या आरंभ करना) करना आपकी ज़िम्मेदारी है।

+0

धन्यवाद, कम से कम अब मुझे पता है कि यह एक अप्रत्याशित व्यवहार नहीं है, हालांकि यह सिर्फ डरावना है ... –

+1

मैं सहमत हूं। जोड़ना चाहते हैं: कुछ स्थितियों के तहत वीडियो ड्राइवरों से "सुरक्षा" विचारों के कारण आवंटित स्मृति को शून्य-इनिट करने का अनुरोध किया जाता है (बुरा प्रोग्राम यह जानना चाहता है कि अन्य लोग क्या चित्रित कर रहे हैं)। यह हास्यास्पद है (मैं कहूंगा कि उस कार्यक्रम की ज़िम्मेदारी होना चाहिए जो इसके मध्यवर्ती आउटपुट को छिपाना चाहता है), लेकिन इस तरह चीजें हैं। – valdo

+1

मैंने डायरेक्टएक्स 9 युग के माध्यम से बहुत सी डायरेक्ट 3 डी किया था। जब मैंने शुरू किया, फ्रेमबफर, सतह आदि अनिवार्य रूप से अनियंत्रित हो जाएंगे और कोड पिछले रन की सामग्री को आसानी से बेनकाब कर सकता है। किसी बिंदु पर, या तो माइक्रोसॉफ्ट या ड्राइवर प्रदाताओं ने इसे "ठीक करने" का फैसला किया होगा और आपको इसके बजाय रिक्त बफर मिलेंगे। मेरा मानना ​​है कि यह सुरक्षा के नाम पर किया गया था। मैं कहूंगा कि सुरक्षा चिंताओं वैध हैं; हम ऐसी प्रणाली को बर्दाश्त नहीं करेंगे जिसने उपयोगकर्ता को अन्य उपयोगकर्ता के अस्पष्ट मलबे वाले रैम को संसाधित किया है और फ्रेमबफर रैम को अलग-अलग नहीं माना जाना चाहिए। – timday

5

असल में, ओपनजीएल राज्य अच्छी तरह परिभाषित मानों के लिए शुरू किया गया है।

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

बिंदु यह है कि फ्रेमबफर (या बनावट डेटा या वर्टेक्स बफर या कुछ भी) "जीएल राज्य" नामक का हिस्सा नहीं है। आपके ड्राइवर में जीएल राज्य "मौजूद" है। GPU मेमोरी में संग्रहीत क्या है पूरी तरह से अलग बात है और जब तक आप इसे प्रारंभ करने के लिए ड्राइवर (जीएल कॉल के माध्यम से) पूछते हैं, तब तक यह अनियंत्रित नहीं होता है। तो अगर आप स्टार्टअप पर इसे साफ़ या प्रारंभ नहीं करते हैं तो बनावट मेमोरी में या यहां तक ​​कि फ्रेम बफर में भी पिछले रन के अवशेषों को पूरी तरह से संभव है।