Текстуры OpenGL с несколькими контекстами отображения

StackOverflow https://stackoverflow.com/questions/232271

  •  04-07-2019
  •  | 
  •  

Вопрос

У меня есть неопределенное количество контекста отображения, и каждый будет отображать текстуру. Когда я вызываю glGenTextures, я получаю одно и то же имя, возвращаемое во всех контекстах отображения. Будет ли это работать? Даже если у них одинаковое имя, они все равно будут хранить и отображать разные текстуры? Если нет, что нужно сделать, чтобы обойти это?

Это было полезно?

Решение

Получение того же имени из glGenTexture и отображение одинаковой текстуры - это не одно и то же.

Имена текстур - это просто целые числа по усмотрению контекста, обычно начинающиеся с 1 и увеличивающиеся с каждым glGenTexture, но не обязательно. Реализация не обязана работать так (хотя большинство так и делают). Однако теоретически вы также можете получить более или менее «случайный» вариант. число, такое как, например, целое число, которое увеличивается для любого типа объекта (т.е. не только текстуры, но также буферы и шейдеры), или даже адрес 32-битного указателя в адресном пространстве драйвера, или какая-то другая эзотерическая вещь. Не требуется, чтобы имя было чем-то конкретным.

В устаревшем OpenGL вы могли бы даже создавать собственные имена вместо использования glGenTexture, но сейчас это уже не разрешено законом. Я не уверен, что они думали, когда это было разрешено, но в любом случае ... :)

Одно и то же число (имя) в другом контексте обычно будет другой текстурой или, возможно, вообще не будет текстуры. Таким образом, если вы видите одну и ту же текстуру в другом контексте с одним и тем же именем текстуры, то у вас либо общие контексты, либо драйвер глючит.

Обратите внимание, что если вы используете wglCreateContextAttribsARB, вторым параметром является дескриптор уже существующего контекста (или ноль). Если вы предоставите здесь дескриптор контекста, вы будете иметь общие контексты, даже без явного вызова glShareLists. Может быть, это случилось случайно.

Другие советы

Текстуры (по умолчанию) не передаются между контекстами - вы должны явно включить это, но то, как вы это делаете, зависит от платформы.

На win32 это wglShareLists , а на большинстве других платформ это указывается при создании контекста (например, с помощью параметра share для aglCreateContext на OS-X).

Насколько я знаю, я не включил обмен текстур. однако одна и та же текстура отображается во всех контекстах отображения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top