2013-02-26 5 views
8

Ich arbeite an einem Mac, ich habe FreeGlut kompiliert und installiert, aber ich kann nicht scheinen, den OpenGL 3.2 Kontext damit zu bekommen. Allerdings kann ich es ohne Probleme während der Verwendung von GLFW bekommen. So in GLFW, funktioniert dieser Code völlig in Ordnung:GLFW öffnet OpenGL 3.2 Kontext, aber Freeglut kann nicht - warum?

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2); 
    glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
    glfwOpenWindow(500, 500, 8, 8, 8, 8, 24, 8, GLFW_WINDOW) 

Aber mit freeglut, dieser Code nicht (auf glutCreateWindow):

glutInitContextVersion (3, 2); 
glutInitContextProfile(GLUT_CORE_PROFILE); 
glutInitWindowSize (width, height); 
glutInitWindowPosition (300, 200); 
int window = glutCreateWindow (argv[0]); 

Der Fehler es irgendwie ist:

X Error of failed request: BadRequest (invalid request code or no such operation) 
    Major opcode of failed request: 34 (X_UngrabKey) 
    Serial number of failed request: 29 
    Current serial number in output stream: 29 

Ich verwende MacOS X 10.8 Mountain Lion mit Intel HD4000 Grafik, habe XQuartz als meinen X11 Server installiert und FreeGlut 2.8 aus Quellen kompiliert und installiert.

Weiß jemand, was das Problem sein könnte?

+0

Das genaue Problem, aber ich verwende FreeGlut wie in XQuartz enthalten (opt/x11/lib opt/x11/include). Hast du das Problem gelöst? – Christoph

+0

Gleiches Problem hier - konnten Sie das Problem lösen? –

+0

Hat jemand von euch das Problem gelöst? Ich habe das gleiche Problem.Ich benutze FreeGlut in XQuartz – ammar26

Antwort

1

In 10.8 und 10.7 ist GL 3.2 verfügbar, wenn Sie dies beim Einrichten des GL-Kontexts explizit fordern. Apple nennt dies das "Core Profile", um sich vom "Legacy Profile" zu unterscheiden, welches GL 2.1 ist.

Ich lief dieses Problem mit Wine unter OSX, es unterstützt OpenGL 3.2 nicht. Ich verstehe, dass der X11-Server (entweder Apple X11 oder XQuartz) derzeit nicht die Unterstützung von 3.2 implementiert, noch gibt es einen Schalter, um irgendwo zu drehen, um es zu aktivieren. Es könnte für Kompatibilitätsprobleme, da 3.2 Profil einige existing GL applications

This post suggests mit GLFW (oder vielleicht Apples GLUT.framework wenn es noch so etwas ist) bricht

This page den GL-Stack auf OSX erklärt und bestätigt die 2.1 Problem mit GLX.

+0

Es tut mir leid, aber sehe nicht, wie das auf meine Frage bezieht. Wie ich gezeigt habe - es funktioniert mit GLFW, die auf XQuartz auf meinem System läuft, so dass es definitiv 3.2 Kontexte unterstützt. – gambiting

+0

Es tut mir leid, aber sehen Sie nicht, wie sich das auf meine Frage bezieht. Wie ich schon sagte - OpenGL 3.2 funktioniert mit GLFW, das auf XQuartz auf meinem System läuft, so dass es definitiv 3.2 Kontexte unterstützt. Mein einziges Problem ist, dass ich Freeglut verwenden möchte, nur weil es bequemer ist. Aber wenn das nicht möglich ist, werde ich mit GLFW entwickeln. Aber erzähl mir bitte nicht, dass es unmöglich ist, 3.2 Kontext zu bekommen, weil ich schon einen habe. – gambiting

+1

glfw hat auch einen [Cocoa- und Carbon-Port] (http://sourceforge.net/p/glfw/svn/1617/tree/trunk/lib/), bist du sicher, dass es auf XQuartz läuft? – wally

0

Freeglut ist eine erweiterte Implementierung des SGI GLUT Toolkits und implementiert (mit einigen Ausnahmen um veraltete Hardware) die gleichen Funktionen.

Leider enthält dies eine Reihe von Funktionen, die in einer streng CORE/FORWARD COMPATIBLE-Implementierung brechen würden.

Wenn Sie einen Kontext ohne Angabe einer Version oder eines Profils anfordern, erhalten Sie normalerweise das Beste, was die Kombination aus Treiber und GL-Toolkit bieten kann. Dies ist normalerweise ein Kompatibilitätsprofil und nicht das Kernprofil.

Beachten Sie, dass das einzige, was Sie durch die Verwendung eines Kompatibilitätsprofils verlieren, die vermeintliche Überprüfung veralteter Funktionen ist. Alle neuen Kernfunktionen sollten ohne Probleme funktionieren.

Dieses Problem mit Freeglut ist nicht auf Apple beschränkt, es manifestiert sich auch unter Linux mit einigen Gallium-Treibern. Es ist nicht klar, dass eine kurzfristige Absicht besteht, dies zu beheben. Wenn Sie also CORE/FORWARD COMPATIBLE verwenden müssen, sollten Sie wahrscheinlich zu GLFW oder SDL wechseln.

0

Sie müssen die Flagge einfügen. normalerweise unter der Version. Es sollte in etwa so aussehen:

glutInitContextFlag(GLUT_FOWARD_COMPATIBLE);