我注意到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
GLbyte vertices[] = {
// Upper left
x1, y2,
// Lower left
x1, y1,
// Lower right
x2, y1,
// Upper right
x2, y2,
};
glTexCoordPointer(2, GL_BYTE, 0, iconSTs);
答案 0 :(得分:3)
我不建议在iPhone上使用字节/短坐标,特别是如果你是初学者。只需使用浮子。它们占用更多空间,但在您需要以最大速度渲染数千个顶点之前无关紧要。此外,您必须更改纹理矩阵以使用整数纹理坐标表示小数值,否则它们将仅指向纹理角(0,1)。这会增加代码的复杂性。
我相信他们自己并不快,至少在iPhone上。由于在单个调用中读取数千个内存带宽所需的内存带宽较小,因此它们可以更快一些。如果你编写第一个引擎,这种优化是不值得做的。除非您是一位经验丰富的引擎编码器并且要将硬件推向极限,否则这将永远不会成为代码中的主要瓶颈,从而带来可忽略的性能优势。
其他一些OGL-ES设备的情况可能会有所不同,因为OpenGL pipline部分在软件中实现,而某些设备缺乏FPU,因此无法快速处理浮动。这就是为什么一些Android游戏试图完全避免浮动类型(2009年)。
答案 1 :(得分:0)
GLFloat与GLByte的关系是顶点所占的大小
在OpenGL中,您可以指定几何的基础数据类型
我没有在iphone上编程,但我很确定他们这样做是为了节省空间(也许是计算时间)
Float是4个字节,short是2个字节,byte是...... 1个字节:)
当然,你用较少的位来放松精度。