void engineDestroy() { mapDestroy(); guiDestroy(); gfxDestroy(); SDL_DestroyWindow(engine.window); TTF_Quit(); SDL_Quit(); }
void Renderer::createContext(const int width, const int height, const bool fullscreen, const int aa) { bool needRecover{false}; if(height>0) { aspectRatio=static_cast<float>(width)/static_cast<float>(height); aspectRatioGUI=(height+((width-height)/2))/(float)(width); } else { throwFatalError("Divide by zero in createContext"); } contextW=width; contextH=height; if(openglContext!=0) { for(auto m: models) m->destroy(); program->destroy(); guiprogram->destroy(); sManager->destroyShaders(); mManager->destroyMaterials(); destroyContext(); guiDestroy(); needRecover=true; } //OpenGL parameters SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,24); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,0); //Setup AA parameters const int level{requestAntiAliasingLevel(aa)}; SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS,level==1?0:1); SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES,level==1?0:level); //Window parameters Uint32 arguments{SDL_WINDOW_OPENGL|SDL_WINDOW_SHOWN}; if(fullscreen) arguments|=SDL_WINDOW_FULLSCREEN; window=SDL_CreateWindow(GAMENAME,SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,width,height,arguments); if(window==nullptr) throwFatalError(SDL_GetError()); openglContext=SDL_GL_CreateContext(window); if(openglContext==nullptr) throwFatalError(SDL_GetError()); #ifdef __ANDROID_GAME__ #else SDL_SetRelativeMouseMode(SDL_TRUE); //FIXME move #endif glEnable(GL_DEPTH_TEST); if(needRecover) { guiInitialize(); for(auto m: models) m->recover(); sManager->recoverShaders(); program->recover(); guiprogram->recover(); mManager->recoverMaterials(); } }
/**=========================================== * @brief main thread, starting up the client and the other threads * @param argc:int argv**char * ==========================================*/ int main(int argc, char **argv) { char *name = "Guest"; char *server = "localhost"; char *port = "54321"; int thread; int ret, c, conn=0; while(optind < argc) { int option_index = 0; static struct option long_options[] = { {"name", required_argument, 0, 'n'}, {"port", optional_argument, 0, 'p'}, {"help", no_argument, 0, 'h'}, {0,0,0,0} }; c = getopt_long(argc, argv, "hp:n:", long_options, &option_index); if(c == -1) break; switch(c) { case '?': /* unknown parameter */ case ':': /* missing argument */ print_help(argv[0]); break; case 'n': name = strdup(optarg); if(!name) return -1; break; case 'p': port = strdup(optarg); break; case 'h': print_help(argv[0]); break; default: break; } } while(optind < argc) { server = argv[optind++]; } GCI.name = name; printf("Benutzername: %s\n", GCI.name); printf("server: %s", server); struct addrinfo *addr_info, *p; ret = getaddrinfo(server, port, NULL, &addr_info); if(ret) { printf("getaddrinfo: %s\n", gai_strerror(ret)); exit(-1); } p = addr_info; while (p) { if(p->ai_socktype != SOCK_STREAM)/* we only care about TCP */ { p = p->ai_next; continue; } int sock = socket(p->ai_family, p->ai_socktype, 0); if(sock == -1) { perror("socket"); exit(-1); } if(connect(sock, p->ai_addr, p->ai_addrlen) == 0) { signal(SIGINT, sigint_handler); // move to better positioon sem_V(keymng_local(KEY_GCI_SEM)); printf("Socket OK"); GCI.sock = sock; send_login(GCI.name); int state = wait_loginOK(); if(state !=0) { printf("Keine antwort erhalten \n"); return 0; } printf("juhu ich bin eingeloggt \n"); GCI.status = preparation; conn =1; guiInit(&argc, &argv); printf("GUI init \n"); setClientMode(); preparation_showWindow(); guiShowMessageDialog("Willkommen bei You Dont Know Rainer",0); // start the threads thread = pthread_create(&listener_thread_id, NULL, &listener_thread, NULL); if(thread) { printf("Failed to start Listener Thread\n"); exit(0); } thread = pthread_create(&fragen_thread_id, NULL, &fragen_thread, NULL); if(thread) { printf("Failed to start Fragewechsel Thread\n"); exit(0); } //katalog request sendCR(); guiMain(); guiDestroy(); } close(sock); p = p->ai_next; } if(conn==0) printf("Could not connect to server :/\n"); freeaddrinfo(addr_info); exit(0); }