textureView和OpenGL组合中的问题

问题描述 投票:0回答:1

目前我正在尝试使用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才能读取像素。

有人可以给我一些帮助吗?

android opengl-es textureview
1个回答
1
投票

你应该参考这个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);”只需用textureView中的surfacetexture替换holder.getSurface()。

并且有一种方法来读取缓冲区https://github.com/google/grafika/blob/master/app/src/main/java/com/android/grafika/gles/EglSurfaceBase.java

看一下saveFrame方法。

© www.soinside.com 2019 - 2024. All rights reserved.