comparison modules/sdl.tp @ 318:4c669942c30d

Add bindings for SDL_CreateTexture, SDL_LockTexture, SDL_SetBlendMode and SDL_GetBlendMode in SDL module
author Michael Pavone <pavone@retrodev.com>
date Thu, 19 Mar 2015 22:40:43 -0700
parents 2b045d5b673b
children ead24192ed45
comparison
equal deleted inserted replaced
317:6dfbf5691a7f 318:4c669942c30d
62 texOpaque <- cpointer ptr 62 texOpaque <- cpointer ptr
63 tex <- object ptr 63 tex <- object ptr
64 } andCode: :rendOpaque surfOpaque makeTexture { 64 } andCode: :rendOpaque surfOpaque makeTexture {
65 texOpaque <- make_object: (addr_of: cpointer_meta) NULL 0 65 texOpaque <- make_object: (addr_of: cpointer_meta) NULL 0
66 texOpaque val!: (SDL_CreateTextureFromSurface: (rendOpaque val) (surfOpaque val)) 66 texOpaque val!: (SDL_CreateTextureFromSurface: (rendOpaque val) (surfOpaque val))
67 if: (texOpaque val) {
68 tex <- ccall: makeTexture 2 (rendOpaque castTo: (object ptr)) (texOpaque castTo: (object ptr))
69 mcall: value 2 option tex
70 } else: {
71 mcall: none 1 option
72 }
73 }
74
75 llMessage: createTexture withVars: {
76 rendOpaque <- cpointer ptr
77 format <- object ptr
78 formatn <- obj_uint32 ptr
79 access <- object ptr
80 accessn <- obj_int32 ptr
81 w <- object ptr
82 wn <- obj_int32 ptr
83 h <- object ptr
84 hn <- obj_int32 ptr
85 makeTexture <- lambda ptr
86 texOpaque <- cpointer ptr
87 tex <- object ptr
88 } andCode: :rendOpaque format access w h makeTexture {
89 formatn <- (mcall: uint32 1 format) castTo: (obj_uint32 ptr)
90 accessn <- (mcall: int32 1 access) castTo: (obj_int32 ptr)
91 wn <- (mcall: int32 1 w) castTo: (obj_int32 ptr)
92 hn <- (mcall: int32 1 h) castTo: (obj_int32 ptr)
93 texOpaque <- make_object: (addr_of: cpointer_meta) NULL 0
94 texOpaque val!: (SDL_CreateTexture: (rendOpaque val) (formatn num) (accessn num) (wn num) (hn num))
67 if: (texOpaque val) { 95 if: (texOpaque val) {
68 tex <- ccall: makeTexture 2 (rendOpaque castTo: (object ptr)) (texOpaque castTo: (object ptr)) 96 tex <- ccall: makeTexture 2 (rendOpaque castTo: (object ptr)) (texOpaque castTo: (object ptr))
69 mcall: value 2 option tex 97 mcall: value 2 option tex
70 } else: { 98 } else: {
71 mcall: none 1 option 99 mcall: none 1 option
283 _constant: controllerDeviceRemoved SDL_CONTROLLERDEVICEREMOVED 311 _constant: controllerDeviceRemoved SDL_CONTROLLERDEVICEREMOVED
284 _constant: controllerDeviceRemapped SDL_CONTROLLERDEVICEREMAPPED 312 _constant: controllerDeviceRemapped SDL_CONTROLLERDEVICEREMAPPED
285 _constant: dropFile SDL_DROPFILE 313 _constant: dropFile SDL_DROPFILE
286 //TODO: Add mobile/touch/gesture events 314 //TODO: Add mobile/touch/gesture events
287 } 315 }
316
317 _textureAccess <- #{
318 _constant: static SDL_TEXTUREACCESS_STATIC
319 _constant: streaming SDL_TEXTUREACCESS_STREAMING
320 _constant: target SDL_TEXTUREACCESS_TARGET
321 }
322
323 _pixelFormats <- #{
324 _constant: unknown SDL_PIXELFORMAT_UNKNOWN
325 _constant: index1LSB SDL_PIXELFORMAT_INDEX1LSB
326 _constant: index1MSB SDL_PIXELFORMAT_INDEX1MSB
327 _constant: index4LSB SDL_PIXELFORMAT_INDEX4LSB
328 _constant: index4MSB SDL_PIXELFORMAT_INDEX4MSB
329 _constant: index8 SDL_PIXELFORMAT_INDEX8
330 _constant: rgb332 SDL_PIXELFORMAT_RGB332
331 _constant: rgb444 SDL_PIXELFORMAT_RGB444
332 _constant: rgb555 SDL_PIXELFORMAT_RGB555
333 _constant: bgr555 SDL_PIXELFORMAT_BGR555
334 _constant: argb4444 SDL_PIXELFORMAT_ARGB4444
335 _constant: bgra4444 SDL_PIXELFORMAT_BGRA4444
336 _constant: argb1555 SDL_PIXELFORMAT_ARGB1555
337 _constant: rgba5551 SDL_PIXELFORMAT_RGBA5551
338 _constant: abgr1555 SDL_PIXELFORMAT_ABGR1555
339 _constant: bgra5551 SDL_PIXELFORMAT_BGRA5551
340 _constant: rgb565 SDL_PIXELFORMAT_RGB565
341 _constant: bgr565 SDL_PIXELFORMAT_BGR565
342 _constant: rgb24 SDL_PIXELFORMAT_RGB24
343 _constant: bgr24 SDL_PIXELFORMAT_BGR24
344 _constant: rgb888 SDL_PIXELFORMAT_RGB888
345 _constant: rgbx8888 SDL_PIXELFORMAT_RGBX8888
346 _constant: bgr888 SDL_PIXELFORMAT_BGR888
347 _constant: bgrx8888 SDL_PIXELFORMAT_BGRX8888
348 _constant: argb8888 SDL_PIXELFORMAT_ARGB8888
349 _constant: rgba8888 SDL_PIXELFORMAT_RGBA8888
350 _constant: abgr8888 SDL_PIXELFORMAT_ABGR8888
351 _constant: bgra8888 SDL_PIXELFORMAT_BGRA8888
352 _constant: argb2101010 SDL_PIXELFORMAT_ARGB2101010
353 _constant: yv12 SDL_PIXELFORMAT_YV12
354 _constant: iyuv SDL_PIXELFORMAT_IYUV
355 _constant: yuy2 SDL_PIXELFORMAT_YUY2
356 _constant: uyvy SDL_PIXELFORMAT_UYVY
357 _constant: yvyu SDL_PIXELFORMAT_YVYU
358 }
359
360 _blendModes <- #{
361 _constant: none SDL_BLENDMODE_NONE
362 _constant: blend SDL_BLENDMODE_BLEND
363 _constant: add SDL_BLENDMODE_ADD
364 _constant: mod SDL_BLENDMODE_MOD
365 }
288 366
289 _eventConstructors <- dict hash 367 _eventConstructors <- dict hash
290 _eventConstructors set: (_events window) :typ tstamp eventPtr { 368 _eventConstructors set: (_events window) :typ tstamp eventPtr {
291 _helper populateWindowEvent: eventPtr #{ 369 _helper populateWindowEvent: eventPtr #{
292 type <- typ 370 type <- typ
429 intret <- make_object: (addr_of: obj_int32_meta) NULL 0 507 intret <- make_object: (addr_of: obj_int32_meta) NULL 0
430 intret num!: (SDL_RenderCopyEx: renderer texture NULL (dstOpaque val) (anglef num) NULL SDL_FLIP_NONE) 508 intret num!: (SDL_RenderCopyEx: renderer texture NULL (dstOpaque val) (anglef num) NULL SDL_FLIP_NONE)
431 intret 509 intret
432 } 510 }
433 511
512 llMessage: lockRect:with withVars: {
513 fun <- lambda ptr
514 rectOpaque <- cpointer ptr
515 pitch <- obj_int32 ptr
516 bufsize <- obj_int32 ptr
517 height <- obj_int32 ptr
518 pixels <- cpointer ptr
519 bytearr <- object ptr
520 rect <- object ptr
521 result <- int32_t
522 ret <- object ptr
523 } andCode: :rect fun {
524 rectOpaque <- (mcall: _rectPointer 1 rect) castTo: (cpointer ptr)
525 pitch <- make_object: (addr_of: obj_int32_meta) NULL 0
526 pixels <- make_object: (addr_of: cpointer_meta) NULL 0
527 //TODO: Check return value
528 result <- SDL_LockTexture: texture (rectOpaque val) (addr_of: (pixels val)) (addr_of: (pitch num))
529 if: result = 0 {
530 height <- (mcall: h 1 rect) castTo: (obj_int32 ptr)
531 bufsize <- make_object: (addr_of: obj_int32_meta) NULL 0
532 bufsize num!: (pitch num) * (height num)
533 bytearr <- mcall: fromOpaque:withSize 3 bytearray pixels bufsize
534 ret <- ccall: fun 2 bytearr pitch
535 SDL_UnlockTexture: texture
536 //TODO: Return value?
537 } else: {
538 ret <- false
539 }
540 ret
541 }
542
543 llMessage: blendMode! withVars: {
544 omode <- object ptr
545 mode <- obj_uint32 ptr
546 } andCode: :omode {
547 mode <- (mcall: uint32 1 omode) castTo: (obj_uint32 ptr)
548 SDL_SetTextureBlendMode: texture (mode num)
549 self
550 }
551
552 llMessage: blendMode withVars: {
553 mode <- obj_uint32 ptr
554 } andCode: {
555 mode <-make_object: (addr_of: obj_uint32_meta) NULL 0
556 SDL_GetTextureBlendMode: texture (addr_of: (mode num))
557 mode
558 }
559
434 llMessage: destroy withVars: {} andCode: { 560 llMessage: destroy withVars: {} andCode: {
435 SDL_DestroyTexture: texture 561 SDL_DestroyTexture: texture
436 true 562 true
437 } 563 }
438 } _ptr_init: rendptr texptr 564 } _ptr_init: rendptr texptr
449 ptr val!: surface 575 ptr val!: surface
450 ptr 576 ptr
451 } 577 }
452 llMessage: _ptr_init withVars: { 578 llMessage: _ptr_init withVars: {
453 ptr <- cpointer ptr 579 ptr <- cpointer ptr
454 } andCode: :ptr{ 580 } andCode: :ptr {
455 surface <- ptr val 581 surface <- ptr val
456 self 582 self
457 } 583 }
458 584
459 asTexture <- :renderer { 585 asTexture <- :renderer {
568 bc <- (mcall: b 1 color) castTo: (obj_uint8 ptr) 694 bc <- (mcall: b 1 color) castTo: (obj_uint8 ptr)
569 ac <- (mcall: a 1 color) castTo: (obj_uint8 ptr) 695 ac <- (mcall: a 1 color) castTo: (obj_uint8 ptr)
570 intret num!: (SDL_SetRenderDrawColor: renderer (rc num) (gc num) (bc num) (ac num)) 696 intret num!: (SDL_SetRenderDrawColor: renderer (rc num) (gc num) (bc num) (ac num))
571 intret 697 intret
572 } 698 }
699
700 createTexture:access:width:height <- :format :access :w :h {
701 _helper createTexture: opaque format access w h _makeTexture
702 }
573 703
574 llMessage: clear withVars: { 704 llMessage: clear withVars: {
575 intret <- obj_int32 ptr 705 intret <- obj_int32 ptr
576 } andCode: { 706 } andCode: {
577 intret <- make_object: (addr_of: obj_int32_meta) NULL 0 707 intret <- make_object: (addr_of: obj_int32_meta) NULL 0
683 } 813 }
684 814
685 subsystems <- { _subsystems } 815 subsystems <- { _subsystems }
686 windowOpts <- { _windowOpts } 816 windowOpts <- { _windowOpts }
687 eventTypes <- { _events } 817 eventTypes <- { _events }
818 textureAccess <- { _textureAccess }
819 pixelFormats <- { _pixelFormats }
820 blendModes <- { _blendModes }
688 } 821 }
689 } 822 }