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; }
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; }