opengl - 无法通过几何着色器工作

标签 opengl glsl shader geometry-shader

我有一个带有点的 VBO,我可以使用顶点和片段着色器进行渲染,但是当我添加一个直通几何着色器时,我什么也看不到。我使用 MRT 来发光,但在这个例子中我没有碰它。

从我在其他帖子中看到的情况来看,将值从一个阶段传递到另一个阶段似乎存在问题,因此我删除了所有变量,但它仍然不起作用。

我在链接后设置了程序参数 - 希望没问题。

为什么禁用几何着色器会产生白色粒子,但启用它却什么也没有显示?有什么想法吗?

顶点着色器:

#version 120
attribute vec3 position;
uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;

void main()
{
    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1);
}

片段着色器:

#version 120

void main()
{
    gl_FragData[0] = vec4(1.f, 1.f, 1.f, 1.f);
    gl_FragData[1] = vec4(0.f, 0.f, 0.f, 0.f);
}

几何着色器:

#version 120
#extension GL_EXT_geometry_shader4: enable

uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;

void main(void)
{
    for (int i = 0; i < gl_VerticesIn; i++)
    {
        gl_Position = gl_PositionIn[i];
        EmitVertex();
    }
        EndPrimitive();
}

设置参数(程序链接后,程序为resources.particleprogram)

glProgramParameteriEXT(resources.particleprogram, GL_GEOMETRY_INPUT_TYPE_EXT, GL_POINTS);
glProgramParameteriEXT(resources.particleprogram, GL_GEOMETRY_OUTPUT_TYPE_EXT, GL_POINTS);
glProgramParameteriEXT(resources.particleprogram, GL_GEOMETRY_VERTICES_OUT_EXT, 4);

最佳答案

Setting up params (after program linking, program is resources.particleprogram)

这些参数必须链接之前设置。

关于opengl - 无法通过几何着色器工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9253055/

相关文章:

glsl - webgl 着色器调试/性能/成本

c++ - 如何在编译时包含数据文件?

glsl - 如何在版本 150 中获取 GLSL 的纹理坐标?

opengl - 条件语句会减慢着色器的速度吗?

c++ - 渲染引擎设计 - 抽象出资源的 API 特定代码

c++ - OpenGL Alpha 与错误的颜色混合

c - VBO究竟如何保存其内容?

c++ - 为什么 fgetc() 读取非 ASCII 字符? (尝试加载 GLSL 着色器)

opengl-es - 如何创建一个着色器以使用距中心点的度数偏移进行 mask ?

c - highp float在GLSL中是如何呈现的?