void dynamic_shader_format::load_shader(boost::filesystem::path const& filename) { std::string extension = filename.extension().string(); bool parse_outputs = false; if ((extension.compare(".fs") == 0) || (extension.compare(".frag") == 0)) { obj::shader_base::create_shader< fshd::type::gl_fragment_shader >(); parse_outputs = true; } else if ((extension.compare(".vs") == 0) || (extension.compare(".vert") == 0)) { obj::shader_base::create_shader< fshd::type::gl_vertex_shader >(); } else if ((extension.compare(".gs") == 0) || (extension.compare(".geom") == 0)) { obj::shader_base::create_shader< fshd::type::gl_geometry_shader >(); } else { __gtulu_error() << "Unknown shader extension " << extension << ", please use one of .fs/.frag, .gs/.geom or .vs/.vert."; } std::string source = gu::file::get_contents(filename); obj::shader_base::set_source(source.c_str()); outputs_.clear(); if (parse_outputs) { boost::regex expression("out\\s+(\\S+)\\s+(\\S+);"); boost::regex array_expression("\\s*(\\S+)\\s*\\[(\\S*)\\]\\s*"); boost::sregex_iterator it(source.begin(), source.end(), expression); boost::sregex_iterator end; std::uint32_t id = 0; while (it != end) { std::string type_name = it->str(1); std::string name = it->str(2); std::uint32_t size = 1; boost::sregex_iterator name_it(name.begin(), name.end(), array_expression); boost::sregex_iterator type_it(type_name.begin(), type_name.end(), array_expression); // We've found a static sized output vector, that's really nice... if (name_it != end) { name = name_it->str(1); size = boost::lexical_cast< std::uint32_t >(name_it->str(2)); // We've just found a dynamic sized output vector, what a wonderful idea... } else if (type_it != end) { type_name = type_it->str(1); size = -1; } outputs_.push_back(output_info(id++, name, fout::format::get(type_name), size, -1, -1)); ++it; } } } // load_shader
int save_map(){ int i = 0, j = 115, tru = 1; char Key; buffer[0] = '\0'; int x1 = 100, y1 = 2, x2 = 145, y2 = 17, min = 115, max = 130, mv = 8, ind1 = 4; FILE *saved_maps; print_border(y1, x1, y2, x2); mvprintw(y1 + 1, x1 + 15, " S A V E M A P A S"); mvprintw(y1 + 6, x1 + 2, " Map Name : _______________"); mvprintw(y1 + 13, x1 + 2, "ESC : Return to main menu "); attron(COLOR_WHITE | A_REVERSE); mvprintw(y1 + 11, x1 + 1, " Max. 15 characters(letters & num allowed!)"); attroff(COLOR_WHITE | A_REVERSE); refresh(); while (tru) { switch (Key = getch()){ case KEY_UP: case KEY_DOWN: case KEY_LEFT: case KEY_RIGHT: break; case ENTER:if (buffer[0] == '\0') name_it(); else tru = check_if_legit(buffer); break; default: if (j < max) { buffer[i++] = Key; buffer[i] = '\0'; mvaddch(y1 + 6, j++, Key); }; refresh(); break; case BACKSPACE: if (j > min) { buffer[--i] = '\0'; mvaddch(y1 + 6, --j, '_'); }; refresh(); break; case ESC: delete_menu(y1, x1, y2, x2); return 1; break; } } buffer[i] = '.'; buffer[i + 1] = buffer[i + 3] = 't'; buffer[i + 2] = 'x'; buffer[i + 4] = '\0'; save_it(); if (!(saved_maps = fopen("saved_maps.txt", "r+"))) saved_maps = fopen("saved_maps.txt", "w"); i = 0; while ((Key = fgetc(saved_maps)) != EOF){ // does this map already exist in the file? while (Key == buffer[i]) { Key = fgetc(saved_maps); i++; } if (i == strlen(buffer)) break; else i = 0; } if (i == strlen(buffer)) fclose(saved_maps); else // if it does->do nothing, if it doesn't, then save it in the file; { fprintf(saved_maps, "%s\n", buffer); fclose(saved_maps); } delete_menu(y1, x1, y2, x2); print_border(y1, x1, y2, x2); mvprintw(y1 + 4, x1 + 2, " Continue with editting this map?"); attron(COLOR_PAIR(8)); mvprintw(y1 + 6, x1 + 18, " Yes "); attroff(COLOR_PAIR(8)); mvprintw(y1 + 8, x1 + 18, " No "); refresh(); while (1){ switch (getch()){ case KEY_UP: menu_up(&mv, y1 + 6, &ind1, x1 + 18); break; case KEY_DOWN: menu_down(&mv, y1 + 8, &ind1, x1 + 18); break; case ENTER: if (mv == 8) { delete_menu(y1, x1, y2, x2); return 0; } else { delete_menu(y1, x1, y2, x2); return 1; } break; } } }