根据我的理解,OpenGL在将所有顶点属性数据用于顶点着色器之前会将其转换为32位浮点数。但是glVertexAttribPointer函数还可以接受GL_BYTE和GL_UNSIGNED_BYTE(均为8位)数据类型。如果我缓冲并发送一个无符号字节的数组到GPU,并使用...
glVertexAttribPointer(0, 3, GL_UNSIGNED_BYTE, GL_FALSE, 3 * sizeof(unsigned char), (void*)0);
这样做会将数据作为字节数组发送/存储到GPU,然后在着色器读取时将其转换为浮点数吗?这将使我的更新速度增加四倍,内存空间减少四分之三。或者这样做是将它们作为浮点数发送/存储还是采取其他措施?是否有一种方法可以在着色器中将VBO作为整数或字节读取? glVertexAttribIPointer
是否有任何不同的功能?如果你想知道为什么,我的游戏使用256x256x256个块。