我使用Nvidia nv_dds實用程序來裝載DDS映像文件以在OpenGL程序中使用。它在Windows上工作,但在Linux上失敗(Ubuntu 12.10)。最初我認爲nv_dds的問題,但後來發現fread()在Linux上讀取錯誤偏移量的頭字節(GCC 4.7)無法讀取Linux上的DDS映像文件頭
這是讀取DDS文件標記,然後將DDS標題:
// open file
FILE *fp = fopen(filename.c_str(),"rb");
if (fp == NULL) {
return false;
}
// read in file marker, make sure its a DDS file
char filecode[4];
fread(filecode, 1, 4, fp);
if (strncmp(filecode, "DDS ", 4) != 0) {
fclose(fp);
return false;
}
// read in DDS header
DDS_HEADER ddsh;
fread(&ddsh, 1,sizeof(DDS_HEADER) , fp);
當我翻閱DDS_HEADER實例的內容,我可以看到一對夫婦分配到錯誤的性質,其餘的實際值是垃圾。
然後,如果我註釋掉「DDS」標記檢查FREAD():
// open file
FILE *fp = fopen(filename.c_str(), "rb");
if (fp == NULL) {
return false;
}
// read in file marker, make sure its a DDS file
/* comment out for test
char filecode[4];
fread(filecode, 1, 4, fp);
if (strncmp(filecode, "DDS ", 4) != 0) {
fclose(fp);
return false;
}
*/
// read in DDS header
DDS_HEADER ddsh;
fread(&ddsh, sizeof(DDS_HEADER),1 , fp);//sizeof(DDS_HEADER)
然後我得到的圖像寬度值成性的DDS_HEADER.The休息imageHeight財產仍然是垃圾。
當我在Windows機器上測試時,所有這些都不會發生。 freq()在Linux GCC上的工作方式與在MSVC編譯器上的Windows工作方式有什麼不同?
沒有人有線索?真奇怪... –