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

发布于 2024-07-26 00:50:43 字数 80 浏览 3 评论 0原文

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

The documentation implies that you can either have 3D rendering or framebuffer mode, and each only to the active display. Is there any way to render 3D to one screen and framebuffer to the other?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

撩发小公举 2024-08-02 00:50:43

嗯,我听说有显示捕获功能,可以让你在子引擎(底部屏幕)上绘制 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() 交换屏幕。

Well I've heard that there is display capture functionality that lets you draw 3D on the sub engine (bottom screen) so I looked it up and I found an example.

Sadly the DCAP macros doesn't seem to be documented, so I had a look at the real defines 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)

To my feeble mind it looks like you can capture 3D, draw it on the sub and use the frame buffer on the main if you want to. To be able to use the framebuffer on the sub engine you'll need to swap the screens with lcdSwap().

苏大泽ㄣ 2024-08-02 00:50:43

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

如果您打算使用帧缓冲区模式捕获 3D 引擎的输出,以便可以将 3D 渲染到两个屏幕,那么 libnds 示例文件夹中有一个示例可以实现此目的:

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

Not entirely certain what your need is but utilizing 3D on the main display engine still leaves the entire sub engine to do framebuffer (or any other 2D) type graphics (using an extended rotation background for instance).

If you mean to use the framebuffer mode to capture output from the 3D engine so you can render 3D to both screens then there is an example in the libnds examples folder which does just this:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文