OpenGL documentation对这两个功能的说法很少。何时使用glTexParameterIiv
代替glTexParameteriv
甚至glTexParameterfv
是有意义的?
如果使用glTexParameterIiv或glTexParameterIuiv指定GL_TEXTURE_BORDER_COLOR的值,则值将以未修改的方式存储,内部数据类型为整数。如果使用glTexParameteriv指定,则使用以下等式将它们转换为浮点: f =(2c + 1)/(2 b -1)。如果使用glTexParameterfv指定,它们将不加修改地存储为浮点值。
答案 0 :(得分:2)
您使用粘贴的代码段回答了自己的问题。传统纹理是定点的(无符号标准化,其中 255 之类的值通过标准化转换为 1.0 ),但GL 3.0引入了整数(有符号/无符号整数)纹理类型(其中整数值保持整数)。
如果你有一个整数纹理并想要分配一个边框颜色(用于GL_CLAMP_TO_BORDER
环绕模式),你可以使用这两个函数的一个变体(取决于你是想要签名还是无符号)。
您无法过滤整数纹理,但仍可以使用纹理坐标换行行为。由于所述纹理是整数并且glTexParameteriv (...)
规范化它传递的颜色值,因此必须创建一个额外的函数来保持颜色数据的整数。
你会发现glVertexAttribIPointer (...)
等同样的事情;添加对整数数据的支持(而不是简单地将整数数据转换为浮点数)到GL管道需要很多新命令。