Я пытаюсь альфа-смешивать спрайты и фоны с помощью devkitPro (включая libnds, libarm и т. д.).
Кто-нибудь знает как это сделать?
Прошло время длинный с тех пор, как я занимался программированием GBA, но, насколько я помню, DS поддерживает большую часть (если не все) того, что поддерживает GBA. Ссылка Этот содержит раздел о том, как выполнять альфа-смешивание для GBA (раздел 13.2). Я не знаю, есть ли способ сделать это, специфичный для DS, но это должно сработать для вас.
Спрайты на DS могут быть смешаны альфа с помощью регистры управления смешением. TONC предоставляет необходимую информацию для работы смешивания на главном экране, потому что расположение регистров одинаковое. При альфа-смешивании на подэкране используется один и тот же процесс с разными регистрами со смещением 1000 часов.
Вы увидите регистры REG_BLDMOD
, REG_COLV
и REG_COLY
для главного экрана и REG_BLDMOD_SUB
, REG_COLV_SUB
и REG_COLY_SUB
для вспомогательного экрана.
Также помните, что вам потребуется изменить графический режим спрайта, чтобы включить смешивание для каждого спрайта.
В качестве общей ссылки я однажды написал небольшая запись в блоге об этой проблеме. По сути, вы сначала должны определить, какой слой смешивается с другими слоями. Насколько мне известно,
Для спрайты, в частности у вас есть 3 способа добиться альфа-смешения в зависимости от того, что вам нужно и что вы «готовы заплатить» за это:
BLEND_SRC_SPRITE
в REG_BLDCNT[_SUB]
... не очень полезно.ATTR0_TYPE_BLENDED
. Уровень смешивания будет одинаковым для всех спрайтов (и слоев).ATTR2_PALETTE()
спрайтов GBA бесполезно и было переработано в ATTR2_ALPHA
.