NB. sdlbmpevtex.ijs - example of setting up a bitmap displayed in window
NB. under SDL with QUIT event processing
load '~/j902-user/temp/sdl2.ijs'
NB. SDL_Init <SDL_INIT_VIDEO
sdlbmpevtex =: 3 : 0
NB. to handle events SDL needs 56 bytes of space to fit the
NB. event into. This is passed as a pointer. Defined globally
NB. needs to be freed when you quit the application
NB. Event loop variables
ev =: mema 56
NB. initialized pointer variables to be used with SDL2 dll
window =: null
bmpsurf =: null
texture =: null
renderer =: null
NB. calls to setup SDL2 and create a window with bitmap
SDL_Init <SDL_INIT_EVERYTHING
window =: {. SDL_CreateWindow 'SDL2 from J';
SDL_WINDOWPOS_UNDEFINED;SDL_WINDOWPOS_UNDEFINED;660;480;0
if. window = null do.
smoutput 'ERROR: failed to create window'
return.
end.
renderer =: {. SDL_CreateRenderer window; _1; 0
if. renderer = null do.
smoutput 'ERROR: failed to create renderer'
return.
end.
SDL_SetRenderDrawColor renderer; 0; 0; 0; 255
SDL_RenderClear<renderer
NB. The SDL2 API call SDL_LoadBMP is a macro of 2 lower level
NB. calls. It is created as a Jfunction in this
bmpsurf=: {. SDL_LoadBMP <'/Applications/j902/addons/graphics/bmp/toucan.bmp'
if. bmpsurf = null do.
smoutput 'ERROR: failed to load bitmap'
return.
end.
texture =: {. SDL_CreateTextureFromSurface renderer; <bmpsurf
if. texture = null do.
smoutput 'ERROR: failed to create texture'
return.
end.
SDL_FreeSurface <bmpsurf
bmpsurf =: null
NB. Copy the texture to the renderer and present to the window
SDL_RenderCopy renderer;texture;null;<null
SDL_RenderPresent<renderer
NB. set timer handler and start timer
sys_timer_z_ =: sdleventhdlr_base_
wd 'timer 1000'
)
sdleventhdlr =: 3 : 0
NB. Look for a quit event and call sdlfullquit and exit
NB. Stop the timer while we process (it avoid forever errors)
wd 'timer 0'
while. 0 ~: SDL_PollEvent <<ev do.
evtype =: {. 0 (3!:4) memr ev,0,32
NB. smoutput 'evtype = ',":evtype
if. evtype = SDL_QUIT do.
NB. quit and return timer stays off
sdlfullquit''
return.
end.
end.
NB. restart the timer
wd 'timer 1000'
)
sdlfullquit =: 3 : 0
SDL_DestroyTexture<texture
texture =: null
SDL_DestroyRenderer<renderer
renderer =: null
SDL_DestroyWindow <window
window =: null
SDL_Quit ''
memf ev
ev =: 0
)
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm