Iphone 在OpenGL ES中,纹理坐标应该使用什么数据类型?

Iphone 在OpenGL ES中,纹理坐标应该使用什么数据类型?,iphone,opengl-es,Iphone,Opengl Es,我注意到OpenGL文档中纹理坐标的默认数据类型是GLfloat,但我看到的许多由经验丰富的iphone开发人员编写的示例代码都使用GLshort或GLbyte。这是优化吗 GLfloat vertices[] = { // Upper left x1, y2, // Lower left x1, y1, // Lower right x2, y1, // Upper right x2, y2, }; glTexCoordPointer(2, GL_FLO

我注意到OpenGL文档中纹理坐标的默认数据类型是GLfloat,但我看到的许多由经验丰富的iphone开发人员编写的示例代码都使用GLshort或GLbyte。这是优化吗

GLfloat vertices[] = {    
  // Upper left
  x1, y2,
  // Lower left
  x1, y1,
  // Lower right
  x2, y1,
  // Upper right
  x2, y2,
};
glTexCoordPointer(2, GL_FLOAT, 0, iconSTs);
vs


GLFloat与GLByte是一个由顶点决定大小的问题。
在OpenGL中,您可以指定几何图形的基础数据类型。
我没有在iphone上编程,但我很确定他们这样做是为了节省空间(也许还有计算时间)。
浮点是4字节,短是2字节,字节是。。。1字节:)

当然,你的精度会降低。

我不建议在iPhone上使用byte/short cordinate,特别是如果你是初学者的话。只需使用浮动。它们占用更多的空间,但这并不重要,直到您需要以最大速度渲染数千个顶点。此外,您必须更改纹理矩阵,以使用整数纹理坐标表示分数值,否则它们将仅指向纹理角点(0,1)。这会增加代码的复杂性

我相信他们自己不会更快,至少在iPhone上是这样。它们可以更快一些,因为在一次调用中读取数千个它们所需的内存带宽更小。如果编写第一个引擎,那么这种优化就不值得做。除非您是一名经验丰富的引擎编码人员,并将硬件推向极限,否则这永远不会成为代码中的主要瓶颈,带来微不足道的性能优势

对于其他一些OGL-ES设备,情况可能会有所不同,因为OpenGL pipline部分是在软件中实现的,并且一些设备缺少FPU,因此无法快速处理浮点。这就是为什么一些Android游戏(2009年)试图完全避免使用浮点型

GLbyte vertices[] = {    
  // Upper left
  x1, y2,
  // Lower left
  x1, y1,
  // Lower right
  x2, y1,
  // Upper right
  x2, y2,
};
glTexCoordPointer(2, GL_BYTE, 0, iconSTs);