[Scummvm-git-logs] scummvm master -> 936fd67c3c0b6290132f8d5ae365589a9539efcf
sev-
noreply at scummvm.org
Sat Sep 21 21:15:54 UTC 2024
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
71052ff738 QDENGINE: Avoid double free on exit
687b151102 QDENGINE: Eliminate global constructors
936fd67c3c QDENGINE: Eliminate more global constructors
Commit: 71052ff738daa22b6f9834fd720a6b311014a5b3
https://github.com/scummvm/scummvm/commit/71052ff738daa22b6f9834fd720a6b311014a5b3
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-21T22:37:36+02:00
Commit Message:
QDENGINE: Avoid double free on exit
Changed paths:
engines/qdengine/system/sound/snd_sound.cpp
engines/qdengine/system/sound/snd_sound.h
diff --git a/engines/qdengine/system/sound/snd_sound.cpp b/engines/qdengine/system/sound/snd_sound.cpp
index 722ff71a811..72b58996544 100644
--- a/engines/qdengine/system/sound/snd_sound.cpp
+++ b/engines/qdengine/system/sound/snd_sound.cpp
@@ -42,7 +42,7 @@ bool sndSound::create_sound_buffer() {
bool sndSound::release_sound_buffer() {
if (!is_stopped())
- stop();
+ stop(false);
return true;
}
@@ -69,11 +69,11 @@ bool sndSound::play() {
return true;
}
-bool sndSound::stop() {
+bool sndSound::stop(bool rewind) {
debugC(5, kDebugSound, "sndSound::stop(). this: %p", (void *)this);
g_system->getMixer()->stopHandle(_audHandle);
- if (_sound && _sound->_audioStream)
+ if (rewind && _sound && _sound->_audioStream)
_sound->_audioStream->seek(0);
_isStopped = true;
diff --git a/engines/qdengine/system/sound/snd_sound.h b/engines/qdengine/system/sound/snd_sound.h
index 196c235f7db..b1ed702a100 100644
--- a/engines/qdengine/system/sound/snd_sound.h
+++ b/engines/qdengine/system/sound/snd_sound.h
@@ -77,7 +77,7 @@ public:
//! ÐапÑÑÐºÐ°ÐµÑ Ð¿ÑоигÑÑвание звÑка.
bool play();
//! ÐÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿ÑоигÑÑвание звÑка.
- bool stop();
+ bool stop(bool rewind = true);
//! СÑÐ°Ð²Ð¸Ñ Ð·Ð²Ñк на паÑзÑ.
void pause();
//! ÐозобновлÑÐµÑ Ð¿ÑоигÑÑвание.
Commit: 687b15110217266744491f0da98eaa7b717eb20b
https://github.com/scummvm/scummvm/commit/687b15110217266744491f0da98eaa7b717eb20b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-21T22:37:40+02:00
Commit Message:
QDENGINE: Eliminate global constructors
Changed paths:
engines/qdengine/qdcore/qd_interface_element.cpp
engines/qdengine/qdcore/qd_interface_element.h
engines/qdengine/qdcore/qd_interface_screen.cpp
engines/qdengine/qdcore/qd_interface_text_window.h
engines/qdengine/qdcore/qd_inventory_cell.cpp
engines/qdengine/qdcore/qd_inventory_cell.h
engines/qdengine/qdengine.h
diff --git a/engines/qdengine/qdcore/qd_interface_element.cpp b/engines/qdengine/qdcore/qd_interface_element.cpp
index e903213804f..e9574bd149b 100644
--- a/engines/qdengine/qdcore/qd_interface_element.cpp
+++ b/engines/qdengine/qdcore/qd_interface_element.cpp
@@ -38,8 +38,6 @@
namespace QDEngine {
-Vect2i qdInterfaceElement::_screen_offset = Vect2i(0, 0);
-
qdInterfaceElement::qdInterfaceElement() : _r(0, 0),
_option_ID(OPTION_NONE),
_screen_depth(0),
diff --git a/engines/qdengine/qdcore/qd_interface_element.h b/engines/qdengine/qdcore/qd_interface_element.h
index a0aeaad655a..002d5780b4c 100644
--- a/engines/qdengine/qdcore/qd_interface_element.h
+++ b/engines/qdengine/qdcore/qd_interface_element.h
@@ -117,7 +117,7 @@ public:
//! ÐозвÑаÑÐ°ÐµÑ ÑкÑаннÑе кооÑдинаÑÑ ÑенÑÑа ÑлеменÑа.
virtual const Vect2i r() const {
- return _r + _screen_offset;
+ return _r + g_engine->screen_offset();
}
//! УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ ÑкÑаннÑе кооÑдинаÑÑ ÑенÑÑа ÑлеменÑа.
void set_r(const Vect2i &v) {
@@ -220,13 +220,6 @@ public:
_is_locked = state;
}
- static const Vect2i &screen_offset() {
- return _screen_offset;
- }
- static void set_screen_offset(const Vect2i &offset) {
- _screen_offset = offset;
- }
-
protected:
//! ÐапиÑÑ Ð´Ð°Ð½Ð½ÑÑ
в ÑкÑипÑ.
@@ -266,8 +259,6 @@ private:
grScreenRegion _last_screen_region;
const qdAnimationFrame *_last_animation_frame;
-
- static Vect2i _screen_offset;
};
} // namespace QDEngine
diff --git a/engines/qdengine/qdcore/qd_interface_screen.cpp b/engines/qdengine/qdcore/qd_interface_screen.cpp
index de75c0a3a7c..d8adf3b5985 100644
--- a/engines/qdengine/qdcore/qd_interface_screen.cpp
+++ b/engines/qdengine/qdcore/qd_interface_screen.cpp
@@ -116,11 +116,9 @@ bool qdInterfaceScreen::quant(float dt) {
int x = round(float(_autohide_offset.x) * _autohide_phase);
int y = round(float(_autohide_offset.y) * _autohide_phase);
- qdInterfaceElement::set_screen_offset(Vect2i(x, y));
- qdInventoryCell::set_screen_offset(Vect2i(x, y));
+ g_engine->set_screen_offset(Vect2i(x, y));
} else {
- qdInterfaceElement::set_screen_offset(Vect2i(0, 0));
- qdInventoryCell::set_screen_offset(Vect2i(0, 0));
+ g_engine->set_screen_offset(Vect2i(0, 0));
}
for (element_list_t::const_iterator it = element_list().begin(); it != element_list().end(); ++it) {
diff --git a/engines/qdengine/qdcore/qd_interface_text_window.h b/engines/qdengine/qdcore/qd_interface_text_window.h
index 1a703b2833a..aa3afce3691 100644
--- a/engines/qdengine/qdcore/qd_interface_text_window.h
+++ b/engines/qdengine/qdcore/qd_interface_text_window.h
@@ -109,7 +109,7 @@ public:
//! ÐозвÑаÑÐ°ÐµÑ ÑкÑаннÑе кооÑдинаÑÑ ÑенÑÑа окна.
virtual const Vect2i r() const {
- return qdInterfaceElement::r() - qdInterfaceElement::screen_offset();
+ return qdInterfaceElement::r() - g_engine->screen_offset();
}
//! ÐÑÑиÑовка окна.
diff --git a/engines/qdengine/qdcore/qd_inventory_cell.cpp b/engines/qdengine/qdcore/qd_inventory_cell.cpp
index 5862169c12f..4f61483270b 100644
--- a/engines/qdengine/qdcore/qd_inventory_cell.cpp
+++ b/engines/qdengine/qdcore/qd_inventory_cell.cpp
@@ -74,7 +74,6 @@ bool qdInventoryCellType::save_script(Common::WriteStream &fh, int indent) const
// class qdInventoryCell
-Vect2i qdInventoryCell::_screen_offset = Vect2i(0, 0);
uint32 qdInventoryCell::_shadow_color = 0;
int qdInventoryCell::_shadow_alpha = -1;
diff --git a/engines/qdengine/qdcore/qd_inventory_cell.h b/engines/qdengine/qdcore/qd_inventory_cell.h
index bd033763368..644b98d88e4 100644
--- a/engines/qdengine/qdcore/qd_inventory_cell.h
+++ b/engines/qdengine/qdcore/qd_inventory_cell.h
@@ -152,12 +152,6 @@ public:
_shadow_color = color;
_shadow_alpha = alpha;
}
- static const Vect2i &screen_offset() {
- return _screen_offset;
- }
- static void set_screen_offset(const Vect2i &offset) {
- _screen_offset = offset;
- }
private:
//! Тип ÑÑейки.
@@ -172,7 +166,6 @@ private:
//! ÐбÑекÑ, коÑоÑÑй Ð»ÐµÐ¶Ð¸Ñ Ð² ÑÑейке.
mutable qdGameObjectAnimated *_object;
- static Vect2i _screen_offset;
static uint32 _shadow_color;
static int _shadow_alpha;
};
@@ -190,7 +183,7 @@ public:
qdInventoryCellSet &operator = (const qdInventoryCellSet &set);
const Vect2s screen_pos() const {
- return _screen_pos + qdInventoryCell::screen_offset();
+ return _screen_pos + g_engine->screen_offset();
}
void set_screen_pos(const Vect2s &pos) {
_screen_pos = pos;
diff --git a/engines/qdengine/qdengine.h b/engines/qdengine/qdengine.h
index 5638e4f82c9..3915c82e386 100644
--- a/engines/qdengine/qdengine.h
+++ b/engines/qdengine/qdengine.h
@@ -126,11 +126,21 @@ public:
int engineMain();
+ const Vect2i &screen_offset() {
+ return _screen_offset;
+ }
+ void set_screen_offset(const Vect2i &offset) {
+ _screen_offset = offset;
+ }
+
+public:
int _thumbSizeX = 0, _thumbSizeY = 0;
bool _debugDraw = false;
bool _debugDrawGrid = false;
int _gameVersion = 0;
+ Vect2i _screen_offset = Vect2i(0, 0);
+
// Default text format
qdScreenTextFormat _default_format;
// Global format
Commit: 936fd67c3c0b6290132f8d5ae365589a9539efcf
https://github.com/scummvm/scummvm/commit/936fd67c3c0b6290132f8d5ae365589a9539efcf
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-09-21T23:15:25+02:00
Commit Message:
QDENGINE: Eliminate more global constructors
Changed paths:
engines/qdengine/qdcore/qd_game_scene.cpp
engines/qdengine/qdcore/qd_game_scene.h
engines/qdengine/qdengine.h
diff --git a/engines/qdengine/qdcore/qd_game_scene.cpp b/engines/qdengine/qdcore/qd_game_scene.cpp
index bec267234b8..3f6c4efe8d8 100644
--- a/engines/qdengine/qdcore/qd_game_scene.cpp
+++ b/engines/qdengine/qdcore/qd_game_scene.cpp
@@ -53,10 +53,7 @@ struct qdGridZoneOrdering {
};
fpsCounter *g_fpsCounter = nullptr;
-grScreenRegion qdGameScene::_fps_region = grScreenRegion_EMPTY;
-grScreenRegion qdGameScene::_fps_region_last = grScreenRegion_EMPTY;
char qdGameScene::_fps_string[255];
-Std::vector<qdGameObject *> qdGameScene::_visible_objects;
qdGameScene::qdGameScene() : _mouse_click_object(NULL),
_mouse_right_click_object(NULL),
@@ -186,7 +183,7 @@ void qdGameScene::redraw() {
switch (flags() & (CYCLE_X | CYCLE_Y)) {
case CYCLE_X:
- for (Std::vector<qdGameObject *>::reverse_iterator it = _visible_objects.rbegin(); it != _visible_objects.rend(); ++it) {
+ for (Std::vector<qdGameObject *>::reverse_iterator it = g_engine->_visible_objects.rbegin(); it != g_engine->_visible_objects.rend(); ++it) {
for (int i = 0; i < 8; i += 4) {
Vect2i pos = (*it)->screen_pos() + Vect2i(offs_x[i], offs_y[i]);
Vect2i sz = (*it)->screen_size();
@@ -200,7 +197,7 @@ void qdGameScene::redraw() {
}
break;
case CYCLE_Y:
- for (Std::vector<qdGameObject *>::reverse_iterator it = _visible_objects.rbegin(); it != _visible_objects.rend(); ++it) {
+ for (Std::vector<qdGameObject *>::reverse_iterator it = g_engine->_visible_objects.rbegin(); it != g_engine->_visible_objects.rend(); ++it) {
for (int i = 2; i < 8; i += 4) {
Vect2i pos = (*it)->screen_pos() + Vect2i(offs_x[i], offs_y[i]);
Vect2i sz = (*it)->screen_size();
@@ -214,7 +211,7 @@ void qdGameScene::redraw() {
}
break;
case CYCLE_X | CYCLE_Y:
- for (Std::vector<qdGameObject *>::reverse_iterator it = _visible_objects.rbegin(); it != _visible_objects.rend(); ++it) {
+ for (Std::vector<qdGameObject *>::reverse_iterator it = g_engine->_visible_objects.rbegin(); it != g_engine->_visible_objects.rend(); ++it) {
for (int i = 0; i < 8; i++) {
Vect2i pos = (*it)->screen_pos() + Vect2i(offs_x[i], offs_y[i]);
Vect2i sz = (*it)->screen_size();
@@ -229,7 +226,7 @@ void qdGameScene::redraw() {
break;
}
} else {
- for (Std::vector<qdGameObject *>::reverse_iterator it = _visible_objects.rbegin(); it != _visible_objects.rend(); ++it)
+ for (Std::vector<qdGameObject *>::reverse_iterator it = g_engine->_visible_objects.rbegin(); it != g_engine->_visible_objects.rend(); ++it)
(*it)->redraw();
}
}
@@ -249,7 +246,7 @@ bool qdGameScene::mouse_handler(int x, int y, mouseDispatcher::mouseEvent ev) {
break;
}
}
- for (Std::vector<qdGameObject *>::iterator io = _visible_objects.begin(); io != _visible_objects.end(); ++io) {
+ for (Std::vector<qdGameObject *>::iterator io = g_engine->_visible_objects.begin(); io != g_engine->_visible_objects.end(); ++io) {
if (!(*io)->check_flag(QD_OBJ_DISABLE_MOUSE_FLAG) && (*io)->named_object_type() != QD_NAMED_OBJECT_STATIC_OBJ) {
if ((*io)->hit(x, y)) {
_mouse_hover_object = *io;
@@ -284,7 +281,7 @@ bool qdGameScene::mouse_handler(int x, int y, mouseDispatcher::mouseEvent ev) {
}
qdGameObject *qdGameScene::get_hitted_obj(int x, int y) {
- for (Std::vector<qdGameObject *>::iterator io = _visible_objects.begin(); io != _visible_objects.end(); ++io) {
+ for (Std::vector<qdGameObject *>::iterator io = g_engine->_visible_objects.begin(); io != g_engine->_visible_objects.end(); ++io) {
if (!(*io)->check_flag(QD_OBJ_DISABLE_MOUSE_FLAG) && (*io)->named_object_type() != QD_NAMED_OBJECT_STATIC_OBJ)
if ((*io)->hit(x, y))
return (*io);
@@ -359,7 +356,7 @@ void qdGameScene::load_script(const xml::tag *p) {
}
}
- _visible_objects.reserve(object_list().size());
+ g_engine->_visible_objects.reserve(object_list().size());
_personages.reserve(personages_count);
for (qdGameObjectList::const_iterator it = object_list().begin(); it != object_list().end(); ++it) {
@@ -514,7 +511,7 @@ void qdGameScene::debug_redraw() {
v1 = qdCamera::current_camera()->global2scr(Vect3f(300,-300,0));
grDispatcher::instance()->line(v0.x,v0.y,v1.x,v1.y,cl,2);
- for (Std::vector<qdGameObject *>::reverse_iterator it = _visible_objects.rbegin(); it != _visible_objects.rend(); ++it)
+ for (Std::vector<qdGameObject *>::reverse_iterator it = g_engine->_visible_objects.rbegin(); it != g_engine->_visible_objects.rend(); ++it)
(*it)->debug_redraw();
}
@@ -632,18 +629,18 @@ struct qdObjectOrdering {
};
bool qdGameScene::init_visible_objects_list() {
- _visible_objects.clear();
+ g_engine->_visible_objects.clear();
for (auto &it : object_list()) {
it->update_screen_pos();
if (it->is_visible() && !it->check_flag(QD_OBJ_SCREEN_COORDS_FLAG)) {
// The original depended on stable sort, so we imitate it here
// since Common::sort() is unstable
- it->setTempPosInList(_visible_objects.size());
- _visible_objects.push_back(it);
+ it->setTempPosInList(g_engine->_visible_objects.size());
+ g_engine->_visible_objects.push_back(it);
}
}
- Common::sort(_visible_objects.begin(), _visible_objects.end(), qdObjectOrdering());
+ Common::sort(g_engine->_visible_objects.begin(), g_engine->_visible_objects.end(), qdObjectOrdering());
return true;
}
@@ -990,10 +987,10 @@ void qdGameScene::pre_redraw() {
}
}
- if (!_fps_region.is_empty())
- dp->add_redraw_region(_fps_region);
- if (!_fps_region_last.is_empty())
- dp->add_redraw_region(_fps_region_last);
+ if (!g_engine->_fps_region.is_empty())
+ dp->add_redraw_region(g_engine->_fps_region);
+ if (!g_engine->_fps_region_last.is_empty())
+ dp->add_redraw_region(g_engine->_fps_region_last);
}
if (ConfMan.getBool("show_fps")) {
@@ -1004,9 +1001,9 @@ void qdGameScene::pre_redraw() {
int sx = grDispatcher::instance()->textWidth(_fps_string);
int sy = grDispatcher::instance()->textHeight(_fps_string);
- _fps_region = grScreenRegion(10 + sx / 2, 10 + sy / 2, sx, sy);
+ g_engine->_fps_region = grScreenRegion(10 + sx / 2, 10 + sy / 2, sx, sy);
} else
- _fps_region.clear();
+ g_engine->_fps_region.clear();
fps_counter()->quant();
}
@@ -1015,7 +1012,7 @@ void qdGameScene::post_redraw() {
for (qdGameObjectList::const_iterator io = object_list().begin(); io != object_list().end(); ++io)
(*io)->post_redraw();
- _fps_region_last = _fps_region;
+ g_engine->_fps_region_last = g_engine->_fps_region;
}
qdConditionalObject::trigger_start_mode qdGameScene::trigger_start() {
diff --git a/engines/qdengine/qdcore/qd_game_scene.h b/engines/qdengine/qdcore/qd_game_scene.h
index 6fc9030ae9c..623decf8365 100644
--- a/engines/qdengine/qdcore/qd_game_scene.h
+++ b/engines/qdengine/qdcore/qd_game_scene.h
@@ -284,10 +284,6 @@ private:
uint32 _zone_update_count;
- static Std::vector<qdGameObject *> _visible_objects;
-
- static grScreenRegion _fps_region;
- static grScreenRegion _fps_region_last;
static char _fps_string[255];
bool init_visible_objects_list();
diff --git a/engines/qdengine/qdengine.h b/engines/qdengine/qdengine.h
index 3915c82e386..b8805fea6ed 100644
--- a/engines/qdengine/qdengine.h
+++ b/engines/qdengine/qdengine.h
@@ -140,6 +140,9 @@ public:
int _gameVersion = 0;
Vect2i _screen_offset = Vect2i(0, 0);
+ grScreenRegion _fps_region = grScreenRegion_EMPTY;
+ grScreenRegion _fps_region_last = grScreenRegion_EMPTY;
+ Std::vector<qdGameObject *> _visible_objects;
// Default text format
qdScreenTextFormat _default_format;
More information about the Scummvm-git-logs
mailing list