Пример #1
0
/*!
  */
void CuiRendererManager::invokeRendering(const QString& scene_file_path)
    const noexcept
{
  CuiRenderer renderer;
  std::unique_ptr<std::ofstream> log_stream;
  QImage image;
  QString output_dir;
  QString error_message;

  // Prepare for rendering
  {
    QJsonObject scene_value;
    if (SceneDocument::loadDocument(scene_file_path, scene_value, error_message)) {
      // Make a setting file
      const auto scene_settings = SceneValue::toSetting(scene_value);

      // Make a output directory
      output_dir = makeOutputDir(*scene_settings);
      if (!output_dir.isEmpty()) {
        backupSceneFiles(scene_value, *scene_settings, output_dir, &error_message);

        // Init log streams
        log_stream = makeTextLogStream(output_dir.toStdString());
        renderer.setLogStream(log_stream.get());

        // Init a scene
        prepareForRendering(*scene_settings, &renderer, &error_message);
      }
      else {
        error_message = "making output dir failed.";
      }
    }
  }

  if (!error_message.isEmpty())
    QTextStream{stderr} << "Error: " << error_message;

  // Make a progress bar
  SimpleProgressBar progress_bar;
  auto notify_of_progress =
  [&progress_bar](const double progress, const std::string_view status)
  {
    progress_bar.update(progress, status);
  };
  renderer.setProgressCallback(notify_of_progress);

  // Start rendering
  if (renderer.isRunnable()) {
    {
      const auto& ldr_image = renderer.ldrImage();
      image = QImage{static_cast<int>(ldr_image.widthResolution()),
                     static_cast<int>(ldr_image.heightResolution()),
                     QImage::Format_RGB32};
      renderer.setImage(&image);
    }
    renderer.render(output_dir.toStdString());
  }
}
Пример #2
0
void Lightning::Draw(GameEngine* game, Map map, Player player)
{
    SDL_Texture *redTexture = SDL_CreateTexture(game->renderer,
    SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, game->screenWidth, game->screenHeigth);

    SDL_SetTextureBlendMode(redTexture, SDL_BLENDMODE_MOD );

    calculateLightSource(game, redTexture, map, player);
    prepareForRendering(game->renderer);

    SDL_RenderCopy(game->renderer, redTexture, NULL, NULL);

    SDL_DestroyTexture(redTexture);
    redTexture = NULL;
}