2015-07-07 1 views
0

С новыми версиями OpenGL я могу сделать рендеринг на экране с помощью FBO и читать пиксели из FBO, а затем делать то, что я хочу делать с данными.Оффшрин рендеринга с OpenGL версии 1.2

Как я могу сделать рендеринг с помощью старых версий OpenGL (например, OpenGL 1.2), который не поддерживает FBOs?

+1

Расширения? Почему вы хотите использовать что-то настолько архаичное? – CoffeeandCode

+0

Для этого вам, вероятно, придется использовать оконный менеджер. Поэтому, если вам действительно нужно, я бы рекомендовал против этого. – CoffeeandCode

+0

Если вы не нацелитесь на древние процессоры, программный рендеринга будет быстрее и меньше хлопот, чем попытка рендеринга на древнем графическом процессоре. – user57368

ответ

1

Наследство (предварительно FBO) механизм рендеринга закадровым в OpenGL являются pbuffers. Например, для Windows они определены в WGL_ARB_pbuffer extension. Они также доступны на других платформах, как Mac, Android и т.д.

Помимо древности из pbuffers, существует фундаментальная разница кО: поддержка пиксельного буфера является расширением интерфейса оконной системы в OpenGL, в то время как Поддержка FBO - это функция OpenGL.

Одним из следствий этого является то, что рендеринг в pbuffer происходит в отдельном контексте. Где для FBO вы просто создаете новый объект framebuffer OpenGL и визуализируете его, используя обычные вызовы OpenGL в одном контексте, в случае pbuffer это отличается. Там вы создаете контекст для визуализации на внешнюю поверхность вместо поверхности окна. Внеэкранная поверхность является основным фреймбуфером этого контекста, и вы делаете весь рендеринг в pbuffer в этом отдельном контексте.

Это, пожалуйста, подумайте дважды, прежде чем использовать pbuffers. Поддержка FBO, по крайней мере, в форме расширения, существует уже давно. Мне трудно представить, как писать новое программное обеспечение, которое должно работать на аппаратном уровне, достаточно, чтобы не поддерживать FBOs.

FBOs превосходят pbuffers практически всеми возможными способами. Основные преимущества заключаются в том, что их можно использовать без API-интерфейсов, специфичных для платформы, и что они не требуют дополнительных контекстов.

Единственный случай, поддерживаемый pbuffers, который не всегда поддерживается FBOs, - это чистое отображение на экране, где вы не хотите создавать окно. Например, если вы хотите отображать изображения на сервере, который может не иметь отображения, pbuffers на самом деле являются полезным механизмом.

+0

Новое для OpenGL, так что. GlGenFrameBuffers api доступен в OpenGL 3.0, что делает FBO доступным с версии 3.0, верно? Итак, до версии 3.0. FBO предоставляются через расширения, в то время как расширения могут быть недоступны.Резервные копии необходимы, когда пропущенные расширения FBO отсутствуют. Это то, о чем я думал. Во всяком случае, я попробую как pbuffer, так и расширения FBO. –

+0

Это правильно. Я считаю, что было несколько расширений FBO, прежде чем FBO стали стандартными в 3.0. Я понимаю, что функциональность FBO довольно давно существовала до 3.0, но у ARB возникли проблемы с поиском консенсуса относительно того, как точно определить стандартную версию. –

1

Просто используйте удлинитель FBO . FBOs - это функция драйвера, а не аппаратная функция и даже самые старые графические процессоры (и я не говорю о поддержке шейдеров, простой старый конвейер с фиксированной функцией), которые могут делать FBOs. У меня все еще есть старый GeForce-2 (тот, который вышел в 1998 году) (на старом компьютере, который я использую для археологии данных, он получил ZIP-диски, параллельную шину SCSI и т. Д.), И даже это можно делать ФО.

https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt

Смежные вопросы