Opengl 为什么glBindRenderbuffer和glRenderbufferStorage都使用“a”;“目标”;参数

Opengl 为什么glBindRenderbuffer和glRenderbufferStorage都使用“a”;“目标”;参数,opengl,opengl-es,Opengl,Opengl Es,它需要一个目标参数,但唯一可行的目标是 格兰德布弗酒店​. (我只是在学习OpenGL,今天已经找到了这两个参数;也许我可以预期这个看似无用的目标参数在许多函数中都很常见?通常情况下,核心OpenGL只为某些参数定义了一个合法值,而扩展添加了其他值。无论今天的扩展中是否定义了更多的值,显然架构师希望为将来的扩展敞开大门。原始扩展规范第30期中的target参数背后有一些基本原理。(我通常建议人们阅读相关的扩展规范,即使是已经成为核心GL功能的功能,因为这些规范通常有更多的细节,有时还包含A

它需要一个目标参数,但唯一可行的目标是 格兰德布弗酒店​.


(我只是在学习OpenGL,今天已经找到了这两个参数;也许我可以预期这个看似无用的目标参数在许多函数中都很常见?

通常情况下,核心OpenGL只为某些参数定义了一个合法值,而扩展添加了其他值。无论今天的扩展中是否定义了更多的值,显然架构师希望为将来的扩展敞开大门。

原始扩展规范第30期中的
target
参数背后有一些基本原理。(我通常建议人们阅读相关的扩展规范,即使是已经成为核心GL功能的功能,因为这些规范通常有更多的细节,有时还包含ARB(或供应商)的一些推理,特别是在“问题”部分。)

(30)处理renderbuffers的调用是否需要目标 参数这似乎不太可能用于任何事情

决议:决议,是的

不管我们称之为“目标”与否,总有一部分 上下文中用于保存当前renderbuffer的状态 结合这是必需的,这样我们就可以调用如下例程 RenderbufferStorage和{Get}RenderbufferParameter()不带 传入对象名。我们也有可能 决定使用renderbuffer目标参数 区分多采样和非多采样缓冲区。 鉴于这些原因,纹理对象的先例 我们可能会想出一些其他的渲染缓冲 在未来的目标类型中,似乎谨慎而不是全部 现在只包含目标类型的成本很高


如果文档能够提供这种情况的例子,那就太好了;你知道有哪个资源会列出发生这种情况的时间,或者至少你自己记得一个案例吗?@Jessy:
glBindBuffer(…)
可能是发生这种情况的第一个例子。缓冲区对象是OpenGL API中最繁忙的部分(就正在发明的新对象而言)。最初,当
GL\u ARB\u vertex\u buffer\u object
引入该部分API时,只有两个绑定点
GL\u ARRAY\u buffer
GL\u ELEMENT\u ARRAY\u buffer
。现在,不同类型的缓冲区有几十个不同的绑定点(例如着色器存储、统一、纹理、反馈、像素(传输)、复制等)。@Jessy:虽然这可能不是最好的类比;缓冲区对象没有显式类型,它们的角色从绑定它们的位置隐含。只需将同一缓冲区对象绑定到不同的位置,即可将其用作顶点缓冲区或统一缓冲区。但是您在这里得到了一般的想法,当引入VBO时,只有一个
glBindBuffer(…)
函数只服务于两个绑定点,而不是两个单独的绑定函数。这使得扩展API变得更加简单。你们所说的都是有用的,但对于那些只知道我现在知道的东西的人来说并不能回答这个问题。对我来说,部分答案似乎是“因为C不支持函数重载”,这也是我直到昨天才知道的。@Jessy:例如,添加了可以传递给现有函数的新值
TexImage1D
TexImage2D
CopyTexImage1D
CopyTexImage2D
GetTexImage
TexImage1D
TexImage2D
TexSubImage1D
TexSubImage2D