मेरे पास एक साधारण आवेदन है। इसके दो सूत्र हैं, प्रत्येक का अपना प्रतिपादन प्रसंग है, लेकिन वे एक VBO को साझा करते हैं (यह काम कर रहा है, मैंने इसका परीक्षण किया)।
अब मुझे क्या चाहिए: एक धागा VBO के पहले भाग से कुछ डेटा प्रदान कर रहा है और दूसरा धागा VBO के दूसरे भाग को अपडेट कर रहा है।
जब मैं VBO को अपडेट नहीं करता, तो यह ठीक काम कर रहा है।
लेकिन अद्यतन करते समय मेरे पास कुछ अजीब मुद्दे हैं। जब मैं glMapBuffer
VBO (दूसरे थ्रेड में) को अपडेट करने के लिए उपयोग करता हूं, तो पहले थ्रेड में, ज्यादातर समय, यह कुछ भी नहीं देता है - पूरी स्क्रीन स्पष्ट ( glClear
कॉल के बाद )। ऐसा लगता है कि यह वीबीओ से डेटा को नहीं छू सकता है (यह समझ में आता है, क्योंकि पूरे बफर को मैप किया गया है और इसलिए इसे किसी भी तरह से लॉक किया जा सकता है)।
मैंने उपयोग करने की कोशिश की glMapBufferRange
, जो उपयोग करता है GL_MAP_UNSYNCHRONIZED_BIT
। इसका मतलब यह होना चाहिए, "वीबीओ का इंतजार और उपयोग न करें जैसा आप चाहते हैं, मैं (कार्यक्रम) इसे खुद से सिंक्रनाइज़ करूंगा"। इसके अलावा, जब मैं VBO की एक श्रृंखला को मैप करता हूं और किसी अन्य भाग से डेटा रेंडर करता हूं, तो इसका इंतजार नहीं किया जाना चाहिए, लेकिन मैं उन्हीं मुद्दों का अनुभव कर रहा हूं जैसे मैं कर रहा हूं glMapBuffer
।
क्या कोई मुझे इसे ठीक करने या समझाने में मदद कर सकता है कि ऐसा क्यों होता है?