Проблема с прозрачностью: SDL_SetTextureBlendMode - PullRequest
0 голосов
/ 28 марта 2020

У меня есть этот файл PNG с прозрачным фоном. Фрагмент прозрачного фона

Я установил Surface , затем tex :

SDL_Texture* m_Tex = SDL_CreateTextureFromSurface(renderer, surface);

И я хочу это текстура имеет эффект мерцания, поэтому я передаю ее setTextureBlendMode function

SDL_SetTextureBlendMode(tex, SDL_BLENDMODE_BLEND);
Uint8 m_Alpha = 255;

Я буду использовать m_Alpha для цели мерцания. Я активирую мигание нажатием определенной кнопки. И это работает нормально. Но почему фон моей текстуры больше не прозрачен после того, как я вернул его к SDL_BLENDMODE_NONE :

SDL_SetTextureBlendMode(tex, SDL_BLENDMODE_NONE);

Фрагмент непрозрачного больше после BLENDMODE_NONE

Есть ли способ снова сделать фон моей текстуры прозрачным? Я имею в виду, что после достаточно исследований я не могу найти какой-либо способ, кроме SDL_SetColorKey . Но SDL_SetColorKey снова нуждается в загруженной поверхности. Это означает только то, что я снова установлю файл PNG на surface , затем на tex . Я думаю, что это не идеальный способ делать это каждый раз, когда я хочу, чтобы tex перестал мигать. Пожалуйста помоги. Спасибо.

1 Ответ

0 голосов
/ 28 марта 2020

SDL_SetTextureBlendMode(tex, SDL_BLENDMODE_NONE); Для рендеринга текстур с помощью Alpha! = 1 вам потребуется режим наложения.

В режиме наложения вы описываете системе Как вы хотите объединить цвет фона с цветом переднего плана .

Вы можете иметь основную идею c из этой темы. SDL2: создание полностью прозрачной текстуры

...