- - OpenGL - The official, original, OpenGL plugin. This is the plugin that this post/thread is about. Read on for more information
- OpenGL2 - Some months back (early 2013) Schtruck started developing his OWN OpenGL2 plugin. At this time I'm not aware of the status of that plugin. He released it, and you can use it in beta, but I believe it doesn't really use many opengl2 funcitonions. I haven't checked on this in a couple months (spring 2013) though and don't know it's status.
- blitter - sometime in 2012, schtruck updated the fpse software emulation code to use new android software librarires for opengl. This is still software rendering of graphics though, not hadrware acceleration, not 3D. The name of the code used for this is 'blitter'. This is the new 'default' mode for FPSE. It has MUCH better ability to 'smooth' (or 'filter') graphics. Its usually better, but sometime you can get better performance with the 'old software mode'.
Google Docs Spreadsheet comparing and explaining:
- - Maps the functions of "PC version of PEOpS plugin" to the "FPSE use of plugin"
- This spreadsheet explains the PC version of the PEOpS OpenGL plugin
- Right now the spreadsheet just crossreferences the FPSE settings with potential PEOpS setting(s), and below gives detailed info on the PEOpS settings.
- After I understand the settings better I would like to clean it up and make the doc much more concise and easier to read.
- added a column for the ePSXe for Android code (the code you use in the epsxe text file to enable special fixes)
The OpenGL plugin is based on Pete Bernert's OpenGL plugin, which he ultimately released as open source software under the name Psx Emulation Open Source (PEOpS). I do not know the history of the version we use with FPSE - I assume Schtruck took the open source software and compiled it for Android. Below is a link to Pete's website, specficially the section about PEOpS.
Link to download plugin (from Changelog page):
- FPSE Changelog
FPSE PEOpS OpenGL Plugin Link - link works but I'm not sure if this is the current plugin.
OpenGL specific FPSE updates
- - FPSE 11.88 update
New OpenGL plugin implemented. This 'new OpenGL' will be the 4th gfx plugin for FPSE.
- - still experimental
- It is a totally rewritten OpenGL plugin
- promises (in the future) an opengl2 option and ability to use lower screen resolution.
- should contain all existing options and special fixes.
Can be selected from inside the music menu - choose opengl then there's a sub-option for the new experimental opengl
- 11.35 update - new openGL options
- Expand screen width - Capcom 2d fighters - show full screen
G4 polygon cache - FF9 Battle Mode - yellow rectangle
odd/even bit hack - "needed with epsxe 1.5.2 and older" (why did schtruck include this??)
Swap front/back detection - "Speed freaks, Killer Loop"
Direct frame buffer access - FF7, FF8, Persona 2 - fixes some mdec (video) issues
disable coord check - <need more inf>
Remove blue glitch - "Legend of Dragoon, Alpha Multipass needed"
Lazy update detection - Dragon Warrior 7 (flickering boxes)
Here's a link to a new thread for graphic bugs.
OpenGL Caveats & Considerations
- - when changing some settings in the video menu, you must close FPSE completely and reload it. These are 32-bits, anti-aliasing, mask-bits.
- OpenGL uses your device's Graphics Processing Unit (GPU) primarily, not the processor. Update - it has been discovered that the plugin uses lots of CPU power, and that a better CPU will allow it to work better. A good GPU is still required.
- Most devices will run slower when using the OpenGL plugin. Unless they have good (great) GPUs with good OpenGL support (in both hardware and drivers), there will be a performance decrease (less that 60 fps for ntsc games, 50 fps For PAL games).
- The OpenGL plugin attempts to make games look BETTER than they did originally. You have to choose in many game - better compatibility or better graphics. Some of the OpenGL options may make a game look better/ show more of the special effects, but may make the game not work correctly or very slow. And sometimes OpenGL just didn't work or looks wrong and you have to use softGPU mode.
- 2D vs 3d - OpenGL does little to nothing for 2-dimensional objects in games. It only affects 3-dimensional objects (generally).
- - If the game you wish to play is mostly / entirely 2-dimensional, Open GL will do little for your game.
- However, OpenGL is a different way of rendering, so it will make the game look different, possibly better.
- - The higher your devices screen resolution, the harder the GPU must work
- if you have a high screen resolution, even if you have a better GPU, rendering may be slower
- My device has a resolution of 960x540, which is higher than many others' 800x480, making it work harder.
- - Check your devices hardware specs: go here & search (upper right corner)
- Samsung's Exynos (previously "Hummingbird") PowerVR SGX540 (these issues do NOT affect TI OMAP devices)
- - seems to not be powerful enough in some games and causes garbage (FF9 - see here). This only applies to the Exynos (Hummingbird) chipset, not OMAP.
- chainfire - see section below
- overclocking the GPU may also fix the issue - untested / unconfirmed
- - devices have significant issues (see here for list of devices). Schtruck recommends upgrading device drivers, and/or upgrading to ICS. I don't have info on upgrading, but doing a search on google for adreno 220 driver returns a lot of info, see here
- This thread has more info: see here
- qualcomm fix - 11.27 - "fixed garbage bands encountered on opengl and qualcomm cpu"
- - 11.29 - "Important Fix (workaround) for Samsung Galaxy SII, SIII and Note , and all other MALI400 devices with OpenGL plugin!
Now you'll have huge speed without any trick and without need to switch to interpreter!" - I think that mean you don't need to use the dynamic interpreter or the tekken3 trick.
- 11.27 - "added New Dynamic interpreter option, It's slower than recompiler but make fpse running on mali400 and with opengl without tekken3 trick..." (see FPSE changelog)
- - I don't have much info
- - I know there are 4 versions, 3 are based on adreno 225, 1 is based on the mail-400.
- as of 11.30 (and the more stable 11.34) I believe many / most issuesare fixed. (9/9 - 11.39 is latest with even more opengl fixes no specific to S3).
- ROM usage - User Mirk has done research and found that the ROM used makes a huge difference - see here :
- - blaze rom This one doesn't work at all. As soon as you switch to the plugin and open fpse again it hangs and crashes.
- touchwiz jellybean This is a jelly bean port. This one works but sluggish. didn't play with this one much though because I had trouble with the ROM installing right.
- free gs3 This one has worked the best for me so far.
- Common "System on a Chip" (SoCs) info:
- Qualcomm Snapdragon
Samsung Exynos (Hummingbird)
Texas Instraments (TI) OMAP
Broadcom (formerly videocore)
Chainfire3d - fix and enhancement?
- - chainfire3d is a graphics app that changes the way your device handles graphics.
- It requires root.
- WARNING - one chainfire user reported chainfire broke his device and he had to reflash it. This user had Android jellybean (4.1) and was using a 'cooked' version of Android (not the one that came with the phone). It was easy for him to fix thankfully. Be sure to check of you're device supports chainfire (if chainfire supports your device / OS).
- PowerVR SGX540 @200 Mhz - users have stated that installing this app and lowering texture quality fixes the issue.
- mali-400 devices users of some devices (lower end?) have reported issues that can be fixed with chainfire3d:
- -previously (11.2x) in order to get the opengl plugin to work, you had to set chainfire3d to use antialiasing "AA4x" - this allowed opengl to work, but cuased it to run slow.
- version 11.32 and later, you don't need to use AA4x, games work without it. But there are graphics issue with sprites. to fix:
- - either: lower texture resolution. this will fix the sprite issues, but may cause other issues
- or: use anti-aliasing AA4X. this will fix the issue, but causes performance issues.
- I believe many issues with OpenGL are hardware / driver related (as demonstrated by the Adreno 220 issues). If my phone (or laptop - see my testing in the section below) could run OpenGL better, or had better drivers perhaps, then problem games likely could work. Phones can run OpenGL ES, but not nessessarily OpenGL - at least not fully (see_here).
- "As the OpenGL ES is a stripped-down version of the (OpenGL) API OpenGL ES devices may or may not be compatible with OpenGL code, depending on the particular features used." (see here).
Other GPUs can do OpenGL (full implementation) - but not many. For example see here for the TI chipsets that can, and here-see deliverables for the specs showing available APIs.
- Currently drivers for windows are produced often and en mass. Drivers for Android devices are rarely updated, and are often device specific. I think the only time they're updated is during major OTA phone provider updates, sometimes only when you get a new android version.
- some people are trying to do something about it, but it's slow / not progressing: PowerVR GPU Driver initiative
OpenGL vs softGPU
- - It makes a HUGE difference ... in some games. In others (that are more 2d), not as much - though it's always better (as long as it doesn't mess things up and is playably fast).
- OpengL has the ability to show some things that the SoftGPU cannot. Examples: Final Fantasy Tactics - Rain. Final Fantasy IX - the mist in the outdoor world.
- OpenGL - for 3D objects, it will show them much better.
- OpenGL may not work at all for some things in some games.
- OpenGL will (almost always) be slower.
- SoftGPU works almost everytime, and is usually faster.
- - In Street Fighter 2 the OpenGL was so slow it wasn't usable. While it did render the graphics noticeably differently, I don't know that it was noticably better.
- In the FF games, the backgrounds don't get much change, but the characters themselves get fully rerendered. They go from being blurry or blocky & indistinct to full, sharp clarity. To me, it's amazing.
- - CPU power - it takes a lot, and is pretty unfeasible without a dual core or frameskip. In some games you can't frameskip (FF games), and the dual core causes my phone to stutter like frameskip and the buttons to not work at times (like the whole emulator is skipping, e.g. the FPS in the upper left blinks)
- (I really want to play FF8, and started playing it in softGPU since OpenGL breaks the fight scenes. But after seeing and playing in OpenGL it's so hard to go back to te SoftGPU. I've never played through FF8 and have always wanted to, and have played FF9 4 or 5 times. But I find I'd rather play FF9 (which I love) than go to the softGPU of FF8.)
Testing Results - "Phone" vs "PC with similar OpenGL performance" (PC has full PEOpS plugin):
- I have a lenovo T410 - a nice laptop with a poor (but modern) stock GPU (Intel Graphics Media Accelerator HD)
I have a Motorola Droid Bioic (TI OMAP chipset, 1Ghz Dual core, 1Gb ram, PowerVR SGX540 GPU (300Mhz vs the Samsung Exynos/Hummingbird's 200Mhz).
(I was surprised when I saw that the Mali400 had roughly the same specs as my GPU.)
I had the same issues on my laptop (epse with PEOpS plugin) that I have on my phone in some games (specifically FF8 and FF Tactics)
- In FF8 FPS drops to ~1.5 at battle swirl, plus other less relevant issues
In FFT, map is black, characters can have too high a contrast, menus can be blackened, garbled, or faded, text can be too faint. Also, performance is terrible as soon as any special graphics happen.
(I can fix the OpenGL map issue in FFT on my laptop by setting one of the 3 options listed from the spreadsheet that detail how to configure the plugin for special graphics - specifically "framebuffer access" set to "full vram primitives")
My laptop and phone played the games with the softplugin almost identically (though turning the Frame Limiter off my laptop was faster).
Because of how well my laptop handled directx, it made me wish we had a directx plugin. However, until more GPUs support directx that seems pointless (mine doesn't). It may be worthwhile to have an OpenGL 2 plugin, but there's no open source ones available (or are there?). Pete's closed source OpenGL2 plugin seems designed for high end / more powerful GPUs so I don't know how usable it would be.
Questions from the spreadsheet:
- Difference between the different framelimiters?
Difference between the frameskips?
(I've read info in the forums on these but could't find it today)
- Texture filtering - Bi-linear (texture) filtering <but which one?>
Anti Aliasing - <not part of PEOpS – a GPU driver usage? Or an attempt to turn on line based Anti Aliasing? Pete had mixed results with that>
Frame Texture - texture quality (for better colors)? If so, what color setting? -or- Framebuffer textures (for compatibility)? If 'framebuffer textures', which option does this setting enable?
- Adjust framebuffer access - special game fix - “adjust framebuffer access” - ??
Special upload detection - special game fix – special upload detection - ??
Busy fix - special game fix – “busy”? Example of when/why to use?
- - Was the FPSE OpenGL plugin always PEOpS? I thought I saw something somewhere that said the FPSE OpenGL plugin didn't use PEOpS, but later it did use PEOpS. If so, are there two different version out there (one PEOpS and one NOT PEOpS)? As far as I know, today (April 2013) Schruck uses the PEOpS version, he has made serveral modification to it, and is working on his OWN version of an OpenGL2 plugin.
- It seems that almost all settings require quitting and reopening FPSE for them to take effect. Good examples are 'advanced blending' and 'alpha multipass'. On the PC when I change those they change immediately, but in FPSE they don't change unless you restart, or you can do something in the game that forces a refresh of whatever effect the setting changes (which I often can't do).
Thanks for reading. I hope Schtruck (or others) can help answer questions about the current plugin so we can all understand, and be able to use, it better. As I've said before (and was reminded STRONLY as I read your changelog) your product is awesome, thanks so much for all your work.