Nvidia nv_dds 유틸리티를 사용하여 OpenGL 프로그램에서 사용할 DDS 이미지 파일을로드합니다. Windows에서 작동하지만 Linux (Ubuntu 12.10)에서는 실패합니다. 처음에는 nv_dds 문제를 생각했지만 Linux (GCC 4.7)에서 fread()가 잘못된 오프셋을 사용하여 헤더 바이트를 읽습니다.Linux에서 DDS 이미지 헤더를 읽을 수 없습니다.
DDS 마커를 제출 한 후 DDS 헤더 : 나는 DDS_HEADER 인스턴스의 내용을 통해 볼 때
// 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"마커 체크하는 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 컴퓨터에서 테스트 할 때 이러한 일은 발생하지 않습니다. fread()가 Linux GCC에서 MSVC 컴파일러가있는 Windows에서와 다르게 작동 할 수 있습니까?
아무도 실마리가 없나요? 이상하다... –