問題タブ [fbo]

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 に答える
1233 参照

ios - テクスチャへのマルチサンプリング レンダリング

私は次のアーキテクチャで作業しています:

  • iOS 上の OpenGL ES 2
  • 同じ ShareGroup を持つ 2 つの EAGL コンテキスト
  • 2 つのスレッド (サーバー、クライアント = メインスレッド); サーバーは素材をテクスチャにレンダリングし、クライアントは単純なテクスチャ付きクワッドを使用してテクスチャを表示します。

サーバースレッドへの追加の詳細 (作業コード)

初期化中に fbo が作成されます。

サーバーのレンダリング ループは、おおよそ次のようになります。

これまでのところ、これはすべて正常に機能します。

新しい (バグのある) コード

ここで、GL_APPLE_framebuffer_multisample 拡張機能を使用してサーバー スレッドにマルチサンプリングを追加し、初期化コードを次のように変更します。

メイン ループは次のように変更されました。

私が今見ているのは、テクスチャには複数の loop() 呼び出しからのデータが含まれており、一緒にブレンドされているということです。ある種の「アンバインド」か、おそらくglFinish()呼び出しが欠落していると思います(以前は別の時点でこのような問題がありました。テクスチャデータを設定してすぐに使用しました-テクスチャを強制するglTexImage2D()ための呼び出しが必要でしたglFinish()更新予定)。

ただしglFinish()、描画コードの後に​​ a を挿入しても、ここでは何も変更されませんでした..

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

c++ - OpenGL FBO - 白いピクセルが透明に見える

OpenGL を使用して 2D ゲームを作成しています。最近、Framebuffer オブジェクトを実装しようとしましたが、ブレンドに関していくつか問題があります。

FBO を作成しています (GL_RGBA をフォーマットとして使用)。FBO にレンダリングするときは、まず完全に透​​明な黒にクリアし、GL_BLEND を無効にします。次にテクスチャを描画し、GL_BLEND を再度有効にします。FBO テクスチャを描画するときは、GL_SRC_ALPHA と GL_ONE_MINUS_SRC_ALPHA をそれぞれソース ピクセルとデスティネーション ピクセルとして、ブレンディング関数として使用します。テクスチャ付きのクワッドとしてレンダリングしています。白いピクセルが透明に見えるため、これは正しく機能しません。さまざまなブレンド関数値を試してみましたが、試したすべてに問題がありました。ブレンディングがどのように機能するかを完全には理解していないので、これに頭を悩ませるのは難しい. 多分私はここで明らかな何かを見逃していますか?

これが現在の様子の画像です。ボタンが強調表示されると、ボタンの周りが光るはずですが、代わりにその周りのピクセルが透明に見えます: http://i.snag.gy/RnV4s.jpg

画像には 2 つのボックスのテキストも表示されています。上の 1 つは、FBO なしで通常どおりに描画されます。テクスチャも FBO なしで正常にレンダリングされるため、フレームバッファ コードのどこかに問題があることがわかります。

「RenderTarget」クラスをペーストビンに貼り付けました (FBO ではなくレンダーターゲットと呼ぶことに慣れています): http://pastebin.com/dBXgjrUX

これは私がそれを使用する方法です:

誰かが私を助けることができますか?私の問題についてさらに情報が必要な場合はお知らせください。

編集:起動時に設定したOpenGLのプロパティは次のとおりです。

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

opengl - フラグメント出力が vec3 の場合、glBlitFramebuffer() は空の画面をレンダリングします

私は OpenGL 4.0 を使用していますが、以前は 3.3 を使用していました。3 つの出力を持つフラグメント シェーダーがあります。 screen.今、出力をvec4タイプに設定すると正しく機能することがわかりました.理由がわかりません! 私の FBO テクスチャは RGB32F に設定されているので、フラグメントから vec3 を受け入れることができるはずです。これが私のFBOセットアップです(これはJava LWJGLラッパーですが、ここでは関係ありません):

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

opengl - OpenGL: フレーム バッファ オブジェクトを使用したマルチパス レンダリング

小さな 2D エンジンを開発しているときに、残念ながら私の知識レベルではあなたの助けなしには解決できない小さな設計上の問題に出くわしました。

説明させてください: 私が 2D エンジンを開発しているゲームには複雑な効果が含まれている必要があり、複数のレンダー パスが必要になる可能性があります。問題は、マルチパス レンダリングの概念を正しく理解しているかどうかわからないことです。

このレベルの知識では、次のように実装します。

  1. 最初に、フレーム バッファ オブジェクトを作成、セットアップ (テクスチャにアタッチするなど) し、バインドします。
  2. 次に、FBO のアタッチされたテクスチャにエフェクトを適用する必要があるものをレンダリングします
  3. 最初のパスにシェーダーを使用して、そのテクスチャを同じ FBO にレンダリングします。
  4. FBO のバインドを解除し、最後のパスのシェーダーを使用して、添付されたテクスチャを標準の FBO にレンダリングします。

問題は、これが私の問題を解決する最も効率的な方法であるかどうか、またはこれを行うためのより良い方法があるかどうかです。

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

opengl - OpenGLFBO複数のテクスチャ

2つのテクスチャをアタッチするFBOがあります。次に、FBOをバインドし、最初のテクスチャをシェーダーへの入力(バインド)として使用し、2番目のテクスチャに書き込みます。どちらもFBOにアタッチされています。glDrawBufferを使用してこれを試し、GL_COLOR_ATTACHMENT1を描画バッファーとして指定しましたが、成功しませんでした。とにかくこれは可能ですか?

編集

これが私がそれをやろうとする方法です:

しかし、glReadPixelsの結果は、私が期待したものとは異なります。ここで何か問題がありますか?

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

android - Mali-400 の FBO での OpenGL ES 2.0 アーティファクト/ディザリング

gles 2.0 でフレーム バッファ オブジェクトにレンダリングすると、Mali-400 GPU に奇妙なアーティファクトが発生します。問題は、画面全体を同じ色で塗りつぶしても、一部のピクセルが他のピクセルとは異なる色になることです。しかし、Tegra2 GPU では問題なく動作します。Mali はデフォルトでテクスチャ圧縮を使用しますか? 私の fbo は内部フォーマットとして GL_RGBA を使用します。前もって感謝します!

----編集----私は自分の質問を解決したと思います。問題は単純に、Mali では GL_DITHER がデフォルトで有効になっていることでしたが、Tegra ではそうではなかったようです。シンプルな glDisable(GL_DITHER) が問題を解決しました。

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

opengl - テクスチャへのFBOレンダリングを使用したOpenGL2パスシェーダー効果は、Windowsでのみ結果にノイズを与えます

次の正しい方法は何ですか。

  1. FBO(fbo-a)を使用してシーンをテクスチャにレンダリングします
  2. 次に、テクスチャ(tex-a)を使用してエフェクトを適用し、同じfbo(fbo-a)を使用してこれを別のテクスチャ(tex-b)にレンダリングします。
  3. 次に、この2番目のテクスチャを、適用された効果(tex-b)をフルスクリーンクワッドとしてレンダリングします。

私のアプローチはこれですが、これにより、ウィンドウの「ノイズ」と適用された効果で満たされたテクスチャが得られます(すべてのピクセルはランダムに赤、緑、青、白、黒に色付けされます)。

  • 2つのテクスチャがGL_COLOR_ATTACHENT0(tex-a)とGL_COLOR_ATTACHMENT1(tex-b)に設定された1つのFBOを使用しています
  • fboをバインドし、glDrawBuffer(GL_COLOR_ATTACHMENT0)を使用してtex-aにレンダリングされていることを確認します
  • 次に、tex-aがバインドされ、「sampler2D」として設定されたシェーダーにエフェクトを適用します。テクスチャユニット1を使用して、2番目のカラーアタッチメント(glDrawBuffer(GL_COLOR_ATTACHMENT1))に切り替えます。フルスクリーンクワッドをレンダリングします。すべてがtex-bにレンダリングされます
  • 次に、デフォルトのFBO(0)に切り替え、フルスクリーンクワッドでtex-bを使用して結果をレンダリングします。

シェーダーを適用したときの結果の例 ノイズを入力してください

これは私が使用しているシェーダーです。これが原因である可能性があるかどうかはわかりませんが、ノイズはオーバーフローが原因である可能性がありますか?

バーテックスシェーダー

フラグメントシェーダー

opengl.orgでこのFBOの記事を読みました。記事の下部に、フィードバックループが記載されています。説明は私には完全には明確ではなく、彼らがそこで説明していることを正確に行っているのだろうかと思います。

アップデート1:

ソースコードへのリンク

アップデート2:

gl_FragColor.rgb = vec3(0.0, 0.0, 0.0);(NUM_SAMPLESを使用して)サンプリングループを開始する前に最初に設定した場合、それは検索で機能します。理由はわかりません。

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

java - GL_RGBA16F テクスチャ フォーマットを設定すると不完全な FBO が取得される

OpenGL (LWJGL) 用の Java ラッパーを使用しています

FBO テクスチャ アタッチメント フォーマットを GL_RGBA16F に設定した場合のステータス。実際には、GL_RGBA 以外のすべてでこのエラーが発生します。これが私の FBO テクスチャのセットアップです。

そして、ここに深さの添付ファイルがあります:

アップデート:

実際、内部フォーマットとフォーマットの場所を次のように入れ替えると: GL_RGBA,GL_RGBA16F FBO は問題なく完了します。

更新 1: これまでのところ、LWJGL フォーラムの誰からも回答が得られていません。また、この問題をバグとして提出しましたが、開発チームからも回答が得られませんでした。他の誰かが、float 形式を使用するテクスチャ アタッチメントを使用して FBO をテストし、完全性を報告できる場合現在、コードにエラーはないと思います。また、2 台のマシンでテストしたところ、同じ結果が得られました。