jint render(JNIEnv *env, jobject thiz, jint touchX, jint touchY, jdouble turnFactor, jint keyCode, jboolean keySpecial, jboolean keyReleased) { turnFact = turnFactor; if (initDone) { if (mouse_func != NULL && touchX != oldX && touchY != oldY && prevX == -1 && prevY == -1) { mouse_func(WS_LEFT_BUTTON, WS_MOUSE_DOWN, touchX, touchY); prevX = touchX; prevY = touchY; } else if (mouse_func != NULL && touchX != oldX && touchY != oldY) { oldX = prevX; oldY = prevY; mouse_func(WS_LEFT_BUTTON, WS_MOUSE_UP, prevX, prevY); prevX = -1; prevY = -1; } if (keyboard_func != NULL && keyCode != -1) { keyboard_func(keyCode, keySpecial, keyReleased, 1/*x*/, 1/*y*/); } if (idle_func != NULL) { idle_func(); } } if (forceExit) return(NO_MODE); else return(g_game.mode); }
void GLUTAPIENTRY glutMainLoop( void ) { __glutAssert( events != NULL ); __glutHandleWindows(); while (GL_TRUE) { DFBEvent evt, prev; g_idle = GL_TRUE; __glutHandleTimers(); prev.clazz = DFEC_NONE; while (events->GetEvent( events, &evt ) == DFB_OK) { g_idle = GL_FALSE; switch (evt.clazz) { case DFEC_WINDOW: if (prev.clazz == DFEC_WINDOW) __glutWindowEvent( &evt.window, &prev.window ); else __glutWindowEvent( &evt.window, NULL ); break; case DFEC_INPUT: if (prev.clazz == DFEC_INPUT) __glutInputEvent( &evt.input, &prev.input ); else __glutInputEvent( &evt.input, NULL ); break; default: __glutWarning( "unexpected event class %d!\n", evt.clazz ); break; } prev = evt; __glutHandleTimers(); } __glutHandleWindows(); if (g_idle) { if (idle_func) { idle_func(); } else { int msec; __glutSetWindow( NULL ); if (__glutGetTimeout( &msec )) events->WaitForEventWithTimeout( events, msec/1000, msec%1000 ); else events->WaitForEvent( events ); } } } }
void APIENTRY glutMainLoop (void) { GLboolean idle; GLboolean have_event; XEvent evt; int visible = 0; glutPostRedisplay(); if (reshape_func) reshape_func(g_width, g_height); while (GL_TRUE) { idle = GL_TRUE; if (visible && idle_func) have_event = XCheckMaskEvent( dpy, ~0, &evt ); else have_event = XNextEvent( dpy, &evt ); if (have_event) { idle = GL_FALSE; switch(evt.type) { case MapNotify: if (visibility_func) { visibility_func(GLUT_VISIBLE); } visible = 1; break; case UnmapNotify: if (visibility_func) { visibility_func(GLUT_NOT_VISIBLE); } visible = 0; break; case Expose: g_redisplay = 1; break; } } if (visible && g_redisplay && display_func) { idle = GL_FALSE; g_redisplay = GL_FALSE; display_func(); } if (visible && idle && idle_func) { idle_func(); } } }
int wsys_process_events(void) { fd_set rds, wrs; int max_fd, nready, xsock; struct evcall *evnode; struct timeval tv = {0, 0}; static int called_first_reshape; if(!called_first_reshape) { if(reshape_func) reshape_func(win_xsz, win_ysz); called_first_reshape = 1; } FD_ZERO(&rds); FD_ZERO(&wrs); max_fd = xsock = ConnectionNumber(dpy); FD_SET(xsock, &rds); evnode = evlist; while(evnode) { if(evnode->func[EV_RD]) { FD_SET(evnode->fd, &rds); } if(evnode->func[EV_WR]) { FD_SET(evnode->fd, &wrs); } if(evnode->fd > max_fd) { max_fd = evnode->fd; } evnode = evnode->next; } do { nready = select(max_fd + 1, &rds, &wrs, 0, idle_func ? &tv : 0); } while(nready == -1 && errno == EINTR); evnode = evlist; while(evnode) { if(FD_ISSET(evnode->fd, &rds) && evnode->func[EV_RD]) { evnode->func[EV_RD](evnode->fd); } if(FD_ISSET(evnode->fd, &wrs) && evnode->func[EV_WR]) { evnode->func[EV_WR](evnode->fd); } evnode = evnode->next; } remove_empty_evcalls(); if(FD_ISSET(xsock, &rds)) { while(XPending(dpy)) { XEvent ev; XNextEvent(dpy, &ev); if(handle_event(dpy, &ev) == -1) { return -1; } } } if(idle_func) { idle_func(); } return 0; }
int main ( int argc, char ** argv ) { //glutInit ( &argc, argv ); if(!glfwInit()) { fprintf( stderr, "Failed to initialize GLFW\n" ); return EXIT_FAILURE; } // GLenum err = glewInit(); // if (GLEW_OK != err) { // fprintf(stderr, "Error: %s\n", glewGetErrorString(err)); // } if ( argc != 1 && argc != 6 ) { fprintf ( stderr, "usage : %s N dt diff visc force source\n", argv[0] ); fprintf ( stderr, "where:\n" );\ fprintf ( stderr, "\t N : grid resolution\n" ); fprintf ( stderr, "\t dt : time step\n" ); fprintf ( stderr, "\t diff : diffusion rate of the density\n" ); fprintf ( stderr, "\t visc : viscosity of the fluid\n" ); fprintf ( stderr, "\t force : scales the mouse movement that generate a force\n" ); fprintf ( stderr, "\t source : amount of density that will be deposited\n" ); exit ( 1 ); } if ( argc == 1 ) { N = 64; dt = 0.1f; diff = 0.0f; visc = 0.0f; force = 5.0f; source = 100.0f; fprintf ( stderr, "Using defaults : N=%d dt=%g diff=%g visc=%g force = %g source=%g\n", N, dt, diff, visc, force, source ); } else { N = atoi(argv[1]); dt = atof(argv[2]); diff = atof(argv[3]); visc = atof(argv[4]); force = atof(argv[5]); source = atof(argv[6]); } printf ( "\n\nHow to use this demo:\n\n" ); printf ( "\t Add densities with the right mouse button\n" ); printf ( "\t Add velocities with the left mouse button and dragging the mouse\n" ); printf ( "\t Toggle density/velocity display with the 'v' key\n" ); printf ( "\t Clear the simulation by pressing the 'c' key\n" ); printf ( "\t Quit by pressing the 'q' key\n" ); dvel = 2; if ( !allocate_data () ) exit ( 1 ); clear_data (); win_x = 512; win_y = 512; open_glut_window (); while(1) { idle_func(); display_func(); mouse(); if (!glfwGetWindowParam(GLFW_OPENED)) { exit(0); } } glfwTerminate(); //glutMainLoop (); exit ( 0 ); }