コード例 #1
0
ファイル: TinkerToy.cpp プロジェクト: otherwise777/2IV15_SICG
static void idle_func ( void )
{
	if ( dsim ) simulation_step( pVector, dt );
	else        {get_from_UI();remap_GUI();}

	glutSetWindow ( win_id );
	glutPostRedisplay ();
}
コード例 #2
0
static void idle_func ( void )
{
	get_from_UI ( dens_prev, u_prev, v_prev );
	vel_step ( N, u, v, u_prev, v_prev, visc, dt );
	dens_step ( N, dens, dens_prev, u, v, diff, dt );

	glutSetWindow ( win_id );
	glutPostRedisplay ();
}
コード例 #3
0
ファイル: TinkerToy.cpp プロジェクト: awesson/mass-spring
static void idle_func ( void )
{
    if ( dsim ){
        integrator->integrate( *sys, dt );
        get_from_UI();
    }
    else        {remap_GUI();}

    glutSetWindow ( win_id );
    glutPostRedisplay ();
}
コード例 #4
0
ファイル: demo.c プロジェクト: Shakebones/Experiments
static void idle_func ( void )
{
	get_from_UI ( dens_prev, u_prev, v_prev );
	int idxX = N / 2;
	int idxY = 1;
	v[IX(idxX, idxY)] = force * 0.09f;
	vel_step ( N, u, v, u_prev, v_prev, visc, dt );
	dens_step ( N, dens, dens_prev, u, v, diff, dt );

	glutSetWindow ( win_id );
	glutPostRedisplay ();
}
コード例 #5
0
ファイル: StableFluids.cpp プロジェクト: tuupke/2IV15-Project
static void idle_func ( void )
{
	if (!pause) {
		get_from_UI( PrevDensityField, PrevVelocityField );
		VelocityField->TimeStep( VelocityField, PrevVelocityField, bodies);
		DensityField->TimeStep( DensityField, PrevDensityField, VelocityField );
		simulation_step(pVector, fVector, dt, fConstraint, VelocityField);

		glutSetWindow(win_id);
		glutPostRedisplay();
	}
}
コード例 #6
0
void FluidField::update() {
	get_from_UI ( dens_prev, u_prev, v_prev );
	/*u_prev[IX(50,20)] = -100.0f;
	v_prev[IX(50,20)] = -100.0f;	
	
	u_prev[IX(50,21)] = 100.0f;
	v_prev[IX(50,21)] = -100.0f;		
	
	u_prev[IX(51,21)] = 100.0f;
	v_prev[IX(51,21)] = 100.0f;

	u_prev[IX(51,20)] = -100.0f;
	v_prev[IX(51,20)] = 100.0f;	*/
	densityStep( dens, dens_prev, u, v, diff, dt );
	velocityStep( u, v, u_prev, v_prev, visc, dt);
}
コード例 #7
0
ファイル: main.cpp プロジェクト: AMouri/Rouge
void update(float elapsed, TCOD_key_t k, TCOD_mouse_t mouse) {
	get_from_UI(dens_prev,u_prev,v_prev,elapsed,k,mouse);
	update_velocity(u,v,u_prev,v_prev,visc,elapsed);
	update_density(dens,dens_prev,u,v,diff,elapsed);
}
コード例 #8
0
ファイル: main.c プロジェクト: wolfviking0/webcl-translator
static void idle_func ( void )
{
	//if(step)
	{
		get_from_UI ( g_dens_prev, g_u_prev, g_v_prev, g_heat,g_compressibility);
    
		//blur(g_u_prev,g_v_prev,g_w_prev, dt);
		
		
#if USE_OPENCL
      
  transfer_buffers_to_gpu();
    
  run_cl_advect_velocity(&clData, dt);
      
  flush_cl_queue();
  
    
  run_cl_calculate_divergence(&clData, dt);
   
  run_cl_zero_pressure(&clData);
  
  if(useCG)
  {
    transfer_cl_float_buffer_from_device(&clData,clData.buf_pressure,g_pressure,clData.n,true);
    transfer_cl_float_buffer_from_device(&clData,clData.buf_divergence,g_divergence,clData.n,true);
    
    run_cl_cg_no_mtx(&clData,g_pressure, g_divergence,  g_cg_r, g_cg_d, g_cg_q, clData.n, 10, 0.0001f);
    
    flush_cl_queue();
    
    transfer_cl_float_buffer_to_device(&clData,clData.buf_pressure,g_pressure,clData.n,true);
    
    
  }else{
    //This has to run the whole kernel and iterate at the cpu because
    // opencl only can sync at the workgroup level when we need
    // global synchronization
    for(int i = 0; i < 20; ++i)
    {
      run_cl_pressure_solve(&clData, dt);
    }
  }
    
  run_cl_pressure_apply(&clData, dt);
    
    
  flush_cl_queue();
    
  run_cl_advect_density(&clData, dt);
    
    if(vorticity){
      run_cl_vorticity_confinement(&clData, dt,0.5f);
    }
  transfer_buffers_to_cpu();
    
    
#else
    if(maccormack){
			advect_velocity_maccormack(dt, g_u, g_v, g_w, g_u_prev, g_v_prev, g_w_prev);
		} else {
			//advect_velocity_forward_euler(dt, g_u, g_v, g_w, g_u_prev, g_v_prev, g_w_prev);
			advect_velocity_RK2(dt, g_u, g_v, g_w, g_u_prev, g_v_prev, g_w_prev);
		}
    
    //project(dt,g_u,g_v, g_w, g_divergence, g_pressure, g_pressure_prev);
    project(dt,g_u,g_v, g_w, g_divergence, g_pressure, g_pressure_prev, g_laplacian_matrix,g_cg_r, g_cg_d, g_cg_q,useCG);
    
    
		advectRK2(dt,g_dens,g_dens_prev, g_u, g_v, g_w);
    
    if(vorticity) {
			vorticity_confinement(dt, g_u, g_v, g_w, g_u_prev, g_v_prev, g_w_prev);
		}
#endif
		

    
		SWAP(g_u,g_u_prev);
		SWAP(g_v,g_v_prev);
		SWAP(g_dens, g_dens_prev);
    
		//copy_grid(g_u,g_u_prev);
		//copy_grid(g_v,g_v_prev);
		//copy_grid(g_dens, g_dens_prev);
    
		step = 0;
	}

	//#ifndef __EMSCRIPTEN__
	//	glutSetWindow ( win_id );
	//#endif
	glutPostRedisplay ();



}