Es hängt natürlich davon ab, was genau man machen will, aber die Performance ist meiner Erfahrung nach heutzutage eher nebensächlich. Man kann in C# und wohl auch in Java Code schreiben, der in der Regel schnell genug ist. Vorteil dieser beiden Sprachen gegenüber C++ ist auf jeden Fall, dass sie wesentlich einfacher zu lernen sind, weshalb im Moment C# meine Empfehlung für die meisten Programmieranfänger ist.
Aber: C# und Java sind für die schnelle und einfache Entwicklung spezialisierter Anwendungssoftware gedacht und dafür auch wunderbar. Für die Spieleentwicklung eignen sich beide Sprachen aber imo rein prinzipiell weniger gut und zwar aus folgendem, einfachen Grund: Garbage Collection. Abgesehen davon, dass Garbage Collection in professionellen Spielen aufgrund der unvorhersehbaren Performancecharakteristik (für den Hobbybereich allerdings wohl weniger bis kaum relevant) eher ein Dealbreaker ist, gibt es in Sprachen mit Garbage Collection ein imo ganz fundamentales Problem und zwar Ressourcenverwaltung (oh, the irony). Das mag in den Bereichen, auf die Java und C# abzielen, von weniger großer Wichtigkeit sein, in Spielen ist das allerdings ein ganz wesentlicher Aspekt. Wenn du einfach nur möglichst unkompliziert ein Spiel umsetzen möchtest, dann nimm eine Engine oder ein komplett fertiges Toolkit wie z.B. Unity und du wirst glücklich. Aber wenn du dich mit der Technik im Hintergrund auseinandersetzen willst, dann würde ich persönlich von C# und ganz besonders Java wehement abraten, da in diesen Sprachen kein brauchbarer Ansatz für Ressourcenmanagement existiert und sehr wahrscheinlich nie existieren wird. Da du mit LWJGWL arbeitest, ist dir ja vielleicht schon aufgefallen, wie umständlich der Umgang mit Texturen, VBOs, FBOs, Shadern etc. wird, sobald man sicherstellen will, dass unter allen Umständen alles auch wieder ordentlich freigegeben wird...
C++ finde ich von der Sprache her eleganter und einfach schöner zu benutzen, aber man muss sagen, dass das ganze Buildsystem echt veraltet und sehr fummelig ist. Alleine, dass es sowas wie CMake geben muss ist ganz ganz schlecht.
Auch wenn ich nachvollziehen kann, wieso es auf den ersten Blick so wirkt, so sind "veraltet" und "fummelig" keine Attribute, die ich dem C++ Buildmodel zuschreiben würde, viel eher: "Missverstanden". Zugegeben: Es ist komplexer als das anderer Sprachen, aber dafür auch extrem mächtig. CMake ist gut gemeint, aber imo ein völlig fehlgeleiteter Ansatz, der vermutlich genau aus so einem Missverständnis heraus geboren wurde. Wir haben es mittlerweile an einen Punkt gebracht, wo wir sowas wie IDEs haben, damit wir eben gerade nicht für jeden Mist irgendein Skript anfassen müssen. CMake degradiert meine IDE zum Texteditor und das ist im 21. Jahrhundert imo inakzeptabel. Verschiedene Plattformen bedeutet unterschiedliche Toolchains, benötigen unterschiedliche Buildsysteme. Das liegt in der Natur der Sache und das lässt sich auch mit Metabuildsystemen wie CMake nicht vermeiden, nur verschleiern. Zeig mir ein CMake-basiertes System für ein nichttriviales Projekt auf unterschiedlichen Plattformen, das nicht von if (PlatformA) ... elseif (PlatformB) ... durchzogen ist. Ich für meinen Teil hab jedenfalls noch nie an einem Projekt gearbeitet, in dem CMake mir etwas anderes als Schmerz bereitet hätte...
Die Sprache ist sehr komplex und du hast viele Möglichkeiten etwas falsch zu machen [...]
Das ist in der Tat das größte Problem von C++.