13

Macで開発しているときに、アプリケーションでglfwを使用することを検討していました

色付きの背景に三角形をレンダリングする非常に単純なプログラムの作成に成功した後、ウィンドウのサイズを変更すると、フレームバッファのサイズ変更が原因であると思われるように、シーンの再レンダリングにかなりの時間がかかることに気付きました。

これは、NSOpenGLView で実験を繰り返している場合には当てはまりません。高価なサイズ変更を避けるために、開始時により大きなフレームバッファサイズを使用するようglfwにヒントを与える方法はありますか?

GLFW3を使用しています。

Retina ディスプレイで高 DPI を有効にする方法も教えてください。それに関するドキュメントは見つかりませんでしたが、バージョン 3 でサポートされています。

4

1 に答える 1

11

より大きなフレームバッファの取得

&glfwCreateWindow()に大きな値を指定して呼び出すことで、大きな初期フレーム バッファを取得し、すぐに必要な実際の初期ウィンドウ サイズを使用して小さいウィンドウの表示に切り替えます。widthheightglfwSetWindowSize()

または、次のように、独自のフレームバッファ サイズのコールバック関数を使用して登録 glfwSetFramebufferSizeCallback()し、必要に応じてフレームバッファを大きなサイズに設定します。

void custom_fbsize_callback(GLFWwindow* window, int width, int height)
{
    /* use system width,height */
    /* glViewport(0, 0, width, height); */

    /* use custom width,height */
    glViewport(0, 0, <CUSTOM_WIDTH>, <CUSTOM_HEIGHT>);
}

更新:ウィンドウ
サイズ変更 (およびウィンドウのドラッグ) 操作中に見られるレンダー パイプラインの停止は、ウィンドウ マネージャーに実装されているブロック動作が原因です。

アプリでこれを軽減するには、ウィンドウ メッセージのハンドラー関数をインストールし、メイン アプリ (GUI) スレッドから独立した別のスレッドでレンダリング パイプラインを実行する必要があります。


高 DPI サポート

GLFWのドキュメントには次のように書かれています:

GLFW は、Windows と OS X の両方で高 DPI モニターをサポートするようになり、他の UI 要素が拡大されるフル解像度のフレームバッファーを Windows に提供します。これを実現するために、glfwGetFramebufferSize()glfwSetFramebufferSizeCallback()が追加されました。これらはピクセルで動作しますが、残りの GLFW API は画面座標で動作します。

私の知る限り、それはドキュメントの高DPIに関するほとんどすべてのようです。

コードを調べると、Windows ではglfw が にフックし、 platformInit 中にそれSetProcessDPIAware()呼び出すことがわかります。現在、Mac で高 DPI をサポートする同様のコードを見つけることができません。

于 2013-07-25T11:00:51.597 に答える