問題タブ [glreadpixels]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
7376 参照

ios - ピクセル形式、CVPixelBufferRefs および glReadPixels

glReadPixelsにデータを読み込むために使用していCVPixelBufferRefます。CVPixelBufferRefへの入力としてを使用しAVAssetWriterます。残念ながら、ピクセル形式が一致していないようです。

ARGB形式のピクセルデータが必要なときに、 RGBA形式glReadPixelsのピクセルデータを返すと思います。RGBAARGBに変換する最良の方法は何ですか?AVAssetWriter

これが私がこれまでに試したことです:

  • argb = (rgba >> 8) | 行に沿ったビット操作。(rgba << 24)
  • CGImageRefaを中間ステップとして使用する

CVPixelBufferRef が添え字をサポートしていないように見えるため、ビット操作は機能しませんでした。中間ステップは機能しますCGImageRefが、パフォーマンスに影響を与える可能性のある余分な 50 行のコードは避けたいと思います。

0 投票する
1 に答える
5708 参照

android - glReadPixels 遅すぎて使えない

の方法 glReadPixelsで定期的にスナップショットを撮るために使用しています。アプリの要件に従ってデータを保存し続けるために、定期的にこのスナップショットを作成する必要があります。drawFrameGLSurfaceView.Renderer

ただしglReadPixels、パフォーマンスは非常に遅く、ラグが発生します。メソッドの使用方法は次のとおりです。

使用する代替手段はありますglReadPixelsか? ラグを発生させずに画像を保存するにはどうすればよいですか?

0 投票する
1 に答える
1724 参照

android - Android は glreadpixels よりも優れた方法をサポートしていますか?

Androidゲームを作っています(andengineを使用) ゲームのプレイ画面を録画する必要があります。これはプロモーションビデオを作るためのものではなく、ゲームプレイヤーが自分のゲームプレイをレビューするためのものです。私のアプリはそれ自体でビデオを録画する必要があります。そのため、市場で入手可能な録音アプリを使用してこの問題を解決することはできません。私はすでに以下のコードをチェックしました。

http://code.google.com/p/andengineexamples/source/browse/src/org/anddev/andengine/examples/ScreenCaptureExample.java?spec=svn66d3057f672175a8a21f9d06e7a045942331f65c&r=66d3057f672175a8a21f9d06e7a045942331f6

それは非常にうまく機能します..しかし、私は1つのスクリーンショットではなく、ゲームプレイのビデオを記録したい.

スムーズな再生には少なくとも 24 fps が必要ですが、 glreadpixels を使用すると、xoom デバイスで 5 fps を取得できます。この最適化問題を解決するために、さまざまな Web サイトを検索しました。ほとんどの人は glreadplxels はビデオを録画するには遅すぎると言っています。

http://www.gamedev.net/topic/473794-glreadpixel-takes-tooooo-much-time/

glreadpixel の代わりに glcopyteximage2d を推奨しています。glcopyteximage2d は glreadpixels よりもはるかに高速であるためです。しかし、andengineでglcopyteximage2dを使用する方法が見つかりません。Android opengl ESはglcopyteximage2dをサポートしていないと誰かが言っています。

滑らかなビデオを記録する別の方法があるかもしれません。Android端末のフレームバッファを読み込みます。この方法を使用して市場に出回っている録音アプリのほとんど。ただし、これらのアプリには、フレームバッファを取得するためのルート権限が必要です。Android が、ジンジャーブレッドの後に suface_flinger からのキャプチャ画面をサポートするというニュースを読みました。

しかし、ルート権限なしでフレームバッファを使用する方法がわかりません。T_T

これらは私の推測の解決策です。

  1. glreadpixels よりも高速な別の opengl API を使用してください。

  2. 一部のAndroid APIがルート権限なしでフレームバッファを取得できることがわかりました。(android SURFACE_FLINGER にアクセスできるかも??)

  3. 別のオフスクリーン テクスチャを描画して、ビデオを録画します。

しかし、これらのメソッドを実装する方法がわかりません。どのアプローチが正しいですか? Android用のビデオを録画するサンプルコードはありますか? この問題を解決するのを手伝ってください。他の方法を知っていれば、それは役に立ちます。

どんな助けでも大歓迎です

0 投票する
1 に答える
371 参照

opengl-es - iOS 5 の SMS 通知により glreadpixels がクラッシュする

私たちのアプリは glreadpixels を使用して、すべてのフレームで画面をキャプチャします。iOS 5 デバイスでは、テキスト メッセージ (またはその他の通知だと思います) を受信すると、glreadpixels通話中にアプリがクラッシュします。

クラッシュは、新しいスタイルの通知 (上から下にスライドしてすぐに消える通知) を使用する iOS 5 でのみ発生します。iOS 4 では、古いUIAlertViewスタイルの通知が正常に機能します。

具体的には、 を呼び出すとエラーがglReadPixels()スローされEXEC_BAD_ACCESSます。

具体的な呼び方は

どこ

(アプリは横向きモードのみ)

また、読み取りコマンドを発行する前にフレーム バッファのステータスをチェックしようとしましglCheckFramebufferStatus(GL_FRAMEBUFFER)GL_FRAMEBUFFER_COMPLETE

これは、新しい通知ポップアップの実装方法のバグですか? どうすれば回避できますか?通知が表示されようとしていることを何らかの方法で検出し、通知がglreadpixels消えるまで呼び出しを一時停止できれば、それも受け入れられます。

ありがとう、

ティム

0 投票する
1 に答える
3492 参照

opengl-es - FBOを使用したglReadPixelsは遅すぎます

私はopenGLES2.0とGLSLシェーダーを使用しており、Renderbuffer(別名オフスクリーンレンダリング)を使用してFBOで作業しています。30fps
で正常に動作します。 しかし、glReadPixelsまたはglcopyteximage2dを使用すると、8fpsに低下します。 私は次のようなことをしました:


とにかく速度を上げることができますか?つまり、FBOを使用せず、同じパラメーターでglReadPixelsを使用すると、15 fpsで動作し、FBOを使用すると速度が向上すると思いましたか?

0 投票する
2 に答える
2391 参照

android-ndk - オフスクリーンバッファからのAndroidNDKglReadPixels()

私はandroidndkを使用してゲームを書いています。私はopenglでオブジェクトを選択するためにピッキングを使用しています。そのために、レンダリングするオフスクリーンフレームバッファオブジェクトがあり、glReadPixels()を使用してFBOから色を取得します。次に、色はクリックされたオブジェクトのIDをエンコードします。

問題は、glReadPixels()が機能しないことです。色の値を読み取らないだけです。それを機能させるために私がしなければならないことはありますか?

これが私がreadpixelsを使おうとする方法です。ただし、結果は常に(0,0,0,0)になります。座標(x、y)を確認しました。彼らは大丈夫です。openglのドキュメントによると、GL_RGBA、GL_UNSIGNED_BYTEの組み合わせは、すべてのopengles2.0実装でもサポートされている必要があります。

Androidマニフェストで設定する必要のある権限について何か読んだことがあります。私は次のような権限を追加しようとしました:

しかし、それも機能しませんでした。

誰かが解決策が何であるかについての考えを持っていますか?またはどこで見ることができますか?

0 投票する
5 に答える
4716 参照

ios - RGBAからARGBへの変換(glReadPixels-> AVAssetWriter)

OpenGLでレンダリングされた画像を、の助けを借りてムービーファイルに記録したいと思いますAVAssetWriter。OpenGLフレームバッファからピクセルにアクセスする唯一の方法は、iOSでRGBAピクセル形式のみをサポートするglReadPixelsを使用することであるという問題が発生します。ただし、AVAssetWriterこの形式はサポートされていません。ここでは、ARGBまたはBGRAのいずれかを使用できます。アルファ値は無視できるので、RGBAをARGBに変換する最も速い方法は、glReadPixelsに1バイトシフトしたバッファーを与えることであるという結論に達しました。

問題は、呼び出しがクラッシュglReadPixelsにつながることです。EXC_BAD_ACCESSバッファを1バイトシフトしないと、完全に機能します(ただし、ビデオファイルの色が間違っていることは明らかです)。ここでの問題は何ですか?

0 投票する
2 に答える
16507 参照

c++ - glReadPixels() から OpenCV::Mat へのデータの変換

glReadPixels()を使用してアニメーションからすべての OpenGL フレームを取得し、データをOpenCV::Matに変換したいと考えています。glReadPixels()は、下から上、左から右に行ごとにデータを取得することを知っています。一方、OpenCV ではデータの保存方法が異なります。

データをglReadPixelsからC++のOpenCV:Matに変換するのに役立つライブラリまたはチュートリアル/例を知っている人はいますか?

まとめ

0 投票する
3 に答える
2571 参照

ios - glReadPixels は 1/4 画面サイズのスナップショットのみを保存します

クライアント向けの拡張現実アプリに取り組んでいます。OpenGL と EAGL の部分は Unity 3D で行われ、アプリケーションのビューに実装されています。

私が今必要としているのは、一番後ろのビューである OpenGL コンテンツのスクリーンショットをスナップするボタンです。

自分で書いてみたのですが、IBActionが割り当てられたボタンをクリックすると、画面の1/4(左下隅)しか保存されませんが、カメラロールには保存されます。

基本的に、4分の1ではなく、画面全体を保存するにはどうすればよいですか?

メソッドのコードは次のとおりです。

0 投票する
1 に答える
5338 参照

ios - glReadPixels の代わりに OpenGL ES テクスチャ キャッシュを使用してテクスチャ データを取得する

iOS 5 では、OpenGL ES テクスチャ キャッシュが導入され、バッファをコピーする必要なく、カメラのビデオ データから OpenGL への直接的な方法が提供されました。WWDC 2011 のセッション 414 - Advances in OpenGL ES for iOS 5 でテクスチャ キャッシュの簡単な紹介がありました。

最後にこの概念をさらに悪用し、単にテクスチャをロックしてからバッファに直接アクセスすることで への呼び出しを回避する興味深い記事を見つけました。glReadPixels

glReadPixelsiPad 2 で使用されているタイルベースのレンダラーが原因で、(1x1 テクスチャのみを使用している場合でも) 非常に遅くなります。ただし、説明されている方法は よりも高速に処理されるようですglReadPixels

記事で提案された方法は有効であり、依存するアプリケーションを後押しするために使用できますglReadPixelsか?

CVPixelBufferLockBaseAddressOpenGL はグラフィックス データを CPU と並行して処理するため、OpenGL と通信せずにレンダリングが完了したことを呼び出しはどのように知る必要がありますか?