Нанесение изображения на подэкран nds
Я абсолютно новичок в libdns. Я пытаюсь изменить образец Graphics\Backgrounds\256_color_bmp для отображения фона на подэкране.
Вот мой код У вас есть идеи, что не хватает для отображения hey_typBitmap на подэкране? Мне уже удалось вывести новое изображение на верхний экран.
#include <nds.h>
#include <stdio.h>
#include "drunkenlogo.h"
#include "hey_typ.h"
int main(void)
{
videoSetMode(MODE_5_2D);
vramSetBankA(VRAM_A_MAIN_BG_0x06000000);
videoSetModeSub(MODE_5_2D);
vramSetBankC(VRAM_C_SUB_BG_0x06200000);
int bg3 = bgInit(3, BgType_Bmp8, BgSize_B8_256x256, 0,0);
dmaCopy(hey_typBitmap, bgGetGfxPtr(bg3), 256*256);
dmaCopy(hey_typPal, BG_PALETTE, 256*2);
int bg2 = bgInit(2, BgType_Bmp8, BgSize_B8_256x256, 0,0);
dmaCopy(drunkenlogoBitmap, bgGetGfxPtr(bg2), 256*256);
dmaCopy(drunkenlogoPal, BG_PALETTE, 256*2);
while(1)swiWaitForVBlank();
return 0;
}
1 ответ
Решение
В режиме 5 DS имеет 3 фоновых слоя и bgInit
с 2 возвращает ссылку на другой слой на том же экране. Если вы хотите использовать слой на подэкране, используйте bgInitSub
,
Есть также 2 палитры; один на главном экране и другой на подэкране. Палитра подэкрана находится в BG_PALETTE_SUB
,
Надеюсь, этот код покажет изображение на втором экране (изменения помечены как /* ! */
):
int main(void)
{
videoSetMode(MODE_5_2D);
vramSetBankA(VRAM_A_MAIN_BG_0x06000000);
videoSetModeSub(MODE_5_2D);
vramSetBankC(VRAM_C_SUB_BG_0x06200000);
int bg3 = bgInit(3, BgType_Bmp8, BgSize_B8_256x256, 0,0);
dmaCopy(hey_typBitmap, bgGetGfxPtr(bg3), 256*256);
dmaCopy(hey_typPal, BG_PALETTE, 256*2);
int bg3sub = bgInitSub(3, BgType_Bmp8, BgSize_B8_256x256, 0,0); /* ! */
dmaCopy(drunkenlogoBitmap, bgGetGfxPtr(bg3sub), 256*256); /* ! */
dmaCopy(drunkenlogoPal, BG_PALETTE_SUB, 256*2); /* ! */
while(1)swiWaitForVBlank();
return 0;
}