+ // now calculate update texture coordinates
+ if ( last_lon < -900 ) {
+ last_lon = lon;
+ last_lat = lat;
+ }
+
+ if ( lon != last_lon || lat != last_lat ) {
+ Point3D start( last_lon, last_lat, 0.0 );
+ Point3D dest( lon, lat, 0.0 );
+ double course, dist;
+ calc_gc_course_dist( dest, start, &course, &dist );
+ // cout << "course = " << course << ", dist = " << dist << endl;
+
+ double xoff = cos( course ) * dist / (2 * scale);
+ double yoff = sin( course ) * dist / (2 * scale);
+
+ // cout << "xoff = " << xoff << ", yoff = " << yoff << endl;
+
+ float *base, *tc;
+ base = tl->get( 0 );
+
+ base[0] += xoff;
+ while ( base[0] > 1.0 ) { base[0] -= 1.0; }
+ while ( base[0] < 0.0 ) { base[0] += 1.0; }
+
+ base[1] += yoff;
+ while ( base[1] > 1.0 ) { base[1] -= 1.0; }
+ while ( base[1] < 0.0 ) { base[1] += 1.0; }
+
+ // cout << "base = " << base[0] << "," << base[1] << endl;
+
+ tc = tl->get( 1 );
+ sgSetVec2( tc, base[0] + size / scale, base[1] );
+
+ tc = tl->get( 2 );
+ sgSetVec2( tc, base[0], base[1] + size / scale );
+
+ tc = tl->get( 3 );
+ sgSetVec2( tc, base[0] + size / scale, base[1] + size / scale );
+
+ last_lon = lon;
+ last_lat = lat;
+ }
+