1

GLSLジオメトリシェーダーを作成していて、lines_adjacency入力レイアウトを使用しようとしていますが、機能していません。入力レイアウトを使用した最初のパススルーテストは正常にlines機能します。

// GLSL GEOMETRY SHADER
#version 410

layout (lines) in;
layout (line_strip, max_vertices = 2) out;

void main ()
{
    gl_Position = gl_in[0].gl_Position;
    EmitVertex();
    gl_Position = gl_in[1].gl_Position;
    EmitVertex();
    EndPrimitive();
}

しかし、lines_adjacency入力に切り替えると何も描画されません。

// GLSL GEOMETRY SHADER
#version 410

layout (lines_adjacency) in;
layout (line_strip, max_vertices = 2) out;

void main ()
{
    gl_Position = gl_in[1].gl_Position;
    EmitVertex();
    gl_Position = gl_in[2].gl_Position;
    EmitVertex();
    EndPrimitive();
}

ここでは実際には隣接ポイントを使用していないことはわかっていますが、最終的には隣接ポイントが必要になります。私はGLSLの初心者なので、助けていただければ幸いです。

4

1 に答える 1

3

隣接データを提供するために入力頂点を変更しましたか?OpenGLは頂点データを解析して、何が何に隣接しているかを把握しないためです。隣接タイプは、隣接情報についてシェーダーに通知できるようにするために存在します。したがって、そのデータを提供する必要があります。

つまり、隣接ジオメトリシェーダーを使用して、まったく同じ属性とインデックスデータを使用してレンダリングすることはできません。glDraw*呼び出しGL_LINES_ADJACENCYでの代わりにを使用する必要があるという事実を気にしないでくださいGL_LINES

于 2012-04-02T20:28:07.657 に答える