GL_TEXTURE_2D 和 GL_TEXTURE_EXTERNAL_OES 有什么区别

What's the difference between GL_TEXTURE_2D and GL_TEXTURE_EXTERNAL_OES

我是 android 开发中的 OpenGL ES 新手。我在学习中发现了两种纹理:

  1. GL_TEXTURE_2D
  2. GL_TEXTURE_EXTERNAL_OES

有人告诉我它们彼此不兼容。

我有两个问题:

  1. 它们有什么区别?它们是完全不同类型的纹理吗?
  2. GL_TEXTURE_EXTERNAL_OES 纹理必须是 YUV 格式吗?如果不是,数据格式由什么决定?

What's the difference between them?

法线纹理完全由 OpenGL ES 定义、分配和管理。

外部纹理在别处定义和分配,并以某种实现定义的方式导入到 OpenGL ES 中。一种常见用途是导入 YUV 视频,因此外部采样器还必须能够处理颜色-space 转换和非标准内存布局(例如多平面 YUV 表面)。

Does GL_TEXTURE_EXTERNAL_OES texture has to be YUV format?

没有。系统中的一些外部实体定义了格式——它对应用程序是不可见的,并且颜色 space 转换由驱动程序堆栈神奇地处理。具体支持哪些格式是实现定义的。