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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
2 788
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

Как вы создаете графический контекст? Какая у вас платформа?

Menkboy 25.10.2008 07:26

У меня точно такая же проблема. Я использую PyQt5. Платформа: linux (ubuntu16), графика Intel.

El Sampsa 17.01.2017 12:03
Ответ принят как подходящий

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

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

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

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

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

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