如何在 Android 上使用 QOpenGLWidget?

Posted

技术标签:

【中文标题】如何在 Android 上使用 QOpenGLWidget?【英文标题】:How can I use QOpenGLWidget on Android? 【发布时间】:2016-10-23 11:40:24 【问题描述】:

当我尝试使用来自 Qt 5.6 的当前 Android SDK 工具 25.2.2 标准示例 - “Cube OpenGL ES 2.0 示例”进行编译时,它在 Win/Linux 上运行良好,但在黑屏上android 7.0 - API 24。

当我将 QOpenGLWidget 的对象放在 MainWindow 上时会发生相同的行为 - Android 7.0 上的黑屏 - API 24。

两种情况下的应用程序输出:

W libQtGUI.so: (null):0 ((null)): QOpenGLShader::compile(Vertex): ERROR: Valid GLSL but not GLSL ES
W libQtGUI.so: (null):0 ((null)): *** Problematic Vertex shader source code ***
W libQtGUI.so: (null):0 ((null)): #define lowp
W libQtGUI.so: #define mediump
W libQtGUI.so: #define highp
W libQtGUI.so: #line 1
W libQtGUI.so: attribute highp vec3 vertexCoord;attribute highp vec2 textureCoord;varying highp vec2 uv;uniform highp mat4 vertexTransform;uniform highp mat3 textureTransform;void main()    uv = (textureTransform * vec3(textureCoord,1.0)).xy;   gl_Position = vertexTransform * vec4(vertexCoord,1.0);
W libQtGUI.so: (null):0 ((null)): ***
W libQtGUI.so: (null):0 ((null)): QOpenGLShader::compile(Fragment): ERROR: Valid GLSL but not GLSL ES
W libQtGUI.so: (null):0 ((null)): *** Problematic Fragment shader source code ***

但是当我从 https://dl.google.com/android/repository/tools_r25.1.7-windows.zip 降级到 Android SDK 工具 25.1.7 时,QOpenGLWidget 只能在 MainWindow 上的 Android 上正常工作,但如果它包含 QOpenGLWidget,它不会显示任何其他 QDialog。

这是否可以在 Android 上使用 QOpenGLWidget,以及如何使用?

【问题讨论】:

【参考方案1】:

错误听起来很像代码被编译为使用桌面 GL。我根本不知道 GLWidget 代码,但 Qt 构建系统在库构建期间有 opengl 版本/风格选择。这些错误听起来很像您的 Qt 是使用桌面 opengl 构建的,但 android 仅提供 opengl ES。在桌面端,您可以检查实际使用的是哪种 opengl 风格。它可能只适用于 linux/windows,因为它们提供了两种 opengl 风格的库。

【讨论】:

以上是关于如何在 Android 上使用 QOpenGLWidget?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 相机上使用意图添加功能裁剪图像?

如何在 Android 上使用 QOpenGLWidget?

如何在Android上打破通知的内容

如何在 Android 上使用嵌入式 Flash?

如何在 java (Android) 上使用字符串

如何在 Android 上使用硬件加速视频解码?