Esempio n. 1
0
int main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(600,600);

    glutCreateWindow("GL");

    glutDisplayFunc(render);
    glutIdleFunc(updateTimer);
    glutTimerFunc(100, update, 0);
    glutKeyboardFunc(processKeys);

    g_dirtTexture = loadTexture("dirt.raw", 128, 128);
    g_grassTexture = loadTexture("grass.raw", 128, 128);
    ASSERT(g_dirtTexture);
    ASSERT(g_grassTexture);

    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
    glEnable(GL_DEPTH_TEST);
    glDisable(GL_BLEND);
    glutMainLoop();

    freeTexture(g_dirtTexture);
    freeTexture(g_grassTexture);

    return 0;
}
Esempio n. 2
0
GLAnalyzer3::~GLAnalyzer3()
{
    freeTexture( ballTexture );
    freeTexture( gridTexture );
    delete leftPaddle;
    delete rightPaddle;
    balls.clear();
}
Esempio n. 3
0
//Note:
//Code adapted from NeheTutorials.
bool Texture::loadTextureFromBMP( const char *path )                   // Creates Texture From A Bitmap File
{
	//Check if there is already a texture, and if so, free it.
	freeTexture();

    HBITMAP hBMP;                                                       // Handle Of The Bitmap
    BITMAP  BMP;                                                        // Bitmap Structure
 
    glGenTextures(1, &mTextureID);                                           // Create The Texture
    hBMP=(HBITMAP)LoadImage(GetModuleHandle(NULL), path, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE );
 
    if (!hBMP)                                                          // Does The Bitmap Exist?
        return false;                                                   // If Not Return False
 
    GetObject(hBMP, sizeof(BMP), &BMP);                                 // Get The Object
                                                                        // hBMP:        Handle To Graphics Object
                                                                        // sizeof(BMP): Size Of Buffer For Object Information
                                                                        // &BMP:        Buffer For Object Information
 
    glPixelStorei(GL_UNPACK_ALIGNMENT, 4);                              // Pixel Storage Mode (Word Alignment / 4 Bytes)
 
    // Typical Texture Generation Using Data From The Bitmap
    glBindTexture(GL_TEXTURE_2D, mTextureID);                                // Bind To The Texture ID

    setFilters();
	facilitateWrap();

    glTexImage2D(GL_TEXTURE_2D, 0, 3, BMP.bmWidth, BMP.bmHeight, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, BMP.bmBits);
 
    DeleteObject(hBMP);                                                 // Delete The Object
 
    return true;                                                        // Loading Was Successful
}
Esempio n. 4
0
bool SDLWrapper::loadImageFromFile(std::string path)
{
	// Get rid of previous texture
	freeTexture();
	// Create the final Texture
	SDL_Texture* newTexture = NULL;

	SDL_Surface* loadedSurface = IMG_Load( path.c_str());

	if (loadedSurface == NULL)
	{
		printf("The image could not be loaded %s| ERR: %s\n",path.c_str(),SDL_GetError());
		
	}
	else
	{
		newTexture = SDL_CreateTextureFromSurface( RENDERER, loadedSurface);

		if (newTexture == NULL)
		{
			printf("Failed to convert surface | ERR: %s", SDL_GetError());
			
		}
		else
		{
			WIDTH = loadedSurface->w;
			HEIGHT = loadedSurface->h;
		}
		SDL_FreeSurface(loadedSurface);
	}

    TEXTURE = newTexture;
	return TEXTURE != NULL;
}
Esempio n. 5
0
bool Texture::loadTextureFromPixels32( GLuint* pixels, GLuint width, GLuint height )
{
	//Check if there is already a texture, and if so, free it.
	freeTexture();

	//Preemptively set width and height.
	mSize.set(width, height);

	//Generate texture ID.
	glGenTextures( 1, &mTextureID );

	//Bind texture ID.
	glBindTexture( GL_TEXTURE_2D, mTextureID );

	//Generate texture from array given, assuming 32-bit (RGBA).
	glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels );

	setFilters();
	facilitateWrap();

	//Unbind texture.
	glBindTexture( GL_TEXTURE_2D, NULL );

	//Check for error.
	GLenum error = glGetError();
	if( error != GL_NO_ERROR )
	{
		printf( "Error loading texture from %p pixels! %s\n", pixels, gluErrorString( error ) );
		return false;
	}
	return true;
}
Esempio n. 6
0
void VisualText::setFont(FontProvider::FontType type, int32 customFontIndex) {
	if (type != _fontType || customFontIndex != _fontCustomIndex) {
		freeTexture();
		_fontType = type;
		_fontCustomIndex = customFontIndex;
	}
}
Esempio n. 7
0
bool Texture::loadTextureFromPixels32( GLuint* pixels, GLuint width, GLuint height ){
    //Free texture if it exists
    freeTexture();

    //Get texture dimensions
    mTextureWidth = width;
    mTextureHeight = height;
    //Generate texture ID
	glGenTextures( 1, &mTextureID );

	//Bind texture ID
	glBindTexture( GL_TEXTURE_2D, mTextureID );
	//Generate texture
	glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels );
	//Set texture parameters
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);

	//Unbind texture
	glBindTexture( GL_TEXTURE_2D, (GLuint)NULL );

	//Check for error
	GLenum error = glGetError();
	if( error != GL_NO_ERROR ){
		//printf( "Error loading texture from %p pixels! %s\n", pixels, gluErrorString( error ) );
		return false;
	}

	return true;
}
LTexture::~LTexture()
{
    //Free texture data if needed
    freeTexture();

    //Free VBO and IBO if needed
    freeVBO();
}
Esempio n. 9
0
void VisualText::setColor(const Color &color) {
	if (_color == color) {
		return;
	}

	freeTexture();
	_color = color;
}
Esempio n. 10
0
	void IrrlichtTexture::loadFromFile(const String& filename, const String& resourceGroup)
	{
		freeTexture();
		driver->setTextureCreationFlag(irr::video::ETCF_CREATE_MIP_MAPS,true);
		tex=driver->getTexture(filename.c_str());
		
		tex->grab();
	}
Esempio n. 11
0
void VisualText::setBackgroundColor(const Color &color) {
	if (color == _backgroundColor) {
		return;
	}

	freeTexture();
	_backgroundColor = color;
}
Esempio n. 12
0
SDLWrapper::~SDLWrapper()
{
	// Deallocate the window
	free();
	// Deallocate the texture
	freeTexture();
	IMG_Quit();
	SDL_Quit();
}
Esempio n. 13
0
void freeMaterial(Material *mat) {

    for (uint32 i = 0; i < mat->texCount; ++i) {
        freeTexture(mat->textures[i]);
        mat->textures[i] = NULL;
    }

    free(mat->textures);
    free(mat);
}
Esempio n. 14
0
bool LFTexture::loadFromFile(SDL_Renderer* theRenderer, std::string fileName, SDL_Point* transparentCoordinate)
{
	//Get rid of preexisting texture
	freeTexture();

	//The final texture
	SDL_Texture* newTexture = nullptr;

	//Load image at specified path
	SDL_Surface* loadedSurface = IMG_Load( fileName.c_str() );
	
	if( loadedSurface == nullptr )
	{
		std::cout << "Unable to load image "<< fileName.c_str() << "! SDL_image Error: " << IMG_GetError() << std::endl;
	}
	else
	{
		Uint8 ri = 0xFF;
		Uint8 gi = 0xFF;
		Uint8 bi = 0xFF;
		
		if (transparentCoordinate != nullptr)
		{
			// get the rgb value from the pixel at the co-ordinates
			Uint32 px = getPixel(loadedSurface, transparentCoordinate->x, transparentCoordinate->y);
			SDL_GetRGB(px, loadedSurface->format, &ri, &gi, &bi);
		}
		
		//Color key image
		SDL_SetColorKey(loadedSurface, SDL_TRUE, SDL_MapRGB( loadedSurface->format, ri, gi, bi));

		//Create texture from surface pixels
        newTexture = SDL_CreateTextureFromSurface( theRenderer, loadedSurface );
		if( newTexture == nullptr )
		{
			std::cout << "Unable to create texture from " << fileName.c_str() << "! SDL Error: " << SDL_GetError() << std::endl;
		}
		else
		{
			//Get image dimensions
			m_width = loadedSurface->w;
			m_height = loadedSurface->h;
		}

		//Get rid of old loaded surface
		SDL_FreeSurface( loadedSurface );
	}

	//Return success
	m_Texture = newTexture;
	return m_Texture != NULL;	
}
Esempio n. 15
0
void ServerConnectionView::showWaitingRoom() {
	if (!init()) {
		return;
	}

	SDL_Rect formTitleRect = { 0, TEXT_SPACING, 0, 0 };
	SDL_Texture* formTitle = renderText("Esperando conexion de los clientes...", &formTitleRect);
	formTitleRect.x = (WINDOW_WIDTH - formTitleRect.w) / 2;



	SDL_Rect formButtonRect = { 0, formTitleRect.y + formTitleRect.h + 2 * TEXT_SPACING, 0, 0 };
		SDL_Texture* formButton = renderText("Comenzar Partida", &formButtonRect);
		formButtonRect.x = (WINDOW_WIDTH - formButtonRect.w) / 2;
		submitButton = {
			formButtonRect.x - TEXT_SPACING / 2,
			formButtonRect.y - TEXT_SPACING / 2,
			formButtonRect.w + TEXT_SPACING,
			formButtonRect.h + TEXT_SPACING
		};
	while (!shouldQuit) {
			// Update texts
			pullChanges();

			// Clear screen
			SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
			SDL_RenderClear(renderer);

			// Draw
			SDL_RenderCopy(renderer, this->backgroundTexture, NULL, NULL);

			SDL_RenderCopy(renderer, formTitle, NULL, &formTitleRect);



			SDL_RenderCopy(renderer, formButton, NULL, &formButtonRect);
			SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
			SDL_RenderDrawRect(renderer, &submitButton);

			// Update screen
			SDL_RenderPresent(renderer);

			SDL_Delay(50);
		}

		// Free memory
		freeTexture(formButton);
		// Stop capturing the keyboard events
		SDL_StopTextInput();

		quit();
}
Esempio n. 16
0
Texture* HeightmapCache::getFreeTexture(const unsigned __int64& newId)
{
	if (mFreeTextures.size() == 0)
	{
		freeTexture();
	}

	Texture* back = mFreeTextures.back().TexturePtr;
	mFreeTextures.pop_back();

	mActiveTextures[newId] = back;

	return back;
}
Esempio n. 17
0
void cleanup()
{
    freeTexture();
    checkCudaErrors(cudaGraphicsUnregisterResource(cuda_pbo_resource));

    glDeleteBuffersARB(1, &pbo);

#if USE_BUFFER_TEX
    glDeleteTextures(1, &bufferTex);
    glDeleteProgramsARB(1, &fprog);
#else
    glDeleteTextures(1, &displayTex);
#endif
}
Esempio n. 18
0
void GLTexture::loadToVRAM() {
    // If we are bound....
    if (textureID == 0) {
        freeTexture();
        if (rawData != NULL) {
            glGenTextures(1, &textureID);  //Grab a texture ID
            bind();
            glTexImage2D(GL_TEXTURE_2D, 0, pixFMT, width, height, 0, pixFMT,
                         GL_UNSIGNED_BYTE, (GLvoid*) rawData);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        }
    }
}
 void re_cManagerTexture::freeAll(void)
 {
     re_sTexture* t_texture = m_head;
     while (t_texture != nullptr)
     {
         m_head = m_head->next;
         if (t_texture->ID != 0)
             freeTexture(t_texture->ID);
         delete  t_texture;
         t_texture = nullptr;
         t_texture = m_head;
     }
     m_head = nullptr;
     m_tail = nullptr;
 }
Esempio n. 20
0
void ResourceManager::unloadResources() {
	for (auto model = models_.begin(); model != models_.end(); model++) {
    freeModel(model->second);
	}
  for (auto texture = textures_.begin(); texture != textures_.end(); texture++) {
    freeTexture(texture->second);
  }
  for (auto shader = shaders_.begin(); shader != shaders_.end(); shader++) {
    delete (shader->second);
  }

  models_.clear();
  textures_.clear();
  shaders_.clear();
}
Esempio n. 21
0
	void IrrlichtTexture::loadFromFile(const String& filename, const String& resourceGroup)
	{
		freeTexture();

        RawDataContainer texFile;
        System::getSingleton().getResourceProvider()->loadRawDataContainer(filename, texFile, resourceGroup);

        IrrlichtMemoryFile imf(filename, texFile.getDataPtr(), texFile.getSize());

		driver->setTextureCreationFlag(irr::video::ETCF_CREATE_MIP_MAPS,true);
		tex=driver->getTexture(&imf);
		tex->grab();

        // unload file data buffer
        System::getSingleton().getResourceProvider()->unloadRawDataContainer(texFile);
        updateCachedScaleValues();
	}
bool LTexture::loadTextureFromPixels32( GLuint* pixels, GLuint imgWidth, GLuint imgHeight, GLuint texWidth, GLuint texHeight )
{
    //Free texture data if needed
    freeTexture();

    //Get image dimensions
    mImageWidth = imgWidth;
    mImageHeight = imgHeight;
    mTextureWidth = texWidth;
    mTextureHeight = texHeight;

    //Generate texture ID
    glGenTextures( 1, &mTextureID );

    //Bind texture ID
    glBindTexture( GL_TEXTURE_2D, mTextureID );

    //Generate texture
    glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, mTextureWidth, mTextureHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels );

    //Set texture parameters
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, DEFAULT_TEXTURE_WRAP );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, DEFAULT_TEXTURE_WRAP );

    //Unbind texture
    glBindTexture( GL_TEXTURE_2D, NULL );

    //Check for error
    GLenum error = glGetError();
    if( error != GL_NO_ERROR )
    {
        printf( "Error loading texture from %p pixels! %s\n", pixels, gluErrorString( error ) );
        return false;
    }

    //Generate VBO
    initVBO();

    //Set pixel format
    mPixelFormat = GL_RGBA;

    return true;
}
Esempio n. 23
0
bool JTexture::loadPixelsFromFile(std::string path)
{
	//deallocate previous texture data
	freeTexture();

	bool pixelsLoaded = false;

	ILuint imgID = 0;
	ilGenImages(1, &imgID);
	ilBindImage(imgID);

	ILboolean success = ilLoadImage(path.c_str());

	if(success == IL_TRUE)
	{
		success = ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
		
		if(success == IL_TRUE)
		{
			GLuint imgWidth = (GLuint)ilGetInteger(IL_IMAGE_WIDTH);
			GLuint imgHeight = (GLuint)ilGetInteger(IL_IMAGE_HEIGHT);
			
			GLuint size = imgWidth * imgHeight;
			mPixels = new GLuint[size];

			mTextureWidth = imgWidth;
			mTextureHeight = imgHeight;

			memcpy(mPixels, ilGetData(), size * 4);
			pixelsLoaded = true;
		}

		ilDeleteImages(1, &imgID);
	}

	if(!pixelsLoaded)
	{
		printf("Unable to load %s\n", path.c_str());
	}

	return pixelsLoaded;
}
Esempio n. 24
0
	void IrrlichtTexture::loadFromMemory(const void* buffPtr, 
		uint buffWidth, uint buffHeight)
	{
		freeTexture();
		
		irr::core::dimension2d<irr::s32> dim(buffWidth,buffHeight);
		irr::core::stringc name=getUniqueName();

		driver->setTextureCreationFlag(irr::video::ETCF_CREATE_MIP_MAPS,true);
		tex=driver->addTexture(dim,name.c_str(),irr::video::ECF_A8R8G8B8);
		
		if(irr::video::ECF_A8R8G8B8==tex->getColorFormat()) // paranoid!
		{
			irr::u32* tt=(irr::u32*)tex->lock(); 
			irr::core::dimension2d<irr::s32> d=tex->getSize();
			memcpy(tt,buffPtr,d.Width*d.Height*sizeof(CEGUI::ulong));
			tex->unlock();
		}
		tex->grab();
	}
Esempio n. 25
0
void cleanup()
{
    freeTexture();
    checkCudaErrors(cudaGraphicsUnregisterResource(cuda_pbo_resource));

    glDeleteBuffersARB(1, &pbo);

#if USE_BUFFER_TEX
    glDeleteTextures(1, &bufferTex);
    glDeleteProgramsARB(1, &fprog);
#else
    glDeleteTextures(1, &displayTex);
#endif

    sdkDeleteTimer(&timer);

    // cudaDeviceReset causes the driver to clean up all state. While
    // not mandatory in normal operation, it is good practice.  It is also
    // needed to ensure correct operation when the application is being
    // profiled. Calling cudaDeviceReset causes all profile data to be
    // flushed before the application exits
    cudaDeviceReset();
}
Esempio n. 26
0
void Texture::loadCheckerboard()
{
	freeTexture();

	glGenTextures(1, &mTextureID);

	glBindTexture(GL_TEXTURE_2D, mTextureID);

	float pixels[] = {
    0.0f, 0.0f, 0.0f,   1.0f, 1.0f, 1.0f,
    1.0f, 1.0f, 1.0f,   0.0f, 0.0f, 0.0f
	};

	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_FLOAT, pixels);

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

	//glGenerateMipmap(GL_TEXTURE_2D);

	setFilters();
	facilitateWrap();
}
Esempio n. 27
0
	void IrrlichtTexture::loadFromMemory(const void* buffPtr, 
		uint buffWidth, uint buffHeight, PixelFormat pixelFormat)
	{
		freeTexture();
		
		irr::core::dimension2d<irr::s32> dim(buffWidth,buffHeight);
		irr::core::stringc name=getUniqueName();

		driver->setTextureCreationFlag(irr::video::ETCF_CREATE_MIP_MAPS,true);

        unsigned int pixelSize;
        irr::video::ECOLOR_FORMAT texFormat;

        switch(pixelFormat)
        {
            case PF_RGB:
                pixelSize = 3;
                texFormat = irr::video::ECF_R8G8B8;
                break;
            case PF_RGBA:
                pixelSize = 4;
                texFormat = irr::video::ECF_A8R8G8B8;
                break;
        }

		tex=driver->addTexture(dim,name.c_str(), texFormat);
		
		if(texFormat == tex->getColorFormat()) // paranoid!
		{
			irr::u32* tt=(irr::u32*)tex->lock(); 
			irr::core::dimension2d<irr::s32> d=tex->getSize();
			memcpy(tt,buffPtr,d.Width*d.Height*pixelSize);
			tex->unlock();
		}
		tex->grab();
        updateCachedScaleValues();
	}
LTexture::~LTexture()
{
    //Free texture data if needed
    freeTexture();
}
Esempio n. 29
0
JTexture::~JTexture(void)
{
	freeTexture();
}
Esempio n. 30
0
void ServerConnectionView::showForm() {
	if (!init()) {
		return;
	}

	SDL_Rect formTitleRect = { 0, TEXT_SPACING, 0, 0 };
	SDL_Texture* formTitle = renderText("Eligiendo objetivo de la partida...", &formTitleRect);
	formTitleRect.x = (WINDOW_WIDTH - formTitleRect.w) / 2;

	SDL_Rect formButtonkillAllRect = { TEXT_SPACING, formTitleRect.y + formTitleRect.h + TEXT_SPACING * 2, 0, 0 };
	SDL_Texture* formButtonkillAll = renderText("Kill All", &formButtonkillAllRect);
	formButtonkillAllRect.x = formButtonkillAllRect.x + formButtonkillAllRect.w;
	killAllButton = {
		formButtonkillAllRect.x - TEXT_SPACING / 2,
		formButtonkillAllRect.y - TEXT_SPACING / 2,
		formButtonkillAllRect.w + TEXT_SPACING ,
		formButtonkillAllRect.h + TEXT_SPACING
	};

	SDL_Rect formButtonFlagRect = { formButtonkillAllRect.x + formButtonkillAllRect.w, formTitleRect.y + formTitleRect.h + TEXT_SPACING * 2,
			0, 0 };
	SDL_Texture* formButtonFlag = renderText("Captura la bandera", &formButtonFlagRect);
	formButtonFlagRect.x = formButtonFlagRect.x + formButtonkillAllRect.w;
	flagButton = {
		formButtonFlagRect.x - TEXT_SPACING / 2,
		formButtonFlagRect.y - TEXT_SPACING / 2,
		formButtonFlagRect.w + TEXT_SPACING ,
		formButtonFlagRect.h + TEXT_SPACING
	};

	SDL_Rect formButtonKingRect =
			{ formButtonFlagRect.x + formButtonFlagRect.w, formTitleRect.y + formTitleRect.h + TEXT_SPACING * 2, 0, 0 };
	SDL_Texture* formButtonKing = renderText("Matar al rey", &formButtonKingRect);
	formButtonKingRect.x = formButtonKingRect.x + +formButtonkillAllRect.w;
	kingButton = {
		formButtonKingRect.x - TEXT_SPACING / 2,
		formButtonKingRect.y - TEXT_SPACING / 2,
		formButtonKingRect.w + TEXT_SPACING ,
		formButtonKingRect.h + TEXT_SPACING
	};

	SDL_Rect formButtonRect = { 0, formButtonKingRect.y + formButtonKingRect.h + 2 * TEXT_SPACING, 0, 0 };
	SDL_Texture* formButton = renderText("Levantar Servidor", &formButtonRect);
	formButtonRect.x = (WINDOW_WIDTH - formButtonRect.w) / 2;
	submitButton = {
		formButtonRect.x - TEXT_SPACING / 2,
		formButtonRect.y - TEXT_SPACING / 2,
		formButtonRect.w + TEXT_SPACING,
		formButtonRect.h + TEXT_SPACING
	};
	while (!shouldQuit) {
		// Update texts
		pullChanges();

		// Clear screen
		SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
		SDL_RenderClear(renderer);

		// Draw
		SDL_RenderCopy(renderer, this->backgroundTexture, NULL, NULL);

		SDL_RenderCopy(renderer, formTitle, NULL, &formTitleRect);

		SDL_RenderCopy(renderer, formButtonkillAll, NULL, &formButtonkillAllRect);
		if (this->objetivo == KILL_ALL) {
			SDL_SetRenderDrawColor(renderer, 0xFF, 0x66, 0x00, 0x00);
			SDL_RenderDrawRect(renderer, &killAllButton);
		} else {
			SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
			SDL_RenderDrawRect(renderer, &killAllButton);
		}
		SDL_RenderCopy(renderer, formButtonFlag, NULL, &formButtonFlagRect);
		if (this->objetivo == FLAG) {
			SDL_SetRenderDrawColor(renderer, 0xFF, 0x66, 0x00, 0x00);
			SDL_RenderDrawRect(renderer, &flagButton);
		} else {
			SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
			SDL_RenderDrawRect(renderer, &flagButton);
		}
		SDL_RenderCopy(renderer, formButtonKing, NULL, &formButtonKingRect);
		if (this->objetivo == KING) {
			SDL_SetRenderDrawColor(renderer, 0xFF, 0x66, 0x00, 0x00);
			SDL_RenderDrawRect(renderer, &kingButton);
		} else {
			SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
			SDL_RenderDrawRect(renderer, &kingButton);
		}

		SDL_RenderCopy(renderer, formButton, NULL, &formButtonRect);
		SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
		SDL_RenderDrawRect(renderer, &submitButton);

		// Update screen
		SDL_RenderPresent(renderer);

		SDL_Delay(50);
	}

	// Free memory
	freeTexture(formTitle);
	freeTexture(formButtonkillAll);

	freeTexture(formButtonFlag);
	freeTexture(formButtonKing);
	freeTexture(formButton);

	quit();
}