Files
@ r28628:5977866b9ea5
Branch filter:
Location: cpp/openttd-patchpack/source/src/driver.h - annotation
r28628:5977866b9ea5
4.1 KiB
text/x-c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r9111:983de9c5a848 r6125:eb40461cb765 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r8112:7d126d66990f r24218:c32caa9f014d r5475:3f5cd13d1b63 r24218:c32caa9f014d r24218:c32caa9f014d r24218:c32caa9f014d r5475:3f5cd13d1b63 r17626:6e08ec7d1a97 r7170:38b143754b40 r7170:38b143754b40 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r23607:36c15679007d r17626:6e08ec7d1a97 r24218:c32caa9f014d r7170:38b143754b40 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r7170:38b143754b40 r7170:38b143754b40 r27372:06d384d76bd2 r7170:38b143754b40 r14582:fbb94a5fa480 r7170:38b143754b40 r14582:fbb94a5fa480 r14582:fbb94a5fa480 r14582:fbb94a5fa480 r14582:fbb94a5fa480 r14582:fbb94a5fa480 r7170:38b143754b40 r12925:90ba6b12158c r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r12925:90ba6b12158c r7170:38b143754b40 r7170:38b143754b40 r14900:c679fdaeebe6 r7170:38b143754b40 r7170:38b143754b40 r17626:6e08ec7d1a97 r7170:38b143754b40 r7170:38b143754b40 r21436:38079fc3bcd8 r21436:38079fc3bcd8 r21436:38079fc3bcd8 r21436:38079fc3bcd8 r21028:e5db3f83cafa r21027:e87e97e6befd r21028:e5db3f83cafa r21027:e87e97e6befd r9582:cb7711765a81 r24218:c32caa9f014d r7170:38b143754b40 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r7170:38b143754b40 r7170:38b143754b40 r9260:a54ed53b7134 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r7170:38b143754b40 r7170:38b143754b40 r23607:36c15679007d r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r17626:6e08ec7d1a97 r7170:38b143754b40 r7170:38b143754b40 r14582:fbb94a5fa480 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r24218:c32caa9f014d r21436:38079fc3bcd8 r27498:6d2aaf65c3e6 r27498:6d2aaf65c3e6 r7170:38b143754b40 r21027:e87e97e6befd r7170:38b143754b40 r9489:7a345541bc8e r9159:0c3d5148cb9a r25003:fdd8312ceea6 r25003:fdd8312ceea6 r25003:fdd8312ceea6 r25003:fdd8312ceea6 r25003:fdd8312ceea6 r25003:fdd8312ceea6 r25003:fdd8312ceea6 r25003:fdd8312ceea6 r25003:fdd8312ceea6 r21027:e87e97e6befd r15610:623a23fb6560 r15610:623a23fb6560 r9159:0c3d5148cb9a r9159:0c3d5148cb9a r9159:0c3d5148cb9a r9159:0c3d5148cb9a r9159:0c3d5148cb9a r23607:36c15679007d r9159:0c3d5148cb9a r9159:0c3d5148cb9a r7170:38b143754b40 r24218:c32caa9f014d r27398:53658248e31b r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r17626:6e08ec7d1a97 r7170:38b143754b40 r21027:e87e97e6befd r21027:e87e97e6befd r21027:e87e97e6befd r21027:e87e97e6befd r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r17626:6e08ec7d1a97 r7170:38b143754b40 r21027:e87e97e6befd r7170:38b143754b40 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 | /*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file driver.h Base for all drivers (video, sound, music, etc). */
#ifndef DRIVER_H
#define DRIVER_H
#include "core/enum_type.hpp"
#include "string_type.h"
const char *GetDriverParam(const StringList &parm, const char *name);
bool GetDriverParamBool(const StringList &parm, const char *name);
int GetDriverParamInt(const StringList &parm, const char *name, int def);
/** A driver for communicating with the user. */
class Driver {
public:
/**
* Start this driver.
* @param parm Parameters passed to the driver.
* @return nullptr if everything went okay, otherwise an error message.
*/
virtual const char *Start(const StringList &parm) = 0;
/**
* Stop this driver.
*/
virtual void Stop() = 0;
virtual ~Driver() = default;
/** The type of driver */
enum Type {
DT_BEGIN = 0, ///< Helper for iteration
DT_MUSIC = 0, ///< A music driver, needs to be before sound to properly shut down extmidi forked music players
DT_SOUND, ///< A sound driver
DT_VIDEO, ///< A video driver
DT_END, ///< Helper for iteration
};
/**
* Get the name of this driver.
* @return The name of the driver.
*/
virtual const char *GetName() const = 0;
};
DECLARE_POSTFIX_INCREMENT(Driver::Type)
/** Base for all driver factories. */
class DriverFactoryBase {
private:
friend class MusicDriver;
friend class SoundDriver;
friend class VideoDriver;
Driver::Type type; ///< The type of driver.
int priority; ///< The priority of this factory.
const char *name; ///< The name of the drivers of this factory.
const char *description; ///< The description of this driver.
typedef std::map<std::string, DriverFactoryBase *> Drivers; ///< Type for a map of drivers.
/**
* Get the map with drivers.
*/
static Drivers &GetDrivers()
{
static Drivers &s_drivers = *new Drivers();
return s_drivers;
}
/**
* Get the active driver for the given type.
* @param type The type to get the driver for.
* @return The active driver.
*/
static Driver **GetActiveDriver(Driver::Type type)
{
static Driver *s_driver[3] = { nullptr, nullptr, nullptr };
return &s_driver[type];
}
/**
* Get the driver type name.
* @param type The type of driver to get the name of.
* @return The name of the type.
*/
static const char *GetDriverTypeName(Driver::Type type)
{
static const char * const driver_type_name[] = { "music", "sound", "video" };
return driver_type_name[type];
}
static bool SelectDriverImpl(const std::string &name, Driver::Type type);
static void MarkVideoDriverOperational();
protected:
DriverFactoryBase(Driver::Type type, int priority, const char *name, const char *description);
virtual ~DriverFactoryBase();
/**
* Does the driver use hardware acceleration (video-drivers only).
* @return True if the driver uses hardware acceleration.
*/
virtual bool UsesHardwareAcceleration() const
{
return false;
}
public:
/**
* Shuts down all active drivers
*/
static void ShutdownDrivers()
{
for (Driver::Type dt = Driver::DT_BEGIN; dt < Driver::DT_END; dt++) {
Driver *driver = *GetActiveDriver(dt);
if (driver != nullptr) driver->Stop();
}
}
static void SelectDriver(const std::string &name, Driver::Type type);
static void GetDriversInfo(std::back_insert_iterator<std::string> &output_iterator);
/**
* Get a nice description of the driver-class.
* @return The description.
*/
const char *GetDescription() const
{
return this->description;
}
/**
* Create an instance of this driver-class.
* @return The instance.
*/
virtual Driver *CreateInstance() const = 0;
};
#endif /* DRIVER_H */
|