Beginnen Sie, indem Sie aus dem "Wrapper" -Teil der API herausfinden, was Sie tatsächlich benötigen. Es ist im Allgemeinen sehr, sehr einfach: Sie benötigen die grundlegenden Ressourcen (Puffer, Shader, Texturen, Pipeline-Status) und eine Möglichkeit, diese Ressourcen zum Erstellen eines Frames durch Übermitteln einiger Draw-Aufrufe zu verwenden.
Versuchen Sie, eine übergeordnete Logik aus dem Wrapper-Teil der API herauszuhalten . Wenn Sie in diesem Teil der API eine clevere Szenen-Culling-Technik implementieren, sind Sie jetzt auf dem richtigen Weg, diese Logik in allen Backend-Implementierungen zu duplizieren. Das ist eine Menge zusätzlicher Aufwand, also halte es einfach. Die Szenenverwaltung sollte Teil eines übergeordneten Teils der API sein der den Wrapper verwendet, anstatt Teil des Wrappers selbst zu sein.
Wählen Sie die Ziele, die Sie unterstützen, und verstehen Sie sie. Es ist schwer, anständige Wrapper für "alles" zu schreiben, und das müssen Sie wahrscheinlich nicht (wohl auch nicht) brauchte eine einzelne Wrapper, entweder zu schreiben, wie es in Philipps Antwort darauf hingewiesen ). Es ist fast unmöglich, einen anständigen Wrapper zu schreiben, wenn Sie nicht wissen, welche APIs Sie bereits einbinden werden.
Bewerten Sie regelmäßig den Status Ihrer API. Es sollte im Allgemeinen eine kleinere Oberfläche als die zugrunde liegenden umhüllten APIs haben. Wenn Sie feststellen, dass Sie eins-zu-eins-Wrapper-Typen für jede D3D-Struktur oder jeden OpenGL-Funktionsaufruf erstellen, sind Sie wahrscheinlich vom Kurs abgekommen.
Schauen Sie sich an, welche Arbeit zuvor geleistet wurde. Sokol und BGFX sind APIs, die einen Grad an Agnostizität bieten, der für Sie nützlich sein kann, und die relativ einfach zu verstehen sind (insbesondere die ersteren).