Я хотел бы использовать некоторые функции openGL, но ничего не связанного с визуализацией контента. Есть ли способ создать его без ЛЮБЫХ зависимостей (ни для окон, ни для какого-либо пакета [SDL, SFML, GLUT])? Разрешены только библиотеки без внешних библиотек, как и GLEW, который я использую.
Контекст openGL в консоли
Ответы (2)
Какая самая легкая кроссплатформенная библиотека, которая может статически связываться и может создавать контекст.
Как вы определяете «самый легкий»?
Две кросс-платформенные библиотеки, которые делают меньше всего, кроме создания окон OpenGL, — это FreeGLUT и GLFW.
FreeGLUT имеет дистрибутив размером около 5,2 МБ (после распаковки), а GLFW имеет дистрибутив размером 2,6 МБ. Это делает его "легче"? Скомпилированная статическая библиотека FreeGLUT в режиме выпуска под VS2008 составляет около 500 КБ; для GLFW при аналогичной компиляции - 120 КБ. Это делает его "легче"?
То, что вы хотите сделать, известно как рендеринг вне экрана. Теоретически это вполне возможно, однако практическая реализация имеет много нюансов. Самое главное во всех основных высокопроизводительных реализациях: даже если окно рендеринга не видно, вам все равно нужно, чтобы графическая система работала и была активной, а ваша программа работала в среде этой графической системы.
В Windows самый простой способ — создать невидимое окно, просто окно, которое вы создаете с помощью CreateWindowEx, но не отображаете с помощью ShowWindow; для этого вам даже не нужен цикл обработки событий. В этом окне вы создаете контекст OpenGL, как обычно, но вместо рендеринга в буфер кадра окна вы выполняете рендеринг в объект буфера кадра.
В X11/GLX все еще проще: X11/GLX предлагает PBuffers без расширений (в Windows тоже есть PBuffers, но для их создания вам сначала нужен обычный контекст OpenGL). Итак, на X11 вы можете создать PBuffer без прокси-окна. Сам PBuffer может отображаться как внеэкранный буфер; Объект кадрового буфера также работает в PBuffer, если реализация их поддерживает. Использование невидимого окна с объектом кадрового буфера, как и в Windows, также работает. В любом случае, с текущими драйверами X11 должен быть активен и привязана консоль, поэтому вы не можете не запускать дополнительный X-сервер в фоновом режиме и выполнять там внеэкранный рендеринг, но это всего лишь ограничение драйверов, а не X11, GLX или OpenGL.
Разрешены только библиотеки без внешних библиотек, как и GLEW, который я использую.
Вы можете статически связать GLEW со своей программой. Если вы хардкорщик, вы можете загрузить расширение вручную, но зачем вам это?