Mercurial > repos > tabletprog
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 } |