示例#1
0
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();
      }
   }
}
示例#4
0
文件: wsys_glx.c 项目: tllw/sray
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;
}
示例#5
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 );
}