probably your width and height are not scalar but singleton array. you can
check them with monad $ .

On Fri, Nov 27, 2020, 8:00 PM emacstheviking <[email protected]> wrote:

> Given these working external function declarations:
>
> SDL_GetWindowSize n x *i *i
> SDL_GetRendererOutputSize n x *i *i
> SDL_CreateRGBSurface > x i i i i i i i i
>
> then these two calls:
>
> 'ww wh'=:2}.sdl_getwindowsize appw;(,_1);(,_1)
> 'rw rh'=:2}.sdl_getrendereroutputsize appr;(,_1);(,_1)
>
> work and produce values of 1024 for ww and rw, and 768 for wh and rh
> respectively, as expected.
> However, when creating the rgb surface it raises a domain error and I have
> been tearing my hair out to understand why.
> I have posted the full code at the end of this plea for help and
> enlightenment.
>
> args=.0;width;height;32;16bff0000;16bff00;16bff;16bff000000
> smoutput args
> sfc=: sdl_creatergbsurface args
>
> cder''
> 6 1
>
> yet calling it with literals or even the extracted 'y' value (a boxed
> dimension):
> args=.0;1024;768;32;16bff0000;16bff00;16bff;16bff000000. NB. works
> args=.0;width;height;32;16bff0000;16bff00;16bff;16bff000000. NB. works
>
> I have used 3!:0 to examine the type, it is 4 (integer) in all cases
> (ww,wh,rw,rh,width,height), ruling out those errors.
> Thanks,
> Sean. :|
>
> -- full code ---
>
> ugo =: 3 : 0
> NB. testing out domain errors around sdl_creatergbsurface...
> args =. SCREEN_X_MAX;SCREEN_Y_MAX
> scrw =. SCREEN_X_MAX
> scrh =. SCREEN_Y_MAX
> sdlprep scrw;scrh
> cairoprep''
> urun''
> uend^:y ''
> )
>
> sdlprep =: 3 : 0
> 'width height'=. y
> sdl_init SDL_INIT_EVERYTHING
> appw=:sdl_createwindow 'test window';0;0
> ;width;height;SDL_WINDOW_SHOWN+SDL_WINDOW_ALLOW_HIGHDPI
> appr=:sdl_createrenderer appw;_1
> ;SDL_RENDERER_ACCELERATED+SDL_RENDERER_PRESENTVSYNC
> 'ww wh'=:2}.sdl_getwindowsize appw;(,_1);(,_1)
> 'rw rh'=:2}.sdl_getrendereroutputsize appr;(,_1);(,_1)
> cxm=: rw % ww
> cym=: rh % wh
> smoutput 'window: ', (":appw), 'renderer:', (":appr)
> smoutput 'requested width:',(":width),' height:',(":height)
> smoutput 'render width: ',(":rw),' height:',(":rh)
> smoutput 'window width: ',(":ww),' height:',(":wh)
> smoutput 'x/y multipliers:',(":cxm),'/',(":cym)
> NB. This needs to be endian-aware at some point
> smoutput (": (width = rw))
> args=.0;width;height;32;16bff0000;16bff00;16bff;16bff000000
> smoutput args
> sfc=: sdl_creatergbsurface args
> NB. Practice structures. PACKING!!! Show printable format name
> pFormat=._3 ic memr (sfc+8),0,8 NB. sdl_surface->format
> format=._2 ic memr pFormat,0,4 NB. sdl_surface->format->format
> smoutput 'pixel format:',(psz sdl_getpixelformatname format)
> EMPTY
> )
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to