glTexParameterIiv 和 glTexParameterIuiv 的用例是什么?
What's the use case of glTexParameterIiv and glTexParameterIuiv?
OpenGL documentation对这两个函数的描述很少。何时使用 glTexParameterIiv
而不是 glTexParameteriv
甚至 glTexParameterfv
?
If the values for GL_TEXTURE_BORDER_COLOR are specified with glTexParameterIiv or glTexParameterIuiv, the values are stored unmodified with an internal data type of integer. If specified with glTexParameteriv, they are converted to floating point with the following equation: f=(2c+1)/(2b−1). If specified with glTexParameterfv, they are stored unmodified as floating-point values.
您用粘贴的代码段回答了您自己的问题。传统纹理是定点的(无符号归一化,其中像255这样的值通过归一化转换为1.0),但GL 3.0引入了积分(有符号/无符号整数)纹理类型(其中整数值保持整数)。
如果你有一个整数纹理并想指定一个边框颜色(用于 GL_CLAMP_TO_BORDER
环绕模式),你可以使用这两个函数的一个变体(取决于你想要有符号还是无符号).
你不能过滤整数纹理,但你仍然可以有纹理坐标环绕行为。由于所述纹理是整数并且 glTexParameteriv (...)
规范化它传递的颜色值,因此必须创建一个额外的函数来保持颜色数据的整数。
您会在 glVertexAttribIPointer (...)
等中发现同样的事情;向 GL 管道添加对整数数据的支持(而不是简单地将整数数据转换为浮点数)需要大量新命令。
OpenGL documentation对这两个函数的描述很少。何时使用 glTexParameterIiv
而不是 glTexParameteriv
甚至 glTexParameterfv
?
If the values for GL_TEXTURE_BORDER_COLOR are specified with glTexParameterIiv or glTexParameterIuiv, the values are stored unmodified with an internal data type of integer. If specified with glTexParameteriv, they are converted to floating point with the following equation: f=(2c+1)/(2b−1). If specified with glTexParameterfv, they are stored unmodified as floating-point values.
您用粘贴的代码段回答了您自己的问题。传统纹理是定点的(无符号归一化,其中像255这样的值通过归一化转换为1.0),但GL 3.0引入了积分(有符号/无符号整数)纹理类型(其中整数值保持整数)。
如果你有一个整数纹理并想指定一个边框颜色(用于 GL_CLAMP_TO_BORDER
环绕模式),你可以使用这两个函数的一个变体(取决于你想要有符号还是无符号).
你不能过滤整数纹理,但你仍然可以有纹理坐标环绕行为。由于所述纹理是整数并且 glTexParameteriv (...)
规范化它传递的颜色值,因此必须创建一个额外的函数来保持颜色数据的整数。
您会在 glVertexAttribIPointer (...)
等中发现同样的事情;向 GL 管道添加对整数数据的支持(而不是简单地将整数数据转换为浮点数)需要大量新命令。