/t/gfx_primitives2.t

http://github.com/PerlGameDev/SDL · Perl · 306 lines · 274 code · 23 blank · 9 comment · 9 complexity · 4405df84fb9da2275c6663ee45dedb8c MD5 · raw file

  1. #!perl
  2. use strict;
  3. use warnings;
  4. use SDL;
  5. use SDL::Rect;
  6. use SDL::Config;
  7. use SDL::Video;
  8. use SDL::Version;
  9. use SDL::Surface;
  10. use SDL::PixelFormat;
  11. use SDL::GFX;
  12. use SDL::GFX::Primitives;
  13. use Test::More;
  14. use lib 't/lib';
  15. use SDL::TestTool;
  16. my $videodriver = $ENV{SDL_VIDEODRIVER};
  17. $ENV{SDL_VIDEODRIVER} = 'dummy' unless $ENV{SDL_RELEASE_TESTING};
  18. if ( !SDL::TestTool->init(SDL_INIT_VIDEO) ) {
  19. plan( skip_all => 'Failed to init video' );
  20. } elsif ( !SDL::Config->has('SDL_gfx_primitives') ) {
  21. plan( skip_all => 'SDL_gfx_primitives support not compiled' );
  22. }
  23. my $v = SDL::GFX::linked_version();
  24. isa_ok( $v, 'SDL::Version', '[linked_version]' );
  25. printf( "got version: %d.%d.%d\n", $v->major, $v->minor, $v->patch );
  26. my $display = SDL::Video::set_video_mode( 640, 480, 32, SDL_SWSURFACE );
  27. my $pixel = SDL::Video::map_RGB( $display->format, 0, 0, 0 );
  28. SDL::Video::fill_rect(
  29. $display,
  30. SDL::Rect->new( 0, 0, $display->w, $display->h ), $pixel
  31. );
  32. if ( !$display ) {
  33. plan skip_all => 'Couldn\'t set video mode: ' . SDL::get_error();
  34. }
  35. # ellipse/aaellipse/filled_ellipse tests
  36. is( SDL::GFX::Primitives::ellipse_color( $display, 3, 245, 1, 2, 0xFF0000FF ),
  37. 0, 'ellipse_color'
  38. ); # red
  39. is( SDL::GFX::Primitives::ellipse_RGBA( $display, 7, 245, 1, 2, 0x00, 0xFF, 0x00, 0xFF ),
  40. 0,
  41. 'ellipse_RGBA'
  42. ); # green
  43. is( SDL::GFX::Primitives::aaellipse_color( $display, 11, 245, 1, 2, 0x0000FFFF ),
  44. 0,
  45. 'aaellipse_color'
  46. ); # blue
  47. is( SDL::GFX::Primitives::aaellipse_RGBA( $display, 15, 245, 1, 2, 0xFF, 0xFF, 0x00, 0xFF ),
  48. 0,
  49. 'aaellipse_RGBA'
  50. ); # yellow
  51. is( SDL::GFX::Primitives::filled_ellipse_color( $display, 19, 245, 1, 2, 0x00FFFFFF ),
  52. 0,
  53. 'filled_ellipse_color'
  54. ); # cyan
  55. is( SDL::GFX::Primitives::filled_ellipse_RGBA( $display, 23, 245, 1, 2, 0xFF, 0x00, 0xFF, 0xFF ),
  56. 0,
  57. 'filled_ellipse_RGBA'
  58. ); # magenta
  59. # ellipse/aaellipse/filled_ellipse demo
  60. SDL::GFX::Primitives::aaellipse_color(
  61. $display, 65, 249 + 2 * $_,
  62. 60, 2 * $_, 0xFFFFFF80
  63. ) for ( 1 .. 25 );
  64. SDL::GFX::Primitives::filled_ellipse_RGBA(
  65. $display, 65, 405, 60 - 1.2 * $_,
  66. 50 - $_, 0xFF, 0x00, 0x00, 0x05
  67. ) for ( 0 .. 30 );
  68. SDL::GFX::Primitives::filled_ellipse_RGBA(
  69. $display, 65, 405, 12, 10, 0x00,
  70. 0x00, 0x00, 0xFF
  71. );
  72. SDL::GFX::Primitives::aaellipse_RGBA(
  73. $display, 65, 405, 12, 10, 0x00, 0x00,
  74. 0x00, 0xFF
  75. );
  76. # trigon/aatrigon/filled_trigon tests
  77. is( SDL::GFX::Primitives::trigon_color( $display, 130, 243, 132, 245, 130, 247, 0xFF0000FF ),
  78. 0,
  79. 'trigon_color'
  80. ); # red
  81. is( SDL::GFX::Primitives::trigon_RGBA( $display, 134, 243, 136, 245, 134, 247, 0x00, 0xFF, 0x00, 0xFF ),
  82. 0,
  83. 'trigon_RGBA'
  84. ); # green
  85. is( SDL::GFX::Primitives::aatrigon_color( $display, 138, 243, 140, 245, 138, 247, 0x0000FFFF ),
  86. 0,
  87. 'aatrigon_color'
  88. ); # blue
  89. is( SDL::GFX::Primitives::aatrigon_RGBA( $display, 142, 243, 144, 245, 142, 247, 0xFF, 0xFF, 0x00, 0xFF ),
  90. 0,
  91. 'aatrigon_RGBA'
  92. ); # yellow
  93. is( SDL::GFX::Primitives::filled_trigon_color( $display, 146, 243, 148, 245, 146, 247, 0x00FFFFFF ),
  94. 0,
  95. 'filled_trigon_color'
  96. ); # cyan
  97. is( SDL::GFX::Primitives::filled_trigon_RGBA( $display, 150, 243, 152, 245, 150, 247, 0xFF, 0x00, 0xFF, 0xFF ),
  98. 0,
  99. 'filled_trigon_RGBA'
  100. ); # magenta
  101. # polygon/aapolygon/filled_polygon/textured_polygon/MT/ tests
  102. my $surf = SDL::Video::load_BMP('test/data/pattern_red_white_2x2.bmp');
  103. is( SDL::GFX::Primitives::polygon_color(
  104. $display,
  105. [ 262, 266, 264, 266, 262 ],
  106. [ 243, 243, 245, 247, 247 ],
  107. 5, 0xFF0000FF
  108. ),
  109. 0,
  110. 'polygon_color'
  111. ); # red
  112. is( SDL::GFX::Primitives::polygon_RGBA(
  113. $display,
  114. [ 268, 272, 270, 272, 268 ],
  115. [ 243, 243, 245, 247, 247 ],
  116. 5, 0x00, 0xFF, 0x00, 0xFF
  117. ),
  118. 0,
  119. 'polygon_RGBA'
  120. ); # green
  121. is( SDL::GFX::Primitives::aapolygon_color(
  122. $display,
  123. [ 274, 278, 276, 278, 274 ],
  124. [ 243, 243, 245, 247, 247 ],
  125. 5, 0x0000FFFF
  126. ),
  127. 0,
  128. 'aapolygon_color'
  129. ); # blue
  130. is( SDL::GFX::Primitives::aapolygon_RGBA(
  131. $display,
  132. [ 280, 284, 282, 284, 280 ],
  133. [ 243, 243, 245, 247, 247 ],
  134. 5, 0xFF, 0xFF, 0x00, 0xFF
  135. ),
  136. 0,
  137. 'aapolygon_RGBA'
  138. ); # yellow
  139. is( SDL::GFX::Primitives::filled_polygon_color(
  140. $display,
  141. [ 286, 290, 288, 290, 286 ],
  142. [ 243, 243, 245, 247, 247 ],
  143. 5, 0x00FFFFFF
  144. ),
  145. 0,
  146. 'filled_polygon_color'
  147. ); # cyan
  148. is( SDL::GFX::Primitives::filled_polygon_RGBA(
  149. $display,
  150. [ 292, 296, 294, 296, 292 ],
  151. [ 243, 243, 245, 247, 247 ],
  152. 5, 0xFF, 0x00, 0xFF, 0xFF
  153. ),
  154. 0,
  155. 'filled_polygon_RGBA'
  156. ); # magenta
  157. SKIP:
  158. {
  159. skip( 'Version 2.0.14 needed', 1 ) if $v < 2.0.14;
  160. isnt(
  161. SDL::GFX::Primitives::textured_polygon(
  162. $display,
  163. [ 298, 302, 300, 302, 298 ],
  164. [ 243, 243, 245, 247, 247 ],
  165. 5, $surf, 0, 0
  166. ),
  167. -1,
  168. 'textured_polygon'
  169. ); # texture
  170. }
  171. SKIP:
  172. {
  173. skip( 'Version 2.0.17 needed', 3 ) if $v < 2.0.17;
  174. is( SDL::GFX::Primitives::filled_polygon_color_MT(
  175. $display,
  176. [ 304, 308, 306, 308, 304 ],
  177. [ 243, 243, 245, 247, 247 ],
  178. 5, 0xFF0000FF, 0, 0
  179. ),
  180. 0,
  181. 'filled_polygon_color_MT'
  182. ); # red
  183. is( SDL::GFX::Primitives::filled_polygon_RGBA_MT(
  184. $display,
  185. [ 310, 314, 312, 314, 310 ],
  186. [ 243, 243, 245, 247, 247 ],
  187. 5, 0x00, 0xFF, 0x00, 0xFF, 0, 0
  188. ),
  189. 0,
  190. 'filled_polygon_RGBA_MT'
  191. ); # green
  192. isnt(
  193. SDL::GFX::Primitives::textured_polygon_MT(
  194. $display,
  195. [ 316, 320, 318, 320, 316 ],
  196. [ 243, 243, 245, 247, 247 ],
  197. 5, $surf, 0, 0, 0, 0
  198. ),
  199. -1,
  200. 'textured_polygon_MT '
  201. ); # texture
  202. }
  203. # polygon demo
  204. SDL::GFX::Primitives::filled_polygon_color(
  205. $display,
  206. [ 311, 331, 381, 301, 311, 351 ],
  207. [ 293, 293, 378, 378, 361, 361 ],
  208. 6, 0xFF000080
  209. ); # red
  210. SDL::GFX::Primitives::filled_polygon_color(
  211. $display,
  212. [ 381, 371, 271, 311, 321, 301 ],
  213. [ 378, 395, 395, 327, 344, 378 ],
  214. 6, 0x00FF0080
  215. ); # green
  216. SDL::GFX::Primitives::filled_polygon_color(
  217. $display,
  218. [ 271, 261, 311, 351, 331, 311 ],
  219. [ 395, 378, 293, 361, 361, 327 ],
  220. 6, 0x0000FF80
  221. ); # blue
  222. # bezier test
  223. is( SDL::GFX::Primitives::bezier_color(
  224. $display,
  225. [ 390, 392, 394, 396 ],
  226. [ 243, 255, 235, 247 ],
  227. 4, 20, 0xFF00FFFF
  228. ),
  229. 0,
  230. 'polygon_color'
  231. ); # red
  232. is( SDL::GFX::Primitives::bezier_RGBA(
  233. $display,
  234. [ 398, 400, 402, 404 ],
  235. [ 243, 255, 235, 247 ],
  236. 4, 20, 0x00, 0xFF, 0x00, 0xFF
  237. ),
  238. 0,
  239. 'polygon_RGBA'
  240. ); # green
  241. #character/string tests
  242. is( SDL::GFX::Primitives::character_color( $display, 518, 243, 'A', 0xFF0000FF ),
  243. 0,
  244. 'character_color'
  245. ); # red
  246. is( SDL::GFX::Primitives::character_RGBA( $display, 526, 243, 'B', 0x00, 0xFF, 0x00, 0xFF ),
  247. 0,
  248. 'character_RGBA'
  249. ); # green
  250. is( SDL::GFX::Primitives::string_color( $display, 534, 243, 'CD', 0x0000FFFF ),
  251. 0, 'string_color'
  252. ); # blue
  253. is( SDL::GFX::Primitives::string_RGBA( $display, 550, 243, 'DE', 0xFF, 0xFF, 0x00, 0xFF ),
  254. 0,
  255. 'string_RGBA'
  256. ); # yellow
  257. SKIP:
  258. {
  259. skip ' test font not found', 1 unless -e 'test/data/5x7.fnt';
  260. my $font = '';
  261. open( FH, '<', 'test/data/5x7.fnt' );
  262. binmode(FH);
  263. read( FH, $font, 2048 );
  264. close(FH);
  265. is( SDL::GFX::Primitives::set_font( $font, 5, 7 ), undef, 'set_font' );
  266. }
  267. #chracater demo
  268. SDL::GFX::Primitives::character_RGBA(
  269. $display,
  270. 518 + ( $_ % 17 ) * 7,
  271. 251 + int( $_ / 17 ) * 8,
  272. chr($_), 0x80 + $_ / 2,
  273. 0xFF, 0x00, 0xFF
  274. ) for ( 0 .. 255 );
  275. SDL::Video::update_rect( $display, 0, 0, 640, 480 );
  276. SDL::delay(3000);
  277. if ($videodriver) {
  278. $ENV{SDL_VIDEODRIVER} = $videodriver;
  279. } else {
  280. delete $ENV{SDL_VIDEODRIVER};
  281. }
  282. pass 'Are we still alive? Checking for segfaults';
  283. done_testing;