#line 3180 "/home/travis/build/felix-lang/felix/src/packages/sdl.fdoc"
  
  
  open class SDL_surface_h
  {
    requires package "sdl2";
  
    typedef struct SDL_Surface
    {
        uint32 flags;               /**< Read-only */
        &SDL_PixelFormat format;    /**< Read-only */
        int w; int h;                   /**< Read-only */
        int pitch;                  /**< Read-only */
        address pixels;               /**< Read-write */
  
        /** Application data associated with the surface */
        address userdata;             /**< Read-write */
  
        /** information needed for surfaces requiring locks */
        int locked;                 /**< Read-only */
        address lock_data;            /**< Read-only */
  
        /** clipping information */
        SDL_Rect clip_rect;         /**< Read-only */
  
        /** info for fast blit mapping to other surfaces */
        //struct SDL_BlitMap *map;    /**< Private */
  
        /** Reference count -- used when freeing surface */
        int refcount;               /**< Read-mostly */
    } SDL_Surface;
  
    gen SDL_BlitSurface : &SDL_Surface * &SDL_Rect * &SDL_Surface * &SDL_Rect -> int;
    proc SDL_FreeSurface: &SDL_Surface;
    gen SDL_FillRect : &SDL_Surface * &SDL_Rect * uint32 -> int;
    gen SDL_FillSurface : &SDL_Surface * uint32 -> int = "SDL_FillRect ($1, NULL, $2)";
    gen SDL_SetClipRect : &SDL_Surface * &SDL_Rect -> bool;
    proc SDL_ClearClipRect : &SDL_Surface = "SDL_SetClipRect($1,NULL);";
    fun SDL_MUSTLOCK: &SDL_Surface -> bool = "(SDL_MUSTLOCK($1)==SDL_TRUE)";
    proc SDL_LockSurface : &SDL_Surface = "SDL_LockSurface($1);";
    proc SDL_UnlockSurface : &SDL_Surface = "SDL_LockSurface($1);";
  }