Cocoa frontend todo

From DeSmuME
Jump to: navigation, search

Contents

Overview of Release History

The First Cocoa Front End

The first release of the Cocoa front end was v0.7.3, released on August 12, 2007.

The Temporary Move to the GTK Front End

Due to lack of developer support, the Cocoa code base was shelved after the release of v0.9.4. On November 27, 2009, v0.9.5 was released for OS X using the GTK front end. The last release using the GTK front end was v0.9.6, released on May 19, 2010.

The Return to the Cocoa Front End

On February 1, 2011, v0.9.7 was released for Windows, and also for Linux using the GTK. However, there were issues that were specific to the OS X GTK build which prevented its release for months. At this time, the Cocoa code base from v0.9.4 was updated to work with v0.9.7, and was finally released for OS X on April 30, 2011.


v0.9.7 (Released on April 30, 2011)

This version returns the OS X port back to its Cocoa roots. Returning the OS X port to a Cocoa codebase is extremely important for improving the UI, optimizing performance, and improving stability.


Major issues from the previous version

  • The GTK front end had a UI that was not Mac-friendly.
  • The application was unstable and frequently suffered application-level crashes, especially when the UI was manipulated.
  • Performance was poor all around. Emulation performance was especially poor.
  • Universal binaries are not possible for the GTK front end.


Main goals for this version

  • Make the Cocoa front end the primary Mac front end.
  • Make the Cocoa code base the main code base for the OS X port.
  • Greatly improve application stability.
  • Bring back universal binaries.
  • Get this version released as quickly as possible, since the OS X port is already months behind the others.


Implementation TODO and notes

  • Unshelve the code base from v0.9.4 and update it to v0.9.7 standards. (DONE!)


Final results

  • All goals were met for this version. The OS X port no longer suffers from application-level crashes, the UI is now Mac-native, and the application bundle now has a universal binary.
  • Overall performance has improved significantly since v0.9.6. UI performance is greatly improved, but emulation performance is still at least 20%-40% slower than the Windows port for most games.


Post-release issues and notes

  • Even though v0.9.7 has binary compatibility with OS X v10.4, there are many issues when running on v10.4, especially with missing 3D graphics.
  • The Cocoa code base is extremely messy and uses many older coding conventions. This makes it difficult to maintain and even more difficult to add new features. Due to these reasons, a total rewrite of the Cocoa code base is necessary in order to move the OS X port forward.
  • There was an uncaught bug in this release where touch coordinates didn't map correctly on rotated screens. This bug will need to be fixed.


v0.9.8 (Released on April 9, 2012)

This version is all about building a better future for the OS X port. Although this means having to rebuild the Cocoa code base from scratch, this is a necessary first step in providing a stable foundation for future enhancements.


Major issues from the previous version

  • Emulation performance is still poor.
  • The UI is very clunky, and certain parts of the UI are broken.


Main goals for this version

  • Completely rewrite the Cocoa code base from the ground up, using Objective-C 2.0, modern coding conventions, and Cocoa-bindings.
  • Transition the legacy Cocoa code base out of the current code base.
  • Expose as many settings in the user interface as possible.
  • Improve emulation performance.
  • Improve the user interface.


Implementation TODO and notes

  • Update the project files to be compatible with both Xcode 3 and Xcode 4. (DONE!)
  • Update build targets to prefer the latest version of LLVM/Clang. (DONE!)
  • Transition all legacy files out of the main project files, and rename legacy files with a legacy suffix. (DONE!)


  • Add finder icons for readable files. (DONE!)
  • Expose all emulation, firmware, SPU, and SoftRasterizer options in the UI. (DONE!)
  • Add mouseover tooltips for all settings. (DONE!)
  • Add a toolbar to the main emulation window. (DONE!)
  • Add more user feedback messages to the status bar. (DONE!)
  • Add a volume slider to the status bar, and remove the Sound menu. (DONE!)
  • Completely revamp the DeSmuME Preferences window. (DONE!)
  • Make external save state files behave like normal document files. (DONE!)
  • Expose all available ROM information in the ROM Info panel. (DONE!)
  • Make ROM title strings Unicode aware. (DONE!)
  • Change the behavior of the close window control, where clicking on it while a ROM is loaded will close the ROM. (DONE!)


  • Add the ability to change the window display mode. (DONE!)
  • Add Bilinear Filtering option for the display window. (DONE!)
  • Add video filter support for the display window. (DONE!)
  • Add the ability to rotate the display to any arbitrary rotation angle. (DONE!)
  • Add the ability to take screenshots using Edit > Copy. (DONE!)
  • Add the ability to save screenshot files in several different image file formats. (DONE!)
  • Add support for using an ADVANsCEne database for checking ROM properties. (DONE!)
  • Add the Cheat Manager, allowing for Action Replay codes and an internal value search tool. (DONE!)
  • Add the ability to import Action Replay codes from an R4 Cheat Database. (DONE!)
  • Add the ability to import and export ROM save files in RAW and No$GBA formats. (DONE!)
  • Add the File Migration Assistant to help users migrate files from previous versions. (DONE!)


  • Add support for mapping Lid and Debug controls. (DONE!)
  • Add fake mic support. (WORKING)
  • Add the ability to map input to user-defined touch coordinates. (DROPPED)
  • Allow for all non-modifier keys on a keyboard to be used as an input mapping. (DONE!)
  • Allow all HID devices to be used for input mappings. (DONE!)


  • Add automatic frameskip. (DONE!)
  • Make ROM cartridge files load on a separate thread. (DONE!)
  • Rework the main emulation loop to be as lightweight as possible. (DONE!)
  • Rework the multithreading code to work with SoftRasterizer. (DONE!)
  • Remove all Objective-C code from the sound code and optimize it. (DONE!)


Final results

  • All goals were met for this version.
  • Fake mic support only works with internal noise samples and white noise samples. External audio files didn't make it into the final release.
  • The feature to map inputs to user-defined touch coordinates was dropped due to release time constraints.
  • Performance is greatly improved in this version. UI performance is now "snappy". A combination of Cocoa-bindings, code design choices, and UI optimizations have made for an extremely responsive and usable UI. Emulation performance is also dramatically improved, now being only 5% slower than the Windows port.


Post-release issues and notes

  • Users running OS X v10.8 Mountain Lion are having issues with blank/white screens. This is most likely a bug related to the OpenGL blitter, and is considered critical.
  • A new bug was introduced where using Dual SPU Synch/Asynch mode would cause an application-level crash. This is a critical bug that is related to the sound threading code.
  • Physical microphone support seems to be an important feature to include in the next version.
  • Input handling was rewritten for this release and is an improvement compared to the last version, but the code is already showing its limitations. The input handling code will need to be rewritten once again in the next release.
  • This release has been considered a very large success for the OS X port.


v0.9.8b (Released on August 6, 2012)

This version is different from all other versions in that this version is purely a bug-fix release. This version is being released in response to Apple's release of OS X v10.8 Mountain Lion.


Major issues from the previous version

  • Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.
  • Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.


Main goals for this version

  • Fix the critical bugs.
  • Get this version released as quickly as possible, in response to the Mountain Lion release.


Implementation TODO and notes

  • Fix the critical bugs. (DONE!)


Final results

  • All goals were met for this version. The display window now works with Mountain Lion, and using Dual SPU Synch/Asynch no longer crashes the application.
  • Besides the bug fixes, this version is identical to v0.9.8.


Post-release issues and notes

  • None.


v0.9.9 (Released on April 30, 2013)

Initially, this version was meant to be an optimization and maintenance release. It was also meant to further modernize the code base in response to the further obsolescence of Xcode 3 in Mountain Lion. However, due to the length of time since the last release, this version also added several new features.


Major issues from the previous version

  • Users running OS X v10.8 Mountain Lion experience blank/white screens when running the emulator.
  • Users are experiencing intermittent application-level crashes when using Dual SPU Synch/Asynch.


Main goals for this version

  • Transition the code base from using the 10.5 SDK and being forward compatible to using the latest SDK and being backwards compatible to OS X v10.5.
  • Integrate the new JIT CPU emulation engine.
  • Update the OpenGL blitter to use modern OpenGL functions, and then optimize it.
  • Add support for the OpenGL 3D renderer.
  • Refactor the input handling code so that it's all gathered in one place, and also sits at the UI level.


Implementation TODO and notes

  • Update the Xcode project files to use the latest installed SDK, then add new build targets specifically for OS X v10.5 releases. (DONE!)
  • Add support for the JIT CPU emulation engine. (DONE!)
  • Add support for the OpenGL 3D renderer. (DONE!)
  • Completely eliminate the usage of fixed-function pipeline OpenGL code from the OpenGL blitter. (DONE!)
  • Refactor and rewrite the input handling code. (DONE!)


  • Add Rigorous 3D Rendering Timing option. (DONE!)
  • Add the SLOT-1 Manager, allowing the configuration of SLOT-1 properties. (DONE!)


  • Add the ability to use multiple display windows, each with individual display settings. (DONE!)
  • Show the ROM name and ROM icon of the currently loaded ROM in the display window title bar. (DONE!)
  • Add support for the HUD. (DROPPED)
  • Add Vertical Sync option for display windows. (DONE!)
  • Add Display Orientation option for display windows. (DONE!)
  • Add Display Order option for display windows. (DONE!)
  • Add Display Separation option for display windows. (DONE!)
  • Add HQ4xS video filter. (DONE!)


  • Add the ability to map multiple input devices to the same command. (DONE!)
  • Add the ability to map mice and other pointer-type devices to commands other than Touch. (DONE!)
  • Add the ability to map an input device to any command. (DONE!)
  • Add the ability to map an input device to user-defined touch coordinates. (DONE!)
  • Add the ability to save and load input profiles. (DONE!)
  • Complete microphone support. (WORKING)
  • Revamp the Input Preferences UI to accommodate all the new input handling features. (DONE!)


  • Make the items in the File Migration Window properly sorted by version. (DONE!)
  • Add Select All and Select None commands in the File Migration Window. (DONE!)
  • Add some user-friendly forms for users to receive technical support and submit bug reports. (DONE!)
  • Add more system information to the About box. (DONE!)
  • Add Help documentation. (DROPPED)


Final results

  • All goals were met for this version, and more.
  • The input handling code is now where it needs to be. No more rewrites are necessary anymore.
  • External audio files may now be used for the fake mic, but physical mic support still isn't there. This will have to be a top priority for the next release.


Post-release issues and notes

  • A bug was introduced where setting the display mode to Main or Touch as default would create display windows that draw incorrectly.
  • A bug was introduced where the R4 path in the SLOT-1 Manager wouldn't properly set.
  • A bug was introduced where loading certain audio files for the audio sample generator would cause a crash.
  • A bug was introduced where analog HID-inputs would sometimes fail to register.


v0.9.10 (November 28, 2013)

This release is meant to further modernize DeSmuME to use the latest and greatest optimizations from the new Xcode 5, as well as modernize the UI with new OS X human interface paradigms. Finally, the Legacy port needs to be obsoleted.

This release was supposed to be the "add new features" release, and some of those features already made it into v0.9.9. This release is here to finish the work that was started in v0.9.9, with the most important features being SLOT-2 device support and physical microphone support.


Major issues from the previous version

  • The v0.9.9 release brought a lot of new features. But along with those new features, came some new bugs. Those bugs will need to be fixed.


Main goals for this version

  • Fix the bugs introduced from the v0.9.9 release.
  • Finish adding the features that were first started in v0.9.9:
    • Add full support for all SLOT-2 devices.
    • Complete the microphone feature by adding physical microphone support.
    • Add HUD support.
    • Add support for basic replay recording and playback.
    • Add TAS-friendly controls.
    • Make displays go full screen.
  • With the recent release of Xcode 5, try out some new optimizations and see if they improve performance without breaking anything.
  • Begin modernizing the UI. Some specific elements would include:
    • ROM Info panel
    • SLOT-1 Manager window
    • File Migration Assistant window
    • Change radio button lists w/ button into pull-down menus as appropriate
  • Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.
  • Further reduce reliance on the user interacting with the file system directly.


Implementation TODO and notes

  • Add support for SLOT-2 devices. (DROPPED)
  • Complete microphone feature by adding physical microphone support. (DROPPED)
  • Add HUD support. (DROPPED)
  • Add support for replay recording and playback. (DROPPED)
  • Add Frame Advance control. (DROPPED)
  • Show the frame number. (DROPPED)
  • Reintegrate GDB stub support. (DROPPED)


  • Use Xcode 5's new -Ofast and -fvectorize optimizations. (DONE!)
  • Use --ffast-math optimization. (DONE!)


  • Add the ability for display windows to enter full screen mode. (DONE!)
  • Save the positions and settings of any remaining display windows upon app exit. (DONE!)
  • Create AppleScript for deleting the user defaults files. (DONE!)
  • Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window (DROPPED)


Final results

  • The goals of adding new features were not met for this version.
  • Due to this release happening much quicker than anticipated, many planned features for this release were dropped.
  • In the end, this turned out to be more of a modernization and bug fix release more than anything else. New features will have to be pushed to the next release.


Post-release issues and notes

  • During release testing, it was found that recent code changes broke the loading of ROMs on big-endian systems. Therefore, PPC support was dropped during release testing in order to get this release out on time. There will need to be a maintenance release made to address this issue.
  • SourceForge changed their URLs the DeSmuME project, so the Bug Report URL is now incorrect.
  • A user complained about choppy video, which was determined to be auto frameskip being too aggressive. This will need to be dealt with somehow, as FPS can have some wild jumps under certain conditions.
  • Saving the positions and settings of the remaining display windows upon app exit is a great feature. It would be a good idea to save more settings upon app exit as appropriate. OS X is heading in a direction where app settings should be restorable between app launches, and DeSmuME needs to start doing the same.


v0.9.10b (December 18, 2013)

This is strictly a maintenance release made to address the post-release issues from v0.9.10.

Major issues from the previous version

  • Fix ROM loading on PPC.
  • Fix auto frameskip being overly aggressive.

Main goals for this version

  • Fix the noted issues from the previous version.

Implementation TODO and notes

  • Fix ROM loading on big-endian systems. (DONE!)
  • Make frame rate transitions smoother, and make auto frame skip slightly less aggressive. (DONE!)

Final results

  • All goals were met for this version.
  • Besides being able to load ROMs on PPC and the better auto frame skip algorithm, this version is identical to v0.9.10.

Post-release issues and notes

  • This version has the stability that v0.9.9 was intended to bring. The next version really needs to push new features.
  • The most glaring missing features are the lack of SLOT-2 device support and the lack of the physical microphone. Adding these features should be top priority.
  • The font changes in OS X Yosemite have affected the appearance of text in some UI controls. This will need to be fixed.


v0.9.11 (April 14, 2015)

This version is meant above all else to be a features release. The improved stability and modernized code base of v0.9.10 gave a strong foundation to build upon, so now it's time to take advantage of it!

Major issues from the previous version

  • New features intended to be present in the previous release were not added.

Main goals for this version

  • Add new features!
  • Add GDB stub support from the Legacy port to the main Cocoa port, then obsolete the Legacy port.
  • Further modernize the UI with current Apple human interface paradigms. Ensure that the UI looks good for all OS X versions from Leopard to Yosemite.
  • Try out Xcode 6's new PGO optimization.

Implementation TODO and notes

  • Add support for SLOT-2 devices. (DONE!)
  • Complete microphone feature by adding physical microphone support. (DONE!)
  • Add HUD support. (DROPPED)
  • Add support for replay recording and playback. (PARTIAL)
  • Add new Execution Control panel, that adds new Frame Advance and Frame Jump controls, as well as integrates the execution speed controls, all in one single panel. (DONE!)
  • Reintegrate GDB stub support. (DONE!)
  • Add ability to run pixel scalers on the GPU. (DONE!)
  • Add additional video output filters. (DONE!)
  • Add support for turbo and autohold. (DONE!)
  • Use Xcode 6's new PGO optimization. (DONE!)
  • Obsolete the Legacy port. (DONE!)
  • Modernize the ROM Info panel, SLOT-1 Manager window, and File Migration Assistant window. (DONE!)
  • Add support for App Nap in OS X Mavericks and later. (DONE!)
  • Fix UI issues with OS X Yosemite. (DONE!)

Final results

  • Most of the goals were met for this version. Many new features were added, including some which were not originally planned in v0.9.10.
  • The only features that were not included were:
    • HUD support: It would be better to run this within OpenGL instead of hacking libagg to work in the Cocoa port. Of course, running the entire HUD in OpenGL will require an entirely new drawing engine, so this will take some time to figure out.
    • Replay Record/Playback: Basic functionality is included. However, full functionality, in which the user can viably edit replays within DeSmuME, is going to be a long road ahead. HUD support, Lua support, RAM Watch/Search, and a replay editor like Bizhawk's TAS Studio will be required. This will be a major undertaking.
  • Now that the Legacy port is gone, the project has been modernized a great deal. This should make it much easier for new Mac developers to jump into the project.
  • Overall, I'm very happy with this release. There was a lot of time between this release and v0.9.10, so it was possible to get a lot of testing done for this one, despite the many new features. I feel like this release is stable enough to warrant the next release, v0.9.12, to be another feature-focused release.

Post-release issues and notes

  • On Retina displays, the display window OpenGL context as well as other various UI elements are still rendered in normal resolution.
  • On OS X Mavericks and later, running a full screen display on any monitor other than the primary monitor will cause the dock and menu bar to remain visible, unless the primary monitor is also running a full screen display.

v0.9.12 (TBD)

This version will focus on adding to the Cocoa port any remaining features that are currently present in the Windows port. The final goal: Full feature parity with the Windows port. Once this is achieved, then a lot of options open up for adding brand new features, as well as restructuring of the core itself to bring new levels of emulation compatibility and performance.

I've also noticed, after doing much testing of v0.9.11 and comparing it to the Windows port, as well as the various Linux ports, it's very clear that the feature disparity between frontends is becoming greater. In the future, we will need to unify the look and feel of the various frontends for the purpose of improving the user experience and making our tech support easier. While this release will not focus on actually unifying the frontends, it will lay down much of the groundwork for doing so in v0.9.13.

Major issues from the previous version

  • Need to fully support Retina displays.
  • Fix full screen display behaviors on OS X Mavericks and later.

Main goals for this version

  • Full feature parity with the Windows port.
  • Refactor the core source functionality so that all communication between core and high-level UI goes through a common frontend layer. Have the Cocoa port make use of the common frontend layer.
  • Ensure build compatibility through Xcode 7.

Implementation TODO and notes

  • Add HUD support. (IN PROGRESS)
    • All of the foundation work is finished with the new OpenGL-based text renderer, as well as the related UI work.
    • Currently, there is support for displaying the Video FPS, 3D Renderer FPS, Frame Index, Lag Frame Count, CPU Load Average and Real-Time Clock.
    • Adding a HUD display for the Input is in progress.
    • Would also be nice to add some app status animations to the HUD. Some important app status things to show would be: When no ROM is loaded, when a save state is loaded/unloaded, which execution state the emulator is in (Execute/Pause/Frame Step/Frame Jump), and so on.
  • Add replay editing tools that are viable for TAS users.
  • Add support for the various NDS tools.
  • Add support for recording audio and video.
  • Complete support for Retina displays. (DONE!)
  • Fix full screen display behaviors on OS X Mavericks and later. (DONE!)
  • Confirm compiling and building on Xcode 7. (DONE!)

Final results

TBD. This version is yet to be released.

Post-release issues and notes

TBD. This version is yet to be released.

Personal tools