(编辑)我使用帧缓冲区进行了工作几何选择。我的目标是在一次绘制调用中绘制巨大的场景,但我需要绘制到多重采样颜色纹理附件 (GL_COLOR_ATTACHMENT0)
并绘制到(编辑的)非多重采样纹理附件 (GL_COLOR_ATTACHMENT1)
。问题是如果我使用多重采样纹理来挑选,由于多重采样,挑选会被破坏。
我将几何 ID 写入片段着色器,如下所示:
//...
// Given geometry id
uniform int in_object_id;
// Drawed to screen (GL_COLOR_ATTACHMENT0)
out vec4 out_frag_color0;
// Drawed to pick texture (GL_COLOR_ATTACHMENT1)
out vec4 out_frag_color1;
// ...
void main() {
out_frag_color0 = ...; // Calculating lighting and other stuff
//...
const int max_byte1 = 256;
const int max_byte2 = 65536;
const float fmax_byte = 255.0;
int a1 = in_object_id % max_byte1;
int a2 = (in_object_id / max_byte1) % max_byte1;
int a3 = (in_object_id / max_byte2) % max_byte1;
//out_frag_color0 = vec4(a3 / fmax_byte, a2 / fmax_byte, a1 / fmax_byte, 1);
out_frag_color1 = vec4(a3 / fmax_byte, a2 / fmax_byte, a1 / fmax_byte, 1);
}
(该代码的要点是使用 RGB 空间存储几何 ID,然后读回用于更改立方体颜色的使用)
当我将光标向左移动一个像素时会发生这种情况:
由于立方体像素的 alpha 值:
没有多重采样效果很好。但是多重采样将我的输出颜色相乘,然后几何 id 被破坏,因此它选择具有相乘值的随机立方体。
(编辑)我不能将一个多重采样纹理目标附加到 color0 并将非多重采样纹理目标附加到 color1,它不受支持。我怎样才能在一个draw call中做到这一点?
多重采样不是我的朋友我不确定我是否理解得很好(整个帧缓冲)。无论如何,这种选择几何形状的方式对我来说看起来很糟糕(我的意思是计算 ID 到颜色)。我做得好吗?如何解决多样本问题?有没有更好的办法?
PS:抱歉英语低。:)
谢谢。