SDL画线 16位(转) SDL画线 16位

void put_pixel_16( SDL_Surface *surface, int x, int y, Uint16 pixel )
{
    Uint16 *pixels = (Uint16 *)surface->pixels;
 
    pixels[ ( y * surface->w ) + x ] = pixel;
    
    return ;
}
 
void draw_line(SDL_Surface *surface, Uint16 x0, Uint16 y0, Uint16 xEnd, Uint16 yEnd, Uint16 pixel)
{
        Uint16 dx = abs (xEnd -x0), dy = abs (yEnd-y0);//fabs
        Uint16 p =2* dy-dx;
        Uint16 twoDy = 2*dy, twoDyMinusDx = 2* (dy - dx);
        Uint16 x,y;
 
        if (x0>xEnd)
        {
                x=xEnd;
                y=yEnd;
                xEnd=x0;
        }
        else{
                x=x0;
                y=y0;
        }
        put_pixel_16( surface, x, y, pixel );
 
        while (x<xEnd)
        {
                x++;
                if(p<0)
                        p+=twoDy;
                else{
                        y++;
                        p+=twoDyMinusDx;
                }
                put_pixel_16( surface, x, y, pixel );
       }
 
}