私はそれ以外のやり方を知っています。しかし、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-es Android
- 8. Android OpenGL ESテクスチャ半球
- 9. opengl es 2.0テクスチャ座標
- 10. iPhone OpenGL ESテクスチャ2Dマスキング
- 11. Android - OpenGL ES:三角形をテクスチャする方法
- 12. ステンシルで深度テクスチャを使用する方法、OpenGL ES 3.0
- 13. OpenGL ES 2.0動的テクスチャをロードする
- 14. `CVImageBufferRef`を` glTexImage2D`を使ってOpenGL ESテクスチャに変換する際のアーティファクトを取り除く方法は?
- 15. OpenGL ESのベクトル変換
- 16. OpenGLテクスチャをOpenCVマットに変換する
- 17. OpenGL ES 2.0のテクスチャが黒くなる
- 18. OpenGL ES 2 GPGPUテストのテクスチャとデータの抽出方法
- 19. iPhone OpenGL ES 2dの背景テクスチャ
- 20. OpenGL ES 3.0:テクスチャへのゼロコピーCPUレンダリング?
- 21. クワッド(三角形ストリップ)のテクスチャOpenGL ES 2.0
- 22. 逆さまのテクスチャ? | OpenGL-ES 2.0(アンドロイド)
- 23. OpenGL ESとOpenGL互換シェーダ
- 24. OpenGL ES 2.0でpngイメージを使ってキューブをテクスチャ化する方法は?
- 25. OpenGL ESで浮動小数点配列をテクスチャに渡す方法は?
- 26. AndroidでOpenGL ES 2.0でアップロードされたテクスチャをチェックする方法は?
- 27. RGBA32ピクセルをOpenGL ESテクスチャに直接保存する
- 28. OpenGL ES/Cocos2dのテクスチャを最適化するためのレシピ
- 29. OpenGL ES 2.0頂点変換アルゴリズム
- 30. OpenGL es 1.1変換回数が多い
を、これが可能になりました。 – akaru