在Windows上的Chrome上使用WebGL时,最多只有256个顶点制服(因为它使用了引擎盖下的DirectX9)
任何人都可以给出关于webgl中不同统一类型有多大的明确答案吗?我看过http://bocoup.com/weblog/counting-uniforms-in-webgl/,给人的印象是vec3
,vec4
或float
都算作一个制服(这是我所期望的) - 但是,它还暗示(*)mat3
或mat4
也算作单一制服(我希望mat4
算作四个制服,因为它基本上是一个数组四个vec4
s。)
(* bocoup.com上给出的示例getProgramInfo
函数告诉我,N vec4s的数组计为N个制服 - 但是,它将mat3或mat4的大小设为'1')
答案 0 :(得分:0)
在规范
中定义https://www.khronos.org/registry/webgl/specs/latest/1.0/#6.24
The OpenGL ES Shading Language, Version 1.00,附录A,第7节"变化和制服的计数"定义了一种保守算法,用于计算着色器中所有均匀变量和变量变量所需的存储空间。 GLSL ES规范要求如果附录A中定义的打包算法成功,则着色器必须在目标平台上成功编译。 WebGL API进一步要求,如果打包算法对着色器的统一变量或程序的变量变量失败,则编译或链接必须失败。
目标体系结构中的行数不是使用固定大小的寄存器网格,而是通过以下方式确定:
在顶点着色器中计算统一变量时:getParameter(MAX_VERTEX_UNIFORM_VECTORS)
- 计算变量变量时
在片段着色器中计算统一变量时:getParameter(MAX_FRAGMENT_UNIFORM_VECTORS)
:getParameter(MAX_VARYING_VECTORS)