在DS上结合3D和帧缓冲模式

时间:2009-06-23 10:06:42

标签: nintendo-ds homebrew libnds

文档暗示您可以具有3D渲染或帧缓冲模式,并且每个模式仅用于活动显示。有没有办法将3D渲染到一个屏幕并将帧缓冲渲染到另一个屏幕?

2 个答案:

答案 0 :(得分:0)

我听说有显示捕捉功能可以让你在子引擎(底部屏幕)上绘制3D,所以我查了一下,发现了example

可悲的是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()交换屏幕。

答案 1 :(得分:0)

不完全确定您的需求是什么,但在主显示引擎上使用3D仍然会使整个子引擎执行帧缓冲(或任何其他2D)类型图形(例如使用扩展旋转背景)。

如果您的意思是使用帧缓冲模式来捕获3D引擎的输出,这样您就可以将3D渲染到两个屏幕,那么libnds examples文件夹中有一个示例就是这样:

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