Pertanyaan saya adalah: mengapa repot-repot menggunakan sesuatu seperti open gl, sfml, sdl ketika semua yang harus Anda lakukan hanyalah mengalokasikan beberapa buffer, meneruskan bitmap dan menggambarnya ke layar?
Pendek: Karena cepat (OpenGL, DirectX).
Panjang:
Anda mungkin berpikir Anda bisa melakukan ini sendiri. Gambar piksel ke layar. Anda dapat menulis perpustakaan kecil untuk menggambar bentuk, seperti paha depan atau segitiga. Ini akan berhasil, tentu saja. Ada banyak perpustakaan di luar sana untuk melakukan hal ini. Beberapa dari mereka bahkan mengimplementasikan OpenGL-spec (sehingga mereka seperti sisi perangkat lunak untuk OpenGL) yang akan melakukan persis seperti yang dilakukan Casey Muratori. Mereka menghitung semuanya pada sisi perangkat lunak, mengatur piksel pada sisi perangkat lunak dan menuliskan hasilnya ke layar.
Namun ini lambat . CPU yang pada akhirnya akan menjalankan semua hal ini tidak dibuat untuk skenario ini. Untuk itulah GPU digunakan. Apa yang dilakukan OpenGL (kecuali tentu saja itu adalah implementasi perangkat lunak) adalah mengambil semua yang Anda suruh untuk dilakukan dan mendorong semua data, semua panggilan-draw, hampir semuanya ke kartu grafis dan memberitahu GPU untuk melakukan pekerjaan. GPU dibuat khusus untuk jenis pekerjaan ini. Mengalikan angka floating point (thats apa yang Anda lakukan banyak ketika menggambar 3D-adegan) dan mengeksekusi shader. Dan ini secara paralel. Hanya untuk membuat Anda merasakan seberapa cepat GPU, pikirkan tentang adegan sederhana dalam 3D dalam layar penuh dengan 1920x1080 piksel. Ini adalah, dikalikan, 2.073.600 piksel untuk menggambar. Untuk setiap orangpixel, GPU akan menjalankan fragmen-shader setidaknya sekali , sebagian besar kali lebih dari sekali. Sekarang, katakanlah kita menjalankan 60 frame per detik. Ini berarti, GPU menjalankan fragmen-shader 2.073.600 * 60 = 124.416.000 kali per detik . Apakah Anda pikir Anda dapat melakukan hal seperti ini pada CPU Anda? (Itu penjelasan yang cukup disederhanakan, ada banyak hal yang perlu dipertimbangkan seperti berapa banyak piksel yang Anda overdraw oleh benda yang lebih dekat, berapa banyak MSAA yang Anda gunakan dan sebagainya, namun 124.416.000 kali per detik mungkin adalah yang terendah yang bisa Anda dapatkan, dan Anda Akan dengan mudah memiliki lebih dari 60fps dengan adegan sederhana)
Itulah yang dilakukan OpenGL dan Direct3D, untuk mesin apa yang melihat @Uri Popovs menjawab.