Combinando 3D eo modo framebuffer no DS
-
06-07-2019 - |
Pergunta
A documentação implica que você pode ter de renderização 3D ou modo framebuffer, e cada um apenas para a exibição ativa. Existe alguma maneira para tornar 3D para uma tela e framebuffer para o outro?
Solução
Bem, eu ouvi que há uma funcionalidade de captura de tela que permite desenhar em 3D no motor sub (tela inferior), então eu olhei para cima e encontrei um exemplo .
Infelizmente as macros DCAP
não parece ser documentado, então eu tinha um olhar para os define reais NDS / ARM9 / video.h :
// Display capture control
#define REG_DISPCAPCNT (*(vu32*)0x04000064)
#define REG_DISP_MMEM_FIFO (*(vu32*)0x04000068)
#define DCAP_ENABLE BIT(31)
#define DCAP_MODE(n) (((n) & 3) << 29)
#define DCAP_DST(n) (((n) & 3) << 26)
#define DCAP_SRC(n) (((n) & 3) << 24)
#define DCAP_SIZE(n) (((n) & 3) << 20)
#define DCAP_OFFSET(n) (((n) & 3) << 18)
#define DCAP_BANK(n) (((n) & 3) << 16)
#define DCAP_B(n) (((n) & 0x1F) << 8)
#define DCAP_A(n) (((n) & 0x1F) << 0)
Para minha mente fraca parece que você pode capturar 3D, desenhá-la no sub e usar o frame buffer na principal se você quiser. Para ser capaz de usar o framebuffer no motor sub você precisa trocar as telas com lcdSwap()
.
Outras dicas
Não inteiramente certo o que sua necessidade é, mas utilizando 3D no motor principal do display ainda deixa o motor inteiro sub fazer framebuffer (ou qualquer outro 2D) Tipo gráficos (utilizando um fundo de rotação estendida por exemplo).
Se você quer dizer usar o modo framebuffer a saída de captura do motor 3D de modo que você pode render 3D para ambas as telas, em seguida, há um exemplo nos exemplos libnds pasta que faz exatamente isso: