glReadBuffer / glReadPixelsを使用すると、Intelカードで黒い画像が返されるのはなぜですか?


8

私はこのコードを持っています

glReadBuffer( GL_FRONT );
glReadPixels( 0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, buffer ); 

これは、私が試したすべてのNvidiaおよびAMD GPUで完全に機能しますが、試したほとんどすべてのIntelビルトインビデオでは失敗します。それは実際には非常に古い945GMEで動作しますが、他のすべてでは失敗します。スクリーンショットを取得する代わりに、実際には黒い画面が表示されます。

それが役に立てば、私はDoom3エンジンを使用しており、そのコードは組み込みのスクリーンキャプチャコードから派生しています。ちなみに、元のゲームでもインテルデバイスでの画面キャプチャはできません。私の推測では、彼らは標準を正しく実装していません。これの回避策はありますか?


1
失敗したインテルの内蔵ビデオチップセットの具体的な例をいくつか教えていただけますか?同じことを話していると確信しているからです。(ちなみに、私のコードはあなたのコードと非常によく似ています)
Trevor Powell、

私はIntel 945,965、GMA HDを使用していましたが、どちらも機能しませんでした。彼らはいくつかのインスピロン1525にあり、別のインスピロン1764にありました。動作したのは、Acer Aspire One 110Lの非常に古いIntel 950でした。修正できましたか?
cloudraven

3
GL_BACKバッファから読み取る必要があるのでしょうか?OpenGLのマンページには、これがダブルバッファモードのデフォルトであると記載されています。しかし、参考までに、上記のコード(GL_FRONTまたはGL_BACKを使用)はIntel HDカードで機能しました。
QuasarDonkey 2012年

明日やってみます。奇妙なことですが、これは未定義の動作ではないでしょうか?まあ、私はそれをインテルカードでのみ発生させることができます。
cloudraven 2012年

Cloudraven、ReadPixelsを呼び出す前にバックバッファーがクリアされる可能性のあるケースがないか、tr_backend.cppからRB_ExecuteBackEndCommandsを確認します。
2012年

回答:


4

インテルのグラフィックスでは、これまで常にフロントバッファーからの読み取りまたはフロントバッファーへの描画に問題がありました。私がIntelで従う良い経験則はこれです-D3Dでそれを行うことができない場合、OpenGLでそれを試みようとしないでください。たとえ仕様があなたができるはずであると言っていても、D3Dはそうではありません。この方法でフロントバッファへのアクセスを許可するには、代わりにGL_BACKを使用してください。


ええ、私はGL_BACKを使用したいと思いますが、GL_FRONTを使用します。GL_BACKが機能しないというだけのことです。面白いことに、GL_FRONTは機能しているようですが、十分にテストしていません。
cloudraven
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.