Qt 5.3.0 MiniGW + OpenGL



  • Witam, jestem początkującym programistą, stawiam pierwsze kroki w Qt 5.3.0+ MiniGw i mam problem skompilować jakikolwiek program z OpenGL np. "youtube":http://www.youtube.com/watch?v=1nzHSkY4K18. Proste programy które napisałem działają na innych komputerach (których karty graficzne są komatybline z OpenGL 3.0) niestety mój komputer ma straszą karte graficzną Mobile Intel® 4 Series Express Chipset Family która wspomaga openGL w wer. 2.1. Ten sam problem dotyczy przykładów z qt-creatr'a z openGL. Czy to oznacza że nie uda mi się skompilować żadnego programu z openGl na tej karcie? Najnowsze sterowniki zainstalowane i DirectX. Dodam że OpenGL pod Microsoft Visual Studio działa bez zastrzeżeń


  • Moderators

    Minimalna wersja OpenGLa w Qt 5 to 2.0. Także powinno działać, tym bardziej że sterowniki Intela bardzo się poprawiły w ostatnim czasie.

    Spróbuj zainstalować build z ANGLE (używa DirectX), może podziała. Jak nie, to można jeszcze spróbować użyć Mesa-LLVMPipe, czyli softwareowego OpenGLa: ale to raczej dla bardziej zaawansowanych.

    Alternatywnie, jeśli mało Ci nauki, to polecam przeskoczyć na Linuxa, tak jak w linkowanym przez ciebie video. Plusy Linuxa są takie, że nie ma tu nigdy problemów z kompilatorami i podstawowym OpenGLem. Minusy też są, a jakże ;-) OK, starczy propagandy :-P

    Na koniec całkiem ważna sprawa: podaj jakieś szczegóły do "mam problem skompilować jakikolwiek program z OpenGL". Jakie błędy ci wyskakują? Może wystarczy poustawiać trochę opcji w projekcie i znajdzie brakujące nagłóœki/ biblioteki.



  • Błąd jest dość powszechny: Program opengl.exe przestał działać. a w trybie debbug:
    @Podproces zatrzymany, ponieważ otrzymał on sygnał z systemu operacyjnego.

    Nazwa sygnału:
    SIGSEGV
    Znaczenie sygnału:
    Segmentation fault
    @
    tak jak pisalem kod dziala na innych komputerach bez najmniejszego problemu. Dołączam kod programu:
    mainwindow.cpp
    @#include "mainwindow.h"
    #include "ui_mainwindow.h"

    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);

    cScena* scena = new cScena(this);
    ui->verticalLayout->addWidget(scena);
    

    }

    MainWindow::~MainWindow()
    {
    delete ui;
    }
    @
    cscena.cpp
    @#include "cscena.h"

    cScena::cScena(QWidget *parent) :
    QGLWidget(parent)
    {
    }
    cScena::cScena (const QGLFormat & format, QWidget * parent = 0, const QGLWidget * shareWidget = 0, Qt::WindowFlags f = 0)
    :QGLWidget(format,parent,shareWidget,f)
    {

    }

    void cScena::paintGL()
    {
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 0.0);
    glBegin(GL_POLYGON);
    glVertex3f(-1.0,-1.0,0);
    glVertex3f(-1.0,1.0,0);
    glVertex3f(1.0,1.0,0);
    glVertex3f(1.0,-1.0,0);
    glEnd();
    }

    void cScena::initializeGL()
    {
    glClearColor (1.0, 1.0, 1.0, 0.0);

    }

    void cScena::resizeGL(int width,int height)
    {
    glViewport(0,0,width,height);
    glMatrixMode (GL_PROJECTION);
    glLoadIdentity ();
    glOrtho(-5,5,-5,5,-1.0, 1.0);
    glMatrixMode (GL_MODELVIEW);
    glLoadIdentity ();
    }

    @
    mainwindow.h
    @
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QMainWindow>
    #include <cscena.h>
    #include <qpushbutton.h>
    namespace Ui {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
    Q_OBJECT

    public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    private:
    Ui::MainWindow *ui;

    };

    #endif // MAINWINDOW_H
    @
    cscena.h
    @
    #ifndef CSCENA_H
    #define CSCENA_H

    #include <QGLWidget>

    class cScena : public QGLWidget
    {
    Q_OBJECT //makro
    public:
    explicit cScena(QWidget *parent = 0);
    cScena (const QGLFormat & format, QWidget * parent , const QGLWidget * shareWidge, Qt::WindowFlags f );

    virtual void paintGL();
    virtual void initializeGL();
    virtual void resizeGL(int width, int height);
    

    signals:

    };
    #endif // CSCENA_H
    @
    dołączyłem oczywiście QT += opengl w opengl.pro. i mama dołączone .dll w katalogu system32. Mógłbys powiedzieć coś więcej o tym angle? i dlaczego nie działa u mnie ten kod skoro podobno qt 5.3 działa juz z opengl'em 2.1?
    Dziękuje za dotychczasową odpowiedz.


  • Moderators

    NIe znam się dobrze na OpenGLu w Qt (ani na OpenGL w ogóle), sorry. Jedyne co potrafię zauważyć, to to, że używasz starych wywołąń OpenGL. Jeśli exe się wywala tylko na tym kompie i debugging nie pokazuje, gdzie, to może trafiłeś w słaby punkt sterownika.

    Angle to projekt, który przerabia wywołania OpenGL na DirectX. Dzięki temu Qt mysli, że używa OpenGL, a tak na prawdę w tle działa sterownik DirectX. Przydatne głownie na starszych kompach i Windowsie XP. Qt Project udostępnia instalatory, które mają wbudowane ANGLE w siebie.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.