Mercurial > repos > tabletprog
comparison samples/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 |
comparison
equal
deleted
inserted
replaced
317:6dfbf5691a7f | 318:4c669942c30d |
---|---|
9 keyUp | 9 keyUp |
10 mouseDown | 10 mouseDown |
11 mouseUp | 11 mouseUp |
12 mouseMotion | 12 mouseMotion |
13 ] from: (sdl eventTypes) | 13 ] from: (sdl eventTypes) |
14 import: [ | |
15 streaming | |
16 ] from: (sdl textureAccess) | |
17 import: [ | |
18 bgra8888 | |
19 ] from: (sdl pixelFormats) | |
14 main <- { | 20 main <- { |
15 if: (sdl init: (video or timer)) = 0 { | 21 if: (sdl init: (video or timer)) = 0 { |
16 (sdl createWindow: "SDL Test" pos: 0 0 size: 640 480 flags: 0u32) value: :window { | 22 (sdl createWindow: "SDL Test" pos: 0 0 size: 640 480 flags: 0u32) value: :window { |
17 (window createRenderer: -1 flags: ((window renderOpts) accelerated)) value: :render { | 23 (window createRenderer: -1 flags: ((window renderOpts) accelerated)) value: :render { |
18 render drawColor!: (sdl r: 0u8 g: 0u8 b: 255u8) | 24 render drawColor!: (sdl r: 0u8 g: 0u8 b: 255u8) |
19 render clear | 25 render clear |
20 (sdl loadBMP: "944.bmp") value: :surf { | 26 (sdl loadBMP: "944.bmp") value: :surf { |
21 (surf asTexture: render) value: :tex { | 27 (surf asTexture: render) value: :tex { |
22 surf free | 28 surf free |
23 angle <- 45.0f32 | 29 (render createTexture: bgra8888 access: streaming width: 32 height: 32) value: :drawTex { |
24 continue? <- true | 30 angle <- 45.0f32 |
25 while: { continue? } do: { | 31 continue? <- true |
26 tex copy | 32 drawTex blendMode!: ((sdl blendModes) blend) |
27 tex copyTo: (sdl rect: 160 120 size: 320 224) | 33 drawTex lockRect: (sdl rect: 0 0 size: 32 32) with: :bytearr pitch { |
28 tex copyRect: (sdl rect: 80 60 size: 160 120) To: (sdl rect: 40 30 size: 320 224) | 34 row <- 0 |
29 tex copyTo: (sdl rect: 320 240 size: 320 224) rotated: angle | 35 start <- -1 |
30 render present | 36 while: { row < 32 } do: { |
31 angle <- angle + 1.0f32 | 37 col <- 0 |
38 i <- row * pitch | |
39 while: { col < start } do: { | |
40 bytearr set: i 0u8 | |
41 i <- i + 1 | |
42 bytearr set: i 0u8 | |
43 i <- i + 1 | |
44 bytearr set: i 0u8 | |
45 i <- i + 1 | |
46 bytearr set: i 0u8 | |
47 i <- i + 1 | |
48 col <- col + 1 | |
49 } | |
50 end <- start + 3 | |
51 while: { col < end } do: { | |
52 bytearr set: i 255u8 | |
53 i <- i + 1 | |
54 bytearr set: i 255u8 | |
55 i <- i + 1 | |
56 bytearr set: i 255u8 | |
57 i <- i + 1 | |
58 bytearr set: i 255u8 | |
59 i <- i + 1 | |
60 col <- col + 1 | |
61 } | |
62 start2 <- 32 - 3 - start | |
63 while: { col < start2 } do: { | |
64 bytearr set: i 0u8 | |
65 i <- i + 1 | |
66 bytearr set: i 0u8 | |
67 i <- i + 1 | |
68 bytearr set: i 0u8 | |
69 i <- i + 1 | |
70 bytearr set: i 0u8 | |
71 i <- i + 1 | |
72 col <- col + 1 | |
73 } | |
74 end <- start2 + 3 | |
75 if: end > 32 { | |
76 end <- 32 | |
77 } | |
78 while: { col < end } do: { | |
79 bytearr set: i 255u8 | |
80 i <- i + 1 | |
81 bytearr set: i 255u8 | |
82 i <- i + 1 | |
83 bytearr set: i 255u8 | |
84 i <- i + 1 | |
85 bytearr set: i 255u8 | |
86 i <- i + 1 | |
87 col <- col + 1 | |
88 } | |
89 while: { col < 32 } do: { | |
90 bytearr set: i 0u8 | |
91 i <- i + 1 | |
92 bytearr set: i 0u8 | |
93 i <- i + 1 | |
94 bytearr set: i 0u8 | |
95 i <- i + 1 | |
96 bytearr set: i 0u8 | |
97 i <- i + 1 | |
98 col <- col + 1 | |
99 } | |
100 if: row < 16 { | |
101 start <- start + 1 | |
102 } else: { | |
103 if: row > 16 { | |
104 start <- start - 1 | |
105 } | |
106 } | |
107 row <- row + 1 | |
108 } | |
109 } | |
110 while: { continue? } do: { | |
111 tex copy | |
112 tex copyTo: (sdl rect: 160 120 size: 320 224) | |
113 tex copyRect: (sdl rect: 80 60 size: 160 120) To: (sdl rect: 40 30 size: 320 224) | |
114 tex copyTo: (sdl rect: 320 240 size: 320 224) rotated: angle | |
115 drawTex copyTo: (sdl rect: 484 32 size: 32 32) rotated: angle / 60.0f32 | |
116 render present | |
117 angle <- angle + 1.0f32 | |
32 | 118 |
33 event <- option none | 119 event <- option none |
34 while: { | 120 while: { |
35 event <- sdl pollEvent | 121 event <- sdl pollEvent |
36 event value? | 122 event value? |
37 } do: { | 123 } do: { |
38 event value: :ev { | 124 event value: :ev { |
39 if: (ev type) = quit { | 125 if: (ev type) = quit { |
40 continue? <- false | 126 continue? <- false |
41 } else: { | |
42 if: (ev type) = keyDown || (ev type) = keyUp { | |
43 print: "Key event for: " . (ev keyChar) . ", pressed?: " . (ev pressed?) . "\n" | |
44 } else: { | 127 } else: { |
45 if: (ev type) = mouseDown || (ev type) = mouseUp { | 128 if: (ev type) = keyDown || (ev type) = keyUp { |
46 print: "Mouse button event at: " . (ev x) . ", " . (ev y) . " for button " . (ev button) . "\n" | 129 print: "Key event for: " . (ev keyChar) . ", pressed?: " . (ev pressed?) . "\n" |
47 } else: { | 130 } else: { |
48 if: (ev type) = mouseMotion { | 131 if: (ev type) = mouseDown || (ev type) = mouseUp { |
49 print: "Mouse motion event: " . (ev xRel) . ", " . (ev yRel) . "\n" | 132 print: "Mouse button event at: " . (ev x) . ", " . (ev y) . " for button " . (ev button) . "\n" |
133 } else: { | |
134 if: (ev type) = mouseMotion { | |
135 print: "Mouse motion event: " . (ev xRel) . ", " . (ev yRel) . "\n" | |
136 } | |
50 } | 137 } |
51 } | 138 } |
52 } | 139 } |
53 } | 140 } none: {} |
54 } none: {} | 141 } |
55 } | 142 } |
143 } none: { | |
144 print: "Failed to create texture\n" | |
56 } | 145 } |
57 tex destroy | 146 tex destroy |
58 } none: { | 147 } none: { |
59 surf free | 148 surf free |
60 } | 149 } |