OpenGL テクスチャにCore Video テクスチャ キャッシュを使用しています。縮小の場合、そのようなテクスチャのレンダリングに問題があります。パラメータ GL_TEXTURE_MIN_FILTER は効果がありません: 縮小のための補間は常に GL_TEXTURE_MAG_FILTER と同じです。興味深いことに、CVPixelBufferCreateWithBytes 関数を使用してピクセル バッファ オブジェクトを作成すると、すべてが正常に機能します。CVPixelBufferCreate を使用すると問題が発生します。
環境:
- iOS7
- OpenGL ES 2.0
- iPadミニ、iPad3、iPad4。
この問題を示す簡単なアプリケーションを開発しました: https://github.com/Gubarev/iOS-CVTextureCache。デモ アプリケーションは、次の 3 つのモードでチェッカーボード (セルのサイズは 1x1) テクスチャをレンダリングできます。
- 通常の OpenGL テクスチャ (OK)。
- Core Video テクスチャ、CVPixelBufferCreate で作成されたピクセル バッファ (問題)。
- Core Video テクスチャ、CVPixelBufferCreateWithBytes で作成されたピクセル バッファ (ok)。
テクスチャは、わずかに縮小して 2 回レンダリングされます (テクスチャよりも小さい OpenGL ビューポートを使用して達成されます)。
- 縮小フィルター GL_NEAREST、拡大フィルター GL_NEAREST でレンダリングされた左の画像。
- 縮小フィルター GL_LINEAR、拡大フィルター GL_NEAREST でレンダリングされた右の画像。
以下の画像は、通常の OpenGL テクスチャの場合の適切な縮小を示しています。縮小フィルターの設定が有効になっていることがはっきりとわかります。「CVPixelBufferCreateWithBytes」アプローチを使用すると、同じ結果が得られます。この問題は、「CVPixelBufferCreate」アプローチの場合に発生します。両方の画像は、拡大フィルター (特に GL_NEAREST) の設定で縮小されます。