問題タブ [wgl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - 単一のオブジェクトを視覚化するためにOpenGLシーンを適切に設定する方法
メッシュツールキット用の簡単なビジュアライザーを作成する必要があります。作業しているオブジェクトは常に[-1,1]^3ボックス(両端を含む)内にあるため、オブジェクトがユーザーに完全に表示されるようにする必要があります。また、ユーザーがオブジェクトの周りを「飛んでいる」ように、オブジェクトの周りでカメラを回転させる可能性も必要です。
それが私がこれをしている方法です:
Reshape関数は初期設定中に呼び出され、ビジュアライザーコントロールのサイズを変更するたびに、3の平方根よりも大きい角度と距離でPolarView関数が再描画ごとに呼び出されます(本当に重要ですか?)。このコードは、立方体や球体などの凸型オブジェクトでは正常に機能しますが、トーラスオブジェクトでは問題が発生するため(一部の面が他の面から見える)、深度テストに関するものだと思います。セットアップの何が問題になっていますか?スクリーンショット:
インターネットで検索したところ、近距離平面と遠距離平面のパラメーターに問題がある場合に、このような問題が発生する可能性があることがわかりました。私の場合、これらの正しい値は何ですか?私の描画手順は次のようになります。
私のPIXELFORMATDESCRIPTOR:
私はこれを回避するいくつかの方法を見つけました:
- 近くの飛行機と遠くの飛行機の値を入れ替える
- [OK]に設定
glDepthFunc
するGL_GREATER
と 、エラーが偶数個でもコードは正常に機能します。しかし、最初のエラーはどこにありますか?glClearDepth
0
opengl - WGL: ダブルバッファリングなし + マルチサンプリング = FAIL?
私は通常、これらの引数を使用してピクセル形式を作成しwglChoosePixelFormatARB()
ます (特に):
つまり、ダブル バッファリングと x4 マルチサンプリングです。これはうまくいきます。
しかし、ダブルバッファリングをオフにしようとすると:
への呼び出しがwglChoosePixelFormatARB()
失敗します (または、何も作成されなかったことを示します)
マルチサンプリングを効果的にオフにすると:
また元気に働いています。
非ダブルバッファピクセルフォーマットがマルチサンプリングで動作するのを妨げる固有のものはありますか?
ダブル バッファリングをオフにする理由は、制約のないフレーム レートを実現するためです。ダブル バッファリングを使用すると、フレーム レートは最大 60 FPS になります (このラップトップ LCD は 60 Hz で動作します)。しかし、ダブル バッファリングをオフにすると、最大 1500 FPS を得ることができます。ダブルバッファリングをオンにしてこれを達成する方法はありますか?
c++ - MFC/C++ で動作するように GLUT 呼び出しを変更する
OpenGL レンダリングに GLUT を使用するプログラムがあります。別のプログラム コンポーネントと連携できるように、MFC プロジェクト内に配置する必要があります。
私はこのチュートリアルに従いました: http://www.codeguru.com/cpp/gm/opengl/openfaq/article.php/c10975__1/Setting-Up-OpenGL-in-an-MFC-Control.htm
タイマーが起動したときに GLUT 表示コールバックであった関数を呼び出していますが、GLUT アイドル コールバックで発生する何かにレンダリングが依存しているため、機能していません。MFC プログラムで GLUT アイドル コールバックを呼び出す場所がわかりません。そのために作成する必要がある別のイベント ハンドラーはありますか? もしそうなら、どのイベントですか? それとも、私は何か他のことを完全に間違っていますか? 私は OpenGL にかなり精通していますが、これが MFC の最初の経験であるため、おそらくその側で誤りを犯しています。
お時間をいただきありがとうございます。ほんとうにありがとう!
winapi - Windows での OpenGL/Cuda 相互運用のセットアップ
Cuda 3.2 でいくつかの作業を行い、OpenGL でいくつかの作業を行う必要がある DLL を作成しています。OpenGL は、私の Cuda コードが読み込んで変更する必要があるいくつかのグレースケール イメージをレンダリングし、OpenGL にテクスチャとして返します。そのためには PBO を作成する必要があると思います。私は以前にいくつかの基本的な OpenGL の作業を行ったことがありますが、拡張機能を使用したことはありません。それが私の問題です。コード。私が試したサンプルはどれも機能しません (GTX470 である私の vid カードはそれをサポートすると確信しています)
具体的な質問:
1. nvidia opengl sdk をインストールしました。拡張機能にアクセスするには、glew.h と wglew.h を使用する必要がありますか?
2. 私の DLL には UI がありません。非表示のウィンドウを作成する必要がありますか?それとも、オフスクリーン レンダリング コンテキストを作成する簡単な方法はありますか?
3. GL_RED_8UI フォーマットを使用してグレースケール PBO を作成できますか? cuda と gl の両方がそれに満足するでしょうか? cuda プログラミング マニュアルの opengl 相互運用セクションを読んだところ、GL_RGBA_8UI は OpenGL 3.0 の機能であるため、ピクセル シェーダーでのみ使用できると書かれていましたが、それが 1 チャネル フォーマットに適用されるかどうかはわかりませんでした。1 チャンネルのフロートも私の目的には機能します。
4. これはかなり簡単にできると思っていましたが、本当に何百行ものコードが必要ですか?
編集:
HBITMAP にアタッチされた OpenGL コンテキストを作成するコードがあります。ビットマップ レンダリング コンテキストを作成してから、それに PBO をアタッチする必要がありますか? それとも、CPU メモリにもレンダリングすることで速度が低下しますか? 見えないウィンドウを作成し、それに PBO をアタッチする方がよいでしょうか? また、PBO のピクセル形式はウィンドウ/ビットマップと一致する必要がありますか? 寸法はどうですか?
ありがとう、
アレックス
c++ - 最小限のウィンドウレスOpenGLコンテキストの初期化
最小限のコードでウィンドウレスOpenGLコンテキストを初期化するにはどうすればよいですか?
ウィンドウレスコンテキストを作成するために使用できることをここで読みましたが、そのwglCreateContextAttribsARB
方法は説明されていませんか?
windows - MinGWでWGLを見つける
私はウィンドウを作成する適切な小さなプログラムをCで作成しました。ただし、OpenGLレンダリングコンテキストとさまざまな関数を追加するのに問題があります。
GetDC、ChoosePixelFormat、SetPixelFormat-私が理解しているように、すべてのwgl関数。これらはVisualC++に固有のものである可能性があると思いましたが、C ++のみに根本的に変更されていない限り、そうではないようです。MinGWと比較して、エラーの量は驚くべきものです。
WGLはどこにありますか?どうすればMinGWに追加できますか?
(わずかに関連するソースコードはここにあります:http://pastebin.com/eMWLqL6h)
windows - wglCreateContextAttribsARB がクラッシュする
私のアプリケーションでは、wglCreateContextAttribsARB を 128 回作成しようとするとクラッシュします。常に 128 回目で、常に同じ引数を渡し、常に 0x2095(ERROR_INVALID_VERSION_ARB) を返します。最初の 127 回は動作するという事実から、これが有効なバージョンであることはわかっています。
この関数呼び出しがこの特定の番号で失敗する理由はありますか?
opengl - MinGW の WGL バグ
MinGW の wgext.h に問題があります。Visual Studio のバージョンが機能していません (コンパイラが定義の欠落について叫びます)。
だから私はmesa-devを使ってMinGWでコンパイルしようとしました - そして私はバグを取得します
これを解決する方法はありますか?
macos - CGLFlushDrawable がバック バッファーに対して行っていることを特定する方法はありますか?
Appleのドキュメントによると、CGLFlushDrawable
またはそれと同等のCocoaflushBuffer
は、いくつかの異なる方法で動作する可能性があります。通常、ウィンドウ化されたアプリケーションの場合、バック バッファーの内容は、次のように可視バッファーにコピーされます。
CGLFlushDrawable
ダブル バッファリングされたコンテキストのバック バッファをフロント バッファにコピーします。
描画バッファの内容はそのまま残されていると思います (質問 1. を参照)。私が間違っていても、kCGLPFABackingStore
属性を に渡すことで保証できますCGLChoosePixelFormat
。
しかし、さらに読むと、状況によっては、コピーが実行されるのではなく、バッファーがスワップされる可能性があることがわかります。
バッキング ストア属性が false に設定されている場合、バッファはコピーではなく交換できます。これは、フルスクリーン モードの場合によく発生します。
また、これは述べています
フルスクリーン ウィンドウの上にコンテンツがない場合、Mac OS X は自動的にこのコンテキストのパフォーマンスを最適化しようとします。たとえば、アプリケーションがオブジェクトを呼び出す
flushBuffer
とNSOpenGLContext
、システムはバック バッファーの内容をフロント バッファーにコピーするのではなく、バッファーをスワップする場合があります。(...) システムはバッファーをコピーするのではなくスワップすることを選択する場合があるため、アプリケーションは を呼び出すたびにシーンを完全に再描画する必要がありますflushBuffer
。
そして、ここに私の質問があります:
- バック バッファがコピーされた場合、バッキング ストア属性がなくても内容が保持されることが保証されますか?
- バッファがスワップされた場合、バック バッファはフロント バッファの内容を取得しますか、それとも定義されていないため、ランダムなものを取得することもできますか?
- システムはバッファのスワップを選択する場合がありますが、実際にスワップを選択したかどうかを判断する方法はあり ますか?
- これらの場合のいずれかで、バッファが保持されているか、フロントバッファと交換されているか、またはめちゃくちゃになったかを判断する方法はありますか?
また、WGL、GLX、または EGL でどのように作成されているかについての情報もいただければ幸いです。特に質問 4 の回答が必要です。