Mercurial > sdl-ios-xcode
view src/main/macos/exports/gendef.pl @ 1544:ab1e4c41ab71
Fixed bug #33
Mike Frysinger wrote:
> with libsdl-1.2.9, some games (like bomberclone) started
> segfaulting in Gentoo
[...snip...]
> the last change in the last hunk:
[...snip...]
> if i change the statement to read:
> (table[which].blit_features & GetBlitFeatures()) == GetBlitFeatures()
> bomberclone no longer segfaults on my box
Alex Volkov wrote:
> The test "(table[which].blit_features & GetBlitFeatures()) ==
> table[which].blit_features)" is correct, and the previous
> "(table[which].cpu_mmx == SDL_HasMMX())" was actually broken.
I think there is potentially a slightly different cause of the above problem.
During the introduction of the Altivec code, the blit_table struct field
'alpha' got changed from a straightforward enum to a bitmask, which makes
perfect sense by itself. However, now the table driven blitter selection code
in SDL_CalculateBlitN() can choose the wrong blitters when searching for a
NO_ALPHA blitter because of the following code:
int a_need = 0;
...
(a_need & table[which].alpha) == a_need &&
When searching through the normal_blit_2[] table, a SET_ALPHA blitter (like
Blit_RGB565_ARGB8888) can now be selected instead of a NO_ALPHA one, causing
alpha channel bits to appear in a non-alpha destination surface. I suppose this
could theoretically be an indirect cause of the segfault mentioned above.
I *think* this can be fixed by changing to
int a_need = NO_ALPHA;
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 15 Mar 2006 15:47:49 +0000 |
parents | 84cecd0b64b4 |
children | da1ef6acde9e |
line wrap: on
line source
#!/usr/bin/perl # # Program to take a set of header files and generate DLL export definitions # Special exports to ignore for this platform while ( ($file = shift(@ARGV)) ) { if ( ! defined(open(FILE, $file)) ) { warn "Couldn't open $file: $!\n"; next; } $printed_header = 0; $file =~ s,.*/,,; while (<FILE>) { if ( / DECLSPEC.* SDLCALL ([^\s\(]+)/ ) { if ( not $exclude{$1} ) { print "\t$1\n"; } } } close(FILE); } # Special exports to include for this platform print "\tSDL_putenv\n"; print "\tSDL_getenv\n"; print "\tSDL_qsort\n"; print "\tSDL_revcpy\n"; print "\tSDL_strlcpy\n"; print "\tSDL_strlcat\n"; print "\tSDL_strdup\n"; print "\tSDL_strrev\n"; print "\tSDL_strupr\n"; print "\tSDL_strlwr\n"; print "\tSDL_ltoa\n"; print "\tSDL_ultoa\n"; print "\tSDL_strcasecmp\n"; print "\tSDL_strncasecmp\n"; print "\tSDL_snprintf\n"; print "\tSDL_vsnprintf\n"; print "\tSDL_iconv\n"; print "\tSDL_iconv_string\n"; print "\tSDL_InitQuickDraw\n";