問題タブ [render-to-texture]
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.
text - テキストをLPDIRECT3DTEXTURE9にレンダリングします
テクスチャにテキストをレンダリングして表示するにはどうすればよいですか?
これは基本的に私にはうまくいきません。(単にテキストを描画しません。)
前もって感謝します。
arrays - openglを使用して、ピクセルごとをバックバッファまたはテクスチャに描画して画面に表示します-glDrawPixels()はありません
基本的に、ユーザー入力(システムRAMで開始)からリアルタイムでフレームごとに生成されるデータの配列(流体シミュレーションデータ)があります。流体の密度をアルファ値としてテクスチャに書き込みたい-配列値を補間して、画面のサイズ(グリッドが比較的小さい)の配列を作成し、0〜255の範囲にマップします。これらの値をテクスチャに書き込んで使用するための最も効率的な方法(ogl関数)は何ですか?
他の場所で提案されているもので、使用したくないと思うもの(間違っている場合はお知らせください):
glDrawPixels()-呼び出すたびに割り込みが発生し、特に高解像度では遅くなるという印象を受けています。
シェーダーを使用する-シェーダーが各フレームの配列内のデータの量を受け入れて処理できるとは思いません(受け入れる可能性のあるデータ量の上限が低すぎると他の場所で言及されています)
ios - iOS: GLES2 で Render-To-1-channel-Texture する方法
何時間ものバッシングの後、これは不可能だと確信しています。
これは、テクスチャにレンダリングするためのこれまでのコードです (以下)。それは仕事をしますが、非常に無駄です。単一の 8 ビット チャネル、場合によっては 16 ビット グレースケールのみが必要です。無駄なRGやBチャンネルは欲しくない。
しかし、glTexImage2D で GL_RGBA /*GL_ALPHA*/ を切り替えようとすると、glCheckFramebufferStatus は「フレーム バッファが不完全です」というエラーをキャッチします: 36054 0x8CD6 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
IRC の人たちは GL_R を提案していますが、Xcode はそのためのオートコンプリートを提供していません。
しかし、それは本当に奇妙に思えます!これはモバイルデバイスです。確かに、操作を実行するために必要なビットの量を 4 分の 1 に削減する何か...確かに、これは取り出す最後のものの 1 つです。
?!?
誰かがこれを決定的に埋めることができますか? GLES2.0 でシングル チャネル テクスチャにレンダリングすることは可能ですか?
ios - GLES2.0 RTT(テクスチャへのレンダリング):GLES2で宛先テクスチャフォーマットを列挙する方法は?
私はこのコードを使用しています: http://pastie.org/1944600ソース テクスチャを宛先テクスチャにぼかします。
デスティネーション テクスチャをアルファのみで作成したかったのですが、RGBA でしか機能しませんでした。
では、利用可能なすべての宛先テクスチャ フォーマットを一覧表示するにはどうすればよいでしょうか。
opengl - OpenGL/OpenGLES でのフレームバッファ テクスチャの動作
OpenGL/ES では、テクスチャへのレンダリング機能を実装するときに、フィードバック ループ (書き込み先と同じテクスチャからピクセルを読み取る) が発生しないように注意する必要があります。明らかな理由から、テクスチャの同じピクセルを読み書きするときの動作は未定義です。ただし、同じテクスチャの異なるピクセルを読み書きしている場合も未定義の動作ですか? 例としては、内部にレンダリング テクスチャを含むテクスチャ アトラスを作成しようとしていた場合です。テクスチャへのレンダリング中に、テクスチャ アトラスに保存されている別のテクスチャからピクセルを読み取ります。
テクスチャで同じピクセルを読み書きしていないので、データが同じテクスチャから来ているという理由だけで、動作は未定義と見なされますか?
opengl - openglテクスチャへのffmpegビデオ
ffmpegを使用してビデオから取得および変換されたフレームをクワッドに配置するOpenGLテクスチャにレンダリングしようとしています。私はグーグルをかなり使い果たして、答えを見つけられませんでした、まあ私は答えを見つけました、しかしそれらのどれもうまくいかなかったようです。
基本的に、私はavcodec_decode_video2()
フレームをデコードし、次にsws_scale()
フレームをRGBに変換し、それglTexSubImage2D()
からopenGLテクスチャを作成するために使用していますが、何も機能しないようです。
SWSコンテキストの設定では、「宛先」のAVFrameに2次元のパワーがあることを確認しました。これが私のコードです:
そのコードでわかるように、フレームが実際にレンダリングされていることを確認するために、フレームを.ppmファイルに保存しています。
使用されているファイルは854x480の.wmvですが、これが問題になる可能性がありますか?私が512x256にするように言っているという事実は?
PS私はこのStackOverflowの質問を見てきましたが、役に立ちませんでした。
また、私も持っglEnable(GL_TEXTURE_2D)
ており、通常のbmpをロードするだけでテストしました。
編集
画面に画像が表示されていますが、文字化けしているので、2の累乗に変更することと関係があると思います(デコード時、swscontext
およびgluBuild2DMipmaps
コードに示されているように)。私は通常、上記のコードとほぼ同じですが、タイプをに変更して変更glTexSubImage2D
しただけです。gluBuild2DMipmaps
GL_RGBA
フレームは次のようになります。
もう一度編集
pFrameRGBの設定方法のコードを示していないことに気づきました。
に変更しPixelFormat
たavgpicture_get_size
のでPIX_FMT_RGB24
、に変更しました。SwsContext
に変更GluBuild2DMipmaps
するGL_RGB
と、少し良い画像が得られますが、まだ線が欠けているようで、まだ少し伸びています。
別の編集
Mackeのアドバイスに従い、実際の解像度をOpenGLに渡した後、フレームはほぼ適切になりましたが、それでも少し歪んでいて白黒で、110fpsではなく6fpsしか得られていません。
PS
フレームを画像に保存する機能がありますが、sws_scale()
色などすべてがうまく表示されているので、OGLの何かが白黒になっています。
最後の編集
働く!これで動作しました。基本的に、テクスチャを2の累乗でパディングするのではなく、ビデオの解像度を使用するだけです。
正しいglPixelStorei()で幸運な推測をして、テクスチャが適切に表示されるようになりました。
また、subimage()
私のような空白の問題が他にある場合は、少なくとも1回はテクスチャを塗りつぶす必要があるためglTexImage2D()
、ループで1回使用し、その後使用glTexSubImage2D()
します。
Mackeとdatenwolfにご協力いただきありがとうございます。
c++ - OpenGL ES 2.0 でレンダリングからテクスチャへのパフォーマンスを測定する
基本的に、2 つの三角形で構成される画面サイズの長方形と、処理全体を行うフラグメント シェーダーを使用して、ある種の画像処理を行っています。実際の効果は、 と呼ばれる一様変数に依存するため、アニメーションのようなものですcurrent_frame
。
「MPix/s」の観点からパフォーマンスを測定することに非常に興味があります。私がしていることはそのようなものです:
理論に関する限り、私のコンセプトに何か問題がありますか?
glFinish()
また、モバイル ハードウェアでは、以前のレンダリング呼び出しを必ずしも待機する必要はなく、いくつかの最適化を行う可能性があるという印象を受けました。
もちろん、各ドローの後に強制的に実行することもできますglReadPixels()
が、それは非常に遅くなるため、あまり役に立ちません。
私のテスト シナリオが適切かどうか、さらに何かできることがあるかどうかについてアドバイスをいただけないでしょうか。
directx - 複数のレンダー ターゲットがデータを保存しない
シェーダー モデル 4 で DirectX 11 をターゲットにして、SlimDX を使用しています。頂点を処理し、データの 3 つのテクスチャを保存するピクセル シェーダー「preProc」があります。1 つはピクセルごとの法線用、もう 1 つはピクセルごとの位置データ用、もう 1 つは色と深度用です (色は RGB を使用し、深度はアルファ チャネルを使用します)。
その後、後処理シェーダーでこれらのテクスチャを使用して、スクリーン スペース アンビエント オクルージョンを実装しますが、最初のシェーダーにデータが保存されていないようです。
これが私のピクセルシェーダーです:
次の構造体を出力します。
入力用に次の構造体を受け取ります。
ただし、後処理シェーダーでは:
単純に水色の画面 (各フレームの開始時にレンダー ターゲットをリセットした色) を出力します。getCol は動作することがテストされており、1 つのレンダー ターゲットのみを処理する場合に renderTex マテリアルから色を返します。ピクセルシェーダーを変更して randomTex テクスチャ (コードが以前にファイルからロードしたもので、レンダー ターゲットではありません) をサンプリングするようにすると、すべてが正常にレンダリングされるので、後処理シェーダーではないと確信できます。
私のslimDXコードが失敗した場合、私は次のようにします:
テクスチャ、shaderresourvecviews、および rendertargetviews の作成:
複数のレンダー ターゲットへのレンダリング:
次に、postProcessing シェーダーを画面にレンダリングするときの関数:
編集:現在の実行の単一フレームの PIX 関数呼び出し出力を追加しました。
EDIT2: 私はいくつかの読書をしてきましたが、おそらく preProc パスの後、テクスチャをレンダリング ターゲットとして割り当て解除してから、テクスチャを ShaderResourceViews として postProcess シェーダーに渡す必要があります。context.OutputMerger.SetTargets() を呼び出すと、現在割り当てられているすべてのレンダー ターゲットの割り当てが解除され、関数のパラメーターで指定されたレンダー ターゲットのみが割り当てられると想定しました。そうでない場合 (そうであるかどうかはまだわかりません)、SlimDX でレンダー ターゲットの割り当てを解除するにはどうすればよいでしょうか?
EDIT3: ああ、このMSDN ページによると、OutputMerger.SetRenderTargets() を呼び出すと、「ppRenderTargetViews のレンダー ターゲットの数に関係なく、すべての境界付きレンダー ターゲットと深度ステンシル ターゲットがオーバーライドされます。」そのため、OutputMerger に画面にレンダリングするように指示すると、すべてのレンダー ターゲットの割り当てが自動的に解除されます。これで振り出しに戻ります。
c# - XNAはいつレンダーターゲットのコンテンツを破棄しますか?
XNAのレンダリングターゲットは揮発性であることを理解していますが、どの程度揮発性ですか?内容がいつ破棄されるかを正確に示すドキュメントが見つかりません。それはあなたが彼らに絵を描き始めたときだけですか、それともいつでもそうなる可能性がありますか?
レンダリングターゲットに一度描画してから、それをTexture2Dとして無期限に使用したいと思います。これは可能ですか?RenderTargetUsage.PreserveContents
これを正しく機能させるには、有効にする必要がありますか?PreserveContentsはXboxと電話のハードウェアで非常に遅いことを読みました。
xna - レンダー ターゲットの結果を保持して非揮発性にするにはどうすればよいですか?
一度だけレンダリングされ、その後無期限に使用されるレンダー ターゲットに依存するアプリケーションを XNA で作成しています。私が遭遇した問題は、コンピューターがスリープ状態になったときやアプリケーションがフルスクリーン モードになったときなど、レンダー ターゲットのコンテンツが失われたり破棄されたりする特定の状況があることです。
コンテンツが失われたときに各ターゲットに再レンダリングすることはオプションですが、多くのターゲットがある場合はかなりコストがかかる可能性があるため、最適なオプションではない可能性があります。
おそらく、それぞれの結果を PNG 画像として保存し、その PNG をテクスチャとしてロードすることもできますが、これには多くの I/O オーバーヘッドが追加されます。
提案?