Ich habe viele interessante Fragen zu XNA vs. OpenTK vs. SlimDX vs. OpenGL vs. DX gelesen, und obwohl es wirklich nützlich ist, mit diesen verschiedenen APIs / Frameworks andere allgemeine Eindrücke aus Hunderten von Stunden zu erhalten, habe ich dies nicht getan jede Antwort gesehen, die klar definiert, was der Umfang von jedem ist.
Es ist klar, was der Unterschied zwischen einer API, einer Engine und einem Framework in der Theorie ist, aber für jemanden, der nur begrenzte Erfahrung mit Grafiksystemen hat, ist es schwieriger zu erkennen, was auf der praktischen Seite in jede Kategorie fällt. (Nicht einfacher durch all die Überlappungen! ZB XNA, das eine Inhaltspipeline als integralen Bestandteil implementiert)
Nehmen wir zum Beispiel das Keulen von Gesichtern - XNA "macht" dies im Hintergrund, ohne dass der Programmierer darüber nachdenken muss, aber wo passiert es? Gibt es in DX eine 'Cull Face'-Funktion, die aufgerufen werden muss, oder vielleicht oben in XNA? Oder macht es die GPU oder ihr Treiber?
Ich habe in der Dokumentation zu einem der verwalteten Projekte gelesen (ärgerlicherweise kann ich mich nicht erinnern, welches), wie schwierig es war, effizienten Rendering-Code zu implementieren, und wie dieses Projekt ihn abstrahierte. Dies irritierte mich ein wenig und ließ mich fragen, was XNA unter DrawIndexedPrimitives tut, was manuell durchgeführt werden müsste, wenn das Framework für etwas Flexibleres belassen würde.
Was macht XNA im Hintergrund beim Rendern dieses Cubes, was eine verwaltete API nicht tun würde?
quelle
Antworten:
Ich denke, die Frage wäre besser zu beantworten, wenn Sie sie umkehren würden. Wie genau funktioniert eine Grafikkarte und welche Anrufe werden von DirectX oder OpenGL getätigt, um diese Funktionen zu nutzen?
Dies würde Ihre Frage per se nicht beantworten, aber da DirectX und OpenGL viele übergeordnete Klassen hinzufügen, um die Dinge für Sie zu vereinfachen, glaube ich, dass der Unterschied zu vage ist, was beispielsweise XNA bietet.
Für die Grundlagen finden Sie Ähnlichkeiten in DirectX / XNA-Aufrufen, da auf einer bestimmten (niedrigeren) Ebene die Dinge nicht mehr abstrakt sein können und die Anrufe von Ihnen selbst getätigt werden müssen.
Also würde ich sagen, erstellen Sie eine einfache Rendering-Engine in OpenGL (ich würde sagen, zugänglicher, um eine niedrigere Ebene zu erreichen) und sehen Sie, wohin Sie das führt!
quelle
Ein Framework bietet im Wesentlichen eine API. Oft werden dazu andere APIs verwendet oder umbrochen. Die beiden Begriffe sind nicht unbedingt unterschiedlich, es gibt keinen klaren Unterschied im Umfang und es ist nicht wirklich wichtig, dass Sie den Unterschied erkennen können. Wichtig ist, dass Sie wissen, auf welcher Abstraktionsebene eine bestimmte API, Bibliothek, ein Framework, eine Engine, eine Plattform oder Paket arbeitet bei. Dies herauszufinden, ist leider von Fall zu Fall unterschiedlich.
quelle
Das Framework beginnt ... wo die API endet. Die API besteht aus einer begrenzten Anzahl von Funktionen / Klassen / was auch immer Sie verwenden können, und das Framework fasst nur all diese Dinge zusammen.
Wenn du fragst, wie viel Zeug geht auf in zwischen Ihrem Anruf zu , was Framework - Funktion verwenden Sie, was auch immer API - Methode ihrer Berufung zu bekommen, das ist wirklich nicht beantwortbar im allgemeinen Fall ist. Einige Dinge sind einfach, andere sind wirklich abstrahiert und verbergen möglicherweise Dinge, über die es nützlich wäre, Bescheid zu wissen (weshalb ich davon ausgehe, dass Sie diese Frage stellen).
Speziell für XNA können Sie den Code wahrscheinlich mithilfe eines Tools wie ILSpy anzeigen , um die XNA-DLLs aufzubrechen und zu sehen, was unter der Haube vor sich geht.
quelle