Большие QPixmaps аварийно завершают работу с OpenGL

Я программирую QGraphicsView с большим количеством изображений. Но когда я отображаю JPEG с разрешением 8528 x 1128 пикселей (панорамное изображение), QGraphicsPixmapItem не отображается. Он просто показывает черный квадрат. Изображения "нормального" размера рендерятся хорошо. Я не пытался найти «лимит магии» для размеров, на которых возникает проблема.

На моем ноутбуке с Ubuntu 10.10 x64 также происходит сбой драйвера видеокарты и перезапуск сеанса Gnome!

Все работает нормально, если я отключу OpenGL.

Почему? Я могу что-нибудь сделать?

Я нашел еще одну очень похожую проблему: http://www.qtforum.org/article/34238/really-strange-problem-with-qgraphicsview-and-opengl.html


person Knuto    schedule 27.10.2010    source источник


Ответы (1)


Убедитесь, что это возвращает что-то большее, чем 8528 в вашей реализации OpenGL:

GLint texSize;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &texSize);

Если это не так, вам придется прибегнуть к какой-то мозаичной системе рендеринга, чтобы вы могли разместить все данные вашего изображения в текстурах меньше максимального размера.

person genpfault    schedule 27.10.2010
comment
Просто чтобы подчеркнуть этот момент - вы намного превышаете безопасные пределы для текстуры GL, а также используете неквадратное измерение, не являющееся степенью двойки. Все эти факторы уменьшают количество оборудования и драйверов GL, с которыми вам, вероятно, придется работать. Хорошая новость заключается в том, что, поскольку вы уже используете QGraphicsView, разделение огромного изображения на части (на ЦП) и создание отдельных графических элементов для каждой плитки должно быть простым. - person James Turner; 27.10.2010