6

glDepthMask(GL_FALSE)フレームのレンダリング中に、デプスバッファの書き込みを無効にすることがあります。これは一部のGPU(Motorola DroidのPowerVRなど)では完全に正常に機能しますが、たとえばAdrenoGPUを搭載したHTCEVOでは、フレームバッファーが完全にゴミになってしまいます(どこかにレンダリングしたメッシュの痕跡が表示されますが、画面全体がほとんどゴミ箱に入れられています)。

glDepthMaskを常にtrueにすると、すべてが正常に機能します。

アルファレンダリングの一部でglDepthMaskをオフにする必要があります。デプスライトをオフにすると、フレームバッファが破壊される原因は何ですか?

4

3 に答える 3

8

問題は、 をglDepthMask呼び出すときに true である必要があることでしたglClearDepth。これは明らかに Adreno GPU にのみ適用され、PowerVR GPU には適用されません。

于 2011-03-17T22:59:31.673 に答える
1

これが役立つかどうかはわかりませんが、特に glDepthMask を無効にする前に、深度バッファーをクリアする必要があるかどうか疑問に思います。glDepthMask は深度テストではなく、書き込みのみを有効/無効にすると思います。おそらく、GL の実装は、以前のレンダー パスからの古い深度バッファー情報に対してまだテストを行っているため、画面の一部にしか描画されていない可能性があります。それからそれはゴミ箱に見えます。一部の実装では深度バッファがクリアされる場合がありますが、そうでない場合もありますか? この提案が完全に的を外している場合は、無視してください。

とにかく、それが少しでも役立つことを願っています。

于 2011-03-02T05:22:18.983 に答える
0

iPhone4/iOS シミュレーター。glClear の前に glDepthMask を true に設定しないと、レンダリングが台無しになります。私はこの問題に 2 日間費やし、フレームバッファをディスクにダンプし、フレーム全体のトレースを調査し、コードに足を踏み入れました...これだけが機能しました。

気にしない。私は愚かだ。深度マスク = false で glClear(COLOR | DEPTH) を実行していたため、深度バッファはまったくクリアされませんでした。私の最初の返信は、丸一日のデバッグが原因でした :/

于 2013-06-11T17:04:11.233 に答える