纹理小部件渲染 OpenGL 示例

Posted

技术标签:

【中文标题】纹理小部件渲染 OpenGL 示例【英文标题】:Texture widgets render OpenGL example 【发布时间】:2018-09-09 14:07:44 【问题描述】:

我的 Flutter 应用需要显示 3d 模型并允许用户旋转它。我通过本机视图(ViewController & Activity)和用于渲染的 C++ 代码实现了这一点,下一步我尝试使用Texture 小部件来删除本机视图并仅使用 Flutter。我设法通过FlutterTexture 在ios 上显示OpenGL 渲染,但不明白如何在android 上实现。你能举出一些例子吗?如何将 OpenGL 与 SurfaceTexture 一起使用并将其连接到 Texture 小部件?

【问题讨论】:

这不是一个完整的 OpenGL 示例,但 Flutter 的集成测试之一包括使用 SurfaceTexture:github.com/flutter/flutter/blob/… 【参考方案1】:

在配置 OpenGL 堆栈时,应将 SurfaceTexture 传递给 eglCreateWindowSurface

我花了一段时间构建了示例项目和文章: https://github.com/mogol/opengl_texture_widget_example https://medium.com/@germansaprykin/opengl-with-texture-widget-f919743d25d9

private void initGL() 
    egl = (EGL10) EGLContext.getEGL();
    eglDisplay = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);

    int[] version = new int[2];
    egl.eglInitialize(eglDisplay, version);

    EGLConfig eglConfig = chooseEglConfig();
    eglContext = createContext(egl, eglDisplay, eglConfig);

    eglSurface = egl.eglCreateWindowSurface(eglDisplay, eglConfig, texture, null);

    egl.eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);

【讨论】:

我根据你的成功构建了一个示例。它起作用了,但我在用 glTexImage2D 渲染到纹理时感到很挣扎。你能看看吗? ***.com/questions/58531692/…

以上是关于纹理小部件渲染 OpenGL 示例的主要内容,如果未能解决你的问题,请参考以下文章

使用 Qt5 进行屏幕外渲染(openGL)

OpenGL + QT:渲染到纹理并显示回来

使用 QOpenGLContext 在小部件中进行渲染

在 gtkglext 小部件中渲染文本 - 从 glut 到 pango

在大纹理上渲染小纹理时,Metal 比 OpenGL 慢得多

Qt 在另一个小部件中调整小部件的大小