int main(int argc, char* argv[]) { CommandLineArgs args(argc,argv); if (args.CheckCmdLineFlag("help")) { Usage(); return 0; } args.GetCmdLineArgument("enable_interop", useInterop); printf("useInterop=%d\n",useInterop); args.GetCmdLineArgument("pause_simulation", pauseSimulation); printf("pause_simulation=%d\n",pauseSimulation); char* tmpfile = 0; args.GetCmdLineArgument("load_bulletfile", tmpfile ); if (tmpfile) fileName = tmpfile; printf("load_bulletfile=%s\n",fileName); printf("\n"); #ifdef __APPLE__ MacOpenGLWindow* window = new MacOpenGLWindow(); #else Win32OpenGLWindow* window = new Win32OpenGLWindow(); #endif window->init(1024,768); #ifndef __APPLE__ GLenum err = glewInit(); #endif window->runMainLoop(); window->startRendering(); window->endRendering(); int maxObjectCapacity=128*1024; GLInstancingRenderer render(maxObjectCapacity); render.setCameraDistance(30); render.InitShaders(); // createSceneProgrammatically(render); render.writeTransforms(); window->runMainLoop(); physics_init(); physics_create_scene(2); create_graphics_from_physics_objects(render); window->setMouseCallback(btDefaultMouseCallback); window->setKeyboardCallback(btDefaultKeyboardCallback); while (!window->requestedExit()) { CProfileManager::Reset(); if (shootObject) { shootObject = false; btVector3 linVel;// = (m_cameraPosition-m_cameraTargetPosition).normalize()*-100; int x,y; window->getMouseCoordinates(x,y); render.getMouseDirection(&linVel[0],x,y); linVel.normalize(); linVel*=100; // btVector3 startPos; float orn[4] = {0,0,0,1}; float pos[4]; render.getCameraPosition(pos); // demo.setObjectTransform(pos,orn,0); // render.writeSingleTransformInstanceToCPU(pos,orn,0); // createScene(render, demo); // printf("numPhysicsInstances= %d\n", demo.m_numPhysicsInstances); // printf("numDynamicPhysicsInstances= %d\n", demo.m_numDynamicPhysicsInstances); // render.writeTransforms(); } // float deltaTime = 1.f/60.f; if (!pauseSimulation) physics_simulate(); // stepSimulation(deltaTime); { BT_PROFILE("sync_graphics_to_physics_objects"); sync_graphics_to_physics_objects(render); } { BT_PROFILE("render.writeTransforms"); render.writeTransforms(); } { BT_PROFILE("window->startRendering"); window->startRendering(); } { BT_PROFILE("render.RenderScene"); render.RenderScene(); } { BT_PROFILE("window->endRendering"); window->endRendering(); } { BT_PROFILE("glFinish"); //glFinish(); // glFlush(); } CProfileManager::Increment_Frame_Counter(); static bool printStats = true; if (printStats && !pauseSimulation) { static int count = 0; count--; if (count<0) { count = 100; CProfileManager::dumpAll(); //printStats = false; } else { // printf("."); } } } render.CleanupShaders(); window->exit(); delete window; return 0; }
int main(int argc, char* argv[]) { CommandLineArgs args(argc,argv); if (args.CheckCmdLineFlag("help")) { Usage(); return 0; } args.GetCmdLineArgument("enable_interop", useInterop); printf("useInterop=%d\n",useInterop); args.GetCmdLineArgument("pause_simulation", pauseSimulation); printf("pause_simulation=%d\n",pauseSimulation); args.GetCmdLineArgument("x_dim", NUM_OBJECTS_X); args.GetCmdLineArgument("y_dim", NUM_OBJECTS_Y); args.GetCmdLineArgument("z_dim", NUM_OBJECTS_Z); args.GetCmdLineArgument("x_gap", X_GAP); args.GetCmdLineArgument("y_gap", Y_GAP); args.GetCmdLineArgument("z_gap", Z_GAP); printf("x_dim=%d, y_dim=%d, z_dim=%d\n",NUM_OBJECTS_X,NUM_OBJECTS_Y,NUM_OBJECTS_Z); printf("x_gap=%f, y_gap=%f, z_gap=%f\n",X_GAP,Y_GAP,Z_GAP); args.GetCmdLineArgument("enable_static", keepStaticObjects); printf("enable_static=%d\n",keepStaticObjects); char* tmpfile = 0; args.GetCmdLineArgument("load_bulletfile", tmpfile ); if (tmpfile) fileName = tmpfile; printf("load_bulletfile=%s\n",fileName); printf("\n"); #ifdef __APPLE__ MacOpenGLWindow* window = new MacOpenGLWindow(); window->init(g_OpenGLWidth,g_OpenGLHeight); #else Win32OpenGLWindow* window = new Win32OpenGLWindow(); btgWindowConstructionInfo wci; wci.m_width = g_OpenGLWidth; wci.m_height = g_OpenGLHeight; window->createWindow(wci); window->setWindowTitle("render test"); #endif float retinaScale = 1; #ifndef __APPLE__ GLenum err = glewInit(); #else retinaScale = window->getRetinaScale(); #endif window->runMainLoop(); window->startRendering(); window->endRendering(); int maxObjectCapacity=128*1024; GLInstancingRenderer render(maxObjectCapacity); sth_stash* stash = initFont(); render.InitShaders(); createSceneProgrammatically(render); render.writeTransforms(); window->runMainLoop(); window->setMouseButtonCallback(MyMouseButtonCallback); window->setMouseMoveCallback(MyMouseMoveCallback); window->setResizeCallback(MyResizeCallback); window->setKeyboardCallback(btDefaultKeyboardCallback); window->setWheelCallback(btDefaultWheelCallback); GLPrimitiveRenderer* pprender = new GLPrimitiveRenderer(g_OpenGLWidth,g_OpenGLHeight); glUseProgram(0); //////////////////////////////// setupGUI(g_OpenGLWidth,g_OpenGLHeight,stash,retinaScale); ///////////////////////////////////// if (pCanvas) { pCanvas->SetSize(g_OpenGLWidth,g_OpenGLHeight); } class CProfileIterator* m_profileIterator; m_profileIterator = CProfileManager::Get_Iterator(); glClearColor(1,1,1,1); while (!window->requestedExit()) { CProfileManager::Reset(); { BT_PROFILE("loop"); if (shootObject) { shootObject = false; btVector3 linVel;// = (m_cameraPosition-m_cameraTargetPosition).normalize()*-100; int x,y; window->getMouseCoordinates(x,y); render.getMouseDirection(&linVel[0],x,y); linVel.normalize(); linVel*=100; // btVector3 startPos; float orn[4] = {0,0,0,1}; float pos[4]; render.getCameraPosition(pos); // demo.setObjectTransform(pos,orn,0); //render.writeSingleInstanceTransformToGPU(pos,orn,0); // createScene(render, demo); // printf("numPhysicsInstances= %d\n", demo.m_numPhysicsInstances); // printf("numDynamicPhysicsInstances= %d\n", demo.m_numDynamicPhysicsInstances); // render.writeTransforms(); } { BT_PROFILE("startRendering"); window->startRendering(); } render.RenderScene(); glFinish(); float col[4]={0,1,0,1}; // pprender->drawRect(10,50,120,60,col); // glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); //glEnable(GL_TEXTURE_2D); float x = 10; float y=220; float dx=0; if (0) { BT_PROFILE("font sth_draw_text"); sth_begin_draw(stash); sth_flush_draw(stash); sth_draw_text(stash, droidRegular,20.f, x, y, "Non-retina font rendering !@#$", &dx,g_OpenGLWidth,g_OpenGLHeight,0,1);//retinaScale); if (retinaScale!=1.f) sth_draw_text(stash, droidRegular,20.f*retinaScale, x, y+20, "Retina font rendering!@#$", &dx,g_OpenGLWidth,g_OpenGLHeight,0,retinaScale); sth_flush_draw(stash); sth_end_draw(stash); } if (1) { BT_PROFILE("gwen RenderCanvas"); if (pCanvas) { glEnable(GL_BLEND); GLint err = glGetError(); assert(err==GL_NO_ERROR); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); err = glGetError(); assert(err==GL_NO_ERROR); err = glGetError(); assert(err==GL_NO_ERROR); glDisable(GL_DEPTH_TEST); err = glGetError(); assert(err==GL_NO_ERROR); //glColor4ub(255,0,0,255); err = glGetError(); assert(err==GL_NO_ERROR); err = glGetError(); assert(err==GL_NO_ERROR); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); // saveOpenGLState(width,height);//m_glutScreenWidth,m_glutScreenHeight); err = glGetError(); assert(err==GL_NO_ERROR); err = glGetError(); assert(err==GL_NO_ERROR); glDisable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST); err = glGetError(); assert(err==GL_NO_ERROR); err = glGetError(); assert(err==GL_NO_ERROR); glEnable(GL_BLEND); err = glGetError(); assert(err==GL_NO_ERROR); pCanvas->RenderCanvas(); //restoreOpenGLState(); } } window->endRendering(); } CProfileManager::Increment_Frame_Counter(); static bool printStats = true; if (printStats && !pauseSimulation) { static int count = 0; count--; if (count<0) { count = 100; { //BT_PROFILE("processProfileData"); processProfileData(m_profileIterator,false); } //CProfileManager::dumpAll(); //printStats = false; } else { // printf("."); } } } delete pprender; // render.CleanupShaders(); #ifdef _WIN32 window->closeWindow(); #else window->exit(); #endif delete window; return 0; }