| version 1.3 | | version 1.4 |
|---|
| | |
| #include "textures.h" | | #include "textures.h" |
| #include "texmerge.h" | | #include "texmerge.h" |
| #include "effects.h" | | #include "effects.h" |
| | | #include "weapon.h" |
| | | #include "powerup.h" |
| | | #include "polyobj.h" |
| | | |
| //crude texture precaching | | //crude texture precaching |
| //handles: powerups, walls, etc. | | //handles: powerups, walls, weapons, polymodels, etc. |
| //it is done with the horrid do_special_effects kludge so that sides that have to be texmerged and have animated textures will be correctly cached. | | //it is done with the horrid do_special_effects kludge so that sides that have to be texmerged and have animated textures will be correctly cached. |
| //should add : weapons/doors/polymodel-textures | | //similarly, with the objects(esp weapons), we could just go through and cache em all instead, but that would get ones that might not even be on the level |
| | | //TODO: doors |
| | | |
| | | void ogl_cache_polymodel_textures(int model_num){ |
| | | polymodel *po=&Polygon_models[model_num]; |
| | | int i; |
| | | for (i=0;i<po->n_textures;i++) { |
| | | // texture_list_index[i] = ObjBitmaps[ObjBitmapPtrs[po->first_texture+i]]; |
| | | ogl_loadbmtexture(&GameBitmaps[ObjBitmaps[ObjBitmapPtrs[po->first_texture+i]].index]); |
| | | } |
| | | } |
| | | void ogl_cache_vclip_textures(vclip *vc){ |
| | | int i; |
| | | for (i=0;i<vc->num_frames;i++){ |
| | | PIGGY_PAGE_IN(vc->frames[i]); |
| | | ogl_loadbmtexture(&GameBitmaps[vc->frames[i].index]); |
| | | } |
| | | } |
| | | #define ogl_cache_vclipn_textures(i) ogl_cache_vclip_textures(&Vclip[i]) |
| | | void ogl_cache_weapon_textures(weapon_info *w){ |
| | | ogl_cache_vclipn_textures(w->flash_vclip); |
| | | ogl_cache_vclipn_textures(w->robot_hit_vclip); |
| | | ogl_cache_vclipn_textures(w->wall_hit_vclip); |
| | | if (w->render_type==WEAPON_RENDER_VCLIP) |
| | | ogl_cache_vclipn_textures(w->weapon_vclip); |
| | | else if (w->render_type==WEAPON_RENDER_POLYMODEL) |
| | | ogl_cache_polymodel_textures(w->model_num); |
| | | } |
| void ogl_cache_level_textures(void){ | | void ogl_cache_level_textures(void){ |
| int seg,side,i; | | int seg,side,i; |
| eclip *ec; | | eclip *ec; |
| vclip *vc; | | |
| short tmap1,tmap2; | | short tmap1,tmap2; |
| grs_bitmap *bm; | | grs_bitmap *bm; |
| struct side *sidep; | | struct side *sidep; |
| | |
| } | | } |
| reset_special_effects(); | | reset_special_effects(); |
| init_special_effects(); | | init_special_effects(); |
| | | { |
| | | // int laserlev=1; |
| | | //always have lasers and concs |
| | | ogl_cache_weapon_textures(&Weapon_info[Primary_weapon_to_weapon_info[LASER_INDEX]]); |
| | | ogl_cache_weapon_textures(&Weapon_info[Secondary_weapon_to_weapon_info[CONCUSSION_INDEX]]); |
| for (i=0;i<Highest_object_index;i++){ | | for (i=0;i<Highest_object_index;i++){ |
| if(Objects[i].render_type==RT_POWERUP){ | | if(Objects[i].render_type==RT_POWERUP){ |
| vc=&Vclip[Objects[i].rtype.vclip_info.vclip_num]; | | ogl_cache_vclipn_textures(Objects[i].rtype.vclip_info.vclip_num); |
| for (seg=0;seg<vc->num_frames;seg++){ | | switch (Objects[i].id){ |
| PIGGY_PAGE_IN(vc->frames[seg]); | | /* case POW_LASER: |
| bm=&GameBitmaps[vc->frames[seg].index]; | | ogl_cache_weapon_textures(&Weapon_info[Primary_weapon_to_weapon_info[LASER_INDEX]]); |
| ogl_loadbmtexture(bm); | | // if (laserlev<4) |
| | | // laserlev++; |
| | | break;*/ |
| | | case POW_VULCAN_WEAPON: |
| | | ogl_cache_weapon_textures(&Weapon_info[Primary_weapon_to_weapon_info[VULCAN_INDEX]]); |
| | | break; |
| | | case POW_SPREADFIRE_WEAPON: |
| | | ogl_cache_weapon_textures(&Weapon_info[Primary_weapon_to_weapon_info[SPREADFIRE_INDEX]]); |
| | | break; |
| | | case POW_PLASMA_WEAPON: |
| | | ogl_cache_weapon_textures(&Weapon_info[Primary_weapon_to_weapon_info[PLASMA_INDEX]]); |
| | | break; |
| | | case POW_FUSION_WEAPON: |
| | | ogl_cache_weapon_textures(&Weapon_info[Primary_weapon_to_weapon_info[FUSION_INDEX]]); |
| | | break; |
| | | /* case POW_MISSILE_1: |
| | | case POW_MISSILE_4: |
| | | ogl_cache_weapon_textures(&Weapon_info[Secondary_weapon_to_weapon_info[CONCUSSION_INDEX]]); |
| | | break;*/ |
| | | case POW_PROXIMITY_WEAPON: |
| | | ogl_cache_weapon_textures(&Weapon_info[Secondary_weapon_to_weapon_info[PROXIMITY_INDEX]]); |
| | | break; |
| | | case POW_HOMING_AMMO_1: |
| | | case POW_HOMING_AMMO_4: |
| | | ogl_cache_weapon_textures(&Weapon_info[Primary_weapon_to_weapon_info[HOMING_INDEX]]); |
| | | break; |
| | | case POW_SMARTBOMB_WEAPON: |
| | | ogl_cache_weapon_textures(&Weapon_info[Secondary_weapon_to_weapon_info[SMART_INDEX]]); |
| | | break; |
| | | case POW_MEGA_WEAPON: |
| | | ogl_cache_weapon_textures(&Weapon_info[Secondary_weapon_to_weapon_info[MEGA_INDEX]]); |
| | | break; |
| } | | } |
| //possibly add in caching of the weapon firing bitmaps for all weapons in levels? | | |
| } | | } |
| else if(Objects[i].render_type==RT_POLYOBJ){ | | else if(Objects[i].render_type==RT_POLYOBJ){ |
| | | ogl_cache_polymodel_textures(Objects[i].rtype.pobj_info.model_num); |
| //cache its textures... | | //cache its textures... |
| } | | } |
| } | | } |
| | | } |
| mprintf((0,"finished caching\n")); | | mprintf((0,"finished caching\n")); |
| } | | } |
| | | |
| GLfloat tempmatrix[16]; | | |
| int r_polyc,r_tpolyc,r_bitmapc,r_ubitmapc; | | int r_polyc,r_tpolyc,r_bitmapc,r_ubitmapc; |
| int r_texcount=0; | | int r_texcount=0; |
| #define f2glf(x) (f2fl(x)) | | #define f2glf(x) (f2fl(x)) |
| | |
| | | |
| vms_vector aoeupos={0,0,-1000*f1_0}; | | vms_vector aoeupos={0,0,-1000*f1_0}; |
| vms_matrix aoeuorient=IDENTITY_MATRIX; | | vms_matrix aoeuorient=IDENTITY_MATRIX; |
| //int blag=0; | | |
| void ogl_start_frame(void){ | | void ogl_start_frame(void){ |
| /* if (blag==0){ | | |
| ogl_cache_level_textures(); | | |
| blag=1; | | |
| }*/ | | |
| r_polyc=0;r_tpolyc=0;r_bitmapc=0;r_ubitmapc=0; | | r_polyc=0;r_tpolyc=0;r_bitmapc=0;r_ubitmapc=0; |
| glClearColor(0.0, 0.0, 0.0, 0.0); | | glClearColor(0.0, 0.0, 0.0, 0.0); |
| // glEnable(GL_ALPHA_TEST); | | // glEnable(GL_ALPHA_TEST); |