OpenTasks/Generic/Extend plugin system
|Task Name||IExtend plugin system|
|Technical Contact(s)||Eugene Sandulenko|
ScummVM uses plugins for different engines. Due to binary size constraints some of our ports feature several ScummVM builds supporting only subset of the engines. This leads to situation when supported games are not detected when they're in different build, and inexperienced users have difficult time with understanding which build to use. From the other hand in order to detect game and sometimes for querying GUI options core loads and unloads engines frequently which has impact on performance.
Thus it would be good if our engines could be split in two parts: detection and the engine itself. Then detection part should be compiled in regardless of the engine presence, and the engine part would be dynamically loaded when needed. Majority of our engines are based on AdvancedDetector which narrows down the code which requires enhancement.
Another part of the task deals with scalers. There is a constant demand of having support for more scalers, and we are reluctant with adding them because it would bloat the core size and have problem with hot key conflict. It would be nice if the scalers also have plugin interface and thus we could emerge more of them and give users more freedom of choice.
- Split our engine plugin code into 2 parts: static with all detection code and dynamic with rest of the engine
- Modify all existing engines to use new interface
- Create new lightweight plugin interface and use it for all existing scalers
The code should be portable, and it includes our Makefile building system. It should require only minimal if any enhancement of our existing low level dynamic loading backend code.
- Good C++ skills.
- Excellent Makefile skills.