Моє запитання: чому навіть не турбуватися, використовуючи щось на кшталт відкритого gl, sfml, sdl, коли все, що вам потрібно зробити, це просто виділити якийсь буфер, передати растровий малюнок і намалювати його на екран?
Короткий: Тому що його швидко (OpenGL, DirectX).
Довго:
Ви можете подумати, що можете зробити це все самостійно. Намалюйте пікселі на екрані. Ви можете написати невелику бібліотеку для малювання фігур, як квадратики або трикутники. Це, звичайно, спрацює. Є багато бібліотек, які роблять саме це. Деякі з них навіть реалізують специфікацію OpenGL (тому вони схожі на програмне забезпечення для opengl), що буде робити саме те, що робить Кейсі Мураторі. Вони обчислюють все на стороні програмного забезпечення, встановлюють пікселі на стороні програмного забезпечення та записують результат на екран.
Однак це повільно . ЦП, який врешті-решт виконає всі ці речі, не був створений для цього сценарію. Ось для чого призначені графічні процесори. Що робить OpenGL (якщо, звичайно, це не програмне забезпечення), це взяти все, що вам сказати, і натиснути всі дані, всі дзвінки, майже все на відеокарту і сказати GPU виконати роботу. GPU створений спеціально для такої роботи. Множення чисел з плаваючою комою (ось що ви робите багато під час малювання 3D-сцени) та виконання шейдерів. І це паралельно. Тільки для того, щоб ви зрозуміли, наскільки швидкий графічний процесор, подумайте про просту сцену в 3D на повноекранному екрані з 1920x1080 пікселями. Це намальовано 2 073 600 пікселів для малювання. Для кожногопікселів, GPU запустить фрагмент-шейдер принаймні один раз , більшість разів більше, ніж один раз. Тепер, скажімо, ми працюємо зі швидкістю 60 кадрів в секунду. Це означає, що GPU запускає фрагмент-шейдер 2 073 600 * 60 = 124,416 000 разів в секунду . Як ви думаєте, ви можете зробити щось подібне на своєму процесорі? (Це досить спрощене пояснення. Є ще багато речей, які слід врахувати, як, на скільки пікселів ви перевищуєте ближчі об’єкти, скільки MSAA ви використовуєте і так далі, однак 124,416 000 разів за секунду - це, мабуть, найнижчий показник, і ви Ви легко матимете набагато більше 60 кадрів в секунду за допомогою простої сцени)
Це те, що роблять OpenGL та Direct3D, а які двигуни бачать відповідь @Uri Popovs.