問題タブ [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.
windows - Windows DCとGLRCは何に対応していますか?
DCはWindowsで何に対応しますか?HWNDまたはHMONITORからHDCを入手できることは知っています。これは、ウィンドウのDCがモニターのDCのエイリアスまたはプロキシであることを意味しますか?Windowsでは、ウィンドウクラスに独自のDCが必要であると言うことができるため、同じDCではないように見えますが、WindowsAPIはDC間の親子関係もサポートしているようです。モニターのDCが親DCの1つであることがわかりますか?
ウィンドウが複数のモニターにまたがる場合はどうなりますか?Windows APIは、ウィンドウから単一のHDCを取得し、HDCから単一のHGLRCを取得することのみをサポートしているようです。OpenGLは、フルスクリーンウィンドウが複数のモニターにまたがることをサポートしていないため、これを実現するには複数のウィンドウが必要であることを読みました。
SLI / Crossfireシステムは単一のGLRCになりますか?
GLRCは、グラフィックシステムに最もよく似ているように思えます。GLRCは、単一のグラフィックシステムを表します。DCは出力を表します。GLRCは、グラフィックシステムに接続された出力に関連付けられている任意のDCと、それらのDCの任意の子DCに描画できます。また、複数のモニターと複数のグラフィックカードを使用して、それぞれをペアにして、各GLRCを各DCとペアにすることもできます。
訂正または確認しますか?
opengl - openglでクリーンなxlibを使用してシェーダーを有効にするにはどうすればよいですか
私は OpenGl を数年間見ていませんでしたが、今は新しいスタイルで何かをコーディングしようとしていますが、単純な三角形を描くのに問題があります。まず第一に、良い例と「サポートライブラリ」を使用しないチュートリアルを見つけることができませんが、それはポイントではありません。以下のコードは(私が思うに)赤い三角形を描くべきですが、これの代わりに白い三角形を描いています。私は間違っていますか?
opengl - QOpenGLContext から OpenGL (WGL) コンテキストを取得する
QQuickView ウィンドウから OpenGL コンテキスト (HGLRC) を取得しようとしています。Qt 以外のライブラリに渡す必要があります。QOpenGLContext を簡単に取得できます。
Qt クラスから OpenGL コンテキストを取得するにはどうすればよいですか? (QOpenGLContext)
c++ - wglMakeCurrent が x64 で失敗する
x64 プラットフォームで OpenGL ウィンドウを作成しようとしています。初期化コードは x86/Win32 では機能しますが、x64 では "wglMakeCurrent" で失敗します。問題は、pixelformat の設定または DC の取得 (getDC()) にあると思います。PIXELFORMATDESCRIPTOR のさまざまな設定を既に試しましたが (OpenGL の x64 実装は、使用している設定をサポートしていないと想定しています)、そこでは成功しませんでした。デバッガーは、hdc が破損している可能性があることを示します (0xfffffffff10102e0 のようなもの) - しかし、wglCreateContext は有効な外観の hglrc (つまり、0x0000000000010000) を返します。しかし、値をオンザフライで hdc から 0x0000000010102e0 に変更しても (wglCreateContext の呼び出し前にデバッガーを使用して) wglMakeCurrent は失敗します。
私は、Visual Studio 12 RC 1 を使用して Windows 8 を使用しています。それとも、x64 OpenGL 実装に何らかの制限があるのでしょうか?
windows - wglCreateContext は、多くの OpenGL コンテキストで「エラーなし」と言う GetLastError で NULL を返します
私はいくつかの「プラグイン」を持っています.DLLはすべてGUIを持ち、現在はOpenGLベースです。すべて正常に動作しますが、それらの多くを開くと問題が発生します (以下)...かなり古いが、まだ妥当な ATI Radeon HD 4600 を使用しているメインの開発マシンで発生します (最新のドライバーを使用し、まだレガシーとマークされています)。しかし、統合された Intel HD も NVidia のものも搭載していない最新のラップトップではありません。
2 つのことが起こりえますが、ランダムに見えます:
A) wglCreateContext は NULL を返しますが、GetLastError は問題ないと言っています! この場合、CPU を使用したエミュレーションによるバックアップ計画があります。遅いですが、動作します...
不幸にも...
B) "aticfx64.dll" がアクセス違反でクラッシュし、0xffffffffffffffff が読み取られます。どうやらそれはATIドライバーですが、いずれにせよ、これを回避する方法はありません...
何か案は?つまり、非常に多くのウィンドウが開いているのは一般的ではありませんが、それでも処理できるはずですよね? 私の主な懸念は、これに対処するための制限または方法があるかどうかです。これが2つのウィンドウで発生する可能性があることを少し心配しています...それは悪いことです。
opengl - opengl32.dll と gdi32.dll で関数が重複しているのはなぜですか?
次の関数は、opengl32.dll と gdi32.dll の間で重複しています。
私は長い間答えを探してきましたが、それがなぜなのか、正確な違いは何かという具体的な情報を誰も持っていないようです.
OpenGL FAQのセクション 5.190 は、これらの関数が機能的に同一ではないことを示唆しています。
OpenGL が正しく動作するようにするには、相当する wgl の wglChoosePixelformat、wglDescribePixelformat、wglGetPixelformat、wglSetPixelformat、および wglSwapBuffers の代わりに、ChoosePixelformat、DescribePixelformat、GetPixelformat、SetPixelformat、および SwapBuffers を使用します。それ以外の場合はすべて、可能な場合は wgl 関数を使用します。5 つの wgl 関数の使用は、OpenGL ドライバーにランタイム リンクする開発者にとってのみ重要です。
「OpenGL ドライバーへのランタイム リンク」は、opengl32.dll をバイパスして ICD を直接ロードすることを意味しますか?
"Mesa3D does not like my context creation code"という名前のスタック オーバーフロー スレッドは、これを強化しているようです。
C# では失敗するがマネージ C++ では失敗する wglCreateContextという名前の別のスタック オーバーフロー スレッドは、GDI 関数を使用するときに gdi32.dll の前に opengl32.dll をロードする必要があることを示唆しています。
私自身のテストでは、これらの関数の opengl32/wgl バージョンが呼び出されると、一部のシステム (Nvidia、ただし Intel または Parallels VM ではない)で「エラー: 2000」が発生することが示されています。GDI バージョンに変更すると、この問題は解消されますが、LoadLibrary("opengl32.dll") を使用しても何も変わらないようです。
これらの WGL 関数と GDI 関数の違いを調査した人はいますか? なんらかの違いがあることは明らかです。どのバージョンをどの状況で使用する必要があるか、間違ったバージョンを使用した場合の潜在的な落とし穴は何かを理解しようとしています。
編集: wayback machineは、ICD の直接読み込みがどのように機能するかを説明する Web ページを表示します。これは、2D アクセラレータと 3D アクセラレータが別々の ICD (通常の opengl32.dll+ICD メカニズムでは処理できない) を備えた 2 つの異なるハードウェアであった Voodoo 1/2 時代に明らかに必要でした。これが直接のICDです。
ただし、以下の投稿は、AMD ICD が wgl バリアントをエクスポートしないことを示しており、この考えと矛盾しています。
この知識の鍵を握っている誰かまたはどこかがそこにいるに違いありません。
編集 2: 上記の Web ページから、これまでで最も明確な提案が得られました。
「したがって、opengl32.dll という名前の OpenGL ドライバーを使用している場合は 、GDI 関数を呼び出す必要があります。opengl32.dll という名前のドライバーを使用していない場合は、GDI 関数を呼び出してはなりません。」
しかし、これは、AMD ICD が wgl 関数をエクスポートしないという事実とどのように適合するのでしょうか?
編集 2: ここで見られるように、明らかに Mesa3d は WGL シンボルをエクスポートします: http://cgit.freedesktop.org/mesa/mesa/tree/src/mesa/drivers/windows/gdi
Mesa3d は ICD として使用することを想定していないため、これは理にかなっています。これは、上にリンクされた Mesa3d スレッドのパターンに適合します。これらの呼び出しは Microsoft の opengl32.dll を介してルーティングされていないため、gdi 関数は失敗しますが、Mesa3d は wgl* 関数をエクスポートしているため、これらは引き続き機能します。ただし、これは Mesa3d に固有のものです。AMD の ICD を直接使用しようとすると、その方法は失敗します。
opengl - OpenGL の WGL_ARB pbuffer に問題があります
WLG_ARB pbufer でオフスクリーン レンダリングを実行しようとしましたが、wglCreatePbufferARB() で問題が発生しました。常に NULL を返します。これがコードの一部です。
前述のとおり、wglCreatePbufferARB は NULL を返すため、wglGetBufferDCARB を使用できません。wglGetExtensionsStringARB や wglChoosePixelformetARB など、他の WGL_ARB 拡張関数は非常にうまく機能します。また、拡張子は非常に通常の文字列で、"WGL_ARB_extensions_string..." で始まります。wglCreatePbufferARB で使用されるすべてのパラメーターは、hDC を含めて NULL ではありませんでした。では、wglCreatePbufferARB がまだ NULL を返し、意図したとおりに動作しないのはなぜでしょうか?++ps GetLastError を呼び出したところ、ERROR_INVALID_DATA が返されました。attribListのせいなのですが、どうなんでしょう?GetLastError の呼び出しを推奨していただきありがとうございます。
++ps私はこれを解決しました。今、これは非常にうまく機能します。ありがとうございました!
windows - wglShareLists は推移的ですか? 各コンテキストを他のコンテキストと共有する必要がありますか?
たとえば、レンダー コンテキスト 'A' をレンダー コンテキスト 'B' と共有し、レンダー コンテキスト 'C' を 'A' と共有すると、'C' は 'B' と共有されますか?
opengl - WGL 拡張機能と virtualbox
現在、VirtualBox 4.3.8 で実行されている WinXP 仮想マシンで古い Rendermonkey 1.82 を使用しようとしています。悲しいことに、OpenGL では機能せず、WGL 拡張機能を見つけることができません (正確なエラー メッセージは次のとおりです:「WGL PBuffer 拡張機能が検出されませんでした - ドライバーを更新してください。OpenGL レンダリングを続行できません。」)...プログラムは DirectX を使用して動作します。OpenGL で使用するために必要です
この問題の解決策/回避策があることをご存知ですか?
次のことも考慮してください: - DirectX ベースの 3D アクセラレーションは正常に動作します - 他の OpenGL ベースのプログラムは正常に動作します - 3D アクセラレーションは vm 設定で有効になっています - 更新された GuestAddition がインストールされ、動作しています