Можете ли вы иметь несколько пиксельных (фрагментных) шейдеров в одной программе?
Я хотел бы иметь два пиксельных шейдера; первый делает одно, а потом другой делает что-то другое. Возможно ли это, или я должен упаковать все в один шейдер?
3 ответа
Вы можете сделать это, например, выполнив вызовы функций из главной точки входа в функции, которые реализованы в различных шейдерных объектах.
main() {
callToShaderObject1()
callToShaderObject2()
}
каждая из этих функций callToShaderObject может находиться в разных шейдерных объектах, но все объекты должны быть присоединены и связаны в одной программе, прежде чем ее можно будет использовать.
Они не могут работать одновременно, но вы можете использовать разные шейдеры для разной геометрии или выполнять рендеринг в несколько проходов, используя разные шейдеры.
Ответ зависит от версии GL, нужно проверитьglAttachShader
документацию для версии, которую вы используете. Версии GLES (включая webgl) не позволяют присоединять несколько фрагментных шейдеров к одной программе и при попытке вызвать ошибку GL_INVALID_OPERATION.
Допустимо присоединять несколько объектов шейдера одного типа, поскольку каждый из них может содержать часть полного шейдера.
glAttachShader — OpenGL ES 3.2 :
Не допускается присоединение нескольких шейдерных объектов одного типа.