2016-05-05 1 views
0

私は、ベアリングと強度のデータを32ビットでエンコードするアプリケーションを用意しています。私のフラグメントシェーダはすでに値をデコードし、ベアリングと強度に応じて色を設定します。ピクセルのサイズをGLSLで色を変える

シェーダを使用して、描画されたピクセルのサイズ(場合によってはシェイプ)を変更することも可能かどうかと思います。

例として、強度に4つの値があり、0で1つのピクセルが描画され、1が2x2の正方形を描画し、2が4x4の正方形を描画し、3が半径6ピクセルの円。

これまではCPU側でこれをすべて実行していましたが、私はこの仕事をGPUに委託したいと考えていました。

+0

フラグメントシェイダーを使用して円を描く幸運。これらのすべてに対して実際のプリミティブを使用すると、おそらくより良い結果が得られます。フラグメントと同じように、頂点シェーダーまたはジオメトリシェーダーのテクスチャを(特定のタイプのフィルタリングなしで)サンプリングすることができます。データセットのサイズや頻度がわからないため、この解決策を具体的に説明するのが現実的かどうかはわかりません。 –

+0

私の最悪のケースは、毎秒2回リフレッシュされる500x750の配列です。 –

答えて

0

いいえ、フラグメントシェーダーは、書き込むデータの「サイズ」に影響を与えることはできません。何かがラスタライズされてfragmentsになると、それはもはや実際には「サイズ」を持たない。

GL_POINTS primitivesをレンダリングする場合は、頂点シェーダからそのサイズを変更できます。ポイントサイズに関しては、特定のポイントが正確な数のフラグメントをカバーすることを確実にすることはむしろ困難です。

+0

私のアプリケーションは、テクスチャにデータを「描画」します。このデータはフラグメントシェーダによってデコードされます。頂点シェーダを使用して私が必要とするものを行うことができますか?私のフラグメントシェーダで行う必要はありません。 –

0

私の頭に浮かぶ最初のことは、テクニックをぼかすのと同じことをやっていることです。テクスチャをブラーリングするのではなく、1.0fを超える強度を持っているかどうかをチェックするために範囲を使って隣接するテクセルを探します。 yesの場合は、現在のテクセルの色をたとえば赤に設定します。

ウィンドウサイズと比較して1:1のfboを使用している場合は、テクスチャ座標で1 /幅と1 /高さを使用して約1ピクセルを取得します(ピクセルではなく、テクセル、ちょうどほぼ)

これはちょっとうまくいくが、これはn^2の複雑さとおそらくいくつかの分岐があるので非常に高価だということだ。

編集:思ったあと、偶数番号のサイズでは機能しない可能性があります

関連する問題