无法通过几何着色器工作

发布于 2025-01-04 20:54:42 字数 1320 浏览 4 评论 0原文

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

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

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

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

VERTEX SHADER:

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

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

FRAGMENT SHADER:

#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);
}

GEOMETRY SHADER:

#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.articleprogram)

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);

I have a VBO with points in it, that I can render fine with a vertex and fragment shader, but when I add a pass through geometry shader, I see nothing. I'm using MRT for glow, but in this example I don't touch it.

From what I've seen on other posts, it looks like there may be issues with passing values from one stage to another, so I removed all my varyings but it still does not work.

I set up the program parameters after linking - hopefully that's alright.

Any ideas why disabling the geometry shader produces white particles, but enabling it shows nothing?

VERTEX SHADER:

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

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

FRAGMENT SHADER:

#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);
}

GEOMETRY SHADER:

#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();
}

Setting up params (after program linking, program is 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);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

遥远的她 2025-01-11 20:54:42

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

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

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

These parameters must be set before linking.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文