Opengl 关于几何体着色器的查询

Opengl 关于几何体着色器的查询,opengl,glsl,vertex-shader,geometry-shader,Opengl,Glsl,Vertex Shader,Geometry Shader,我正在使用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.3

我正在使用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();
}
几何体着色器是:

#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个顶点将被传递到几何体着色器,并使用这些顶点构造一个大小为4的基本体(假设GL_TRIANGLE_STRIP需要4个顶点)。
有人能解释一下吗?

你的着色器编译和链接日志恢复正常了吗?验证日志呢?@genfault:日志很好。我解决了这个问题。顶点着色器对vec3不满意,当我在vec4位置使用时;它工作得很好。奇怪,但这就是它在NVidia卡上的工作方式。“
#版本150#扩展GL\u EXT\u geometry\u shader4:启用
”请不要这样做。GLSL 150已经具有几何体着色器功能。GS的扩展版本不应与GLSL 150一起使用;就用这个。