我想在WebGL中播放视频,但不支持MovieTextures。我尝试过使用Jonas的Simple MoTextures Sample for WebGL,但效果很好,但只适用于某些视频。我推断它只适用于宽高比为2:1的视频。例如示例一(640x320)或我做的那个是2000x1000。
如果我尝试使用任何其他视频,我总会收到相同的警告(数百次):
警告:绑定到纹理单元0的纹理不可渲染。也许吧 非幂2并且具有不兼容的纹理过滤。
我完全陷入了困境。代码是样本中的100%。
顺便说一句,在我的2000x1000视频中,我也收到了警告,但只有5次,视频播放效果非常好。JSlib中用于创建和更新函数的代码:
WebGLMovieTextureCreate: function(url)
{
var str = Pointer_stringify(url);
var video = document.createElement('video');
video.style.display = 'none';
video.src = str;
return videoInstances.push(video) - 1;
},
WebGLMovieTextureUpdate: function(video, tex)
{
if (videoInstances[video].paused)
return;
GLctx.bindTexture(GLctx.TEXTURE_2D, GL.textures[tex]);
GLctx.pixelStorei(GLctx.UNPACK_FLIP_Y_WEBGL, true);
GLctx.texImage2D(GLctx.TEXTURE_2D, 0, GLctx.RGBA, GLctx.RGBA, GLctx.UNSIGNED_BYTE, videoInstances[video]);
GLctx.pixelStorei(GLctx.UNPACK_FLIP_Y_WEBGL, false);
},
和C#代码:
public WebGLMovieTexture (string url)
{
m_Instance = WebGLMovieTextureCreate(url);
m_Texture = new Texture2D(0, 0, TextureFormat.ARGB32, false);
m_Texture.wrapMode = TextureWrapMode.Clamp;
}
public void Update()
{
var width = WebGLMovieTextureWidth(m_Instance);
var height = WebGLMovieTextureHeight(m_Instance);
if (width != m_Texture.width || height != m_Texture.height)
{
m_Texture.Resize(width, height, TextureFormat.ARGB32, false);
m_Texture.Apply();
}
WebGLMovieTextureUpdate(m_Instance, m_Texture.GetNativeTextureID());
}