SDL2纹理操作教程无法执行 - Lazy Foo http://lazyfoo.net/tutorials/SDL/40_texture_manipulation/index.php

时间:2015-07-04 12:47:31

标签: c++ textures sdl surface

我一直在玩SDL2纹理操作教程问题 - Lazy Foo SDL2 Lazy Foo Texture Manipulation Tutorial

但它甚至没有运行。 显然,分割错误的原因与用于创建纹理的表面格式有关。

崩溃点1:

SDL_Surface* formattedSurface = SDL_ConvertSurface( loadedSurface, SDL_GetWindowSurface( gWindow )->format, NULL );

崩溃点2:

//Map colors
Uint32 colorKey = SDL_MapRGB( SDL_GetWindowSurface( gWindow )->format, 0, 0xFF, 0xFF );
Uint32 transparent = SDL_MapRGBA( SDL_GetWindowSurface( gWindow )->format, 0xFF, 0xFF, 0xFF, 0x00 );

有人可以提供帮助吗?

此致

2 个答案:

答案 0 :(得分:0)

没关系找到它!

崩溃点1需要替换为

make
make LEGACY=true
make ZLIB=false GMP=false READLINE=false LPSOPT=opt-gccold OPT=opt-gccold

崩溃点2需要替换为:

formattedSurface = SDL_ConvertSurfaceFormat( loadedSurface, SDL_PIXELFORMAT_RGBA8888, NULL );

干杯

答案 1 :(得分:0)

我假设您正在谈论第119行?

//Convert surface to display format
SDL_Surface* formattedSurface = SDL_ConvertSurface( loadedSurface, SDL_GetWindowSurface( gWindow )->format, NULL );

您不需要像第一个解决方法那样手动指定像素格式,但公平地说,Lazy没有正确调用SDL_ConvertSurface,我想知道是否这样做了是什么导致了你的问题。

正确的语法,如SDL Wiki所示,是:

SDL_Surface* SDL_ConvertSurface(SDL_Surface*           src,
                                const SDL_PixelFormat* fmt,
                                Uint32                 flags)

另请注意,第三个参数,标志," [...]未使用,应设置为0;这是SDL 1.2"

的剩余部分

我通过使用-Weffc ++编译器标志警告了这个以及其他一些重复的错误,然后检查了wiki以查看标志的选项。使用它来防止(不知不觉)坏习惯并不是一个坏主意。

您应该确保使用相对较新版本的工具链,并使用c ++ 11的编译器标志。关于新的字符串函数,我找到了至少一个早期的Lazy Foo SDL2教程所需的步骤。

尝试并运行调试器,看看究竟是什么导致了崩溃。从一开始就观察gWindow并逐步完成应该是富有洞察力的。 FWIW,我对此没有任何问题。如果您错过了可执行文件所期望的DLL或其他文件,您也会遇到奇怪的崩溃。

我很想知道你的操作系统规范,工具链和版本,SDL2和libs版本,还要看到任何构建错误/警告和控制台输出。