渲染到目标。有些有 MSAA,有些没有
Render to targets. Some have MSAA, some don't
我有 6 个纹理。
有些是通过 :-
初始化的
void glTexImage2DMultisample( GLenum target,
GLsizei samples,
GLenum internalformat,
GLsizei width,
GLsizei height,
GLboolean fixedsamplelocations);
一些(例如描边/延迟着色/特殊效果)通过以下方式初始化:-
glTexImage2D( ... );
(主要问题) 是否可以一次渲染所有这些?即如何混合 MSAA 类型的渲染目标?
我已经试过了,但出现错误 36182
。
来自 。错误意味着:-
GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE is also returned if the value of
GL_TEXTURE_FIXED_SAMPLE_LOCATIONS is not the same for all attached
textures; or, if the attached images are a mix of renderbuffers and
textures, the value of GL_TEXTURE_FIXED_SAMPLE_LOCATIONS is not
GL_TRUE for all attached textures.
也许,这样的操作是不允许的?我已经搜索了一些解释:-
fixedsamplelocations = Specifies whether the image will use identical sample locations and the same number of samples for all
texels in the image, and the sample locations will not depend on the
internal format or size of the image. ,
If the last argument (fixedsamplelocations) is set to GL_TRUE, the image will use identical
sample locations and the same number of subsamples for each texel.
^不过,还是有一些专业术语我不会。
- 什么是
sample location
? sample locations
在 glsl 着色器中是否意味着 glLocation
?
我猜它与 GLsizei samples
相同,例如多为1或4。如果是4,则1像素=4个样本。
internal format
是不是类似于 GL_[components][size][type]
?
- 为什么
the sample locations
与 internal format
相关?
- 所以我不明白
fixedsamplelocations
到底是什么意思。
许多示例使用 GL_TRUE。什么时候应该是GL_FALSE?
在单个 FBO 中,图像要么全部进行多重采样,要么全部不进行多重采样。否则(即使 MS 图像的样本计数为 1)将导致 framebuffer completeness error。不仅所有图像必须是多重采样或非多重采样,所有图像还必须具有相同的样本数(非多重采样图像的样本数为0)。
所以你想要的是不允许的。
关于固定样本位置的内容是一个完全不同的问题。
特定样本数的多样本图像在每个像素中具有相同数量的样本。但是,在为抗锯齿目的进行渲染时,最好改变 其中 这些样本是根据屏幕的像素区域。这提高了多重采样产生的抗锯齿质量,因为它最大限度地减少了相邻采样模式之间的任何一致性。
如果您打开固定样本位置,您将强制实施不这样做。所以你会得到降低的抗锯齿质量。如果你有一些依赖于样本一致位置的着色器计算,你只需要打开它。这通常是因为您正在手动执行多重采样解析(而不是使用 blit)。
我有 6 个纹理。 有些是通过 :-
初始化的void glTexImage2DMultisample( GLenum target,
GLsizei samples,
GLenum internalformat,
GLsizei width,
GLsizei height,
GLboolean fixedsamplelocations);
一些(例如描边/延迟着色/特殊效果)通过以下方式初始化:-
glTexImage2D( ... );
(主要问题) 是否可以一次渲染所有这些?即如何混合 MSAA 类型的渲染目标?
我已经试过了,但出现错误 36182
。
来自
GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE is also returned if the value of GL_TEXTURE_FIXED_SAMPLE_LOCATIONS is not the same for all attached textures; or, if the attached images are a mix of renderbuffers and textures, the value of GL_TEXTURE_FIXED_SAMPLE_LOCATIONS is not GL_TRUE for all attached textures.
也许,这样的操作是不允许的?我已经搜索了一些解释:-
fixedsamplelocations = Specifies whether the image will use identical sample locations and the same number of samples for all texels in the image, and the sample locations will not depend on the internal format or size of the image. ,
If the last argument (fixedsamplelocations) is set to GL_TRUE, the image will use identical sample locations and the same number of subsamples for each texel.
^不过,还是有一些专业术语我不会。
- 什么是
sample location
?sample locations
在 glsl 着色器中是否意味着glLocation
?
我猜它与GLsizei samples
相同,例如多为1或4。如果是4,则1像素=4个样本。 internal format
是不是类似于GL_[components][size][type]
?- 为什么
the sample locations
与internal format
相关? - 所以我不明白
fixedsamplelocations
到底是什么意思。
许多示例使用 GL_TRUE。什么时候应该是GL_FALSE?
在单个 FBO 中,图像要么全部进行多重采样,要么全部不进行多重采样。否则(即使 MS 图像的样本计数为 1)将导致 framebuffer completeness error。不仅所有图像必须是多重采样或非多重采样,所有图像还必须具有相同的样本数(非多重采样图像的样本数为0)。
所以你想要的是不允许的。
关于固定样本位置的内容是一个完全不同的问题。
特定样本数的多样本图像在每个像素中具有相同数量的样本。但是,在为抗锯齿目的进行渲染时,最好改变 其中 这些样本是根据屏幕的像素区域。这提高了多重采样产生的抗锯齿质量,因为它最大限度地减少了相邻采样模式之间的任何一致性。
如果您打开固定样本位置,您将强制实施不这样做。所以你会得到降低的抗锯齿质量。如果你有一些依赖于样本一致位置的着色器计算,你只需要打开它。这通常是因为您正在手动执行多重采样解析(而不是使用 blit)。