c++ - QGLWidget 拒绝绘制任何东西

标签 c++ qt opengl qt4 qglwidget

我看了很多关于 OpenGL 不绘图、常见错误等的文章和 SO 问题。这个让我很困惑。

我已经为 glOrtho 尝试了几种不同的设置、不同的顶点位置、颜色等,但都无济于事。

可以确认 OpenGL 状态是有效的,因为代码中的清晰颜色紫色(意味着窗口紫色)。 gDEBugger 还确认框架正在更新(Fraps 也是如此)。

这是代码。标记为“没有帮助”的行最初并不存在,是我尝试过但失败了的内容。

QTWindow::QTWindow( )
{
    // Enable mouse tracking
    this->setMouseTracking(true);
}

void QTWindow::initializeGL()
{
    // DEBUG
    debug("Init'ing GL");
    this->makeCurrent(); ///< Didn't help
    this->resizeGL(0, 0); ///< Didn't help
    glDisable(GL_CULL_FACE); ///< Didn't help
    glClearColor(1, 0, 1, 0);
}

void QTWindow::paintGL()
{
    // DEBUG
    debug("Painting GL");
    this->makeCurrent(); ///< Didn't help
    glLoadIdentity();
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0,1,1);
    glBegin(GL_TRIANGLES);
    glVertex2f(500,100);
    glVertex2f(100,500);
    glVertex2f(0,0);
    glEnd();
    this->swapBuffers(); ///< Didn't help
}

void QTWindow::resizeGL(int width, int height)
{
    // DEBUG
    debug("Resizing GL");
    this->makeCurrent(); ///< Didn't help
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, 1000, 0, 1000, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

三角形根本不显示,即使关闭了剔除。但是,所有三个调试日志都被准确地调用了。

我错过了什么?

最佳答案

尝试在 QTWindow::resizeGL() 函数的最开始调用 glViewport() 函数:

glViewport(0, 0, width, height);

并且永远不要在 widthheight 设置为 0 的情况下调用 resizeGL() ;) 除此之外,您没有必要直接调用 resizeGL()因为每当调整窗口大小时 Qt 都会调用它。

您可以删除对 swapBuffers() 函数的所有调用 - 它由 Qt 内部调用。

makeCurrent() 函数应在所有其他 GL 调用之前调用,因此最好在 initializeGL() 中调用它,但不必在 paintGL() 函数中调用它(除非 paintGL( ) 正在从另一个线程调用,但我敢打赌它不在您的代码中)。

关于c++ - QGLWidget 拒绝绘制任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14763940/

相关文章:

c++ - 没有或有静态设备上下文的 OpenGL 加载纹理?

c++ - TCP推拉套接字服务器设计

qt - 如何将QGraphicsScene/View设置为特定的坐标系

c++ - 从基于 C++/QT 的应用程序访问 NSWindow

c++ - 使用VBO绘制不同宽度的彩色线条?

c++ - C\C++ : Initialize ASCII special char?

c++ - 运算符重载 + C++ 中的运算符。如何重载objecttype+Objecttype = Objecttype B?

python - 使用 QSignalMapper 和实例方法将 PySide 连接到信号

c++ - 如何使用 GL_LINES 在视口(viewport)周围绘制边框?

opengl - 更改顶点着色器中顶点的颜色