X-Git-Url: https://git.sesse.net/?p=kdenlive;a=blobdiff_plain;f=src%2Fwidgets%2Fvideoglwidget.cpp;h=a37d529d79e50f17a9e3cfdacc362eef80820c48;hp=375f2d6b916a5a9b443ed3ab13fb8a9515219d33;hb=a3eee7be24126f5a3458d488f44cd61c66135e17;hpb=6c62a4d8f799379bfb7a11d25521cf829248587c diff --git a/src/widgets/videoglwidget.cpp b/src/widgets/videoglwidget.cpp index 375f2d6b..a37d529d 100644 --- a/src/widgets/videoglwidget.cpp +++ b/src/widgets/videoglwidget.cpp @@ -31,8 +31,8 @@ #define GL_TEXTURE_RECTANGLE_EXT GL_TEXTURE_RECTANGLE_NV #endif -VideoGLWidget::VideoGLWidget(QWidget *parent) - : QGLWidget(parent) +VideoGLWidget::VideoGLWidget(QWidget *parent, QGLWidget *share) + : QGLWidget(parent, share) , x(0) , y(0) , w(width()) @@ -40,6 +40,7 @@ VideoGLWidget::VideoGLWidget(QWidget *parent) , m_image_width(0) , m_image_height(0) , m_texture(0) + , m_other_texture(0) , m_display_ratio(4.0 / 3.0) , m_backgroundColor(Qt::gray) { @@ -146,6 +147,24 @@ void VideoGLWidget::paintGL() glEnd(); glDisable(GL_TEXTURE_RECTANGLE_EXT); } + if (m_other_texture) { +#ifdef Q_WS_MAC + glClear(GL_COLOR_BUFFER_BIT); +#endif + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, m_other_texture); + glBegin(GL_QUADS); + glTexCoord2i(0, 0); + glVertex2i(x, y); + glTexCoord2i(1, 0); + glVertex2i(x + w, y); + glTexCoord2i(1, 1); + glVertex2i(x + w, y + h); + glTexCoord2i(0, 1); + glVertex2i(x, y + h); + glEnd(); + glDisable(GL_TEXTURE_2D); + } } void VideoGLWidget::showImage(const QImage &image) @@ -155,6 +174,7 @@ void VideoGLWidget::showImage(const QImage &image) makeCurrent(); if (m_texture) glDeleteTextures(1, &m_texture); + m_other_texture = 0; glPixelStorei(GL_UNPACK_ROW_LENGTH, m_image_width); glGenTextures(1, &m_texture); @@ -166,6 +186,18 @@ void VideoGLWidget::showImage(const QImage &image) updateGL(); } +void VideoGLWidget::showImage(GLuint texnum) +{ + makeCurrent(); + if (m_texture) { + glDeleteTextures(1, &m_texture); + m_texture = 0; + } + m_other_texture = texnum; + + updateGL(); +} + void VideoGLWidget::mouseDoubleClickEvent(QMouseEvent * event) { // TODO: disable screensaver?