TEST( Clock, tick ) { Clock c; EXPECT_EQ( 0, c.getDeltaTime() ); EXPECT_EQ( 0, c.getAccumTime() ); std::this_thread::sleep_for( std::chrono::milliseconds( 16 ) ); c.tick(); EXPECT_LE( 0.016, c.getDeltaTime() ); EXPECT_LE( 0.016, c.getAccumTime() ); std::this_thread::sleep_for( std::chrono::milliseconds( 16 ) ); c.tick(); EXPECT_LE( 0.016, c.getDeltaTime() ); EXPECT_LE( 0.032, c.getAccumTime() ); std::this_thread::sleep_for( std::chrono::milliseconds( 16 ) ); c.tick(); EXPECT_LE( 0.016, c.getDeltaTime() ); EXPECT_LE( 0.048, c.getAccumTime() ); }
TEST( Clock, construction ) { Clock c; EXPECT_EQ( 0, c.getDeltaTime() ); EXPECT_EQ( 0, c.getAccumTime() ); }
void runCollisionDetection () { static Clock ck ; ck.update () ; double tall=ck.getDeltaTime () ; static int firsttime = true ; static unsigned int query = 0 ; FrameBufferObject *tmp ; FrameBufferObject *SCM = old ; FrameBufferObject *DCM = collisions ; unsigned int numHits ; if ( firsttime ) { glGenQueriesARB ( 1, (GLuint*) & query ) ; firsttime = false ; } /* Fill SCM with big numbers */ glClearColor ( 1.0f, 1.0f, 1.0f, 1.0f ) ; SCM -> prepare ( true ) ; glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f ) ; force -> prepare ( true ) ; /* Zero out all of the forces. */ int numPasses = 0 ; glPushClientAttrib ( GL_CLIENT_VERTEX_ARRAY_BIT ) ; glClientActiveTexture( GL_TEXTURE1 ) ; glEnableClientState ( GL_TEXTURE_COORD_ARRAY ) ; glBindBufferARB ( GL_ARRAY_BUFFER_ARB, vbo_collt1 ) ; glTexCoordPointer ( 2, GL_FLOAT, 0, vbo_collt1 ? NULL : colltexcoords1 ) ; glClientActiveTexture( GL_TEXTURE0 ) ; glEnableClientState ( GL_TEXTURE_COORD_ARRAY ) ; glBindBufferARB ( GL_ARRAY_BUFFER_ARB, vbo_collt0 ) ; glTexCoordPointer ( 2, GL_FLOAT, 0, vbo_collt0 ? NULL : colltexcoords0 ) ; glEnableClientState ( GL_VERTEX_ARRAY ) ; glBindBufferARB ( GL_ARRAY_BUFFER_ARB, vbo_collvx ) ; glVertexPointer ( 3, GL_FLOAT, 0, vbo_collvx ? NULL : collvertices ) ; while ( true ) { collisionGenerator -> use () ; collisionGenerator -> applyTexture ( "position" , position, 0 ) ; collisionGenerator -> applyTexture ( "old_collisions", SCM , 1 ) ; /* Fill DCM with zeroes */ DCM -> prepare ( true ) ; glBeginQueryARB ( GL_SAMPLES_PASSED_ARB, query ) ; glMultiDrawArraysEXT ( GL_QUADS, (GLint*)& collstart, (GLint*)& colllength, 1 ) ; numPasses++ ; glEndQueryARB ( GL_SAMPLES_PASSED_ARB ) ; forceGenerator -> use () ; forceGenerator -> applyTexture ( "position" , position , 0 ) ; forceGenerator -> applyTexture ( "force" , force , 1 ) ; forceGenerator -> applyTexture ( "collisions", DCM , 2 ) ; GLuint sampleCount ; glGetQueryObjectuivARB ( query, GL_QUERY_RESULT_ARB, &sampleCount ) ; //fprintf ( stderr, "%d ", sampleCount ) ; if ( sampleCount == 0 ) break ; new_force -> paint () ; tmp = new_force ; new_force = force ; force = tmp ; tmp = DCM ; DCM = SCM ; SCM = tmp ; } glBindBufferARB ( GL_ARRAY_BUFFER_ARB, 0 ) ; glPopClientAttrib () ; ck.update () ; double tdone=ck.getDeltaTime () ; static int ii = 0 ; ii++; if (ii%100==0) fprintf ( stderr, "Performance: %d passes %d cubes: other=%fms collisions=%fms\n", numPasses, NUM_CUBES, tall*1000.0, tdone*1000.0 ) ; }