为什么glBindRenderbuffer和glRenderbufferStorage都采用“目标”参数?

时间:2014-04-16 20:24:34

标签: opengl opengl-es

  

它需要一个目标参数,但唯一可行的目标是   GL_RENDERBUFFER。

http://www.opengl.org/wiki/Renderbuffer_Object

https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBindRenderbuffer.xml

http://www.opengl.org/wiki/GlRenderbufferStorage

(我刚刚学习OpenGL,今天已经发现了这两个;也许我可以期待这个看似无用的目标参数在许多函数中都很常见?)

2 个答案:

答案 0 :(得分:7)

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

  

(30)处理渲染缓冲区的调用是否需要目标            参数?这似乎不太可能用于任何事情。

     

决议:已解决,是

     

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

答案 1 :(得分:4)

核心OpenGL通常只为某些参数定义一个合法值,但扩展会添加其他参数。无论今天在扩展中是否有更多的值定义,显然建筑师希望将这扇门留给未来的扩展。