예제 #1
0
파일: engine.c 프로젝트: AndrewBelt/bored
void engineDestroy() {
	mapDestroy();
	guiDestroy();
	gfxDestroy();
	SDL_DestroyWindow(engine.window);
	TTF_Quit();
	SDL_Quit();
}
예제 #2
0
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();
	}


}
예제 #3
0
파일: client.c 프로젝트: hswgtSysprog/YDKR
/**===========================================
 * @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);
}