This should get Donkey Kong Country Returns characters to be as broken as they should be. They will be fixed in a later pr.
Expected result is:
efbtex: characters are always flickering or invisible, no matter what scaling or IR setting
efb2ram: characters are always working properly at 1xIR, no matter what scaling or IR setting
Under failure conditions of the GC Adapter, When interface count is zero and we can't open the device.
Then there were race conditions on shutdown of the threads which could result in crashing.
Make adapter opening more robust like the Mayflash DolphinBar.
Make shutdown more robust by making the read thread control the write thread.
Make sure that there is actual data to be written when kicking the write thread. So it doesn't attempt a write a shutdown.
Make a toast on screen to tell the user that the adapter needs to be unplugged and plugged back in again for it to work.
Fast depth is now more accurate than slow depth and should always be used.
The option will be kept in a different form as it is still used as a hack to fix some games.
Also, the slow depth code path will still be relied upon by cards that don't support GL_ARB_clip_control.
This is the only way to get Wiimotes working under Android now.
This, just like the Wii U Gamecube Controller Adapter, completely goes around Android's limitations and talks with the device directly through USBManager.
Couple notes.
Continuous scanning must be enabled otherwise the Wiimotes won't be seen.
The UI doesn't expose support for this yet. One must change the Wiimote source and continuous scanning settings manually.
Testing up to two wiimotes in Taiko No Tatsujin, no reason to believe all four won't work.
Since all Virtual console releases use the same emulator (though there
are multiple revisions some emulators) and generally need the same
setting, this commit allows the creation of INI files which cover all
Virtual Console games fow each system.
For example, F.ini can provide settings that all NES games have in common
and C.ini will provide settings for all Commadore 64 games.
If needed, a 3 letter ini can override settings for individual games.
This also has the added benefit of not crashing under most circumstances.
Includes a few other changes, including replacing the atomic<bool> with a
Flag, as well as adding a flag for indicating read thread shutdown.
if the configured local pad is none, it will make dolphin behave
incorrectly (due to the game expecting inputs from the device while it
doesn’t exist).
Remote devices would always enter an error path and get disconnected
from the gamecube, breaking netplay in the process.
Culprit is still InGamePadToLocalPad
if it was used in netplay, it would read memory out of bounds
(due to the mapping method returning 4 if the device was remote) which
was 0 more often than not, causing the device in this position to be a konga.
(which may or not be the gcadapter due to the swap between local and
ingame controllers)
This is because Google decided it was in their best interest to update eglext.h for android-21/arch-arm only and completely neglect all the other
architectures.
Sucks to suck.
This is being implemented here first under EGL since the infrastructure is already in place for this due to the Android code requiring some bits.
The rest of the interfaces will come in a little bit.
This will be required for threaded shader compiling in the near future.
Introduced in 6e13496d8, pads would get assigned to their netplay
position, which breaks assumptions. With this behavior, the SI devices
should be mapped properly.
if a pad or wiimote number was outside bounds (e.g. 42353543232),
it would still have been read from the array, which could lead to
inappropriate consequences, like a segfault.
This is only queried, there's no need to expose it for writing.
Even if it was written to, a data member shouldn't be part of
your public API unless its part of a dumb object or trivial struct.
CBoot::BootUp() did call CoreTiming::Advance which itself blocks on the GPU,
but the GPU thread wasn't started already. This commit moves the SyncGPU
initialization into the Fifo.cpp file and call it after BootUp().
Clients have no need to send their configuration information on start and the server straight out ignores it.
Not to mention it shouldn't try sending a struct as a null terminated string.
Cleans up how the server sends the configuration slightly as well.
Previously we would iterate through every GC adapter plugged in to the PC and steal ownership of it.
This causes issues all over the place in the implementation if this happens.
Break on the first adapter we can get access to.
Setting this is not required anymore as of commit 40cf1bbacc622 of
FFmpeg.
For users of older versions of the libavcodec library we guard the
change with an #if.
The dumb wxAUI stuff isn't fully implemented for GTK. So the wxAuiToolBar doesn't properly deduce the size it needs to be when it contains a
wxSearchCtrl object.
Force the manager to set its minimum size to something reasonable.
(x % y) is not defined in GLSL when sign(x) != sign(y).
This also has the added benefit of behaving the same as sampler wrapping modes, in regards to negative inputs.
Build Events are run in an 32 bit environment, therefore both program files environment strings resolve to the x86 program files folder on 64 Bit systems. If Git is 64 bit and installed into the x64 program files it can't be found by the script.
This was causing crashes/driver resets when odd-dimension textures were
being loaded, due to the size we were uploading being larger than the size
of the higher-level texture calculated by the runtime.
They are now based on signal timings rather than pixels, as it
didn't make a lot of sense to do things with pixels.
Now handles all 240i/240p/480i/480p modes without any special
casing.
Despite the diffrent equaions, this should result in the exact same aspect
ratio as the previous code.
So that it contains the current commit and not an arbitrary date that
may or may not be up-to-date. This will cause tears as people will not
be able to use netplay with one diverging commit that does not touch
anything related. On the other hand, users can’t be trusted.
When there are no games to display in the game list, DolphinWX shows a
message instead. Clicking the message will perform an action. If the game
list truly is empty, the message and action are for opening a browse
dialog, but if the user has hidden some games, they are instead for
unhiding all games. However, the condition for checking which message to
display lacked some parts that are in the condition for checking which
action to use, so the two could be different in rare cases. This PR fixes
that by breaking out the two conditions to a new unified function.
People who make texture packs usually release them using a specific ID
(for instance SX4E01). Users who have a different version of the game
(like the PAL version SX4P01) then need to rename the custom texture
folder to match. This is a lot simpler than renaming every texture file,
as was required with the old texture format, but it's still something
that users can forget to do. To make that unnecessary, this change makes
it possible to use three-character region-free IDs for custom texture
folders, similarly to how game INIs can use three-character IDs. Once
most people have updated to Dolphin versions that include this change,
those who make texture packs will be able to name them with
three-character IDs, removing the need for users to rename anything.
No way to properly enable it from an end user perspective yet.
Doesn't require root.
This same sort of system can be used for the Dolphinbar in the future for real wiimote support.
Dolphin has supported the recalibration shortcut (X+Y+Start) for quite a long while. So if someont's axises are terrible, you could easily
recalibrate.
Games even get the initial calibration upon boot(Most of the time).
While changing over the GCAdapter code, I was testing to make sure the reset and calibration shortcuts still worked, turns out they didn't work at
all.
Looking in to the problem, we capture the combination properly, and we wait three seconds until we actually fire that off recalibration.
The problem is for Nintendo's SDK to properly handle recalibrating, we need to send back data saying that it needs to recalibrate.
On hardware this is done as part of the 64bits of data the controller sends back to us.
On holding of the controller, bit 61 of the return value is set, which the Nintendo SDK catches, and then signals immediately afterwards a CMD_ORIGIN
command in order to recalibrate the controller.
We were outright ignoring this bit, so the library wasn't ever recalibrating. I suspect in the past the class itself used to use the calibration data
to to offset the data, but somewhere along the lines it got munged out of existence.
The Gamecube adapter does this shortcut in a bit of a unique way, instead of sending the command and having the library support it and what have you.
Once holding the shortcut for the amount of time, the adapter reports back that the controller has actually been disconnected. Then when you let go of
the combination, the adapter states that a new device has been connected to that port, and the recalibration happens because a new device is
"connected."
This fixes controller calibration for both emulated GC controllers and also the Wii Gamecube Adapter.
We don't throttle by frames, we throttle by coretiming speed.
So looking up VI for calculating the speed was just very wrong.
The new ini option is a float, 1.0f for fullspeed.
In the GUI, percentual values are used.
The Wii U Gamecube controller adapter setup has always been a bit weird. It tries to be as automatic as possible to make the user experience as easy
as possible.
The problem with this approach is that it brings a large disconnect in the user experience because you have the Gamecube controller setup with regular
gamepads and then for some reason below that you have a "direct connect" option which will cause the Gamecube Adapter to overwrite the regular inputs
if something was connected.
While this works and allows the user to only click one checkbox to get the device working, it breaks the user's experience because they don't really
know what "direct connect" means and won't look it up to figure out what it is. Just expecting the device to work (At least one occurence of this in
the IRC channel in the last week).
This way around also had the terrible nature of making the code more filthy than it needed to be. The GCAdapter namespace was parasitic and hooked in
to the regular GC Controller SI class to overwrite the data that it was getting from the default configuration.
Now instead we have a specific SIDevice class for the Wii U Gamecube adapter. This class is fairly simple and is a child of the regular SI Gamecube
Pad device and only reimplements what it needs to.
This also gives the ability to configure controllers individually, which allows the user to configure rumble individually per pad input.
Overall the code is cleaner, and it fits more in line with how the rest of Dolphin works.
Using the XPM format for images has become a maintenance problem because
people don't know how to create them. This commit removes all XPM images
and all C files that contain PNG images. DolphinWX now uses the PNGs
in the Resources folder instead, just like DolphinQt and DolphinQt2 do.