Myślę, że w wielu odpowiedziach brakuje ważnego punktu: możesz pisać aplikacje, które uzyskują bezpośredni dostęp do sprzętu, ale nie w nowoczesnych systemach operacyjnych . To nie tylko problem czasowy, ale problem „nie masz wyboru”.
Windows, Linux, OSX itp. Zakazują bezpośredniego dostępu sprzętowego do dowolnych aplikacji. Jest to ważne ze względów bezpieczeństwa: nie chcesz, aby żadna przypadkowa aplikacja mogła odczytywać dowolną pamięć GPU z tego samego powodu, dla którego żadna przypadkowa aplikacja nie może odczytać pamięci systemowej. Rzeczy takie jak bufor ramki dla twojego konta bankowego lub coś, co nie jest zapisane w pamięci GPU. Chcesz, aby te elementy były izolowane i chronione, a dostęp kontrolowany przez system operacyjny.
Tylko sterowniki mogą komunikować się bezpośrednio z większością sprzętu, a jedynym sposobem na komunikację ze sterownikiem jest udostępniona warstwa systemu operacyjnego HAL oraz zastrzeżony i niekompatybilny interfejs każdego sterownika. Ten interfejs sterownika będzie nie tylko różny dla każdego dostawcy, ale nawet będzie różnić się między wersjami samego sterownika, co uniemożliwi niemal bezpośrednią komunikację z interfejsem w aplikacji konsumenckiej. Warstwy te są często objęte kontrolą dostępu, która dodatkowo ogranicza możliwość dostępu do nich przez aplikację.
Więc nie, twoja gra nie może po prostu bezpośrednio korzystać ze sprzętu, chyba że atakujesz tylko niepewne systemy operacyjne, takie jak DOS, a jedyną możliwą opcją dla gry na nowoczesnych konsumenckich systemach operacyjnych jest ukierunkowanie na publiczny interfejs API, taki jak DirectX, OpenGL lub Vulkan.