diff options
Diffstat (limited to 'backends')
-rw-r--r-- | backends/fs/fs.h | 11 | ||||
-rw-r--r-- | backends/fs/posix/posix-fs.cpp | 1 | ||||
-rw-r--r-- | backends/fs/windows/windows-fs.cpp | 16 | ||||
-rw-r--r-- | backends/midi/adlib.cpp | 195 | ||||
-rw-r--r-- | backends/midi/alsa.cpp | 20 | ||||
-rw-r--r-- | backends/midi/coreaudio.cpp | 15 | ||||
-rw-r--r-- | backends/midi/null.cpp | 6 | ||||
-rw-r--r-- | backends/midi/quicktime.cpp | 17 | ||||
-rw-r--r-- | backends/midi/windows.cpp | 22 | ||||
-rw-r--r-- | backends/null/null.cpp | 4 | ||||
-rw-r--r-- | backends/sdl/fb2opengl.h | 659 | ||||
-rw-r--r-- | backends/sdl/sdl-common.cpp | 217 | ||||
-rw-r--r-- | backends/sdl/sdl-common.h | 18 | ||||
-rw-r--r-- | backends/sdl/sdl.cpp | 28 | ||||
-rw-r--r-- | backends/sdl/sdl_gl.cpp | 123 |
15 files changed, 636 insertions, 716 deletions
diff --git a/backends/fs/fs.h b/backends/fs/fs.h index abade8f189..a001fb202c 100644 --- a/backends/fs/fs.h +++ b/backends/fs/fs.h @@ -148,14 +148,12 @@ public: */ class FSList : ScummVM::List<FilesystemNode *> { public: - ~FSList() - { + ~FSList() { for (int i = 0; i < _size; i++) delete _data[i]; } - void push_back(const FilesystemNode& element) - { + void push_back(const FilesystemNode &element) { ensureCapacity(_size + 1); // Determine where to insert the item. // TODO this is inefficient, should use binary search instead @@ -163,13 +161,12 @@ public: while (i < _size && *_data[i] < element) i++; if (i < _size) - memmove(&_data[i+1], &_data[i], (_size - i) * sizeof(FilesystemNode *)); + memmove(&_data[i + 1], &_data[i], (_size - i) * sizeof(FilesystemNode *)); _data[i] = element.clone(); _size++; } - const FilesystemNode& operator [](int idx) const - { + const FilesystemNode& operator [](int idx) const { assert(idx >= 0 && idx < _size); return *_data[idx]; } diff --git a/backends/fs/posix/posix-fs.cpp b/backends/fs/posix/posix-fs.cpp index 23ad5786fe..eec49da03e 100644 --- a/backends/fs/posix/posix-fs.cpp +++ b/backends/fs/posix/posix-fs.cpp @@ -141,7 +141,6 @@ const char *lastPathComponent(const ScummVM::String &str) { } FilesystemNode *POSIXFilesystemNode::parent() const { - POSIXFilesystemNode *p = new POSIXFilesystemNode(); // Root node is its own parent. Still we can't just return this diff --git a/backends/fs/windows/windows-fs.cpp b/backends/fs/windows/windows-fs.cpp index 2cdb0d625c..cb7974a48e 100644 --- a/backends/fs/windows/windows-fs.cpp +++ b/backends/fs/windows/windows-fs.cpp @@ -186,22 +186,22 @@ FSList *WindowsFilesystemNode::listDir(ListMode mode) const { } const char *lastPathComponent(const ScummVM::String &str) { - const char *start = str.c_str(); - const char *cur = start + str.size() - 2; + const char *start = str.c_str(); + const char *cur = start + str.size() - 2; - while (cur > start && *cur != '\\') { - --cur; - } + while (cur > start && *cur != '\\') { + --cur; + } - return cur+1; + return cur + 1; } FilesystemNode *WindowsFilesystemNode::parent() const { assert(_isValid || _isPseudoRoot); WindowsFilesystemNode *p = new WindowsFilesystemNode(); if (!_isPseudoRoot && _path.size() > 3) { - const char *start = _path.c_str(); - const char *end = lastPathComponent(_path); + const char *start = _path.c_str(); + const char *end = lastPathComponent(_path); p->_path = String(start, end - start); p->_isValid = true; diff --git a/backends/midi/adlib.cpp b/backends/midi/adlib.cpp index 3cdddb5f92..873fe6007b 100644 --- a/backends/midi/adlib.cpp +++ b/backends/midi/adlib.cpp @@ -431,8 +431,7 @@ const byte volume_table[] = { 62, 63, 63, 63 }; -static int lookup_volume(int a, int b) -{ +static int lookup_volume(int a, int b) { if (b == 0) return 0; @@ -458,8 +457,7 @@ static int lookup_volume(int a, int b) } } -static void create_lookup_table() -{ +static void create_lookup_table() { int i, j; int sum; @@ -476,8 +474,6 @@ static void create_lookup_table() typedef void TimerCallback (void *); - - //////////////////////////////////////// // // Adlib MIDI driver @@ -570,34 +566,28 @@ private: static void premix_proc(void *param, int16 *buf, uint len); }; - - // MidiChannel method implementations void AdlibPart::init (MidiDriver_ADLIB *owner, byte channel) { _owner = owner; _channel = channel; - } -MidiDriver *AdlibPart::device() -{ +MidiDriver *AdlibPart::device() { return _owner; } -void AdlibPart::noteOff (byte note) -{ +void AdlibPart::noteOff (byte note) { _owner->part_key_off (this, note); } -void AdlibPart::noteOn (byte note, byte velocity) -{ +void AdlibPart::noteOn (byte note, byte velocity) { _owner->part_key_on (this, note, velocity); } -void AdlibPart::programChange (byte program) -{ - if (program > 127) return; +void AdlibPart::programChange (byte program) { + if (program > 127) + return; uint i; uint count = 0; @@ -609,8 +599,7 @@ void AdlibPart::programChange (byte program) _owner->part_set_instrument (this, (AdlibInstrument *) &map_gm_to_fm [program]); } -void AdlibPart::pitchBend (int16 bend) -{ +void AdlibPart::pitchBend (int16 bend) { MidiChannelAdl *mc; _pitchbend = bend; @@ -620,8 +609,7 @@ void AdlibPart::pitchBend (int16 bend) } } -void AdlibPart::controlChange (byte control, byte value) -{ +void AdlibPart::controlChange (byte control, byte value) { switch (control) { case 1: modulationWheel (value); break; case 7: volume (value); break; @@ -640,8 +628,7 @@ void AdlibPart::controlChange (byte control, byte value) } } -void AdlibPart::modulationWheel (byte value) -{ +void AdlibPart::modulationWheel (byte value) { MidiChannelAdl *mc; _modwheel = value; @@ -653,8 +640,7 @@ void AdlibPart::modulationWheel (byte value) } } -void AdlibPart::volume (byte value) -{ +void AdlibPart::volume (byte value) { MidiChannelAdl *mc; _vol_eff = value; @@ -666,8 +652,7 @@ void AdlibPart::volume (byte value) } } -void AdlibPart::pitchBendFactor (byte value) -{ +void AdlibPart::pitchBendFactor (byte value) { MidiChannelAdl *mc; _pitchbend_factor = value; @@ -677,8 +662,7 @@ void AdlibPart::pitchBendFactor (byte value) } } -void AdlibPart::detune (byte value) -{ +void AdlibPart::detune (byte value) { MidiChannelAdl *mc; _detune_eff = value; @@ -688,13 +672,11 @@ void AdlibPart::detune (byte value) } } -void AdlibPart::priority (byte value) -{ +void AdlibPart::priority (byte value) { _pri_eff = value; } -void AdlibPart::sustain (bool value) -{ +void AdlibPart::sustain (bool value) { MidiChannelAdl *mc; _pedal = value; @@ -706,23 +688,18 @@ void AdlibPart::sustain (bool value) } } -void AdlibPart::allNotesOff() -{ +void AdlibPart::allNotesOff() { while (_mc) _owner->mc_off (_mc); } -void AdlibPart::sysEx_customInstrument (uint32 type, byte *instr) -{ +void AdlibPart::sysEx_customInstrument (uint32 type, byte *instr) { _owner->sysEx_customInstrument (this, type, instr); } - - // MidiDriver method implementations -MidiDriver_ADLIB::MidiDriver_ADLIB() -{ +MidiDriver_ADLIB::MidiDriver_ADLIB() { uint i; for (i = 0; i < ARRAYSIZE(_parts); ++i) { _parts[i].init (this, i); @@ -731,8 +708,7 @@ MidiDriver_ADLIB::MidiDriver_ADLIB() _isOpen = false; } -int MidiDriver_ADLIB::open () -{ +int MidiDriver_ADLIB::open() { if (_isOpen) return MERR_ALREADY_OPEN; _isOpen = true; @@ -765,8 +741,7 @@ int MidiDriver_ADLIB::open () return 0; } -void MidiDriver_ADLIB::close() -{ +void MidiDriver_ADLIB::close() { uint i; for (i = 0; i < ARRAYSIZE(_midi_channels); ++i) { if (_midi_channels [i]._part) @@ -779,8 +754,7 @@ void MidiDriver_ADLIB::close() _isOpen = false; } -void MidiDriver_ADLIB::send (uint32 b) -{ +void MidiDriver_ADLIB::send (uint32 b) { //byte param3 = (byte) ((b >> 24) & 0xFF); byte param2 = (byte) ((b >> 16) & 0xFF); byte param1 = (byte) ((b >> 8) & 0xFF); @@ -790,13 +764,16 @@ void MidiDriver_ADLIB::send (uint32 b) switch (cmd) { case 0x80:// Note Off - part_key_off (part, param1); break; + part_key_off (part, param1); + break; case 0x90: // Note On - part_key_on (part, param1, param2); break; + part_key_on (part, param1, param2); + break; case 0xA0: // Aftertouch break; // Not supported. case 0xB0: // Control Change - part->controlChange (param1, param2); break; + part->controlChange (param1, param2); + break; case 0xC0: // Program Change if (chan != 9) part->programChange (param1); @@ -804,7 +781,8 @@ void MidiDriver_ADLIB::send (uint32 b) case 0xD0: // Channel Pressure break; // Not supported. case 0xE0: // Pitch Bend - part->pitchBend ((param1 | (param2 << 7)) - 0x2000); break; + part->pitchBend ((param1 | (param2 << 7)) - 0x2000); + break; case 0xF0: // SysEx // We should never get here! SysEx information has to be // sent via high-level semantic methods. @@ -816,8 +794,7 @@ void MidiDriver_ADLIB::send (uint32 b) } } -uint32 MidiDriver_ADLIB::property (int prop, uint32 param) -{ +uint32 MidiDriver_ADLIB::property (int prop, uint32 param) { switch (prop) { case PROP_SMALLHEADER: // Indicates older game, use different operator volume algorithm _game_SmallHeader = (param > 0); @@ -827,42 +804,37 @@ uint32 MidiDriver_ADLIB::property (int prop, uint32 param) return 0; } -void MidiDriver_ADLIB::setPitchBendRange (byte channel, uint range) -{ +void MidiDriver_ADLIB::setPitchBendRange (byte channel, uint range) { MidiChannelAdl *mc; AdlibPart *part = &_parts [channel]; part->_pitchbend_factor = range; for (mc = part->_mc; mc; mc = mc->_next) { adlib_note_on(mc->_channel, mc->_note + part->_transpose_eff, - (part->_pitchbend * part->_pitchbend_factor >> 6) + part->_detune_eff); + (part->_pitchbend * part->_pitchbend_factor >> 6) + part->_detune_eff); } } -void MidiDriver_ADLIB::sysEx_customInstrument (byte channel, uint32 type, byte *instr) -{ +void MidiDriver_ADLIB::sysEx_customInstrument (byte channel, uint32 type, byte *instr) { sysEx_customInstrument (&_parts [channel], type, instr); } -void MidiDriver_ADLIB::sysEx_customInstrument (AdlibPart *part, uint32 type, byte *instr) -{ +void MidiDriver_ADLIB::sysEx_customInstrument (AdlibPart *part, uint32 type, byte *instr) { if (type == 'ADL ') { AdlibInstrument *i = &part->_part_instr; memcpy(i, instr, sizeof(AdlibInstrument)); } } -void MidiDriver_ADLIB::setTimerCallback (void *timer_param, void (*timer_proc) (void *)) -{ +void MidiDriver_ADLIB::setTimerCallback (void *timer_param, void (*timer_proc) (void *)) { _timer_proc = (TimerCallback *) timer_proc; _timer_param = timer_param; } -MidiChannel *MidiDriver_ADLIB::allocateChannel() -{ +MidiChannel *MidiDriver_ADLIB::allocateChannel() { AdlibPart *part; uint i; - + for (i = 0; i < ARRAYSIZE(_parts); ++i) { part = &_parts[i]; if (!part->_allocated) { @@ -873,22 +845,17 @@ MidiChannel *MidiDriver_ADLIB::allocateChannel() return NULL; } -MidiDriver *MidiDriver_ADLIB_create() -{ +MidiDriver *MidiDriver_ADLIB_create() { return new MidiDriver_ADLIB(); } - - // All the code brought over from IMuseAdlib -void MidiDriver_ADLIB::premix_proc(void *param, int16 *buf, uint len) -{ +void MidiDriver_ADLIB::premix_proc(void *param, int16 *buf, uint len) { ((MidiDriver_ADLIB *) param)->generate_samples(buf, len); } -void MidiDriver_ADLIB::adlib_write(byte port, byte value) -{ +void MidiDriver_ADLIB::adlib_write(byte port, byte value) { if (_adlib_reg_cache[port] == value) return; _adlib_reg_cache[port] = value; @@ -896,8 +863,7 @@ void MidiDriver_ADLIB::adlib_write(byte port, byte value) OPLWriteReg(_opl, port, value); } -void MidiDriver_ADLIB::generate_samples(int16 *data, int len) -{ +void MidiDriver_ADLIB::generate_samples(int16 *data, int len) { int step; if (!_opl) { @@ -921,13 +887,11 @@ void MidiDriver_ADLIB::generate_samples(int16 *data, int len) } while (len -= step); } -void MidiDriver_ADLIB::reset_tick() -{ +void MidiDriver_ADLIB::reset_tick() { _next_tick = 88; } -void MidiDriver_ADLIB::on_timer() -{ +void MidiDriver_ADLIB::on_timer() { MidiChannelAdl *mc; int i; @@ -952,8 +916,7 @@ void MidiDriver_ADLIB::on_timer() } } -void MidiDriver_ADLIB::mc_off(MidiChannelAdl * mc2) -{ +void MidiDriver_ADLIB::mc_off(MidiChannelAdl * mc2) { MidiChannelAdl *mc = (MidiChannelAdl *)mc2, *tmp; adlib_key_off(mc->_channel); @@ -969,8 +932,7 @@ void MidiDriver_ADLIB::mc_off(MidiChannelAdl * mc2) mc->_part = NULL; } -void MidiDriver_ADLIB::mc_inc_stuff(MidiChannelAdl *mc, Struct10 * s10, Struct11 * s11) -{ +void MidiDriver_ADLIB::mc_inc_stuff(MidiChannelAdl *mc, Struct10 *s10, Struct11 *s11) { byte code; AdlibPart *part = mc->_part; @@ -981,15 +943,15 @@ void MidiDriver_ADLIB::mc_inc_stuff(MidiChannelAdl *mc, Struct10 * s10, Struct11 case 0: mc->_vol_2 = s10->start_value + s11->modify_val; adlib_set_param(mc->_channel, 0, - volume_table[lookup_table[mc->_vol_2] - [part->_vol_eff >> 2]]); + volume_table[lookup_table[mc->_vol_2] + [part->_vol_eff >> 2]]); break; case 13: mc->_vol_1 = s10->start_value + s11->modify_val; if (mc->_twochan) { adlib_set_param(mc->_channel, 13, - volume_table[lookup_table[mc->_vol_1] - [part->_vol_eff >> 2]]); + volume_table[lookup_table[mc->_vol_1] + [part->_vol_eff >> 2]]); } else { adlib_set_param(mc->_channel, 13, mc->_vol_1); } @@ -1002,7 +964,7 @@ void MidiDriver_ADLIB::mc_inc_stuff(MidiChannelAdl *mc, Struct10 * s10, Struct11 break; default: adlib_set_param(mc->_channel, s11->param, - s10->start_value + s11->modify_val); + s10->start_value + s11->modify_val); break; } } @@ -1011,14 +973,12 @@ void MidiDriver_ADLIB::mc_inc_stuff(MidiChannelAdl *mc, Struct10 * s10, Struct11 adlib_key_onoff(mc->_channel); } -void MidiDriver_ADLIB::adlib_key_off(int chan) -{ +void MidiDriver_ADLIB::adlib_key_off(int chan){ byte port = chan + 0xB0; adlib_write(port, adlib_read(port) & ~0x20); } -byte MidiDriver_ADLIB::struct10_ontimer(Struct10 * s10, Struct11 * s11) -{ +byte MidiDriver_ADLIB::struct10_ontimer(Struct10 *s10, Struct11 *s11) { byte result = 0; int i; @@ -1061,8 +1021,7 @@ byte MidiDriver_ADLIB::struct10_ontimer(Struct10 * s10, Struct11 * s11) return result; } -void MidiDriver_ADLIB::adlib_set_param(int channel, byte param, int value) -{ +void MidiDriver_ADLIB::adlib_set_param(int channel, byte param, int value) { const AdlibSetParams *as; byte port; @@ -1096,8 +1055,7 @@ void MidiDriver_ADLIB::adlib_set_param(int channel, byte param, int value) adlib_write(port, (adlib_read(port) & ~as->c) | (((byte)value) << as->b)); } -void MidiDriver_ADLIB::adlib_key_onoff(int channel) -{ +void MidiDriver_ADLIB::adlib_key_onoff(int channel) { byte val; byte port = channel + 0xB0; assert(channel >= 0 && channel < 9); @@ -1107,8 +1065,7 @@ void MidiDriver_ADLIB::adlib_key_onoff(int channel) adlib_write(port, val | 0x20); } -void MidiDriver_ADLIB::struct10_setup(Struct10 * s10) -{ +void MidiDriver_ADLIB::struct10_setup(Struct10 *s10) { int b, c, d, e, f, g, h; byte t; @@ -1157,8 +1114,7 @@ void MidiDriver_ADLIB::struct10_setup(Struct10 * s10) s10->speed_lo_counter = 0; } -void MidiDriver_ADLIB::adlib_playnote(int channel, int note) -{ +void MidiDriver_ADLIB::adlib_playnote(int channel, int note) { byte old, oct, notex; int note2; int i; @@ -1189,8 +1145,7 @@ void MidiDriver_ADLIB::adlib_playnote(int channel, int note) adlib_write(channel + 0xB0, oct | 0x20); } -int MidiDriver_ADLIB::random_nr(int a) -{ +int MidiDriver_ADLIB::random_nr(int a) { static byte _rand_seed = 1; if (_rand_seed & 1) { _rand_seed >>= 1; @@ -1201,8 +1156,7 @@ int MidiDriver_ADLIB::random_nr(int a) return _rand_seed * a >> 8; } -void MidiDriver_ADLIB::part_key_off (AdlibPart *part, byte note) -{ +void MidiDriver_ADLIB::part_key_off (AdlibPart *part, byte note) { MidiChannelAdl *mc; for (mc = part->_mc; mc; mc = mc->_next) { @@ -1215,8 +1169,7 @@ void MidiDriver_ADLIB::part_key_off (AdlibPart *part, byte note) } } -void MidiDriver_ADLIB::part_key_on (AdlibPart *part, byte note, byte velocity) -{ +void MidiDriver_ADLIB::part_key_on (AdlibPart *part, byte note, byte velocity) { MidiChannelAdl *mc; mc = allocate_midichan(part->_pri_eff); @@ -1227,8 +1180,7 @@ void MidiDriver_ADLIB::part_key_on (AdlibPart *part, byte note, byte velocity) mc_key_on(mc, note, velocity); } -MidiChannelAdl *MidiDriver_ADLIB::allocate_midichan(byte pri) -{ +MidiChannelAdl *MidiDriver_ADLIB::allocate_midichan(byte pri) { MidiChannelAdl *ac, *best = NULL; int i; @@ -1251,8 +1203,7 @@ MidiChannelAdl *MidiDriver_ADLIB::allocate_midichan(byte pri) return best; } -void MidiDriver_ADLIB::link_mc (AdlibPart *part, MidiChannelAdl *mc) -{ +void MidiDriver_ADLIB::link_mc (AdlibPart *part, MidiChannelAdl *mc) { mc->_part = part; mc->_next = (MidiChannelAdl *)part->_mc; part->_mc = mc; @@ -1262,8 +1213,7 @@ void MidiDriver_ADLIB::link_mc (AdlibPart *part, MidiChannelAdl *mc) mc->_next->_prev = mc; } -void MidiDriver_ADLIB::mc_key_on (MidiChannelAdl * mc2, byte note, byte velocity) -{ +void MidiDriver_ADLIB::mc_key_on (MidiChannelAdl *mc2, byte note, byte velocity) { MidiChannelAdl *mc = (MidiChannelAdl *)mc2; AdlibPart *part = mc->_part; AdlibInstrument *instr = &part->_part_instr; @@ -1309,8 +1259,7 @@ void MidiDriver_ADLIB::mc_key_on (MidiChannelAdl * mc2, byte note, byte velocity } } -void MidiDriver_ADLIB::adlib_setup_channel(int chan, AdlibInstrument * instr, byte vol_1, byte vol_2) -{ +void MidiDriver_ADLIB::adlib_setup_channel(int chan, AdlibInstrument *instr, byte vol_1, byte vol_2) { byte port; assert(chan >= 0 && chan < 9); @@ -1348,10 +1297,8 @@ void MidiDriver_ADLIB::adlib_note_on_ex(int chan, byte note, int mod) } void MidiDriver_ADLIB::mc_init_stuff (MidiChannelAdl *mc, Struct10 * s10, - Struct11 * s11, byte flags, InstrumentExtra * ie) -{ + Struct11 * s11, byte flags, InstrumentExtra * ie) { AdlibPart *part = mc->_part; - s11->modify_val = 0; s11->flag0x40 = flags & 0x40; s10->loop = flags & 0x20; @@ -1387,8 +1334,7 @@ void MidiDriver_ADLIB::mc_init_stuff (MidiChannelAdl *mc, Struct10 * s10, struct10_init(s10, ie); } -void MidiDriver_ADLIB::struct10_init(Struct10 * s10, InstrumentExtra * ie) -{ +void MidiDriver_ADLIB::struct10_init(Struct10 *s10, InstrumentExtra *ie) { s10->active = 1; s10->cur_val = 0; s10->modwheel_last = 31; @@ -1408,8 +1354,7 @@ void MidiDriver_ADLIB::struct10_init(Struct10 * s10, InstrumentExtra * ie) struct10_setup(s10); } -int MidiDriver_ADLIB::adlib_read_param(int chan, byte param) -{ +int MidiDriver_ADLIB::adlib_read_param(int chan, byte param) { const AdlibSetParams *as; byte val; byte port; @@ -1442,8 +1387,7 @@ int MidiDriver_ADLIB::adlib_read_param(int chan, byte param) return val; } -void MidiDriver_ADLIB::adlib_note_on(int chan, byte note, int mod) -{ +void MidiDriver_ADLIB::adlib_note_on(int chan, byte note, int mod) { int code; assert(chan >= 0 && chan < 9); code = (note << 7) + mod; @@ -1451,8 +1395,7 @@ void MidiDriver_ADLIB::adlib_note_on(int chan, byte note, int mod) adlib_playnote(chan, channel_table_2[chan] + code); } -void MidiDriver_ADLIB::part_set_instrument(AdlibPart *part, AdlibInstrument * instr) -{ +void MidiDriver_ADLIB::part_set_instrument(AdlibPart *part, AdlibInstrument *instr) { AdlibInstrument *i = &part->_part_instr; memcpy(i, instr, sizeof(AdlibInstrument)); } diff --git a/backends/midi/alsa.cpp b/backends/midi/alsa.cpp index 2f7a5fb281..dfab217b2d 100644 --- a/backends/midi/alsa.cpp +++ b/backends/midi/alsa.cpp @@ -70,8 +70,7 @@ MidiDriver_ALSA::MidiDriver_ALSA() { } -int MidiDriver_ALSA::open() -{ +int MidiDriver_ALSA::open() { char *var; unsigned int caps; @@ -128,16 +127,13 @@ int MidiDriver_ALSA::open() return 0; } -void MidiDriver_ALSA::close() -{ +void MidiDriver_ALSA::close() { _isOpen = false; if (seq_handle) snd_seq_close(seq_handle); } - -void MidiDriver_ALSA::send(uint32 b) -{ +void MidiDriver_ALSA::send(uint32 b) { unsigned int midiCmd[4]; ev.type = SND_SEQ_EVENT_OSS; @@ -168,7 +164,6 @@ void MidiDriver_ALSA::send(uint32 b) snd_seq_ev_set_pgmchange(&ev, chanID, midiCmd[1]); send_event(0); break; - case 0xE0:{ // long theBend = ((((long)midiCmd[1] + (long)(midiCmd[2] << 7))) - 0x2000) / 4; // snd_seq_ev_set_pitchbend(&ev, chanID, theBend); @@ -186,8 +181,7 @@ void MidiDriver_ALSA::send(uint32 b) } } -int MidiDriver_ALSA::parse_addr(char *arg, int *client, int *port) -{ +int MidiDriver_ALSA::parse_addr(char *arg, int *client, int *port) { char *p; if (isdigit(*arg)) { @@ -205,8 +199,7 @@ int MidiDriver_ALSA::parse_addr(char *arg, int *client, int *port) return 0; } -void MidiDriver_ALSA::send_event(int do_flush) -{ +void MidiDriver_ALSA::send_event(int do_flush) { snd_seq_ev_set_direct(&ev); snd_seq_ev_set_source(&ev, my_port); snd_seq_ev_set_dest(&ev, seq_client, seq_port); @@ -216,8 +209,7 @@ void MidiDriver_ALSA::send_event(int do_flush) snd_seq_flush_output(seq_handle); } -MidiDriver *MidiDriver_ALSA_create() -{ +MidiDriver *MidiDriver_ALSA_create() { return new MidiDriver_ALSA(); } diff --git a/backends/midi/coreaudio.cpp b/backends/midi/coreaudio.cpp index 199e17f730..4372171580 100644 --- a/backends/midi/coreaudio.cpp +++ b/backends/midi/coreaudio.cpp @@ -50,8 +50,7 @@ private: }; -int MidiDriver_CORE::open() -{ +int MidiDriver_CORE::open() { if (au_output != NULL) return MERR_ALREADY_OPEN; @@ -90,8 +89,7 @@ int MidiDriver_CORE::open() return 0; } -void MidiDriver_CORE::close() -{ +void MidiDriver_CORE::close() { // Stop the output AudioOutputUnitStop(au_output); @@ -100,8 +98,7 @@ void MidiDriver_CORE::close() CloseComponent(au_MusicDevice); } -void MidiDriver_CORE::send(uint32 b) -{ +void MidiDriver_CORE::send(uint32 b) { unsigned char first_byte, seccond_byte, status_byte; status_byte = (b & 0x000000FF); first_byte = (b & 0x0000FF00) >> 8; @@ -115,13 +112,11 @@ void MidiDriver_CORE::send(uint32 b) MusicDeviceMIDIEvent(au_MusicDevice, status_byte, first_byte, seccond_byte, 0); } -void MidiDriver_CORE::sysEx(byte *msg, uint16 length) -{ +void MidiDriver_CORE::sysEx(byte *msg, uint16 length) { MusicDeviceSysEx(au_MusicDevice, msg, length); } -MidiDriver *MidiDriver_CORE_create() -{ +MidiDriver *MidiDriver_CORE_create() { return new MidiDriver_CORE(); } diff --git a/backends/midi/null.cpp b/backends/midi/null.cpp index 74612d18cf..01fad7559f 100644 --- a/backends/midi/null.cpp +++ b/backends/midi/null.cpp @@ -30,13 +30,11 @@ public: void send(uint32 b) { } }; -int MidiDriver_NULL::open() -{ +int MidiDriver_NULL::open() { warning("Music not enabled - MIDI support selected with no MIDI driver available. Try Adlib"); return 0; } -MidiDriver *MidiDriver_NULL_create() -{ +MidiDriver *MidiDriver_NULL_create() { return new MidiDriver_NULL(); } diff --git a/backends/midi/quicktime.cpp b/backends/midi/quicktime.cpp index e447208bf0..c4ac0d1f40 100644 --- a/backends/midi/quicktime.cpp +++ b/backends/midi/quicktime.cpp @@ -64,13 +64,11 @@ private: byte _pitchbend_range [16]; }; -MidiDriver_QT::MidiDriver_QT() -{ +MidiDriver_QT::MidiDriver_QT() { qtNoteAllocator = NULL; } -int MidiDriver_QT::open() -{ +int MidiDriver_QT::open() { ComponentResult qtErr = noErr; int i; @@ -129,8 +127,7 @@ void MidiDriver_QT::close() } } -void MidiDriver_QT::send(uint32 b) -{ +void MidiDriver_QT::send(uint32 b) { MusicMIDIPacket midPacket; unsigned char *midiCmd = midPacket.data; midPacket.length = 3; @@ -214,7 +211,7 @@ void MidiDriver_QT::send(uint32 b) // mysterious reasons the actual factor we have to use is more like 1/32 or 3/64. // Maybe the QT docs are right, and _pitchbend[chanID] = ((uint16) midiCmd[1] | (uint16) (midiCmd[2] << 7)); - long theBend = ((long) _pitchbend[chanID] - 0x2000) * _pitchbend_range[chanID] / 32; + long theBend = ((long) _pitchbend[chanID] - 0x2000) * _pitchbend_range[chanID] / 32; NASetController(qtNoteAllocator, qtNoteChannel[chanID], kControllerPitchBend, theBend); } @@ -227,8 +224,7 @@ void MidiDriver_QT::send(uint32 b) } } -void MidiDriver_QT::setPitchBendRange (byte channel, uint range) -{ +void MidiDriver_QT::setPitchBendRange (byte channel, uint range) { if (_pitchbend_range[channel] == range) return; _pitchbend_range[channel] = range; @@ -238,8 +234,7 @@ void MidiDriver_QT::setPitchBendRange (byte channel, uint range) NASetController(qtNoteAllocator, qtNoteChannel[channel], kControllerPitchBend, theBend); } -MidiDriver *MidiDriver_QT_create() -{ +MidiDriver *MidiDriver_QT_create() { return new MidiDriver_QT(); } diff --git a/backends/midi/windows.cpp b/backends/midi/windows.cpp index c78dea3a6e..1d34a9153a 100644 --- a/backends/midi/windows.cpp +++ b/backends/midi/windows.cpp @@ -49,13 +49,12 @@ public: void sysEx (byte *msg, uint16 length); }; -int MidiDriver_WIN::open() -{ +int MidiDriver_WIN::open() { if (_isOpen) return MERR_ALREADY_OPEN; _streamEvent = CreateEvent (NULL, true, true, NULL); - MMRESULT res = midiOutOpen((HMIDIOUT *) &_mo, MIDI_MAPPER, (unsigned long) _streamEvent, 0, CALLBACK_EVENT); + MMRESULT res = midiOutOpen((HMIDIOUT *)&_mo, MIDI_MAPPER, (unsigned long) _streamEvent, 0, CALLBACK_EVENT); if (res != MMSYSERR_NOERROR) { check_error(res); return MERR_DEVICE_NOT_AVAILABLE; @@ -65,8 +64,7 @@ int MidiDriver_WIN::open() return 0; } -void MidiDriver_WIN::close() -{ +void MidiDriver_WIN::close() { _isOpen = false; check_error(midiOutClose(_mo)); CloseHandle (_streamEvent); @@ -100,7 +98,7 @@ void MidiDriver_WIN::sysEx (byte *msg, uint16 length) midiOutUnprepareHeader (_mo, &_streamHeader, sizeof (_streamHeader)); _streamBuffer [0] = 0xFF; - memcpy (&_streamBuffer[1], msg, length); + memcpy(&_streamBuffer[1], msg, length); _streamBuffer [length+1] = 0xF7; _streamHeader.lpData = (char *) _streamBuffer; @@ -115,17 +113,16 @@ void MidiDriver_WIN::sysEx (byte *msg, uint16 length) return; } - ResetEvent (_streamEvent); + ResetEvent(_streamEvent); result = midiOutLongMsg (_mo, &_streamHeader, sizeof (_streamHeader)); if (result != MMSYSERR_NOERROR) { - check_error (result); - SetEvent (_streamEvent); + check_error(result); + SetEvent(_streamEvent); return; } } -void MidiDriver_WIN::check_error(MMRESULT result) -{ +void MidiDriver_WIN::check_error(MMRESULT result) { char buf[200]; if (result != MMSYSERR_NOERROR) { midiOutGetErrorText(result, buf, 200); @@ -133,8 +130,7 @@ void MidiDriver_WIN::check_error(MMRESULT result) } } -MidiDriver *MidiDriver_WIN_create() -{ +MidiDriver *MidiDriver_WIN_create() { return new MidiDriver_WIN(); } diff --git a/backends/null/null.cpp b/backends/null/null.cpp index df42dbfc38..0b779b61d5 100644 --- a/backends/null/null.cpp +++ b/backends/null/null.cpp @@ -63,7 +63,7 @@ uint32 OSystem_NULL::get_ticks() { #ifdef UNIX struct timeval tv; gettimeofday(&tv, NULL); - a = tv.tv_sec * 1000 + tv.tv_usec/1000; + a = tv.tv_sec * 1000 + tv.tv_usec / 1000; #endif return a; @@ -74,7 +74,7 @@ void OSystem_NULL::delay_msecs(uint msecs) { Sleep(msecs); #endif #ifdef UNIX - usleep(msecs*1000); + usleep(msecs * 1000); #endif } diff --git a/backends/sdl/fb2opengl.h b/backends/sdl/fb2opengl.h index 705093c976..e69f9af180 100644 --- a/backends/sdl/fb2opengl.h +++ b/backends/sdl/fb2opengl.h @@ -42,400 +42,395 @@ #endif class FB2GL { - private: - // Framebuffer for 8 bpp - unsigned char ogl_fb[256][256]; - unsigned char ogl_fbb[256][64]; - // Framebuffer for RGBA - unsigned char ogl_fb1[256][256][4]; - unsigned char ogl_fb2[256][64][4]; - // Framebuffer for the blit function (SDL Blitting) - unsigned char fb1[256*256*4]; // Enough room for RGBA - unsigned char fb2[64*256*4]; // Enough room for RGBA - // Texture(s) - GLuint texture; - GLuint textureb; - // Display list - GLuint dlist; - // Color Table (256 colors, RGB) - char ogl_ctable[256][3]; - char ogl_temp_ctable[256][3]; // Support for OpenGL 1.1 - char flags; - void maketex(); - void makedlist(int xf, int yf); - - public: - SDL_Surface *screen; - FB2GL() { - flags=0; - screen=NULL; - } - int init(int width, int height, int xfix, int yfix, char _flags); - void update(void *fb, int width, int height, int pitch, int xskip, int yskip); - void palette(int index, int r, int g, int b); - void setPalette(int first, int ncolors); - void blit16(SDL_Surface *fb, int num_rect, SDL_Rect *rectlist, int xskip, int yskip); - void display(); + private: + // Framebuffer for 8 bpp + unsigned char ogl_fb[256][256]; + unsigned char ogl_fbb[256][64]; + // Framebuffer for RGBA + unsigned char ogl_fb1[256][256][4]; + unsigned char ogl_fb2[256][64][4]; + // Framebuffer for the blit function (SDL Blitting) + unsigned char fb1[256 * 256 * 4]; // Enough room for RGBA + unsigned char fb2[64 * 256 * 4]; // Enough room for RGBA + // Texture(s) + GLuint texture; + GLuint textureb; + // Display list + GLuint dlist; + // Color Table (256 colors, RGB) + char ogl_ctable[256][3]; + char ogl_temp_ctable[256][3]; // Support for OpenGL 1.1 + char flags; + void maketex(); + void makedlist(int xf, int yf); + public: + SDL_Surface *screen; + FB2GL() { + flags = 0; + screen = NULL; + } + int init(int width, int height, int xfix, int yfix, char _flags); + void update(void *fb, int width, int height, int pitch, int xskip, int yskip); + void palette(int index, int r, int g, int b); + void setPalette(int first, int ncolors); + void blit16(SDL_Surface *fb, int num_rect, SDL_Rect *rectlist, int xskip, int yskip); + void display(); }; -void FB2GL::maketex() -{ - glGenTextures(0,&texture); - glBindTexture(GL_TEXTURE_2D,texture); +void FB2GL::maketex() { + glGenTextures(0,&texture); + glBindTexture(GL_TEXTURE_2D,texture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - // Bilinear filtering - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + // Bilinear filtering + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); /* - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); */ - - if (flags & FB2GL_RGBA) { - glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,256,256,0,GL_RGBA, GL_UNSIGNED_BYTE, ogl_fb1); - } - else { - glTexImage2D(GL_TEXTURE_2D,0,GL_COLOR_INDEX,256,256,0,GL_COLOR_INDEX, GL_UNSIGNED_BYTE, ogl_fb); - } - - if (flags & FB2GL_320) { - glGenTextures(1,&textureb); - glBindTexture(GL_TEXTURE_2D,textureb); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - - // Bilinear filtering - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + + if (flags & FB2GL_RGBA) { + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, ogl_fb1); + } + else { + glTexImage2D(GL_TEXTURE_2D, 0, GL_COLOR_INDEX, 256, 256, 0, GL_COLOR_INDEX, GL_UNSIGNED_BYTE, ogl_fb); + } + + if (flags & FB2GL_320) { + glGenTextures(1, &textureb); + glBindTexture(GL_TEXTURE_2D, textureb); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + + // Bilinear filtering + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); /* - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); */ - if (flags & FB2GL_RGBA) { - glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,64,256,0,GL_RGBA, - GL_UNSIGNED_BYTE, ogl_fb2); - } - else { - glTexImage2D(GL_TEXTURE_2D,0,GL_COLOR_INDEX,64,256,0,GL_COLOR_INDEX, - GL_UNSIGNED_BYTE, ogl_fbb); - } - } - + if (flags & FB2GL_RGBA) { + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 64, 256, 0, GL_RGBA, + GL_UNSIGNED_BYTE, ogl_fb2); + } + else { + glTexImage2D(GL_TEXTURE_2D, 0, GL_COLOR_INDEX, 64, 256, 0, GL_COLOR_INDEX, + GL_UNSIGNED_BYTE, ogl_fbb); + } + } } -void FB2GL::makedlist(int xf, int yf) -{ - double xfix=(double)xf/128; // 128 = 256/2 (half texture => 0.0 to 1.0) - double yfix=(double)yf/128; - // End of 256x256 (from -1.0 to 1.0) - double texend = (double)96/160; // 160=320/2 (== 0.0), 256-160=96. - - if (glIsList(dlist)) - glDeleteLists(dlist,1); - - dlist=glGenLists(1); - glNewList(dlist,GL_COMPILE); - - glEnable(GL_TEXTURE_2D); - - glBindTexture(GL_TEXTURE_2D, texture); - - if (!(flags & FB2GL_320)) { // Normal 256x256 - glBegin(GL_QUADS); - glTexCoord2f(0.0,1.0); glVertex2f(-1.0,-1.0-yfix); // upper left - glTexCoord2f(0.0,0.0); glVertex2f(-1.0,1.0); // lower left - glTexCoord2f(1.0,0.0); glVertex2f(1.0+xfix,1.0); // lower right - glTexCoord2f(1.0,1.0); glVertex2f(1.0+xfix,-1.0-yfix); // upper right - glEnd(); - } - else { // 320x256 - - // First, the 256x256 texture - glBegin(GL_QUADS); - glTexCoord2f(0.0,1.0); glVertex2f(-1.0,-1.0-yfix); // upper left - glTexCoord2f(0.0,0.0); glVertex2f(-1.0,1.0); // lower left - glTexCoord2f(1.0,0.0); glVertex2f(texend+xfix,1.0); // lower right - glTexCoord2f(1.0,1.0); glVertex2f(texend+xfix,-1.0-yfix); // upper right - glEnd(); - - // 64x256 - glBindTexture(GL_TEXTURE_2D, textureb); - - glBegin(GL_QUADS); - glTexCoord2f(0.0,1.0); glVertex2f(texend+xfix,-1.0-yfix); // upper left - glTexCoord2f(0.0,0.0); glVertex2f(texend+xfix,1.0); // lower left - glTexCoord2f(1.0,0.0); glVertex2f(1.0+xfix,1.0); // lower right - glTexCoord2f(1.0,1.0); glVertex2f(1.0+xfix,-1.0-yfix); // upper right - glEnd(); - } - - glDisable(GL_TEXTURE_2D); - - glEndList(); +void FB2GL::makedlist(int xf, int yf) { + double xfix = (double)xf / 128; // 128 = 256/2 (half texture => 0.0 to 1.0) + double yfix = (double)yf / 128; + // End of 256x256 (from -1.0 to 1.0) + double texend = (double)96 / 160; // 160=320/2 (== 0.0), 256-160=96. + + if (glIsList(dlist)) + glDeleteLists(dlist, 1); + + dlist=glGenLists(1); + glNewList(dlist, GL_COMPILE); + + glEnable(GL_TEXTURE_2D); + + glBindTexture(GL_TEXTURE_2D, texture); + + if (!(flags & FB2GL_320)) { // Normal 256x256 + glBegin(GL_QUADS); + glTexCoord2f(0.0, 1.0); glVertex2f(-1.0, -1.0 - yfix); // upper left + glTexCoord2f(0.0, 0.0); glVertex2f(-1.0, 1.0); // lower left + glTexCoord2f(1.0, 0.0); glVertex2f(1.0 + xfix, 1.0); // lower right + glTexCoord2f(1.0, 1.0); glVertex2f(1.0 + xfix, -1.0 - yfix); // upper right + glEnd(); + } + else { // 320x256 + + // First, the 256x256 texture + glBegin(GL_QUADS); + glTexCoord2f(0.0, 1.0); glVertex2f( -1.0, -1.0 - yfix); // upper left + glTexCoord2f(0.0, 0.0); glVertex2f(-1.0, 1.0); // lower left + glTexCoord2f(1.0, 0.0); glVertex2f(texend + xfix, 1.0); // lower right + glTexCoord2f(1.0, 1.0); glVertex2f(texend + xfix, -1.0 - yfix); // upper right + glEnd(); + + // 64x256 + glBindTexture(GL_TEXTURE_2D, textureb); + + glBegin(GL_QUADS); + glTexCoord2f(0.0, 1.0); glVertex2f(texend + xfix, -1.0 - yfix); // upper left + glTexCoord2f(0.0, 0.0); glVertex2f(texend + xfix, 1.0); // lower left + glTexCoord2f(1.0, 0.0); glVertex2f(1.0 + xfix, 1.0); // lower right + glTexCoord2f(1.0, 1.0); glVertex2f(1.0 + xfix, -1.0 - yfix); // upper right + glEnd(); + } + + glDisable(GL_TEXTURE_2D); + + glEndList(); } -int FB2GL::init(int width, int height, int xfix, int yfix, char _flags) -{ - char gl_ext[4096]; - gl_ext[0]='\0'; - - flags = _flags; - - // Fullscreen? - if (!screen) { - screen = SDL_SetVideoMode(width, height, (flags & FB2GL_16BIT? 16: 0), - SDL_HWPALETTE | SDL_HWSURFACE | SDL_OPENGL | SDL_GL_DOUBLEBUFFER | - (flags & FB2GL_FS? SDL_FULLSCREEN: 0)); - } - - fprintf(stderr,"Screen BitsPerPixel: %d\n",screen->format->BitsPerPixel); - - if (!screen) { - fprintf(stderr, "Couldn't start video res %dx%d\n", width, height); - return 0; - } - - - if (!(flags & FB2GL_RGBA)) { // Check for Paletted Texture Extension - - strcpy(gl_ext, (char *)glGetString(GL_EXTENSIONS)); +int FB2GL::init(int width, int height, int xfix, int yfix, char _flags) { + char gl_ext[4096]; + gl_ext[0]='\0'; + + flags = _flags; + + // Fullscreen? + if (!screen) { + screen = SDL_SetVideoMode(width, height, (flags & FB2GL_16BIT ? 16: 0), + SDL_HWPALETTE | SDL_HWSURFACE | SDL_OPENGL | SDL_GL_DOUBLEBUFFER | + (flags & FB2GL_FS? SDL_FULLSCREEN: 0)); + } + + warning("Screen BitsPerPixel: %d\n",screen->format->BitsPerPixel); + + if (!screen) { + fprintf(stderr, "Couldn't start video res %dx%d\n", width, height); + return 0; + } + + + if (!(flags & FB2GL_RGBA)) { // Check for Paletted Texture Extension + + strcpy(gl_ext, (char *)glGetString(GL_EXTENSIONS)); fprintf(stderr,"gl_ext= %s\n",gl_ext); - if ( strstr( gl_ext , "GL_EXT_paletted_texture") ) - glEnable(GL_EXT_paletted_texture); - else { - fprintf(stderr,"Your OpenGL version doesn't support paletted texture\n"); - return 0; - } - } - - if (width>0 && height>0) - maketex(); - makedlist(xfix, yfix); - -/* glEnable(GL_ALPHA_TEST); - glEnable(GL_BLEND); - glAlphaFunc(GL_GREATER,0); - glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);*/ - - return 1; + if ( strstr( gl_ext , "GL_EXT_paletted_texture") ) + glEnable(GL_EXT_paletted_texture); + else { + fprintf(stderr,"Your OpenGL version doesn't support paletted texture\n"); + return 0; + } + } + + if (width>0 && height>0) + maketex(); + makedlist(xfix, yfix); + +/* glEnable(GL_ALPHA_TEST); + glEnable(GL_BLEND); + glAlphaFunc(GL_GREATER,0); + glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);*/ + + return 1; } void FB2GL::display() { - glCallList(dlist); - SDL_GL_SwapBuffers(); + glCallList(dlist); + SDL_GL_SwapBuffers(); } void FB2GL::update(void *fb, int w, int h, int pitch, int xskip, int yskip) { - unsigned char *fb1=(unsigned char *)fb; - int x,y,scr_pitch,byte=0; - - if (flags & FB2GL_PITCH) scr_pitch=pitch; - else { - scr_pitch=w*pitch; - byte = pitch; // Bytes perl pixel (for RGBA mode) - } - - if (flags & FB2GL_RGBA) { - - if (flags & FB2GL_EXPAND) { // Expand the 8 bit fb into a RGB fb - - for (y=yskip; y<h; y++) { + unsigned char *fb1=(unsigned char *)fb; + int x,y,scr_pitch,byte=0; + + if (flags & FB2GL_PITCH) scr_pitch=pitch; + else { + scr_pitch=w*pitch; + byte = pitch; // Bytes perl pixel (for RGBA mode) + } + + if (flags & FB2GL_RGBA) { + + if (flags & FB2GL_EXPAND) { // Expand the 8 bit fb into a RGB fb + + for (y=yskip; y<h; y++) { for (x=xskip; x<w; x++) { - if (x<256) { - ogl_fb1[y][x][0] = ogl_ctable[*(fb1+x)][0]; - ogl_fb1[y][x][1] = ogl_ctable[*(fb1+x)][1]; - ogl_fb1[y][x][2] = ogl_ctable[*(fb1+x)][2]; - ogl_fb1[y][x][3] = 255; - } - else { - ogl_fb2[y][x-256][0] = ogl_ctable[*(fb1+x)][0]; - ogl_fb2[y][x-256][1] = ogl_ctable[*(fb1+x)][1]; - ogl_fb2[y][x-256][2] = ogl_ctable[*(fb1+x)][2]; - ogl_fb2[y][x-256][3] = 255; - } + if (x<256) { + ogl_fb1[y][x][0] = ogl_ctable[*(fb1+x)][0]; + ogl_fb1[y][x][1] = ogl_ctable[*(fb1+x)][1]; + ogl_fb1[y][x][2] = ogl_ctable[*(fb1+x)][2]; + ogl_fb1[y][x][3] = 255; + } + else { + ogl_fb2[y][x-256][0] = ogl_ctable[*(fb1+x)][0]; + ogl_fb2[y][x-256][1] = ogl_ctable[*(fb1+x)][1]; + ogl_fb2[y][x-256][2] = ogl_ctable[*(fb1+x)][2]; + ogl_fb2[y][x-256][3] = 255; + } } fb1 += scr_pitch; - } - } - else { // No expansion - for (y=yskip; y<h; y++) { + } + } + else { // No expansion + for (y=yskip; y<h; y++) { for (x=xskip; x<w; x++) { - if (x<256) { - ogl_fb1[y-yskip][x-xskip][0] = *(fb1+(x*byte)); - ogl_fb1[y-yskip][x-xskip][1] = *(fb1+(x*byte)+1); - ogl_fb1[y-yskip][x-xskip][2] = *(fb1+(x*byte)+2); - } - else { - ogl_fb2[y-yskip][x-256][0] = *(fb1+(x*byte)); - ogl_fb2[y-yskip][x-256][1] = *(fb1+(x*byte)+1); - ogl_fb2[y-yskip][x-256][2] = *(fb1+(x*byte)+2); - } + if (x<256) { + ogl_fb1[y-yskip][x-xskip][0] = *(fb1+(x*byte)); + ogl_fb1[y-yskip][x-xskip][1] = *(fb1+(x*byte)+1); + ogl_fb1[y-yskip][x-xskip][2] = *(fb1+(x*byte)+2); + } + else { + ogl_fb2[y-yskip][x-256][0] = *(fb1+(x*byte)); + ogl_fb2[y-yskip][x-256][1] = *(fb1+(x*byte)+1); + ogl_fb2[y-yskip][x-256][2] = *(fb1+(x*byte)+2); + } } fb1 += scr_pitch; - } - } + } + } - // Update 256x256 texture - glBindTexture(GL_TEXTURE_2D,texture); - glFlush(); - glTexSubImage2D(GL_TEXTURE_2D,0,xskip,yskip,256-xskip,256-yskip,GL_RGBA, + // Update 256x256 texture + glBindTexture(GL_TEXTURE_2D,texture); + glFlush(); + glTexSubImage2D(GL_TEXTURE_2D,0,xskip,yskip,256-xskip,256-yskip,GL_RGBA, GL_UNSIGNED_BYTE,ogl_fb1); - if (flags & FB2GL_320) { - // Update 64x256 texture - glBindTexture(GL_TEXTURE_2D,textureb); - glFlush(); - glTexSubImage2D(GL_TEXTURE_2D,0,xskip,yskip,64-xskip,256-yskip,GL_RGBA, + if (flags & FB2GL_320) { + // Update 64x256 texture + glBindTexture(GL_TEXTURE_2D,textureb); + glFlush(); + glTexSubImage2D(GL_TEXTURE_2D,0,xskip,yskip,64-xskip,256-yskip,GL_RGBA, GL_UNSIGNED_BYTE,ogl_fb2); - } + } - } - else { // non RGBA (paletted) + } + else { // non RGBA (paletted) - for (y=0; y<h; y++) - for (x=0; x<w; x++) { + for (y=0; y<h; y++) + for (x=0; x<w; x++) { if (x<256) { - ogl_fb[ y ][ x ] = *(fb1 + (y)*scr_pitch + x); + ogl_fb[ y ][ x ] = *(fb1 + (y)*scr_pitch + x); } else { - ogl_fbb[ y ][ x - 256 ] = *(fb1 + y*scr_pitch + x); + ogl_fbb[ y ][ x - 256 ] = *(fb1 + y*scr_pitch + x); } - } + } - // Update 256x256 texture - glBindTexture(GL_TEXTURE_2D,texture); - glTexSubImage2D(GL_TEXTURE_2D,0,xskip,yskip,256-xskip,256-yskip, + // Update 256x256 texture + glBindTexture(GL_TEXTURE_2D,texture); + glTexSubImage2D(GL_TEXTURE_2D,0,xskip,yskip,256-xskip,256-yskip, GL_COLOR_INDEX, GL_UNSIGNED_BYTE,ogl_fb); - if (flags & FB2GL_320) { - // Update 64x256 texture - glBindTexture(GL_TEXTURE_2D,textureb); - glTexSubImage2D(GL_TEXTURE_2D,0,xskip,yskip,64-xskip,256-yskip, - GL_COLOR_INDEX, GL_UNSIGNED_BYTE,ogl_fbb); - } + if (flags & FB2GL_320) { + // Update 64x256 texture + glBindTexture(GL_TEXTURE_2D,textureb); + glTexSubImage2D(GL_TEXTURE_2D,0,xskip,yskip,64-xskip,256-yskip, + GL_COLOR_INDEX, GL_UNSIGNED_BYTE,ogl_fbb); + } - } + } - display(); + display(); } void FB2GL::blit16(SDL_Surface *fb, int num_rect, SDL_Rect *rect, int xskip, int yskip) { - int x, y, i; - int rx, ry, rw, rh; - int xend=0, yend=0; - int pitch = fb->pitch/2; // 16 bit pointer access (not char *) - int tex1_w = 0, tex2_w = 0, tex2_x = 0; - - for (i=0; i<num_rect; i++) { - tex1_w = tex2_w = tex2_x = 0; - rx = rect[i].x; - ry = rect[i].y; - rw = rect[i].w; - rh = rect[i].h; - xend = rx + rw; - yend = ry + rh; - if (xend > fb->w) continue; - if (yend > fb->h) continue; - - if (rx < 256) { // Begins before the end of the 1st texture - if (xend >= 256) { // Ends after the first texture + int x, y, i; + int rx, ry, rw, rh; + int xend=0, yend=0; + int pitch = fb->pitch/2; // 16 bit pointer access (not char *) + int tex1_w = 0, tex2_w = 0, tex2_x = 0; + + for (i=0; i<num_rect; i++) { + tex1_w = tex2_w = tex2_x = 0; + rx = rect[i].x; + ry = rect[i].y; + rw = rect[i].w; + rh = rect[i].h; + xend = rx + rw; + yend = ry + rh; + if (xend > fb->w) continue; + if (yend > fb->h) continue; + + if (rx < 256) { // Begins before the end of the 1st texture + if (xend >= 256) { // Ends after the first texture tex2_w = xend-256; // For the 2nd texture tex1_w = rw - tex2_w; // For the 1st texture - } - else tex1_w = rw; - } - else { - tex2_w = rw; - tex2_x = rx - 256; - } - - for (y = ry; y < yend; y++) { - for (x = rx; x < xend; x++) { - - if (x < 256 && tex1_w) { - int pos = (x-rx+(y-ry)*tex1_w)*4; // RGBA - SDL_GetRGB(((Uint16 *)fb->pixels)[x+y*(pitch)],fb->format, - &fb1[pos], - &fb1[pos+1], - &fb1[pos+2]); + } + else tex1_w = rw; + } + else { + tex2_w = rw; + tex2_x = rx - 256; + } + + for (y = ry; y < yend; y++) { + for (x = rx; x < xend; x++) { + + if (x < 256 && tex1_w) { + int pos = (x-rx+(y-ry)*tex1_w)*4; // RGBA + SDL_GetRGB(((Uint16 *)fb->pixels)[x+y*(pitch)],fb->format, + &fb1[pos], + &fb1[pos+1], + &fb1[pos+2]); } else if (x >= 256 && tex2_w) { - int rx2 = rx < 256? 256: rx; - int pos = (x-rx2+(y-ry)*tex2_w)*4; // RGBA - SDL_GetRGB(((Uint16 *)fb->pixels)[x+y*(pitch)],fb->format, - &fb2[pos], - &fb2[pos+1], - &fb2[pos+2]); + int rx2 = rx < 256? 256: rx; + int pos = (x-rx2+(y-ry)*tex2_w)*4; // RGBA + SDL_GetRGB(((Uint16 *)fb->pixels)[x+y*(pitch)],fb->format, + &fb2[pos], + &fb2[pos+1], + &fb2[pos+2]); + } + } + } + + if (tex1_w > 0) { + // Update 256x256 texture + glBindTexture(GL_TEXTURE_2D,texture); + glFlush(); + glTexSubImage2D(GL_TEXTURE_2D,0,rx+xskip,ry+yskip,tex1_w,rh,GL_RGBA, + GL_UNSIGNED_BYTE,fb1); + } + if (tex2_w > 0) { // What was left for this texture + // Update 64x256 texture + glBindTexture(GL_TEXTURE_2D,textureb); + glFlush(); + glTexSubImage2D(GL_TEXTURE_2D,0,tex2_x+xskip,ry+yskip,tex2_w,rh,GL_RGBA, + GL_UNSIGNED_BYTE,fb2); + } } - } - } - - if (tex1_w > 0) { - // Update 256x256 texture - glBindTexture(GL_TEXTURE_2D,texture); - glFlush(); - glTexSubImage2D(GL_TEXTURE_2D,0,rx+xskip,ry+yskip,tex1_w,rh,GL_RGBA, - GL_UNSIGNED_BYTE,fb1); - } - if (tex2_w > 0) { // What was left for this texture - // Update 64x256 texture - glBindTexture(GL_TEXTURE_2D,textureb); - glFlush(); - glTexSubImage2D(GL_TEXTURE_2D,0,tex2_x+xskip,ry+yskip,tex2_w,rh,GL_RGBA, - GL_UNSIGNED_BYTE,fb2); - } - } } void FB2GL::palette(int i, int r, int g, int b) { - if (flags & FB2GL_EXPAND) { - ogl_temp_ctable[i][0]=r; - ogl_temp_ctable[i][1]=g; - ogl_temp_ctable[i][2]=b; - } - else { // Paletted texture - ogl_ctable[i][0]=r; - ogl_ctable[i][1]=g; - ogl_ctable[i][2]=b; - } + if (flags & FB2GL_EXPAND) { + ogl_temp_ctable[i][0]=r; + ogl_temp_ctable[i][1]=g; + ogl_temp_ctable[i][2]=b; + } + else { // Paletted texture + ogl_ctable[i][0]=r; + ogl_ctable[i][1]=g; + ogl_ctable[i][2]=b; + } } void FB2GL::setPalette(int f, int n) { - char temp[256][3]; - int i; + char temp[256][3]; + int i; - if (flags & FB2GL_EXPAND) { - for (i=f; i<n; i++) { - ogl_ctable[i][0] = ogl_temp_ctable[i][0]; - ogl_ctable[i][1] = ogl_temp_ctable[i][1]; - ogl_ctable[i][2] = ogl_temp_ctable[i][2]; - } - } - else { // Paletted texture - glBindTexture(GL_TEXTURE_2D,texture); - glGetColorTable(GL_TEXTURE_2D,GL_RGB,GL_UNSIGNED_BYTE,&temp); + if (flags & FB2GL_EXPAND) { + for (i=f; i<n; i++) { + ogl_ctable[i][0] = ogl_temp_ctable[i][0]; + ogl_ctable[i][1] = ogl_temp_ctable[i][1]; + ogl_ctable[i][2] = ogl_temp_ctable[i][2]; + } + } + else { // Paletted texture + glBindTexture(GL_TEXTURE_2D,texture); + glGetColorTable(GL_TEXTURE_2D,GL_RGB,GL_UNSIGNED_BYTE,&temp); - for (i=f; i<n; i++) { - temp[i][0] = ogl_ctable[i][0]; - temp[i][1] = ogl_ctable[i][1]; - temp[i][2] = ogl_ctable[i][2]; - } + for (i=f; i<n; i++) { + temp[i][0] = ogl_ctable[i][0]; + temp[i][1] = ogl_ctable[i][1]; + temp[i][2] = ogl_ctable[i][2]; + } - glColorTable(GL_TEXTURE_2D,GL_RGB,256,GL_RGB,GL_UNSIGNED_BYTE,&temp); + glColorTable(GL_TEXTURE_2D,GL_RGB,256,GL_RGB,GL_UNSIGNED_BYTE,&temp); - if (flags & FB2GL_320) { - glBindTexture(GL_TEXTURE_2D,textureb); - glColorTable(GL_TEXTURE_2D,GL_RGB,256,GL_RGB,GL_UNSIGNED_BYTE,&temp); - } + if (flags & FB2GL_320) { + glBindTexture(GL_TEXTURE_2D,textureb); + glColorTable(GL_TEXTURE_2D,GL_RGB,256,GL_RGB,GL_UNSIGNED_BYTE,&temp); + } - } + } } diff --git a/backends/sdl/sdl-common.cpp b/backends/sdl/sdl-common.cpp index fe1d5765fe..c390b910f5 100644 --- a/backends/sdl/sdl-common.cpp +++ b/backends/sdl/sdl-common.cpp @@ -73,7 +73,7 @@ OSystem *OSystem_SDL_Common::create(int gfx_mode, bool full_screen) { #ifndef MACOSX // Work around a bug in OS X // Clean up on exit atexit_proc_installed = true; - atexit(atexit_proc); + atexit(atexit_proc); #endif // enable joystick @@ -95,21 +95,18 @@ OSystem_SDL_Common::OSystem_SDL_Common() _cdrom(0), _dirty_checksums(0), _mouseVisible(false), _mouseDrawn(false), _mouseData(0), _mouseHotspotX(0), _mouseHotspotY(0), - _currentShakePos(0), _newShakePos(0) -{ + _currentShakePos(0), _newShakePos(0) { // allocate palette storage - _currentPalette = (SDL_Color*)calloc(sizeof(SDL_Color), 256); + _currentPalette = (SDL_Color *)calloc(sizeof(SDL_Color), 256); // allocate the dirty rect storage - _mouseBackup = (byte*)malloc(MAX_MOUSE_W * MAX_MOUSE_H * MAX_SCALING * 2); - + _mouseBackup = (byte *)malloc(MAX_MOUSE_W * MAX_MOUSE_H * MAX_SCALING * 2); + // reset mouse state memset(&km, 0, sizeof(km)); - } -OSystem_SDL_Common::~OSystem_SDL_Common() -{ +OSystem_SDL_Common::~OSystem_SDL_Common() { if (_dirty_checksums) free(_dirty_checksums); free(_currentPalette); @@ -117,17 +114,16 @@ OSystem_SDL_Common::~OSystem_SDL_Common() } void OSystem_SDL_Common::init_size(uint w, uint h) { - // Avoid redundant res changes if ((int)w == _screenWidth && (int)h == _screenHeight) return; _screenWidth = w; _screenHeight = h; - CKSUM_NUM = (_screenWidth*_screenHeight/(8*8)); + CKSUM_NUM = (_screenWidth * _screenHeight / (8 * 8)); if (_dirty_checksums) free(_dirty_checksums); - _dirty_checksums = (uint32*)calloc(CKSUM_NUM*2, sizeof(uint32)); + _dirty_checksums = (uint32 *)calloc(CKSUM_NUM * 2, sizeof(uint32)); unload_gfx_mode(); load_gfx_mode(); @@ -145,18 +141,33 @@ void OSystem_SDL_Common::copy_rect(const byte *buf, int pitch, int x, int y, int return; if (((uint32)buf & 3) == 0 && pitch == _screenWidth && x==0 && y==0 && - w==_screenWidth && h==_screenHeight && _mode_flags&DF_WANT_RECT_OPTIM) { + w==_screenWidth && h==_screenHeight && _mode_flags&DF_WANT_RECT_OPTIM) { /* Special, optimized case for full screen updates. * It tries to determine what areas were actually changed, * and just updates those, on the actual display. */ add_dirty_rgn_auto(buf); } else { /* Clip the coordinates */ - if (x < 0) { w+=x; buf-=x; x = 0; } - if (y < 0) { h+=y; buf-=y*pitch; y = 0; } - if (w > _screenWidth-x) { w = _screenWidth - x; } - if (h > _screenHeight-y) { h = _screenHeight - y; } - + if (x < 0) { + w += x; + buf -= x; + x = 0; + } + + if (y < 0) { + h += y; + buf -= y * pitch; + y = 0; + } + + if (w > _screenWidth - x) { + w = _screenWidth - x; + } + + if (h > _screenHeight - y) { + h = _screenHeight - y; + } + if (w <= 0 || h <= 0) return; @@ -183,7 +194,6 @@ void OSystem_SDL_Common::copy_rect(const byte *buf, int pitch, int x, int y, int void OSystem_SDL_Common::move_screen(int dx, int dy, int height) { - if ((dx == 0) && (dy == 0)) return; @@ -227,7 +237,6 @@ void OSystem_SDL_Common::add_dirty_rect(int x, int y, int w, int h) { _forceFull = true; else { SDL_Rect *r = &_dirty_rect_list[_num_dirty_rects++]; - // Extend the dirty region by 1 pixel for scalers // that "smear" the screen, e.g. 2xSAI if (_mode_flags & DF_UPDATE_EXPAND_1_PIXEL) { @@ -238,10 +247,22 @@ void OSystem_SDL_Common::add_dirty_rect(int x, int y, int w, int h) { } // clip - if (x < 0) { w+=x; x=0; } - if (y < 0) { h+=y; y=0; } - if (w > _screenWidth-x) { w = _screenWidth - x; } - if (h > _screenHeight-y) { h = _screenHeight - y; } + if (x < 0) { + w += x; x = 0; + } + + if (y < 0) { + h += y; + y=0; + } + + if (w > _screenWidth - x) { + w = _screenWidth - x; + } + + if (h > _screenHeight - y) { + h = _screenHeight - y; + } r->x = x; r->y = y; @@ -250,18 +271,19 @@ void OSystem_SDL_Common::add_dirty_rect(int x, int y, int w, int h) { } } -#define ROL(a,n) a = (a<<(n)) | (a>>(32-(n))) -#define DOLINE(x) a ^= ((uint32*)buf)[0+(x)*(_screenWidth/4)]; b ^= ((uint32*)buf)[1+(x)*(_screenWidth/4)] +#define ROL(a,n) a = (a << (n)) | (a >> (32 - (n))) +#define DOLINE(x) a ^= ((uint32*)buf)[0 + (x) * (_screenWidth / 4)]; b ^= ((uint32 *)buf)[1 + (x) * (_screenWidth / 4)] + void OSystem_SDL_Common::mk_checksums(const byte *buf) { uint32 *sums = _dirty_checksums; uint x,y; - const uint last_x = (uint)_screenWidth/8; - const uint last_y = (uint)_screenHeight/8; + const uint last_x = (uint)_screenWidth / 8; + const uint last_y = (uint)_screenHeight / 8; /* the 8x8 blocks in buf are enumerated starting in the top left corner and * reading each line at a time from left to right */ - for(y=0; y != last_y; y++, buf+=_screenWidth*(8-1)) - for(x=0; x != last_x; x++, buf+=8) { + for(y = 0; y != last_y; y++, buf += _screenWidth * (8 - 1)) + for(x=0; x != last_x; x++, buf += 8) { uint32 a = x; uint32 b = y; @@ -270,8 +292,8 @@ void OSystem_SDL_Common::mk_checksums(const byte *buf) { DOLINE(4); ROL(a,13); ROL(b,11); DOLINE(6); ROL(a,13); ROL(b,11); - a*=0xDEADBEEF; - b*=0xBAADF00D; + a *= 0xDEADBEEF; + b *= 0xBAADF00D; DOLINE(1); ROL(a,13); ROL(b,11); DOLINE(3); ROL(a,13); ROL(b,11); @@ -279,15 +301,14 @@ void OSystem_SDL_Common::mk_checksums(const byte *buf) { DOLINE(7); ROL(a,13); ROL(b,11); /* output the checksum for this block */ - *sums++=a+b; + *sums++ = a + b; } } #undef DOLINE #undef ROL - void OSystem_SDL_Common::add_dirty_rgn_auto(const byte *buf) { - assert( ((uint32)buf & 3) == 0); + assert(((uint32)buf & 3) == 0); /* generate a table of the checksums */ mk_checksums(buf); @@ -304,18 +325,18 @@ void OSystem_SDL_Common::add_dirty_rgn_auto(const byte *buf) { int x,y,w; uint32 *ck = _dirty_checksums; - for(y=0; y!=_screenHeight/8; y++) { - for(x=0; x!=_screenWidth/8; x++,ck++) { + for(y = 0; y!=_screenHeight / 8; y++) { + for(x = 0; x!=_screenWidth / 8; x++,ck++) { if (ck[0] != ck[CKSUM_NUM]) { /* found a dirty 8x8 block, now go as far to the right as possible, and at the same time, unmark the dirty status by setting old to new. */ w=0; do { - ck[w+CKSUM_NUM] = ck[w]; + ck[w + CKSUM_NUM] = ck[w]; w++; - } while (x+w != _screenWidth/8 && ck[w] != ck[w+CKSUM_NUM]); - - add_dirty_rect(x*8, y*8, w*8, 8); + } while (x + w != _screenWidth / 8 && ck[w] != ck[w + CKSUM_NUM]); + + add_dirty_rect(x * 8, y * 8, w * 8, 8); if (_forceFull) goto get_out; @@ -338,18 +359,18 @@ void OSystem_SDL_Common::kbd_mouse() { km.x_down_count = 2; } if (km.y_down_count == 1) { - km.y_down_time = time; + km.y_down_time = time; km.y_down_count = 2; } if (km.x_vel || km.y_vel) { if (km.x_down_count) { - if (time > km.x_down_time + km.delay_time*12) { + if (time > km.x_down_time + km.delay_time * 12) { if (km.x_vel > 0) km.x_vel++; else km.x_vel--; - } else if (time > km.x_down_time + km.delay_time*8) { + } else if (time > km.x_down_time + km.delay_time * 8) { if (km.x_vel > 0) km.x_vel = 5; else @@ -357,12 +378,12 @@ void OSystem_SDL_Common::kbd_mouse() { } } if (km.y_down_count) { - if (time > km.y_down_time + km.delay_time*12) { + if (time > km.y_down_time + km.delay_time * 12) { if (km.y_vel > 0) km.y_vel++; else km.y_vel--; - } else if (time > km.y_down_time + km.delay_time*8) { + } else if (time > km.y_down_time + km.delay_time * 8) { if (km.y_vel > 0) km.y_vel = 5; else @@ -412,7 +433,7 @@ bool OSystem_SDL_Common::show_mouse(bool visible) { return last; } - + void OSystem_SDL_Common::set_mouse_pos(int x, int y) { if (x != _mouseCurState.x || y != _mouseCurState.y) { _mouseCurState.x = x; @@ -427,7 +448,6 @@ void OSystem_SDL_Common::warp_mouse(int x, int y) { } void OSystem_SDL_Common::set_mouse_cursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y) { - assert(0 <= w && w <= MAX_MOUSE_W); assert(0 <= h && h <= MAX_MOUSE_H); _mouseCurState.w = w; @@ -436,23 +456,23 @@ void OSystem_SDL_Common::set_mouse_cursor(const byte *buf, uint w, uint h, int h _mouseHotspotX = hotspot_x; _mouseHotspotY = hotspot_y; - _mouseData = (byte*)buf; + _mouseData = (byte *)buf; undraw_mouse(); } - + void OSystem_SDL_Common::set_shake_pos(int shake_pos) { _newShakePos = shake_pos; } - + uint32 OSystem_SDL_Common::get_msecs() { return SDL_GetTicks(); } - + void OSystem_SDL_Common::delay_msecs(uint msecs) { SDL_Delay(msecs); } - + void *OSystem_SDL_Common::create_thread(ThreadProc *proc, void *param) { return SDL_CreateThread(proc, param); } @@ -472,7 +492,7 @@ static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode) } return key; } - + bool OSystem_SDL_Common::poll_event(Event *event) { SDL_Event ev; int axis; @@ -579,7 +599,7 @@ bool OSystem_SDL_Common::poll_event(Event *event) { default: break; } - + return true; } @@ -589,7 +609,7 @@ bool OSystem_SDL_Common::poll_event(Event *event) { event->kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode); switch(ev.key.keysym.sym){ - case SDLK_LEFT: + case SDLK_LEFT: if (km.x_vel < 0) { km.x_vel = 0; km.x_down_count = 0; @@ -717,7 +737,7 @@ bool OSystem_SDL_Common::poll_event(Event *event) { } } return true; - + case SDL_JOYAXISMOTION: axis = ev.jaxis.value; if ( axis > JOY_DEADZONE) { @@ -728,7 +748,7 @@ bool OSystem_SDL_Common::poll_event(Event *event) { event->event_code = EVENT_MOUSEMOVE; } else axis = 0; - + if ( ev.jaxis.axis == JOY_XAXIS) { #ifdef JOY_ANALOG km.x_vel = axis/2000; @@ -748,11 +768,11 @@ bool OSystem_SDL_Common::poll_event(Event *event) { axis = -axis; #endif #ifdef JOY_ANALOG - km.y_vel = -axis/2000; + km.y_vel = -axis / 2000; km.y_down_count = 0; #else if (axis != 0) { - km.y_vel = (-axis > 0) ? 1:-1; + km.y_vel = (-axis > 0) ? 1: -1; km.y_down_count = 1; } else { km.y_vel = 0; @@ -760,7 +780,7 @@ bool OSystem_SDL_Common::poll_event(Event *event) { } #endif } - return true; + return true; case SDL_QUIT: quit(); @@ -772,7 +792,6 @@ bool OSystem_SDL_Common::set_sound_proc(void *param, SoundProc *proc, byte forma SDL_AudioSpec desired; /* only one format supported at the moment */ - desired.freq = SAMPLES_PER_SEC; desired.format = AUDIO_S16SYS; desired.channels = 2; @@ -818,13 +837,13 @@ uint32 OSystem_SDL_Common::property(int param, Property *value) { return 0; } - + void OSystem_SDL_Common::quit() { if(_cdrom) { SDL_CDStop(_cdrom); SDL_CDClose(_cdrom); } - unload_gfx_mode(); + unload_gfx_mode(); exit(0); } @@ -868,10 +887,9 @@ void OSystem_SDL_Common::draw_mouse() { _mouseOldState.h = h; // Draw the mouse cursor; backup the covered area in "bak" - if (SDL_LockSurface(_overlayVisible ? _tmpscreen : _screen) == -1) error("SDL_LockSurface failed: %s.\n", SDL_GetError()); - + // Mark as dirty add_dirty_rect(x, y, w, h); @@ -897,10 +915,10 @@ void OSystem_SDL_Common::draw_mouse() { } } else { - uint16 *bak = (uint16*)_mouseBackup; // Surface used to backup the area obscured by the mouse + uint16 *bak = (uint16 *)_mouseBackup; // Surface used to backup the area obscured by the mouse uint16 *dst; // Surface we are drawing into - dst = (uint16 *)_tmpscreen->pixels + (y+1) * _tmpScreenWidth + (x+1); + dst = (uint16 *)_tmpscreen->pixels + (y + 1) * _tmpScreenWidth + (x + 1); while (h > 0) { int width = w; while (width > 0) { @@ -916,11 +934,10 @@ void OSystem_SDL_Common::draw_mouse() { dst += _tmpScreenWidth - w; h--; } - } SDL_UnlockSurface(_overlayVisible ? _tmpscreen : _screen); - + // Finally, set the flag to indicate the mouse has been drawn _mouseDrawn = true; } @@ -940,9 +957,8 @@ void OSystem_SDL_Common::undraw_mouse() { int x, y; if (!_overlayVisible) { - byte *dst, *bak = _mouseBackup; - + // No need to do clipping here, since draw_mouse() did that already dst = (byte *)_screen->pixels + old_mouse_y * _screenWidth + old_mouse_x; for (y = 0; y < old_mouse_h; ++y, bak += MAX_MOUSE_W, dst += _screenWidth) { @@ -956,7 +972,7 @@ void OSystem_SDL_Common::undraw_mouse() { uint16 *dst, *bak = (uint16 *)_mouseBackup; // No need to do clipping here, since draw_mouse() did that already - dst = (uint16 *)_tmpscreen->pixels + (old_mouse_y+1) * _tmpScreenWidth + (old_mouse_x+1); + dst = (uint16 *)_tmpscreen->pixels + (old_mouse_y + 1) * _tmpScreenWidth + (old_mouse_x + 1); for (y = 0; y < old_mouse_h; ++y, bak += MAX_MOUSE_W, dst += _tmpScreenWidth) { for (x = 0; x < old_mouse_w; ++x) { dst[x] = bak[x]; @@ -972,7 +988,6 @@ void OSystem_SDL_Common::undraw_mouse() { void OSystem_SDL_Common::stop_cdrom() { /* Stop CD Audio in 1/10th of a second */ cd_stop_time = SDL_GetTicks() + 100; cd_num_loops = 0; - } void OSystem_SDL_Common::play_cdrom(int track, int num_loops, int start_frame, int end_frame) { @@ -983,7 +998,7 @@ void OSystem_SDL_Common::play_cdrom(int track, int num_loops, int start_frame, i return; if (end_frame > 0) - end_frame+=5; + end_frame +=5; cd_track = track; cd_num_loops = num_loops; @@ -1009,7 +1024,7 @@ bool OSystem_SDL_Common::poll_cdrom() { void OSystem_SDL_Common::update_cdrom() { if (!_cdrom) return; - + if (cd_stop_time != 0 && SDL_GetTicks() >= cd_stop_time) { SDL_CDStop(_cdrom); cd_num_loops = 0; @@ -1098,8 +1113,7 @@ void OSystem_SDL_Common::delete_mutex(void *mutex) { SDL_DestroyMutex((SDL_mutex *) mutex); } -void OSystem_SDL_Common::show_overlay() -{ +void OSystem_SDL_Common::show_overlay() { // hide the mouse undraw_mouse(); @@ -1107,8 +1121,7 @@ void OSystem_SDL_Common::show_overlay() clear_overlay(); } -void OSystem_SDL_Common::hide_overlay() -{ +void OSystem_SDL_Common::hide_overlay() { // hide the mouse undraw_mouse(); @@ -1116,8 +1129,7 @@ void OSystem_SDL_Common::hide_overlay() _forceFull = true; } -void OSystem_SDL_Common::clear_overlay() -{ +void OSystem_SDL_Common::clear_overlay() { if (!_overlayVisible) return; @@ -1144,8 +1156,7 @@ int16 OSystem_SDL_Common::get_width() { return _screenWidth; } -void OSystem_SDL_Common::grab_overlay(int16 *buf, int pitch) -{ +void OSystem_SDL_Common::grab_overlay(int16 *buf, int pitch) { if (!_overlayVisible) return; @@ -1169,8 +1180,7 @@ void OSystem_SDL_Common::grab_overlay(int16 *buf, int pitch) SDL_UnlockSurface(_tmpscreen); } -void OSystem_SDL_Common::copy_rect_overlay(const int16 *buf, int pitch, int x, int y, int w, int h) -{ +void OSystem_SDL_Common::copy_rect_overlay(const int16 *buf, int pitch, int x, int y, int w, int h) { if (!_overlayVisible) return; @@ -1178,13 +1188,28 @@ void OSystem_SDL_Common::copy_rect_overlay(const int16 *buf, int pitch, int x, i return; // Clip the coordinates - if (x < 0) { w+=x; buf-=x; x = 0; } - if (y < 0) { h+=y; buf-=y*pitch; y = 0; } - if (w > _screenWidth-x) { w = _screenWidth - x; } - if (h > _screenHeight-y) { h = _screenHeight - y; } + if (x < 0) { + w += x; + buf -= x; + x = 0; + } + + if (y < 0) { + h += y; buf -= y * pitch; + y = 0; + } + + if (w > _screenWidth - x) { + w = _screenWidth - x; + } + + if (h > _screenHeight-y) { + h = _screenHeight - y; + } + if (w <= 0 || h <= 0) return; - + // Mark the modified region as dirty cksum_valid = false; add_dirty_rect(x, y, w, h); @@ -1195,9 +1220,9 @@ void OSystem_SDL_Common::copy_rect_overlay(const int16 *buf, int pitch, int x, i if (SDL_LockSurface(_tmpscreen) == -1) error("SDL_LockSurface failed: %s.\n", SDL_GetError()); - int16 *dst = (int16 *)_tmpscreen->pixels + (y+1) * _tmpScreenWidth + (x+1); + int16 *dst = (int16 *)_tmpscreen->pixels + (y + 1) * _tmpScreenWidth + (x + 1); do { - memcpy(dst, buf, w*2); + memcpy(dst, buf, w * 2); dst += _tmpScreenWidth; buf += pitch; } while (--h); @@ -1205,12 +1230,10 @@ void OSystem_SDL_Common::copy_rect_overlay(const int16 *buf, int pitch, int x, i SDL_UnlockSurface(_tmpscreen); } -int16 OSystem_SDL_Common::RBGToColor(uint8 r, uint8 g, uint8 b) -{ +int16 OSystem_SDL_Common::RBGToColor(uint8 r, uint8 g, uint8 b) { return SDL_MapRGB(_tmpscreen->format, r, g, b); } -void OSystem_SDL_Common::colorToRBG(int16 color, uint8 &r, uint8 &g, uint8 &b) -{ +void OSystem_SDL_Common::colorToRBG(int16 color, uint8 &r, uint8 &g, uint8 &b) { SDL_GetRGB(color, _tmpscreen->format, &r, &g, &b); } diff --git a/backends/sdl/sdl-common.h b/backends/sdl/sdl-common.h index e0d4d37a28..0bb63a961c 100644 --- a/backends/sdl/sdl-common.h +++ b/backends/sdl/sdl-common.h @@ -57,29 +57,29 @@ public: // backend of the mouse cursor's current position, this function // actually moves the cursor to the specified position. void warp_mouse(int x, int y); - + // Set the bitmap that's used when drawing the cursor. void set_mouse_cursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y); - + // Shaking is used in SCUMM. Set current shake position. void set_shake_pos(int shake_pos); - + // Get the number of milliseconds since the program was started. uint32 get_msecs(); - + // Delay for a specified amount of milliseconds void delay_msecs(uint msecs); - + // Create a thread void *create_thread(ThreadProc *proc, void *param); - + // Get the next event. // Returns true if an event was retrieved. bool poll_event(Event *event); - + // Set function that generates samples bool set_sound_proc(void *param, SoundProc *proc, byte sound); - + // Poll CD status // Returns true if cd audio is playing bool poll_cdrom(); @@ -183,7 +183,7 @@ protected: // joystick SDL_Joystick *_joystick; - + bool _mouseVisible; bool _mouseDrawn; byte *_mouseData; diff --git a/backends/sdl/sdl.cpp b/backends/sdl/sdl.cpp index d618b60065..7e3fb0868a 100644 --- a/backends/sdl/sdl.cpp +++ b/backends/sdl/sdl.cpp @@ -140,7 +140,6 @@ normal_mode:; if (_screen == NULL) error("_screen failed"); - // // Create the surface that contains the scaled graphics in 16 bit mode // @@ -161,9 +160,9 @@ normal_mode:; Init_2xSaI(565); // Need some extra bytes around when using 2xSaI - uint16 *tmp_screen = (uint16*)calloc(_tmpScreenWidth*(_screenHeight+3), sizeof(uint16)); + uint16 *tmp_screen = (uint16 *)calloc(_tmpScreenWidth * (_screenHeight + 3), sizeof(uint16)); _tmpscreen = SDL_CreateRGBSurfaceFrom(tmp_screen, - _tmpScreenWidth, _screenHeight + 3, 16, _tmpScreenWidth*2, + _tmpScreenWidth, _screenHeight + 3, 16, _tmpScreenWidth * 2, _hwscreen->format->Rmask, _hwscreen->format->Gmask, _hwscreen->format->Bmask, @@ -171,13 +170,12 @@ normal_mode:; if (_tmpscreen == NULL) error("_tmpscreen failed"); - + // keyboard cursor control, some other better place for it? km.x_max = _screenWidth * _scaleFactor - 1; km.y_max = _screenHeight * _scaleFactor - 1; km.delay_time = 25; km.last_time = 0; - } void OSystem_SDL::unload_gfx_mode() { @@ -230,12 +228,11 @@ void OSystem_SDL::hotswap_gfx_mode() { } void OSystem_SDL::update_screen() { - assert(_hwscreen != NULL); // If the shake position changed, fill the dirty area with blackness if (_currentShakePos != _newShakePos) { - SDL_Rect blackrect = {0, 0, _screenWidth*_scaleFactor, _newShakePos*_scaleFactor}; + SDL_Rect blackrect = {0, 0, _screenWidth * _scaleFactor, _newShakePos * _scaleFactor}; SDL_FillRect(_hwscreen, &blackrect, 0); _currentShakePos = _newShakePos; @@ -270,11 +267,11 @@ void OSystem_SDL::update_screen() { // Only draw anything if necessary if (_num_dirty_rects > 0) { - + SDL_Rect *r; uint32 srcPitch, dstPitch; SDL_Rect *last_rect = _dirty_rect_list + _num_dirty_rects; - + // Convert appropriate parts of the 8bpp image into 16bpp if (!_overlayVisible) { SDL_Rect dst; @@ -286,7 +283,7 @@ void OSystem_SDL::update_screen() { error("SDL_BlitSurface failed: %s", SDL_GetError()); } } - + SDL_LockSurface(_tmpscreen); SDL_LockSurface(_hwscreen); @@ -300,11 +297,11 @@ void OSystem_SDL::update_screen() { dst_h = r->h; if (dst_h > _screenHeight - dst_y) dst_h = _screenHeight - dst_y; - + dst_y *= _scaleFactor; - - _scaler_proc((byte*)_tmpscreen->pixels + (r->x*2+2) + (r->y+1)*srcPitch, srcPitch, NULL, - (byte*)_hwscreen->pixels + r->x*2*_scaleFactor + dst_y*dstPitch, dstPitch, r->w, dst_h); + + _scaler_proc((byte *)_tmpscreen->pixels + (r->x * 2 + 2) + (r->y + 1) * srcPitch, srcPitch, NULL, + (byte *)_hwscreen->pixels + r->x * 2 * _scaleFactor + dst_y * dstPitch, dstPitch, r->w, dst_h); } r->x *= _scaleFactor; @@ -332,7 +329,6 @@ void OSystem_SDL::update_screen() { } uint32 OSystem_SDL::property(int param, Property *value) { - if (param == PROP_TOGGLE_FULLSCREEN) { assert(_hwscreen != 0); _full_screen ^= true; @@ -358,8 +354,6 @@ uint32 OSystem_SDL::property(int param, Property *value) { return 1; } - - return OSystem_SDL_Common::property(param, value); } diff --git a/backends/sdl/sdl_gl.cpp b/backends/sdl/sdl_gl.cpp index c0e3875026..378d336c18 100644 --- a/backends/sdl/sdl_gl.cpp +++ b/backends/sdl/sdl_gl.cpp @@ -108,14 +108,14 @@ void OSystem_SDL_OpenGL::load_gfx_mode() { // gl_flags = FB2GL_320 | FB2GL_RGBA | FB2GL_16BIT; - if (_full_screen) { - gl_flags |= (FB2GL_FS); - _glScreenStart = 0; + if (_full_screen) { + gl_flags |= (FB2GL_FS); + _glScreenStart = 0; } // 640x480 screen resolution - fb2gl.init(640,480,0,_glScreenStart? 15: 70,gl_flags); + fb2gl.init(640, 480, 0,_glScreenStart? 15: 70,gl_flags); - SDL_SetGamma(1.25,1.25,1.25); + SDL_SetGamma(1.25, 1.25, 1.25); // @@ -123,9 +123,9 @@ void OSystem_SDL_OpenGL::load_gfx_mode() { // // Need some extra bytes around when using 2xSaI - uint16 *tmp_screen = (uint16*)calloc(_tmpScreenWidth*(_screenHeight+3),sizeof(uint16)); + uint16 *tmp_screen = (uint16 *)calloc(_tmpScreenWidth * (_screenHeight + 3),sizeof(uint16)); _tmpscreen = SDL_CreateRGBSurfaceFrom(tmp_screen, - _tmpScreenWidth, _screenHeight + 3, 16, _tmpScreenWidth*2, + _tmpScreenWidth, _screenHeight + 3, 16, _tmpScreenWidth * 2, Rmask, Gmask, Bmask, @@ -144,16 +144,15 @@ void OSystem_SDL_OpenGL::load_gfx_mode() { tmpBlackRect.y = 0; tmpBlackRect.w = _screenWidth; tmpBlackRect.h = 256-_screenHeight-_glScreenStart; - + if (_tmpscreen == NULL) error("_tmpscreen failed"); - + // keyboard cursor control, some other better place for it? km.x_max = _screenWidth * _scaleFactor - 1; km.y_max = _screenHeight * _scaleFactor - 1; km.delay_time = 25; km.last_time = 0; - } void OSystem_SDL_OpenGL::unload_gfx_mode() { @@ -163,20 +162,19 @@ void OSystem_SDL_OpenGL::unload_gfx_mode() { } if (_tmpscreen) { - free((uint16*)_tmpscreen->pixels); + free((uint16 *)_tmpscreen->pixels); SDL_FreeSurface(_tmpscreen); _tmpscreen = NULL; } } void OSystem_SDL_OpenGL::update_screen() { - // If the shake position changed, fill the dirty area with blackness if (_currentShakePos != _newShakePos) { SDL_Rect blackrect = {0, _glScreenStart, _screenWidth, _newShakePos+_glScreenStart}; SDL_FillRect(tmpSurface, &blackrect, 0); - fb2gl.blit16(tmpSurface,1,&blackrect,0,0); + fb2gl.blit16(tmpSurface, 1, &blackrect, 0, 0); _currentShakePos = _newShakePos; @@ -227,13 +225,14 @@ void OSystem_SDL_OpenGL::update_screen() { } // Almost the same thing as SDL_UpdateRects - fb2gl.blit16(_tmpscreen,_num_dirty_rects,_dirty_rect_list,0, - _currentShakePos+_glScreenStart); + fb2gl.blit16(_tmpscreen, _num_dirty_rects, _dirty_rect_list, 0, + _currentShakePos+_glScreenStart); + + tmpBlackRect.h = 256 - _screenHeight - _glScreenStart - _currentShakePos; - tmpBlackRect.h = 256-_screenHeight-_glScreenStart-_currentShakePos; - SDL_FillRect(tmpSurface, &tmpBlackRect, 0); - fb2gl.blit16(tmpSurface,1,&tmpBlackRect,0,_screenHeight+_glScreenStart+_currentShakePos); + fb2gl.blit16(tmpSurface, 1, &tmpBlackRect, 0,_screenHeight + + _glScreenStart+_currentShakePos); fb2gl.display(); } @@ -243,67 +242,61 @@ void OSystem_SDL_OpenGL::update_screen() { } uint32 OSystem_SDL_OpenGL::property(int param, Property *value) { + int i; if (param == PROP_TOGGLE_FULLSCREEN) { _full_screen ^= true; - + SDL_WM_ToggleFullScreen(fb2gl.screen); return 1; } else if (param == PROP_SET_GFX_MODE) { - SDL_Rect full = {0,0,_screenWidth,_screenHeight}; + SDL_Rect full = {0, 0, _screenWidth, _screenHeight}; glPopMatrix(); switch(value->gfx_mode) { - case 0: // Bilinear Filtering (on/off) - _glBilinearFilter ^= true; - for (int i=0; i<2; i++) { - glBindTexture(GL_TEXTURE_2D,i); - if (_glBilinearFilter) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR); - } - else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - } - } - break; - case 1: // Don't fit the whole screen - fb2gl.init(0,0,0,15,gl_flags); - _glScreenStart = 20; - SDL_FillRect(tmpSurface,&tmpBlackRect,0); - fb2gl.blit16(tmpSurface,1,&tmpBlackRect,0,0); - break; - case 2: // Fit the whole screen - fb2gl.init(0,0,0,70,gl_flags); - _glScreenStart = 0; - break; - default: // Zooming - glPushMatrix(); -/* SDL_FillRect(tmpSurface, &full, 0); - fb2gl.blit16(tmpSurface,1,&full,0,_glScreenStart); - fb2gl.display(); - double x = (double)((_mouseCurState.x) - - (_screenWidth/2)) / (_screenWidth/2); - double y = (double)((_mouseCurState.y) - - (_screenHeight/2)) / (_screenHeight/2); - glTranslatef(-x,y,0); + case 0: // Bilinear Filtering (on/off) + _glBilinearFilter ^= true; + for (i = 0; i < 2; i++) { + glBindTexture(GL_TEXTURE_2D, i); + if (_glBilinearFilter) { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + } else { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + } + } + break; + case 1: // Don't fit the whole screen + fb2gl.init(0, 0, 0, 15, gl_flags); + _glScreenStart = 20; + SDL_FillRect(tmpSurface, &tmpBlackRect, 0); + fb2gl.blit16(tmpSurface, 1, &tmpBlackRect, 0, 0); + break; + case 2: // Fit the whole screen + fb2gl.init(0, 0, 0, 70, gl_flags); + _glScreenStart = 0; + break; + default: // Zooming + glPushMatrix(); +/* SDL_FillRect(tmpSurface, &full, 0); + fb2gl.blit16(tmpSurface, 1, &full,0, _glScreenStart); + fb2gl.display(); + double x = (double)((_mouseCurState.x) + - (_screenWidth / 2)) / (_screenWidth / 2); + double y = (double)((_mouseCurState.y) + - (_screenHeight / 2)) / (_screenHeight / 2); + glTranslatef(-x, y, 0); */ - glScalef(1.0+(double)(value->gfx_mode-1)/10, - 1.0+(double)(value->gfx_mode-1)/10, - 0); + glScalef(1.0 + (double)(value->gfx_mode - 1) / 10, + 1.0 + (double)(value->gfx_mode - 1) / 10, 0); }; - fb2gl.blit16(_tmpscreen,1,&full,0,_glScreenStart); + fb2gl.blit16(_tmpscreen, 1, &full, 0, _glScreenStart); fb2gl.display(); - + return 1; } - - + return OSystem_SDL_Common::property(param, value); } |