Я хочу использовать буфер глубины субдискретизации, чтобы повысить производительность программы.В моем случае не имеет значения, есть ли артефакты или возникнут геометрические ошибки.
Я настроил свой фрейм-буфер следующим образом:
// Color attachment
glBindTexture(GL_TEXTURE_2D, colorAttachment);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 640, 360, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil);
// Depth attachment
glBindRenderbuffer(GL_RENDERBUFFER, depthAttachment);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 160, 90);
// Framebuffer
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorAttachment, 0);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthAttachment);
Однако теперь glCheckFramebufferStatus(GL_FRAMEBUFFER)
возвращаетGL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS
, что означает «Не все прикрепленные изображения имеют одинаковую ширину и высоту» в соответствии с документацией .
Существует исследовательская работа под названием " Full-3D Edge Trackingс фильтром частиц", который описывает в разделе 3.5, что они фактически использовали буфер глубины субдискретизации для увеличения производительности в своем приложении.
Буфер глубины субдискретизации: смежные пиксели вдолькрая изображения настолько тесно связаны, что тестирование каждого отдельного края края является излишним.Для трекеров с одной гипотезой распространено распределение точек выборки на расстоянии 10-20 пикселей по краю.Выборка только каждого пикселя n-го края также уменьшает требуемую полосу пропускания графики, поэтому выборка выполняется только для каждого четвертого пикселя.Вместо явного рисования пунктирных линий это достигается с помощью буфера глубины с субдискретизацией 1018 * (160 x 120), поскольку это дополнительно обеспечивает уменьшение полосы пропускания для очистки и заполнения буфера глубины.Однако это также означает, что удаление скрытой линии может быть неточным приблизительно до четырех пикселей.Кроме того, на точность системы это не влияет.
Единственные очевидные обходные пути:
- Использование программы фрагментного шейдера для поиска ранее отрендеренногобуфер глубины для применения проверки глубины вручную.
- Визуализация буфера глубины в более низком разрешении, затем повторная выборка его в большем разрешении, а затем использование его, как и раньше.
Оба подхода нене похоже, что они были бы самыми эффективными идеями.Каков самый чистый способ получения буфера глубины субдискретизации?