Auflösen von OpenGL-Funktionen mit glew in QT

Seine seit 17 Tagen ich habe Mühe zu schreiben, ein einfaches Programm in OpenGL mit QT, aber alle tutorials in Google gesucht werden konnte.
I ' V zusammengestellt meine QT 5.0.1 mit -opengl desktop mit msvc2010 zu machen desktop opengl-Standard.

I ' V Lesen Sie das tutorial von Sean Harmer, aber es ist angewiesen auf QT zu beheben opengl-Funktionen.

Laut einigen Menschen ist es nicht möglich, glew in QT, QT-built-in Bibliotheken verhindern, dass glew aus, einschließlich Ihrer überschriften, aber nach Sean Harmer HIER , es ist möglich (aber es ist nicht erklärt, wie).

Sogar mit QGLWidget ich bin nicht in der Lage, OpenGL-Erweiterungen.

Alles was ich jetzt wollen, ist auf alle OpenGL-Funktionen getrennt und alle Window-Funktionen von QT trennen, d.h. keine Einmischung in OpenGL QT.

Wenn jemand mir erklären das Verfahren mit einfachen Dreieck Beispiel und mit jeder Erweiterung, I ' L so dankbar..

I ' V verwendet glew-Bibliothek in mein Projekt und #enthalten, glew.h im Anfang von meinem Programm, aber beim kompilieren gibt es Fehler:
glwidget.obj:-1: Fehler: LNK2001: nicht aufgelöstes externes symbol imp__glewGenVertexArrays

Meine .pro Datei

QT       += core gui opengl

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Trial
TEMPLATE = app

SOURCES += main.cpp\
        mainwindow.cpp \
    glwidget.cpp

HEADERS  += mainwindow.h \
    glwidget.h

FORMS    += mainwindow.ui

RESOURCES += \
    resources.qrc
win32: LIBS += -L$$PWD/../../../../../OpenGL/glew-1.9.0/lib/ -lglew32s

INCLUDEPATH += $$PWD/../../../../../OpenGL/glew-1.9.0/include
DEPENDPATH += $$PWD/../../../../../OpenGL/glew-1.9.0/include

win32: PRE_TARGETDEPS += $$PWD/../../../../../OpenGL/glew-1.9.0/lib/glew32s.lib

Ausgabe von glewInfo :
GLEW version 1.9.0
Reporting-Funktionen von pixelformat 1
Es läuft auf einer GeForce GT 540M/PCIe/SSE2 von NVIDIA Corporation
OpenGL-version 4.3.0 unterstützt wird

void GLWidget::initializeGL()
{
    GLenum err = glewInit();
    if(err != GLEW_OK)
    {
        printf("%s",glewGetErrorString(err));
    }

    glEnable(GL_DEPTH_TEST);
    qglClearColor(QColor(Qt::red));

    shaderProgram.addShaderFromSourceFile(QGLShader::Vertex, ":/vertexShader.vsh");
    shaderProgram.addShaderFromSourceFile(QGLShader::Fragment, ":/fragmentShader.fsh");
    shaderProgram.link();
    shaderProgram.bind();

    const GLubyte *oglVersion = glGetString(GL_VERSION);
    printf( "%s\n",oglVersion );

    GLfloat vertices[3][3] ={{ -0.5, -0.5, -1 },
                { 0,    0.5,    -1},
                    { 0.5,  -0.5,   -1}};
    vertexArray.create();
    vertexArray.setUsagePattern(QOpenGLBuffer::StaticDraw);
    vertexArray.allocate( vertices, 3 * 3 * sizeof( GLfloat ) );
    vertexArray.bind();
    shaderProgram.setAttributeBuffer( "vVertex", GL_FLOAT, 0, 3 );
    shaderProgram.enableAttributeArray( "vVertex" );

    GLuint arr[5];
    glGenBuffers(5,arr);
}
"Nach einigen Menschen, es ist nicht möglich, glew in QT" Falsch. Die meisten Menschen, die Verwendung von OpenGL in Qt-apps konfigurieren Sie die extensions mit GLEW, und rufen Sie raw-OpenGL-Funktionen von innen QGLWidgets. Aber ohne konkrete Fehlermeldungen, die .pro Datei, die Sie verwendet haben, etc. wir können Ihnen nicht helfen.
Fehler "nicht aufgelöstes externes symbol imp__glew" kommt, wenn glew32s.lib Hinzugefügt, mit static gekennzeichnet, und Sie verschwinden, wenn glew32.lib Hinzugefügt wird, mit dynamisch gekennzeichnet. Obwohl mein Programm wird unerwartet beendet, wenn Sie lief in den debug-Modus, das problem ist bei glDrawArrays...
Wenn Sie versuchen, eine statische link auf Windows, müssen Sie definieren, die GLEW_STATIC token. Vermutlich sind Sie auch den Aufruf glewInit() sobald Sie gültigen Kontext.
Ja Iv glewInit() in initialiseGL(). Als Sie sagte, ich habe GLEW_STATIC vor #inklusive glew.h, aber es gibt Warnhinweise: :-1: Warnung: LNK4098: defaultlib 'LIBCMT' Konflikt mit anderen Bibliotheken; /NODEFAULT:Bibliothek verwenden glew32s.lib(glew.obj):-1: Warnung: LNK4099: PDB 'vc100.pdb " wurde nicht mit gefunden 'glew32s.lib(glew.obj)' oder 'D:\Dexter\Softwares\Programming stuff\QT Projekte\Trial-bauen-Desktop_Qt_5_0_1_MSVC2010_32bit-Debug\debug\vc100.pdb'; Verknüpfung von Objekt, als ob keine Debuginformationen
Nur um sicher zu gehen, welche OpenGL-version hat deine GPU-Unterstützung (zurückgegeben durch glewinfo)? Auch, veröffentlichen Sie Ihre initializeGL() Methode.

InformationsquelleAutor avg598 | 2013-07-02

Schreibe einen Kommentar