Dobrý den,
na internetu čistě ze zvědavosti studuji seriály od OpenGL v C++. Narazil jsem na kus kódu zabývajícím se texturami. Víceméně funguje jak má, akorát se nenačítají BMP obrázky v následujícíc části kódu:
int BMPTextura(int texture, const char *filename)
{
FILE *fin;
int width, height, bpp=0;
int size;
unsigned char *bitmap;
unsigned char bmpHeader[54]={0x42, 0x4d, // magicke cislo souboru BMP
0x00, 0x00, 0x00, 0x00, // velikost souboru
0x00, 0x00, 0x00, 0x00, // rezervovano, vzdy nastaveno na nula
0x36, 0x04, 0x00, 0x00, // data offset=54
0x28, 0x00, 0x00, 0x00, // velikost hlavicky=40
0x00, 0x00, 0x00, 0x00, // sirka obrazku v pixelech=?
0x00, 0x00, 0x00, 0x00, // vyska obrazku v pixelech=?
0x01, 0x00, // pocet bitovych rovin=1
0x08, 0x00, // pocet bitu na pixel=24
0x00, 0x00, 0x00, 0x00, // metoda komprimace=nic
0x00, 0x00, 0x00, 0x00, // velikost bitmapy
0x00, 0x00, 0x00, 0x00, // pocet pixelu na metr v horizontalnim smeru
0x00, 0x00, 0x00, 0x00, // pocet pixelu na metr ve vertikalnim smeru
0x00, 0x00, 0x00, 0x00, // pocet pouzitych barev
0x00, 0x00, 0x00, 0x00, // pocet dulezitych barev
};
if (!filename)return -1;
fin=fopen(filename,"r");
if (!fin) return -1; // otevreni souboru se nezdarilo
if (fread(bmpHeader, 54, 1, fin)!=1) return -1; // nacist hlavicku BMP souboru
memcpy(&width, bmpHeader+18, 4); // sirka obrazku v pixelech
memcpy(&height, bmpHeader+22, 4); // vyska obrazku v pixelech
memcpy(&bpp, bmpHeader+28, 2); // pocet bitu na pixel
if (bpp!=24) return -1;
size=width*height*3;
bitmap=(unsigned char *)malloc(size*sizeof(unsigned char));
if (fread(bitmap, size, sizeof(unsigned char), fin)!=1)return -1; //nacteni rastrovych dat
fclose(fin);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height,// nacteni textury do GPU
0, GL_RGB, GL_UNSIGNED_BYTE, bitmap);
free(bitmap);
return 0;
}
Chyba vzniká na řádku
if (fread(bitmap, size, sizeof(unsigned char), fin)!=1)return -1; //nacteni rastrovych dat
kde funkce fread nevyhodí 1 jak by měla, ale 0. A já stále nemuhu přijít na ti proč a tak Vás prosím o radu. Určitě to bude něco banálního, ale já si s tím bohužel nevím rady.
Děkuji předem Všem, kdo poradí nebo napíšou svůj postřeh.