2010-06-01 15 views
5

मैं सोच रहा था कि क्या कई धागे के साथ जीएल कॉल करना सुरक्षित था। असल में मैं एक जीएलयूटेसेलेटर का उपयोग कर रहा हूं और सोच रहा था कि क्या मैं ऑब्जेक्ट को 4 में खींचने के लिए विभाजित कर सकता हूं और प्रत्येक को थ्रेड असाइन कर सकता हूं।क्या कई धागे के साथ जीएल कॉल करना सुरक्षित है?

मैं सोच रहा हूं कि यह परेशानी का कारण बन जाएगा क्योंकि टेस्सेलेटर कॉलबैक फ़ंक्शंस का उपयोग करता है। क्या 2 थ्रेड एक ही समय में एक ही कॉलबैक चला सकते हैं जब तक कि कॉलबैक एंटी ग्लोबल वैरिएबल तक नहीं पहुंचता है?

क्या मल्टीथ्रेडिंग का उपयोग करके ओपनजीएल ड्राइंग को अनुकूलित करने के अन्य तरीके भी हैं?

+0

संबंधित https://stackoverflow.com/questions/11097170/multithreaded-rendering-on-opengl –

उत्तर

1

"क्या 2 थ्रेड एक ही कॉलबैक को उसी समय चला सकते हैं जब तक कि कॉलबैक एंटी ग्लोबल वैरिएबल तक नहीं पहुंचता?" एक स्पष्ट हाँ है।

हालांकि, जब आप अपने कॉलबैक फ़ंक्शंस में ओपनजीएल की स्थिति को संशोधित करते हैं, तो विशेष रूप से जब आप glbegin/glEnd का उपयोग करते हैं (उदाहरण के लिए यदि आप डिस्प्लेलिस्ट उत्पन्न करते हैं) तो आपको समस्याएं मिलेंगी। जब तक आप GPU का उपयोग नहीं करते हैं (उदाहरण के लिए यदि आप जाल का उपयोग करते हैं), तो आप मल्टीथ्रेडिंग के साथ टेस्सेलेशन कर सकते हैं।

यदि आप अपने चित्र को अनुकूलित करना चाहते हैं, तो आप इसके बजाय टेस्सेलेशन के लिए ज्यामिति शेडर का उपयोग करना चाह सकते हैं। इसके लिए शेडर मॉडल 4 की आवश्यकता है।

+0

शेडर मॉडल 4 डायरेक्टएक्स विशिष्ट है: http://www.opengl.org/wiki/Detecting_the_Shader_Model। क्या आपका मतलब जीएलएसएल 1.3 था? –

+0

ठीक है, सही शब्द "एकीकृत शदर मॉडल" है, जिसे डीएक्स में शेडर मॉडल 4 कहा जाता है। ग्राफिक्स कार्ड का समर्थन करना यही है। ओपनजीएल ज्यामिति शेडर ओपनजीएल 3.2, जीएलएसएल 1.50 के साथ आया था, लेकिन आप ओपनजीएल 2.0 में इसे विस्तार के रूप में भी इस्तेमाल कर सकते हैं। – flyx

2

आपके प्रश्न में लाइनों के बीच पढ़ना, जवाब नहीं है। आप अलग-अलग धागे से समान जीएल संदर्भ पर कॉल नहीं कर सकते हैं। आप Parallel OpenGL FAQ में अधिक जानकारी प्राप्त कर सकते हैं।

संबंधित मुद्दे