Szybkość jest najczęstszym powodem, dla którego tak się nie dzieje. W rzeczywistości możesz robić to, co proponujesz, jeśli stworzysz własny system operacyjny, będzie on po prostu bardzo powolny ze względów architektonicznych. Zatem założenie, że jest szybszy, jest nieco błędne. Nawet gdyby był szybszy, byłby mniej wydajny pod względem rozwoju (np. Zwiększenie prędkości o 1% przy 10-krotnym nakładzie pracy).
Kopiowanie danych z procesora na kartę graficzną jest stosunkowo powolną operacją. Im mniej kopiujesz, tym większa może być prędkość aktualizacji. Idealnie byłoby, gdybyś miał większość danych na GPU i aktualizował tylko małe porcje danych. Istnieje świat różnic między kopiowaniem ponad 320 x 200 pikseli w porównaniu z 1920 x 1200 lub więcej. Zobacz, ile pikseli trzeba zaktualizować, rośnie kwadratowo wraz ze wzrostem boków.
Przykład: taniej jest powiedzieć GPU, aby przesunął obraz o 10 pikseli w prawo, niż ręcznie skopiować piksele do pamięci wideo w różnych lokalizacjach.
Dlaczego musisz przejść przez API? Po prostu dlatego, że to nie twój system. System operacyjny nie zezwala na robienie wszystkiego, co chcesz ze względów bezpieczeństwa. Po drugie, ponieważ system operacyjny musi wyodrębnić sprzęt, nawet system operacyjny rozmawia ze sterownikiem przez jakiś abstrakcyjny system, API, jeśli wolisz.
W rzeczywistości oceniłbym prawdopodobieństwo, że twój system byłby szybszy, gdybyś sam wykonał całą pracę, blisko zera. To trochę jak porównywanie C i asemblera. Pewnie, że możesz pisać asemblery, ale kompilatory są obecnie dość inteligentne i optymalizują się coraz lepiej. Trudno być lepszym ręcznie, nawet jeśli możesz, Twoja produktywność spadnie.
PS: Interfejs API nie uniemożliwia wykonania tej aktualizacji, tak jak zrobiły to stare gry. To wszystko jest po prostu nieefektywne. Nie z powodu umysłu API, ale dlatego, że jest to nieefektywny okres.
PPS: Właśnie dlatego wprowadzają Vulkan.