Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

F3DEX3 Support? #470

Closed
MeltyPlayer opened this issue Nov 24, 2023 · 2 comments
Closed

F3DEX3 Support? #470

MeltyPlayer opened this issue Nov 24, 2023 · 2 comments

Comments

@MeltyPlayer
Copy link

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?

@rasky
Copy link
Collaborator

rasky commented Nov 24, 2023

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.

@rasky rasky closed this as completed Nov 24, 2023
@MeltyPlayer
Copy link
Author

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants