Webgl 为什么gl.CURRENT_程序总是返回相同的着色器?
我的程序有5个着色器,一个用于显示,另一个用于管理我的粒子。 我放置了一个onmouse事件,并在handler函数中创建了一个日志:Webgl 为什么gl.CURRENT_程序总是返回相同的着色器?,webgl,Webgl,我的程序有5个着色器,一个用于显示,另一个用于管理我的粒子。 我放置了一个onmouse事件,并在handler函数中创建了一个日志: console.log (gl.getParameter (gl.CURRENT_PROGRAM)); 在控制台上,我看到制服列表,由于该列表,我可以确定在画布上触发事件时正在处理哪个着色器 但我仍然有相同的着色器,为什么 编辑:oups…当前的\u程序是我的渲染循环中的最后一个程序…因此我猜当渲染完成时鼠标事件将触发。首先,您不应该在程序上看到任何制服。如果
console.log (gl.getParameter (gl.CURRENT_PROGRAM));
在控制台上,我看到制服列表,由于该列表,我可以确定在画布上触发事件时正在处理哪个着色器
但我仍然有相同的着色器,为什么
编辑:oups…当前的\u程序是我的渲染循环中的最后一个程序…因此我猜当渲染完成时鼠标事件将触发。首先,您不应该在程序上看到任何制服。如果你这样做 第二个JavaScript不执行多任务[1]。相反,它对事件作出反应。当事件发生时,它调用该事件的侦听器JavaScript函数。这些函数运行到完成,然后调用下一个事件的侦听器 因此,在JavaScript程序中,您可能至少有两个事件侦听器。一个是requestAnimationFrame事件监听器,另一个是mousemove事件监听器。他们不会互相打断。它们都运行到完成、退出,然后浏览器执行下一个事件或进入睡眠状态,直到新事件发生 大多数WebGL程序的工作方式是在单个事件(通常是requestAnimationFrame事件)期间进行渲染。在这次活动中,他们做了如下事情
for each object
set attributes for object
gl.useProgram(program object needs)
set uniforms
draw
然后事件退出。稍后,您的mousemove事件将出现。这意味着从mousemove事件侦听器内部调用的gl.getParametergl.CURRENT_程序始终将显示requestAnimationFrame事件中使用的最后一个程序
[1] 当然除了网络工作者