私はそれ以外のやり方を知っています。しかし、CPUメモリにコピーすることなく、テクスチャからCIImageを作成するにはどうすればよいですか? [CIImage imageWithData]? CVOpenGLESTextureCache?OpenGL ESのテクスチャをCIImageに変換する方法
答えて
残念ながら、私はglReadPixels()
を使用してピクセルデータを読み取らなければならないという方法はないとは思いません。 CIImage(data、CGImageRef、CVPixelBufferRef)の入力はすべてCPU側ですので、CIImageに渡すための高速パスはありません。 glReadPixels()
を使用して、生のRGBAデータをテクスチャから引き出し、-initWithData:options:
とのピクセル形式を使用してCIImageに送信することをお勧めします。 (アップデート:3/14/2012)iOS 5.0では、新しいテクスチャキャッシュを使用してOpenGL ESフレームデータを取得する方法がより簡単になりました。私はこれを詳細にthis answerで説明します。
しかし、あなたが望むものを達成するための別の方法があるかもしれません。単に画面に出力するためにテクスチャにフィルタを適用する場合は、my GPUImage frameworkを使用して処理することができます。すでにOpenGL ES 2.0をレンダリングパイプラインのコアとして使用しています。テクスチャは、イメージやビデオのフレームがあるフィルタから次のフィルタに渡される方法です。私のベンチマークでは、Core Imageよりもはるかに高速です。
テクスチャを入力としてここに入力すると、CPUに触れる必要がなくなります。 OpenGL ESから生のテクスチャを取得するためのストッククラスはまだありませんが、既存のGPUImageOutputサブクラスのコードを変更して、これをソースとしてかなり簡単に使用することができます。その後、フィルターを連鎖させて、出力を画面または静止画に向けることができます。ある時点で、この種のデータソース用のクラスを追加しますが、プロジェクトはまだかなり新しいです。
ありがとう、Brad。 CVOpenGLESTextureCacheで作業しましたか?他の方法がない場合は、glReadPixelsの代わりになるはずです。 OS Xについて私の質問にちょうど方法があります.AppleがGPUにどのように注力しているかによって、方法があるはずです... – akaru
@akaru - 私が何かが欠けていない限り、CVOpenGLESTextureCacheは単方向アップロード用ですテクスチャを素早く作成できます。私は、OpenGL ESテクスチャから何かを読み返すのに使うことはできないと思います。ヘッダーやアップルのプレゼンテーションでこれを行うことについての言及はありませんでした。私は、iOS上で 'glReadPixels()'がついていると思います。 –
@akaru - これについてのあなたの以前の質問を見つけることができませんが、テクスチャキャッシュが単方向であることについて間違っていました。私はちょうど彼らがビデオをエンコードするように働いていて、 'glReadPixels()'より速いです:http://stackoverflow.com/a/9704392/19679 –
あなたはこれらの有用を見つけるかもしれない:一般的に
- https://developer.apple.com/library/ios/#samplecode/RosyWriter/Introduction/Intro.html
- https://developer.apple.com/library/ios/#samplecode/GLCameraRipple/Listings/GLCameraRipple_RippleViewController_m.html
は、私は、画像データがCPUにGPUからコピーする必要があると思います。しかし、上記のiOSの機能は、これをより簡単かつ効率的にするかもしれません。
のiOS 6のとおり、あなたは組み込みのこのような状況のためのinitメソッドを使用することができますが:
initWithTexture:size:flipped:colorSpace:
は、ドキュメントを参照してください:iOSの6のためだけ更新 http://developer.apple.com/library/ios/#DOCUMENTATION/GraphicsImaging/Reference/QuartzCoreFramework/Classes/CIImage_Class/Reference/Reference.html
- 1. iOS上のOpenGL ES 2.0テクスチャにCIImageをレンダリング
- 2. OpenGL ES 2.0テクスチャ
- 3. opengl es 2.0テクスチャ正しい方法
- 4. Android OpenGL ES 2.0テクスチャ
- 5. OpenGL ES 2.0 - テクスチャをフレームバッファに効率的にコピーする方法
- 6. opengl esテクスチャを無効にする
- 7. OpenGLテクスチャをOpenCVマットに変換する
- 8. Android - OpenGL ES:三角形をテクスチャする方法
- 9. iPhone OpenGL ESテクスチャ2Dマスキング
- 10. opengl es 2.0テクスチャ座標
- 11. 白いテクスチャOpengl-es Android
- 12. OpenGL ESのベクトル変換
- 13. OpenGL ES 2.0動的テクスチャをロードする
- 14. OpenGL ES 2.0のテクスチャが黒くなる
- 15. OpenGL ES 2 GPGPUテストのテクスチャとデータの抽出方法
- 16. iPhone OpenGL ES 2dの背景テクスチャ
- 17. クワッド(三角形ストリップ)のテクスチャOpenGL ES 2.0
- 18. 逆さまのテクスチャ? | OpenGL-ES 2.0(アンドロイド)
- 19. OpenGL ESとOpenGL互換シェーダ
- 20. OpenGL ES 2.0でpngイメージを使ってキューブをテクスチャ化する方法は?
- 21. RGBA32ピクセルをOpenGL ESテクスチャに直接保存する
- 22. OpenGL ES 2.0頂点変換アルゴリズム
- 23. OpenGL es 1.1変換回数が多い
- 24. C++ OpenGL ES 2.0マトリックス変換 - 初心者
- 25. Android OpenGL ES 2.0トライアングルサンプルをポイントに変換するには
- 26. ppmファイルをOpenGLテクスチャに変換するには?
- 27. OpenGL ES/Cocos2dのテクスチャを最適化するためのレシピ
- 28. OpenGL ES 1.1 2D(iPhone):テクスチャ/四角形のオブジェクトのサイズを変更する
- 29. OpenGL esシェーダを使用してYUVをRGBに変換する
- 30. 2D OpenGL ESシーンをパンする方法
を、これが可能になりました。 – akaru