0
这应该很简单:我使用QGLWidget来绘制一些OpenGL图形,并且我希望能够在渲染的OpenGL图形上编写一些东西,所以我使用了overpainting作为在QPainter的Qt演示中。QGLWidget - 如何构造一个覆盖的程序
这里是构建我的程序我的两个工作选择:
// This works but it's probably stupid
paintEvent()
{
makeCurrent();
glewInit();
loadShaders();
loadTextures();
loadBuffers();
... actually paint something with openGL ...
QPainter painter(this);
... overpainting ...
}
------------------------------------------------------------------------------------
// This works and may probably be better
paintEvent()
{
QGLWidget::paintEvent(event); // Base class call, this calls initializeGL ONCE and then paintGL each time it's needed
QPainter painter(this);
... overpainting ...
}
initializeGL()
{
glewInit();
}
paintGL()
{
loadShaders();
loadTextures();
loadBuffers();
... actually paint something with openGL ...
}
考虑到纹理和着色器不会是始终不变的,是任何这些选项可以接受的(在表演和合理的)?
如果不是:你将如何构造程序?
感谢您的帮助
可以在那里加载glew吗?我没有找到另一个地方加载glew – 2012-07-18 21:11:35
注意:paintEvent被多次提出,不幸的是,似乎将着色器/纹理/缓冲区(VBO)代码移动到initializeGL(仅在上下文更改时调用该代码)会导致应用程序不能很好地呈现 – 2012-07-18 21:13:40
@JohnnyPauling不是。 glew应该是主要的,因为它需要argc/argv从主要() – 2012-07-18 21:15:10