QT und OpenGL

Alles rund um die Programmierung mit Qt
Antworten
procrash
Beiträge: 1
Registriert: 10. Oktober 2016 12:39

QT und OpenGL

Beitrag von procrash »

Hallo,

ich versuche gerade mich in QT in Verbindung mit OpenGL einzuarbeiten.

Dabei habe ich beim QT Gui Example gespickt bei dem ein einfach rotierendes Dreieck gezeichnet wird.

Meine Applikation verwendet einerseits OpenGL in einem Widget, andererseits sollte es möglich sein per Doppelklick auf den Render Content in den Vollbildmodus zu wechseln.

Vorher hatte ich den ganze OpenGL Krempel noch mit glBegin und glEnd entwickelt aber dass ganze sollte man ja nicht verwenden also habe ich mal probiert mein Programm auf den neuesten OpenGL standard zu hieven.

Dieser Code hat vorher einwandfrei funktioniert, klicke ich jetzt allerdings auf den Render Content doppelt mit der Maus schmiert mir mein Programm ab

Code: Alles auswählen

template<class T>
void View3D<T>::mouseDoubleClickEvent(QMouseEvent *e) {
    if(isFullScreen())
    {
        setWindowFlags(Qt::Widget);
        showNormal();

    } else {
        setWindowFlags(Qt::Window);
        showFullScreen();
    }

Code: Alles auswählen

template<class T>
void View3D<T>::initializeGL()
{


    glClearColor(0,0,0,255);

    glEnable(GL_DEPTH_TEST);
    glShadeModel(GL_SMOOTH);
    glEnable(GL_MULTISAMPLE);


    m_program = new QOpenGLShaderProgram(this);

    m_program->addShaderFromSourceFile(QOpenGLShader::Vertex, ":/shaders/vertexShader.glsl");
    m_program->addShaderFromSourceFile(QOpenGLShader::Fragment, ":/shaders/fragmentShader.glsl");

    m_program->link();
    m_posAttr = m_program->attributeLocation("posAttr");


    GLfloat vertices[] = {
       +0.0f, +1.0f, 0.0f,
       -1.0f, -1.0f,   0.0f,
       +1.0f, -1.0f,   0.0f
    };

    m_vbo.create();
    m_vbo.bind();
    m_vbo.setUsagePattern(QOpenGLBuffer::StaticDraw);
    m_vbo.allocate(vertices, sizeof(vertices));

    m_vao.create();
    m_vao.bind();
    glEnableVertexAttribArray(0);
    m_program->setAttributeBuffer(0,GL_FLOAT, 0, 3, 0);

    m_vbo.release();
    m_vao.release();
    m_program->release();
}

Code: Alles auswählen

template<class T>
void View3D<T>::paintGL()
{

    this->makeCurrent();

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    m_vao.bind();
    m_program->bind();

    glDrawArrays(GL_TRIANGLES, 0, 3);

    m_program->release();
    m_vao.release();
}

Das sind die Shader, wie gesagt ganz simpel:
fragmentShader:

Code: Alles auswählen

void main() {
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
vertex Shader:

Code: Alles auswählen

attribute highp vec4 posAttr;
attribute lowp vec4 colAttr;
varying lowp vec4 col;
void main() {
   //col = colAttr;
   gl_Position = posAttr;
   gl_FrontColor = gl_Color;
}
Kann mir einer hier mal erklären was ich falsch mache?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QT und OpenGL

Beitrag von Christian81 »

Und was sagt der Debugger dazu? Wie sieht der Backtrace aus?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten