Нанесение изображения на подэкран nds - PullRequest
4 голосов
/ 23 марта 2011

Я совершенно новичок в 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 Ответ

2 голосов
/ 24 марта 2011

В режиме 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;
}
...