Sign in to follow this  
Noegddgeon

True Type Unknown Error

Recommended Posts

Noegddgeon    134
Hello, everybody. I downloaded and installed the True Type font library for use with SDL and tried to compile and run a tutorial on Lazy Foo's website. Here is the source code for the program:
//The headers
#include "SDL.h"
#include "SDL_image/SDL_image.h"
#include "SDL_ttf/SDL_ttf.h"
#include <string>
#include <iostream>

using namespace std;

//Screen attributes
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 24;

//The surfaces
SDL_Surface *background = NULL;
SDL_Surface *message = NULL;
SDL_Surface *screen = NULL;

//The event structure
SDL_Event event;

//The font that's going to be used
TTF_Font *font = NULL;

//The color of the font
SDL_Color textColor = {255, 255, 255};

SDL_Surface *load_image(std::string filename)
{
	//The image that's loaded
	SDL_Surface* loadedImage = NULL;
	
	//The optimized surface to be used
	SDL_Surface* optimizedImage = NULL;
	
	//Load the image
	loadedImage = IMG_Load(filename.c_str());
	
	//If the image loaded
	if (loadedImage != NULL)
	{
		//Create an optimized surface
		optimizedImage = SDL_DisplayFormat(loadedImage);
		
		//Free the old surface
		SDL_FreeSurface(loadedImage);
		
		//If the surface was optimized
		if (optimizedImage != NULL)
		{
			//Color key surface
			SDL_SetColorKey(optimizedImage, SDL_SRCCOLORKEY,
			SDL_MapRGB(optimizedImage->format, 0, 0xFF, 0xFF));
		}
	}
	
	// Return the optimized surface
	return optimizedImage;
}

void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination,
SDL_Rect* clip = NULL)
{
	//Holds offsets
	SDL_Rect offset;
	
	//Get offsets
	offset.x = x;
	offset.y = y;
	
	//Blit
	SDL_BlitSurface(source, clip, destination, &offset);
}

bool init()
{
	//Initialize all SDL subsystems
	if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
	{
		cout << "Error: " << SDL_GetError() << endl;
		return false;
	}
	
	//Set up the screen
	screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE);
	
	//If there was an error in setting up the screen
	if (screen == NULL)
	{
		cout << "Error: " << SDL_GetError() << endl;
		return false;
	}
	
	//Initialize SDL_ttf
	if (TTF_Init() == -1)
	{
		cout << "Error: " << SDL_GetError() << endl;
		return false;
	}
	
	//Set the window caption
	SDL_WM_SetCaption("TTF Test", NULL);
	
	//If everything initialized fine
	return true;
}

bool load_files()
{
	//Load the background image
	background = load_image("background.png");
	
	//Open the font
	font = TTF_OpenFont("lazy.ttf", 28);
	
	//If there was a problem in loading the background
	if (background == NULL)
	{
		cout << "Error: " << SDL_GetError() << endl;
		return false;
	}
	
	//If there was an error in loading the font
	if (font == NULL)
	{
		cout << "Error: " << SDL_GetError() << endl;
		return false;
	}
	
	//If everything loaded fine
	return false;
}

void clean_up()
{
	//Free the surfaces
	SDL_FreeSurface(background);
	SDL_FreeSurface(message);
	
	//Close the font that was used
	TTF_CloseFont(font);
	
	//Quit SDL_ttf
	TTF_Quit();
	
	//Quit SDL
	SDL_Quit();
}

int main(int argc, char* args[])
{
	//Quit flag
	bool quit = false;
	
	//Initialize
	if (init() == false)
	{
		cout << "Error: " << SDL_GetError() << endl;
		return 1;
	}
	
	//Load the files
	if (load_files() == false)
	{
		cout << "Error: " << SDL_GetError() << endl;
		return 1;
	}
	
	//Render the text
	message = TTF_RenderText_Solid(font, "The quick brown fox jumps over the lazy dog",
	textColor);
	
	//If there was an error in rendering the text
	if (message == NULL)
	{
		cout << "Error: " << SDL_GetError() << endl;
		return 1;
	}
	
	//Apply the images to the screen
	apply_surface(0, 0, background, screen);
	apply_surface(0, 150, message, screen);
	
	//Update the screen
	if (SDL_Flip(screen) == -1)
	{
		cout << "Error: " << SDL_GetError() << endl;
		return 1;
	}
	
	//While the user hasn't quit
	while (quit == false)
	{
		//While there's events to handle
		while (SDL_PollEvent(&event))
		{
			//If the user has Xed out the window
			if (event.type == SDL_QUIT)
			{
				//Quit the program
				quit = true;
			}
		}
	}
	
	//Free surfaces and font then quit SDL_ttf and SDL
	clean_up();
	
	return 0;
}


It compiles, it runs, but it immediately quits upon starting and it doesn't send me an error message back.... it only says "Error: ", thus signifying that there is indeed an error where I placed an SDL_GetError() test, though an unnamed or unidentified one, sadly. I would appreciate if anyone could compile the code themselves to help me pinpoint its location. :] Thank you all very much for your help. PS. I'm using XCode 3.1.4 to compile. After some debugging, I'm fairly certain that the error lies in the load_files() function at its point of deployment in main(). However, I am still unable to pinpoint what exactly the error may be. Thank you. Colton

Share this post


Link to post
Share on other sites
fcoelho    389
It's just a logic error. When you call load_files,
if (load_files() == false)
{
cout << "Error: " << SDL_GetError() << endl;
return 1;
}
you test for false, and load_files returns false if everything went right:
bool load_files()
{
...

//If everything loaded fine
return false;
}
I bet you wanted it to return true if everything was ok?

Share this post


Link to post
Share on other sites
Noegddgeon    134
Wowww.... haha.... can't believe I let that one slip. :p

Thank you very much for finding and showing me that... the program works perfectly now. :] I appreciate your help, fcoelho. :]

Colton

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this