static Status load_sys_cursor(const PIVFS& vfs, const VfsPath& pathname, int hx, int hy, sys_cursor* cursor) { #if !ALLOW_SYS_CURSOR UNUSED2(vfs); UNUSED2(pathname); UNUSED2(hx); UNUSED2(hy); UNUSED2(cursor); return ERR::FAIL; #else shared_ptr<u8> file; size_t fileSize; RETURN_STATUS_IF_ERR(vfs->LoadFile(pathname, file, fileSize)); Tex t; RETURN_STATUS_IF_ERR(t.decode(file, fileSize)); // convert to required BGRA format. const size_t flags = (t.m_Flags | TEX_BGR) & ~TEX_DXT; RETURN_STATUS_IF_ERR(t.transform_to(flags)); void* bgra_img = t.get_data(); if(!bgra_img) WARN_RETURN(ERR::FAIL); RETURN_STATUS_IF_ERR(sys_cursor_create((int)t.m_Width, (int)t.m_Height, bgra_img, hx, hy, cursor)); return INFO::OK; #endif }
Status OpenOggNonstream(const PIVFS& vfs, const VfsPath& pathname, OggStreamPtr& stream) { shared_ptr<u8> contents; size_t size; RETURN_STATUS_IF_ERR(vfs->LoadFile(pathname, contents, size)); shared_ptr<OggStreamImpl<VorbisBufferAdapter> > tmp(new OggStreamImpl<VorbisBufferAdapter>(VorbisBufferAdapter(contents, size))); RETURN_STATUS_IF_ERR(tmp->Open()); stream = tmp; return INFO::OK; }
PSRETURN CVFSFile::Load(const PIVFS& vfs, const VfsPath& filename) { // Load should never be called more than once, so complain if (m_Buffer) { DEBUG_WARN_ERR(ERR::LOGIC); return PSRETURN_CVFSFile_AlreadyLoaded; } Status ret = vfs->LoadFile(filename, m_Buffer, m_BufferSize); if (ret != INFO::OK) { LOGERROR(L"CVFSFile: file %ls couldn't be opened (vfs_load: %lld)", filename.string().c_str(), ret); return PSRETURN_CVFSFile_LoadFailed; } return PSRETURN_OK; }
// basename is e.g. "console"; the files are "fonts/console.fnt" and "fonts/console.png" // [10..70ms] static Status UniFont_reload(UniFont* f, const PIVFS& vfs, const VfsPath& basename, Handle UNUSED(h)) { // already loaded if(f->ht > 0) return INFO::OK; f->glyphs = new glyphmap(); const VfsPath path(L"fonts/"); // Read font definition file into a stringstream shared_ptr<u8> buf; size_t size; const VfsPath fntName(basename.ChangeExtension(L".fnt")); RETURN_STATUS_IF_ERR(vfs->LoadFile(path / fntName, buf, size)); // [cumulative for 12: 36ms] std::istringstream FNTStream(std::string((const char*)buf.get(), size)); int Version; FNTStream >> Version; if (Version < 100 || Version > 101) // Make sure this is from a recent version of the font builder WARN_RETURN(ERR::FAIL); int TextureWidth, TextureHeight; FNTStream >> TextureWidth >> TextureHeight; GLenum fmt_ovr = GL_ALPHA; if (Version >= 101) { std::string Format; FNTStream >> Format; if (Format == "rgba") fmt_ovr = GL_RGBA; else if (Format == "a") fmt_ovr = GL_ALPHA; else debug_warn(L"Invalid .fnt format string"); }