2011-10-27 10 views
1

Qtを使用してOpenGLアプリケーションを作成していますが、デスクトップ上でうまく構築されて実行されますが、ラップトップで全く同じコードを実行しようとすると、ビルドされますが出力されません。ここに私のmain.cppですQtアプリはデスクトップでは動作しますが、ノートパソコンでは動作しませんか?

#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(); 
} 

私はユーザーがウィンドウのサイズを変更できないようにしたいので、固定サイズです。私がメインの最後の行にブレークポイントを設定すると、それは私のラップトップでは決して到達しません。コードをステップ実行し、show()が呼び出された直後(これは単なるインライン関数)、デバッガはコード0で終了します。すべてのプロジェクトのビルドと実行設定を確認しましたが、両方のマシンで同じです。 私のデスクトップには1920x1080のモニターがありますが、私のラップトップは1366x768しかありません。私の画面の解像度に依存するQtのフードの下で何らかの内部チェックが行われていますか?それは私が考えることができる唯一のものです。

+0

多分GLWidget.hの内部に何かありますか? –

+0

あなたはどのOSを使用していますか? –

+2

あなたの推測は正しいかもしれない、@pixelpusher。あなたができる簡単なテストがあります。あなたが渡しているサイズを2で割って、新しいアプリケーションがノートパソコンだけでなくデスクトップでも実行できるかどうかを確認してください。 – karlphillip

答えて

1

私は、ユーザーが

ウィンドウのサイズを変更することができるようにしたくない私は、なぜ聞いても? OpenGLを使って正確にこのサイズの画像を生成したいので、ウィンドウを固定サイズにしたいと思うかもしれませんか?もしそうなら、私はあなたに言う必要があります、それはそのように動作しません。 OpenGLの実装では、画面上に表示されるもの(ピクセルの所有権テスト)のみがレンダリングされます。ウィンドウの一部が見えない場合(あなたの場合、これはラップトップの場合になります)、それらのピクセルは単純にレンダリングされません。フレームバッファを読み出すと、それらのピクセルは未定義のままになります。

この問題に対処する適切な方法は、PBuffer、またはフレームバッファオブジェクト(FBO)のいずれかを使用しています。 FBOは使いやすいですが、Windowsでは広くサポートされていません(Windows上のIntelグラフィックスではFBOのサポートが貧弱です)。 FBOはすべてのLinux OpenGL実装(Mesa(Intelも含む)、ATI/AMD、NVidia)でサポートされています。 FBOとPBufferのチュートリアルがウェブにあります。

関連する問題