3

次のコードは、MacBookなどのIntel統合ビデオカードのバックバッファにデータを書き込みません。iMacなどのATIカードでは、バックバッファに描画されます。幅と高さは正しく(そして800x600バッファー)、m_PixelBufferは0xAA00AA00で正しく満たされています。

これまでの私の最善の推測は、glWindowPosを設定する必要があることには何か問題があるということです。現在、それ(またはラスター位置)を設定していません。GL_CURRENT_RASTER_POSITIONを取得すると、ATIカードのデフォルトが0,0,0,0で、Intelが0,0,0,1であることに気付きました。ATIカードのラスター位置を0,0,0,1に設定すると、Intelカードと同じ結果が得られ、バックバッファーには何も描画されません。欠落している変換状態はありますか?これは2Dアプリケーションであるため、ビュー変換は非常に単純なglOrthoです。

glDrawPixels(GetBufferWidth(), GetBufferHeight(), GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, m_PixelBuffer);

私が提供できるこれ以上の情報は、お問い合わせください。私はほとんどOpenGLとMacの初心者なので、十分な情報を提供しているかどうかはわかりません。

4

4 に答える 4

2

Intel の OpenGL 実装には常に問題がありましたが、今回はそれが問題であるかどうかはわかりません。バイトオーダーの問題が発生していると思います。これを読んで、パッキングと色の順序のさまざまな定数を自由に試してみてください。

http://developer.apple.com/documentation/MacOSX/Conceptual/universal_binary/universal_binary_tips/chapter_5_section_25.html

それが OSX ガイドであることは知っています。おそらく、他のプラットフォーム用の他のサイトで同様の OpenGL 記事を見つけることができます。これは適用できるはずです。

于 2008-08-25T11:12:06.267 に答える
1

Intel の OpenGL 実装には常に問題がありました

これは私が心配していることの一種ですが、彼らが glDrawPixels のような基本的なものを台無しにするだろうとは信じがたいです。また、ラスター位置ベクトルを変更することで問題を「複製」できるので、それは私のせいだと思います、そして私は基本的な何かが欠けています。

バイトオーダーの問題が発生していると思います

それが私の最初の傾向であり、別の方法で梱包しようとしましたが、結果はありませんでした. また、スウィズルした場合に使用可能なアルファを表す値でバッファーをパックしようとしましたが、結果はありませんでした。これが、私がラスター pos ツリーを大騒ぎしている理由ですが、正直なところ、まだ 100% 確実ではありません。違いがある場合は、Intel Mac のみをターゲットにしていることに注意してください。

リンクをありがとう、それは良い読み物であり、将来の参考のために隠しておくのに良い. アップモッドしたいのですが、あと3回レップポイントを獲得するまでできません:)

于 2008-08-25T17:40:46.800 に答える
1

デフォルトのラスター位置は (0,0,0,1) である必要がありますが、リセットして確認することができます。

glDrawPixels() を呼び出す直前に、試してください

GLint valid;
glGet(GL_CURRENT_RASTER_POSITION_VALID, &valid);

これにより、現在のラスター位置が有効かどうかがわかります。そうであれば、これはあなたの問題ではありません。

于 2008-09-30T18:57:06.860 に答える
1

glDrawPixelsのような基本的な機能が機能しない可能性はほとんどありません。フォーマットにGL_RGBまたはGL_RGBA 、タイプにGL_UNSIGNED_BYTEまたはGL_FLOATなどの非常に単純な設定を試しましたか? そうでない場合は、問題を再現する最小のプログラムを教えていただけませんか?

于 2008-08-27T04:55:03.223 に答える