2011-12-16 8 views
0

私はレイトレーシングを行うために使用しているWebGLフラグメントシェーダを持っています。私はテクスチャを使って球と三角形のデータを渡します。今のところ私は2つの球と3つの三角形が働いています。私が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); 

すべてのコールが同じであるため、インデックスを除いて、私は、コード自体には何も問題がないだろうと思ったが、私が直面して実行されている可能性が制限のいくつかの種類がありますか?

余分な関数呼び出しを追加する前に30FPS以上になっています。追加呼び出しを追加しても、頂点シェーダとfragemntシェーダの両方でOKがコンパイルされます。

答えて

0

checkTriangleIntersection()へのコールをforループに入れて問題を解決しました。

関連する問題