<commit_before>/*///////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
Plik:	Texture.cpp
Autor:	Real_Noname (<EMAIL>)
(C):	CODE RULERS (Real_Noname)
WWW:	www.coderulers.prv.pl
Opis:	Patrz -> Texture.h

/////////////////////////////////////////////////////////
///////////////////////////////////////////////////////*/
#include "Texture.h"
#include "Log.h"
#include <fstream>

ioTexture::ioTexture() :
	loaded(false),
	file("-"),
	texture(0)
{
	loaded = false;
	file = "-";
}

ioTexture::ioTexture( std::string filename ) :
	loaded(false),
	file("-"),
	texture(0)
{
	LoadTGA( filename );
}

ioTexture::~ioTexture()
{
	Free();
}

bool	ioTexture::LoadTGA( std::string filename )
{
	/*	eby odczyta plik TGA
		potrzebne s odpowiednie
		zmienne pomocnicze.
	*/
	//	Ta tablica jest do porwnania i trzyma nagwek nieskompresowanego pliku TGA
	unsigned char TGAheader[12] = {0,0,2,0,0,0,0,0,0,0,0,0};

	// Waciwa tablica, ktra bdzie trzymac nagwek z pliku
	unsigned char TGAcompare[12];				
	
	// Nagwek opisujcy zapisany obraz
	unsigned char header[6];

	// Zmienna bdzie trzyma ilo bajtw na pixel
	unsigned int bytesPerPixel;				

	// Rozmiar tablicy trzymajcej dane z pliku
	unsigned int imageSize;		

	// Tablica trzymajca dane ( a raczej wskanik na ni )
	unsigned char *imageData;

	// Zmienna pomocnicza
	unsigned int temp;	
	
	// Typ zapisanego obrazu
	unsigned int type = GL_RGBA;

	// Ilo bitw kolorw obrazu
	unsigned int bpp;

	// Jego wysoko i szeroko
	unsigned int width;
	unsigned int height;


	// Otwieramy plik
	std::fstream fileStream(filename, std::ios::in);

	Log.Log("TGATEX( " + file + " ): adowanie pliku " + filename + "...");
	// Teraz sprawdzamy pare rzeczy
	if(	fileStream.bad() || // Czy otwarcie pliku si udao
		fileStream.read( (char*)TGAcompare, sizeof(char) * 12 ) ||	// Czy mona odczyta 12 bajtw nagwka
		memcmp( TGAheader, TGAcompare, sizeof( TGAheader ) ) != 0 ||                    // Czy to jest nagwek ktrego szukamy?
		fileStream.read( (char*)header, sizeof(char) * 6 ) )			// Jeeli tak, to czytamy nastpne 6 bajtw
	{
		// Na wypadek gdyby co si nie udao, to zwracamy false
		if ( fileStream.bad() )
		{
			Log.Error( "TGATEX( " + file + " ): Nieprawidowa cieka lub plik nie istnieje!" );
			return false;
		}
		else
		{
			Log.Error( "TGATEX( " + file + " ): Bd z nagwkiem pliku!" );
			return false;
		}
	}
	
	if( loaded )
	{
		Free();
		Log.Report( "TGATEX( " + file + " ): Przeadowanie tekstury na " + filename );
	}
	file = filename;

	width  = header[1] * 256 + header[0];		// Opracuj szeroko obrazka
	height = header[3] * 256 + header[2];		// i jego wysokosc
    
 	if(	width  <= 0	||			// Jeeli szeroko
		height <= 0	||			// lub wysokoc jest mniejsza lub rwna zeru
		( header[4] != 24 && header[4] != 32 ) )		// Lub to nie jest ani obraz 24 Bity, ani 32 Bity
	{
		// To zatrzymaj
		Log.Error( "TGATEX( " + file + " ): Nieprawidowy obraz w pliku TGA!" );
		return false;
	}

	// Odczytaj Bity kolorw obrazu
	bpp = header[4];

	// Oblicz ile to bajtw na pixel
	bytesPerPixel = bpp / 8;

	// Oblicz wielko tablicy
	imageSize = width * height * bytesPerPixel;

	// I zarezerwuj tyle miejsca
	imageData = (unsigned char *)malloc( imageSize );

	/*	Teraz troch teorii
		eby zrobi teksture dla OpenGL
		potrzebna jest tablica z informajcami
		o kolorach. To jest poowa roboty, a pierwsz
		to wydoby te dane z pliku :) Co ju za chwile
		wykonamy.
	*/
	
	if(	imageData == NULL ||	// Sprawd czy pami jest zarezerwowana
		fileStream.read( (char*)imageData, imageSize * sizeof(char) ))	// Sprawd czy NA PEWNO odczytalimy tyle z pliku ile chcielimy
	{
		// Jeeli co si nie zgadza, to przerywamy
		if( imageData != NULL)
			free( imageData );

		Log.Error( "TGATEX( " + file + " ): Bd pamici!" );
		return false;	
	}

	/*	A teraz may kruczek. Jak zapewne
		wiadomo, s trzy kolory skadowe:
		czerwony (Red), zielony (Green) oraz
		niebieski (Blue), czyli poprawny kolotw format powinien
		by RGB. Ale z niewiadomych przyczyn w pliku TGA jest... BGR?
		Musimy to poprawi dlatego teraz zamieniamy
		miejscami dwa feralne bajty.
	*/
	for( unsigned int i = 0; i < int( imageSize ); i += bytesPerPixel )	
	{								
		temp = imageData[i];				// Wkadamy pierwszy bajt ( Blue ) do zmiennej pomocniczej
		imageData[i] = imageData[i + 2];	// Przekadamy ostatni ( Red ) na pierwsze miejsce
		imageData[i + 2] = temp;			// I zastpujemy ostatni wartoci ze zmiennej pomocniczej
	}

	// Zamykamy plik
	fileStream.close();

	// Musimy jeszcze zmieni format jeeli to nie jest obraz 32 Bity, tylko 24 Bity
	if ( bpp == 24 )
		type = GL_RGB;

	/*	Teraz to dopiero jaja...
		Konwertujemy uzyskane dane na
		teksture(y). Ale dlaczego a 3?
		By mie moliwo wyboru jakoci tekstury :)
		W zalenoci od parametrw jak ma si zachowywa
		tekstura, kiedy jest wiksza, lub mniejsza ni
		w oryginale, to zachowuje rn jako.
		Dodatkowo w najwyszej jakoci uyty jest mipmaping, 
		ktry daje lepszy wygld gdy tekstura jest pod duym ktem.
		Po wicej informacji zapraszam do dokumentacji OpenGL (RTFM!) :) 
	*/

	// Stwrz pi niezdefinowanych tekstur
	glGenTextures( 1, &texture );

	// I same tekstury

	//===================Najwysza jako MipMapingu====================
	glBindTexture( GL_TEXTURE_2D, texture );			// Bind Our Texture
	glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); 
	glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR );
	gluBuild2DMipmaps(GL_TEXTURE_2D, type, width, height, type, GL_UNSIGNED_BYTE, imageData );

	// Po wszystkim, te dane s ju niepotrzebne
	delete[] imageData;
<commit_msg>Texture loading correction - only binary files should be loaded.<commit_after>/*///////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
Plik:	Texture.cpp
Autor:	Real_Noname (<EMAIL>)
(C):	CODE RULERS (Real_Noname)
WWW:	www.coderulers.prv.pl
Opis:	Patrz -> Texture.h

/////////////////////////////////////////////////////////
///////////////////////////////////////////////////////*/
#include "Texture.h"
#include "Log.h"
#include <fstream>

ioTexture::ioTexture() :
	loaded(false),
	file("-"),
	texture(0)
{
	loaded = false;
	file = "-";
}

ioTexture::ioTexture( std::string filename ) :
	loaded(false),
	file("-"),
	texture(0)
{
	LoadTGA( filename );
}

ioTexture::~ioTexture()
{
	Free();
}

bool	ioTexture::LoadTGA( std::string filename )
{
	/*	eby odczyta plik TGA
		potrzebne s odpowiednie
		zmienne pomocnicze.
	*/
	//	Ta tablica jest do porwnania i trzyma nagwek nieskompresowanego pliku TGA
	unsigned char TGAheader[12] = {0,0,2,0,0,0,0,0,0,0,0,0};

	// Waciwa tablica, ktra bdzie trzymac nagwek z pliku
	unsigned char TGAcompare[12];				
	
	// Nagwek opisujcy zapisany obraz
	unsigned char header[6];

	// Zmienna bdzie trzyma ilo bajtw na pixel
	unsigned int bytesPerPixel;				

	// Rozmiar tablicy trzymajcej dane z pliku
	unsigned int imageSize;		

	// Tablica trzymajca dane ( a raczej wskanik na ni )
	unsigned char *imageData;

	// Zmienna pomocnicza
	unsigned int temp;	
	
	// Typ zapisanego obrazu
	unsigned int type = GL_RGBA;

	// Ilo bitw kolorw obrazu
	unsigned int bpp;

	// Jego wysoko i szeroko
	unsigned int width;
	unsigned int height;


	// Otwieramy plik
	std::fstream fileStream(filename, std::ios::in | std::ios::binary);
	
	Log.Log("TGATEX( " + file + " ): adowanie pliku " + filename + "...");
	// Teraz sprawdzamy pare rzeczy
	if(	fileStream.bad() || // Czy otwarcie pliku si udao
		!fileStream.read( (char*)TGAcompare, sizeof(char) * 12 ) ||	// Czy mona odczyta 12 bajtw nagwka
		memcmp( TGAheader, TGAcompare, sizeof( TGAheader ) ) != 0 ||                    // Czy to jest nagwek ktrego szukamy?
		!fileStream.read( (char*)header, sizeof(char) * 6 ) )			// Jeeli tak, to czytamy nastpne 6 bajtw
	{
		// Na wypadek gdyby co si nie udao, to zwracamy false
		if ( fileStream.bad() )
		{
			Log.Error( "TGATEX( " + file + " ): Nieprawidowa cieka lub plik nie istnieje!" );
			return false;
		}
		else
		{
			Log.Error( "TGATEX( " + file + " ): Bd z nagwkiem pliku!" );
			return false;
		}
	}
	
	if( loaded )
	{
		Free();
		Log.Report( "TGATEX( " + file + " ): Przeadowanie tekstury na " + filename );
	}
	file = filename;

	width  = header[1] * 256 + header[0];		// Opracuj szeroko obrazka
	height = header[3] * 256 + header[2];		// i jego wysokosc
    
 	if(	width  <= 0	||			// Jeeli szeroko
		height <= 0	||			// lub wysokoc jest mniejsza lub rwna zeru
		( header[4] != 24 && header[4] != 32 ) )		// Lub to nie jest ani obraz 24 Bity, ani 32 Bity
	{
		// To zatrzymaj
		Log.Error( "TGATEX( " + file + " ): Nieprawidowy obraz w pliku TGA!" );
		return false;
	}

	// Odczytaj Bity kolorw obrazu
	bpp = header[4];

	// Oblicz ile to bajtw na pixel
	bytesPerPixel = bpp / 8;

	// Oblicz wielko tablicy
	imageSize = width * height * bytesPerPixel;

	// I zarezerwuj tyle miejsca
	imageData = new unsigned char[imageSize];
	memset(imageData, 0, sizeof(unsigned char) * imageSize);

	/*	Teraz troch teorii
		eby zrobi teksture dla OpenGL
		potrzebna jest tablica z informajcami
		o kolorach. To jest poowa roboty, a pierwsz
		to wydoby te dane z pliku :) Co ju za chwile
		wykonamy.
	*/
	
	if(	imageData == NULL ||	// Sprawd czy pami jest zarezerwowana
		!fileStream.read( (char*)imageData, imageSize * sizeof(char) ))	// Sprawd czy NA PEWNO odczytalimy tyle z pliku ile chcielimy
	{
		// Jeeli co si nie zgadza, to przerywamy
		if( imageData != NULL)
			free( imageData );

		Log.Error( "TGATEX( " + file + " ): Bd pamici!" );
		return false;	
	}
	;

	/*	A teraz may kruczek. Jak zapewne
		wiadomo, s trzy kolory skadowe:
		czerwony (Red), zielony (Green) oraz
		niebieski (Blue), czyli poprawny kolotw format powinien
		by RGB. Ale z niewiadomych przyczyn w pliku TGA jest... BGR?
		Musimy to poprawi dlatego teraz zamieniamy
		miejscami dwa feralne bajty.
	*/
	for( unsigned int i = 0; i < int( imageSize ); i += bytesPerPixel )	
	{								
		temp = imageData[i];				// Wkadamy pierwszy bajt ( Blue ) do zmiennej pomocniczej
		imageData[i] = imageData[i + 2];	// Przekadamy ostatni ( Red ) na pierwsze miejsce
		imageData[i + 2] = temp;			// I zastpujemy ostatni wartoci ze zmiennej pomocniczej
	}

	// Zamykamy plik
	fileStream.close();

	// Musimy jeszcze zmieni format jeeli to nie jest obraz 32 Bity, tylko 24 Bity
	if ( bpp == 24 )
		type = GL_RGB;

	/*	Teraz to dopiero jaja...
		Konwertujemy uzyskane dane na
		teksture(y). Ale dlaczego a 3?
		By mie moliwo wyboru jakoci tekstury :)
		W zalenoci od parametrw jak ma si zachowywa
		tekstura, kiedy jest wiksza, lub mniejsza ni
		w oryginale, to zachowuje rn jako.
		Dodatkowo w najwyszej jakoci uyty jest mipmaping, 
		ktry daje lepszy wygld gdy tekstura jest pod duym ktem.
		Po wicej informacji zapraszam do dokumentacji OpenGL (RTFM!) :) 
	*/

	// Stwrz pi niezdefinowanych tekstur
	glGenTextures( 1, &texture );

	// I same tekstury

	//===================Najwysza jako MipMapingu====================
	glBindTexture( GL_TEXTURE_2D, texture );			// Bind Our Texture
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); 
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
	//glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, type, GL_UNSIGNED_BYTE, imageData);
	gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA8, width, height, type, GL_UNSIGNED_BYTE, imageData );
	glBindTexture( GL_TEXTURE_2D, 0 );

	// Po wszystkim, te dane s ju niepotrzebne
	delete[] imageData;

{'fraction_non_alphanumeric': 0.1532689322063136, 'fraction_numerical': 0.012247714335000862, 'mean_word_length': 2.892245720040282, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7207235', 'n_tokens_mistral': 4824, 'n_tokens_neox': 4577, 'n_words': 1259}