testautomation_render.c 36 KB

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