渲染缓冲对象是OpenGL中用于存储单个渲染图像的数据存储对象。
void glBindRenderbuffer( enum target, uint renderbuffer );
void glCreateRenderbuffers( sizei n, uint *renderbuffers );
void glGenRenderbuffers( sizei n, uint *renderbuffers );
void glDeleteRenderbuffers( sizei n, const uint *renderbuffers );
boolean glIsRenderbuffer( uint renderbuffer );
void glRenderbufferStorageMultisample( enum target, sizei samples, enum internalformat, sizei width, sizei height );
void glNamedRenderbufferStorageMultisample( uint renderbuffer, sizei samples, enum internalformat, sizei width, sizei height );
void glRenderbufferStorage( enum target, enum internalformat, sizei width, sizei height );
void glNamedRenderbufferStorage( uint renderbuffer, enum internalformat, sizei width, sizei height );
void glGetRenderbufferParameteriv( enum target, enum pname, int *params );
void glGetNamedRenderbufferParameteriv( uint renderbuffer, enum pname, int *params );
void glBindRenderbuffer( enum target, uint renderbuffer );
target
:指定要绑定的渲染缓冲目标,必须是 GL_RENDERBUFFER。renderbuffer
:指定要绑定的渲染缓冲对象的名称。当前的 RENDERBUFFER
绑定可以通过调用 GetIntegerv
函数并设置 pname
为 RENDERBUFFER_BINDING
来确定。
void glCreateRenderbuffers( sizei n, uint *renderbuffers );
通过 CreateRenderbuffers 创建的每个渲染缓冲对象的状态类似于将从 GenRenderbuffers 返回的名称绑定到 RENDERBUFFER 目标时获得的状态。但是,对 RENDERBUFFER 的现有绑定不受影响。
void glGenRenderbuffers( sizei n, uint *renderbuffers );
调用此函数时,并不会创建具有实际内存和状态的渲染缓冲,它仅仅为每个请求的对象分配一个未使用的名称。
void glDeleteRenderbuffers( sizei n, const uint *renderbuffers );
当一个渲染缓冲对象被删除后,它将不再包含任何内容,并且其名称会被释放,再次变为未使用状态。如果当前绑定到RENDERBUFFER目标的渲染缓冲对象被删除,那么效果等同于执行了BindRenderbuffer函数,将目标设为RENDERBUFFER且名称设为0(即解除绑定)。
boolean glIsRenderbuffer( uint renderbuffer );
如果 renderbuffer 参数是一个现有渲染缓冲对象的名称,则 IsRenderbuffer 返回 TRUE。
如果 renderbuffer 是零,或者它是一个非零值,但不对应于渲染缓冲对象的名称,则 IsRenderbuffer 返回 FALSE。
void glRenderbufferStorageMultisample( enum target, sizei samples, enum internalformat, sizei width, sizei height );
void glNamedRenderbufferStorageMultisample( uint renderbuffer, sizei samples, enum internalformat, sizei width, sizei height );
参数:
target
:指定目标,必须为 GL_RENDERBUFFER,表示渲染缓冲对象。samples
:指定多重采样的期望采样数量。如果 samples
为零,则 RENDERBUFFER_SAMPLES
为零。否则,为渲染缓冲图像分配的实际采样数取决于实现,但保证大于或等于 samples
。internalformat
:指定渲染缓冲对象的内部格式,必须为可进行颜色渲染、深度渲染或模板渲染的格式,如:GL_RGBA8, GL_DEPTH_COMPONENT24, 或 GL_STENCIL_INDEX8。width
和 height
:指定渲染缓冲对象的像素尺寸。当调用该函数时,它会创建一个新的、具有指定大小和采样率的渲染缓冲区,并且根据internalformat参数设置其内部数据格式。原有的数据会被删除,新分配的缓冲区内容初始状态未定义。
函数成功执行后,它们会删除当前渲染缓冲图像的所有现有数据存储,其内容变为未定义。同时,以下状态会被设置:
RENDERBUFFER_WIDTH
被设为 width
RENDERBUFFER_HEIGHT
被设为 height
RENDERBUFFER_INTERNAL_FORMAT
被设为 internalformat
void glRenderbufferStorage( enum target, enum internalformat, sizei width, sizei height );
void glNamedRenderbufferStorage( uint renderbuffer, enum internalformat, sizei width, sizei height );
// 等价于
glRenderbufferStorageMultisample(target,0,internalformat,width,height);
glNamedRenderbufferStorageMultisample(renderbuffer,0,internalformat,width,height);
void glGetRenderbufferParameteriv( enum target, enum pname, int *params );
void glGetNamedRenderbufferParameteriv( uint renderbuffer, enum pname, int *params );
对于GetRenderbufferParameteriv
函数,其查询的目标是绑定到target
上的渲染缓冲对象,这里target
必须设置为RENDERBUFFER
。而对于GetNamedRenderbufferParameteriv
函数,renderbuffer
参数直接指定了渲染缓冲对象的名字。
指定渲染缓冲对象中与pname
对应的参数值将被返回到params
指向的整型数组中。
如果 pname
是 RENDERBUFFER_WIDTH
、RENDERBUFFER_HEIGHT
、RENDERBUFFER_INTERNAL_FORMAT
或RENDERBUFFER_SAMPLES
,则params
将分别包含渲染缓冲对象图像的像素宽度、像素高度、内部格式或采样数。
如果 pname
是RENDERBUFFER_RED_SIZE
、RENDERBUFFER_GREEN_SIZE
、RENDERBUFFER_BLUE_SIZE
、RENDERBUFFER_ALPHA_SIZE
、RENDERBUFFER_DEPTH_SIZE
或RENDERBUFFER_STENCIL_SIZE
,则params
将分别包含渲染缓冲对象图像红、绿、蓝、alpha、深度或模板组件的实际分辨率(即当前实际分配的分辨率,而非定义图像时指定的分辨率)。