Учебное пособие по манипулированию текстурой SDL2 выполнить невозможно — Ленивый Фу http://lazyfoo.net/tutorials/SDL/40_texture_manipulation/index.php

Я играл с проблемой учебника по манипулированию текстурой SDL2 — Lazy Foo Учебник по манипулированию текстурой Lazy Foo SDL2

но это даже не работает.
По-видимому, причина ошибки сегментации связана с форматом поверхности, использованным для создания текстуры, или с чем-то подобным.

Точка крушения 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 );

Может ли кто-нибудь помочь в этом?

С уважением

1

Решение

Nevermind нашел это!

Точка крушения 1 должна быть заменена

formattedSurface = SDL_ConvertSurfaceFormat( loadedSurface, SDL_PIXELFORMAT_RGBA8888, NULL );

Точка сбоя 2 должна быть заменена на:

Uint32 colorKey = SDL_MapRGB( formattedSurface->format, 0, 0xFF, 0xFF );
Uint32 transparent = SDL_MapRGBA( formattedSurface->format, 0XFF, 0XFF, 0XFF, 0xFF );

ура

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; это остаток API SDL 1.2».

Я был предупрежден об этом и некоторых других повторяющихся ошибках, используя флаг компилятора -Weffc ++, а затем проверил вики, чтобы увидеть опции для флагов. Неплохая идея использовать его для предотвращения (невольного) вредных привычек.

Вы, вероятно, должны убедиться, что вы используете относительно новую версию своего набора инструментов и использовать флаги компилятора для c ++ 11. Я нашел эти шаги необходимыми по крайней мере для одного более раннего учебника Lazy Foo SDL2, касающегося новых строковых функций.

Попробуйте запустить отладчик и посмотрите, что именно вызывает сбой. Наблюдение за gWindow с самого начала и через шаг должно быть проницательным. У меня не было проблем с этим. Вы также можете получить странные сбои, если вам не хватает DLL или другого файла, который ожидает исполняемый файл.

Мне было бы интересно узнать ваши спецификации ОС, набор инструментов и версию, версии SDL2 и libs, а также увидеть все ошибки / предупреждения сборки и вывод консоли.

0

По вопросам рекламы [email protected]