it-swarm.com.de

Mac Mojave + opengl

Mac OS 10.14 Mojave wurde gerade veröffentlicht, und seit Juni wissen wir, dass OpenGL im Betriebssystem nicht mehr verwendet werden sollte. "OpenGL-Anwendungen werden weiterhin ausgeführt, aber Sie sollten zu Metal wechseln", um sie zu umschreiben . Es scheint jedoch keine Dokumentation zu geben, ob Sie mit OpenGL noch compile können oder ob Apple dies verhindert oder lässt die richtigen Entwicklungsbibliotheken aus. Ich entwickle derzeit ein OpenGL-basiertes Grafikprogramm und kann keine Aktualisierung riskieren, wenn die Kompilierung nicht mehr funktioniert. Hat jemand das getestet?

EDIT: Teilt jemand anderen Esenthels Erfahrung?

10
synchronizer

Ich kann kompilieren, aber nach dem Update auf den neuesten Mojave und Xcode funktionieren meine OpenGL-Anwendungen einfach nicht.

In einem Fall bekomme ich während eines Systemaufrufs GL einen Haken, in einem anderen Fall nur einen schwarzen Bildschirm ... und einige Fehler in der Ausgabe wie hier: https://stackoverflow.com/fragen/52507950/nicht-laden-info-plist-error-xcode-10-unter-macos-10-14-mojave # =

Ich empfehle, dass Sie nicht aktualisieren.

Ich denke, in Xcode 10 OpenGL-Bibliotheken ist etwas kaputt.

Bearbeiten: Es scheint, dass spätere Updates für Mac OS und Xcode die Probleme behoben haben.

7
Esenthel

GLFW umgehen. Ähnlich wie bei anderen Antworten, aber Sie müssen das Fenster in der Zeichenschleife nicht ändern, sondern rufen zuerst glfwPollEvents() auf.

window = glfwCreateWindow(width-1, height, "Hello World", NULL, NULL);
glfwPollEvents();
glfwSetWindowSize(window, width, height);

Außerdem scheint glfwHideWindow() und glfwShowWindow() zu funktionieren. Ebenso ist glfwSetWindowPos() eine Alternative. Die Einstellung der Fenstergröße erscheint zwar schneller als das Ausblenden/Anzeigen des Fensters, und ich möchte die Fensterposition nicht verschieben.

3
Daniel Schwartz

Der Code bei

http://people.bath.ac.uk/abscjkw/ComputerPrograms/C++programs/OpenGL/MojaveOpenGL.cpp

funktioniert gut in Mojave mit Xcode 10.0. Das Fenster wird automatisch verkleinert, um das Schwarz zu entfernen. OpenGL- und GLUT-Frameworks werden dem Projekt von der üblichen Stelle aus/System/Library/Frameworks hinzugefügt

Chris

OpenGL in Mojave ist seit heute (21. Oktober 2018) fehlerbehaftet. Sie müssen die glfw-Fensterposition verschieben, um zu sehen, was gerendert wird.

Dieser Workaround-Code in der Rendering-Schleife hat für mich funktioniert: if(!init) { int x,y; glfwGetWindowPos(window,&x, &y); glfwSetWindowPos(window,x+1,y);
init = true; }

1

Ich verwende GLUT und OpenGL . Das Problem ist auf Xcode 10.0 und 10.1 beta3 vorhanden.

Wenn Sie die Größe des Fensters ändern, werden die Grafiken meistens angezeigt.

Also habe ich einen Workaround entwickelt, der die Callback-Funktion umformt. Angenommen, ich wollte ein 1000x1000-Fenster aktivieren. Ich aktiviere es mit 999x999 und wende es bei der Umformung nach Bedarf auf 1000x1000 an:

void reshape (int width, int height){
    glutReshapeWindow (1000, 1000);
}

Und vor allem:

int main (int argc, char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize( 999,999 );
    glutInitWindowPosition (0.0f, 0.0f);
    glutCreateWindow("example");

    glutReshapeFunc (reshape);
    glutDisplayFunc(draw);
    glutKeyboardFunc(keyboard);
    glutIdleFunc(idle);

    glutMainLoop();
    return 0;
}

Da der Rückform-Callback vor der Anzeige ausgelöst wird, funktioniert er vorerst.

1
PNeves

Ich verwende GLEW, GLUT, OpenGL 2.0 und SDL 2. Ich kann meine OpenGL-Anwendung kompilieren und ausführen. Ich musste jedoch meine Framework-Suchpfade ändern, um Folgendes aufzunehmen:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks

wo OpenGL- und GLUT-Framework + -Header jetzt platziert sind, da ich im alten Suchpfad System/Library/Frameworks keine OpenGL/GLUT-Header finden konnte (obwohl das Framework noch vorhanden war, waren keine Header enthalten). Ich musste auch sicherstellen, dass meine Einschlüsse GLUT/glut.h waren, anstatt nur glut.h.

Dies gibt mir neue Warnmeldungen in Form von:

[default] Info.plist-Ausnahmen (eGPUOverrides) können nicht geladen werden. "und" Gespeicherte Enable-Annullierungseinstellung entspricht der Standardeinstellung (= 1).

Ich habe sie noch nicht geprüft und was ihre Auswirkungen sind. 

Was mich wirklich stört, ist das, was Esenthel sagt, dass nach dem Kompilieren und Ausführen der App nur ein schwarzer Bildschirm angezeigt wird. Wenn Sie das App-Fenster ziehen (ich verwende nicht den Vollbildmodus), wird die Animation angezeigt. Anscheinend ist die Animation im Hintergrund und der gesamte Code wird ausgewertet. Es wird jedoch nur ein schwarzer Bildschirm angezeigt, bis ich das Fenster ziehe.

BEARBEITEN: Ich verwende Mojave und Xcode 10 (nicht Beta).

1
Marcus Åkerman

Ich bin auch auf dieses Update gestoßen. Ich benutze glfw. Das erstellte Fenster kann den gewünschten Inhalt nach der Größenänderung anzeigen oder verschieben. Ich habe glfwSetWindowPos(window, 100, 100); in die Hauptschleife eingefügt, um es für eine temporäre Lösung zu verschieben.

0
Qian_Lin

"Problem" behoben, indem Xcode 9.4.1 heruntergeladen wurde

Darin kompiliert und meine App mit OpenGL-Ansicht funktioniert wie sie soll.

Ich denke es ist etwas mit Layer-Backed Views . Weil ich beim Scrollen meiner OpenGL-Ansicht unter einer bestimmten Ansicht sichtbar wird ... und flackert. Und ich sehe, es ist richtig hinterhergezogen. Aber wenn ich aufgehört zu blättern, verschwindet es. 

0
KAMIKAZE

Meine Problemumgehung in GLFW ist das Aufrufen von show window in der Hauptziehschleife.

 bool needDraw = true;
    if (needDraw) {
        glfwShowWindow(window);
        glfwHideWindow(window);
        glfwShowWindow(window);
        needDraw = false;
    }
0
Nientai Ho

Der Grund für das Fehlschlagen einiger OpenGL-Codes liegt darin, dass Ihre Ansicht in Mojave automatisch mit einer Layer-Unterstützung versehen ist. Wenn Ihr Code diese Bedingung testet:

[NSGraphicsContext currentContextDrawingToScreen]

Es wird NEIN zurückgegeben und der Code unter dieser Bedingung wird nicht ausgeführt (d. H .: nichts auf dem Bildschirm gezeichnet).

Leider können Sie WantsLayer in Mojave auch nicht auf NO setzen, es wird nicht funktionieren.

0
Kuro

In einigen Fällen funktioniert das Verschieben der Fensterkoordinate um +1 nicht .. In diesem Fall ziehen wir das Fenster fortlaufend programmatisch, bis es gerendert wird, und stoppen den Bildschirm durch Drücken der Tastatur. Fügen Sie es in die Spielschleife ein, nachdem Sie die Puffer ausgetauscht haben.

    if (glfwGetKey( window, GLFW_KEY_Q ) == GLFW_RELEASE && !mac_moved){
        int x, y;
        glfwGetWindowPos(window, &x, &y);
        glfwSetWindowPos(window, ++x, y);
    } else {
        mac_moved = true;
    }

Definiere mac_moved als statische Variable irgendwo oben.

static bool mac_moved = false;
0