我最近将 Unity 更新到 5.5.1(还测试了 Unity 5.5.2p2),并且我的自定义视频播放器不再在 Chrome 上运行。不过,它可以在 Firefox 和 Edge 上运行,并且在使用 5.3 构建时也可以继续在 Chrome 上运行
我收到的错误是这样的:
[.Offscreen-For-WebGL-000001C45847DE90]GL ERROR :GL_INVALID_OPERATION : glCopyTextureCHROMIUM: texture is immutable
我不确定哪个代码会生成此错误,但这是我们在 Javascript 领域中执行的操作来显示视频:
WebGLMovieTextureCreate: function(url)
{
var str = Pointer_stringify(url);
var video = document.createElement('video');
video.style.display = 'none';
video.src = str;
video.crossOrigin='anonymous';
return videoInstances.push(video) - 1;
},
WebGLMovieTextureUpdate: function(video, tex)
{
if (videoInstances[video].paused)
return;
GLctx.bindTexture(GLctx.TEXTURE_2D, GL.textures[tex]);
GLctx.texImage2D(GLctx.TEXTURE_2D, 0, GLctx.RGBA, GLctx.RGBA, GLctx.UNSIGNED_BYTE, videoInstances[video]);
},
WebGLMovieTexturePlay: function(video)
{
videoInstances[video].play();
},
任何熟悉该错误的人都可以建议解决方法吗?
最佳答案
我也遇到了同样的问题。深入研究后,我开始仔细查看日志,发现 Unity 5.5.2 在启动时有如下消息。
初始化引擎版本:5.5.2f1 (3829d7f588f3)
UnityLoader.js:2 创建 WebGL 2.0 上下文。
渲染器:WebKit WebGL
vendor :WebKit
版本:OpenGL ES 3.0(WebGL 2.0(OpenGL ES 3.0 Chromium))
GLES:3
相比Unity 5.4有一条消息:
初始化引擎版本:5.4.0f3 (a6d8d714de6f)
创建 WebGL 1.0 上下文。
渲染器:WebKit WebGL
vendor :WebKit
版本:WebGL 1.0(OpenGL ES 2.0 Chromium)
GLES:0
请注意,API 版本不同。看到我进入 WebGL 播放器设置并在“其他设置”下,您可以取消选中“自动图形 API”并删除 WebGL 2.0 支持,这将迫使 Unity 回到旧的 API。我不知道如何解决 WebGL 2.0 的这个问题,但这至少应该能让你的视频正常工作。
注意:* 假设您不需要访问较新的 API,这是一个足够好的解决方法。我希望有人能得到更好的答案并知道如何修复新 API 的代码。
关于javascript - Unity WebGL 尝试在 Chrome 上显示视频时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42769415/