示例#1
0
bool
mmg_app::OnInit() {
#ifdef __WXMAC__
  ProcessSerialNumber PSN;
  GetCurrentProcess(&PSN);
  TransformProcessType(&PSN, kProcessTransformToForegroundApplication);
#endif

  wxImage::AddHandler(new wxPNGHandler);

  mtx_common_init("mmg");

  wxConfigBase *cfg;
  uint32_t i;
  wxString k, v;
  int index;

  prepare_mmg_data_folder();

#if defined(SYS_WINDOWS)
  cfg = new wxConfig(wxT("mkvmergeGUI"));
#else
  cfg = new wxFileConfig(wxT("mkvmergeGUI"), wxEmptyString, get_config_file_name());
#endif
  cfg->SetExpandEnvVars(false);
  wxConfigBase::Set(cfg);

  init_ui_locale();

  cfg->SetPath(wxT("/GUI"));
  cfg->Read(wxT("last_directory"), &last_open_dir, wxEmptyString);
  for (i = 0; i < 4; i++) {
    k.Printf(wxT("last_settings %u"), i);
    if (cfg->Read(k, &v) && wxFile::Exists(v))
      last_settings.push_back(v);
    k.Printf(wxT("last_chapters %u"), i);
    if (cfg->Read(k, &v) && wxFile::Exists(v))
      last_chapters.push_back(v);
  }
  cfg->SetPath(wxT("/chapter_editor"));
  cfg->Read(wxT("default_language"), &k, wxT("und"));
  g_default_chapter_language = wxMB(k);
  index = map_to_iso639_2_code(g_default_chapter_language.c_str());
  if (-1 == index)
    g_default_chapter_language = "und";
  else
    g_default_chapter_language = iso639_languages[index].iso639_2_code;
  if (cfg->Read(wxT("default_country"), &k) && (0 < k.length()))
    g_default_chapter_country = wxMB(k);
  if (!is_valid_cctld(g_default_chapter_country.c_str()))
    g_default_chapter_country = "";

  app = this;
  mdlg = new mmg_dialog();
  mdlg->Show(true);

  handle_command_line_arguments();

  return true;
}
示例#2
0
int main(int arg_count, const char** arguments)
{
   // const std::vector<const std::string* const>
   auto return_arguments = handle_command_line_arguments(arg_count, arguments);

   // Set up and tear down automatically done.
   glfw_helper glfw(GL_FALSE);

   GLFWwindow* window = glfw.create_window(WIDTH, HEIGHT, "OpenGl Example");
   glfw.set_window_context(window);

   std::thread* server_thread = new std::thread([] ()
   {
      ev9::server<false>* server = new ev9::server<false>([] (std::vector<char>& input, std::vector<char>& output)
      {
         std::lock_guard<std::mutex> lock(g_lock);

         g_ring_buffer.push(new std::string(input.begin(), input.end()));
      });

         server->start();
   });

   add_call_backs(glfw, window);

   set_up_glew(WIDTH, HEIGHT);
   //generate texture
   GLuint texture = load_texture_from_file((*return_arguments)[0]->c_str());

   //TODO - find a better way to reference these files paths.
   ev10::eIIe::shader shader((*return_arguments)[1]->c_str(), (*return_arguments)[2]->c_str());
   GLuint shader_program = shader.get_program();

   GLuint VBO, VAO, EBO;

   glGenVertexArrays(1, &VAO);
   glGenBuffers(1, &VBO);
   glGenBuffers(1, &EBO);

   glBindVertexArray(VAO);
   // 2. Copy our vertices array in a vertex buffer for OpenGL to use
   glBindBuffer(GL_ARRAY_BUFFER, VBO);
   glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
   // 3. Copy our index array in a element buffer for OpenGL to use
   glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
   glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(vert_indices), vert_indices, GL_STATIC_DRAW);
   // 3. Then set the vertex attributes pointers
   glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)0);
   glEnableVertexAttribArray(0);

   glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
   glEnableVertexAttribArray(1);

   glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(6 * sizeof(GLfloat)));
   glEnableVertexAttribArray(2);

   // 4. Unbind VAO (NOT the EBO)
   glBindVertexArray(0);

   while (!glfwWindowShouldClose(window))
   {
      glfwPollEvents();

      // Background color 
      glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
      glClear(GL_COLOR_BUFFER_BIT);

      shader.use_program();

      std::string* direction = nullptr;

      {
         std::lock_guard<std::mutex> lock(g_lock);

         if (!g_ring_buffer.empty())
         {
            direction = g_ring_buffer.pop();
         }
      }

      if (direction)
      {
         if ((*direction)[0] == '-')
         {
            g_keys[253] = true;
         }

         else
         {
            g_keys[252] = true;
         }
      }

      float delta = 0.0;
      
      if (direction)
      {
         std::stringstream parse_string(*direction);

         parse_string >> delta;

         std::cout << "delta: " << std::to_string(delta) << "\r" << std::flush;
      }

      // Up
      if (g_keys[GLFW_KEY_UP])
      {
         g_location[1] -= DELTA;

         glm::mat4 transform;
         transform = glm::translate(transform, glm::vec3(g_location[0], g_location[1], 0.0f));

         GLint transform_location = glGetUniformLocation(shader.get_program(), "transform");
         glUniformMatrix4fv(transform_location, 1, GL_FALSE, glm::value_ptr(transform));

         g_keys[GLFW_KEY_UP] = false;
      }

      // Down
      if (g_keys[GLFW_KEY_DOWN])
      {
         g_location[1] -= DELTA;

         glm::mat4 transform;
         transform = glm::translate(transform, glm::vec3(g_location[0], g_location[1], 0.0f));

         GLint transform_location = glGetUniformLocation(shader.get_program(), "transform");
         glUniformMatrix4fv(transform_location, 1, GL_FALSE, glm::value_ptr(transform));

         g_keys[GLFW_KEY_DOWN] = false;
      }

      // Right
      if (g_keys[252])
      {
         g_location[0] += delta;

         glm::mat4 transform;
         transform = glm::translate(transform, glm::vec3(g_location[0], g_location[1], 0.0f));

         GLint transform_location = glGetUniformLocation(shader.get_program(), "transform");
         glUniformMatrix4fv(transform_location, 1, GL_FALSE, glm::value_ptr(transform));

         g_keys[252] = false;
      }

      // Left
      if (g_keys[253])
      {
         g_location[0] += delta;

         glm::mat4 transform;
         transform = glm::translate(transform, glm::vec3(g_location[0], g_location[1], 0.0f));

         GLint transform_location = glGetUniformLocation(shader.get_program(), "transform");
         glUniformMatrix4fv(transform_location, 1, GL_FALSE, glm::value_ptr(transform));

         g_keys[253] = false;
      }

      else
      {
         glm::mat4 transform;
         transform = glm::translate(transform, glm::vec3(g_location[0], g_location[1], 0.0f));

         GLint transform_location = glGetUniformLocation(shader.get_program(), "transform");
         glUniformMatrix4fv(transform_location, 1, GL_FALSE, glm::value_ptr(transform));
      }

      //check image reset flag (triggered by pressing 'r'?)
      if (image_should_reset)
      {
         g_location[0] = 0.0;

         glm::mat4 transform;
         transform = glm::translate(transform, glm::vec3(g_location[0], g_location[1], 0.0f));

         GLint transform_location = glGetUniformLocation(shader.get_program(), "transform");
         glUniformMatrix4fv(transform_location, 1, GL_FALSE, glm::value_ptr(transform));

         image_should_reset = false;
      }

      glBindTexture(GL_TEXTURE_2D, texture);
      glBindVertexArray(VAO);
      glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
      glBindVertexArray(0);

      glfwSwapBuffers(window);
   }

   // Properly de-allocate all resources once they've outlived their purpose
   glDeleteVertexArrays(1, &VAO);
   glDeleteBuffers(1, &VBO);
   glDeleteBuffers(1, &EBO);

   return 0;
}