Я пытаюсь изменить размер QOpenGLTextures, сохраняя указанные свойства. Я знаю, что, когда это возможно, используется неизменяемое хранилище. Поэтому мне нужно уничтожить и воссоздать текстуру. Но, похоже, QOpenGLTexture теряет свои свойства после уничтожения.Изменение размеров свойств сохранения QOpenGLTexture
void resizeTexture(std::shared_ptr<QOpenGLTexture> texture, const Qsize &size){
texture->destroy();
texture->setSize(size.width(),size.height());
texture->create();
texture->allocateStorage();
}
Выполняя texture->allocateStorage();
выписку разжигает в QOpenGLDebugLogger печати следующего: Warning: GL_INVALID_ENUM in glTexStorage2D(internalformat = GL_FALSE)
Так что, мне кажется, что ранее выставиться свойства, такие как цели текстур теряются после разрушения текстуры. Поэтому в моем варианте они должны быть сохранены для возможного восстановления текстуры.
Возможно, существует еще один способ создания второй QOpenGLTexture с идентичными свойствами, кроме размера?
Я подал сообщение об ошибке в багтрекер Qt, но, похоже, разработчики не смогли взглянуть на него. https://bugreports.qt.io/browse/QTBUG-46614
Возможно, у кого-то есть намек на меня, что делать?
Спасибо за ваш ответ. Я переработал свой проект, чтобы иметь возможность воссоздавать текстуры со всеми свойствами при возникновении события изменения размера. – cguenther
Существует одно преимущество классов оболочки OpenGL Qt: если ваш код вписывается в смирительную рубашку OpenGL ES 2, он может работать на DirectX через слой перевода (ANGLE) в комплекте с Qt. Qt уже обрабатывает динамический выбор ANGLE и native GL, и вы можете дополнительно переопределить такой выбор во время выполнения. Иногда это полезно. –
@KubaOber Согласитесь, но я говорю это с точки зрения разработчика OpenGL :) –