crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> OpenGL4.3 в Qt5.1 - подключение функций
wf778899
  опции профиля:
сообщение 12.3.2015, 0:05
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 20.7.2014
Пользователь №: 4191

Спасибо сказали: 0 раз(а)




Репутация:   0  


Привет всем.
Решил разобраться с 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 теряет смысл...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
lanz
  опции профиля:
сообщение 12.3.2015, 1:37
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


http://doc.qt.io/qt-5/qopenglcontext.html#versionFunctions

То что вы используете, возвращает только для GL ES 2

В paintGL происходит перерисовка, там не нужно каждый раз создавать контекст.
Все как то в кучу свалено, почитайте например http://doc.qt.io/qt-5/qtgui-openglwindow-example.html

Сообщение отредактировал lanz - 12.3.2015, 1:43
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 11:35