Hi,
i'm currently experiencing a really weird problem with SDL2 and maybe one of you is brighter than i am...
Basically, I have this function:
function GetString(fontid: byte; thing: string): TEngineString;
var surf: PSDL_Surface;
begin
Result := EngineString(thing, dispStringXSalt, dispStringDSalt);
if not GameResourceHas(Result, grtTexture) then
begin
// So, why is this method still a catastrophy?
surf := TTF_RenderUTF8_Blended(fonts[fontid], PChar(thing), foregroundColour);
{$IFDEF ENGINEDEBUG}
if surf^.format^.BitsPerPixel = 32 then
{$ENDIF}
GameResourceAdd(GameTextureLoader(Result, surf^.w, surf^.h,
GL_RGBA, GL_UNSIGNED_BYTE, GL_RGBA, surf^.pixels), Result)
{$IFDEF ENGINEDEBUG}
else
raise Exception.Create('invalid pixelformat for font-rendering. ouch.');
{$ENDIF}
SDL_FreeSurface(@surf);
end;
end;
And it raises a sigbus at runtime (inside SDL_SetPixelFormatPalette called from SDL_FreeSurface) ?!
This happens only when debugging.
Doesn't matter if through IDE or with gdb.
If I don't debug, no error occurs and my little simulation works as normal..........
I recently changed the whole method and this is the original:
function GetString(fontid: byte; thing: string): TEngineString;
var width, height: Longint; surf: PSDL_Surface;
begin
Result := EngineString(thing, dispStringXSalt, dispStringDSalt);
if not GameResourceHas(Result, grtTexture) then
begin
// So this method is a catastrophy
TTF_SizeUTF8(fonts[fontid], PChar(thing), @width, @height);
surf := TTF_RenderUTF8_Blended(fonts[fontid], PChar(thing), foregroundColour);
if surf^.format^.BitsPerPixel = 32 then
GameResourceAdd(GameTextureLoader(Result, width, height, GL_RGBA,
GL_UNSIGNED_BYTE, GL_RGBA, surf^.pixels), Result)
else
raise Exception.Create('invalid pixelformat for font-rendering. ouch.');
SDL_FreeSurface(@surf);
end;
end;
Suprisingly, this method does work without raising an error when debugging :-/
But GetString will be called a lot and I want to optimise it.
I am totally puzzled, but I found this: "EDIT: Strange, I recompiled and it worked! EDIT: Recompiled again; it failed. EDIT: I just didn't check the debugger the first time :P"
(here http://www.cplusplus.com/forum/general/59965/)
and this is just how I feel
kind regards, yogo1212