计算WebGL中的制服

时间:2014-07-07 11:46:13

标签: google-chrome webgl

在Windows上的Chrome上使用WebGL时,最多只有256个顶点制服(因为它使用了引擎盖下的DirectX9)

任何人都可以给出关于webgl中不同统一类型有多大的明确答案吗?我看过http://bocoup.com/weblog/counting-uniforms-in-webgl/,给人的印象是vec3vec4float都算作一个制服(这是我所期望的) - 但是,它还暗示(*)mat3mat4也算作单一制服(我希望mat4算作四个制服,因为它基本上是一个数组四个vec4 s。)

(* bocoup.com上给出的示例getProgramInfo函数告诉我,N vec4s的数组计为N个制服 - 但是,它将mat3或mat4的大小设为'1')

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)

  •