Объект текстуры буфера как хранилище кадрового буфера - PullRequest
1 голос
/ 21 сентября 2011

Есть ли способ прикрепить объект буфера текстуры (ARB_texture_buffer_object) к кадровому буферу (EXT_framebuffer_object), чтобы я мог напрямую рендериться в объект буфера текстуры?

Мне нужно это, чтобы сделать точный биткопия мультисэмплового кадрового буфера (буфер цвета, буфер глубины и буфер трафарета), и эта копия находится в основной памяти, а не в VRAM.

ОБНОВЛЕНИЕ: Проблема в том, что я не могу напрямую вызывать glReadPixels для мультибуфер выборочных кадров, чтобы скопировать его содержимое.Вместо этого я должен скопировать буфер с несколькими выборками в буфер промежуточных кадров и затем вызвать glReadPixels для этого.Во время этого процесса несколько выборок усредняются и записываются в промежуточный буфер.Теперь, конечно, потеря точности при восстановлении этого буфера с помощью glWritePixels.

Я понимаю, что могу использовать текстуру с несколькими образцами в качестве резервного хранилища для объекта буфера кадра, но эта текстура будет постоянно находитьсяв VRAM, и, похоже, нет способа скопировать его в основную память без такой же потери точности.В частности, меня беспокоит потеря точности, связанная с вложением буфера глубины с несколькими выборками, а не с цветовым буфером.

Есть ли другой способ сделать точную копию (и восстановить эту копию) мультисэмплакадровый буфер в OpenGL?

TL; DR: Как скопировать точное содержимое мультикадрового кадрового буфера (в частности, буфер глубины) в основную память и восстановить это содержимое позже, без потери точности.

1 Ответ

4 голосов
/ 21 сентября 2011

OpenGL не позволяет привязывать текстуру буфера в качестве цели рендеринга.Однако я не вижу, что мешает вам сделать «точную побитовую копию мультисэмплового кадрового буфера».С какой проблемой вы сталкиваетесь, что, по вашему мнению, текстуры буфера могут решить?


Как скопировать точное содержимое буфера кадров с семплами (в частности, буфер глубины) в основную память и восстановить это содержимоепозже, без потери точности.

Нет.

И вам не нужно копировать содержимое изображения в основную память, чтобы иметь возможность сохранить и восстановить его позже.Если вам нужно сохранить содержимое мультисэмплированного изображения, просто перетащите его в другое мультисэмплированное изображение.Вы можете вернуть его назад, чтобы восстановить.Или, что еще лучше, визуализируйте текстуру с несколькими образцами, которую вы не удаляете, пока не покончили с ней.Таким образом, копирование не требуется.

...