Решил разобраться с OpenGL на QT. У меня Qt5.1, Windows7x64. Копаться в старом GL (который без шейдеров) смысла больше не вижу. Как я понял, в QTе для всех функций, начиная с OpenGL 1.1, надо прописывать точки входа. Стал читать, как это делается. Как я понял - с помощью классов формата и контекста. Толком так ничего и не получилось. Короче, что я сделал (код ниже):
#include "Scene.h"
#include <QGLWidget>
#include <QtOpenGL>
#include <QGLFormat>
#include <QGLContext>
#include <QOpenGLContext>
#include <QOpenGLFunctions_4_3_Core>
#include <QGLFunctions>
Widget::Widget(QWidget *parent) : QGLWidget(parent){}
Widget::~Widget(){}
void Widget::initializeGL(){
glClearColor(1.0, 1.0, 1.0, 1.0);
}
void Widget::resizeGL(int w, int h){
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
glViewport(0, 0, (GLint)w, (GLint)h);
}
void Widget::paintGL() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
QGLFormat format;
format.setVersion(4, 3);
QGLContext cont(format);
cont.create();
cont.makeCurrent();
QOpenGLFunctions_4_3_Core *m_funcs;
m_funcs = cont.functions();
m_funcs->glCreateShader(GL_VERTEX_SHADER);
}
Простой класс, который ничего не делает (только окно выводит). В его рисовальщике я создал формат, которому прописал только одну настройку - использовать OpenGL4.3 (проверял, поддерживается). Потом этот формат я задаю контексту и делаю его текущим. Потом получаю объект функций QOpenGLFunctions_4_3_Core и назначаю ему все точки входа. Вот здесь (m_funcs = cont.functions() компилятор встаёт на дыбы и пишет "cannot convert 'QGLFunctions*' to 'QOpenGLFunctions_4_3_Core*' in assignment". Понятно, что типы не стыкуются. Объясните, пожалуйста, как правильно назначать точки входа - как я успел понять, без этого OpenGL теряет смысл...