Ich möchte hier nur den obligatorischen Disclaimer unterbringen bzgl. Macs sind keine Spielecomputer:
Die CPUs in Macs sind die gleichen wie in PCs, sie sind natürlich immer gleich leistungsfähig, egal ob sie in einem Mac oder einem PC stecken. Das gleiche gilt für andere Komponenten, z.B. RAM oder GPUs, auch wenn einige Mac GPUs in PCs kaum zu finden sind. D.h. an den Hardwarekomponenten kann es nicht liegen, wen ein Spiel schlecht läuft. Das sieht man im hier geschilderten Fall schön, da das gleiche Spiel unter Windows ja gut läuft, obwohl es die gleiche Hardware ist.
Dies Spiel selber ist wahrscheinlich in C++ geschrieben, einige Teile vielleicht sogar ausschließlich in einfachen C. Dieser Code greift kaum auf Betriebssystemfunktionen zu, sondern fast nur auf die C/C++ Standard API, die unter Windows und MacOS X kaum Geschwindigkeitsunterschiede aufweist. Wenn der Code mal auf eine Systemfunktion zugreift, so ist das bei Spielen meistens nur die Windows API bzw. unter MacOS X die POSIX API. Auch diese beiden APIs nehmen sich kaum etwas in Sachen Geschwindigkeit.
Der gravierende Unterschied liegt hier einzig und alleine in der 3D API. Direct3D unter Windows und OpenGL unter MacOS X. So manch einer kommt zu dem Schluss, dass Direct3D die "bessere" API ist, da sie anscheinend immer schneller zu sein scheint, aber das ist kompletter Unfug. Wenn überhaupt kann es sein, dass die Grafikkartenhersteller (NVidia, AMD und Intel) bessere Direct3D Treiber als OpenGL Treiber schreiben, dafür kann aber die API nichts, die Schuld liegt hierfür einzig und alleine an den Grafikkartenherstellern, die aufgrund der Marktdominanz von Windows einfach mehr Zeit in die Optimierung ihrer Direct3D Treiber stecken und OpenGL Teilweise etwas stiefmütterlich behandeln. Wobei NVidia den Ruf hat sehr gute OpenGL Treiber anzubieten, lediglich AMD und Intel wirft man vor hier bei OpenGL etwas zu schlampen.
Aber auch das ist nur die halbe Wahrheit. Eine gewisse Mitschuld trifft auch immer die Spielehersteller. Diese schreiben ihre Spiele meist initial für Windows und somit für Direct3D. Erst danach portieren sie ihre Spiele für MacOS X und müssen damit Direct3D durch OpenGL ersetzen. Wenn beide APIs so ähnlich wären, dass man einfach jeden Direct3D Aufruf durch einen OpenGL Aufruf ersetzen könnte, dann gäbe es schon längst eine dritte API, die beide nach außen abstrahiert und alle Spielehersteller würden einfach diese hernehmen. Wenn man ein Spiel über Jahre hinweg für Direct3D entwirft und optimiert, dann ist es nicht verwunderlich, dass dieses Spiel nicht die gleiche Performance bringt, wenn man versucht Direct3D Aufrufe über OpenGL nachzubilden, weil hier oft komplexe Konstrukte entstehen (ein einziger Direct3D Aufruf wird durch 2 Seiten Code mit unzähligen OpenGL Aufrufen ersetzt), die ein nativer OpenGL Programmierer niemals so geschrieben hätte. Das gleiche gilt nebenbei bemerkt auch umgekehrt. Würde man versuchen OpenGL über Direct3D nachzubilden, dann würden auch schrecklich Programmkonstrukte entstehen. Die APIs sind hierfür, zumindest in bestimmten Teilen, zu verschieden. Die Tatsache, dass heute viele Grafikeffekte über sog. Shader realisiert werden und Direct3D und OpenGL auch noch gänzlich unterschiedliche Shadersprachen besitzen (und Shader daher auch umgeschrieben werden müssen) bewirkt dann ihr übriges, vor allem weil das "kompilieren" dieser Shader Aufgabe der Grafikkartentreiber ist und ein schlecht kompilierter Shader natürlich auch keinen gute Performance haben wird.
Zu guter Letzt muss man bedenken, dass Direct3D Teil einer größeren API ist, DirectX, die für die Entwicklung von Spielen entworfen wurde. So bietet DirectX unter anderem z.B. fertige Funktionen für bestimmte 3D Berechnungen an, die man auf der CPU ausführen muss. z.B. kann mit ein paar einfachen CPU Berechnungen über optimierten Datenstrukturen 70-90% aller Dreiecke der gesamten 3D Welt eliminieren, was bedeutet man muss nie versuchen diese zu zeichnen. Das ist deutlich schneller als immer alle Dreiecke an die GPU zu senden (was auch Zeit kostet) und die GPU dann die nicht sichtbaren Dreiecke eliminieren zu lassen (was noch viel mehr Zeit kostet). Zwar kann eine GPU Dreiecke viel schneller eliminieren als eine CPU, aber die CPU kann mit nur wenigen Berechnung hunderte, tausende, ja sogar Millionen von Dreiecke eliminieren, die GPU muss hingegen jedes einzelne Dreieck auch einzeln testen, was jedes mal Berechnungen erfordert. Das liegt daran, dass aus der Sicht der GPU Dreiecke zusammenhanglos sind, während das Programm auf der CPU z.B. weiß, dass diese Gruppe von Dreiecke zusammen einen Baum formen, der an Position XYZ steht, und wenn der Baum an sich nicht sichtbar ist, dann ist auch keines der Dreiecke des Baumes sichtbar, und egal aus wie vielen Dreiecken der Baum besteht, keines davon muss gezeichnet werden. Diese Funktionen, die Direct3D bietet, sind natürlich von Microsoft händisch in Assembler optimiert worden, d.h. die CPU führt diese Berechnungen so schnell aus (unter zur Hilfenahme von SEE2/3/4), wie dieses überhaupt möglich ist. OpenGL ist einen reine Grafik API, sie wurde nur für das Zeichnen von 3D Darstellungen entworfen und optimiert; sie bringt keine derartigen Funktionen mit. Da bei der Portierung oft Zeitdruck herrscht und die mit der Portierung beauftragten Programmierer nicht unbedingt Eliteprogrammierer sind, die Assembler im Schlaf beherrschen, werden diese Funktionen häufig durch einfachen C Code ersetzt, der auch nachdem er den besten C Compiler der Welt durchlaufen hat, nicht an die händische optimierte Assemblerversion heran kommt; teilweise ist er 30-70% langsamer.
Apple trifft an dieser ganzen Sache keine Schuld. Weder ist Apple daran schuld, dass GPU Hersteller schlechte OpenGL Treiber schreiben, noch ist Apple daran schuld, dass Spieleentwickler nicht von Anfang an ihre Spiele auch für OpenGL optimieren. Spiele, die auch unter Windows OpenGL verwenden, laufen als Mac Ports nämlich in der Regel relativ gleich schnell auf beiden Plattformen. Das liegt daran, dass die OpenGL Treiber der Grafikkartenhersteller natürlich unter Windows genauso gut oder schlecht sind wie unter MacOS X und das diese Spiele von Anfang für OpenGL optimiert wurden und daher auf beiden Plattformen entweder gleich gut oder gleich schlecht laufen, je nachdem wie gut optimiert wurde. Und das Apple DirectX nicht von Microsoft lizenziert, das kann man ihnen ja wirklich nicht vorwerfen. Außer Microsoft verwendet kein Mensch DirectX. Jedes System, das 3D hardwarebeschleunigte 3D Grafiken anzeigt, und auf dem nicht Windows läuft, verwendet OpenGL oder eine von OpenGL abgeleitete API. Das gilt für PCs, Smartphones, Tablets und sogar Spielekonsolen (sogar die Playstation 3 bietet OpenGL ES an, zusätzlicher zu einer Sony eigenen API, die etwas low leveliger ist, wenn man noch mehr 3D Performance rauskitzeln möchte). Ich, als Programmierer, habe bereits mit beiden APIs gearbeitet und finde OpenGL deutlich angenehmer: Es ist einfacher und verständlicher und in seiner Einfachheit und Verständlichkeit dennoch unglaublich mächtig.