DragonMinded/libdragon

F3DEX3 Support?

Closed this issue · 2 comments

I just discovered this library today, awesome work! It's really exciting to see that the N64 homebrew scene is thriving in 2023.

@Sauraen has been working on a revision of the F3DEX2 microcode that is aptly named F3DEX3, which more performant and supports a ton of nice features like using normals & colors in the same material, ambient occlusion, cel shading, additional texture modes, etc.:
https://www.youtube.com/watch?v=XbY6TdaeMeY
https://www.youtube.com/watch?v=jAt6mxNrG3k
https://www.youtube.com/watch?v=zrGKSzikMaY

Given F3DEX3's wide range of features and improved performance, it seems like this would be a great microcode for the average use case when it's released.

I haven't dug into the code of libdragon yet so I'm not totally sure how it's handling microcodes or which one it's currently targeted to (I would assume F3DEX2?). But would it be possible to work towards supporting F3DEX3 at some point?

Thanks for reaching us.

libdragon is using a novel architecture for RSP programming which has nothing to do with commercial microcodes. We have a RSP framework called rspq, upon which our ucodes are written, which allows for lockless scheduling of single commands, continuous non-batched parallel execution, and transparent RSP overlay management.

For 3D graphics, we have a full OpenGL 1.1/1.2 implementation in the unstable branch, with a totally "from scratch" ucode. More information can be found here:
https://github.com/DragonMinded/libdragon/wiki/OpenGL-on-N64

The RSP code powering the OpenGL implementation can be read here:
https://github.com/DragonMinded/libdragon/tree/unstable/src/GL
(see the various files starting with rsp_).

Our microcode is already more advanced than F3DEX2 in some regards (eg: lighting on vertex colors), though in general it is not quite as optimized yet. We also develop iteratively on it, we don't have the issue of "fixing a release", because the ucode API is not part of the public API surface.

In addition to all of the above, the goal of libdragon is to provide a 100% open source and legal framework to develop on Nintendo 64. To the best of my understanding, F3DEX3 is derived from Nintendo proprietary code, it is thus unlicensed and unlicensable, and as such it cannot be legally used. This alone sets it outside of the scope of libdragon.

Ah, that makes sense. Thank you for the detailed explanation, rspq sounds like an fascinating approach!

Best of luck with this project, excited to see how this progresses in the future!