glTexParameterf和glTexParameteri有什么区别?

6

我试图理解这两个API之间的区别。例如,如果我没有弄错的话,这两个调用是相同的:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

第三个参数 'param' 包含常量值 (例如: GL_REPEAT),因此它的类型是浮点型或整型都无关紧要。
请解释一下。
2个回答

8
这只是函数的整数和浮点版本。
如果第二个参数pnameGL_TEXTURE_WRAP_S,并且您正在传递枚举,则应使用glTexParameteri,但对于其他可能的值,例如GL_TEXTURE_MIN_LODGL_TEXTURE_MAX_LOD,最好使用glTexParameterf来传递浮点参数。请参见链接文档,了解根据设置哪个pname而使用int或float版本的更多信息。 当传递像GL_REPEAT这样的枚举时,应使用glTexParameteri,但是如果使用glTexParameterf,驱动程序最有可能会将其转换。
例如(来自文档):
GL_TEXTURE_MIN_LOD 设置最小细节级别参数。 此浮点值限制选择最高分辨率mipmap(最低mipmap级别)。 初始值为-1000。
GL_TEXTURE_MAX_LEVEL 设置最高定义的mipmap级别的索引。 这是一个整数值。 初始值为1000。
根据第二个参数使用正确的版本由您决定。

3
@samgak的答案已经涵盖了这两个函数的用途。glTexParameteri() 用于整数和枚举类型参数,glTexParameterf() 用于浮点型参数。在OpenGL4.5规范中,每个参数的类型都列在第225/226页的表8.17中。
对我来说不是完全清楚的部分是是否必须使用与参数类型匹配的函数。换句话说,如果使用“错误”的函数是否会导致错误。旧版本的规范在这方面似乎有些模糊。例如,从3.3规范(以及我查看的许多其他版本)中:
在命令的第一种形式中,param是要设置单个值参数的值;在其余形式中,params是一个参数数组,其类型取决于要设置的参数。
这表明至少需要为数组形式使用正确的类型。似乎有些含糊的是同样的事情是否适用于标量形式。
从4.2规范开始,有了明确的定义。上述引用的段落后面是(从4.5规范中复制):
按照2.2.1节中指定的进行数据转换
其中2.2.1节包括将整数和浮点数之间进行转换的描述。
因此,我认为这两个函数可以在4.2及更高版本中互换使用。当然,使用与参数类型匹配的函数仍然是一个好习惯。在4.2之前,使用不匹配参数类型的函数看起来可能不安全。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接