Поэтому я пытаюсь сделать рендеринг приложения OpenGL с более высоким разрешением, чем обычно. Я уже создал общую библиотеку, которая перехватывает большинство соответствующих функций GLX/OpenGL. Вот мой текущий подход (на высоком уровне):
When my hooked SwapBuffers() is called
Unbind my FBO
Call the (original/unhooked) SwapBuffers()
Bind my FBO
Set the viewport to (0, 0, HIGH_RES_X, HIGH_RES_Y)
Set the scissor region to (0, 0, HIGH_RES_X, HIGH_RES_Y)
return
Этот подход не работает для (большинства) приложений. Я подозреваю, что это связано с тем, что некоторые приложения выполняют поиск текстур (для операций с экранным пространством) путем деления glFragCoord.xy
на униформу, которая представляет их разрешение экрана (для преобразования из экранного пространства в координаты текстуры).
Если изменение размера вывода невозможно, мне интересно, можно ли получить содержимое, нарисованное в буфере кадра по умолчанию (то есть как цвет, так и буфер глубины) без использования glReadPixels
. В идеале должен быть способ получить доступ к этим данным в виде текстуры (так что она уже находится на графическом процессоре). Я слышал кое-что об объектах пиксельного буфера — не предотвратит ли использование одного из них остановку конвейера?
glDrawBuffers
совершенно разные. - person Nicol Bolas   schedule 23.12.2017