Нет простого способа сделать это. Вы можете использовать геометрический шейдер, чтобы взломать его вместе, но он, скорее всего, будет медленным, так как вам придется выполнить много геометрических экземпляров, а затем использовать геометрический шейдер для затенения вершин, потому что вершинный шейдер вне игры.
Базовый подход к проблеме:
Оставьте вершинный шейдер пустым и просто верните вершины без изменений
В геометрическом шейдере создайте 8 новых экземпляров каждого треугольника (вместе у вас будет 9 треугольников)
На каждом из треугольников запустите функцию, которая будет проецировать треугольник. Согласно скриншоту, вам потребуется 9 различных матриц представления для отправки в геометрический шейдер.
Теперь расположите треугольники так, чтобы каждый из них отображал свою часть изображения. Обратите внимание, что после проекции координаты находятся в диапазоне [-1; 1], поэтому вам нужно разделить координаты каждого треугольника на 3, а затем сдвинуть соответствующие треугольники с умножением на 1 / 3.
Если вы вычисляете затенение по фонгу на пиксель, вам нужно будет отправить положение камеры фрагментному шейдеру с каждой вершиной, потому что фрагментный шейдер не имеет представления о разделении экрана и у вас есть 9 различных положений камеры.