为啥 Tango 相机界面有两个独立的更新纹理功能?

Posted

技术标签:

【中文标题】为啥 Tango 相机界面有两个独立的更新纹理功能?【英文标题】:Why does the Tango Camera Interface have two separate update texture functions?为什么 Tango 相机界面有两个独立的更新纹理功能? 【发布时间】:2016-11-25 12:30:28 【问题描述】:

在提出这个问题时,我正在使用最新的 Tango 版本,即 Zaniah(版本 1.46,2016 年 11 月)。我有两个设备,一个 Project Tango 开发套件和一个预发布的联想手机。

有谁知道为什么TangoService_updateTexture 仅在带有目标GL_TEXTURE_EXTERNAL_OES 的纹理连接到相机接口时才有效?

有一个单独的TangoService_updateTextureExternalOes 函数被声明用于GL_TEXTURE_EXTERNAL_OES 纹理,所以这给人的印象是TangoService_updateTexture 应该可以用于其他类型的纹理,例如GL_TEXTURE_2D(为什么还有一个单独的函数? )。但是,如果您将纹理与GL_TEXTURE_2D 目标连接,则会生成一个 gl 错误,指出在调用 TangoService_updateTexture 时无法绑定纹理,现在没有看到代码,我猜测 Tango API 试图绑定纹理到GL_TEXTURE_EXTERNAL_OES 目标,无论调用哪个函数。

如果是这种情况,为什么会有两个独立的功能?

有没有其他人观察到这一点,这是预期的行为还是已知问题?

我正在努力寻找有关它的任何类型的信息或文档。

API 文档:https://developers.google.com/tango/apis/c/reference/group/camera

【问题讨论】:

【参考方案1】:

TangoService_updateTextureTangoService_updateTextureExternalOes 都使用 OES 纹理。遗憾的是,Tango 仅通过 C-API 函数支持 OES 纹理。

这两个函数的主要区别在于TangoService_updateTexture 要求TangoService_connectTexture 事先具有有效的纹理ID。这意味着当调用TangoService_connectTexture 时,您必须有一个有效的纹理ID(当然还有一个gl-context)设置。这将 gl-context 的生命周期与 Tango&android 生命周期紧密地联系在一起。在某些情况下,这可能有点难以处理。

另一方面,TangoService_updateTextureExternalOes 在调用此函数之前不需要任何纹理 id 设置,因此您可以简单地在 render() 函数中调用它,这保证了 gl-context 可用。

【讨论】:

以上是关于为啥 Tango 相机界面有两个独立的更新纹理功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google Tango 中统一使用鱼眼相机?

中国版 Office 365 (X-Tenant / Tango) 功能验证报告 - 2 基本步骤

google tango / opencv android 相机应用程序崩溃/挂起

Tango 已过期 - 无法更新 Tango 核心 - 设备不兼容

为啥我的 OpenGL 纹理不起作用?

使用渲染纹理的制作摄像头