我最近将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();
},
任何熟悉错误的人都可以推荐一个解决方法吗?
答案 0 :(得分:1)
我遇到了同样的问题。在深入研究之后,我开始仔细查看日志,发现Unity 5.5.2在启动时有如下消息。
Initialize engine version: 5.5.2f1 (3829d7f588f3)
UnityLoader.js:2 Creating WebGL 2.0 context.
Renderer: WebKit WebGL
Vendor: WebKit
Version: OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))
GLES: 3
与Unity 5.4相比,有一条消息:
Initialize engine version: 5.4.0f3 (a6d8d714de6f)
Creating WebGL 1.0 context.
Renderer: WebKit WebGL
Vendor: WebKit
Version: WebGL 1.0 (OpenGL ES 2.0 Chromium)
GLES: 0
请注意,API版本不同。看到我进入WebGL播放器设置并在“其他设置”下进行了搜索。你可以取消选中“自动图形API”#39;并删除WebGL 2.0支持,这将支持Unity回到旧的API。我不知道如何为WebGL 2.0修复此问题,但至少应该让您的视频正常工作。
注意:* 这是一个不错的解决方法,假设您不需要访问较新的API。我希望有人会有更好的答案并知道如何修复新API的代码。