Доброго времени суток, господа.
Извиняюсь за кривой заголовок темы, вот что бы хотелось узнать:
Допустим в вершинном шейдере я выполнил некую проверку в результате которой выяснилось, что дальше мне рисовать вершину не нужно.
Можно ли дальше ничего не делать и прекратить выполнение шейдера (или вообще конвеера) для текущей вершины? Я так понял что фрагментный шейдер все равно
потом начнет для этой вершины выполнятся? Как сделать так чтобы фрагментный шейдер сработал для вершины которую мне рисовать не нужно
как можно быстрее (как-нибудь загнать координаты в ноль?), или можно вообще сделать так чтобы он не выполнялся?
Можно ли и правильно ли использовать с этой целью "Return"? И сработает ли он как надо вообще?
Прервать выполнение шейдера можно. Для этого делаешь бесконечный цикл в шейдере. Через пару секунд вотчдог в винде видит, что гпу не отвечает, и ресетит драйвер. Все, шейдер прерван.
MrShoor
> Прервать выполнение шейдера можно. Для этого делаешь бесконечный цикл в
> шейдере. Через пару секунд вотчдог в винде видит, что гпу не отвечает, и
> ресетит драйвер. Все, шейдер прерван.
Хаха, очень смешно, ты такой остроумный что порезаться можно. Молодец.
Можно из вершинного шейдера в геометрический передавать какой-то флаг, что дальше рисовать не имеет смысла и из геометрического шейлера по этому флагу выходить, не создавая конечных вершин.
Panzerschrek[CN]
> Можно из вершинного шейдера в геометрический передавать какой-то флаг, что
> дальше рисовать не имеет смысла и из геометрического шейлера по этому флагу
> выходить, не создавая конечных вершин.
Спасибо, буду пробовать.
MikeNew
> Хаха, очень смешно, ты такой остроумный что порезаться можно. Молодец.
Каков вопрос таков и ответ. Все просто.
MikeNew
Ты в курсе, что фрагментный шейдер выполняется не для вершин, а для примитивов?А что примитив, как правило, состоит из нескольких вершин? А что одна вершина может участвовать в нескольких примитивах?
MikeNew
> Как сделать так чтобы фрагментный шейдер сработал для вершины которую мне
> рисовать не нужно
> как можно быстрее
"discard" во фрагментном шейдере - и текущий фрагмент не будет рисоваться
Фрагментный шейдер выполняется не для примитивов, а для фрагментов.
Discard не прерывает выполнение шейдера.
MikeNew
В вертексном шейдере загоняешь все координаты вершин всех ненужных объектов за экран и например возможно пишешь return для досрочного выхода из шейдера
v.vertex = NaN
Wraith
> Фрагментный шейдер выполняется не для примитивов, а для фрагментов.
?
Это уже ненужные подробности. Суть в том, что discard для вершин неоднозначен, и ОП об этом даже не подозревает.
Wraith
> Фрагментный шейдер выполняется не для примитивов, а для фрагментов.
фрагментный шейдер выполняется для фрагментов примитива
Delfigamer
> Суть в том, что discard для вершин неоднозначен
дискард для одной нити warp-а не ускорит завершение работы всего варпа, всё равно нужно будет ждать завершения остальных нитей, разве что одновременно все 32 нити warp-а дискарднутся...
™•-=MASTER=-•™
> дискард для одной нити warp-а не ускорит ля ля тополя
Это уже ненужные подробности. Суть в том, что discard для вершин неоднозначен, и ОП об этом даже не подозревает (иначе указал бы нужный вариант сразу).
Delfigamer
> ОП
это кто? :)
Тема в архиве.