Объединение режима 3D и кадрового буфера на DS

Документация подразумевает, что вы можете использовать режим 3D-рендеринга или кадрового буфера, и каждый из них доступен только для активного дисплея. Есть ли способ визуализации 3D на одном экране и кадрового буфера на другом?

2 ответа

Решение

Я слышал, что есть функция захвата экрана, которая позволяет рисовать 3D на вспомогательном движке (нижний экран), поэтому я посмотрел его и нашел пример.

К сожалению DCAP Макросы, похоже, не документированы, поэтому я взглянул на реальные определения 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)

На мой слабый взгляд, похоже, что вы можете захватить 3D, нарисовать его на сабвуфере и использовать буфер кадров на главном, если хотите. Чтобы использовать кадровый буфер на вспомогательном движке, вам нужно поменять местами экраны с lcdSwap(),

Не совсем уверен, что вам нужно, но использование 3D на главном механизме отображения все еще оставляет весь вспомогательный движок для создания графики кадрового буфера (или любого другого 2D) (например, с использованием расширенного фона вращения).

Если вы хотите использовать режим кадрового буфера для захвата выходных данных из движка 3D, чтобы вы могли рендерить 3D на оба экрана, то в папке примеров libnds есть пример, который делает именно это:

http://libnds.devkitpro.org/a00035.html

Другие вопросы по тегам