Доброго дня!
Необходимо с Ip-камеры просматривать изображения в JPEG формате, ранее использовал QPixmap с выводом в Qlabel, но из за утечек памяти решил перейти на OpenGL. Использую Qt 4.7.
Изображение с камеры нормально получается, проверял сохраняя в файл, сейчас проблема с выводом средствами openGL.
initializeGL()C++ (Qt)
glClearColor(0.0, 0.0, 0.0, 0.0);
glGenTextures(1, &texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
resizeGL(int width, int height)C++ (Qt)
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
image = convert_to_GL(jpg);
if (1 == frame_number)
glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, image.bits());
else
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height,
GL_RGBA, GL_UNSIGNED_BYTE, image.bits());
glDisable(GL_TEXTURE_2D);
glPixelZoom(1, 1);
glViewport(0, 0, width, height);
paintGL()C++ (Qt)
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 1.0);
glVertex3f(0.0, image.height(), 0.0);
glTexCoord2f(0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glTexCoord2f(1.0, 0.0);
glVertex3f(image.width(), 0.0, 0.0);
glTexCoord2f(1.0, 1.0);
glVertex3f(image.width(), image.height(), 0.0);
glEnd();
glDisable(GL_TEXTURE_2D);
//glDrawPixels(image.width(), image.height(), GL_RGBA,
// GL_UNSIGNED_BYTE, image.bits());
convert_to_GL(const QByteArray &data)C++ (Qt)
return QGLWidget::convertToGLFormat(QImage::fromData(data));
Проблемы на данный момент:
- при закомментированном glDrawPixels отображается чёрный квадрат с белым квадратом в верхнем правом углу
- при использовании glDrawPixels изображается статическое изображение
Выяснено, что:
C++ (Qt)
if (1 == frame_number)
glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, image.bits());
else
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height,
GL_RGBA, GL_UNSIGNED_BYTE, image.bits());
glTexSubImage2D всегда заканчивается ошибкой invalid value, при использовании только одной из этих функций ошибки нет, но изображение всё равно не появляется.
Можете подсказать в чём проблема?
Спасибо.