从int转换gl_VertexID到float非常慢

依巴汀

我正在渲染一个八叉树,其中包含指向FBO的点。

我想要一种方法来标识要渲染的点。

为此,我为每个八叉树节点设置了一个ID(16位整数)。我使用gl_VertexID来标识节点中的一个点(每个节点不超过65k点)

我将其输出到RGBA纹理,并将八叉树节点标识符写入rg颜色分量,并将顶点ID写入ba颜色分量。

vec4 getIdColor() {
    float r = mod(nodeID, 256.0) / 255.0;
    float g = (nodeID / 256.0) / 255.0;
    float b = mod(gl_VertexID, 256.0) / 255.0;
    float a = (gl_VertexID/ 256.0) / 255.0;

    return vec4(r, g, b, a);
}

问题是从int转换为float的gl_VertexID确实很慢(渲染200万点时,我从60FPS变为2-3 FPS)。

编辑:我只是使用时也有完全相同的问题gl_VertexID如果我删除mod并公正地写

return vec4(gl_VertexID);

我对帧率有同样的打击。所以问题出在gl_VertexID,而不是mod

是否有解决方法(也是什么原因造成的?)

依巴汀

我发现了问题。在着色器中,如果正在使用if/else级联(我知道这不是一个好习惯,但它是一个测试着色器)。

似乎我超出了某些缓存大小。动态生成着色器代码,仅使用条件评估为正确的部分才能解决此问题。条件的数量和对结果的访问都gl_VertexID减慢了渲染速度。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章