Пробовал сделать OpenGL-окно в Qt-5.3 по этому руководству, потом, когда ничего не получилось, стал искать, в чём разница с этим вариантом, который работает. Но особой разницы не нашёл - пробовал делать почти пустой format, как там, и наследовать окно от QOpenGLFunctions, также создавал QOpenGLPaintDevice перед тем, как начать что-либо делать с контекстом, и ресайзил его, но всё без толку. Остаётся только бездумный копипаст с удалением ненужных мне методов и проверкой, будет ли всё работать, после каждой операции. Но мне не нравится такой шаманский подход. Может, кто-нибудь увидит здесь, что не сделано перед началом инициализации функций?
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWindow>
#include <QOpenGLContext>
#include <QOpenGLFunctions>
#include "shadermanager.h"
class MainWindow : public QWindow
{
Q_OBJECT
public:
explicit MainWindow(QWindow *parent = 0);
~MainWindow();
private:
QOpenGLContext *_context;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
MainWindow::MainWindow(QWindow *parent) :
QWindow(parent)
{
resize(1024,768);
setSurfaceType(OpenGLSurface);
QSurfaceFormat format;
format.setDepthBufferSize(24);
format.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
format.setMajorVersion(4);
format.setMinorVersion(3);
format.setSamples(16);
format.setProfile(QSurfaceFormat::CoreProfile);
setFormat(format);
_context = new QOpenGLContext(this);
_context->setFormat(format);
_context->create();
_context->makeCurrent(this);
_context->functions()->initializeOpenGLFunctions(); //segmentation fault
}