Фрагментный шейдер WebGL не может связать при добавлении дополнительного вызова функции - PullRequest
0 голосов
/ 17 декабря 2011

У меня есть фрагментный шейдер WebGL, который я использую для трассировки лучей. Я передаю данные сферы и треугольника, используя текстуры. Пока у меня работают 2 сферы и 3 треугольника. Когда я добавляю вызов для проверки пересечения с 4-м треугольником, шейдер не связывается, и вызов getProgramInfoLog() просто возвращает ноль.

Может ли фрагментный шейдер стать слишком большим? Или мне нужно искать другую причину? Как определить, где может быть проблема?

Вот фрагмент кода, закомментировав любой из вызовов 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 шейдер скомпилируется нормально.

1 Ответ

0 голосов
/ 23 декабря 2011

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

...