2017-12-24 19 views
0

私は、高速グラフィックスレンダリングのためにOpenGLを使用しています。私は、SVGの 'path'要素で定義できるシェイプとほぼ同じ種類の曲線を描くことができるようにしたいと思います。GLSLは任意の長さのバッファを扱うことができますか?

私のパスをCPU上のポリゴンにテッセレーションするのではなく、バッファ内の値の配列をマイカーブを定義するシェーダに渡してから、イン/アウトテストを使ってピクセルは実際に内部にありました。言い換えれば、私は、私のパスの各セグメントを記述する潜在的に大きなデータ配列を繰り返しています。

何年も前にシェーダプログラミングを学んだ覚えていることから、GPUは両方のブランチを評価し、使用されなかったブランチを投げ捨ててif文を処理します。これは、事実上、バッファの一部だけを使用しても、バッファ全体を静かに実行することを意味します(つまり、バッファには1024の曲線セグメントを処理する能力がありますが、描画する単純な長方形には最初の4つ)。

この変数データを処理するコードはどのように記述しますか?現代GPUはこのような条件付きコードを扱うことができますか?

+0

現代のGPUは、通常、 'if'を正しく扱います。しかし、モバイルGPUはしばしば両方のブランチを実行せず実行します。 –

答えて

0

GPUは任意の長さのバッファと条件を処理することができます(または偽りなく偽装します)。問題は、頂点シェーダとジオメトリシェーダが簡単な説明から任意の数の三角形を生成できないことです。

OpenGL 4.0には、2つの新しい種類のシェーダTessellation ControlシェーダとTessellation Evaluationシェーダが追加されました。これらのシェーダは、GPUの曲線とサーフェスをテッセレーションする機能を提供します。

私はthis tutorialがGPUのベジエ曲線をどのようにテッセレーションするかを示すのに非常に有用であることを発見しました。

関連する問題