GL_TEXTURE_EXTERNAL_OES
dokusuna yapamazsınız. GL_TEXTURE_EXTERNAL_OES
, aygıt kamerası gibi diğer aygıtlarla oluşturulan dış dokudır. Bu dokuya erişim okudunuz. Dokunun nasıl oluşturulduğunu değiştirmeniz gerekiyorsa, bunu yapmak için bir gölgelendirici program yazmanız gerekecektir.
OES doku verilerine erişebilmek için gerçekleştirmeniz gereken birkaç adım vardır. Harici OES doku aşağıdaki şekilde yeniden başlatılmalıdır:
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);
Daha sonra SurfaceTexture
nesnede OES dokusunu sarın ve her çerçeve için güncellemek için ayarlayın. senin public void onFrameAvailable(SurfaceTexture surfaceTexture)
geri aramasında Şimdi
mCamera = Camera.open();
try{
mCamera.setPreviewTexture(camTexture);
}catch(IOException ioe){
ioe.printStackTrace();
}
, sen birine işlemek: kamerayı başlatılacağı zaman
camTexture = new SurfaceTexture(mTextureHandle);
camTexture.setOnFrameAvailableListener(this);
, sen GL_TEXTURE_EXTERNAL_OES
şöyle kullanmak yönlendirmeniz gerekir: Sınıfınız SurfaceTexture.OnFrameAvailableListener
arabirimini uygulamalıdır şöyle GL_TEXTURE
nesneler: En renderFrame()
yöntemde
GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
camTexture.updateTexImage();
renderFrame();
yapmanız gerekenler aşağıdaki işlemleri:
1 - görünüm ayarlama
2 - dış doku Bind: glBindTexture(GL_TEXTURE_EXTERNAL_OES, texId);
3 - Set
4 dönüşüm matrisleri dahil olmak üzere gölgelendirici programı için tüm değişkenler - Son olarak glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
Bir aramayı dokuya dönüştürürken, hedefiniz, dokumanın oluşturulma şeklini değiştirmekse, bunu yapmak için bir GLES shader programı uygulamanız gerekir. Burada
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);
}
Ve ilişkili parça gölgelendirici edilir: fragman shader shader dosyasının en üstünde #extension GL_OES_EGL_image_external : require
sahip olduğunu
#extension GL_OES_EGL_image_external : require
precision mediump float;
uniform samplerExternalOES sTexture;
varying vec2 vTextureCoord;
void main(){
gl_FragColor = texture2D(sTexture, vTextureCoord);
}
Not Burada basit doku vertex shader bir örnektir. Bu çok önemlidir, gölgelendiricinin GL_TEXTURE_EXTERNAL_OES
dokusundan okumasına izin vermek gerekir. Artık dış doku verilerini istediğiniz şekilde oluşturmak için gölgelendirici programını değiştirebilirsiniz.