diff -r b6824a53d4b1 -r 4409344db447 qmlfrontend/engine_instance.cpp --- a/qmlfrontend/engine_instance.cpp Fri Dec 07 13:56:45 2018 +0100 +++ b/qmlfrontend/engine_instance.cpp Fri Dec 07 14:30:35 2018 +0100 @@ -27,6 +27,8 @@ reinterpret_cast(hwlib.resolve("start_engine")); generate_preview = reinterpret_cast( hwlib.resolve("generate_preview")); + dispose_preview = reinterpret_cast( + hwlib.resolve("dispose_preview")); cleanup = reinterpret_cast(hwlib.resolve("cleanup")); send_ipc = reinterpret_cast(hwlib.resolve("send_ipc")); @@ -41,8 +43,9 @@ hwlib.resolve("advance_simulation")); m_isValid = hedgewars_engine_protocol_version && start_engine && - generate_preview && cleanup && send_ipc && read_ipc && - setup_current_gl_context && render_frame && advance_simulation; + generate_preview && dispose_preview && cleanup && send_ipc && + read_ipc && setup_current_gl_context && render_frame && + advance_simulation; emit isValidChanged(m_isValid); if (isValid()) { @@ -79,12 +82,23 @@ &getProcAddress); } -Engine::PreviewInfo EngineInstance::generatePreview() { +QImage EngineInstance::generatePreview() { Engine::PreviewInfo pinfo; generate_preview(m_instance, &pinfo); - return pinfo; + QVector colorTable; + colorTable.resize(256); + for (int i = 0; i < 256; ++i) colorTable[i] = qRgba(255, 255, 0, i); + + QImage previewImage(pinfo.land, static_cast(pinfo.width), + static_cast(pinfo.height), QImage::Format_Indexed8); + previewImage.setColorTable(colorTable); + + // Cannot use it here, since QImage refers to original bytes + // dispose_preview(m_instance); + + return previewImage; } bool EngineInstance::isValid() const { return m_isValid; }