LINUX.ORG.RU

QGLContext получается невалидным. С чего бы это?


0

1

Попробовал инициализировать opengl 3 окно с помощью Qt.


#include "oglwindow.h"

OGLWindow::OGLWindow(QWidget *parent) :
    QGLWidget(parent)
{
}
void OGLWindow::initializeGL()
{
    QGLFormat fm;
    fm.setAlpha(true);
    fm.setDoubleBuffer(true);
    fm.setProfile(QGLFormat::CoreProfile);
    fm.setVersion(3,3);
    fm.setSampleBuffers(true);
    fm.setAccum(true);
    fm.setDepth(true);
    fm.setDirectRendering(true);
    QGLContext *con = new QGLContext(fm);
    con->create();
    con->makeCurrent();
}
void OGLWindow::keyPressEvent(QKeyEvent *key)
{

}
void OGLWindow::resizeGL(int w, int h)
{

}
void OGLWindow::paintGL()
{

}
oglwindow.h:

#ifndef OGLWINDOW_H
#define OGLWINDOW_H
#include <QMainWindow>
#include <QKeyEvent>
#include <QtOpenGL>

class OGLWindow : public QGLWidget
{
    Q_OBJECT

public:
    OGLWindow(QWidget *parent = 0);
    void keyPressEvent(QKeyEvent *key);
    void initializeGL();
    void resizeGL(int w, int h);
    void paintGL();

private slots:

private:

};
#endif // OGLWINDOW_H

main.cpp:

#include <QtGui/QApplication>
#include "oglwindow.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    OGLWindow w;
    w.show();

    return a.exec();
}

При каждом запуске выводится сообщение «QGLContext::makeCurrent(): Cannot make invalid context current». Понятно, что причин м.б. вагон и маленькая тележка, но до того с SDL нормально работало. Здесь показалось, что сделано проще, но, видимо, что-то забыл сделать. Формат пробовал полностью оставлять пустым, но ничего не менялось. Или нужно сначала имплементировать resizeGL и вызвать его перед show?

★★★★

Ответ на: комментарий от anonymous

Читал. Да я разобрался, н.б. в конструкторе создавать. Сейчас почему-то вместо треугольника черный экран, хотя с SDL было нормально. Учитвая прочитанные спецификации 4.2 и последнюю супербиблию, похоже, лучше доосвоить блендер и не соваться в кодинг

wingear ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.