desmume2015
desmume2015 copied to clipboard
Proposal - "Hybrid" screen layout
See attached screenshot. It is a very common scenario in DS games, perhaps the most common of all, that one screen has all the game action on it and the other is just an info display. Hybrid mode addresses this. And why have two little screens on the side instead of just one? Well, there's space so why not. And it means you don't have to take any action in order to watch a cinematic that uses both screens. Hybrid mode would support toggling the primary screen just like single screen mode.
If I understand correctly, implementing this would only involve adding to desmume/src/libretro/libretro.cpp. My C++ and OGL knowledge are kinda weak but I could try doing it myself if nobody else wants to and a maintainer gives me the go ahead.

YES! Please. This would be an amazing feature.
I'd very much welcome you taking a stab at it, yeah. Would be pretty cool.
Okay, I'll try. Just got the master branch compiling today.
To note, I am very inexperienced at this sort of thing. I had a go at trying to hack this sort of thing into the LEFT_RIGHT layout to see if I could get it working (but tiding things up later) but the resampling of the second screen I'm doing is awful.

Can you make a fork repo or a diff where you can show your changes? I could invite others then to take a look at it, maybe that would help.
I'll get a fork up soon after I've tidied up the code a bit, it's very rough. The problem with the resampling is I'm just using a basic nearest-neighbour to shrink the screens. I don't really know how to deal with the uint16_t

I think the problem isn't so much the sampling method for reduction but rather than it simply doesn't have the pixels to represent things that small. I think you would have to render the viewport with the main screen pre-scaled at 3x (or whatever) and the smaller ones at 1x.
If the initial framebuffer is only 256x192 (or whatever; that is, set to the native res of the console) and the secondary screens are scaled down to fit alongside the main screen, the information lost from downscaling them is gone forever and doesn't come back when you scale back up in the frontend.
If that's indeed the issue, we have a similar issue going on with the mame-git core, where the OSD is getting downscaled before it hits the frontend and it leads to the same blocky mess.
Yes of course that's the reason. The resolution of those smaller screens is just so small. If you find the pull request useful, I'll look into a scaling option as a followup.
Any update on that one? The pixels in the hybrid layout are not very good