16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-19 09:59:18 +02:00

Konwersja na UTF-8

Konwersja na UTF-8


Konwersja na UTF-8


Konwersja na UTF-8


Konwersja na UTF-8


Konwersja do UTF-8


Konwersja na UTF-8


Konwersja na UTF-8


Konwersja na UTF-8
This commit is contained in:
firleju
2017-01-23 06:58:53 +01:00
parent 3b88ef2356
commit 81aad5d1ae
75 changed files with 7991 additions and 8060 deletions

View File

@@ -38,7 +38,7 @@ TTexturesManager::Names::iterator TTexturesManager::LoadFromFile(std::string fil
std::string realFileName(fileName);
std::ifstream file(fileName.c_str());
// Ra: niby bez tego jest lepiej, ale dzia³a gorzej, wiêc przywrócone jest oryginalne
// Ra: niby bez tego jest lepiej, ale działa gorzej, więc przywrócone jest oryginalne
if (!file.is_open())
realFileName.insert(0, szTexturePath);
else
@@ -47,7 +47,7 @@ TTexturesManager::Names::iterator TTexturesManager::LoadFromFile(std::string fil
// char* cFileName = const_cast<char*>(fileName.c_str());
message += realFileName;
WriteLog(message.c_str()); // Ra: chybaa mia³o byæ z komunikatem z przodu, a nie tylko nazwa
WriteLog(message.c_str()); // Ra: chybaa miało być z komunikatem z przodu, a nie tylko nazwa
size_t pos = fileName.rfind('.');
std::string ext(fileName, pos + 1, std::string::npos);
@@ -64,7 +64,7 @@ TTexturesManager::Names::iterator TTexturesManager::LoadFromFile(std::string fil
texinfo = LoadDDS(realFileName, filter);
_alphas.insert(
texinfo); // zapamiêtanie stanu przezroczystoœci tekstury - mo¿na by tylko przezroczyste
texinfo); // zapamiętanie stanu przezroczystości tekstury - można by tylko przezroczyste
std::pair<Names::iterator, bool> ret = _names.insert(std::make_pair(fileName, texinfo.first));
if (!texinfo.first)
@@ -91,44 +91,44 @@ struct ReplaceSlash
};
GLuint TTexturesManager::GetTextureID(char *dir, char *where, std::string fileName, int filter)
{ // ustalenie numeru tekstury, wczytanie jeœli nie jeszcze takiej nie by³o
{ // ustalenie numeru tekstury, wczytanie jeśli nie jeszcze takiej nie było
/*
// Ra: niby tak jest lepiej, ale dzia³a gorzej, wiêc przywrócone jest oryginalne
//najpierw szukamy w katalogu, z którego wywo³ywana jest tekstura, potem z wy¿szego
//Ra: przerobiæ na wyszukiwanie w drzewie nazw, do którego zapisywaæ np. rozmiary,
przezroczystoϾ
//Ra: ustalaæ, które tekstury mo¿na wczytaæ ju¿ w trakcie symulacji
// Ra: niby tak jest lepiej, ale działa gorzej, więc przywrócone jest oryginalne
//najpierw szukamy w katalogu, z którego wywoływana jest tekstura, potem z wyższego
//Ra: przerobić na wyszukiwanie w drzewie nazw, do którego zapisywać np. rozmiary,
przezroczystość
//Ra: ustalać, które tekstury można wczytać już w trakcie symulacji
size_t pos=fileName.find(':'); //szukamy dwukropka
if (pos!=std::string::npos) //po dwukropku mog¹ byæ podane dodatkowe informacje
fileName=fileName.substr(0,pos); //niebêd¹ce nazw¹ tekstury
if (pos!=std::string::npos) //po dwukropku mogą być podane dodatkowe informacje
fileName=fileName.substr(0,pos); //niebędące nazwą tekstury
std::transform(fileName.begin(),fileName.end(),fileName.begin(),ReplaceSlash()); //zamiana "/"
na "\"
//jeœli bie¿aca œcie¿ka do tekstur nie zosta³a dodana to dodajemy domyœln¹
//jeśli bieżaca ścieżka do tekstur nie została dodana to dodajemy domyślną
//if (fileName.find('\\')==std::string::npos) //bz sensu
// fileName.insert(0,szDefaultTexturePath);
//najpierw szukamy w podanym katalogu, potem w domyœlnym
//najpierw szukamy w podanym katalogu, potem w domyślnym
Names::iterator iter;
std::ifstream file;
if ((fileName.find('.')==fileName.npos)?true:(fileName.rfind('.')<fileName.rfind('\\')))
//pierwsza kropka od prawej jest wczeœniej ni¿ "\"
{//Ra: jeœli nie ma kropki w nazwie pliku, wypróbowanie rozszerzeñ po kolei, zaczynaj¹c od
domyœlnego
fileName.append("."); //kropkê trzeba dodaæ na pewno, resztê trzeba próbowaæ
//pierwsza kropka od prawej jest wcześniej niż "\"
{//Ra: jeśli nie ma kropki w nazwie pliku, wypróbowanie rozszerzeń po kolei, zaczynając od
domyślnego
fileName.append("."); //kropkę trzeba dodać na pewno, resztę trzeba próbować
std::string test; //zmienna robocza
for (int i=0;i<4;++i)
{//najpierw szukamy w magazynie
test=fileName;
if (where) test.insert(0,where); //œcie¿ka obiektu wywo³uj¹cego
test.append(Global::szDefaultExt[i]); //dodanie jednego z kilku rozszerzeñ
iter=_names.find(test); //czy mamy ju¿ w magazynie?
if (where) test.insert(0,where); //ścieżka obiektu wywołującego
test.append(Global::szDefaultExt[i]); //dodanie jednego z kilku rozszerzeń
iter=_names.find(test); //czy mamy już w magazynie?
if (iter!=_names.end())
return iter->second; //znalezione!
if (dir)
{//mo¿e we wskazanym katalogu?
{//może we wskazanym katalogu?
test=fileName;
test.insert(0,dir); //jeszcze próba z dodatkow¹ œcie¿k¹
test.append(Global::szDefaultExt[i]); //dodanie jednego z kilku rozszerzeñ
iter=_names.find(test); //czy mamy ju¿ w magazynie?
test.insert(0,dir); //jeszcze próba z dodatkową ścieżką
test.append(Global::szDefaultExt[i]); //dodanie jednego z kilku rozszerzeń
iter=_names.find(test); //czy mamy już w magazynie?
if (iter!=_names.end())
return iter->second; //znalezione!
}
@@ -136,19 +136,19 @@ GLuint TTexturesManager::GetTextureID(char *dir, char *where, std::string fileNa
//for (int i=0;i<4;++i)
//{//w magazynie nie ma, to sprawdzamy na dysku
test=fileName;
if (where) test.insert(0,where); //œcie¿ka obiektu wywo³uj¹cego
test.append(Global::szDefaultExt[i]); //dodanie jednego z kilku rozszerzeñ
if (where) test.insert(0,where); //ścieżka obiektu wywołującego
test.append(Global::szDefaultExt[i]); //dodanie jednego z kilku rozszerzeń
file.open(test.c_str());
if (!file.is_open())
{test=fileName;
if (dir) test.insert(0,dir); //próba z dodatkow¹ œcie¿k¹
test.append(Global::szDefaultExt[i]); //dodanie jednego z kilku rozszerzeñ
if (dir) test.insert(0,dir); //próba z dodatkową ścieżką
test.append(Global::szDefaultExt[i]); //dodanie jednego z kilku rozszerzeń
file.open(test.c_str());
}
if (file.is_open())
{//jak znaleziony, to plik zostaje otwarty
fileName=test; //zapamiêtanie znalezionego rozszerzenia
break; //wyjœcie z pêtli na etapie danego rozszerzenia
fileName=test; //zapamiętanie znalezionego rozszerzenia
break; //wyjście z pętli na etapie danego rozszerzenia
}
}
}
@@ -157,23 +157,23 @@ GLuint TTexturesManager::GetTextureID(char *dir, char *where, std::string fileNa
std::string test; //zmienna robocza
//najpierw szukamy w magazynie
test=fileName;
if (where) test.insert(0,where); //œcie¿ka obiektu wywo³uj¹cego
iter=_names.find(test); //czy mamy ju¿ w magazynie?
if (where) test.insert(0,where); //ścieżka obiektu wywołującego
iter=_names.find(test); //czy mamy już w magazynie?
if (iter!=_names.end())
return iter->second; //znalezione!
test=fileName;
if (dir) test.insert(0,dir); //jeszcze próba z dodatkow¹ œcie¿k¹
iter=_names.find(test); //czy mamy ju¿ w magazynie?
if (dir) test.insert(0,dir); //jeszcze próba z dodatkową ścieżką
iter=_names.find(test); //czy mamy już w magazynie?
if (iter!=_names.end())
return iter->second; //znalezione!
//w magazynie nie ma, to sprawdzamy na dysku
test=fileName;
if (where) test.insert(0,where); //œcie¿ka obiektu wywo³uj¹cego
if (where) test.insert(0,where); //ścieżka obiektu wywołującego
file.open(test.c_str());
if (!file.is_open())
{//jak znaleziony, to plik zostaje otwarty
test=fileName;
if (dir) test.insert(0,dir); //próba z dodatkow¹ œcie¿k¹
if (dir) test.insert(0,dir); //próba z dodatkową ścieżką
file.open(test.c_str());
if (file.is_open())
fileName=test; //ustalenie nowej nazwy
@@ -181,34 +181,34 @@ GLuint TTexturesManager::GetTextureID(char *dir, char *where, std::string fileNa
}
if (file.is_open())
{//plik pozostaje otwarty, gdy znaleziono na dysku
file.close(); //mo¿na ju¿ zamkn¹æ
iter=LoadFromFile(fileName,filter); //doda siê do magazynu i zwróci swoj¹ pozycjê
file.close(); //można już zamknąć
iter=LoadFromFile(fileName,filter); //doda się do magazynu i zwróci swoją pozycję
}
*/
size_t pos = fileName.find(':'); // szukamy dwukropka
if (pos != std::string::npos) // po dwukropku mog¹ byæ podane dodatkowe informacje
fileName = fileName.substr(0, pos); // niebêd¹ce nazw¹ tekstury
if (pos != std::string::npos) // po dwukropku mogą być podane dodatkowe informacje
fileName = fileName.substr(0, pos); // niebędące nazwą tekstury
pos = fileName.find('|'); // szukamy separatora tekstur
if (pos != std::string::npos) // po | mo¿e byæ nazwa kolejnej tekstury
fileName = fileName.substr(0, pos); // i trzeba to obci¹æ
if (pos != std::string::npos) // po | może być nazwa kolejnej tekstury
fileName = fileName.substr(0, pos); // i trzeba to obciąć
std::transform(fileName.begin(), fileName.end(), fileName.begin(), ReplaceSlash());
// jeœli bie¿aca œcie¿ka do tekstur nie zosta³a dodana to dodajemy domyœln¹
// jeśli bieżaca ścieżka do tekstur nie została dodana to dodajemy domyślną
if (fileName.find('\\') == std::string::npos)
fileName.insert(0, szTexturePath);
Names::iterator iter;
if (fileName.find('.') == std::string::npos)
{ // Ra: wypróbowanie rozszerzeñ po kolei, zaczynaj¹c od domyœlnego
fileName.append("."); // kropka bêdze na pewno, resztê trzeba próbowaæ
{ // Ra: wypróbowanie rozszerzeń po kolei, zaczynając od domyślnego
fileName.append("."); // kropka będze na pewno, resztę trzeba próbować
std::string test; // zmienna robocza
for (int i = 0; i < 4; ++i)
{ // najpierw szukamy w magazynie
test = fileName;
test.append(Global::szDefaultExt[i]);
iter = _names.find(fileName); // czy mamy ju¿ w magazynie?
iter = _names.find(fileName); // czy mamy już w magazynie?
if (iter != _names.end())
return iter->second; // znalezione!
test.insert(0, szTexturePath); // jeszcze próba z dodatkow¹ œcie¿k¹
iter = _names.find(fileName); // czy mamy ju¿ w magazynie?
test.insert(0, szTexturePath); // jeszcze próba z dodatkową ścieżką
iter = _names.find(fileName); // czy mamy już w magazynie?
if (iter != _names.end())
return iter->second; // znalezione!
}
@@ -226,18 +226,18 @@ GLuint TTexturesManager::GetTextureID(char *dir, char *where, std::string fileNa
{
fileName.append(Global::szDefaultExt[i]); // dopisanie znalezionego
file.close();
break; // wyjœcie z pêtli na etapie danego rozszerzenia
break; // wyjście z pętli na etapie danego rozszerzenia
}
}
}
iter = _names.find(fileName); // czy mamy ju¿ w magazynie
iter = _names.find(fileName); // czy mamy już w magazynie
if (iter == _names.end())
iter = LoadFromFile(fileName, filter);
return (iter != _names.end() ? iter->second : 0);
};
bool TTexturesManager::GetAlpha(GLuint id)
{ // atrybut przezroczystoœci dla tekstury o podanym numerze (id)
{ // atrybut przezroczystości dla tekstury o podanym numerze (id)
Alphas::iterator iter = _alphas.find(id);
return (iter != _alphas.end() ? iter->second : false);
}
@@ -317,7 +317,7 @@ TTexturesManager::AlphaValue TTexturesManager::LoadBMP(std::string fileName)
TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int filter)
{
AlphaValue fail(0, false);
int writeback = -1; //-1 plik jest OK, >=0 - od którego bajtu zapisaæ poprawiony plik
int writeback = -1; //-1 plik jest OK, >=0 - od którego bajtu zapisać poprawiony plik
GLubyte TGACompheader[] = {0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // uncompressed TGA header
GLubyte TGAcompare[12]; // used to compare TGA header
GLubyte header[6]; // first 6 useful bytes from the header
@@ -340,7 +340,7 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int
file.close();
return fail;
};
{ // sprawdzenie prawid³owoœci rozmiarów
{ // sprawdzenie prawidłowości rozmiarów
int i, j;
for (i = width, j = 0; i; i >>= 1)
if (i & 1)
@@ -350,7 +350,7 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int
if (i & 1)
++j;
if (j != 1)
WriteLog("Bad texture: " + fileName + " is " + std::to_string(width) + "×" + std::to_string(height) );
WriteLog("Bad texture: " + fileName + " is " + std::to_string(width) + "×" + std::to_string(height) );
}
GLuint bpp = header[4]; // grab the TGA's bits per pixel (24 or 32)
GLuint bytesPerPixel = bpp / 8; // divide by 8 to get the bytes per pixel
@@ -372,46 +372,46 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int
GLuint filesize; // current byte
GLuint colorbuffer[1]; // Storage for 1 pixel
file.seekg(0, std::ios::end); // na koniec
filesize = (int)file.tellg() - 18; // rozmiar bez nag³ówka
file.seekg(18, std::ios::beg); // ponownie za nag³ówkiem
GLubyte *copyto = imageData; // gdzie wstawiaæ w buforze
filesize = (int)file.tellg() - 18; // rozmiar bez nagłówka
file.seekg(18, std::ios::beg); // ponownie za nagłówkiem
GLubyte *copyto = imageData; // gdzie wstawiać w buforze
GLubyte *copyend = imageData + imageSize; // za ostatnim bajtem bufora
GLubyte *copyfrom = imageData + imageSize - filesize; // gdzie jest pocz¹tek
int chunkheader = 0; // Ra: bêdziemy wczytywaæ najm³odszy bajt
if (filesize < imageSize) // jeœli po kompresji jest mniejszy ni¿ przed
{ // Ra: nowe wczytywanie skompresowanych: czytamy ca³e od razu, dekompresja w pamiêci
GLubyte *copyfrom = imageData + imageSize - filesize; // gdzie jest początek
int chunkheader = 0; // Ra: będziemy wczytywać najmłodszy bajt
if (filesize < imageSize) // jeśli po kompresji jest mniejszy niż przed
{ // Ra: nowe wczytywanie skompresowanych: czytamy całe od razu, dekompresja w pamięci
GLuint copybytes;
file.read(reinterpret_cast<char*>(copyfrom), filesize); // wczytanie reszty po nag³ówku
// najpierw trzeba ustaliæ, ile skopiowanych pikseli jest na samym koñcu
file.read(reinterpret_cast<char*>(copyfrom), filesize); // wczytanie reszty po nagłówku
// najpierw trzeba ustalić, ile skopiowanych pikseli jest na samym końcu
copyto = copyfrom; // roboczo przelatujemy wczytane dane
copybytes = 0; // licznik bajtów obrazka
copybytes = 0; // licznik bajtów obrazka
while (copybytes < imageSize)
{
chunkheader = (unsigned char)*copyto; // jeden bajt, pozosta³e zawsze zerowe
chunkheader = (unsigned char)*copyto; // jeden bajt, pozostałe zawsze zerowe
copyto += 1 + bytesPerPixel; // bajt licznika oraz jeden piksel jest zawsze
copybytes += (1 + (chunkheader & 127)) * bytesPerPixel; // iloϾ pikseli
if (chunkheader < 128) // jeœli kopiowanie, pikseli jest wiêcej
copybytes += (1 + (chunkheader & 127)) * bytesPerPixel; // ilość pikseli
if (chunkheader < 128) // jeśli kopiowanie, pikseli jest więcej
copyto += (chunkheader)*bytesPerPixel; // rozmiar kopiowanego obszaru (bez
// jednego piksela)
}
if (copybytes > imageSize)
{ // nie ma prawa byæ wiêksze
{ // nie ma prawa być większe
WriteLog("Compression error");
delete[] imageData;
file.close();
return fail;
}
// na koñcu mog¹ byæ œmieci
int extraend = copyend - copyto; // d³ugoœæ œmieci na koñcu
// na końcu mogą być śmieci
int extraend = copyend - copyto; // długość śmieci na końcu
if (extraend > 0)
{ // przesuwamy bufor do koñca obszaru dekompresji
{ // przesuwamy bufor do końca obszaru dekompresji
WriteLog("Extra bytes: " + std::to_string(extraend));
memmove(copyfrom + extraend, copyfrom, filesize - extraend);
copyfrom += extraend;
file.close();
filesize -= extraend; // to chyba nie ma znaczenia
if (Global::iModifyTGA & 2) // flaga obcinania œmieci
{ // najlepiej by by³o obci¹æ plik, ale fstream tego nie potrafi
if (Global::iModifyTGA & 2) // flaga obcinania śmieci
{ // najlepiej by było obciąć plik, ale fstream tego nie potrafi
int handle;
for( unsigned int i = 0; i < fileName.length(); ++i ) {
if( fileName[ i ] == '/' ) { fileName[ i ] = '\\'; } // bo to Windows }
@@ -420,45 +420,45 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int
// NOTE: this posix code is unsafe, and being deprecated in visual c
// TODO: replace with something up to date
handle = open(fileName.c_str(), O_RDWR | O_BINARY);
chsize(handle, 18 + filesize); // obciêcie œmieci
chsize(handle, 18 + filesize); // obcięcie śmieci
close(handle);
extraend = 0; // skoro obciêty, to siê ju¿ nie liczy
extraend = 0; // skoro obcięty, to się już nie liczy
}
file.open(fileName.c_str(), std::ios::binary | std::ios::in);
}
if (chunkheader < 128) // jeœli ostatnie piksele s¹ kopiowane
if (chunkheader < 128) // jeśli ostatnie piksele są kopiowane
copyend -= (1 + chunkheader) *
bytesPerPixel; // bajty kopiowane na koñcu nie podlegaj¹ce dekompresji
bytesPerPixel; // bajty kopiowane na końcu nie podlegające dekompresji
else
copyend -= bytesPerPixel; // ostatni piksel i tak siê nie zmieni
copyto = imageData; // teraz bêdzie wype³nianie od pocz¹tku obszaru
copyend -= bytesPerPixel; // ostatni piksel i tak się nie zmieni
copyto = imageData; // teraz będzie wypełnianie od początku obszaru
while (copyto < copyend)
{
chunkheader = (unsigned char)*copyfrom; // jeden bajt, pozosta³e zawsze zerowe
chunkheader = (unsigned char)*copyfrom; // jeden bajt, pozostałe zawsze zerowe
if (copyto > copyfrom)
{ // jeœli piksele maj¹ byæ kopiowane, to mo¿liwe jest przesuniêcie ich o 1 bajt, na
{ // jeśli piksele mają być kopiowane, to możliwe jest przesunięcie ich o 1 bajt, na
// miejsce licznika
filesize = (imageData + imageSize - copyto) /
bytesPerPixel; // ile pikseli pozosta³o do koñca
bytesPerPixel; // ile pikseli pozostało do końca
// WriteLog("Decompression buffer overflow at pixel
// "+AnsiString((copyto-imageData)/bytesPerPixel)+"+"+AnsiString(filesize));
// pozycjê w pliku trzeba by zapamietaæ i po wczytaniu reszty pikseli star¹
// metod¹
// zapisaæ od niej dane od (copyto), poprzedzone bajtem o wartoœci (filesize-1)
// pozycję w pliku trzeba by zapamietać i po wczytaniu reszty pikseli starą
// metodą
// zapisać od niej dane od (copyto), poprzedzone bajtem o wartości (filesize-1)
writeback = imageData + imageSize + extraend -
copyfrom; // ile bajtów skompresowanych zosta³o do koñca
copyfrom; // ile bajtów skompresowanych zostało do końca
copyfrom = copyto; // adres piksela do zapisania
file.seekg(-writeback, std::ios::end); // odleg³oœæ od koñca (ujemna)
file.seekg(-writeback, std::ios::end); // odległość od końca (ujemna)
if ((filesize > 128) ||
!(Global::iModifyTGA & 4)) // gdy za du¿o pikseli albo wy³¹czone
writeback = -1; // zapis mo¿liwe jeœli iloœæ problematycznych pikseli nie
!(Global::iModifyTGA & 4)) // gdy za dużo pikseli albo wyłączone
writeback = -1; // zapis możliwe jeśli ilość problematycznych pikseli nie
// przekaracza 128
break; // bufor siê zatka³, dalej w ten sposób siê nie da
break; // bufor się zatkał, dalej w ten sposób się nie da
}
if (chunkheader < 128)
{ // dla nag³ówka < 128 mamy podane ile pikseli przekopiowaæ minus 1
{ // dla nagłówka < 128 mamy podane ile pikseli przekopiować minus 1
copybytes = (++chunkheader) * bytesPerPixel; // rozmiar kopiowanego obszaru
memcpy(copyto, ++copyfrom, copybytes); // skopiowanie tylu bajtów
memcpy(copyto, ++copyfrom, copybytes); // skopiowanie tylu bajtów
copyto += copybytes;
copyfrom += copybytes;
}
@@ -467,12 +467,12 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int
chunkheader -= 127;
// copy the color into the image data as many times as dictated
if (bytesPerPixel == 4)
{ // przy czterech bajtach powinno byæ szybsze u¿ywanie int
__int32 *ptr = (__int32 *)(copyto); // wskaŸnik na int
__int32 bgra = *((__int32 *)++copyfrom); // kolor wype³niaj¹cy (4 bajty)
{ // przy czterech bajtach powinno być szybsze używanie int
__int32 *ptr = (__int32 *)(copyto); // wskaźnik na int
__int32 bgra = *((__int32 *)++copyfrom); // kolor wypełniający (4 bajty)
for (int counter = 0; counter < chunkheader; counter++)
*ptr++ = bgra;
copyto = reinterpret_cast<GLubyte *>(ptr); // rzutowanie, ¿eby nie dodawaæ
copyto = reinterpret_cast<GLubyte *>(ptr); // rzutowanie, żeby nie dodawać
copyfrom += 4;
}
else
@@ -492,13 +492,13 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int
{
WriteLog("Compressed file is larger than uncompressed!");
if (Global::iModifyTGA & 1)
writeback = 0; // no zapisaæ ten krótszy zaczynajac od pocz¹tku...
writeback = 0; // no zapisać ten krótszy zaczynajac od początku...
}
// if (copyto<copyend) WriteLog("Slow loader...");
while (copyto < copyend)
{ // Ra: stare wczytywanie skompresowanych, z nadu¿ywaniem file.read()
// równie¿ wykonywane, jeœli dekompresja w buforze przekroczy jego rozmiar
file.read((char *)&chunkheader, 1); // jeden bajt, pozosta³e zawsze zerowe
{ // Ra: stare wczytywanie skompresowanych, z nadużywaniem file.read()
// również wykonywane, jeśli dekompresja w buforze przekroczy jego rozmiar
file.read((char *)&chunkheader, 1); // jeden bajt, pozostałe zawsze zerowe
if (file.eof())
{
MessageBox(NULL, "Could not read RLE header", "ERROR", MB_OK); // display error
@@ -519,11 +519,11 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int
file.read((char *)colorbuffer, bytesPerPixel);
// copy the color into the image data as many times as dictated
if (bytesPerPixel == 4)
{ // przy czterech bajtach powinno byæ szybsze u¿ywanie int
{ // przy czterech bajtach powinno być szybsze używanie int
__int32 *ptr = (__int32 *)(copyto), bgra = *((__int32 *)colorbuffer);
for (int counter = 0; counter < chunkheader; counter++)
*ptr++ = bgra;
copyto = reinterpret_cast<GLubyte*>(ptr); // rzutowanie, ¿eby nie dodawaæ
copyto = reinterpret_cast<GLubyte*>(ptr); // rzutowanie, żeby nie dodawać
}
else
for (int counter = 0; counter < chunkheader; counter++)
@@ -535,18 +535,18 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int
} // while (copyto<copyend)
if (writeback >= 0)
{ // zapisanie pliku
file.close(); // tamten zamykamy, bo by³ tylko do odczytu
file.close(); // tamten zamykamy, bo był tylko do odczytu
if (writeback)
{ // zapisanie samej koñcówki pliku, która utrudnia dekompresjê w buforze
{ // zapisanie samej końcówki pliku, która utrudnia dekompresję w buforze
WriteLog("Rewriting end of file...");
chunkheader = filesize - 1; // licznik jest o 1 mniejszy
file.open(fileName.c_str(), std::ios::binary | std::ios::out | std::ios::in);
file.seekg(-writeback, std::ios::end); // odleg³oœæ od koñca (ujemna)
file.seekg(-writeback, std::ios::end); // odległość od końca (ujemna)
file.write((char *)&chunkheader, 1); // zapisanie licznika
file.write(reinterpret_cast<char*>(copyfrom), filesize * bytesPerPixel); // piksele bez kompresji
}
else
{ // zapisywanie ca³oœci pliku, bêdzie krótszy, wiêc trzeba usun¹æ go w ca³oœci
{ // zapisywanie całości pliku, będzie krótszy, więc trzeba usunąć go w całości
WriteLog("Writing uncompressed file...");
TGAcompare[2] = 2; // bez kompresji
file.open(fileName.c_str(), std::ios::binary | std::ios::out | std::ios::trunc);
@@ -556,7 +556,7 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int
}
}
};
file.close(); // plik zamykamy dopiero na samym koñcu
file.close(); // plik zamykamy dopiero na samym końcu
bool alpha = (bpp == 32);
bool hash = (fileName.find('#') != std::string::npos); // true gdy w nazwie jest "#"
bool dollar = (fileName.find('$') == std::string::npos); // true gdy w nazwie nie ma "$"
@@ -564,24 +564,24 @@ TTexturesManager::AlphaValue TTexturesManager::LoadTGA(std::string fileName, int
if (pos != std::string::npos)
if (pos < fileName.size())
{
filter = (int)fileName[pos + 1] - '0'; // zamiana cyfry za % na liczbê
filter = (int)fileName[pos + 1] - '0'; // zamiana cyfry za % na liczbę
if ((filter < 0) || (filter > 10))
filter = -1; // jeœli nie jest cyfr¹
filter = -1; // jeśli nie jest cyfrą
}
if (!alpha && !hash && dollar && (filter < 0))
filter = Global::iDefaultFiltering; // dotyczy tekstur TGA bez kana³u alfa
filter = Global::iDefaultFiltering; // dotyczy tekstur TGA bez kanału alfa
// ewentualne przeskalowanie tekstury do dopuszczalnego rozumiaru
GLint w = width, h = height;
if (width > Global::iMaxTextureSize)
width = Global::iMaxTextureSize; // ogranizczenie wielkoœci
width = Global::iMaxTextureSize; // ogranizczenie wielkości
if (height > Global::iMaxTextureSize)
height = Global::iMaxTextureSize;
if ((w != width) || (h != height))
{ // przeskalowanie tekstury, ¿eby siê nie wyœwietla³a jako bia³a
{ // przeskalowanie tekstury, żeby się nie wyświetlała jako biała
GLubyte *imgData = new GLubyte[width * height * bytesPerPixel]; // nowy rozmiar
gluScaleImage(bytesPerPixel == 3 ? GL_RGB : GL_RGBA, w, h, GL_UNSIGNED_BYTE, imageData,
width, height, GL_UNSIGNED_BYTE, imgData);
delete imageData; // usuniêcie starego
delete imageData; // usunięcie starego
imageData = imgData;
}
GLuint id = CreateTexture(imageData, (alpha ? GL_BGRA : GL_BGR), width, height, alpha, hash,
@@ -704,7 +704,7 @@ TTexturesManager::AlphaValue TTexturesManager::LoadDDS(std::string fileName, int
data.width = ddsd.dwWidth;
data.height = ddsd.dwHeight;
data.numMipMaps = ddsd.dwMipMapCount;
{ // sprawdzenie prawid³owoœci rozmiarów
{ // sprawdzenie prawidłowości rozmiarów
int i, j;
for (i = data.width, j = 0; i; i >>= 1)
if (i & 1)
@@ -714,7 +714,7 @@ TTexturesManager::AlphaValue TTexturesManager::LoadDDS(std::string fileName, int
if (i & 1)
++j;
if (j != 1)
WriteLog( "Bad texture: " + fileName + " is " + std::to_string(data.width) + "×" + std::to_string(data.height) );
WriteLog( "Bad texture: " + fileName + " is " + std::to_string(data.width) + "×" + std::to_string(data.height) );
}
if (ddsd.ddpfPixelFormat.dwFourCC == FOURCC_DXT1)
@@ -730,14 +730,14 @@ TTexturesManager::AlphaValue TTexturesManager::LoadDDS(std::string fileName, int
if (filter >= 0)
SetFiltering(filter); // cyfra po % w nazwie
else
// SetFiltering(bHasAlpha&&bDollar,bHash); //znaki #, $ i kana³ alfa w nazwie
// SetFiltering(bHasAlpha&&bDollar,bHash); //znaki #, $ i kanał alfa w nazwie
SetFiltering(data.components == 4, fileName.find('#') != std::string::npos);
GLuint offset = 0;
int firstMipMap = 0;
while ((data.width > Global::iMaxTextureSize) || (data.height > Global::iMaxTextureSize))
{ // pomijanie zbyt du¿ych mipmap, jeœli wymagane jest ograniczenie rozmiaru
{ // pomijanie zbyt dużych mipmap, jeśli wymagane jest ograniczenie rozmiaru
offset += ((data.width + 3) / 4) * ((data.height + 3) / 4) * data.blockSize;
data.width /= 2;
data.height /= 2;
@@ -745,7 +745,7 @@ TTexturesManager::AlphaValue TTexturesManager::LoadDDS(std::string fileName, int
};
for (int i = 0; i < data.numMipMaps - firstMipMap; i++)
{ // wczytanie kolejnych poziomów mipmap
{ // wczytanie kolejnych poziomów mipmap
if (!data.width)
data.width = 1;
if (!data.height)
@@ -777,8 +777,8 @@ TTexturesManager::AlphaValue TTexturesManager::LoadDDS(std::string fileName, int
void TTexturesManager::SetFiltering(int filter)
{
if (filter < 4) // rozmycie przy powiêkszeniu
{ // brak rozmycia z bliska - tych jest 4: 0..3, aby nie by³o przeskoku
if (filter < 4) // rozmycie przy powiększeniu
{ // brak rozmycia z bliska - tych jest 4: 0..3, aby nie było przeskoku
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
filter += 4;
}
@@ -786,22 +786,22 @@ void TTexturesManager::SetFiltering(int filter)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
switch (filter) // rozmycie przy oddaleniu
{
case 4: // najbli¿szy z tekstury
case 4: // najbliższy z tekstury
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
break;
case 5: //œrednia z tekstury
case 5: //średnia z tekstury
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
break;
case 6: // najbli¿szy z mipmapy
case 6: // najbliższy z mipmapy
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
break;
case 7: //œrednia z mipmapy
case 7: //średnia z mipmapy
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
break;
case 8: // najbli¿szy z dwóch mipmap
case 8: // najbliższy z dwóch mipmap
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR);
break;
case 9: //œrednia z dwóch mipmap
case 9: //średnia z dwóch mipmap
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
break;
}
@@ -831,7 +831,7 @@ void TTexturesManager::SetFiltering(bool alpha, bool hash)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
}
else // $: filtruj wszystko - brzydko siê zlewa
else // $: filtruj wszystko - brzydko się zlewa
{
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
@@ -841,8 +841,8 @@ void TTexturesManager::SetFiltering(bool alpha, bool hash)
///////////////////////////////////////////////////////////////////////////////
GLuint TTexturesManager::CreateTexture(GLubyte *buff, GLint bpp, int width, int height, bool bHasAlpha,
bool bHash, bool bDollar, int filter)
{ // Ra: u¿ywane tylko dla TGA i TEX
// Ra: dodana obs³uga GL_BGR oraz GL_BGRA dla TGA - szybciej siê wczytuje
{ // Ra: używane tylko dla TGA i TEX
// Ra: dodana obsługa GL_BGR oraz GL_BGRA dla TGA - szybciej się wczytuje
GLuint ID;
glGenTextures(1, &ID);
glBindTexture(GL_TEXTURE_2D, ID);
@@ -851,7 +851,7 @@ GLuint TTexturesManager::CreateTexture(GLubyte *buff, GLint bpp, int width, int
if (filter >= 0)
SetFiltering(filter); // cyfra po % w nazwie
else
SetFiltering(bHasAlpha && bDollar, bHash); // znaki #, $ i kana³ alfa w nazwie
SetFiltering(bHasAlpha && bDollar, bHash); // znaki #, $ i kanał alfa w nazwie
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
@@ -865,7 +865,7 @@ GLuint TTexturesManager::CreateTexture(GLubyte *buff, GLint bpp, int width, int
}
void TTexturesManager::Free()
{ // usuniêcie wszyskich tekstur (bez usuwania struktury)
{ // usunięcie wszyskich tekstur (bez usuwania struktury)
// for (Names::iterator iter = _names.begin(); iter != _names.end(); iter++)
if( false == _names.empty() ) {
for( auto const &texture : _names ) {