Hello everyone.
I am pretty new to programming and I have started to use c++ with SDL on Xcode.
I used the SDL application Template, and added the SDL.ttf framework to add text to my program. I used code from some tutorials as a start.
Here is my code:
This program should print "Courier 12" to the screen, and wait for keypress to exit program. I used code from: http://www.gamedev.net/page/resources/_/technical/game-programming/sdl--fonts-r1953
So I don´t think the code itself is wrong, i maybe typed something weird.
It compiles fine, and then opens a window. However, it is blank, and it freezes.
GDB says:
Program received signal: “EXC_BAD_ACCESS”.
sharedlibrary apply-load-rules all
I´ve got no idea, please help me!
I am pretty new to programming and I have started to use c++ with SDL on Xcode.
I used the SDL application Template, and added the SDL.ttf framework to add text to my program. I used code from some tutorials as a start.
Here is my code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <SDL/SDL.H>
#include <SDL_ttf/SDL_ttf.h>
void DrawPixel(SDL_Surface *screen, int x, int y,
Uint8 R, Uint8 G, Uint8 B)
{
Uint32 color = SDL_MapRGB(screen->format, R, G, B);
switch (screen->format->BytesPerPixel)
{
case 1: // Assuming 8-bpp
{
Uint8 *bufp;
bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
*bufp = color;
}
break;
case 2: // Probably 15-bpp or 16-bpp
{
Uint16 *bufp;
bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x;
*bufp = color;
}
break;
case 3: // Slow 24-bpp mode, usually not used
{
Uint8 *bufp;
bufp = (Uint8 *)screen->pixels + y*screen->pitch + x * 3;
if(SDL_BYTEORDER == SDL_LIL_ENDIAN)
{
bufp[0] = color;
bufp[1] = color >> 8;
bufp[2] = color >> 16;
} else {
bufp[2] = color;
bufp[1] = color >> 8;
bufp[0] = color >> 16;
}
}
break;
case 4: // Probably 32-bpp
{
Uint32 *bufp;
bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x;
*bufp = color;
}
break;
}
}
void Slock(SDL_Surface *screen)
{
if (SDL_MUSTLOCK(screen))
{
if (SDL_LockSurface(screen) <0)
{
return;
}
}
}
void Sulock(SDL_Surface *screen)
{
if (SDL_MUSTLOCK(screen))
{
SDL_UnlockSurface(screen);
}
}
void DrawScene(SDL_Surface *screen)
{
Slock(screen);
for(int x=0;x<640;x++)
{
for(int y=0;y<480;y++)
{
DrawPixel(screen, x,y,y/2,y/2,x/3);
}
}
Sulock(screen);
SDL_Flip(screen);
}
int main(int argc, char *argv[])
{
using namespace std;
if (SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) <0)
{
printf("Unable to init SDL: %s\n", SDL_GetError());
return 1;
}
atexit(SDL_Quit);
SDL_Surface *screen;
screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
if (screen == NULL)
{
printf("Unable to set 640x480 video: %s\n", SDL_GetError());
}
TTF_Init();
atexit(TTF_Quit);
TTF_Font *fntCourier = TTF_OpenFont("Fonts\\Courier New.ttf", 12);
SDL_Color clrFg = {0,0,255,0};
SDL_Surface *sText = TTF_RenderText_Solid(fntCourier, "Courier 12", clrFg);
SDL_Rect rcDest = {0,0,0,0};
SDL_BlitSurface(sText,NULL, screen,&rcDest);
SDL_FreeSurface(sText);
TTF_CloseFont( fntCourier );
int done=0;
while(done == 0)
{
SDL_Event event;
while ( SDL_PollEvent(&event) )
{
if ( event.type == SDL_QUIT ) { done = 1; }
if ( event.type == SDL_KEYDOWN )
{
if ( event.key.keysym.sym == SDLK_ESCAPE ) { done = 1; }
}
}
DrawScene(screen);
}
return 0;
}
So I don´t think the code itself is wrong, i maybe typed something weird.
It compiles fine, and then opens a window. However, it is blank, and it freezes.
GDB says:
Program received signal: “EXC_BAD_ACCESS”.
sharedlibrary apply-load-rules all
I´ve got no idea, please help me!
Last edited: