qmlfrontend/engine_instance.cpp
author Grigory Ustinov <grenka@altlinux.org>
Wed, 28 Nov 2018 17:20:22 +0300
changeset 14335 6b56a0a0afb4
parent 14303 00b56ec8b7df
child 14377 b6824a53d4b1
permissions -rw-r--r--
sed -i -E "s/ёж$/ёжик/g" *ru*; sed -i -E "s/еж([аиу])$/ёжик\1/g" *ru* grep -E "(ёж|еж[аиу])$" *ru*

#include "engine_instance.h"

#include <QDebug>
#include <QOpenGLFunctions>
#include <QSurface>

static QOpenGLContext* currentOpenglContext = nullptr;
extern "C" void (*getProcAddress(const char* fn))() {
  if (!currentOpenglContext)
    return nullptr;
  else
    return currentOpenglContext->getProcAddress(fn);
}

EngineInstance::EngineInstance(QObject* parent)
    : QObject(parent), m_instance(Engine::start_engine()) {}

EngineInstance::~EngineInstance() { Engine::cleanup(m_instance); }

void EngineInstance::sendConfig(const GameConfig& config) {
  for (auto b : config.config()) {
    Engine::send_ipc(m_instance, reinterpret_cast<uint8_t*>(b.data()),
                     static_cast<size_t>(b.size()));
  }
}

void EngineInstance::advance(quint32 ticks) {
  Engine::advance_simulation(m_instance, ticks);
}

void EngineInstance::renderFrame() { Engine::render_frame(m_instance); }

void EngineInstance::setOpenGLContext(QOpenGLContext* context) {
  currentOpenglContext = context;

  auto size = context->surface()->size();
  Engine::setup_current_gl_context(
      m_instance, static_cast<quint16>(size.width()),
      static_cast<quint16>(size.height()), &getProcAddress);
}

Engine::PreviewInfo EngineInstance::generatePreview() {
  Engine::PreviewInfo pinfo;

  Engine::generate_preview(m_instance, &pinfo);

  return pinfo;
}