Я хотел бы иметь два пиксельных шейдера; первое выполнение одной вещи и затем следующее выполнение чего-то еще. Действительно ли это возможно, или я должен упаковать все в одну программу построения теней?
Вы можете сделать это, например путем выполнения вызовов функций из основной точки входа к функциям, которые реализованы в различных объектах шейдера.
main() {
callToShaderObject1()
callToShaderObject2()
}
каждая из этих функций callToShaderObject может находиться в разных шейдерных объектах, но все объекты должны быть присоединены и связаны в одной программе, прежде чем ее можно будет использовать.
Они не могут работать одновременно, но вы можете использовать разные шейдеры для разной геометрии или выполнять рендеринг в несколько проходов с использованием разных шейдеров.