Bei 3d Engies Direct3d und OpenGL Abstrahieren - wieviel kostet das an Leistung?



  • Wenn die 3d Engine was eigenes hat und das dann erst auf Direct3d oder OpenGL gewrapped wird, dann kostet das doch sicher Leistung oder etwa nicht?

    Und von wieviel Leistung reden wir hier in Prozent, die dieses wrappen kostet?



  • Abgesehen davon, dass es imo keinen Sinn macht, OpenGL oder Direct3D zu wrappen, lässt sich das so allgemein nicht beantworten. Schau dir eine konkrete Engine an und profile eine konkrete Anwendung, die diese Engine verwendet und dann kannst du dir, eine konkrete Vorstellung davon machen, wie es mit dem Overhead der konkreten Engine in der konkreten Anwendung aussieht. Außerdem mal rein prinzipiell: Prozent Overhead im Vergleich zu was?



  • Gabs Spiele, bei denen man zwischen DirectX und OpenGl umschalten konnte? Ich meine ja, kann mich aber grad an keins erinnern.
    Es kommt drauf an, wie feingranular man den Wrapper schreiben würde. Je feiner, desto mehr Overhead würde entstehen. Glaub jetzt aber auch nicht, dass es großartig Sinn macht, einen zu schreiben.



  • ...



  • @dot
    Macht das (wrappen) nicht jede 3D Engine die verschiedene Backends anbietet?


  • Mod

    jede moderne groessere engine wrappt jegliche platform spezifische API, es macht umgekehrt keinen sinn es nicht zu tun, wer will schon platform spezifischen code quer durch die engine haben und alles mehrmals implementieren (womoeglich den code mit #ifdef obfuscaten)?

    sauber macht man es indem man die API funktionen mit einem eigenen layer abstrahiert (macht unity, Frostbite, UE, Cryengine,...). ob es etwas kostet haengt von der implementierung ab. auf konsolen kostet es meistens nichts, auf mobile meistens auch nicht, kosten kommen erst auf wenn man es dynamisch aussuchen will, also z.b. anhand von flags einen d3d9, d3d10, d3d11, ogl2, ogl3, ogl4 etc. wrapper instanziert, da dann ueber virtuelle funktionen gearbeitet wird (oder andere wege von dynamischen branches).

    natuerlich kostet es implementierungszeit und wenn du nur auf einer platform (z.b. windows+dx) ein spiel entwickelst, macht es vielleicht zuviel arbeit, besonders wenn du davon ausgehst, dass du eh nicht z.b. im indie bundle sein wirst und kein linux+mac brauchst, aber dann brauchst du auch keine seperate engine, und falls doch, macht es vermutlich keinen sinn eine eignene zu schreiben, dann lieber eine fertige nehmen.

    somit endet es, schreib keine eigene engine und falls doch, mach es richtig.



  • Mechanics schrieb:

    Gabs Spiele, bei denen man zwischen DirectX und OpenGl umschalten konnte? Ich meine ja, kann mich aber grad an keins erinnern.

    Die Blizzard Titel der letzten 5-10 Jahre. Läuft ja alles nativ auf dem Mac und du kannst das mit einem Kommandozeilenparameter umstellen.



  • Aber bei dem was ein API-Call kostet, macht eine virtuelle Funktion dann auch keinen Unterschied mehr. 🤡


Anmelden zum Antworten