【问题标题】:Getting WebGLTexture by texture pointer通过纹理指针获取 WebGLTexture
【发布时间】:2021-06-03 14:06:47
【问题描述】:

我正在开发一个使用统一 WebGL 的项目。 我需要做的是在另一个浏览器窗口中显示游戏场景。 所以我尝试将场景渲染到 RenderTexture,并将纹理指针(来自 GetNativeTexturePtr())发送到浏览器端。 当我发送纹理指针时,我使用了这个 jsdll 函数,例如:

ExtractWindow: function (windowId, w, h, texturePtr) {
    ViewerManager.OnExtractWindow(windowId, w, h, GLctx, GL.textures[texturePtr]);
}

我使用 GL.textures[texturePtr] 因为我在 https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html 中看到它。 我认为它应该返回 WebGLTexture 对象,但它返回 null。 这是我知道获得 WebGLTexture 的唯一方法(我几乎是 WebGL 和 Javascript 的初学者)。我什至不确定 GL.texutre[] 是统一方法还是 WebGL 方法。 有人知道“GL.texture[]”是如何工作的吗?或者还有其他方法可以通过纹理指针获取 WebGLTexture 吗?

感谢您阅读我的问题。

【问题讨论】:

  • 我不知道 Unity 方面,但在 webgl 方面,您需要渲染到帧缓冲区 - RenderTexture 可能已经是一个,如果您可以渲染到它 - 绑定该帧缓冲区(gl.bindFramebuffer)然后是 gl.readPixels。 readPixels 并在其他地方写入它们非常慢,所以我希望这不是实时的。

标签: javascript unity3d webgl textures


【解决方案1】:

回答我自己的问题。 “GL.textures[texturePtr]”返回null的原因是因为texturePtr为0。我发现GetNativeTexturePtr()有时有效,有时只返回0,我不确定它为什么会这样。但我发现的解决方法是在调用 GetNativeTexturePtr() 之前调用渲染纹理的“colorBuffer”属性,然后返回正确的 ptr。

        var cb = _renderTexture.colorBuffer;
        var texId = _renderTexture.GetNativeTexturePtr().ToInt64();
        // texId is not 0 anymore.

【讨论】:

    【解决方案2】:

    单独的 RenderTexture 构造函数不会创建底层硬件对象,因此底层原生 ptr 将为 null,直到有东西强制创建它。

    查看https://docs.unity3d.com/ScriptReference/RenderTexture.Create.html

    尝试在 _renderTexture.GetNativeTexturePtr() 之前调用 _renderTexture.Create()。

    我不确定,但尝试访问尚未创建的渲染纹理上的颜色缓冲区可能会在后台创建它。

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 2011-09-17
      • 1970-01-01
      • 2011-12-21
      • 2012-01-07
      • 1970-01-01
      • 2023-03-16
      相关资源
      最近更新 更多