Irrlicht Различия между device->drop() и device->closeDevice()

Я готов запустить два отдельных устройства Irrlicht, в основном новое после закрытия старого, но, используя два вышеупомянутых метода для закрытия старого, я не могу заставить появиться новое устройство (segfault). Как правильно это сделать?

2 ответа

Решение

Чтобы полностью закрыть устройство чистым способом, необходимо позвонить closeDevice(), затем run() чтобы очистить все поздние события, то drop() очистить память. Так что в основном сделайте следующее:

device->closeDevice();
device->run();
device->drop();

Просто для уточнения.

Все closeDevice() это просто сказать Иррлихт, чтобы вернуть ложь на следующий run() вызов. Его можно вызывать из любой части вашего кода (из обработчика событий или в середине геометрии чертежа). По сути, вы можете создать свою собственную переменную для хранения флага, например needBreakRenderingLoop, и игнорировать то, что run() возвращает, вместо этого проверьте вашу переменную и измените ее вручную вместо вызова closeDevice(), Но это сделано двигателем уже для вас.

Другие вопросы по тегам