我可以将顶点attrib数组0被禁用的警告静音吗?

问题描述 投票:0回答:1

当使用 gl.disableVertexAttribArray(0)火狐浏览器(据说就像其他浏览器一样)会发出这个警告。

WebGL警告: drawElementsInstanced: 在桌面OpenGL平台(例如Mac平台)上运行时,在未启用顶点attrib 0数组的情况下绘制会迫使浏览器进行昂贵的模拟工作。最好是始终在启用顶点attrib 0数组的情况下进行绘制,通过使用bindAttribLocation将一些始终使用的属性绑定到0位置。

我知道这一点,我知道使用bindAttribLocation将一些总是使用的属性绑定到0号位置是一个很好的做法。我知道不禁用0被认为是很好的做法,我也知道到处都有写。

然而,有趣的是,这正是我想要的。在我的着色器中,我有一个3D属性和另一个2D属性,用来在3D点周围的窗口坐标中绘制一个2D标记。

gl_Position = doSomething(aPosition) + vec4(aDelta, 0.0, 0.0);

有时我只是想... aDelta 恒久和 aPosition 变化,有时则相反。我特别不想把同一个程序链接两次(把属性绑定到不同的位置),或者有两个不同的着色器,因为其余的功能都是共享的,任何一个都是浪费。

我知道性能会受到影响,但是它 就这样 那样。不管是不是模拟,结果都是正确的,而且是按照规范的。这是一个简单的函数,每次只画几个顶点。任何其他方式对我来说都是 "昂贵的仿真"。我可以向Firefox解释一下,这样它就不会淹没我的控制台(光是这个警告就占了平时所有空间的一半!),如果我把这个分发出去,我的用户就不会认为我无视警告而无能?

firefox webgl web-console
1个回答
0
投票

我可以将顶点attrib数组0被禁用的警告静音吗?

这取决于您正在做什么。一般来说,您不能禁用该警告。

你可以做的是 IF 你的着色器总是使用某个属性,你可以确保该属性使用位置0。

例如常见的是,有些着色器使用位置,有些使用位置和法线,有些使用位置和texcoords,有些使用位置、texcoords、法线和顶点颜色。也许我只有一个着色器,如果不用的话,就把texcoords、法线和顶点颜色设置为一个常数,但我总是使用缓冲区的位置。在这种情况下 之前 将程序力位置连接到位置0

 gl.bindAttribLocation(someProgram, 0, 'position');
 gl.linkProgram(someProgram);

如果没有永不禁用的属性,那么不,你不能关闭警告。


我不知道什么是正确的解决方案。我更希望没有警告,或者至少让它不出现,除非我要求它出现,比如调试器中的一些选项 "额外的WebGL警告"。我觉得这个警告大多是无用的。当然,如果我想获得最大的perf,我不应该这样做,这是很好的,但就像其他1000种编程优化一样,通常我并不关心。如果你希望它消失,你可以在浏览器上提交一个bugissuefature请求。


-1
投票

你可以通过以下方法将顶点属性设置为一个常数 vertexAttrib[1234]fv 来代替。这样您就可以明确地说明所需的行为,而不是依赖隐含的默认值。

void vertexAttrib[1234]f(GLuint index, ...)
void vertexAttrib[1234]fv(GLuint index, ...) 

Sets the vertex attribute at the passed index to the given constant value.

相关的 规格 本节为5.14.10。

© www.soinside.com 2019 - 2024. All rights reserved.