Unity3d:WebGL视频纹理

时间:2016-02-24 08:29:22

标签: javascript video unity3d webgl

我想在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());
}

0 个答案:

没有答案