FBO で浮動小数点テクスチャにレンダリングし、CPU 上のそのテクスチャのすべてのピクセルの平均値が必要です。したがって、ミップマッピングを使用して平均を計算して 1x1 ミップマップにするのは非常に便利だと思いました。CPU の計算時間を節約し、1024x1024 ピクセルの代わりに 1 ピクセルを CPU に転送するだけでよいからです。
だから私はこの行を使用します:
glGetTexImage(GL_TEXTURE_2D, variableHighestMipMapLevel, GL_RGBA, GL_FLOAT, fPixel);
ただし、常に 1x1 ピクセルのサイズである最高のミップマップ レベルのみを具体的に要求しているにもかかわらず、そのコード行が完了するまでにかかる時間は、テクスチャのレベル 0 ミップマップのサイズによって異なります。これは私には意味がありません。たとえば、私のテストでは、この行は 1024x1024 のベース テクスチャの場合、32x32 のベース テクスチャの場合よりも約 12 倍長くかかります。
fPixel の結果は正しく、必要なピクセルのみが含まれていますが、時間はテクスチャ セット全体が転送されたことを明確に示しています。これは、CPU への転送が明らかにボトルネックであるため、私の主な理由を殺します。
私は Win7 と opengl を使用し、これを ATI Radeon HD 4800 と GeForce 8800 GTS でテストしました。
誰もその問題について何か知っていますか、または最高のミマップの1ピクセルのみをCPUに転送するスマートな方法を持っていますか?