Проблема в сочетании textureView и OpenGL - PullRequest
0 голосов
/ 04 марта 2019

В настоящее время я пытаюсь работать как с textureView, так и с OpenGL, и моей целью является чтение буфера из SurfaceTexture.После долгих поисков я нашел grafika , но не смог найти подходящий пример, использующий textureview. (И по какой-то причине мне пришлось использовать textureView)

Я пытался, что ясоздал текстуру и попытался установить textureView для ее использования:

    @Override
protected void onCreate(final Bundle savedInstanceState) {

    super.onCreate(null);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    setContentView(R.layout.activity_textureview);

    displayTextureView=(TextureView) findViewById(R.id.camera_textureview);
    mEglCore = new EglCore(null, EglCore.FLAG_RECORDABLE);
    mOffscreenSurface=new OffscreenSurface(mEglCore,VIDEO_WIDTH,VIDEO_HEIGHT);
    mOffscreenSurface.makeCurrent();
    mFullFrameBlit = new FullFrameRect(
            new Texture2dProgram(Texture2dProgram.ProgramType.TEXTURE_EXT));
    mTextureId = mFullFrameBlit.createTextureObject();
    mCameraTexture = new SurfaceTexture(false);
    mCameraTexture.attachToGLContext(mTextureId);
    displayTextureView.setSurfaceTextureListener(mSurfaceTextureListener);
    displayTextureView.setSurfaceTexture(mCameraTexture);
    mHandler = new MainHandler(this);
    Initialized=true;
}

Но тогда это вызывает у меня ошибку:

GLConsumer уже присоединен к контексту

Я также нашел this , но после того, как я попробовал описанный здесь метод, я получил полностью из glReadPixels метод, поэтому я полагаю, что SurfaceTexture должен быть присоединен к GLcontext для чтения пикселей.

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 04 марта 2019

вы должны обратиться к этому https://github.com/google/grafika/blob/master/app/src/main/java/com/android/grafika/ContinuousCaptureActivity.java

в этом примере используется surfaceView, вам просто нужно заменить на textureView.

строку 386: "mDisplaySurface = new WindowSurface (mEglCore, holder.getSurface (), false); "просто замените holder.getSurface () на Surfacetexture из textureView.

И есть метод для чтения буфера https://github.com/google/grafika/blob/master/app/src/main/java/com/android/grafika/gles/EglSurfaceBase.java

посмотрите на метод saveFrame.

...