Как переиспользовать opengl-объекты в разных окнах?

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

1. Создайте контекст OpenGL для каждого окна:
- Используйте функцию glXCreateContext() для создания контекста OpenGL в Linux, или
- Используйте функцию wglCreateContext() для создания контекста OpenGL в Windows.

2. После создания контекста OpenGL для каждого окна, убедитесь, что текущий контекст установлен в тот, который вы хотите использовать.
- В Linux вы можете использовать функцию glXMakeCurrent() для установки текущего контекста OpenGL для каждого окна.
- В Windows вы можете использовать функцию wglMakeCurrent() для установки текущего контекста OpenGL для каждого окна.

3. Загрузите свои ресурсы OpenGL, такие как текстуры, шейдеры и т.д., используя текущий контекст OpenGL для каждого окна. Вы можете сохранить идентификаторы этих ресурсов для дальнейшего использования.

4. Если вы хотите передать эти ресурсы из одного окна в другое, вам нужно будет сделать следующее:
- Сохраните текущий контекст OpenGL для исходного окна.
- Установите текущий контекст OpenGL для целевого окна.
- Загрузите ресурсы из исходного окна в текущий контекст целевого окна.

Сохранить исходный и целевой контексты можно, к примеру, с помощью глобальных или локальных переменных.

5. Не забудьте сохранить или передать идентификаторы ресурсов для дальнейшего использования. Это важно, потому что контекст OpenGL содержит свою собственную таблицу ресурсов, и вы не можете просто передавать указатели на них между контекстами.

6. При необходимости освободите память и удалите ресурсы OpenGL.
Вызывайте функцию glDeleteTextures() для удаления текстур, glDeleteProgram() для удаления шейдеров и программ, и т.д.

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

Не забывайте, что управление контекстами OpenGL может быть сложным и подверженным ошибкам. Поэтому важно тщательно проверять и обрабатывать ошибки при работе с контекстами OpenGL.