Sign in to follow this  
Noegddgeon

True Type Unknown Error

Recommended Posts

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
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

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