(これは実際にはgamedevからのクロスポストですが、皆さんも役立つかもしれないと思いました!)
編集:オーバーレイの意味について詳しく説明しました。少し眠った後、glTexImage2Dへのポインタとしてnullを使用しているため、glGenerateMipmapsの呼び出しは役に立たないことがわかりました。
OpenGL 3.3、Ubuntu 11.04、nVidiaドライバー280.13、GeForceGT240。
遅延シェーダーを作成していて、画面の下部にある小さなオーバーレイにGバッファーを表示したいと考えています。この場合のオーバーレイは、z検定がなく、テクスチャスクリーンで整列されたクワッドであり、最後にレンダリングされることを意味します。
フルウィンドウでGバッファ(FBOテクスチャ)を(一度に1つずつ)レンダリングすると、正しく表示されます。これらのオーバーレイにレンダリングすると、ゴミが発生します(静的干渉としてランダムなGPUメモリのように見えますが、実行ごとに異なり、場合によっては鮮明な画像になります)。
たとえばファイルから別のテクスチャを作成すると、オーバーレイにゴミが表示されないため、コードは問題ありません。誰かが理由を説明できますか?GバッファのテクスチャにglGenerateMipmapを使用しました。
これでは十分な情報ではないかもしれませんが、これから始めます。関連情報についてはお問い合わせください。問題はFBOレンダリングとミップマップに関連している可能性がありますか?確かに私のコードは予約されていない/初期化されていないメモリを表示したいのですが、理由はわかりません。
フルウィンドウの緑色の画像は、GPUメモリが太いためにGPUメモリを節約するための解像度(256 * 256)での、照明段階からの現在の結果です。また、マテリアルシェーダー(Gバッファーの生成)では、「out vec4fragment [3]」を使用しており、テクスチャはさまざまな内部形式になっています。それは問題になる可能性がありますか?
PS。ライトは(-30,0,0)と(30,0,0)にありますが、「より近い」ようです。それは精度の問題になる可能性がありますか?法線にはGL_RGBA16F、位置にはGL_RGBA32F、深さにはGL_DEPTH_COMPONENT24、アルベドにはGL_RGBAを使用します(はい、膨大な無駄ですが、後で最適化します)。