+ unsigned int idpath = 0 ;
+ int ic, jc, iprec, jprec ;
+ float offset = 0.5 ;
+ unsigned int basepath = 0 ;
+ char MSQ, LSQ ;
+
+ // Q1 inf
+ for (int a=0 ; a< 4 ; a++){ // les 4 angles 0,15,30 et 45
+ for (int p=0 ; p< r ; p++){ // les r points
+ ic = r-1 - floor(tangente[a]*p + offset) ;
+ if ( p > 0 ){
+ MSQ = ic - iprec ;
+ LSQ = 1 ;
+ //d_paths[idpath*(r-1)+p-1].x = ic - iprec ;
+ //d_paths[idpath*(r-1)+p-1].y = 1 ;
+ d_paths[idpath*(r-1)+p-1] = ((short)MSQ << 8) | LSQ ;
+ }
+ iprec = ic ;
+ }
+ idpath++ ;
+ }
+ // Q1 sup
+ for (int a=2 ; a>0 ; a--){ // les 2 angles 60 et 75
+ for (int p=0 ; p< r ; p++){ // les r points
+ jc = floor(tangente[a]*p + offset) ;
+ if ( p > 0 ){
+ MSQ = -1 ;
+ LSQ = jc - jprec ;
+ d_paths[idpath*(r-1)+p-1] = ((short)MSQ << 8) | LSQ ;
+ //d_paths[idpath*(r-1)+p-1].x = -1 ;
+ //d_paths[idpath*(r-1)+p-1].y = jc - jprec ;
+ }
+ jprec = jc ;
+ }
+ idpath++ ;
+ }
+
+ // Q2
+ basepath += 6 ;
+ for (int a=0 ; a< 6 ; a++){ // les 6 angles 90,105,120,135,150,165
+ for (int p=0 ; p<r-1 ; p++){ // les r points
+ MSQ = - ( d_paths[(idpath - basepath)*(r-1)+p] & 0x00FF ) ;
+ LSQ = ( d_paths[(idpath - basepath)*(r-1)+p] >> 8 ) ;
+ d_paths[idpath*(r-1)+p-1] = ((short)MSQ << 8) | LSQ ;
+ //d_paths[idpath*(r-1)+p].x = -d_paths[(idpath - basepath)*(r-1)+p].y ;
+ //d_paths[idpath*(r-1)+p].y = d_paths[(idpath - basepath)*(r-1)+p].x ;
+ }
+ idpath++ ;
+ }
+
+ // Q3
+ basepath += 6 ;
+ for (int a=0 ; a< 6 ; a++){ // les 6 angles 180,195,210,225,240,255
+ for (int p=0 ; p<r-1 ; p++){ // les r points
+ MSQ = - ( d_paths[(idpath - basepath)*(r-1)+p] >> 8 ) ;
+ LSQ = - ( d_paths[(idpath - basepath)*(r-1)+p] & 0x00FF ) ;
+ d_paths[idpath*(r-1)+p-1] = ((short)MSQ << 8) | LSQ ;
+ //d_paths[idpath*(r-1)+p].x = -d_paths[(idpath - basepath)*(r-1)+p].x ;
+ //d_paths[idpath*(r-1)+p].y = -d_paths[(idpath - basepath)*(r-1)+p].y ;
+ }
+ idpath++ ;
+ }
+
+ // Q4
+ basepath += 6 ;
+ for (int a=0 ; a< 6 ; a++){ // les 6 angles 270,285,300,315,330,345
+ for (int p=0 ; p<r-1 ; p++){ // les r points
+ MSQ = d_paths[(idpath - basepath)*(r-1)+p] & 0x00FF ;
+ LSQ = - ( d_paths[(idpath - basepath)*(r-1)+p] >> 8 ) ;
+ d_paths[idpath*(r-1)+p-1] = ((short)MSQ << 8) | LSQ ;
+ //d_paths[idpath*(r-1)+p].x = d_paths[(idpath - basepath)*(r-1)+p].y ;
+ //d_paths[idpath*(r-1)+p].y = -d_paths[(idpath - basepath)*(r-1)+p].x ;
+ }
+ idpath++ ;
+ }
+
+}
+
+/**
+ *
+ * \brief calcule l'estimation initiale
+ * \author zulu - AND
+ *
+ * \param[in] L Largeur de l'image
+ * \param[in] H Hauteur de l'image
+ * \param[in] r coté de la fenêtre de moyenneage
+ *
+ * \param[out] d_estim Image estimee 0
+ *
+ * Version texture : l'img originale est supposée en texture.
+ * L'estimation réalisée correspond a un moyenneur de 'rayon' r
+ * Execution sur des blocs de threads 2D et une grille 2D
+ * selon les dimensions de l'image.
+ *
+ */
+__global__ void kernel_neutre_img2estim(unsigned int *d_estim, unsigned int L, unsigned int H){
+
+ // coordonnes du point dans l'image
+ unsigned int i = blockIdx.x*blockDim.x + threadIdx.x;
+ unsigned int j = blockIdx.y*blockDim.y + threadIdx.y;
+ unsigned int pos = i*L +j ;
+
+ d_estim[ pos ] = tex2D(tex_img_in, j, i) ;
+
+}
+
+
+/**
+ *
+ * \brief calcule l'estimation initiale
+ * \author zulu - AND
+ *
+ * \param[in] L Largeur de l'image
+ * \param[in] H Hauteur de l'image
+ * \param[in] r coté de la fenêtre de moyenneage
+ *
+ * \param[out] d_estim Image estimee 0
+ *
+ * Version texture : l'img originale est supposée en texture.
+ * L'estimation réalisée correspond a un moyenneur de 'rayon' r
+ * Execution sur des blocs de threads 2D et une grille 2D
+ * selon les dimensions de l'image.
+ *
+ */