DirectX/Основні відомості про графіку і DirectX

Добре розуміння програмування графічних програм вимагає розуміння апаратної частини, яка оброблює графікою. Direct3D є не стільки бібліотекою для розробки ігор, це інтерфейс для роботи з апаратною платформою. Все, що ви робите в Direct3D ви робите для того, щоб мати змогу виконувати дії з графічним обладнанням. Без розуміння принципів роботи графічного обладнання, вивчення Direct3D поверхове і безнадійне.

Обладнання, яке в першу чергу цікавить нас в програмуванні графіки це GPU (або графічний процесор). Він відрізняється від CPU (центральний процесор) по своїй архітектурі, але перш за все, у використанні. Процесор виконує розрахунки і направляє результат до комп'ютеру. Графічний процесор виконує обчислення із графікою і направляє графічний вивід на монітор.

На додаток, на відміну від роботи з процесором, програмування графіки працює з повністю ізольованою частиною пам'яті, яка зветься відеопам'ять. Це, як правило, фізично окрема пам'ять. В додаток до плат оперативної пам'яті на материнській платі, відео-пам'ять розташовується на відеокарті, тому GPU має до неї швидкий доступ. Відеопам'ять використовується для збереження поточного зображення на екрані, а також будь-які дані, які можуть бути використані для побудови наступного зображення.

DirectX Graphics Infrastructure

ред.

DirectX Graphics Infrastructure (DXGI) є компонентом, який лежить в основі всіх самих останніх версій Direct3D. Він виконує основні задачі, такі як відображення зображення на екрані, надає відомості про доступні резолюції монітора і відеоадаптера.

DXGI фактично не є частиною Direct3D. Вона лежить в основі цього та інших компонентів, графіки, і являє собою інтерфейс між Direct3D і обладнанням.

У попередній версії Direct3D, завданнями низького рівня, такими як перерахування пристроїв, передача зображених кадрів на вихід, контроль гами, а також управління переходом у повноекранний режим були включені в Direct3D. Зараз ці задачі здійснює DXGI, починаючи з появи Direct3D 10. DXGI взаємодіє з драйвером в режимі ядра та апаратними засобами системи.

Програма може отримати доступ до DXGI безпосередньо, або з використанням бібліотеки Direct3D. Ці методи описані в D3D11_1.h, D3D11.h, D3D10_1.h, або D3D10.h, які реалізують взаємодію з DXGI для вас. Ви можете працювати з DXGI безпосередньо, якщо ваше застосування повинне мати інформацію про наявні пристрої або контролювати, як дані представляються на виході.

Черга зміни кадрів

ред.

GPU містить у своїй пам'яті, посилання на буфер пікселів, в якому міститься зображення яке є на даний момент на екрані. Коли вам потрібно зобразити щось, 3D-моделі або зображення, графічний процесор оновлює цей масив і передає інформацію на монітор для відображення. Монітор перемальовує екран зверху вниз, замінивши старе зображення новим.

Однак, монітор не оновлюється так швидко, як необхідно для рендерінгу (формування зображення) в реальному часі. Більшість моніторів мають частоту оновлення в діапазоні від 60 Гц (60 кадрів в секунду) до 100 Гц. Якщо GPU отримає нове зображення, коли монітор оновлював попереднє зображення, відображене зображення буде розбите на дві частині, верхня частина, буде містити старий образ, а нижня частина новий. Цей ефект називається розривом.

Щоб уникнути цього, DXGI реалізує функцію під назвою свопінг.

Замість посилання нових зображень безпосередньо до монітора, DXGI направляє нове зображення на вторинний буфер пікселів, називається задній буфер. Передній буфер містить зображення, яке зображається в даний час. Зображення нового кадру формується на задньому буфері, а коли формування закінчиться, DXGI вносить в передній буфер вміст заднього буфера, відкидаючи старе зображення. Після зміни буферів передній буфер стає заднім, а задній переднім.

Зазвичай для збільшення швидкодії гри, додають додаткові задні буфери, які являють собою чергу зміни кадрів. Буфер, який використовується для направлення зображення на монітор, завжди змінює свою позицію в такому ланцюгу буферів.

Послідовність рендерінгу

ред.

Рендерінг це процес, на основі якого формується 3D зображення на екрані. Він працює як конвеєр, один крок за іншим. Він складається з кроків, які виконуються на GPU. При виконанні послідовності рендерінгу в Direct3D, дані поступають з декількох джерел.

На першій стадії отримання вхідних даних, отримується інформація про 3D-моделі які програма хоче відобразити. Вся інформація компілюється і готується до рендерінгу.

На етапі растеризації визначається формується образ зображення кожного елементу, яке вже представлене у вигляді пікселів. Основною задачею програми на даному етапі є прорахунок у якому місці заднього буферу і якого кольору слід намалювати ці пікселі.

На фінальній стадії компонування відбувається поєднання зображень моделей в одне єдине зображення, і розміщення цього зображення коректно в задньому буфері.