c - OpenGL VBO : Short or Float?

标签 c opengl

我需要决定是否应该为我的(静态)VBO 顶点使用 GL_UNSIGNED_SHORT 或 GL_FLOAT。 Shorts 使用的内存少 2 倍,但它是否也会降低渲染速度(因为 GPU 必须将它们转换为 float )?纹理坐标也是一样,我可以对较小的纹理使用 GL_UNSIGNED_BYTE,对较大的纹理使用 GL_UNSIGNED_SHORT(使用纹理矩阵映射到 0-1),但我担心这可能会降低渲染速度。

最佳答案

对于任何现代硬件(支持 DX10 或更好),您可以假设属性读取性能始终由内存访问决定,而不是从整数到 float 的转换。它本质上是免费

这对于 DX9 级硬件也是如此,但某些硬件具有某些顶点格式,它不能很好地工作。

话虽这么说,但我不太确定能否将无符号字节用于纹理坐标。在大多数模型中,对于纹理坐标,您通常需要比每个纹素更高的精度。无符号短裤通常没问题,但字节精度不够,无法正常工作。

关于c - OpenGL VBO : Short or Float?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8872203/

相关文章:

c++ - 无法关闭窗口

c - 为什么 C 是编译器的语言——当 Scheme 子集似乎更合适时?

C++ glfw3 : one (of the two) windows in fullscreen mode is not really fullscreen (Mac Os)

java - 天空盒不显示纹理

c - 我应该在 Visual Studio 中投 void** 返回吗

c - GCC 如何优化循环内递增的未使用变量?

c - 凯撒密码和反向文本程序的问题

opengl - 在 Qt5.1 和 OpenGL 中从 'QAbstractOpenGLFunctions*' 到 'QOpenGLFunctions_4_3_Core*' 的无效转换

opengl - Kotlin中glBufferData()上的GL_INVALID_OPERATION

c++ - 为什么从帧缓冲区创建的纹理没有正确映射