我正在运行一个动画循环,其中我收到的错误是...
GL ERROR :GL_INVALID_OPERATION : glDrawElements: Source and destination textures of the draw are the same.
在2到3个动画帧请求之后会弹出此错误,具体取决于我是刷新还是刷新屏幕 - 即使这样,错误的时间也不一致。硬刷新有时可能会延迟错误显示直到3帧请求之后,但刷新和硬刷新的大部分时间都会在2帧请求后显示错误。基于这些观察,问题似乎是在异步组件中。我也有一个更简单的玩具版本的循环运行没有任何错误。我越来越多地简化了错误的程序(它现在只是显示一个不移动的立方体),但仍然无法找到问题的根源。
该程序非常复杂,所以很难确定在这里展示什么代码,所以相反我希望得到一个答案,可以教我一些关于这样一般问题的解决方法,所以我可以随时应用它遇到类似情况:我的问题是,对于这样的问题,程序中的最佳候选区域是什么?知道了,我可以集中精力。
我希望这是有道理的 - 如果您需要进一步澄清,请告诉我。谢谢!
更新
这看起来非常基本,但我会补充一点,当我在场景中没有任何对象(立方体,轴助手等)并且让其他所有内容保持不变时,错误就会消失。
< / LI>另外,我想知道是否因为丢失了上下文而发生这种错误?与so一样。
答案 0 :(得分:0)
您可能需要发布您的代码,但只是猜测......
首先,错误正是它所说的。您有一个附加到当前帧缓冲区的纹理。同样的纹理也被分配给一些纹理单元。
为什么间歇性地发生我只能猜测。如果您从图像或甚至从dataURL加载纹理,它们会加载异步。在缓存中或者如果你在本地测试它们会很快加载。所以,我的猜测是你没有正确设置每一帧的纹理单元(为着色器使用的每个纹理单元调用gl.activeTexture
和gl.bindTexture
)。当您的图像最终被异步下载时,您可以调用gl.bindTexture
来上传纹理。最终会将纹理分配给当前活动纹理单元,并弄乱您的设置。