बनावट में पिक्सल को बदलने की सबसे प्रभावी तकनीक को रेंडर-टू-बनावट कहा जाता है और इसे FBOs के माध्यम से ओपनजीएल/ओपनजीएल ईएस में किया जा सकता है। डेस्कटॉप ओपनजीएल पर आप सीधे जीपीयू पर पिक्सेल डेटा में हेरफेर करने के लिए पिक्सेल बफर ऑब्जेक्ट्स (PBOs) का उपयोग कर सकते हैं (लेकिन ओपनजीएल ईएस अभी तक इसका समर्थन नहीं करता है)।
अनदेखा ओपनजीएल पर आप सिस्टम मेमोरी में पिक्सल बदल सकते हैं और फिर glTexImage2D/glTexSubImage2D के साथ बनावट अपडेट कर सकते हैं - लेकिन यह अक्षम अंतिम उपाय समाधान है और यदि संभव हो तो इससे बचा जाना चाहिए। glTexSubImage2D आमतौर पर बहुत तेज़ होता है क्योंकि यह केवल मौजूदा बनावट के अंदर पिक्सेल अपडेट करता है, जबकि glTexImage2D पूरी तरह से नया बनावट बनाता है (एक लाभ के रूप में आप बनावट के आकार और पिक्सेल प्रारूप को बदल सकते हैं)। दूसरी ओर, glTexSubImage2D बनावट के केवल हिस्सों को अद्यतन करने की अनुमति देता है।
आप कहते हैं कि आप इसे OpenGL ES साथ काम करना चाहते, तो मैं निम्न चरणों का प्रस्ताव होगा:
- की जगह glTexSubImage2D() के साथ glTexImage2D() - अगर आप पर्याप्त प्रदर्शन यह है कि लाभ के लिए, बस जाने भी दो;
- एफबीओ और शेडर्स के साथ रेंडर-टू-बनावट को कार्यान्वित करें - इसके लिए आपके कोड को फिर से लिखने के लिए और अधिक काम की आवश्यकता होगी, लेकिन प्रदर्शन भी बेहतर होगा।
FBOs के लिए कोड इस तरह देख सकते हैं:
// setup FBO
glGenFramebuffers(1, &FFrameBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, FFrameBuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, YourTextureID, 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
// render to FBO
glBindFramebuffer(GL_FRAMEBUFFER, FFrameBuffer);
glViewport(0, 0, YourTextureWidth, YourTextureHeight);
your rendering code goes here - it will draw directly into the texture
glBindFramebuffer(GL_FRAMEBUFFER, 0);
// cleanup
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glDeleteFramebuffers(1, &FFrameBuffer);
ध्यान रखें कि सभी पिक्सेल प्रारूपों के लिए प्रदान की जा सकती है नहीं रखें। आरजीबी/आरजीबीए आमतौर पर ठीक है।
स्रोत
2012-07-25 10:04:00
क्या फ़्यूचर डेटा के रूप में सीधे FFMpegs फ्रेम आउटपुट का उपयोग करने और इंटरमीडिएट बिटमैप चरण के बिना इसे अपलोड करने का कोई तरीका है? –
मैं एंड्रॉइड में एफएफएमपीईजी का उपयोग कैसे कर सकता हूं ?? क्या आप मुझे कोई संदर्भ दे सकते हैं ?? मैं वास्तव में बिटमैप फ्रेम का उपयोग कर एक वीडियो प्रस्तुत करना चाहता था। –