アプリでQGLWidgetを使用しようとしています。QGLWidgetから派生クラスを作成しました。別のスレッドから(glTexSubImage2Dを使用して)Textureを更新し、GUIスレッドからpaintGLで(glTexCoord2i ..を使用して)テクスチャを描画しています。
私が直面している問題は、initializeGL、resizeGL、paintGLメソッドとこれらのメソッドを終了する前にdoneCurrentを呼び出します。
この問題を修正するためにオーバーライドする必要がある他の方法を理解するのに誰かが助けてくれますか?
ありがとうございました。ヴェン
これが私のコードのテンプレートです
#include "MyGlTexture.h" //my texture has pure open Gl code..it doesnt have qgl related code
#include <QGLWidget>
class MyGLWidget
: public QGLWidget
{
Q_OBJECT
MyGLWidget(QWidget *parent = 0, Qt::WindowFlags f = 0);
virtual ~MyGLWidget();
public slots:
void updateTexure(QImage *img);
protected:
void initializeGL ();
void resizeGL(int w, int h);
void paintGL ();
MyGlTexture m_Texture;
QMutex m_DrawMutex;
};
MyGLWidget::MyGLWidget(QWidget *parent, Qt::WindowFlags f )
: QGLWidget( parent,0, f)
{
//some gl init code
}
MyGLWidget::~MyGLWidget()
{
//cleanup
}
void MyGLWidget::initializeGL ()
{
...........
...........
m_Texture.Init(screenRect.width(),screenRect.height(), GL_TEXTURE_2D, GL_RGB);
}
void MyGLWidget::resizeGL(int width, int height)
{
m_DrawMutex.lock();
makeCurrent();
//some code to get window size
.................
...................
doneCurrent();
m_DrawMutex.unlock();
}
//Updated by GUI Thread
void MyGLWidget::paintGL ()
{
m_DrawMutex.lock();
makeCurrent();
m_Texure.Draw();
doneCurrent();
m_DrawMutex.unlock();
}
///Image Update thread
void MyGLWidget::updateTexure(QImage *img)
{
m_DrawMutex.lock();
makeCurrent();
m_Texure.Update(img);
doneCurrent();
m_DrawMutex.unlock();
//emit update singal which calls piantGL() to draw the texture
update();
}