Opengl glTexParameterf和glTexParameteri之间的区别是什么

Opengl glTexParameterf和glTexParameteri之间的区别是什么,opengl,Opengl,我试图理解这两个API之间的区别。 例如,如果我没有弄错的话,两个呼叫都是相同的: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 第三个参数“param”包含常量值(例如:GL_REPEAT),因此它是浮点型还是整数型并不重要 请解释。这只是函数的整数和浮点版本 如果pname(second)参

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

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
第三个参数“param”包含常量值(例如:
GL_REPEAT
),因此它是浮点型还是整数型并不重要


请解释。

这只是函数的整数和浮点版本

如果pname(second)参数是
GL_TEXTURE\u WRAP\u S
,如果要传递枚举,则应使用
glTexParameteri
,但对于其他参数,如
GL_TEXTURE\u MIN\u LOD
GL_TEXTURE\u MAX\u LOD
,使用
glTexParameterf
传递浮点参数是有意义的。请参阅链接文档以了解有关是使用int还是float版本的更多信息,该版本基于您正在设置的pname。当传递像
GL\u REPEAT
这样的枚举时,您应该使用
glTexParameteri
,但是如果您使用
glTexParameterf
,驱动程序很可能只是转换它

e、 g(来自文件):

GL\u纹理\u最小\u LOD 设置“最小详细程度”参数。此浮点值限制了最高分辨率mipmap(最低mipmap级别)的选择。初始值为-1000

GL\u纹理\u最大级别 设置定义的最高mipmap级别的索引这是一个整数值。初始值为1000


根据第二个参数使用正确的版本取决于您。

@samgak的回答涵盖了这两个函数的用途
glTexParameteri()
用于整数和枚举参数,
glTexParameterf()
用于浮点参数。在OpenGL 4.5规范中,第225/226页的表8.17中列出了每个参数的类型

我不完全清楚的是,您是否必须使用与参数类型匹配的函数。或者换句话说,如果使用“错误”函数是错误的。该规范的旧版本在这方面似乎有点模棱两可。例如,3.3规范(以及我看过的许多其他版本):

在命令的第一种形式中,param是要设置单值参数的值;在其余形式中,params是一个参数数组,其类型取决于所设置的参数

这表明至少需要为数组形式使用正确的类型。如果同样的事情适用于标量形式,那么它似乎有点模棱两可

从4.2规范开始,有一个明确的定义。上面引用的段落后面是(从4.5规范中复制):

按照第2.2.1节的规定进行数据转换

其中,第2.2.1节包括对整数和浮点之间转换的描述,正如您所期望的那样

因此,我相信这两个函数可以在4.2及更高版本中互换使用。当然,使用与参数类型匹配的函数仍然是一种很好的风格。在4.2之前,使用与参数类型不匹配的函数看起来可能不安全