繁体   English   中英

可变输出基元在几何着色器GLSL中计数

[英]Variable output primitives count in geometry shader GLSL

我想在我的几何着色器中做这样的事情:

uniform int maxOutputVert;

layout(points) in;
layout(points, max_vertices=maxOutputVert) out;

但是我在编译时遇到错误:

Error: error(#132) Syntax error: 'maxOutputVert' parse error

和着色器将无法编译。

我可以理解,如果该变量在每个着色器运行中都会发生变化,那么对于内存管理来说可能会太难了,但是在这里它将通过单个绘图调用保持不变,因为制服是常量。 如果我在着色器中定义一些整数常量并将其用作max_vertices计数,它也会失败:

const int a = 5;
layout(points, max_vertices=a) out;

生成相同的错误。 那么有没有办法做到这一点,或者我只需要在该调用中放入一个数字,否则它将无法编译。 如果是第二种情况,我怎样才能确保不会超过主进程中查询的最大输出数量:

glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES, &maxoutput);

编辑:对不起,我忘了提到我正在使用ATI / AMD而且Catalyst版本是2010.1105.19.41785(这是我试过的最稳定的...)

着色器布局是在编译时确定的,并且不能像这样进行参数化。 对于布局中的每个差异,您需要一个自己的着色器。 所以你可以做的是,在上传之前修改着色器源代码。 像这样的东西:

从模板着色器源开始:

uniform int maxOutputVert;

layout(points) in;
layout(points, max_vertices=$MAXOUTPUTVERTICES$) out;

在提交glShaderSource之前,将字符串$MAXOUTPUTVERTICES$替换为数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM