Текстуры OpenGL с несколькими контекстами отображения - PullRequest
5 голосов
/ 24 октября 2008

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

Ответы [ 3 ]

2 голосов
/ 10 февраля 2011

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

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

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

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

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

2 голосов
/ 24 октября 2008

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

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

1 голос
/ 25 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...