2011-10-27 114 views
1

我正在寫一個使用Qt的OpenGL應用程序,它在我的桌面上生成並運行良好,但是當我嘗試在筆記本電腦上運行完全相同的代碼時,它會生成但不輸出任何內容?這是我的main.cppQt應用程序在桌面上工作,但不是筆記本電腦?

#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中是否存在某種內部檢查,取決於我的屏幕分辨率?這幾乎是我能想到的唯一事情。

+0

也許這是你的GLWidget.h內部的東西? –

+0

你在使用什麼操作系統? –

+2

您的猜測可能是正確的,@ pixpusher。您可以做一個簡單的測試,將您傳遞的尺寸除以2,並查看新應用程序是否可以在桌面以及筆記本電腦上運行。 – karlphillip

回答

1

我不希望用戶能夠調整窗口

請問爲什麼?我是否可以假設你想讓窗口成爲​​一個固定的大小,因爲你想用OpenGL來生成一個完全一樣大小的圖像?如果是這樣,那麼我必須告訴你,它不會那樣工作。 OpenGL實現將只呈現屏幕上可見的內容(像素所有權測試)。如果窗口的某些部分不可見(在您的情況下,筆記本電腦會出現這種情況),這些像素不會被渲染。讀出framebuffer會使這些像素不確定。

來解決這個問題的正確方法是使用一個p緩衝器幀緩衝對象(FBO)。 FBO更容易使用,但在Windows上不受支持(Windows上的英特爾圖形具有相當差的FBO支持)。所有Linux OpenGL實現(Mesa(也是Intel),ATI/AMD和NVidia)都支持FBO。網上有很多FBO和PBuffer教程。

相關問題