आप GL_TEXTURE_EXTERNAL_OES
बनावट को प्रस्तुत नहीं कर सकते हैं। GL_TEXTURE_EXTERNAL_OES
बाहरी बनावट है जो अन्य उपकरणों जैसे डिवाइस कैमरे द्वारा प्रदान की जाती है। आपने इस बनावट तक पहुंच पढ़ी है। यदि आपको बदलने की जरूरत है कि बनावट कैसे प्रदान की जाती है तो आपको ऐसा करने के लिए एक शेडर प्रोग्राम लिखना होगा।
ओईएस बनावट डेटा तक पहुंचने से पहले आपको कई कदम उठाने चाहिए। बाहरी ओ इ एस बनावट निम्नलिखित रास्ते में initialised किया जाना चाहिए:
int[] mTextureHandles = new int[1];
GLES20.glGenTextures(1, mTextureHandles, 0);
mTextureHandle = mTextureHandles[0];
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, mTextureHandles[0]);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
फिर आप एक SurfaceTexture
वस्तु में ओ इ एस बनावट लपेट और इसे सेट प्रत्येक फ्रेम के लिए अद्यतन करने के लिए।
mCamera = Camera.open();
try{
mCamera.setPreviewTexture(camTexture);
}catch(IOException ioe){
ioe.printStackTrace();
}
अब आप अपने public void onFrameAvailable(SurfaceTexture surfaceTexture)
कॉलबैक में, आप में से एक को प्रस्तुत करना:
camTexture = new SurfaceTexture(mTextureHandle);
camTexture.setOnFrameAvailableListener(this);
जब कैमरा initialising, आप GL_TEXTURE_EXTERNAL_OES
इसलिए की तरह उपयोग करने के लिए यह होना चाहिए: आपका वर्ग SurfaceTexture.OnFrameAvailableListener
इंटरफ़ेस को लागू करना चाहिए GL_TEXTURE
वस्तुओं इतना की तरह:
GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
camTexture.updateTexImage();
renderFrame();
अपने renderFrame()
विधि में आप की जरूरत है निम्न कार्य करें:
1 - व्यूपोर्ट सेट
2 - बाहरी बनावट से आबद्ध करें: glBindTexture(GL_TEXTURE_EXTERNAL_OES, texId);
3 - सेट
4 परिवर्तन मैट्रिक्स सहित शेडर कार्यक्रम के लिए चर के सभी - अंत में glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
पर कॉल के साथ बनावट प्रस्तुत करें यदि आपका लक्ष्य बनावट को बदलने के तरीके को बदलना है, तो आपको ऐसा करने के लिए एक GLES शेडर प्रोग्राम लागू करना होगा।
uniform mat4 uMVPMatrix;
attribute vec4 aPosition;
attribute vec4 aTextureCoord;
varying vec2 vTextureCoord;
void main() {
gl_Position = uMVPMatrix * aPosition;
vTextureCoord = vec2(1.0 - aTextureCoord.s, aTextureCoord.t);
}
और यहाँ जुड़े टुकड़ा शेडर है::
#extension GL_OES_EGL_image_external : require
precision mediump float;
uniform samplerExternalOES sTexture;
varying vec2 vTextureCoord;
void main(){
gl_FragColor = texture2D(sTexture, vTextureCoord);
}
नोट टुकड़ा शेडर शेडर फ़ाइल के शीर्ष पर #extension GL_OES_EGL_image_external : require
है कि यह एक सरल बनावट शिखर शेडर का एक उदाहरण है। यह बहुत महत्वपूर्ण है, शेडर को GL_TEXTURE_EXTERNAL_OES
बनावट से पढ़ने की अनुमति देना आवश्यक है। अब आप बाहरी बनावट डेटा को किसी भी तरह से प्रस्तुत करने के लिए शेडर प्रोग्राम को बदल सकते हैं।