forum-msg-id-131419-edit

Original date:2017-09-27 15:15:50 Edited by: Icy_Viking Subject: Re: Help Solving SDL2 Wrapper Example

petelomax said...

OK, I downloaded eusdl2.zip and opened sdl2.dll with dependency walker, only to find there is no SDL_BlitSurface entry.

So I downloaded the source code and a quick search revealed, in SDL_surface.h, this little gem:

#define SDL_BlitSurface SDL_UpperBlit 

Hence I humbly suggest this may help:

xSDL_BlitSurface = define_c_func(sdl2,"SDL_UpperBlit",{C_POINTER,C_POINTER,C_POINTER,C_POINTER},C_INT)  

Pete

PS: a comment along the lines of --NB this is NOT a typo! seems warranted.

Thanks Pete. I also noticed there was an UpperBlitScaled function as well. I think I'll wrap that as well. Probably keep BlitSurface as legacy code for now.

EDIT: Well I added in the UpperBlit functions, now I get this error.

 function SDL_RWFromFile()  
type_check failure, fname is 42840784  
    fname = 42840784 
    mode = {114'r',98'b'} 
    str = <no value> 
    str2 = <no value> 
    ret = <no value> 
 
in function SDL_LoadBMP()   
    fname = {83'S',68'D',76'L',46'.',98'b',109'm',112'p'} 
    str = 42840784 
    src (from inlined routine 'SDL_LoadBMP_RW' at 13) = <no value> 

public constant xSDL_RWFromFile = define_c_func(sdl2,"SDL_RWFromFile",{C_POINTER,C_POINTER},C_POINTER) 
 
public function SDL_RWFromFile(sequence fname,sequence mode) 
 
 atom str = allocate_string(fname,1) 
 atom str2 = allocate_string(mode,1) 
  
 atom ret = c_func(xSDL_RWFromFile,{str,str2}) 
  
 return ret 
	 
end function 
 
public constant xSDL_LoadBMP = define_c_func(sdl2,"SDL_LoadBMP",{C_POINTER},C_POINTER), 
xSDL_LoadBMP_RW = define_c_func(sdl2,"SDL_LoadBMP_RW",{C_POINTER,C_INT},C_POINTER) 
 
public function SDL_LoadBMP_RW(atom src,integer xfree) 
 
 return c_func(xSDL_LoadBMP_RW,{src,xfree}) 
	 
end function 
 
public function SDL_LoadBMP(sequence fname) 
 
 atom str = allocate_string(fname,1) 
 return SDL_LoadBMP_RW(SDL_RWFromFile(str,"rb"),1) 
	 
end function 
 
 

Demo currently not working include std/machine.e include EuSDL2.ew include flags.e

atom width = 800, height = 600 atom buffer,format atom x x = SDL_Init(SDL_INIT_EVERYTHING)

if x = -1 then puts(1,"Failed to load initialize SDL!\n") abort(0) end if

atom win = SDL_CreateWindow("Window Image",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,width,height,SDL_WINDOW_SHOWN)

if win = -1 then puts(1,"Failed to create window!\n") abort(0) end if

atom surf = SDL_GetWindowSurface(win)

atom img = SDL_LoadBMP("SDL.bmp")

if img = -1 then puts(1,"Failed to load image!\n") abort(0) end if

procedure calc_rect(atom rect,integer sx,integer sy,integer tx,integer ty)

poke4(rect,sx) poke4(rect+2,sy) poke4(rect+4,tx) poke4(rect+6,ty)

end procedure

atom srect = allocate(10) atom drect = allocate(10)

calc_rect(srect,0,0,100,100) calc_rect(drect,0,0,100,100)

format = peek4u(surf+4) buffer = SDL_ConvertSurface(surf,format,0)

x = SDL_UpperBlit(img,srect,surf,drect)

if x = 0 then puts(1,"Failed to blit image!\n") abort(0) end if

SDL_UpdateWindowSurface(win)

SDL_Delay(3000)

SDL_FreeSurface(img) SDL_FreeSurface(surf)

SDL_DestroyWindow(win)

SDL_Quit()

 
Not Categorized, Please Help

Search



Quick Links

User menu

Not signed in.

Misc Menu