上传GL_ALPHA格式的纹理(glTexImage2D)时是否会发生转换?

时间:2013-07-04 20:29:52

标签: opengl opengl-es opengl-es-2.0

glTexImage2D的文档说

GL_RED(对于GL)/ GL_ALPHA(对于GL ES)。 “GL将其转换为浮点数并将其组合成RGBA元素,方法是将绿色和蓝色附加0,将α附加为1。每个组件都被限制在[0,1]范围内。”

我已经阅读了GL ES规范,看看它是否指定GPU内存实际上是32位还是8位,但它似乎相当含糊。任何人都可以确认上传纹理是否GL_RED / GL_ALPHA在GPU上从8位转换为32位?

我对GL和GL ES的答案很感兴趣。

2 个答案:

答案 0 :(得分:3)

  

我已经阅读了GL ES规范,看看它是否指定GPU内存实际上是32位还是8位,但它似乎相当模糊。

嗯,这是什么。实际细节留待实际实施来决定。在规范中赋予这样的自由允许实际实现包含针对目标系统紧密定制的优化。例如,某个GPU可以更好地处理每通道10比特的格式,因此它可以随意转换为这种格式。

因此一般不可能说,但对于特定的实现(即GPU +驱动程序),可能会选择某种格式。哪一个取决于GPU和驱动程序。

答案 1 :(得分:0)

继datenwolf所说的之后,我在“POWERVR SGX”中找到了以下内容 OpenGL ES 2.0应用程序开发建议“文档:

  

<强> 6.3。纹理上传
  当您通过glTexImage2D将纹理上传到OpenGL ES驱动程序时,输入数据通常是线性扫描线   格式。但是,在内部,POWERVR SGX采用了错综复杂的布局(即   遵循平面填充曲线)以大大提高内存访问   纹理时的局部性。因为这种不同的布局上传   纹理总是需要稍微昂贵的重新格式化   操作,无论输入像素格式是否准确   是否匹配内部像素格式。

     

出于这个原因我们   建议您在应用程序或上传所有必需的纹理   级别启动时间,以便在不导致任何帧率下降时   稍后会上传其他纹理。

     

你应该特别   避免将纹理数据中间帧上传到具有的纹理对象   已经在框架中使用过。

相关问题