2

GL_ARB_geometry_shader4拡張機能を使用してジオメトリシェーダーを扱っています。

私のコードは次のようになります:

GLfloat vertices[] =
    {   
        0.5,0.25,1.0,
        0.5,0.75,1.0,
        -0.5,0.75,1.0,
        -0.5,0.25,1.0,
        0.6,0.35,1.0,
        0.6,0.85,1.0,
        -0.6,0.85,1.0,
        -0.6,0.35,1.0
    };

glProgramParameteriEXT(psId, GL_GEOMETRY_INPUT_TYPE_EXT, GL_TRIANGLES);

glProgramParameteriEXT(psId, GL_GEOMETRY_OUTPUT_TYPE_EXT, GL_TRIANGLE_STRIP);

glLinkProgram(psId);

glBindAttribLocation(psId,0,"Position");

glEnableVertexAttribArray (0);

glVertexAttribPointer(0, 3, GL_FLOAT, 0, 0, vertices);

glDrawArrays(GL_TRIANGLE_STRIP,0,4);

私の頂点シェーダーは:

#version 150

in vec3 Position;

void main()
{       
    gl_Position = vec4(Position,1.0);

}

ジオメトリシェーダーは:

#version 150
#extension GL_EXT_geometry_shader4 : enable

in vec4 pos[3];

void main()
{
   int i;
   vec4 vertex;

    gl_Position = pos[0];
    EmitVertex();

    gl_Position = pos[1];
    EmitVertex();

    gl_Position = pos[2];
    EmitVertex();

    gl_Position = pos[0] + vec4(0.3,0.0,0.0,0.0);
    EmitVertex();

    EndPrimitive();
}

このコードでは何もレンダリングされません。glDrawArrays()のモードは正確には何である必要がありますか?GL_GEOMETRY_OUTPUT_TYPE_EXTパラメーターはglDrawArrays()にどのように影響しますか?

私が期待しているのは、3つの頂点がGeometry Shaderに渡され、それらを使用してサイズ4のプリミティブを作成することです(GL_TRIANGLE_STRIPに4つの頂点が必要であると想定)。誰かがこれに光を当ててくれませんか?

4

0 に答える 0