summaryrefslogtreecommitdiff
path: root/src/test/testrender.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/testrender.c')
-rw-r--r--src/test/testrender.c106
1 files changed, 92 insertions, 14 deletions
diff --git a/src/test/testrender.c b/src/test/testrender.c
index 93fa217..f4c5173 100644
--- a/src/test/testrender.c
+++ b/src/test/testrender.c
@@ -4,12 +4,16 @@
#include "utils.h"
#define DATA_BASEPATH "./data"
+#define MAX_RENDERLIST_LEN 256
+
+int buildTestRL(gameRess_t *gRess, int rlMaxLen, render_item_t render_list[]);
int main(int argc, char **argv) {
int res;
char filepath[MAX_PATH_LEN];
gameIni_t gIni;
gameRess_t gRess;
+ render_item_t render_list[MAX_RENDERLIST_LEN];
if (argc != 3) {
fprintf(stderr, "Usage %s <levelpack_name> <level_ini_name>\n", argv[0]);
@@ -54,12 +58,12 @@ int main(int argc, char **argv) {
SDL_Rect sdl_viewport;
SDL_Event sdl_ev;
- int mainloop_end=0;
+ int rlLen, mainloop_end=0;
- SDL_Rect win_pos = { .x=SDL_WINDOWPOS_UNDEFINED, .y=SDL_WINDOWPOS_UNDEFINED, .w=640, .h=480 };
- Uint32 init_flags = SDL_INIT_TIMER|SDL_INIT_VIDEO;//|SDL_INIT_EVENTS;
+ SDL_Rect win_pos = { .x=SDL_WINDOWPOS_UNDEFINED, .y=SDL_WINDOWPOS_UNDEFINED, .w=1920, .h=1200 };
+ Uint32 init_flags = SDL_INIT_TIMER|SDL_INIT_VIDEO;
Uint32 win_flags = SDL_WINDOW_SHOWN;
- Uint32 rend_flags = SDL_RENDERER_ACCELERATED;
+ Uint32 rend_flags = SDL_RENDERER_ACCELERATED; // | SDL_RENDERER_PRESENTVSYNC;
my_SDL_init_or_die(__FILE__, win_pos, init_flags, win_flags, rend_flags, &sdl_win, &sdl_rend, &sdl_rend_info, &sdl_viewport);
@@ -71,26 +75,28 @@ int main(int argc, char **argv) {
res=loadStyleRes(sdl_rend, &gIni, DATA_BASEPATH, &gRess);
if (res!=0) exit(res);
+ rlLen=buildTestRL(&gRess, MAX_RENDERLIST_LEN, render_list);
/* Main render loop */
while (!mainloop_end) {
+ int i;
+
/* Check for events */
while (SDL_PollEvent(&sdl_ev)) {
- if (sdl_ev.type == SDL_QUIT || sdl_ev.type == SDL_KEYDOWN) {
+ if (sdl_ev.type == SDL_QUIT) {
mainloop_end = 1;
}
}
- /* Draw a gray background */
- SDL_SetRenderDrawColor(sdl_rend, 0xA0, 0xA0, 0xA0, 0xFF);
SDL_RenderClear(sdl_rend);
-
- /* Blit the sprite onto the screen */
- SDL_RenderCopy(sdl_rend, gRess.objects[0].t, NULL, NULL);
- //SDL_RenderCopy(sdl_rend, t1, &t1_src, &t1_dst);
-
- /* Update the screen */
+ render_all(sdl_rend, render_list, rlLen);
SDL_RenderPresent(sdl_rend);
- SDL_Delay(50);
+ for (i=0;i<rlLen;i++) {
+ render_item_t *it = &render_list[i];
+ if (it->animate==1) {
+ it->currframe = (it->currframe + 1) % it->sprite->frames;
+ }
+ }
+ SDL_Delay(100);
}
unloadStyleRes(&gRess);
unloadMiscRes(&gRess);
@@ -101,3 +107,75 @@ int main(int argc, char **argv) {
return 0;
}
+
+int addRLitem(render_item_t list[], sprite_t *it, int rlMaxLen) {
+ static int cur=0, curr_x=0, curr_y=0, tmp_h=0;
+
+ if (it == NULL) {
+ curr_y += tmp_h;
+ curr_x = tmp_h = 0;
+ return cur;
+ }
+ if (cur > rlMaxLen || it->t == NULL) return cur;
+
+ list[cur].sprite = it;
+ list[cur].x = curr_x;
+ list[cur].y = curr_y;
+ list[cur].currframe = 0;
+
+ if (it->frames > 1) {
+ list[cur].animate = 1; /* By defaut, animate */
+ }
+ curr_x += it->size.w + 1;
+ if (tmp_h < it->size.h) tmp_h = it->size.h;
+
+ cur++;
+ if (curr_x >= 1920) {
+ curr_x=0;
+ curr_y += tmp_h;
+ tmp_h=0;
+ }
+
+ return cur;
+}
+
+int buildTestRL(gameRess_t *gRess, int rlMaxLen, render_item_t render_list[]) {
+ int i, rlLen;
+
+ for (i=0; i<MAX_LEMMANIM_COUNT; i++) {
+ rlLen=addRLitem(render_list, &gRess->lemmingAnims[i], rlMaxLen);
+ }
+ rlLen=addRLitem(render_list, NULL, rlMaxLen);
+
+ for (i=0; i<MAX_LEMMANIM_COUNT; i++) {
+ rlLen=addRLitem(render_list, &gRess->lemmingMasks[i], rlMaxLen);
+ }
+ rlLen=addRLitem(render_list, NULL, rlMaxLen);
+
+ for (i=0; i<MAX_LEMMANIM_COUNT; i++) {
+ rlLen=addRLitem(render_list, &gRess->lemmingIMasks[i], rlMaxLen);
+ }
+ rlLen=addRLitem(render_list, NULL, rlMaxLen);
+
+ for (i=0; i<MAX_OBJECTS_COUNT; i++) {
+ rlLen=addRLitem(render_list, &gRess->objects[i], rlMaxLen);
+ }
+ rlLen=addRLitem(render_list, NULL, rlMaxLen);
+
+ for (i=0; i<MAX_OBJECTS_COUNT; i++) {
+ rlLen=addRLitem(render_list, &gRess->objectMasks[i], rlMaxLen);
+ }
+ rlLen=addRLitem(render_list, NULL, rlMaxLen);
+
+ rlLen=addRLitem(render_list, &gRess->font1, rlMaxLen);
+ rlLen=addRLitem(render_list, &gRess->font2, rlMaxLen);
+ rlLen=addRLitem(render_list, &gRess->countdown, rlMaxLen);
+ rlLen=addRLitem(render_list, &gRess->cursor, rlMaxLen);
+
+ for (i=0; i<MAX_TILES_COUNT; i++) {
+ rlLen=addRLitem(render_list, &gRess->tiles[i], rlMaxLen);
+ }
+ rlLen=addRLitem(render_list, NULL, rlMaxLen);
+ return rlLen;
+}
+