Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 08:47

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: QT Function Pointer
BeitragVerfasst: Fr Aug 05, 2011 19:13 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hey,

ich arbeite derzeit an einem Editor für 4sure. Diesen möchte ich mit QT realisieren und in die normale GUI ein OpenGL Widget einbinden.
Also GUI im Designer erstellt, einen Platz für das OpenGL Widget frei gelassen. Dort füge ich dann manuell nach dem Erstellen der GUI im Code eine Instanz meines Widgets ein. Das Widget ist von QGLWidget abgeleitet und funktioniert generell auch. Zumindest läuft ein einfacher Test ohne tatsächlichen GL Code (nur glClearColor und glViewport).

Nun will ich aber die Klassen meiner OpenGL helfer lib, die ich für 4sure geschrieben habe verwenden und da kommt es zu Problemen.

Für das Widget erstelle ich einen 3.3 core Context, wie ich ihn auch für 4sure selber verwende. Aber egale ob ich nun GLEW initialisiere (wie bei 4sure) oder nicht, der Pointer auf glGetUniformBlockIndex (OpenGL 3.1) ist immer 0. Die Funktion verwende ich in meiner Shader Klasse.

Hier ein paar wichtige Code Ausschnitte:

Initialisierung der GUI:
Code:
  1.  
  2. Editor::Editor(const QString &config)
  3.     : QMainWindow()
  4. {
  5.     ui.setupUi(this);
  6.  
  7.     QGLFormat format;
  8.     format.setVersion(3, 3);
  9.     format.setProfile(QGLFormat::CoreProfile);
  10.     format.setOption(QGL::DoubleBuffer);
  11.     format.setOption(QGL::DepthBuffer);
  12.     format.setOption(QGL::Rgba);
  13.     format.setOption(QGL::DirectRendering);
  14.     format.setOption(QGL::NoAlphaChannel);
  15.     format.setOption(QGL::NoAccumBuffer);
  16.     format.setOption(QGL::NoStencilBuffer);
  17.     format.setOption(QGL::NoStereoBuffers);
  18.     format.setOption(QGL::NoOverlay);
  19.     format.setOption(QGL::NoSampleBuffers);
  20.     format.setOption(QGL::NoDeprecatedFunctions);
  21.    
  22.     QGLFormat::setDefaultFormat(format);
  23.    
  24.     m_gl = new GLWidget(config);
  25.     ui.frame->layout()->addWidget(m_gl);
  26.  
  27.     ...
  28. }
  29.  


Die GLWidget Klasse:
Code:
  1.  
  2. GLWidget::GLWidget(const QString &config)
  3.     : QGLWidget(), m_config(config)
  4. {
  5. }
  6.  
  7. void GLWidget::initializeGL()
  8. {    
  9.     //     if(glewInit() != GLEW_OK)
  10. //     std::cout << "blub" << std::endl;
  11.    
  12.     QString major = QString::number(context()->format().majorVersion());
  13.     QString minor = QString::number(context()->format().minorVersion());
  14.     std::cout << major.toStdString() << "." << minor.toStdString() << std::endl;
  15.    
  16.     if((format().openGLVersionFlags() & QGLFormat::OpenGL_Version_3_3) == 0)
  17.         std::cout << "foo" << std::endl;
  18.    
  19.     // HIER KNALLTS!!!
  20.     m_shader.Load(m_config.toStdString() + "/shader/main.vert", m_config.toStdString() + "/shader/main.frag");
  21. }
  22.  


Die Shader Klasse (in der Zeile knallts genau):
https://bitbucket.org/Shaijan/4sure/src ... cpp#cl-168

Die Header sind ziemlicher Standard, da passiert nix.

Meine helfer lib includiert glew.h, aber das sollte doch eigentlich egal sein oder?
Die verschiedenen Ausgaben bestätigen, dass der Context richtig erstellt wird.

Kann es sein, dass QT die Funktion nicht automatisch lädt? Und warum funktionierts dann nicht mit GLEW?
Ich steh aufm Schlauch. Jede Hilfe ist willkommen :)

Shai

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: QT Function Pointer
BeitragVerfasst: Di Aug 09, 2011 20:20 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Problem "gelöst" indem ich einen Context mit Compatibility Profile erstelle. Wird zwar funktionieren, da ich für 4sure auch einen benutze, aber ich verstehs trotzdem nicht.

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 18 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 17 Queries | GZIP : On ]