我想從OpenGL紋理讀取與GL_TEXTURE_EXTERNAL_OES綁定的像素/數據。Android從GL_TEXTURE_EXTERNAL_OES讀取像素
將紋理綁定到該目標的原因是,爲了在android上獲取實時攝像頭feed,需要使用綁定到GL_TEXTURE_EXTERNAL_OES的OpenGL紋理創建SurfaceTexture。
由於android使用OpenGL ES,因此我無法使用glGetTexImage()來讀取圖像數據。
因此,我將目標綁定到FBO,然後使用readPixels()讀取它。這是我的代碼:
GLuint framebuffer;
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
//Attach 2D texture to this FBO
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_EXTERNAL_OES, cameraTexture, 0);
status("glFramebufferTexture2D() returned error %d", glGetError());
但是由於某些原因我得到錯誤1282(GL_INVALID_OPERATION)。
這是不準確的。在Android上,YUV-> RGB轉換在幕後自動進行。請參閱https://stackoverflow.com/questions/46244179/android-mediacodec-output-format-gles-external-texture-yuv-nv12-to-gles-tex – tmm1