Невозможно перетянуть внешнюю текстуру в EGLSurface в Android
Когда я попытался визуализировать текстуру и матрицу преобразования в EGLSurface, в представлении не отображается изображение.
Как продолжение этой проблемы, я немного изменил код, следуя непрерывному захвату примера кода grafika / fadden
Вот мой код:
Вот метод рисования, который работает на RenderThread.
Этот метод отрисовки вызывается должным образом, когда данные создаются на стороне производителя из Native Code.
public void drawFrame() {
mOffScreenSurface.makeCurrent();
mCameraTexture.updateTexImage();
mCameraTexture.getTransformMatrix(mTmpMatrix);
mSurfaceWindowUser.makeCurrent();
mFullFrameBlit.drawFrame(mTextureId, mTmpMatrix);
mSurfaceWindowUser.swapBuffers();
}
run method of RenderThread ->
public void run() {
Looper.prepare();
mHandler = new RenderHandler(this);
mEglCore = new EglCore(null, EglCore.FLAG_RECORDABLE);
mOffScreenSurface = new OffscreenSurface(mEglCore, 640, 480);
mOffScreenSurface.makeCurrent();
mFullFrameBlit = new FullFrameRect(
new Texture2dProgram(Texture2dProgram.ProgramType.TEXTURE_EXT));
mTextureId = mFullFrameBlit.createTextureObject();
mCameraTexture = new SurfaceTexture(mTextureId);
mCameraSurface = new Surface (mCameraTexture); // This surface i am sending to Native Code where i use ANativeWindow reference and copy the data using post method. {producer}
mCameraTexture.setOnFrameAvailableListener(new SurfaceTexture.OnFrameAvailableListener() {
@Override
public void onFrameAvailable(SurfaceTexture surfaceTexture) {
Log.d (TAG, "Long breath.. data is pumbed by Native Layer producer..");
mHandler.frameReceivedFromProducer();
}
});
mSurfaceWindowUser = new WindowSurface(mEglCore, mSurfaceUser, false); // this mSurfaceUser is a surface received from MainActivity TextureView.
}
Чтобы подтвердить, производят ли данные на собственной стороне, производящей данные, если я передаю непосредственно поверхность пользователя Без каких-либо конфигураций EGL, кадры выводятся на экран.
На родном уровне
geometryResult = ANativeWindow_setBuffersGeometry(userNaiveWindow,640, 480, WINDOW_FORMAT_RGBA_8888);
Чтобы сделать кадр, который я использую
ANativeWindow_lock and ANativeWindow_unlockAndPost() to render directly frame into buffer.
Я не мог думать, что может быть не так и куда мне еще копать?
Спасибо, Фадден, за вашу помощь.