testautomation_render.c 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179
  1. /**
  2. * Original code: automated SDL platform test written by Edgar Simo "bobbens"
  3. * Extended and extensively updated by aschiffler at ferzkopp dot net
  4. */
  5. #include <stdio.h>
  6. #include "SDL.h"
  7. #include "SDL_test.h"
  8. /* ================= Test Case Implementation ================== */
  9. #define TESTRENDER_SCREEN_W 80
  10. #define TESTRENDER_SCREEN_H 60
  11. #define RENDER_COMPARE_FORMAT SDL_PIXELFORMAT_ARGB8888
  12. #define RENDER_COMPARE_AMASK 0xff000000 /**< Alpha bit mask. */
  13. #define RENDER_COMPARE_RMASK 0x00ff0000 /**< Red bit mask. */
  14. #define RENDER_COMPARE_GMASK 0x0000ff00 /**< Green bit mask. */
  15. #define RENDER_COMPARE_BMASK 0x000000ff /**< Blue bit mask. */
  16. #define ALLOWABLE_ERROR_OPAQUE 0
  17. #define ALLOWABLE_ERROR_BLENDED 64
  18. /* Test window and renderer */
  19. SDL_Window *window = NULL;
  20. SDL_Renderer *renderer = NULL;
  21. /* Prototypes for helper functions */
  22. static int _clearScreen (void);
  23. static void _compare(SDL_Surface *reference, int allowable_error);
  24. static int _hasTexAlpha(void);
  25. static int _hasTexColor(void);
  26. static SDL_Texture *_loadTestFace(void);
  27. static int _hasBlendModes(void);
  28. static int _hasDrawColor(void);
  29. static int _isSupported(int code);
  30. /**
  31. * Create software renderer for tests
  32. */
  33. void InitCreateRenderer(void *arg)
  34. {
  35. int posX = 100, posY = 100, width = 320, height = 240;
  36. renderer = NULL;
  37. window = SDL_CreateWindow("render_testCreateRenderer", posX, posY, width, height, 0);
  38. SDLTest_AssertPass("SDL_CreateWindow()");
  39. SDLTest_AssertCheck(window != NULL, "Check SDL_CreateWindow result");
  40. if (window == NULL) {
  41. return;
  42. }
  43. renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
  44. SDLTest_AssertPass("SDL_CreateRenderer()");
  45. SDLTest_AssertCheck(renderer != NULL, "Check SDL_CreateRenderer result");
  46. if (renderer == NULL) {
  47. SDL_DestroyWindow(window);
  48. return;
  49. }
  50. }
  51. /*
  52. * Destroy renderer for tests
  53. */
  54. void CleanupDestroyRenderer(void *arg)
  55. {
  56. if (renderer != NULL) {
  57. SDL_DestroyRenderer(renderer);
  58. renderer = NULL;
  59. SDLTest_AssertPass("SDL_DestroyRenderer()");
  60. }
  61. if (window != NULL) {
  62. SDL_DestroyWindow(window);
  63. window = NULL;
  64. SDLTest_AssertPass("SDL_DestroyWindow");
  65. }
  66. }
  67. /**
  68. * @brief Tests call to SDL_GetNumRenderDrivers
  69. *
  70. * \sa
  71. * http://wiki.libsdl.org/SDL_GetNumRenderDrivers
  72. */
  73. int
  74. render_testGetNumRenderDrivers(void *arg)
  75. {
  76. int n;
  77. n = SDL_GetNumRenderDrivers();
  78. SDLTest_AssertCheck(n >= 1, "Number of renderers >= 1, reported as %i", n);
  79. return TEST_COMPLETED;
  80. }
  81. /**
  82. * @brief Tests the SDL primitives for rendering.
  83. *
  84. * \sa
  85. * http://wiki.libsdl.org/SDL_SetRenderDrawColor
  86. * http://wiki.libsdl.org/SDL_RenderFillRect
  87. * http://wiki.libsdl.org/SDL_RenderDrawLine
  88. *
  89. */
  90. int render_testPrimitives (void *arg)
  91. {
  92. int ret;
  93. int x, y;
  94. SDL_Rect rect;
  95. SDL_Surface *referenceSurface = NULL;
  96. int checkFailCount1;
  97. int checkFailCount2;
  98. /* Clear surface. */
  99. _clearScreen();
  100. /* Need drawcolor or just skip test. */
  101. SDLTest_AssertCheck(_hasDrawColor(), "_hasDrawColor");
  102. /* Draw a rectangle. */
  103. rect.x = 40;
  104. rect.y = 0;
  105. rect.w = 40;
  106. rect.h = 80;
  107. ret = SDL_SetRenderDrawColor(renderer, 13, 73, 200, SDL_ALPHA_OPAQUE );
  108. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret);
  109. ret = SDL_RenderFillRect(renderer, &rect );
  110. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret);
  111. /* Draw a rectangle. */
  112. rect.x = 10;
  113. rect.y = 10;
  114. rect.w = 60;
  115. rect.h = 40;
  116. ret = SDL_SetRenderDrawColor(renderer, 200, 0, 100, SDL_ALPHA_OPAQUE );
  117. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret);
  118. ret = SDL_RenderFillRect(renderer, &rect );
  119. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret);
  120. /* Draw some points like so:
  121. * X.X.X.X..
  122. * .X.X.X.X.
  123. * X.X.X.X.. */
  124. checkFailCount1 = 0;
  125. checkFailCount2 = 0;
  126. for (y=0; y<3; y++) {
  127. for (x = y % 2; x<TESTRENDER_SCREEN_W; x+=2) {
  128. ret = SDL_SetRenderDrawColor(renderer, x*y, x*y/2, x*y/3, SDL_ALPHA_OPAQUE );
  129. if (ret != 0) {
  130. checkFailCount1++;
  131. }
  132. ret = SDL_RenderDrawPoint(renderer, x, y );
  133. if (ret != 0) {
  134. checkFailCount2++;
  135. }
  136. }
  137. }
  138. SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetRenderDrawColor, expected: 0, got: %i", checkFailCount1);
  139. SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_RenderDrawPoint, expected: 0, got: %i", checkFailCount2);
  140. /* Draw some lines. */
  141. ret = SDL_SetRenderDrawColor(renderer, 0, 255, 0, SDL_ALPHA_OPAQUE );
  142. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor");
  143. ret = SDL_RenderDrawLine(renderer, 0, 30, TESTRENDER_SCREEN_W, 30 );
  144. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderDrawLine, expected: 0, got: %i", ret);
  145. ret = SDL_SetRenderDrawColor(renderer, 55, 55, 5, SDL_ALPHA_OPAQUE );
  146. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret);
  147. ret = SDL_RenderDrawLine(renderer, 40, 30, 40, 60 );
  148. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderDrawLine, expected: 0, got: %i", ret);
  149. ret = SDL_SetRenderDrawColor(renderer, 5, 105, 105, SDL_ALPHA_OPAQUE );
  150. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret);
  151. ret = SDL_RenderDrawLine(renderer, 0, 0, 29, 29 );
  152. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderDrawLine, expected: 0, got: %i", ret);
  153. ret = SDL_RenderDrawLine(renderer, 29, 30, 0, 59 );
  154. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderDrawLine, expected: 0, got: %i", ret);
  155. ret = SDL_RenderDrawLine(renderer, 79, 0, 50, 29 );
  156. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderDrawLine, expected: 0, got: %i", ret);
  157. ret = SDL_RenderDrawLine(renderer, 79, 59, 50, 30 );
  158. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderDrawLine, expected: 0, got: %i", ret);
  159. /* See if it's the same. */
  160. referenceSurface = SDLTest_ImagePrimitives();
  161. _compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE );
  162. /* Make current */
  163. SDL_RenderPresent(renderer);
  164. /* Clean up. */
  165. SDL_FreeSurface(referenceSurface);
  166. referenceSurface = NULL;
  167. return TEST_COMPLETED;
  168. }
  169. /**
  170. * @brief Tests the SDL primitives with alpha for rendering.
  171. *
  172. * \sa
  173. * http://wiki.libsdl.org/SDL_SetRenderDrawColor
  174. * http://wiki.libsdl.org/SDL_SetRenderDrawBlendMode
  175. * http://wiki.libsdl.org/SDL_RenderFillRect
  176. */
  177. int render_testPrimitivesBlend (void *arg)
  178. {
  179. int ret;
  180. int i, j;
  181. SDL_Rect rect;
  182. SDL_Surface *referenceSurface = NULL;
  183. int checkFailCount1;
  184. int checkFailCount2;
  185. int checkFailCount3;
  186. /* Clear surface. */
  187. _clearScreen();
  188. /* Need drawcolor and blendmode or just skip test. */
  189. SDLTest_AssertCheck(_hasDrawColor(), "_hasDrawColor");
  190. SDLTest_AssertCheck(_hasBlendModes(), "_hasBlendModes");
  191. /* Create some rectangles for each blend mode. */
  192. ret = SDL_SetRenderDrawColor(renderer, 255, 255, 255, 0 );
  193. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret);
  194. ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE );
  195. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawBlendMode, expected: 0, got: %i", ret);
  196. ret = SDL_RenderFillRect(renderer, NULL );
  197. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret);
  198. rect.x = 10;
  199. rect.y = 25;
  200. rect.w = 40;
  201. rect.h = 25;
  202. ret = SDL_SetRenderDrawColor(renderer, 240, 10, 10, 75 );
  203. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret);
  204. ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_ADD );
  205. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawBlendMode, expected: 0, got: %i", ret);
  206. ret = SDL_RenderFillRect(renderer, &rect );
  207. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret);
  208. rect.x = 30;
  209. rect.y = 40;
  210. rect.w = 45;
  211. rect.h = 15;
  212. ret = SDL_SetRenderDrawColor(renderer, 10, 240, 10, 100 );
  213. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret);
  214. ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND );
  215. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawBlendMode, expected: 0, got: %i", ret);
  216. ret = SDL_RenderFillRect(renderer, &rect );
  217. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret);
  218. rect.x = 25;
  219. rect.y = 25;
  220. rect.w = 25;
  221. rect.h = 25;
  222. ret = SDL_SetRenderDrawColor(renderer, 10, 10, 240, 125 );
  223. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret);
  224. ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE );
  225. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawBlendMode, expected: 0, got: %i", ret);
  226. ret = SDL_RenderFillRect(renderer, &rect );
  227. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret);
  228. /* Draw blended lines, lines for everyone. */
  229. checkFailCount1 = 0;
  230. checkFailCount2 = 0;
  231. checkFailCount3 = 0;
  232. for (i=0; i<TESTRENDER_SCREEN_W; i+=2) {
  233. ret = SDL_SetRenderDrawColor(renderer, 60+2*i, 240-2*i, 50, 3*i );
  234. if (ret != 0) {
  235. checkFailCount1++;
  236. }
  237. ret = SDL_SetRenderDrawBlendMode(renderer,(((i/2)%3)==0) ? SDL_BLENDMODE_BLEND :
  238. (((i/2)%3)==1) ? SDL_BLENDMODE_ADD : SDL_BLENDMODE_NONE );
  239. if (ret != 0) {
  240. checkFailCount2++;
  241. }
  242. ret = SDL_RenderDrawLine(renderer, 0, 0, i, 59 );
  243. if (ret != 0) {
  244. checkFailCount3++;
  245. }
  246. }
  247. SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetRenderDrawColor, expected: 0, got: %i", checkFailCount1);
  248. SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_SetRenderDrawBlendMode, expected: 0, got: %i", checkFailCount2);
  249. SDLTest_AssertCheck(checkFailCount3 == 0, "Validate results from calls to SDL_RenderDrawLine, expected: 0, got: %i", checkFailCount3);
  250. checkFailCount1 = 0;
  251. checkFailCount2 = 0;
  252. checkFailCount3 = 0;
  253. for (i=0; i<TESTRENDER_SCREEN_H; i+=2) {
  254. ret = SDL_SetRenderDrawColor(renderer, 60+2*i, 240-2*i, 50, 3*i );
  255. if (ret != 0) {
  256. checkFailCount1++;
  257. }
  258. ret = SDL_SetRenderDrawBlendMode(renderer,(((i/2)%3)==0) ? SDL_BLENDMODE_BLEND :
  259. (((i/2)%3)==1) ? SDL_BLENDMODE_ADD : SDL_BLENDMODE_NONE );
  260. if (ret != 0) {
  261. checkFailCount2++;
  262. }
  263. ret = SDL_RenderDrawLine(renderer, 0, 0, 79, i );
  264. if (ret != 0) {
  265. checkFailCount3++;
  266. }
  267. }
  268. SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetRenderDrawColor, expected: 0, got: %i", checkFailCount1);
  269. SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_SetRenderDrawBlendMode, expected: 0, got: %i", checkFailCount2);
  270. SDLTest_AssertCheck(checkFailCount3 == 0, "Validate results from calls to SDL_RenderDrawLine, expected: 0, got: %i", checkFailCount3);
  271. /* Draw points. */
  272. checkFailCount1 = 0;
  273. checkFailCount2 = 0;
  274. checkFailCount3 = 0;
  275. for (j=0; j<TESTRENDER_SCREEN_H; j+=3) {
  276. for (i=0; i<TESTRENDER_SCREEN_W; i+=3) {
  277. ret = SDL_SetRenderDrawColor(renderer, j*4, i*3, j*4, i*3 );
  278. if (ret != 0) {
  279. checkFailCount1++;
  280. }
  281. ret = SDL_SetRenderDrawBlendMode(renderer, ((((i+j)/3)%3)==0) ? SDL_BLENDMODE_BLEND :
  282. ((((i+j)/3)%3)==1) ? SDL_BLENDMODE_ADD : SDL_BLENDMODE_NONE );
  283. if (ret != 0) {
  284. checkFailCount2++;
  285. }
  286. ret = SDL_RenderDrawPoint(renderer, i, j );
  287. if (ret != 0) {
  288. checkFailCount3++;
  289. }
  290. }
  291. }
  292. SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetRenderDrawColor, expected: 0, got: %i", checkFailCount1);
  293. SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_SetRenderDrawBlendMode, expected: 0, got: %i", checkFailCount2);
  294. SDLTest_AssertCheck(checkFailCount3 == 0, "Validate results from calls to SDL_RenderDrawPoint, expected: 0, got: %i", checkFailCount3);
  295. /* See if it's the same. */
  296. referenceSurface = SDLTest_ImagePrimitivesBlend();
  297. _compare(referenceSurface, ALLOWABLE_ERROR_BLENDED );
  298. /* Make current */
  299. SDL_RenderPresent(renderer);
  300. /* Clean up. */
  301. SDL_FreeSurface(referenceSurface);
  302. referenceSurface = NULL;
  303. return TEST_COMPLETED;
  304. }
  305. /**
  306. * @brief Tests some blitting routines.
  307. *
  308. * \sa
  309. * http://wiki.libsdl.org/SDL_RenderCopy
  310. * http://wiki.libsdl.org/SDL_DestroyTexture
  311. */
  312. int
  313. render_testBlit(void *arg)
  314. {
  315. int ret;
  316. SDL_Rect rect;
  317. SDL_Texture *tface;
  318. SDL_Surface *referenceSurface = NULL;
  319. Uint32 tformat;
  320. int taccess, tw, th;
  321. int i, j, ni, nj;
  322. int checkFailCount1;
  323. /* Clear surface. */
  324. _clearScreen();
  325. /* Need drawcolor or just skip test. */
  326. SDLTest_AssertCheck(_hasDrawColor(), "_hasDrawColor)");
  327. /* Create face surface. */
  328. tface = _loadTestFace();
  329. SDLTest_AssertCheck(tface != NULL, "Verify _loadTestFace() result");
  330. if (tface == NULL) {
  331. return TEST_ABORTED;
  332. }
  333. /* Constant values. */
  334. ret = SDL_QueryTexture(tface, &tformat, &taccess, &tw, &th);
  335. SDLTest_AssertCheck(ret == 0, "Verify result from SDL_QueryTexture, expected 0, got %i", ret);
  336. rect.w = tw;
  337. rect.h = th;
  338. ni = TESTRENDER_SCREEN_W - tw;
  339. nj = TESTRENDER_SCREEN_H - th;
  340. /* Loop blit. */
  341. checkFailCount1 = 0;
  342. for (j=0; j <= nj; j+=4) {
  343. for (i=0; i <= ni; i+=4) {
  344. /* Blitting. */
  345. rect.x = i;
  346. rect.y = j;
  347. ret = SDL_RenderCopy(renderer, tface, NULL, &rect );
  348. if (ret != 0) {
  349. checkFailCount1++;
  350. }
  351. }
  352. }
  353. SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_RenderCopy, expected: 0, got: %i", checkFailCount1);
  354. /* See if it's the same */
  355. referenceSurface = SDLTest_ImageBlit();
  356. _compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE );
  357. /* Make current */
  358. SDL_RenderPresent(renderer);
  359. /* Clean up. */
  360. SDL_DestroyTexture( tface );
  361. SDL_FreeSurface(referenceSurface);
  362. referenceSurface = NULL;
  363. return TEST_COMPLETED;
  364. }
  365. /**
  366. * @brief Blits doing color tests.
  367. *
  368. * \sa
  369. * http://wiki.libsdl.org/SDL_SetTextureColorMod
  370. * http://wiki.libsdl.org/SDL_RenderCopy
  371. * http://wiki.libsdl.org/SDL_DestroyTexture
  372. */
  373. int
  374. render_testBlitColor (void *arg)
  375. {
  376. int ret;
  377. SDL_Rect rect;
  378. SDL_Texture *tface;
  379. SDL_Surface *referenceSurface = NULL;
  380. Uint32 tformat;
  381. int taccess, tw, th;
  382. int i, j, ni, nj;
  383. int checkFailCount1;
  384. int checkFailCount2;
  385. /* Clear surface. */
  386. _clearScreen();
  387. /* Create face surface. */
  388. tface = _loadTestFace();
  389. SDLTest_AssertCheck(tface != NULL, "Verify _loadTestFace() result");
  390. if (tface == NULL) {
  391. return TEST_ABORTED;
  392. }
  393. /* Constant values. */
  394. ret = SDL_QueryTexture(tface, &tformat, &taccess, &tw, &th);
  395. SDLTest_AssertCheck(ret == 0, "Verify result from SDL_QueryTexture, expected 0, got %i", ret);
  396. rect.w = tw;
  397. rect.h = th;
  398. ni = TESTRENDER_SCREEN_W - tw;
  399. nj = TESTRENDER_SCREEN_H - th;
  400. /* Test blitting with color mod. */
  401. checkFailCount1 = 0;
  402. checkFailCount2 = 0;
  403. for (j=0; j <= nj; j+=4) {
  404. for (i=0; i <= ni; i+=4) {
  405. /* Set color mod. */
  406. ret = SDL_SetTextureColorMod( tface, (255/nj)*j, (255/ni)*i, (255/nj)*j );
  407. if (ret != 0) {
  408. checkFailCount1++;
  409. }
  410. /* Blitting. */
  411. rect.x = i;
  412. rect.y = j;
  413. ret = SDL_RenderCopy(renderer, tface, NULL, &rect );
  414. if (ret != 0) {
  415. checkFailCount2++;
  416. }
  417. }
  418. }
  419. SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetTextureColorMod, expected: 0, got: %i", checkFailCount1);
  420. SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_RenderCopy, expected: 0, got: %i", checkFailCount2);
  421. /* See if it's the same. */
  422. referenceSurface = SDLTest_ImageBlitColor();
  423. _compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE );
  424. /* Make current */
  425. SDL_RenderPresent(renderer);
  426. /* Clean up. */
  427. SDL_DestroyTexture( tface );
  428. SDL_FreeSurface(referenceSurface);
  429. referenceSurface = NULL;
  430. return TEST_COMPLETED;
  431. }
  432. /**
  433. * @brief Tests blitting with alpha.
  434. *
  435. * \sa
  436. * http://wiki.libsdl.org/SDL_SetTextureAlphaMod
  437. * http://wiki.libsdl.org/SDL_RenderCopy
  438. * http://wiki.libsdl.org/SDL_DestroyTexture
  439. */
  440. int
  441. render_testBlitAlpha (void *arg)
  442. {
  443. int ret;
  444. SDL_Rect rect;
  445. SDL_Texture *tface;
  446. SDL_Surface *referenceSurface = NULL;
  447. Uint32 tformat;
  448. int taccess, tw, th;
  449. int i, j, ni, nj;
  450. int checkFailCount1;
  451. int checkFailCount2;
  452. /* Clear surface. */
  453. _clearScreen();
  454. /* Need alpha or just skip test. */
  455. SDLTest_AssertCheck(_hasTexAlpha(), "_hasTexAlpha");
  456. /* Create face surface. */
  457. tface = _loadTestFace();
  458. SDLTest_AssertCheck(tface != NULL, "Verify _loadTestFace() result");
  459. if (tface == NULL) {
  460. return TEST_ABORTED;
  461. }
  462. /* Constant values. */
  463. ret = SDL_QueryTexture(tface, &tformat, &taccess, &tw, &th);
  464. SDLTest_AssertCheck(ret == 0, "Verify result from SDL_QueryTexture, expected 0, got %i", ret);
  465. rect.w = tw;
  466. rect.h = th;
  467. ni = TESTRENDER_SCREEN_W - tw;
  468. nj = TESTRENDER_SCREEN_H - th;
  469. /* Test blitting with alpha mod. */
  470. checkFailCount1 = 0;
  471. checkFailCount2 = 0;
  472. for (j=0; j <= nj; j+=4) {
  473. for (i=0; i <= ni; i+=4) {
  474. /* Set alpha mod. */
  475. ret = SDL_SetTextureAlphaMod( tface, (255/ni)*i );
  476. if (ret != 0) {
  477. checkFailCount1++;
  478. }
  479. /* Blitting. */
  480. rect.x = i;
  481. rect.y = j;
  482. ret = SDL_RenderCopy(renderer, tface, NULL, &rect );
  483. if (ret != 0) {
  484. checkFailCount2++;
  485. }
  486. }
  487. }
  488. SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetTextureAlphaMod, expected: 0, got: %i", checkFailCount1);
  489. SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_RenderCopy, expected: 0, got: %i", checkFailCount2);
  490. /* See if it's the same. */
  491. referenceSurface = SDLTest_ImageBlitAlpha();
  492. _compare(referenceSurface, ALLOWABLE_ERROR_BLENDED );
  493. /* Make current */
  494. SDL_RenderPresent(renderer);
  495. /* Clean up. */
  496. SDL_DestroyTexture( tface );
  497. SDL_FreeSurface(referenceSurface);
  498. referenceSurface = NULL;
  499. return TEST_COMPLETED;
  500. }
  501. /* Helper functions */
  502. /**
  503. * @brief Tests a blend mode.
  504. *
  505. * \sa
  506. * http://wiki.libsdl.org/SDL_SetTextureBlendMode
  507. * http://wiki.libsdl.org/SDL_RenderCopy
  508. */
  509. static void
  510. _testBlitBlendMode( SDL_Texture * tface, int mode )
  511. {
  512. int ret;
  513. Uint32 tformat;
  514. int taccess, tw, th;
  515. int i, j, ni, nj;
  516. SDL_Rect rect;
  517. int checkFailCount1;
  518. int checkFailCount2;
  519. /* Clear surface. */
  520. _clearScreen();
  521. /* Constant values. */
  522. ret = SDL_QueryTexture(tface, &tformat, &taccess, &tw, &th);
  523. SDLTest_AssertCheck(ret == 0, "Verify result from SDL_QueryTexture, expected 0, got %i", ret);
  524. rect.w = tw;
  525. rect.h = th;
  526. ni = TESTRENDER_SCREEN_W - tw;
  527. nj = TESTRENDER_SCREEN_H - th;
  528. /* Test blend mode. */
  529. checkFailCount1 = 0;
  530. checkFailCount2 = 0;
  531. for (j=0; j <= nj; j+=4) {
  532. for (i=0; i <= ni; i+=4) {
  533. /* Set blend mode. */
  534. ret = SDL_SetTextureBlendMode( tface, (SDL_BlendMode)mode );
  535. if (ret != 0) {
  536. checkFailCount1++;
  537. }
  538. /* Blitting. */
  539. rect.x = i;
  540. rect.y = j;
  541. ret = SDL_RenderCopy(renderer, tface, NULL, &rect );
  542. if (ret != 0) {
  543. checkFailCount2++;
  544. }
  545. }
  546. }
  547. SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetTextureBlendMode, expected: 0, got: %i", checkFailCount1);
  548. SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_RenderCopy, expected: 0, got: %i", checkFailCount2);
  549. }
  550. /**
  551. * @brief Tests some more blitting routines.
  552. *
  553. * \sa
  554. * http://wiki.libsdl.org/SDL_SetTextureColorMod
  555. * http://wiki.libsdl.org/SDL_SetTextureAlphaMod
  556. * http://wiki.libsdl.org/SDL_SetTextureBlendMode
  557. * http://wiki.libsdl.org/SDL_DestroyTexture
  558. */
  559. int
  560. render_testBlitBlend (void *arg)
  561. {
  562. int ret;
  563. SDL_Rect rect;
  564. SDL_Texture *tface;
  565. SDL_Surface *referenceSurface = NULL;
  566. Uint32 tformat;
  567. int taccess, tw, th;
  568. int i, j, ni, nj;
  569. int mode;
  570. int checkFailCount1;
  571. int checkFailCount2;
  572. int checkFailCount3;
  573. int checkFailCount4;
  574. SDLTest_AssertCheck(_hasBlendModes(), "_hasBlendModes");
  575. SDLTest_AssertCheck(_hasTexColor(), "_hasTexColor");
  576. SDLTest_AssertCheck(_hasTexAlpha(), "_hasTexAlpha");
  577. /* Create face surface. */
  578. tface = _loadTestFace();
  579. SDLTest_AssertCheck(tface != NULL, "Verify _loadTestFace() result");
  580. if (tface == NULL) {
  581. return TEST_ABORTED;
  582. }
  583. /* Constant values. */
  584. ret = SDL_QueryTexture(tface, &tformat, &taccess, &tw, &th);
  585. SDLTest_AssertCheck(ret == 0, "Verify result from SDL_QueryTexture, expected 0, got %i", ret);
  586. rect.w = tw;
  587. rect.h = th;
  588. ni = TESTRENDER_SCREEN_W - tw;
  589. nj = TESTRENDER_SCREEN_H - th;
  590. /* Set alpha mod. */
  591. ret = SDL_SetTextureAlphaMod( tface, 100 );
  592. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetTextureAlphaMod, expected: 0, got: %i", ret);
  593. /* Test None. */
  594. _testBlitBlendMode( tface, SDL_BLENDMODE_NONE );
  595. referenceSurface = SDLTest_ImageBlitBlendNone();
  596. /* Compare, then Present */
  597. _compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE );
  598. SDL_RenderPresent(renderer);
  599. SDL_FreeSurface(referenceSurface);
  600. referenceSurface = NULL;
  601. /* Test Blend. */
  602. _testBlitBlendMode( tface, SDL_BLENDMODE_BLEND );
  603. referenceSurface = SDLTest_ImageBlitBlend();
  604. /* Compare, then Present */
  605. _compare(referenceSurface, ALLOWABLE_ERROR_BLENDED );
  606. SDL_RenderPresent(renderer);
  607. SDL_FreeSurface(referenceSurface);
  608. referenceSurface = NULL;
  609. /* Test Add. */
  610. _testBlitBlendMode( tface, SDL_BLENDMODE_ADD );
  611. referenceSurface = SDLTest_ImageBlitBlendAdd();
  612. /* Compare, then Present */
  613. _compare(referenceSurface, ALLOWABLE_ERROR_BLENDED );
  614. SDL_RenderPresent(renderer);
  615. SDL_FreeSurface(referenceSurface);
  616. referenceSurface = NULL;
  617. /* Test Mod. */
  618. _testBlitBlendMode( tface, SDL_BLENDMODE_MOD);
  619. referenceSurface = SDLTest_ImageBlitBlendMod();
  620. /* Compare, then Present */
  621. _compare(referenceSurface, ALLOWABLE_ERROR_BLENDED );
  622. SDL_RenderPresent(renderer);
  623. SDL_FreeSurface(referenceSurface);
  624. referenceSurface = NULL;
  625. /* Clear surface. */
  626. _clearScreen();
  627. /* Loop blit. */
  628. checkFailCount1 = 0;
  629. checkFailCount2 = 0;
  630. checkFailCount3 = 0;
  631. checkFailCount4 = 0;
  632. for (j=0; j <= nj; j+=4) {
  633. for (i=0; i <= ni; i+=4) {
  634. /* Set color mod. */
  635. ret = SDL_SetTextureColorMod( tface, (255/nj)*j, (255/ni)*i, (255/nj)*j );
  636. if (ret != 0) {
  637. checkFailCount1++;
  638. }
  639. /* Set alpha mod. */
  640. ret = SDL_SetTextureAlphaMod( tface, (100/ni)*i );
  641. if (ret != 0) {
  642. checkFailCount2++;
  643. }
  644. /* Crazy blending mode magic. */
  645. mode = (i/4*j/4) % 4;
  646. if (mode==0) {
  647. mode = SDL_BLENDMODE_NONE;
  648. } else if (mode==1) {
  649. mode = SDL_BLENDMODE_BLEND;
  650. } else if (mode==2) {
  651. mode = SDL_BLENDMODE_ADD;
  652. } else if (mode == 3) {
  653. mode = SDL_BLENDMODE_MOD;
  654. }
  655. ret = SDL_SetTextureBlendMode( tface, (SDL_BlendMode)mode );
  656. if (ret != 0) {
  657. checkFailCount3++;
  658. }
  659. /* Blitting. */
  660. rect.x = i;
  661. rect.y = j;
  662. ret = SDL_RenderCopy(renderer, tface, NULL, &rect );
  663. if (ret != 0) {
  664. checkFailCount4++;
  665. }
  666. }
  667. }
  668. SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetTextureColorMod, expected: 0, got: %i", checkFailCount1);
  669. SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_SetTextureAlphaMod, expected: 0, got: %i", checkFailCount2);
  670. SDLTest_AssertCheck(checkFailCount3 == 0, "Validate results from calls to SDL_SetTextureBlendMode, expected: 0, got: %i", checkFailCount3);
  671. SDLTest_AssertCheck(checkFailCount4 == 0, "Validate results from calls to SDL_RenderCopy, expected: 0, got: %i", checkFailCount4);
  672. /* Clean up. */
  673. SDL_DestroyTexture( tface );
  674. /* Check to see if final image matches. */
  675. referenceSurface = SDLTest_ImageBlitBlendAll();
  676. _compare(referenceSurface, ALLOWABLE_ERROR_BLENDED);
  677. /* Make current */
  678. SDL_RenderPresent(renderer);
  679. SDL_FreeSurface(referenceSurface);
  680. referenceSurface = NULL;
  681. return TEST_COMPLETED;
  682. }
  683. /**
  684. * @brief Checks to see if functionality is supported. Helper function.
  685. */
  686. static int
  687. _isSupported( int code )
  688. {
  689. return code == 0;
  690. }
  691. /**
  692. * @brief Test to see if we can vary the draw color. Helper function.
  693. *
  694. * \sa
  695. * http://wiki.libsdl.org/SDL_SetRenderDrawColor
  696. * http://wiki.libsdl.org/SDL_GetRenderDrawColor
  697. */
  698. static int
  699. _hasDrawColor (void)
  700. {
  701. int ret, fail;
  702. Uint8 r, g, b, a;
  703. fail = 0;
  704. /* Set color. */
  705. ret = SDL_SetRenderDrawColor(renderer, 100, 100, 100, 100 );
  706. if (!_isSupported(ret)) {
  707. fail = 1;
  708. }
  709. ret = SDL_GetRenderDrawColor(renderer, &r, &g, &b, &a );
  710. if (!_isSupported(ret)) {
  711. fail = 1;
  712. }
  713. /* Restore natural. */
  714. ret = SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE );
  715. if (!_isSupported(ret)) {
  716. fail = 1;
  717. }
  718. /* Something failed, consider not available. */
  719. if (fail) {
  720. return 0;
  721. }
  722. /* Not set properly, consider failed. */
  723. else if ((r != 100) || (g != 100) || (b != 100) || (a != 100)) {
  724. return 0;
  725. }
  726. return 1;
  727. }
  728. /**
  729. * @brief Test to see if we can vary the blend mode. Helper function.
  730. *
  731. * \sa
  732. * http://wiki.libsdl.org/SDL_SetRenderDrawBlendMode
  733. * http://wiki.libsdl.org/SDL_GetRenderDrawBlendMode
  734. */
  735. static int
  736. _hasBlendModes (void)
  737. {
  738. int fail;
  739. int ret;
  740. SDL_BlendMode mode;
  741. fail = 0;
  742. ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND );
  743. if (!_isSupported(ret)) {
  744. fail = 1;
  745. }
  746. ret = SDL_GetRenderDrawBlendMode(renderer, &mode );
  747. if (!_isSupported(ret)) {
  748. fail = 1;
  749. }
  750. ret = (mode != SDL_BLENDMODE_BLEND);
  751. if (!_isSupported(ret)) {
  752. fail = 1;
  753. }
  754. ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_ADD );
  755. if (!_isSupported(ret)) {
  756. fail = 1;
  757. }
  758. ret = SDL_GetRenderDrawBlendMode(renderer, &mode );
  759. if (!_isSupported(ret)) {
  760. fail = 1;
  761. }
  762. ret = (mode != SDL_BLENDMODE_ADD);
  763. if (!_isSupported(ret)) {
  764. fail = 1;
  765. }
  766. ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_MOD );
  767. if (!_isSupported(ret)) {
  768. fail = 1;
  769. }
  770. ret = SDL_GetRenderDrawBlendMode(renderer, &mode );
  771. if (!_isSupported(ret)) {
  772. fail = 1;
  773. }
  774. ret = (mode != SDL_BLENDMODE_MOD);
  775. if (!_isSupported(ret)) {
  776. fail = 1;
  777. }
  778. ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE );
  779. if (!_isSupported(ret)) {
  780. fail = 1;
  781. }
  782. ret = SDL_GetRenderDrawBlendMode(renderer, &mode );
  783. if (!_isSupported(ret)) {
  784. fail = 1;
  785. }
  786. ret = (mode != SDL_BLENDMODE_NONE);
  787. if (!_isSupported(ret)) {
  788. fail = 1;
  789. }
  790. return !fail;
  791. }
  792. /**
  793. * @brief Loads the test image 'Face' as texture. Helper function.
  794. *
  795. * \sa
  796. * http://wiki.libsdl.org/SDL_CreateTextureFromSurface
  797. */
  798. static SDL_Texture *
  799. _loadTestFace(void)
  800. {
  801. SDL_Surface *face;
  802. SDL_Texture *tface;
  803. face = SDLTest_ImageFace();
  804. if (face == NULL) {
  805. return NULL;
  806. }
  807. tface = SDL_CreateTextureFromSurface(renderer, face);
  808. if (tface == NULL) {
  809. SDLTest_LogError("SDL_CreateTextureFromSurface() failed with error: %s", SDL_GetError());
  810. }
  811. SDL_FreeSurface(face);
  812. return tface;
  813. }
  814. /**
  815. * @brief Test to see if can set texture color mode. Helper function.
  816. *
  817. * \sa
  818. * http://wiki.libsdl.org/SDL_SetTextureColorMod
  819. * http://wiki.libsdl.org/SDL_GetTextureColorMod
  820. * http://wiki.libsdl.org/SDL_DestroyTexture
  821. */
  822. static int
  823. _hasTexColor (void)
  824. {
  825. int fail;
  826. int ret;
  827. SDL_Texture *tface;
  828. Uint8 r, g, b;
  829. /* Get test face. */
  830. tface = _loadTestFace();
  831. if (tface == NULL) {
  832. return 0;
  833. }
  834. /* See if supported. */
  835. fail = 0;
  836. ret = SDL_SetTextureColorMod( tface, 100, 100, 100 );
  837. if (!_isSupported(ret)) {
  838. fail = 1;
  839. }
  840. ret = SDL_GetTextureColorMod( tface, &r, &g, &b );
  841. if (!_isSupported(ret)) {
  842. fail = 1;
  843. }
  844. /* Clean up. */
  845. SDL_DestroyTexture( tface );
  846. if (fail) {
  847. return 0;
  848. } else if ((r != 100) || (g != 100) || (b != 100)) {
  849. return 0;
  850. }
  851. return 1;
  852. }
  853. /**
  854. * @brief Test to see if we can vary the alpha of the texture. Helper function.
  855. *
  856. * \sa
  857. * http://wiki.libsdl.org/SDL_SetTextureAlphaMod
  858. * http://wiki.libsdl.org/SDL_GetTextureAlphaMod
  859. * http://wiki.libsdl.org/SDL_DestroyTexture
  860. */
  861. static int
  862. _hasTexAlpha(void)
  863. {
  864. int fail;
  865. int ret;
  866. SDL_Texture *tface;
  867. Uint8 a;
  868. /* Get test face. */
  869. tface = _loadTestFace();
  870. if (tface == NULL) {
  871. return 0;
  872. }
  873. /* See if supported. */
  874. fail = 0;
  875. ret = SDL_SetTextureAlphaMod( tface, 100 );
  876. if (!_isSupported(ret)) {
  877. fail = 1;
  878. }
  879. ret = SDL_GetTextureAlphaMod( tface, &a );
  880. if (!_isSupported(ret)) {
  881. fail = 1;
  882. }
  883. /* Clean up. */
  884. SDL_DestroyTexture( tface );
  885. if (fail) {
  886. return 0;
  887. } else if (a != 100) {
  888. return 0;
  889. }
  890. return 1;
  891. }
  892. /**
  893. * @brief Compares screen pixels with image pixels. Helper function.
  894. *
  895. * @param s Image to compare against.
  896. *
  897. * \sa
  898. * http://wiki.libsdl.org/SDL_RenderReadPixels
  899. * http://wiki.libsdl.org/SDL_CreateRGBSurfaceFrom
  900. * http://wiki.libsdl.org/SDL_FreeSurface
  901. */
  902. static void
  903. _compare(SDL_Surface *referenceSurface, int allowable_error)
  904. {
  905. int result;
  906. SDL_Rect rect;
  907. Uint8 *pixels;
  908. SDL_Surface *testSurface;
  909. /* Read pixels. */
  910. pixels = (Uint8 *)SDL_malloc(4*TESTRENDER_SCREEN_W*TESTRENDER_SCREEN_H);
  911. SDLTest_AssertCheck(pixels != NULL, "Validate allocated temp pixel buffer");
  912. if (pixels == NULL) {
  913. return;
  914. }
  915. /* Explicitly specify the rect in case the window isn't the expected size... */
  916. rect.x = 0;
  917. rect.y = 0;
  918. rect.w = TESTRENDER_SCREEN_W;
  919. rect.h = TESTRENDER_SCREEN_H;
  920. result = SDL_RenderReadPixels(renderer, &rect, RENDER_COMPARE_FORMAT, pixels, 80*4 );
  921. SDLTest_AssertCheck(result == 0, "Validate result from SDL_RenderReadPixels, expected: 0, got: %i", result);
  922. /* Create surface. */
  923. testSurface = SDL_CreateRGBSurfaceFrom(pixels, TESTRENDER_SCREEN_W, TESTRENDER_SCREEN_H, 32, TESTRENDER_SCREEN_W*4,
  924. RENDER_COMPARE_RMASK, RENDER_COMPARE_GMASK, RENDER_COMPARE_BMASK, RENDER_COMPARE_AMASK);
  925. SDLTest_AssertCheck(testSurface != NULL, "Verify result from SDL_CreateRGBSurfaceFrom is not NULL");
  926. /* Compare surface. */
  927. result = SDLTest_CompareSurfaces( testSurface, referenceSurface, allowable_error );
  928. SDLTest_AssertCheck(result == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", result);
  929. /* Clean up. */
  930. SDL_free(pixels);
  931. SDL_FreeSurface(testSurface);
  932. }
  933. /**
  934. * @brief Clears the screen. Helper function.
  935. *
  936. * \sa
  937. * http://wiki.libsdl.org/SDL_SetRenderDrawColor
  938. * http://wiki.libsdl.org/SDL_RenderClear
  939. * http://wiki.libsdl.org/SDL_RenderPresent
  940. * http://wiki.libsdl.org/SDL_SetRenderDrawBlendMode
  941. */
  942. static int
  943. _clearScreen(void)
  944. {
  945. int ret;
  946. /* Set color. */
  947. ret = SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE );
  948. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret);
  949. /* Clear screen. */
  950. ret = SDL_RenderClear(renderer);
  951. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderClear, expected: 0, got: %i", ret);
  952. /* Make current */
  953. SDL_RenderPresent(renderer);
  954. /* Set defaults. */
  955. ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE );
  956. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawBlendMode, expected: 0, got: %i", ret);
  957. ret = SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE );
  958. SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret);
  959. return 0;
  960. }
  961. /* ================= Test References ================== */
  962. /* Render test cases */
  963. static const SDLTest_TestCaseReference renderTest1 =
  964. { (SDLTest_TestCaseFp)render_testGetNumRenderDrivers, "render_testGetNumRenderDrivers", "Tests call to SDL_GetNumRenderDrivers", TEST_ENABLED };
  965. static const SDLTest_TestCaseReference renderTest2 =
  966. { (SDLTest_TestCaseFp)render_testPrimitives, "render_testPrimitives", "Tests rendering primitives", TEST_ENABLED };
  967. /* TODO: rewrite test case, define new test data and re-enable; current implementation fails */
  968. static const SDLTest_TestCaseReference renderTest3 =
  969. { (SDLTest_TestCaseFp)render_testPrimitivesBlend, "render_testPrimitivesBlend", "Tests rendering primitives with blending", TEST_DISABLED };
  970. static const SDLTest_TestCaseReference renderTest4 =
  971. { (SDLTest_TestCaseFp)render_testBlit, "render_testBlit", "Tests blitting", TEST_ENABLED };
  972. static const SDLTest_TestCaseReference renderTest5 =
  973. { (SDLTest_TestCaseFp)render_testBlitColor, "render_testBlitColor", "Tests blitting with color", TEST_ENABLED };
  974. /* TODO: rewrite test case, define new test data and re-enable; current implementation fails */
  975. static const SDLTest_TestCaseReference renderTest6 =
  976. { (SDLTest_TestCaseFp)render_testBlitAlpha, "render_testBlitAlpha", "Tests blitting with alpha", TEST_DISABLED };
  977. /* TODO: rewrite test case, define new test data and re-enable; current implementation fails */
  978. static const SDLTest_TestCaseReference renderTest7 =
  979. { (SDLTest_TestCaseFp)render_testBlitBlend, "render_testBlitBlend", "Tests blitting with blending", TEST_DISABLED };
  980. /* Sequence of Render test cases */
  981. static const SDLTest_TestCaseReference *renderTests[] = {
  982. &renderTest1, &renderTest2, &renderTest3, &renderTest4, &renderTest5, &renderTest6, &renderTest7, NULL
  983. };
  984. /* Render test suite (global) */
  985. SDLTest_TestSuiteReference renderTestSuite = {
  986. "Render",
  987. InitCreateRenderer,
  988. renderTests,
  989. CleanupDestroyRenderer
  990. };