Bonjour amis développeurs
J'utilise glsl pour le calcul de surfaces nurbs.
Mais il y a des choses qui me laissent stupéfaits....
Par exemple voilà une fonction utilisant le binary search pour déterminer l'index d'un noeud dans un vecteur de noeuds.
Cette fonction est normalement assez robuste pour toujours terminer la boucle while. (enfin sur CPU..)int findSpan(int degree, float current_u, samplerBuffer KNOT_TYPE){
if(current_u < texelFetch(KNOT_TYPE, 0).x || current_u > texelFetch(KNOT_TYPE, textureSize(KNOT_TYPE)-1).x)
discard;
int n = textureSize(KNOT_TYPE) - degree - 2;
if( current_u == (texelFetch(KNOT_TYPE, n+1)).x)
return n;
int min=degree; int max=n+1;
int middle=(min+max)/2;
while (current_u < (texelFetch(KNOT_TYPE, middle)).x || current_u >= (texelFetch(KNOT_TYPE, middle+1)).x ){
if(current_u < (texelFetch(KNOT_TYPE, middle)).x)
max=middle;
if(current_u >= (texelFetch(KNOT_TYPE, middle)).x)
min=middle;
middle=(min+max)/2;
}
return middle;
}
Mais à ma grande surprise la boucle ne se termine jamais et entraine un crash... Je me suis dit il y a peut-etre des limites mais j'ai rien trouvé dans la spécification.....Alors si quelqu'un peut m'informer sur l'état d'art du calcul en glsl, je lui en serait très reconnaissant...
Merci à tous.







Répondre avec citation
Partager