問題タブ [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 投票する
1 に答える
547 参照

c++ - glPixelStore での glReadPixels の使用

glReadPixels に関する複数のチュートリアルを見ましたが、混乱しています:

void glReadPixels(GLint x, GLint y, GLsizei 幅, GLsizei 高さ, GLenum 形式, GLenum 型, GLvoid * データ)

最後の引数は void ですか? チュートリアルを見たところ、引数は vector、unsigned char、GLubyte などとして宣言されていました...しかし、それは実際にはどういう意味ですか? また、glPixelStoref( , ) を呼び出す必要がありますか?

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

opengl - CPUによるglReadPixelsのデータ形式の変換を停止するには?

私たちが知っているようにglReadPixels()、パイプラインをブロックし、CPU を使用してデータ形式を変換します。特に、深さの値をシステム RAM に読み出したい場合はそうです。

glReadPixels()Songho が提供する PBO を試してみましたが、param ofが GL_BGRA に設定されている場合にのみ有用であることがわかりました。

  • param で PBO を使用するとGL_BGRA、読み取り時間はほぼ 0.1ms で、CPU 使用率は 4% です。
  • param を に変更するとGL_RGBA、CPU 使用率が 50% で 2ms と表示されます。

やってみると同じGL_DEPTH_COMPONENTです。どうやら速度の低下は変換によって引き起こされているようです。データ形式の変換を停止する方法を知っている人はいますか?

私のプログラムでは、深度値を読み取り、1 秒以内に 16*25 回計算する必要があるため、2ms は受け入れられません。

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

android - glReadPixels アルファ値の問題

Android で OpenGL テクスチャからアルファ チャネルを読み取る際に問題が発生しています。私はこのように呼びますglReadPixels

テストとして、次のようなフラグメント シェーダーを作成しました。

ピクセルごとに、{ 64, 64, 64, -1 } が返されます。

各レンダリングの前にこれを含め、アルファがRGB値と同じ方法で返されない理由を解決するために、あらゆる種類のことを試しました。

しかし、何をしても -1 が返ってきます。

これは Android の制限ですか、それとも何が欠けていますか?

注記として、違いがある場合はオフスクリーン FBO を使用しています。

編集:私がこれを行う場合:

{ 8, 8, 8, 0 } を返します。

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

c# - OpenGL シーンを C# ビットマップに描画します。画面外が切り取られる

複雑な 2D シーンを OpenGL ウィンドウに描画します。ユーザーがシーンのスクリーンショットを撮り、JPG として保存できるようにしたいと考えています。ただし、シーンを画面よりも大きく描画できることを指定できるようにしてほしいです (これにより、より多くの詳細を見ることができるようになります)。

画面に収まるビューポートより大きい数値を指定すると、見えないものはすべてビットマップに描画されません。追跡できなかったこれらの OpenGL 関数のいくつかの動作について、誤った理解をしているように感じます。

renderSize以下のコードは、プログラムを開始するデフォルトのビューポートよりも小さい場合、完全に正常に動作します。が大きい場合renderSize、適切なサイズの JPG が作成されますが、画面の表示領域を超えた右側/上部のセクションは単に空白になります。ビューポートをクリックして 2 番目のモニターにドラッグすると、より多くの画像が描画されますがrenderSize、両方のモニターよりも大きい場合はすべてではありません。画面に表示されるビューポートとは無関係に、この図面を作成するにはどうすればよいですか?

( 7000 x 2000 のような大きな数値で、この関数が呼び出されたときに正しく設定されているrenderLocationことを確認できます)renderSizerenderSize

そして、GLウィンドウが発生した場合に備えて、GLウィンドウを初期化する方法を次に示します。

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

android - GL_INVALID_FRAMEBUFFER_OPERATION Android NDKGLFrameBufferおよびglReadPixelsは0000を返します

私のC++コードはiOS用に設計されており、最小限の変更でNDKに移植しました。

フレームバッファをバインドして呼び出します

次に、このようにメインフレームバッファをバインドします

glGetError()戻り値GL_INVALID_FRAMEBUFFER_OPERATION

フレームバッファに描画し、そのテクスチャを使用してメインフレームバッファに描画できます。しかし、私が電話glReadPixelsをすると、ゼロになります

そのコードはiOSで機能し、ほとんどのコードはAndroidで機能します。glReadPixels

glCheckFramebufferStatus(GL_FRAMEBUFFER)GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT0x8CD7を返します

-

フレームバッファまたはテクスチャからピクセルデータを取得し、ファイルに保存できるサンプルコードを検討します。answer

現在、テクスチャがアタッチされたバッファに描画でき、そのテクスチャを使用してメインバッファに描画できます。しかし、フレームバッファ/テクスチャからピクセルを取得してファイルに保存したり、Facebookに投稿したりすることはできません。

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

java - glReadPixels()でスクリーンショットを撮るための適切なコンテキストを見つける

画面に表示されているものからスクリーンショットを撮れるように、glReadPixels()を介してフレームバッファーから直接読み取ろうとしています。
私はGUIを使用していませんが、代わりに、画面に触れるたびに画面の生のコンテンツを印刷する必要があります(これは最初は十分です)。

gl.glReadPixels()関数の適切なコンテキストを取得するのに行き詰まっています。
私が今得ている文脈は、実際に画面に表示されているものとは何の関係もないと思うからです。

アプリケーションを実行すると、libEGLエラーが出力されます。

現在のコンテキストなしでOpenGLESAPIを呼び出す(スレッドごとに1回ログに記録される)

その後、配列をゼロで埋めます。

アプリケーションを非表示にするために、マニフェストで次の行を使用しています。

そしてここにコードがあります:

ヘルプは大歓迎です:)

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

opengl - OpenGLカラーバッファと深度バッファをすばやく読み取る方法は?

フレームごとにカラーバッファーと深度バッファーを読み取る必要があります。関数が非常に遅いことはわかっているglReadPixelsので、読み取りを行うためのより高速な方法があるかどうかを知りたい.

0 投票する
0 に答える
858 参照

opengl - 幅または高さを 2k + 2 として表すことができないため、GL_INVALID_VALUE を与える glTexImage2D

2番目のopenglキャンバスに描画する必要がある最初のopenglキャンバスから取得したスクリーンショットがあります。を使用してスクリーンショットを撮りましたglReadPixels

最初の OpenGL キャンバスには、いくつかの線とテキスト データを含む 2 つ以上の画像があります。2番目のopenglキャンバスを使用して、周囲のデータ全体で画像のタイリングを表示しています.2番目のopenglキャンバスで同じものを再描画したくないため、スクリーンショットを撮り、スクリーンショットのタイリング部分を描画したい2 番目のキャンバスで。

また、取り込んだスナップショットをjpgファイルに保存しましたが、これは完璧です。

しかし、使用されている pageWidth または pageHeight が 2K+ 2 として表現できないため、glTexImage2d を使用してピクセル データを描画する必要がある場合に問題が発生します。したがって、エラーはGL_INVALID_VALUE.

GL_MAX_TEXTURE_SIZEpageWidth と pageHeight は、たとえば 240 X 600 など、任意の値 ( より小さい値) にすることができます。では、この問題をどのように解決すればよいでしょうか?

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

iphone - 生成されたスクリーン ショットを表示する UIImage が UIImageView に表示されない (デバイスのみ)

OpenGL バッファ (現在ビューに表示されているもの) をデバイスのフォト ライブラリに保存しようとしています。以下のコード スニペットは、シミュレーターで正常に動作します。しかし、実際のデバイスではクラッシュしています。画面からキャプチャされた UIImage を作成する方法に問題がある可能性があると思います。

  • この操作は、IBAction イベント ハンドル メソッドを介して開始されます。
  • 画像を保存するために使用する関数は UIImageWriteToSavedPhotosAlbum です (最近、これを ALAssetsLibrary の writeImageToSavedPhotosAlbum に変更しました)。
  • アプリが写真ライブラリへのアクセスを承認されていることを確認しました。
  • また、CGImageRed がグローバルに定義されている (ファイルの先頭で定義されている) ことと、UIImage が (非アトミック、保持) プロパティであることも確認しました。

誰かがこの問題を解決するのを手伝ってくれますか? glReadPixels データから生成された有効な UIImage 参照が必要です。

以下は、関連するコード スニペットです (フォト ライブラリに保存するための呼び出し)。

* 更新 * 問題を絞り込むことができたと思います。コード行をコメントアウトした後、(デバイス上で)アプリを実行して、物事を絞り込む試行錯誤を始めました。(glReadPixels を使用して) 画面バッファーを取得し、CGImageRef を作成するTakeImageBufferSnapshot関数に問題があるようです。ここで、これから UIImage を作成しようとすると ([UIImage imageWithCGImage:] メソッドを使用して)、これが原因でアプリがクラッシュするようです。この行をコメントアウトすると、問題はないようです (という事実以外は)私はUIImage参照を持っていません)。

写真ライブラリに保存できるように、基本的に有効な UIImage 参照が必要です (テスト画像を使用しても問題なく動作するようです)。

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

java - 要素を非表示にすると glReadPixels が失敗する

画面に触れると、glReadpixels はピクセルの RGB を返します。タッチした後、同じ RGB 値を持つ隠し要素にメソッドを呼び出します。この後、画面に触れると、glReadpixels は 0 値のみを返します。

---------------Square.java------------------ ---------------------------