Я столкнулся с той же проблемой из-за отсутствия надлежащей понижающей дискретизации из-за несоответствия местоположений выборки.То, что сработало для меня, было:
- Отдельный FBO "одиночного образца" с идентичными вложениями, форматом и размером (с прикрепленной текстурой или рендербуфером), в который нужно вписаться для понижающей дискретизации, а затем нарисовать / разбить это в окнеbuffer
- Рендеринг в оконный буфер мультисэмпла с текстурой мультисэмпла, имеющей то же количество отсчетов, что и на входе, путем передачи всех соответствующих отсчетов на фрагмент с использованием фрагментного шейдера GLSL.Это работало с включенным затенением сэмплов и является подходом излишнего для отложенного затенения, так как вы можете рассчитывать свет, тень, AO и т. Д. На сэмпл.Мне приходилось выбирать каждый образец отдельно, используя
texelFetch()
.
. С мультисэмплингом дела шли очень медленно.Хотя CSAA работал лучше, чем MSAA, я рекомендую взглянуть на шейдеры FXAA для постобработки как на значительную альтернативу, когда производительность является проблемой или требуются такие относительно новые расширения, как ARB_texture_multisample , * недоступные.
Доступ к образцам в GLSL:
vec4 texelDownsampleAvg(sampler2DMS sampler,ivec2 texelCoord,const int sampleCount)
{
vec4 accum = texelFetch(sampler,texelCoord,0);
for(int sample = 1; sample < sampleCount; ++sample) {
accum += texelFetch(sampler,texelCoord,sample);
}
return accum / sampleCount;
}
11) Должны ли быть разрешены блиты между буферами разного размера битов?
Resolved: Yes, for color buffers only. Attempting to blit
between depth or stencil buffers of different size generates
INVALID_OPERATION.
13) Как указать преобразование цветового пространства BlitFramebuffer?Допускаем ли мы, чтобы состояние ограничения контекста влияло на блиц?
Resolved: Blitting to a fixed point buffer always clamps,
blitting to a floating point buffer never clamps. The context
state is ignored.