bool ESceneLightTools::Load(IReader& F) { u16 version = 0; if(F.r_chunk(CHUNK_VERSION,&version)) if( version!=LIGHT_TOOLS_VERSION ){ ELog.DlgMsg( mtError, "%s tools: Unsupported version.",ClassDesc()); return false; } if (!inherited::Load(F)) return false; if (F.find_chunk(CHUNK_FLAGS)) m_Flags.assign (F.r_u32()); if (F.find_chunk(CHUNK_SUN_SHADOW)){ F.r_u8 (); F.r_fvector2 (m_SunShadowDir); } if (F.find_chunk(CHUNK_LCONTROLS_LAST)) lcontrol_last_idx = F.r_u32(); IReader* R = F.open_chunk(CHUNK_LCONTROLS); if (R){ while (!R->eof()){ shared_str l_name; R->r_stringZ(l_name); u32 l_idx = R->r_u32(); AppendLightControl(l_name.c_str(),&l_idx); } R->close (); } return true; }
int ETextureThumbnail::MemoryUsage() { int mem_usage = _Width()*_Height()*4; switch (m_TexParams.fmt){ case STextureParams::tfDXT1: case STextureParams::tfADXT1: mem_usage/=6; break; case STextureParams::tfDXT3: case STextureParams::tfDXT5: mem_usage/=4; break; case STextureParams::tf4444: case STextureParams::tf1555: case STextureParams::tf565: mem_usage/=2; break; case STextureParams::tfRGBA: break; } string_path fn; FS.update_path (fn,_game_textures_,EFS.ChangeFileExt(m_Name.c_str(),".seq").c_str()); if (FS.exist(fn)) { string128 buffer; IReader* F = FS.r_open(0,fn); F->r_string (buffer,sizeof(buffer)); int cnt = 0; while (!F->eof()){ F->r_string(buffer,sizeof(buffer)); cnt++; } FS.r_close (F); mem_usage *= cnt?cnt:1; } return mem_usage; }
u32 STextureParams::MemoryUsage(LPCSTR base_name) { u32 mem_usage = width*height*4; if (flags.test(flGenerateMipMaps)) { mem_usage*=3ul; mem_usage/=2ul; } switch (fmt){ case STextureParams::tfDXT1: case STextureParams::tfADXT1: mem_usage/=6; break; case STextureParams::tfDXT3: case STextureParams::tfDXT5: mem_usage/=4; break; case STextureParams::tf4444: case STextureParams::tf1555: case STextureParams::tf565: mem_usage/=2; break; case STextureParams::tfRGBA: break; } xr_string fn; FS.update_path (fn,_game_textures_,EFS.ChangeFileExt(base_name,".seq").c_str()); if (FS.exist(fn.c_str())){ string128 buffer; IReader* F = FS.r_open(0,fn.c_str()); F->r_string (buffer,sizeof(buffer)); int cnt = 0; while (!F->eof()){ F->r_string(buffer,sizeof(buffer)); cnt++; } FS.r_close (F); mem_usage *= cnt?cnt:1; } return mem_usage; }
void CHOM::Load () { // Find and open file string_path fName; FS.update_path (fName,"$level$","level.hom"); if (!FS.exist(fName)) { Msg (" WARNING: Occlusion map '%s' not found.",fName); return; } Msg ("* Loading HOM: %s",fName); IReader* fs = FS.r_open(fName); IReader* S = fs->open_chunk(1); // Load tris and merge them CDB::Collector CL; while (!S->eof()) { HOM_poly P; S->r (&P,sizeof(P)); CL.add_face_packed_D (P.v1,P.v2,P.v3,P.flags,0.01f); } // Determine adjacency xr_vector<u32> adjacency; CL.calc_adjacency (adjacency); // Create RASTER-triangles m_pTris = xr_alloc<occTri> (u32(CL.getTS())); for (u32 it=0; it<CL.getTS(); it++) { CDB::TRI& clT = CL.getT()[it]; occTri& rT = m_pTris[it]; Fvector& v0 = CL.getV()[clT.verts[0]]; Fvector& v1 = CL.getV()[clT.verts[1]]; Fvector& v2 = CL.getV()[clT.verts[2]]; rT.adjacent[0] = (0xffffffff==adjacency[3*it+0])?((occTri*) (-1)):(m_pTris+adjacency[3*it+0]); rT.adjacent[1] = (0xffffffff==adjacency[3*it+1])?((occTri*) (-1)):(m_pTris+adjacency[3*it+1]); rT.adjacent[2] = (0xffffffff==adjacency[3*it+2])?((occTri*) (-1)):(m_pTris+adjacency[3*it+2]); rT.flags = clT.dummy; rT.area = Area (v0,v1,v2); if (rT.area<EPS_L) { Msg ("! Invalid HOM triangle (%f,%f,%f)-(%f,%f,%f)-(%f,%f,%f)",VPUSH(v0),VPUSH(v1),VPUSH(v2)); } rT.plane.build (v0,v1,v2); rT.skip = 0; rT.center.add(v0,v1).add(v2).div(3.f); } // Create AABB-tree m_pModel = xr_new<CDB::MODEL> (); m_pModel->build (CL.getV(),int(CL.getVS()),CL.getT(),int(CL.getTS())); bEnabled = TRUE; S->close (); FS.r_close (fs); }
void CCC_LoadCFG::Execute(LPCSTR args) { Msg("Executing config-script \"%s\"...", args); string_path cfg_name; xr_strcpy(cfg_name, args); if (strext(cfg_name)) *strext(cfg_name) = 0; xr_strcat(cfg_name, ".ltx"); string_path cfg_full_name; FS.update_path(cfg_full_name, "$app_data_root$", cfg_name); if (NULL == FS.exist(cfg_full_name)) FS.update_path(cfg_full_name, "$fs_root$", cfg_name); if (NULL == FS.exist(cfg_full_name)) xr_strcpy(cfg_full_name, cfg_name); IReader* F = FS.r_open(cfg_full_name); string1024 str; if (F != NULL) { while (!F->eof()) { F->r_string(str, sizeof(str)); if (allow(str)) Console->Execute(str); } FS.r_close(F); Msg("[%s] successfully loaded.", cfg_full_name); } else { Msg("! Cannot open script file [%s]", cfg_full_name); } }
void CResourceManager::OnDeviceCreate (IReader* F) { if (!RDEVICE.b_is_Ready) return; string256 name; #ifndef _EDITOR // scripting LS_Load (); #endif IReader* fs = 0; // Load constants fs = F->open_chunk (0); if (fs){ while (!fs->eof()) { fs->r_stringZ (name,sizeof(name)); CConstant* C = _CreateConstant (name); C->Load (fs); } fs->close (); } // Load matrices fs = F->open_chunk(1); if (fs){ while (!fs->eof()) { fs->r_stringZ (name,sizeof(name)); CMatrix* M = _CreateMatrix (name); M->Load (fs); } fs->close (); } // Load blenders fs = F->open_chunk (2); if (fs){ IReader* chunk = NULL; int chunk_id= 0; while ((chunk=fs->open_chunk(chunk_id))!=NULL){ CBlender_DESC desc; chunk->r (&desc,sizeof(desc)); IBlender* B = IBlender::Create(desc.CLS); if (0==B) { Msg ("! Renderer doesn't support blender '%s'",desc.cName); } else { if (B->getDescription().version != desc.version) { Msg ("! Version conflict in shader '%s'",desc.cName); } chunk->seek (0); B->Load (*chunk,desc.version); std::pair<map_BlenderIt, bool> I = m_blenders.insert (mk_pair(xr_strdup(desc.cName),B)); R_ASSERT2 (I.second,"shader.xr - found duplicate name!!!"); } chunk->close (); chunk_id += 1; } fs->close(); } m_textures_description.Load (); }