2012-06-22 4 views
5

के बिना फ्रेमबफर को बफर ऑब्जेक्ट को प्रस्तुत/ड्रा कैसे करें Opengl spec 4.0 glDrawPixels को बहिष्कृत किया गया है।gldrawPixels

कुडा इंटरऑपरेबिलिटी के लिए यह "ओपनगल बफर ऑब्जेक्ट्स" का उपयोग करना सबसे अच्छा लगता है। (एक विकल्प बनावट या सतह हो सकता है लेकिन इन्हें कैशिंग/समरूपता के मुद्दे हैं और इसलिए मेरे कुडा कर्नेल के लिए अनुपयोगी हैं)।

मैं बस एक कूडा कर्नेल बनाना चाहता हूं जो इस मैप किए गए ओपनगल बफर ऑब्जेक्ट का उपयोग करता है और इसे "पिक्सेल सरणी" या मेमोरी होल्डिंग पिक्सल का एक टुकड़ा उपयोग करता है, बाद में बफर अनैप किया जाता है।

मैं तब ओपनग्लू प्रोग्राम को बफर ऑब्जेक्ट को फ्रेमबफर पर खींचना चाहता हूं। मैं एक ओपनजी एपीआई का उपयोग करना चाहता हूं जिसे बहिष्कृत नहीं किया गया है।

फ़्रेम बफर पर बफर ऑब्जेक्ट खींचने के लिए अन्य तरीके/एपिस क्या हैं? (बफर प्रस्तुत करने के लिए भी उपयोग नहीं किया जा सकता है क्योंकि उनके पास शायद Cuda arrays/कैशिंग समस्याओं के समान समस्या है, इसलिए यह फ्रेमबफर ऑब्जेक्ट/एक्सटेंशन को बाहर करता है?!?)।

क्या ओपनजी 4.0 में अब कोई अंतर/गायब कार्यक्षमता है कि glDrawPixels को बहिष्कृत किया गया है? या क्या कोई विकल्प है?

+0

मैं नीचे नहीं हूं खड़ा। आपका पहला बिंदु बताता है कि सीयूडीए/ओपनसीएल-ओपनजीएल इंटरऑप (और वे हैं) के लिए ओपनजीएल बफर ऑब्जेक्ट्स की सिफारिश की जाती है। क्या आप अन्य विकल्पों की तलाश में हैं या क्या उस एवेन्यू के साथ कोई समस्या है? – Ani

+0

क्यूडा मैनुअल ओपनग्लू के साथ क्यूडा ग्राफिक्स इंटरऑपरेबिलिटी के लिए तीन समाधान का उल्लेख करता है: बफर ऑब्जेक्ट्स, टेक्सचर और रेंडर बफर। मैनुअल बाद में बनावट का उल्लेख करता है और बफर प्रस्तुत करने में कई धागे द्वारा पढ़ने/लिखने के साथ मुद्दों को कैशिंग होती है। इस प्रकार मैं अपने आप को निष्कर्ष पर पहुंचाता हूं कि केवल एकमात्र विकल्प "बफर ऑब्जेक्ट्स" है। सवाल यह है कि "ओपनजीएल के साथ बफर ऑब्जेक्ट कैसे प्रदर्शित करें"? –

उत्तर

3

glDrawPixelsजीएल 3.2 से हटा और ऊपर कर दिया गया है (यह पदावनत नहीं है।, जिसका यह अर्थ "उपलब्ध है, लेकिन भविष्य में निकाला जा करने के लिए")। इसे हटा दिया गया था क्योंकि यह आमतौर पर स्क्रीन पर पिक्सेल डेटा खींचने का एक तेज़ तरीका नहीं है।

आपकी सर्वश्रेष्ठ शर्त glTexSubImage2D से upload it to a texture का उपयोग करना है, फिर स्क्रीन पर खींचें। या glBlitFramebuffer के साथ बनावट से इसे हटा दें।

+0

1. glTexSubImage2D वास्तव में एक समाधान हो सकता है। 2. glBlitFramebuffer शायद पढ़ने और लिखने के बीच फ्रेमबफर के बीच कॉपी करने के लिए है, इसलिए यह कोई समाधान नहीं है। –

+0

@ स्कीबकफाइंग: ग्लब्लिटफ्रेमबफर भाग स्क्रीन पर इसे चित्रित करने का एक विकल्प था। यही है, आप उस बनावट को संलग्न करते हैं जिसे आपने पिक्सेल डेटा को एक एफबीओ में अपलोड किया है, फिर * स्क्रीन पर * इसे ब्लिट करें। आप glteexSubImage2D का उपयोग कर रहे हैं; यह सिर्फ एक प्रश्न है कि क्या आप एक बनावट क्वाड ड्राइंग कर रहे हैं या बनावट से डिफ़ॉल्ट फ्रेमबफर पर blitting कर रहे हैं। –

+0

ठीक है, अब मैं देख रहा हूं ... मैंने वास्तव में glblitFramebufferEXT के साथ प्रयोग किया था जब यह अभी भी एक एक्सटेंशन था। मुझे लगता है कि यह कुछ हद तक काम करता है, बिल्कुल याद नहीं कर सकता। बहु थ्रेडिंग के साथ समस्या हो सकती है या शायद नहीं ... देर हो चुकी है और मुझे बिस्तर पर जाना है, इसलिए यह देखने के लिए कि यह कैसे काम करता है, मेरे ड्राइव पर एक उदाहरण खोजने के लिए कोई समय नहीं है। अभी के लिए मैं शायद फ्रेमबफर से परहेज कर रहा हूं और डिफ़ॉल्ट फ्रेमबफर पर आकर्षित करने के लिए बस एक बनावट का उपयोग कर रहा हूं, अब तक यह अच्छा काम करता प्रतीत होता है। –

2

ऐसा लगता है एकमात्र समाधान है निम्नलिखित:

  1. एक "(ओपन) पिक्सेल बफर वस्तु" जो उम्मीद है कि एक के रूप में ही "(ओपन) (सामान्य) बफर वस्तु" है बनाएँ।

  2. कुडा इंटरऑपरेबिलिटी के लिए पिक्सेल बफर ऑब्जेक्ट का उपयोग करें। (संभव नहीं है, तो एक सामान्य बफर वस्तु "

  3. फिर कोशिश या तो tex * ओपन API कॉल के साथ एक बनावट के लिए पिक्सेल बफर वस्तु आकर्षित और फिर डिफ़ॉल्ट फ्रेमबफर को बनावट आकर्षित। (यह शायद एक डबल है प्रतिलिपि, तो शायद सबसे धीमी विधि।)

  4. या कोशिश करते हैं और फ्रेमबफर को सीधे पिक्सेल बफर वस्तु आकर्षित। मुझे यकीन है कि नहीं कर रहा हूँ अगर यह एक विशेष फ्रेमबफर वस्तु/विस्तार की आवश्यकता है। (यह तेजी से करता है, तो यह कर सकते हैं हो सकता है सीधे किया जाना चाहिए, सिर्फ एक प्रतिलिपि)