我正在使用Qt编写OpenGL应用程序,它可以在桌面上正常运行,但是当我尝试在笔记本电脑上运行完全相同的代码时,它可以生成但不输出任何东西吗?这是我的main.cpp

#include <QtGui/QApplication>
#include <QtOpenGL/QGLWidget>
#include "GLWidget.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    GLWidget window;
    window.resize(1050,700);
    window.setFixedSize(1050, 700);
    window.show();

    return app.exec();
}

我不希望用户能够调整窗口大小,因此无法调整大小。如果我在main的最后一行设置了一个断点,则它永远不会到达笔记本电脑上。我单步执行了代码,并在调用show()(这只是一个内联函数)之后立即调试了代码0。调试器检查了所有项目的构建和运行设置,它们在两台计算机上都相同。
我的台式机有1920x1080的显示器,但笔记本电脑只有1366x768,这与它有什么关系吗? Qt是否在进行某些内部检查,具体取决于我的屏幕分辨率?这几乎是我唯一能想到的。

最佳答案



请问为什么?我可以假定您希望窗口为固定大小,因为您想使用OpenGL生成恰好此大小的图像吗?如果是这样,那么我必须告诉你,它不会那样工作。 OpenGL实现将仅呈现将在屏幕上可见的内容(像素所有权测试)。如果窗口的某些部分不可见(在您的情况下,在笔记本电脑上将是这种情况),则不会渲染这些像素。读出帧缓冲区将使这些像素不确定。

解决此问题的正确方法是使用PBuffer或帧缓冲区对象(FBO)。 FBO易于使用,但在Windows上不受广泛支持(Windows上的Intel图形对FBO的支持很差)。 FBO受所有Linux OpenGL实现(Mesa(Intel也支持),ATI / AMD和NVidia)支持。网络上有许多FBO和PBuffer教程。

10-04 20:35