我试图了解2个API之间的区别。 例如,如果我没有弄错的话,两个呼叫都是相同的:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
第三个参数'param'包含常量值(例如:GL_REPEAT),因此无论是float还是整数类型都无关紧要。
请解释。
答案 0 :(得分:4)
它只是函数的整数和浮点版本。
如果您传递枚举的 pname (第二个)参数为GL_TEXTURE_WRAP_S
,则应使用glTexParameteri
,但对于其他possible values,例如GL_TEXTURE_MIN_LOD
和GL_TEXTURE_MAX_LOD
使用glTexParameterf
传递float参数是有意义的。有关是否使用int或float版本的更多信息,请参阅链接的doc,具体取决于您设置的 pname 。传递GL_REPEAT
之类的枚举时,您应该使用glTexParameteri
,但如果您使用glTexParameterf
,驱动程序很可能只会转换它。
例如(来自文档):
<强> GL_TEXTURE_MIN_LOD 强> 设置最小细节级别参数。此浮点值限制了最高分辨率mipmap(最低mipmap级别)的选择。初始值为-1000。
<强> GL_TEXTURE_MAX_LEVEL 强> 设置最高定义的mipmap级别的索引。 这是一个整数值。初始值为1000。
您可以根据第二个参数使用正确的版本。
答案 1 :(得分:1)
glTexParameteri()
用于整数和枚举参数,glTexParameterf()
用于浮点参数。在OpenGL 4.5规范中,每个参数的类型列于第225/226页的表8.17中。
对我来说不完全清楚的部分是你必须使用与参数类型匹配的函数。换句话说,如果使用&#34;错误&#34;功能是一个错误。在这方面,规范的旧版本似乎有点含糊不清。例如,从3.3规范(以及我看过的许多其他版本):
在命令的第一种形式中,param是一个值,可以设置一个单值参数;在其余形式中,params是一个参数数组,其类型取决于所设置的参数。
这表明至少对于数组形式需要使用正确的类型。如果同样的事情适用于标量形式,那似乎有些模棱两可。
从4.2规范开始,有一个明确的定义。上面引用的段落后跟(从4.5规范中复制):
按照第2.2.1节
中的规定执行数据转换
其中2.2.1节包含了如你所期望的在整数和浮点数之间进行转换的描述。
所以我相信这两个函数可以在4.2及更高版本中互换使用。当然,使用与参数类型匹配的函数仍然是很好的风格。在4.2之前,使用与参数类型不匹配的函数看起来可能不安全。