OpenGL 如何解析像素格式基于整数的多采样 FBO 附加颜色缓冲区?

Posted

技术标签:

【中文标题】OpenGL 如何解析像素格式基于整数的多采样 FBO 附加颜色缓冲区?【英文标题】:How does OpenGL resolve a multisampled FBO-attached color buffer whose pixel format is integer-based? 【发布时间】:2015-05-06 05:35:33 【问题描述】:

假设我像这样格式化 renderbuffer

glRenderbufferStorageMultisample(GL_RENDERBUFFER, sampleCount, GL_R32UI, imageWidth, imageHeight);

where sampleCount >= 2.

假设我将它附加到 FBO,在其中绘制一些东西,将其传送到非多重采样 FBO 以解决多重采样,最后调用 glReadPixels 从结果图像中取回一些无符号整数(每个像素一个) .

我会得到什么整数?

其中一些可能是多个样本的混合,或者在这种情况下每个像素仅选择一个样本(可能是因为在这种情况下基于整数的格式不被认为是可混合的),而其他样本被丢弃?还是发生了其他事情?

【问题讨论】:

【参考方案1】:

在 OpenGL 4.5 规范的第 511 页,在第 18.3.1 节“Blitting Pixel Rectangles”下,它说(强调):

如果read framebuffer是multisampled(其SAMPLE_BUFFERS的有效值为1)而draw framebuffer不是(其SAMPLE_BUFFERS的值为0),则源中每个像素位置对应的样本在写入目的地之前被转换为单个样本。过滤器被忽略。如果源格式是整数类型或模板值,则为每个像素选择一个单个样本的值

所以它为每个像素选择一个样本,而不指定是哪个样本。

【讨论】:

您提供的报价说,当从多样本源到非多样本目标时,每个像素的样本都被“转换”(这通常意味着“平均") 在写入目的地之前。它没有说每个像素选择任意样本。我不确定 OP 从哪里得到整数格式也不能混合的想法。如果我在这里错了,请纠正我,但是除了平均样本之外,您还能如何解决多样本缓冲区?

以上是关于OpenGL 如何解析像素格式基于整数的多采样 FBO 附加颜色缓冲区?的主要内容,如果未能解决你的问题,请参考以下文章

SDL/opengl 多重采样不起作用

在OpenGL中采样16位高度图的正确方法是啥

像素格式

初识OpenGL (-)纹理过滤(Texture Filtering)

初识OpenGL (-)纹理过滤(Texture Filtering)

初识OpenGL (-)纹理过滤(Texture Filtering)