Этап OpenGL Compute с другими этапами - PullRequest
1 голос
/ 12 июля 2020

Я хочу иметь одну программу шейдера, в которой есть этап Compute вместе со стандартными этапами графики (вершина, tess control, tess eval, fragment).

К сожалению, если я присоединю этап Compute к остальным программы, а затем связать ее, вызовы запросов местоположения, таких как glGetAttribLocation (для униформ / атрибутов на любом этапе), начинают возвращать -1, указывая, что им не удалось найти названные объекты. Я также пробовал использовать layout (location = N), в результате чего ничего не рисовалось.

Если я прикреплю этапы к двум разным шейдерным программам и использую их одну за другой, обе будут работать хорошо (вычислительный шейдер записывает в VBO, а шейдер отрисовки читает из того же VBO), за исключением того, что я должен переключаться между ними.

Существуют ли ограничения на объединение этапа вычислений со стандартными этапами графики? Во всех примерах, которые я могу найти, есть две программы, но я не нашел объяснения, почему это должно быть так.

1 Ответ

4 голосов
/ 12 июля 2020

OpenGL активно запрещает связывать программу, содержащую вычислительный шейдер, с любыми не вычислительными шейдерными типами. Вы должны были получить ошибку компоновщика, когда попробовали.

Кроме того, действительно нет причин для этого. Единственное гипотетическое преимущество, которое вы могли бы получить от этого, - это наличие у двух наборов шейдеров одинаковых значений. Их участие в одной программе просто не выгодно.

...