小编And*_*ane的帖子

是否可以在具有或不具有几何体着色器的情况下使用相同的顶点着色器和片段着色器?

所以我只是在学习几何着色器,我有一个用例。

出于性能方面的考虑,我不想一直使用几何着色器,甚至也不想使用它,因为大多数时候大多数对象都不需要它。但是,当我确实需要它时,顶点着色器和片段着色器应该做同样的事情。我可以重用顶点和片段着色器吗?

IE浏览器

顶点:

#version 330
in vec3 position;
out vec3 whatever;

void main()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

几何:

#version 330
layout (triangles) in;
layout (triangle_strip, max_vertices = 3) out;
in whatever[];
out whatever;

void main()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

分段:

#version 330
in whatever

void main()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

因此,在没有几何着色器的情况下,这是可行的,因为顶点out whatever对应于fragment in whatever。但是,使用几何体着色器,我最终要重新定义输入和输出。

我读到可以使用:layout (location = 0) out whatever,然后不需要相同的名称,但这对我不起作用,出现编译错误:ERROR: -1:65535: '' : storage qualifier not valid with layout qualifier id。我认为这是由于我没有足够新的opengl版本来支持该语法。

我也读过您可以使用扩展名:arb_separate_shader_objects,但是找不到使用它的任何示例。

有什么建议么?

opengl shader glsl geometry-shader

3
推荐指数
1
解决办法
1315
查看次数

标签 统计

geometry-shader ×1

glsl ×1

opengl ×1

shader ×1