QGLWidget paintEvent:在哪里初始化openGL
QGLWidget paintEvent: where to initialize openGL?
QGLWidget的paintEvent方法似乎是在initializeGL之前调用的,那么我应该把我的openGL初始化代码放在哪里呢?
我将它放入paintEvent方法中,如下所示:
void MyGLWidget::paintEvent(...)
{
makeCurrent();
..save modelview and projection matrices..
// This is initialization code
GLenum init = glewInit();
if (GLEW_OK != init)
{
/* Problem: glewInit failed, something is seriously wrong. */
qWarning() << glewGetErrorString(init);
}
// Dark blue background
glClearColor(0.2f, 0.0f, 0.5f, 0.0f);
// Enable depth test
glEnable(GL_DEPTH_TEST);
// End initialization code
... drawing code
QPainter painter(this);
...overpainting..
}
我真的不喜欢每次引发paintEvent时都调用我的glew库初始化函数。。。尽管这是有效的。
有什么建议吗?
您必须在initializeGL()中初始化OpenGL,没有其他选项。
但你也必须在paintGL中绘制,而不是在paintEvent中绘制,所以这就是你的错误所在。
覆盖QGLWidget的initializeGL()函数。它是为您想要的目的而创建的
从它的文件:
此虚拟函数在第一次调用之前被调用一次paintGL()或resizeGL(),然后每当小部件分配了一个新的QGLContext。在子类中重新实现它。
文档链接:http://doc.qt.io/archives/qt-4.7/qglwidget.html#initializeGL
相关文章:
- OpenGL GLM 矩阵/向量未正确初始化
- 在没有库的情况下初始化 OpenGL
- GTKmm Opengl 上下文未初始化
- 在上下文初始化之前查询支持的最高 OpenGL 版本?
- OpenGL C++:VBO 的结构包装器不会初始化成员
- 初始化多个纹理 OpenGL、SDL C++ 时出现问题
- openGL如何处理发送给它的空/未初始化数据?
- 您应该如何在OpenGL 4.5中初始化立方体地图阵列
- 为什么要使用'glad'库进行 opengl 初始化?
- OpenGL + SDL + glew 在成功初始化后不会绘制任何内容
- 无法初始化 OpenGL
- 使用visual studio 2012初始化openGL时出现问题
- 正确初始化 OpenGL 的结构数组
- 如何在 ActiveX 控件中正确初始化 OpenGL
- MFC和OpenGL CView,C ,Glew之后初始化OpenGL
- 在渲染以外的另一个线程中初始化 OpenGL 上下文
- QGLWidget paintEvent:在哪里初始化openGL
- OpenGL 着色器语言初始化错误无法从 GLChar 转换为 const
- iOS 下的 OpenGL ES 2.0 初始化
- 为什么我不能单独创建和初始化 OpenGl VAO?