2011-12-16 5 views
0

У меня есть шейдер 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 компилируются ОК.

ответ

0

Я избавился от проблемы, поставив вызовы на checkTriangleIntersection() в цикл for.

 Смежные вопросы

  • Нет связанных вопросов^_^