контекст openGL в консоли - PullRequest
       47

контекст openGL в консоли

2 голосов
/ 24 сентября 2011

Я бы хотел использовать определенные функции openGL, но ничего не относилось к визуализации визуального контента. Есть ли способ создать его без каких-либо зависимостей (ни для окон, ни для какого-либо пакета [SDL, SFML, GLUT])? Допускаются только библиотеки без внешних библиотек, например, GLEW, который я использую.

Ответы [ 2 ]

5 голосов
/ 24 сентября 2011

То, что вы хотите сделать, обычно называется закадровым рендерингом.Теоретически это вполне возможно, однако в практической реализации есть много предостережений.Самое главное во всех основных высокопроизводительных реализациях: даже если окно рендеринга не видно, вам все равно нужно, чтобы графическая система работала и была активной, а ваша программа работала в среде этой графической системы.

В Windows самый простой способнужно создать невидимое окно, просто окно, которое вы создаете с помощью CreateWindowEx , но не сопоставляет с ShowWindow ;вам даже не нужен цикл обработки событий для этого.В этом окне вы создаете свой контекст OpenGL как обычно, но вместо рендеринга в оконный кадровый буфер вы рендеритесь в объект Frame Buffer.

В X11 / GLX это еще проще: X11 / GLX предлагает PBuffers без расширений(В Windows тоже есть PBuffers, но для его создания сначала нужен обычный контекст OpenGL).Таким образом, на X11 вы можете создать PBuffer без окна прокси.Сам PBuffer может отображаться как буфер вне экрана;Frame Buffer Object также работает в PBuffer, если реализация поддерживает их.Использование невидимого окна с объектом Frame Buffer, как и в Windows, также работает.В любом случае, с текущими драйверами X11 должен быть активным и связанной консолью, чтобы вы могли , а не запускать дополнительный X-сервер в фоновом режиме, чтобы ваш рендеринг за кадром происходил там, но это всего лишь ограничениедрайверы, а не X11, GLX или OpenGL.

Разрешены только библиотеки без внешних библиотек, например, GLEW, который я использую.

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

1 голос
/ 24 сентября 2011

Самая легкая кроссплатформенная библиотека, которая может статически связывать и создавать контекст.

Как вы определяете "самый легкий?"

Две кросс-платформенные библиотеки, которые меньше всего отличаются от создания окон OpenGL: FreeGLUT и GLFW .

FreeGLUT имеет дистрибутив размером около 5,2 МБ (после разархивирования), в то время как GLFW имеет дистрибутив объемом 2,6 МБ. Это делает это "легче"? Скомпилированная статическая библиотека FreeGLUT в режиме выпуска под VS2008 составляет около 500 КБ; один для GLFW при подобной компиляции - 120 КБ. Это делает его «легче»?

...