在Android(和iOS)上使用Qt使用openGL绘制带有3d效果的2d线

时间:2016-12-15 01:50:22

标签: android c++ qt opengl-es

在我的应用中,屏幕上有10k~20万行。并且线条在2d空间中绘制,具有3d效果。

我希望使用Qt在iOS和Android上加快绘图的速度。 因此,我想在Qt上尝试openGL。

我尝试了一个非常简单的代码: here

它应该在我的Android上显示绿屏但在我的Android上显示白屏。 你知道为什么它在我的Android上显示白屏吗?如果我想在这个Android上使用openGL,我该怎么办?

创作者的应用输出:

InputMethodManagerService( 536): Enabling: SessionState{uid 10287 pid 25474 method 224d6020 session 2250c900 channel ClientState{22861db8 uid 10287 pid 25474} (server)}
W/My First openGL Widget(25474): (null):0 ((null)): Cannot find EGLConfig, returning null config
W/My First openGL Widget(25474): (null):0 ((null)): QEGLPlatformContext: Failed to create context: 3005
W/My First openGL Widget(25474): (null):0 ((null)): Cannot find EGLConfig, returning null config
W/My First openGL Widget(25474): (null):0 ((null)): QEGLPlatformContext: Failed to create context: 3005
W/My First openGL Widget(25474): (null):0 ((null)): QOpenGLWidget: Failed to create context
W/My First openGL Widget(25474): (null):0 ((null)): Cannot find EGLConfig, returning null config
W/My First openGL Widget(25474): (null):0 ((null)): QEGLPlatformContext: Failed to create context: 3005
W/My First openGL Widget(25474): (null):0 ((null)): QOpenGLWidget: Failed to create context
W/My First openGL Widget(25474): (null):0 ((null)): Cannot find EGLConfig, returning null config
W/My First openGL Widget(25474): (null):0 ((null)): QEGLPlatformContext: Failed to create context: 3005
W/My First openGL Widget(25474): (null):0 ((null)): QOpenGLWidget: Failed to create context
W/My First openGL Widget(25474): (null):0 ((null)): composeAndFlush: makeCurrent() failed
W/My First openGL Widget(25474): (null):0 ((null)): composeAndFlush: makeCurrent() failed

顺便说一句,为什么我不能用glBegin(GL_LINES)作为void MyGLWidget :: initializeGL()中的注释绘制线?

2 个答案:

答案 0 :(得分:0)

我建议您使用NanoVG而不是纯粹的OpenGL,这非常复杂。您在OpenGL上的代码与特定版本的OpenGL绑定,可能会导致许多可移植性问题。 NanoVG是支持OpenGL(2,es,es2,es3)的canvas绘图API,并且具有类似HTML5的画布API。还有一个与NanoVG的Qt集成,即QNanoPainter。

它也支持linux,windows和android。

答案 1 :(得分:0)

我可以通过评论下面的代码来解决这个问题。

// format.setVersion(3,2);

// format.setProfile(QSurfaceFormat :: CoreProfile)