diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-03-12 23:53:39 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-03-12 23:53:39 +0000 |
| commit | 24969cd0efa675d399b4a5b97077b7c8d06b5fec (patch) | |
| tree | 9ab9f3b69646fbb11a852710fcae7a57b2e45dda | |
| parent | 0883fc3dfd51d8dda9a9dc055400871057cfe3a2 (diff) | |
| download | zcatch-24969cd0efa675d399b4a5b97077b7c8d06b5fec.tar.gz zcatch-24969cd0efa675d399b4a5b97077b7c8d06b5fec.zip | |
tilemap skip optimizating
| -rw-r--r-- | src/game/client/gc_hooks.cpp | 2 | ||||
| -rw-r--r-- | src/game/client/gc_render.cpp | 33 | ||||
| -rw-r--r-- | src/game/client/gc_render.h | 2 | ||||
| -rw-r--r-- | src/game/client/gc_render_map.cpp | 2 | ||||
| -rw-r--r-- | src/game/g_mapitems.h | 2 |
5 files changed, 40 insertions, 1 deletions
diff --git a/src/game/client/gc_hooks.cpp b/src/game/client/gc_hooks.cpp index 73dde8f2..95c16e2c 100644 --- a/src/game/client/gc_hooks.cpp +++ b/src/game/client/gc_hooks.cpp @@ -636,6 +636,8 @@ extern "C" void modc_connected() img_init(); flow_init(); + render_tilemap_generate_skip(); + //tilemap_init(); chat_reset(); particle_reset(); diff --git a/src/game/client/gc_render.cpp b/src/game/client/gc_render.cpp index 45503c8c..93aa483d 100644 --- a/src/game/client/gc_render.cpp +++ b/src/game/client/gc_render.cpp @@ -343,6 +343,39 @@ void render_layers(float center_x, float center_y, int pass) } } +void render_tilemap_generate_skip() +{ + for(int g = 0; g < layers_num_groups(); g++) + { + MAPITEM_GROUP *group = layers_get_group(g); + + for(int l = 0; l < group->num_layers; l++) + { + MAPITEM_LAYER *layer = layers_get_layer(group->start_layer+l); + + if(layer->type == LAYERTYPE_TILES) + { + MAPITEM_LAYER_TILEMAP *tmap = (MAPITEM_LAYER_TILEMAP *)layer; + TILE *tiles = (TILE *)map_get_data(tmap->data); + for(int y = 0; y < tmap->height; y++) + { + for(int x = 0; x < tmap->width; x++) + { + int sx; + for(sx = 1; x+sx < tmap->width && sx < 255; sx++) + { + if(tiles[y*tmap->width+x+sx].index) + break; + } + + tiles[y*tmap->width+x].skip = sx-1; + } + } + } + } + } +} + static void render_items() { int num = snap_num_items(SNAP_CURRENT); diff --git a/src/game/client/gc_render.h b/src/game/client/gc_render.h index a6f57b7b..53b6510a 100644 --- a/src/game/client/gc_render.h +++ b/src/game/client/gc_render.h @@ -52,6 +52,8 @@ void render_loading(float percent); void render_damage_indicators(); void render_particles(); +void render_tilemap_generate_skip(); + // object render methods (gc_render_obj.cpp) void render_tee(class animstate *anim, tee_render_info *info, int emote, vec2 dir, vec2 pos); void render_flag(const struct NETOBJ_FLAG *prev, const struct NETOBJ_FLAG *current); diff --git a/src/game/client/gc_render_map.cpp b/src/game/client/gc_render_map.cpp index d5e7f1a0..8693ed18 100644 --- a/src/game/client/gc_render_map.cpp +++ b/src/game/client/gc_render_map.cpp @@ -237,6 +237,8 @@ void render_tilemap(TILE *tiles, int w, int h, float scale, vec4 color, int flag gfx_quads_drawTL(x*scale, y*scale, scale, scale); } + + x += tiles[c].skip; } gfx_quads_end(); diff --git a/src/game/g_mapitems.h b/src/game/g_mapitems.h index a8278a44..d78cf66d 100644 --- a/src/game/g_mapitems.h +++ b/src/game/g_mapitems.h @@ -77,7 +77,7 @@ typedef struct { unsigned char index; unsigned char flags; - unsigned char reserved1; + unsigned char skip; unsigned char reserved2; } TILE; |