У меня есть шейдер WebGL-фрагмента, который я использую для выполнения raytracing. Я передаю данные сферы и треугольника, используя текстуры. Пока у меня две сферы и три треугольника. Когда я добавляю вызов для проверки interesection с 4-м треугольником, шейдер не связывается, а вызов getProgramInfoLog()
просто возвращает null.Шрифт фрагмента WebGL не может связываться при добавлении дополнительного вызова функции
Может ли фрагмент-шейдер стать слишком большим? Или мне нужно искать другую причину? Как определить, где может быть проблема?
Вот фрагмент кода, комментирующий любой из звонков checkTriangleIntersection
, заставляет шейдер успешно связывать.
checkTriangleIntersection(0.0, rayOrigin, rayDir, piOfNearest, normalOfNearest, colourOfNearest, distOfNearest);
checkTriangleIntersection(1.0, rayOrigin, rayDir, piOfNearest, normalOfNearest, colourOfNearest, distOfNearest);
checkTriangleIntersection(2.0, rayOrigin, rayDir, piOfNearest, normalOfNearest, colourOfNearest, distOfNearest);
//checkTriangleIntersection(3.0, rayOrigin, rayDir, piOfNearest, normalOfNearest, colourOfNearest, distOfNearest);
Поскольку все вызовы одинаковы, за исключением индекса, я думал, что не было бы ничего плохого в самом коде, но есть какой-то предел, что я мог бы работать против?
Я получаю более 30 FPS, прежде чем добавить дополнительный вызов функции, и даже когда я добавляю дополнительный вызов, как вершинный, так и fragemnt shader компилируются ОК.