/*
* call-seq:
* convert( other=nil, flags=nil ) -> Surface
*
* Copies the Surface to a new Surface with the pixel format of another
* Surface, for fast blitting. May raise SDLError if a problem occurs.
*
* This method takes these arguments:
* - other:: The Surface to match pixel format against. If +nil+, the
* display surface (i.e. Screen) is used, if available; if no
* display surface is available, raises SDLError.
* - flags:: An array of flags to pass when the new Surface is created.
* See Surface#new.
*
*/
VALUE rbgm_surface_convert(int argc, VALUE *argv, VALUE self)
{
SDL_Surface *surf, *othersurf, *newsurf;
Uint32 flags = 0;
Data_Get_Struct(self, SDL_Surface, surf);
if(argc>0 && argv[0]!=Qnil)
{
Data_Get_Struct(argv[0], SDL_Surface, othersurf);
}
else
{
othersurf = SDL_GetVideoSurface();
if( othersurf == NULL )
{
rb_raise(eSDLError, "Cannot convert Surface with no target given and no Screen made: %s", SDL_GetError());
}
}
if(argc>1 && argv[1]!=Qnil)
{
flags = NUM2UINT(argv[1]);
}
newsurf = SDL_ConvertSurface( surf, othersurf->format, flags );
if( newsurf == NULL )
{
rb_raise(eSDLError,\
"Could not convert the Surface: %s",\
SDL_GetError());
}
return Data_Wrap_Struct( cSurface,0,SDL_FreeSurface,newsurf );
}