問題タブ [geometry-shader]
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.
c++ - ジオメトリ シェーダがジオメトリを出力しない
次のパイプラインを設定しています。
頂点シェーダーは入力として 4 つの頂点を取得し、三角形ストリップを使用して全画面クワッドとして描画します。
頂点シェーダー:
次に、ジオメトリ シェーダーでそれらの作業を行いたいと考えています。しかし、今のところ、シェーダーからトライアングル ストリップと同じ頂点を放出して、正常に動作することを確認します。
ジオメトリ シェーダー
}
そしてフラグメントシェーダー:
クライアント側の設定は次のようになります。
ドローコール:
奇妙なことは、それが機能しないことです!出力は空です.代わりにポイントを放出するように切り替えると、それらを放出します.頂点データは 100% 正しいです.ジオメトリ シェーダをデタッチすると、クワッドが正常に描画されます.何ここで間違っている可能性がありますか?
アップデート:
このバリエーションは機能します。
ジオメトリ シェーダーの入力/出力の Redclare はまだ役に立たなかった:
opengl - ジオメトリ シェーダーに渡された頂点属性データが正しく設定されていません
コードは次のとおりです。
頂点シェーダー:
ジオメトリ シェーダ:
問題は、位置 7 の頂点属性だけで構成される配列と等しくなるように設定すると、passFIndex が適切に設定されないことです。問題は、常に 0 に設定されることです。ただし、FIndex の基礎となる頂点データはわかっています。別のシェーダー プログラム (GS のないプログラム) を使用でき、FIndex は適切に変化するため、0 ではありません。
「passFIndex = int [ ] (FIndex)」を「passFIndex = int [ ] (2)」またはその他の定数に置き換えることができます。これは、ゼロ以外の配列を作成するために機能し、期待どおりにインデックスを付けますジオメトリ シェーダー。これは、頂点シェーダーで何か問題が発生していることを示しているようですが、それが何であるか想像できません。
debugging - ドローコール DrawInstancedIndirect でジオメトリ シェーダーをデバッグする
私のプログラムは、雨滴を進めるための計算シェーダーと、高度な雨滴をレンダリングするための別のレンダリング シェーダー (頂点シェーダー、ジオメトリ シェーダー、ピクセル シェーダー) に基づく雨粒子システムです。
ドロー コール DrawInstancedIndirect を使用して、Compute Shader からの結果をレンダリング ステップに適用します。
私の問題は、雨滴ごとにビルボードを描画しようとしているジオメトリ シェーダーのレンダリング ステップにあります。通常の四角形を描画するだけではうまくレンダリングされ、ビルボードに変更するとレンダー ターゲットには何もありません。このジオメトリ シェーダーをデバッグする方法を探しています。ジオメトリ シェーダーのデバッグに次のツールを使用しましたが、うまくいきました。
VS2012 のグラフィックス デバッガー。このツールはドロー コール: DrawInstancedIndirect をサポートしていないようです。
GPU ペフトスタジオ。頂点、ピクセル シェーダーをサポートしますが、ジオメトリ シェーダーはサポートしません。ジオメトリ シェーダーからピクセル シェーダーに即時値を渡して確認しようとしましたが、それらはすべてゼロです。しかし、エラーを見つけるためにジオメトリ シェーダーを掘り下げる必要があります。
NVDIAによるNsight。私のグラフィック カードは 720M ですが、Nsight が 730M からしかサポートしていないのはとても悲しいことです。私がデバッグ プロセスにいる理由は、シェーダー リストが空であることが原因かもしれません。
私は今絶望的で、問題を見つける方法がありません。このジオメトリ シェーダをデバッグする方法を教えていただければ幸いです。本当にありがとう!
c++ - パススルー ジオメトリ シェーダー
Qt と組み合わせて OpenGL を使い始めたところです。ジオメトリ シェーダを使用して線の幅を変更しようとしていますが、単純なパススルー ジオメトリ シェーダでも画面が空になります。
ここに私のコード(の抜粋)があります:
頂点シェーダー:
ジオメトリ シェーダー:
フラグメント シェーダー:
line_shader.addShaderFromSourceFile(QGLShader::Geometry, ":/shaders/lines.g.glsl");
コードから削除すると、すべてが期待どおりに機能します。
ここで何が間違っていますか?
編集: OS X 10.9、Qt 5.2.1 を使用しています。
glsl - 頂点シェーダーとして誤って解釈されるジオメトリ シェーダー
シンプルなジオメトリ シェーダーを機能させようとしています。しかし、奇妙なエラーメッセージがいくつかあります。私のジオメトリシェーダーが私の頂点シェーダーであるとopenglが考えているようです。
これはエラーメッセージです:
0<10> : エラー C7575: OpenGL は頂点シェーダーで入力ブロックを許可しません
しかし、私の頂点シェーダーには入力ブロックがありません。
ここに私の頂点シェーダー
ジオメトリシェーダー
とfragmentShader
プログラムを実行すると、ジオメトリ シェーダーがコンパイルに失敗します。入力ブロックを削除した場合にのみ、コンパイルされます。
また、機能が...
...ジオメトリ シェーダが含まれていない場合は 0 と 1 (positionID と colorID の場合) を返し、シェーダ プログラムに含まれている場合は 0 と -1 を返しました。そのため、何か問題があると思いますが、それが何であるかはわかりません。
助けてください :)
参考になるかどうかわかりませんが、シェーダーを作成するためのコードを次に示します。
まず、テキスト ファイルからシェーダー コードを取得します。次に、関数を呼び出してシェーダーとシェーダー プログラムを作成します。
シェーダーを作成する関数は次のとおりです。
c# - SharpDX / DirectDX: 透明度、法線、およびレンダリング順序
ジオメトリ シェーダー (位置と色のみを読み込む) で作成されたいくつかの立方体を、それぞれ異なるアルファ値でレンダリングしています。問題は、アルファブレンディングを有効にした後、キューブを見る角度によってキューブの可視性が変化することです。アルファ値が 0.5 を超えるオブジェクトは、かなりしっかりしているように見えますが、少し回転させるとほとんど見えなくなります。
赤い立方体のアルファ値は 255 ですが、その下にあるものを見ることができます。ステンシル バッファの有効化と無効化を試みましたが、何も変更されないため、シェーダまたは間違ったフラグ値のような単純なものであると推測します。
http://tinypic.com/r/10e589v/8
アルファ ブレンディング
ジオメトリ シェーダー
他の面も同様に作成されます。
opengl - 頂点シェーダー -> ジオメトリ シェーダー、エラー「非アクティブなユニフォームの位置を取得中」
次のような設定があります。
頂点シェーダー (... 無関係なもの):
ジオメトリ シェーダー (... 無関係なもの):
しかし、シェーダーを実行しようとすると、ModelViewMatrix が使用されていないように見えます (セットアップしようとすると、「非アクティブなユニフォームの位置を取得しています」というメッセージが表示されます)。シェーダー。何を与える?
ここのジオメトリ シェーダは 2 つの頂点を取り、フラグメント シェーダが使用するために 4 つを出力することを理解していますが、ジオメトリ シェーダを正しく理解して使用していますか?
opengl - 頂点シェーダーとフラグメント シェーダーの間にジオメトリ シェーダーを追加する際のリンク エラー
作業中の頂点シェーダーとフラグメント シェーダーの間にジオメトリ シェーダーを追加しようとすると、リンク エラーが発生します。
3 つのシェーダーはすべてエラーなしでコンパイルされます。インとアウトは情報の流れのパイプラインに収まらないと思います。組み込みのインとアウトが混乱するので、エラーを見つけることができません。
シェーダーのソース:
ジオメトリ シェーダーで間違っていることは何ですか?
未使用の oColor をスキップして、次のようなジオメトリ シェーダーの配列に変更しようとしました。
それは私に次のリンクエラーを与えます:
opengl - シングルパス ワイヤーフレームの問題
シングルパス ワイヤーフレームを実装しようとしていますが、その過程でいくつかの問題が発生しました。
質問1
いくつかの理由でglPolygoneMode
、ジオメトリ シェーダーが機能した後、(- ラインなどで) 塗りつぶされたジオメトリのないワイヤフレームのみを取得します。
)
しかし、ジオメトリ シェーダを無効にすると、ジオメトリが取得されます。
私が本当に達成したいのは、ジオメトリとそのワイヤフレームの両方です。
質問2
実際、私のプリミティブは三角形のストリップです。クワッドでの使用を避けてパフォーマンスを向上させるために使用します。描画中にワイヤーフレームのエッジをスキップするにはどうすればよいですか? (私はそれがどのように行われるかについてすでに投稿を見てきましたが、まだ私には明確ではありません。)
ここに私のシェーダーがあります:
頂点シェーダー:
ジオメトリ シェーダ:
フラグメント シェーダー:
どこが間違っているのかを理解するのを手伝ってください。
アップデート:
私は更新Fragment shader
し、Geometry shader
Andon M. Coleman の回答に言及していますが、質問 2で説明されている問題はまだ解決されていません。
更新 2
Fragmetシェーダーで少し編集しただけで、問題は解決しました。
フラグメント シェーダーを更新する