[Qt-4.3.3] OpenGL "initialisieren"
-
Hallo.
Mein Programm besteht aus einem QMainWindow mit QWorkspace welches einige OGLWidgets verwaltet. Ich benutzte Shader, weshalb OGL 2.0 benötigt wird (Überprüfe ich mit glew). Bis jetzt habe ich keine andere Möglichkeit gefunden als das in QGLWidget::initializeGL() zu tun. Ich möchte aber sofort nach Programmstart wissen (es ist noch kein OGL Fenster offen) ob OGL 2.0 zur Verfügung steht.
int main(int argc, char** argv) { QApplication app(argc, argv); meineGLEWinitialisierung(); //Es steht laut GLEW kein Direct Rendering zur Verfügung // .... myMainWin->show(); return app.exec(); }
Habe schon mit QGLContext experimentiert, aber das hat in keiner weiße funktioniert ....
Danke
-
char* version = glGetString(GL_VERSION);
http://www.google.de/search?hl=de&q=glgetstring&btnG=Suche&meta=
-
das liefert einen Null-pointer wenn ich es nicht in QGLWidget::initializeGL() aufrufe
-
Pigeon schrieb:
das liefert einen Null-pointer wenn ich es nicht in QGLWidget::initializeGL() aufrufe
ohne context funktionierts natürlich nicht
PIXELFORMATDESCRIPTOR pfd; //init pfd hDC = GetDC(hWnd); PixelFormat = ChoosePixelFormat(hDC, &pfd); SetPixelFormat(hDC, PixelFormat, &pfd); hRC = wglCreateContext(hDC); wglMakeCurrent(hDC, hRC);
danke für die rolleyes, ich helfe gerne
-
Ja genau! (Ich habe kein Windows aber danke für den code)
Und genau deswegen habe ich versucht einen "globalen" QGLContext zu erstellen ( den dann auch später jedes QGLWidget nutzen soll ). Bedauerlichweise verstehe ich nicht wie man selbigen benutzt
-
unter linux oder mac ist es das selbe in grün nur noch etwas aufwändiger, da du für
glXCreateNewContext()
einen zeiger auf das geöffnete display brauchst. es ist definitiv mehr arbeit als dies zu überprüfen, wenn Qt seinerseits den Kontext mit glXCreateNewContext() erstellt hat. und dies geschieht afaik im Kontruktor von QtGLWidget. da bin ich mir jetzt aber nicht sicher.
-
Klar kenne ich das, jedoch wollte ich eine plattformunabhängige Lösung! Kann man dan QGLContext nicht manuell erstellen??? QGLWidget hat ja einen entsprechenden CTor in dem man einen shared Context angeben kann....
-
wenn du das alles kennst, sollte dir auch klar sein, dass man unter windows sowie unter linux keinen kontext erstellen kann, solange wie in windows noch kein fenster exisitiert, dass mit CreateWindow() erstellt oder in linux noch kein display mit XOpenDisplay() geöffnet wurde. bevor du in Qt nicht wenigstens ein GLWidget erstellt hast welches einen gültigen kontext liefert, kannst du die opengl funktionen nicht benutzen. ein shared kontext hat damit nichts zu tun, du brauchst wenigstens ein QGLWidget, welches ganz normal erstellt wurde und einen gültigen kontext liefern kann.
-
sothis_ schrieb:
wenn du das alles kennst, sollte dir auch klar sein, dass man unter windows sowie unter linux keinen kontext erstellen kann, solange wie in windows noch kein fenster exisitiert, dass mit CreateWindow() erstellt oder in linux noch kein display mit XOpenDisplay() geöffnet wurde. bevor du in Qt nicht wenigstens ein GLWidget erstellt hast welches einen gültigen kontext liefert, kannst du die opengl funktionen nicht benutzen. ein shared kontext hat damit nichts zu tun, du brauchst wenigstens ein QGLWidget, welches ganz normal erstellt wurde und einen gültigen kontext liefern kann.
Okay vielen Dank