相关疑难解决方法(0)

如何在Flutter for Android中渲染OpenGL?

if (call.method.equals("createVideoRenderer")) {
            TextureRegistry.SurfaceTextureEntry entry = textures.createSurfaceTexture();
            SurfaceTexture surfaceTexture = entry.surfaceTexture();
            this.surfaceTexture = surfaceTexture;
Run Code Online (Sandbox Code Playgroud)

这是我的java方法调用,它创建my SurfaceTexture并将其保存到我的类实例中。我一直在阅读有关SurfaceTexture的类,这是我的理解方式:

我需要调用surfaceTexture.setOnFrameAvailableListener(SurfaceTexture.OnFrameAvailableListener listener)以传递SurfaceTexture.OnFrameAvailableListener定义函数的实例onFrameAvailable(SurfaceTexture surfaceTexture)。如果我理解正确,则此函数由调用updateTexImage()。所以我认为onFrameAvailable应该抓取图像并进行渲染?如果是这样,如何在其中调用OpenGL函数?OpenGL上下文在哪里?

我完全不知道如何渲染它。我发现的所有Android OpenGL示例都使用曲面视图或类似的视图。我需要知道如何创建一个纯opengl上下文。

我还认为,当调用onFrameAvailable时,surfaceTexture的纹理将绑定到OpenGL上下文,因此我不需要创建着色器,调整纹理参数等。我只需要对其渲染,也许调用即可glTexImage2D

那么如何glTexImage2D使用Flutter给我的SurfaceTexture 渲染像红色正方形这样简单的东西呢?

更新:

我发现了这个:https : //github.com/mogol/opengl_texture_widget_example

我成功地通过使用

GLES20.glClearColor(0f, green, 0f, 1f);

GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
Run Code Online (Sandbox Code Playgroud)

但是,我要使用glTeximage2D。我尝试简单地添加

GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, 100, 100,
                0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, buffer);
Run Code Online (Sandbox Code Playgroud)

但这没用

更新:

我进行了一些研究,发现(我认为)android使用gl外部纹理,因此我尝试:

    buffer = ByteBuffer.allocate(bufferSize);
    for (int i = 0; i < bufferSize; i = …
Run Code Online (Sandbox Code Playgroud)

java android opengl-es flutter

6
推荐指数
1
解决办法
152
查看次数

标签 统计

android ×1

flutter ×1

java ×1

opengl-es ×1