Объединение режима 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 есть пример, который делает именно это: