Вместо использования glGenTextures()
для получения неиспользуемого идентификатора текстуры. Могу ли я случайно выбрать число, скажем, 99999 и использовать его?
Я, конечно, запрос:
glIsTexture( m_texture )
и убедитесь, что он ложный, прежде чем продолжить.
Вот немного фона:
Я разрабатываю приложение для создания слайдшоу изображений для Mac. Предварительный просмотр слайд-шоу безупречен. Чтобы сохранить слайд-шоу, я рендеринг в FBO. Я создаю контекст AGL, создаю экземпляр текстуры с glGenTextures()
и рендеринг в буфер кадров. Все хорошо, за исключением незначительного вопроса.
После того, как я сохранил слайд-шоу и вернулся в главное окно, все мои эскизы изображений серого цвета, то есть текстуры были очищены.
Я исследовал это и обнаружил, что миниатюры изображений и моя текстура FBO так или иначе имеют одинаковый идентификатор текстуры. Когда я удаляю свою текстуру FBO в конце операции сохранения слайд-шоу, текстуры миниатюр также теряются. Это странно, потому что у меня во время сохранения есть AGL-контекст, а у основного пользовательского интерфейса есть еще один AGL-контекст, предположительно созданный в фоновом режиме Core Image и над которым у меня нет контроля.
Так что мои варианты, как я вижу это сейчас, это:
- Не удалять текстуру FBO.
- Случайно выбирайте высокий ID текстуры в надежде, что основной интерфейс не будет его использовать.
На самом деле я прочитал, что вам не обязательно удалять свою текстуру, если вы удаляете контекст AGL opengl. Потому что удаление вашего контекста openGL автоматически удаляет все связанные текстуры. Это правда? Если да, вариант 1 имеет больше смысла.
Я понимаю, что здесь происходят забавные вещи, которые я не могу объяснить. Например, после того, как я сохранил свое слайд-шоу с изображениями в файл .mov
, я удаляю контекст, который был создан в том же классе. По праву это не должно влиять на текстуры, созданные в другом контексте. Но это так, и я серьезно не могу этого объяснить.