Обидва графічні API (OpenGL та DirectX) розробляють чітко визначений конвеєр, в якому кілька етапів можна програмувати. Ці програмовані етапи вимагають прийняття фіксованого мінімального обсягу даних і повинні виконати чітко визначений діапазон операцій над ним та вивести деякий визначений мінімальний вихід, щоб дані могли бути передані на наступний етап правильно. Схоже, ці трубопроводи призначені для роботи лише з обмеженою кількістю типів геометричних даних, які у випадку D3D та OGL є координатами даних вершин та текстур.
Але якщо дано випадок, коли додаток, яке я планую зробити, не використовує вершин (або навіть вокселів) для представлення його геометричних даних і не робить точно перетворень чи проекцій, растеризації чи інтерполяції чи чогось подібного, таких обмежень API або трубопровід ускладнює справи.
Отже, чи існує спосіб, яким ми можемо змінити графічний конвеєр таким чином, щоб функціонал того, що кожен етап робить з даними, і тип даних, що виводяться на кожному етапі, мінявся на мою користь? Якщо ні, то чи існує спосіб, за допомогою якого я можу використовувати функції "raw" API для побудови власного трубопроводу? Якщо ні, то, будь ласка, зазначте, чому це неможливо.
EDIT : Моя програма використовує функції щільності для представлення геометрії. Функція має значення в кожній точці простору. Я поділяю плоду камери на 3d сітку, кожен блок може проектуватися як піксель. На кожному блоці я інтегрую функцію щільності і перевіряю, чи не перевищує її необхідне значення. Якщо так, то передбачається, що в цьому блоці щось існує, і виводиться піксель, відповідний цьому блоку. Отже, тепер у своєму рендері я хочу передати функцію (яку я представляю за допомогою рядка) графічному обладнанням замість вершинних даних у вершинних буферах. це також означає, що вершина шейдера не буде мати вершин для перетворення в гомогеніозний простір кліпу, і фрагмент шейдер не отримує інформацію про пікселі. натомість зараз більша частина пошуку та оцінки відбувається за пікселем.