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

[3DS] suggestion: enable 800x240 output for New 3DS #14469

Open
therealteamplayer opened this issue Oct 3, 2022 · 10 comments
Open

[3DS] suggestion: enable 800x240 output for New 3DS #14469

therealteamplayer opened this issue Oct 3, 2022 · 10 comments
Labels
feature request New enhancement to RetroArch. platform: 3ds

Comments

@therealteamplayer
Copy link

Pull request #8586 introduced new display mode settings for 3DS systems. Among these was a 2D (High Resolution) mode that utilised an 800x240 resolution, but only on Old 3DS systems as New 3DS systems had issues. However, as @beta215 and @pdpapper allude to in #8586, there is a new method to display 800x240 content on New 3DS, used in homebrew such as the standalone mGBA emulator. This could mean that 800x240 may be possible on New 3DS, and this would be a great benefit for e.g. the gpSP core, as this would allow for a 3x horizontal integer scale, vastly improving image quality in GBA games.

@LibretroAdmin
Copy link
Contributor

@MrHuu What do you think of this?

@LibretroAdmin LibretroAdmin added the feature request New enhancement to RetroArch. label Oct 4, 2022
@MrHuu
Copy link
Contributor

MrHuu commented Oct 10, 2022

Without checking the lictru gfxIsWide() function, I'm not sure if it would conflict with the current rendering code.
If i'm correct, this functions sets the framebuffer to a single 800x240 size instead of 2 x 400x240 (left / right) and disables the parallax layer.

Setting the framebuffer is already handled by retroarch, we just need to disable the parallax layer on new3ds devices.

To have this added we can either;

  • Backport the libctru function to disable the parallax layer
  • Use gfxIsWide(), if compatible, this will be limited to builds with libctru >= v2

I'm not sure which cores (mame?) are being build with the legacy toolchain, but these builds won't have the feature available.

While i havn't looked at 800x240 specifically, i don't think the actual rendered texture size is adjusted to 800x240. This means gpu scaling will look better, but it won't allow to use the retroarch provided scaling options to go above 400x240.

@ruvaldak
Copy link

ruvaldak commented Dec 31, 2023

800px mode utilizes the full 800 pixel horizontal resolution of the display in 2d. In terms of the hardware, the resolution is truly 800 pixels wide in this mode. As such, it does allow higher resolution rendered textures - such as 3x horizontal integer scale as mentioned in the OP. Hoping this gets added soon, as it makes an enormous difference in the standalone mGBA 3ds port - gb, gbc, and gba alike.

@bootmii
Copy link

bootmii commented Feb 12, 2024

Some New 2DSes have 800-pixel-wide screens (mine does) and I think some don't? How are we gonna detect this? My idea is to use a test pattern with alternating vertical stripes in each letter (one letter uses "left eye" pixels and one uses "right eye" pixels) and if it doesn't show up properly, there can be one button to disable 800-pixel mode and one to enable it. We just have to make sure they're X and Y or something else out of the way that won't be mindlessly pressed.

@ruvaldak
Copy link

That could work well enough, though Im not entirely sure if that would even be possible on non-800px displays - could completely blank out the screen or something. A better option might be like changing resolution in a PC game, where it asks if it's worked properly, and after a brief countdown with no confirmatiom, reverts the change.

@MrHuu
Copy link
Contributor

MrHuu commented Feb 13, 2024

We can just read the 3ds / 2ds model and act to it.

CFGU_GetSystemModel(&device_model);

@ruvaldak
Copy link

ruvaldak commented Feb 14, 2024

As bootmii mentioned, it seems some 2DS XLs counterintuitively have 800px screens, so having some way to manually enable the mode & test the functionality in such cases could be useful.

@MrHuu
Copy link
Contributor

MrHuu commented Feb 14, 2024

I'm only aware of the old2ds (non xl) not being capable of using wide mode. You're telling me 'some' old2ds XL models arn't capable? I can't find any information about this statement, is there any link or info about this?

But, the issue isn't excluding (or testing for) unsupported models. As the feature is currently not available at all. Otherwise all videomodes ( also the disabled 2d 800px mode ) can be manually selected and should already only be available on supported models.

If you're interested in fixing this feature, re-enable the code, and update to be compatible with libctru 2 and up. If working as intended, exclude edge cases.

@bootmii
Copy link

bootmii commented Feb 14, 2024 via email

@MrHuu
Copy link
Contributor

MrHuu commented Feb 14, 2024

My apologies, you're right, it should be new2ds xl. If there is any reference of different screens used on this model, with different capabilities, feel free to share.

I can't find any reference to this, and all documentation from libctru to set the wide mode suggest it's only the old2ds which isn't supported.

If it depends on a certain LCD type / manufacturer, it's possible to retreive this information from the device as-well and act to it.
Or, just enable wide mode en retreive it's state which should be false if the device isn't capable. But i can't test it as i don't own a new2dsxl.

I personally have no interest in re-enabling this feature, and without any information or references on such cases, it would be a guessing job i won't even attempt.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature request New enhancement to RetroArch. platform: 3ds
Projects
None yet
Development

No branches or pull requests

5 participants