glTexParameterf与glTexParameteri有什么区别?

时间:2015-04-28 12:21:58

标签: opengl

我试图了解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还是整数类型都无关紧要。

请解释。

2 个答案:

答案 0 :(得分:4)

它只是函数的整数和浮点版本。

如果您传递枚举的 pname (第二个)参数为GL_TEXTURE_WRAP_S,则应使用glTexParameteri,但对于其他possible values,例如GL_TEXTURE_MIN_LODGL_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)

@ samgak的回答涵盖了这两个功能的目的。 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之前,使用与参数类型不匹配的函数看起来可能不安全。