int CBitmap::SaveS3TC (const char *pszFolder, const char *pszFile) { CFile cf; char szFilename [FILENAME_LEN], szFolder [FILENAME_LEN]; if (!m_info.compressed.bCompressed) return 0; if (!pszFolder) pszFolder = gameFolders.szDataDir; CFile::SplitPath (pszFile, NULL, szFilename, NULL); sprintf (szFolder, "%s/dxt/", pszFolder); strcat (szFilename, ".dxt"); if (cf.Exist (szFilename, pszFolder, 0)) return 1; if (!cf.Open (szFilename, szFolder, "wb", 0)) return 0; m_info.compressed.nBufSize = m_info.compressed.buffer.Size (); if ((cf.Write (&m_info.props.w, sizeof (m_info.props.w), 1) != 1) || (cf.Write (&m_info.props.h, sizeof (m_info.props.h), 1) != 1) || (cf.Write (&m_info.compressed.nFormat, sizeof (m_info.compressed.nFormat), 1) != 1) || (cf.Write (&m_info.compressed.nBufSize, sizeof (m_info.compressed.nBufSize), 1) != 1) || (m_info.compressed.buffer.Write (cf, m_info.compressed.nBufSize) != m_info.compressed.nBufSize)) { cf.Close (); return 0; } return !cf.Close (); }
int LoadAddonBitmap (CBitmap **bmPP, const char *pszName, int *bHaveP) { if (!*bHaveP) { char szFilename [FILENAME_LEN]; CFile cf; sprintf (szFilename, "%s/d2x-xl/%s", gameFolders.szTextureDir [2], pszName); if (!cf.Exist (szFilename, "", 0)) sprintf (szFilename, "%s/d2x-xl/%s", gameFolders.szTextureDir [0], pszName); CBitmap *bmP = CreateAndReadTGA (szFilename); if (!bmP) *bHaveP = -1; else { *bHaveP = 1; bmP->SetFrameCount (); bmP->SetTranspType (-1); bmP->Bind (1); } *bmPP = bmP; } return *bHaveP > 0; }
int CBitmap::ReadS3TC (const char *pszFolder, const char *pszFile) { CFile cf; char szFilename [FILENAME_LEN], szFolder [FILENAME_LEN]; if (!ogl.m_states.bHaveTexCompression) return 0; if (!m_info.compressed.bCompressed) return 0; if (!pszFolder) pszFolder = gameFolders.szDataDir; CFile::SplitPath (pszFile, NULL, szFilename, NULL); sprintf (szFolder, "%s/dxt/", pszFolder); strcat (szFilename, ".dxt"); if (cf.Exist (szFilename, pszFolder, 0)) return 1; if (!cf.Open (szFilename, szFolder, "rb", 0)) return 0; if ((cf.Read (&m_info.props.w, sizeof (m_info.props.w), 1) != 1) || (cf.Read (&m_info.props.h, sizeof (m_info.props.h), 1) != 1) || (cf.Read (&m_info.compressed.nFormat, sizeof (m_info.compressed.nFormat), 1) != 1) || (cf.Read (&m_info.compressed.nBufSize, sizeof (m_info.compressed.nBufSize), 1) != 1)) { cf.Close (); return 0; } if (!m_info.compressed.buffer.Resize (m_info.compressed.nBufSize)) { cf.Close (); return 0; } if (m_info.compressed.buffer.Read (cf, m_info.compressed.nBufSize) != m_info.compressed.nBufSize) { cf.Close (); return 0; } cf.Close (); m_info.compressed.bCompressed = true; return 1; }