Moje pytanie brzmi: po co męczyć się z użyciem czegoś takiego jak open gl, sfml, sdl, gdy wszystko, co musisz zrobić, to po prostu przydzielić bufor, przekazać mapę bitową i narysować ją na ekranie?
Krótko: Ponieważ jest szybki (OpenGL, DirectX).
Długie:
Możesz myśleć, że możesz zrobić to wszystko sam. Narysuj piksele na ekranie. Możesz napisać małą bibliotekę do rysowania kształtów, takich jak quady lub trójkąty. To oczywiście zadziała. Istnieje wiele bibliotek, które dokładnie to robią. Niektóre z nich implementują nawet specyfikację OpenGL (więc są one jak oprogramowanie dla Opengl), co zrobi dokładnie to, co robi Casey Muratori. Obliczają wszystko po stronie oprogramowania, ustawiają piksele po stronie oprogramowania i zapisują wynik na ekranie.
Jest to jednak powolne . Procesor, który ostatecznie wykona wszystkie te rzeczy, nie został stworzony dla tego scenariusza. Po to są GPU. OpenGL (o ile oczywiście nie jest to implementacja programowa), bierze wszystko, co mu każesz i wypycha wszystkie dane, wszystkie połączenia losowe, prawie wszystko na kartę graficzną i nakazuje GPU wykonanie pracy. Procesor graficzny został stworzony specjalnie do tego rodzaju zadań. Mnożenie liczb zmiennoprzecinkowych (to jest to, co często robisz podczas rysowania sceny 3D) i wykonywanie programów cieniujących. I to równolegle. Aby dowiedzieć się, jak szybki jest procesor graficzny, pomyśl o prostej scenie 3D na pełnym ekranie z 1920 x 1080 pikseli. Są to, pomnożone, 2 073 600 pikseli do narysowania. Dla każdegopiksel, procesor graficzny uruchomi moduł cieniujący fragmenty przynajmniej raz , przeważnie więcej niż jeden raz. Załóżmy teraz, że pracujemy z prędkością 60 klatek na sekundę. Oznacza to, że procesor graficzny uruchamia moduł cieniujący fragmentów 2 073 600 * 60 = 124 416 000 razy na sekundę . Czy uważasz, że możesz zrobić coś takiego na swoim CPU? (To dość uproszczone objaśnienie, jest o wiele więcej rzeczy do rozważenia, np. Ile pikseli przesuwasz się przez bliższe obiekty, ile MSAA używasz itd., Jednak 124.446.000 razy na sekundę jest prawdopodobnie najniższą możliwą do uzyskania, a ty z łatwością uzyskasz więcej niż 60 klatek na sekundę dzięki prostej scenie)
To właśnie robią OpenGL i Direct3D, za jakie silniki widzą odpowiedź @Uri Popovs.