从Firefox中的事件处理程序重新绘制时,每个顶点的gl_VertexID为零

从Firefox中的事件处理程序重新绘制时,每个顶点的gl_VertexID为零,firefox,safari,webgl,webgl2,Firefox,Safari,Webgl,Webgl2,我使用gl\u VertexID进行纹理选择(将它以变量形式从顶点传递到片段着色器),这种方法适用于第一个drawerelements()。但是,当我在mousemove事件上重画帧时,我的着色器在Firefox中的每个顶点都会得到零gl_VertexID(在Chrome上,它工作得非常好) 更新:我附加着色器的代码: vertex.glsl: #版本300 es 精密中泵浮子; 在vec2结构中; 在vec3位置; 输出vec2垂直纹理; 平展int vert_vertex_id; 均匀mat

我使用
gl\u VertexID
进行纹理选择(将它以变量形式从顶点传递到片段着色器),这种方法适用于第一个
drawerelements()
。但是,当我在
mousemove
事件上重画帧时,我的着色器在Firefox中的每个顶点都会得到零
gl_VertexID
(在Chrome上,它工作得非常好)

更新:我附加着色器的代码:

vertex.glsl:

#版本300 es
精密中泵浮子;
在vec2结构中;
在vec3位置;
输出vec2垂直纹理;
平展int vert_vertex_id;
均匀mat4投影;
统一mat4视图;
void main(){
垂直纹理=纹理;
顶点id=gl顶点id;
gl_位置=投影*视图*矢量4(位置,1.0);
}
fragment.glsl

#版本300 es
精密中泵浮子;
在vec2垂直纹理中;
在int vert_vertex_id中为平面;
输出vec4 frag_颜色;
均匀整数纹理索引[最大纹理图像单位];
均匀采样2D纹理[最大纹理图像单位];
vec4获取纹理颜色(整数索引,vec2点){
开关(索引){
案例0:返回纹理(纹理[0],点);
案例1:返回纹理(纹理[1],点);
案例2:返回纹理(纹理[2],点);
案例3:返回纹理(纹理[3],点);
案例4:返回纹理(纹理[4],点);
案例5:返回纹理(纹理[5],点);
案例6:返回纹理(纹理[6],点);
案例7:返回纹理(纹理[7],点);
#如果最大纹理图像单位>=16
案例8:返回纹理(纹理[8],点);
案例9:返回纹理(纹理[9],点);
案例10:返回纹理(纹理[10],点);
案例11:返回纹理(纹理[11],点);
案例12:返回纹理(纹理[12],点);
案例13:返回纹理(纹理[13],点);
案例14:返回纹理(纹理[14],点);
案例15:返回纹理(纹理[15],点);
#恩迪夫
#如果最大纹理图像单位>=32
案例16:返回纹理(纹理[16],点);
案例17:返回纹理(纹理[17],点);
案例18:返回纹理(纹理[18],点);
案例19:返回纹理(纹理[19],点);
案例20:返回纹理(纹理[20],点);
案例21:返回纹理(纹理[21],点);
案例22:返回纹理(纹理[22],点);
案例23:返回纹理(纹理[23],点);
案例24:返回纹理(纹理[24],点);
案例25:返回纹理(纹理[25],点);
案例26:返回纹理(纹理[26],点);
案例27:返回纹理(纹理[27],点);
案例28:返回纹理(纹理[28],点);
案例29:返回纹理(纹理[29],点);
案例30:返回纹理(纹理[30],点);
案例31:返回纹理(纹理[31],点);
#恩迪夫
}
}
void main(){
对于(int i=0;i
这里,我使用从顶点着色器传递的
gl\u VertexID
,通过访问
texture\u index
来确定纹理的数量


更新2:我在Safari上发现了相同的行为(启用WebGL2后),因此我可以假设这不是Firefox bug。

我在macos 10.12上使用Firefox 68,昨天刚刚实现了一个基于gl_VertexID的drawArrays顶点着色器,它在这里工作,尽管我没有将其传递给片段着色器。我还通过requestAnimationFrame制作动画。你有什么代码可以分享吗?所以我试着把gl_VertexID传递给我的片段着色器。由于这不是一个1:1的关系,int被传递为“flat”,但这似乎受到“ProvokingVertex”规则的约束,虽然在WebGL2 API上没有公开,但在我看来它似乎被实现为每个三角形的最后一个顶点。也许你已经知道了,但我学到了一些东西:)@Peter我已经分享了shaders代码。看来你在这方面比我领先了很多。到目前为止,我还没有尝试过新的纹理数组。看起来您正在渲染GL_点,因此“激发顶点”不应成为问题。(vert_vertex_id