在 DS 上结合 3D 和帧缓冲模式
Posted
技术标签:
【中文标题】在 DS 上结合 3D 和帧缓冲模式【英文标题】:Combining 3D and framebuffer mode on the DS 【发布时间】:2009-06-23 10:06:42 【问题描述】:文档暗示您可以使用 3D 渲染或帧缓冲模式,并且每种模式都只能用于活动显示。有什么方法可以将 3D 渲染到一个屏幕并将帧缓冲区渲染到另一个屏幕?
【问题讨论】:
我们是在主屏幕上说 3D,在子屏幕上说帧缓冲区,还是在一个背景上讨论 3D,在另一个背景上讨论帧缓冲区?如果是后者我也想知道,因为我想用 FB 做运动模糊:) 前者对我来说已经足够了。 :) 【参考方案1】:我听说有显示捕获功能,可以让您在子引擎(底部屏幕)上绘制 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,在 sub 上绘制它,如果您愿意,可以在 main 上使用帧缓冲区。为了能够在子引擎上使用帧缓冲区,您需要使用lcdSwap()
交换屏幕。
【讨论】:
【参考方案2】:不完全确定您的需求是什么,但在主显示引擎上使用 3D 仍然让整个子引擎执行帧缓冲(或任何其他 2D)类型的图形(例如使用扩展的旋转背景)。
如果您打算使用帧缓冲模式来捕获 3D 引擎的输出,以便您可以将 3D 渲染到两个屏幕,那么 libnds 示例文件夹中有一个示例可以执行此操作:
http://libnds.devkitpro.org/a00035.html
【讨论】:
以上是关于在 DS 上结合 3D 和帧缓冲模式的主要内容,如果未能解决你的问题,请参考以下文章