// commented out to remove unused parameter warnings in Linux void key(unsigned char key, int /*x*/, int /*y*/) { switch (key) { case ' ': bPause = !bPause; break; case '\033': case 'q': exit(0); break; case '`': bShowSliders = !bShowSliders; break; case 'p': displayMode = (ParticleRenderer::DisplayMode) ((displayMode + 1) % ParticleRenderer::PARTICLE_NUM_MODES); break; case 'c': cycleDemo = !cycleDemo; printf("Cycle Demo Parameters: %s\n", cycleDemo ? "ON" : "OFF"); break; case '[': activeDemo = (activeDemo == 0) ? numDemos - 1 : (activeDemo - 1) % numDemos; selectDemo(activeDemo); break; case ']': activeDemo = (activeDemo + 1) % numDemos; selectDemo(activeDemo); break; case 'd': displayEnabled = !displayEnabled; break; case 'O': activeParams.print(); break; case '1': reset(nbody, numBodies, NBODY_CONFIG_SHELL); break; case '2': reset(nbody, numBodies, NBODY_CONFIG_RANDOM); break; case '3': reset(nbody, numBodies, NBODY_CONFIG_EXPAND); break; } glutPostRedisplay(); }
void onButtonB(Gwen::Controls::Base* pControl) { Gwen::Controls::Label* label = (Gwen::Controls::Label*) pControl; Gwen::UnicodeString la = label->GetText();// node->GetButton()->GetName();// GetText(); Gwen::String laa = Gwen::Utility::UnicodeToString(la); //const char* ha = laa.c_str(); selectDemo(sCurrentHightlighted); saveCurrentSettings(sCurrentDemoIndex, startFileName); }
void onButtonD(Gwen::Controls::Base* pControl) { /* Gwen::Controls::Label* label = (Gwen::Controls::Label*) pControl; Gwen::UnicodeString la = label->GetText();// node->GetButton()->GetName();// GetText(); Gwen::String laa = Gwen::Utility::UnicodeToString(la); const char* ha = laa.c_str(); */ // printf("onKeyReturn ! \n"); selectDemo(sCurrentHightlighted); saveCurrentDemoEntry(sCurrentDemoIndex, startFileName); }
void MyComboBoxCallback(int comboId, const char* item) { //printf("comboId = %d, item = %s\n",comboId, item); if (comboId==DEMO_SELECTION_COMBOBOX) { //find selected item for (int i=0;i<allNames.size();i++) { if (strcmp(item,allNames[i])==0) { selectDemo(i); saveCurrentSettings(sCurrentDemoIndex,startFileName); break; } } } }
// commented out to remove unused parameter warnings in Linux void key(unsigned char key, int /*x*/, int /*y*/) { switch (key) { case ' ': bPause = !bPause; break; case 27: // escape case 'q': case 'Q': cudaDeviceReset(); exit(EXIT_SUCCESS); break; case 13: // return if (bSupportDouble) { if (fp64) { switchDemoPrecision<float, double>(); } else { switchDemoPrecision<double, float>(); } printf("> %s precision floating point simulation\n", fp64 ? "Double" : "Single"); } break; case '`': bShowSliders = !bShowSliders; break; case 'g': case 'G': bDispInteractions = !bDispInteractions; break; case 'p': case 'P': displayMode = (ParticleRenderer::DisplayMode) ((displayMode + 1) % ParticleRenderer::PARTICLE_NUM_MODES); break; case 'c': case 'C': cycleDemo = !cycleDemo; printf("Cycle Demo Parameters: %s\n", cycleDemo ? "ON" : "OFF"); break; case '[': activeDemo = (activeDemo == 0) ? numDemos - 1 : (activeDemo - 1) % numDemos; selectDemo(activeDemo); break; case ']': activeDemo = (activeDemo + 1) % numDemos; selectDemo(activeDemo); break; case 'd': case 'D': displayEnabled = !displayEnabled; break; case 'o': case 'O': activeParams.print(); break; case '1': if (fp64) { NBodyDemo<double>::reset(numBodies, NBODY_CONFIG_SHELL); } else { NBodyDemo<float>::reset(numBodies, NBODY_CONFIG_SHELL); } break; case '2': if (fp64) { NBodyDemo<double>::reset(numBodies, NBODY_CONFIG_RANDOM); } else { NBodyDemo<float>::reset(numBodies, NBODY_CONFIG_RANDOM); } break; case '3': if (fp64) { NBodyDemo<double>::reset(numBodies, NBODY_CONFIG_EXPAND); } else { NBodyDemo<float>::reset(numBodies, NBODY_CONFIG_EXPAND); } break; } glutPostRedisplay(); }
void display() { static double gflops = 0; static double ifps = 0; static double interactionsPerSecond = 0; // update the simulation if (!bPause) { if (cycleDemo && (sdkGetTimerValue(&demoTimer) > demoTime)) { activeDemo = (activeDemo + 1) % numDemos; selectDemo(activeDemo); } updateSimulation(); if (!useCpu) { cudaEventRecord(hostMemSyncEvent, 0); // insert an event to wait on before rendering } } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (displayEnabled) { // view transform { glMatrixMode(GL_MODELVIEW); glLoadIdentity(); for (int c = 0; c < 3; ++c) { camera_trans_lag[c] += (camera_trans[c] - camera_trans_lag[c]) * inertia; camera_rot_lag[c] += (camera_rot[c] - camera_rot_lag[c]) * inertia; } glTranslatef(camera_trans_lag[0], camera_trans_lag[1], camera_trans_lag[2]); glRotatef(camera_rot_lag[0], 1.0, 0.0, 0.0); glRotatef(camera_rot_lag[1], 0.0, 1.0, 0.0); } displayNBodySystem(); // display user interface if (bShowSliders) { glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); // invert color glEnable(GL_BLEND); paramlist->Render(0, 0); glDisable(GL_BLEND); } if (bFullscreen) { beginWinCoords(); char msg0[256], msg1[256], msg2[256]; if (bDispInteractions) { sprintf(msg1, "%0.2f billion interactions per second", interactionsPerSecond); } else { sprintf(msg1, "%0.2f GFLOP/s", gflops); } sprintf(msg0, "%s", deviceName); sprintf(msg2, "%0.2f FPS [%s | %d bodies]", ifps, fp64 ? "double precision" : "single precision", numBodies); glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); // invert color glEnable(GL_BLEND); glColor3f(0.46f, 0.73f, 0.0f); glPrint(80, glutGet(GLUT_WINDOW_HEIGHT) - 122, msg0, GLUT_BITMAP_TIMES_ROMAN_24); glColor3f(1.0f, 1.0f, 1.0f); glPrint(80, glutGet(GLUT_WINDOW_HEIGHT) - 96, msg2, GLUT_BITMAP_TIMES_ROMAN_24); glColor3f(1.0f, 1.0f, 1.0f); glPrint(80, glutGet(GLUT_WINDOW_HEIGHT) - 70, msg1, GLUT_BITMAP_TIMES_ROMAN_24); glDisable(GL_BLEND); endWinCoords(); } glutSwapBuffers(); } fpsCount++; // this displays the frame rate updated every second (independent of frame rate) if (fpsCount >= fpsLimit) { char fps[256]; float milliseconds = 1; // stop timer if (useCpu) { milliseconds = sdkGetTimerValue(&timer); sdkResetTimer(&timer); } else { checkCudaErrors(cudaEventRecord(stopEvent, 0)); checkCudaErrors(cudaEventSynchronize(stopEvent)); checkCudaErrors(cudaEventElapsedTime(&milliseconds, startEvent, stopEvent)); } milliseconds /= (float)fpsCount; computePerfStats(interactionsPerSecond, gflops, milliseconds, 1); ifps = 1.f / (milliseconds / 1000.f); sprintf(fps, "CUDA N-Body (%d bodies): " "%0.1f fps | %0.1f BIPS | %0.1f GFLOP/s | %s", numBodies, ifps, interactionsPerSecond, gflops, fp64 ? "double precision" : "single precision"); glutSetWindowTitle(fps); fpsCount = 0; fpsLimit = (ifps > 1.f) ? (int)ifps : 1; if (bPause) { fpsLimit = 0; } // restart timer if (!useCpu) { checkCudaErrors(cudaEventRecord(startEvent, 0)); } } glutReportErrors(); }
bool OpenGLExampleBrowser::init(int argc, char* argv[]) { b3CommandLineArgs args(argc,argv); loadCurrentSettings(startFileName, args); if (args.CheckCmdLineFlag("nogui")) { renderGrid = false; renderGui = false; } if (args.CheckCmdLineFlag("tracing")) { b3ChromeUtilsStartTimings(); } args.GetCmdLineArgument("fixed_timestep",gFixedTimeStep); args.GetCmdLineArgument("png_skip_frames", gPngSkipFrames); ///The OpenCL rigid body pipeline is experimental and ///most OpenCL drivers and OpenCL compilers have issues with our kernels. ///If you have a high-end desktop GPU such as AMD 7970 or better, or NVIDIA GTX 680 with up-to-date drivers ///you could give it a try ///Note that several old OpenCL physics examples still have to be ported over to this new Example Browser if (args.CheckCmdLineFlag("enable_experimental_opencl")) { enable_experimental_opencl = true; gAllExamples->initOpenCLExampleEntries(); } if (args.CheckCmdLineFlag("disable_retina")) { gAllowRetina = false; } int width = 1024; int height=768; #ifndef NO_OPENGL3 SimpleOpenGL3App* simpleApp=0; sUseOpenGL2 =args.CheckCmdLineFlag("opengl2"); #else sUseOpenGL2 = true; #endif const char* appTitle = "Bullet Physics ExampleBrowser"; #if defined (_DEBUG) || defined (DEBUG) const char* optMode = "Debug build (slow)"; #else const char* optMode = "Release build"; #endif if (sUseOpenGL2 ) { char title[1024]; sprintf(title,"%s using limited OpenGL2 fallback. %s", appTitle,optMode); s_app = new SimpleOpenGL2App(title,width,height); s_app->m_renderer = new SimpleOpenGL2Renderer(width,height); } #ifndef NO_OPENGL3 else { char title[1024]; sprintf(title,"%s using OpenGL3+. %s", appTitle,optMode); simpleApp = new SimpleOpenGL3App(title,width,height, gAllowRetina); s_app = simpleApp; } #endif m_internalData->m_app = s_app; char* gVideoFileName = 0; args.GetCmdLineArgument("mp4",gVideoFileName); #ifndef NO_OPENGL3 if (gVideoFileName) simpleApp->dumpFramesToVideo(gVideoFileName); #endif s_instancingRenderer = s_app->m_renderer; s_window = s_app->m_window; width = s_window->getWidth(); height = s_window->getHeight(); prevMouseMoveCallback = s_window->getMouseMoveCallback(); s_window->setMouseMoveCallback(MyMouseMoveCallback); prevMouseButtonCallback = s_window->getMouseButtonCallback(); s_window->setMouseButtonCallback(MyMouseButtonCallback); prevKeyboardCallback = s_window->getKeyboardCallback(); s_window->setKeyboardCallback(MyKeyboardCallback); s_app->m_renderer->getActiveCamera()->setCameraDistance(13); s_app->m_renderer->getActiveCamera()->setCameraPitch(0); s_app->m_renderer->getActiveCamera()->setCameraTargetPosition(0,0,0); float mouseMoveMult= s_app->getMouseMoveMultiplier(); if (args.GetCmdLineArgument("mouse_move_multiplier", mouseMoveMult)) { s_app->setMouseMoveMultiplier(mouseMoveMult); } float mouseWheelMult= s_app->getMouseWheelMultiplier(); if (args.GetCmdLineArgument("mouse_wheel_multiplier",mouseWheelMult)) { s_app->setMouseWheelMultiplier(mouseWheelMult); } args.GetCmdLineArgument("shared_memory_key", gSharedMemoryKey); float red,green,blue; s_app->getBackgroundColor(&red,&green,&blue); args.GetCmdLineArgument("background_color_red",red); args.GetCmdLineArgument("background_color_green",green); args.GetCmdLineArgument("background_color_blue",blue); s_app->setBackgroundColor(red,green,blue); b3SetCustomWarningMessageFunc(MyGuiPrintf); b3SetCustomPrintfFunc(MyGuiPrintf); b3SetCustomErrorMessageFunc(MyStatusBarError); assert(glGetError()==GL_NO_ERROR); { GL3TexLoader* myTexLoader = new GL3TexLoader; m_internalData->m_myTexLoader = myTexLoader; if (sUseOpenGL2) { m_internalData->m_gwenRenderer = new Gwen::Renderer::OpenGL_DebugFont(); } #ifndef NO_OPENGL3 else { sth_stash* fontstash = simpleApp->getFontStash(); m_internalData->m_gwenRenderer = new GwenOpenGL3CoreRenderer(simpleApp->m_primRenderer, fontstash, width, height, s_window->getRetinaScale(), myTexLoader); } #endif gui2 = new GwenUserInterface; m_internalData->m_gui = gui2; m_internalData->m_myTexLoader = myTexLoader; gui2->init(width, height, m_internalData->m_gwenRenderer, s_window->getRetinaScale()); } //gui = 0;// new GwenUserInterface; GL3TexLoader* myTexLoader = m_internalData->m_myTexLoader; // = myTexLoader; // if (gui2) { // gui->getInternalData()->m_explorerPage Gwen::Controls::TreeControl* tree = gui2->getInternalData()->m_explorerTreeCtrl; //gui->getInternalData()->pRenderer->setTextureLoader(myTexLoader); #ifndef BT_NO_PROFILE s_profWindow= setupProfileWindow(gui2->getInternalData()); m_internalData->m_profWindow = s_profWindow; profileWindowSetVisible(s_profWindow,false); #endif //BT_NO_PROFILE gui2->setFocus(); s_parameterInterface = s_app->m_parameterInterface = new GwenParameterInterface(gui2->getInternalData()); s_app->m_2dCanvasInterface = new QuickCanvas(myTexLoader); ///add some demos to the gAllExamples int numDemos = gAllExamples->getNumRegisteredExamples(); //char nodeText[1024]; //int curDemo = 0; int selectedDemo = 0; Gwen::Controls::TreeNode* curNode = tree; m_internalData->m_handler2 = new MyMenuItemHander(-1); char* demoNameFromCommandOption = 0; args.GetCmdLineArgument("start_demo_name", demoNameFromCommandOption); if (demoNameFromCommandOption) { selectedDemo = -1; } tree->onReturnKeyDown.Add(m_internalData->m_handler2, &MyMenuItemHander::onButtonD); int firstAvailableDemoIndex=-1; Gwen::Controls::TreeNode* firstNode=0; for (int d = 0; d<numDemos; d++) { // sprintf(nodeText, "Node %d", i); Gwen::UnicodeString nodeUText = Gwen::Utility::StringToUnicode(gAllExamples->getExampleName(d)); if (gAllExamples->getExampleCreateFunc(d))//was test for gAllExamples[d].m_menuLevel==1 { Gwen::Controls::TreeNode* pNode = curNode->AddNode(nodeUText); if (firstAvailableDemoIndex<0) { firstAvailableDemoIndex = d; firstNode = pNode; } if (d == selectedDemo) { firstAvailableDemoIndex = d; firstNode = pNode; //pNode->SetSelected(true); //tree->ExpandAll(); // tree->ForceUpdateScrollBars(); //tree->OnKeyLeft(true); // tree->OnKeyRight(true); //tree->ExpandAll(); // selectDemo(d); } if (demoNameFromCommandOption ) { const char* demoName = gAllExamples->getExampleName(d); int res = strcmp(demoName, demoNameFromCommandOption); if (res==0) { firstAvailableDemoIndex = d; firstNode = pNode; } } #if 1 MyMenuItemHander* handler = new MyMenuItemHander(d); m_internalData->m_handlers.push_back(handler); pNode->onNamePress.Add(handler, &MyMenuItemHander::onButtonA); pNode->GetButton()->onDoubleClick.Add(handler, &MyMenuItemHander::onButtonB); pNode->GetButton()->onDown.Add(handler, &MyMenuItemHander::onButtonC); pNode->onSelect.Add(handler, &MyMenuItemHander::onButtonE); pNode->onReturnKeyDown.Add(handler, &MyMenuItemHander::onButtonG); pNode->onSelectChange.Add(handler, &MyMenuItemHander::onButtonF); #endif // pNode->onKeyReturn.Add(handler, &MyMenuItemHander::onButtonD); // pNode->GetButton()->onKeyboardReturn.Add(handler, &MyMenuItemHander::onButtonD); // pNode->onNamePress.Add(handler, &MyMenuItemHander::onButtonD); // pNode->onKeyboardPressed.Add(handler, &MyMenuItemHander::onButtonD); // pNode->OnKeyPress } else { curNode = tree->AddNode(nodeUText); m_internalData->m_nodes.push_back(curNode); } } if (sCurrentDemo==0) { if (firstAvailableDemoIndex>=0) { firstNode->SetSelected(true); while (firstNode != tree) { firstNode->ExpandAll(); firstNode = (Gwen::Controls::TreeNode*)firstNode->GetParent(); } selectDemo(firstAvailableDemoIndex); } } free(demoNameFromCommandOption); demoNameFromCommandOption = 0; btAssert(sCurrentDemo!=0); if (sCurrentDemo==0) { printf("Error, no demo/example\n"); exit(0); } gui2->registerFileOpenCallback(fileOpenCallback); gui2->registerQuitCallback(quitCallback); } return true; }
void display() { // update the simulation if (!bPause) { if (cycleDemo && (cutGetTimerValue(demoTimer) > demoTime)) { activeDemo = (activeDemo + 1) % numDemos; selectDemo(activeDemo); } nbody->update(activeParams.m_timestep); renderer->setPBO(nbody->getCurrentReadBuffer(), nbody->getNumBodies()); } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (displayEnabled) { // view transform glMatrixMode(GL_MODELVIEW); glLoadIdentity(); for (int c = 0; c < 3; ++c) { camera_trans_lag[c] += (camera_trans[c] - camera_trans_lag[c]) * inertia; camera_rot_lag[c] += (camera_rot[c] - camera_rot_lag[c]) * inertia; } glTranslatef(camera_trans_lag[0], camera_trans_lag[1], camera_trans_lag[2]); glRotatef(camera_rot_lag[0], 1.0, 0.0, 0.0); glRotatef(camera_rot_lag[1], 0.0, 1.0, 0.0); renderer->setSpriteSize(activeParams.m_pointSize); renderer->display(displayMode); // display user interface. if (bShowSliders) { glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); // invert color glEnable(GL_BLEND); paramlist->Render(0, 0); glDisable(GL_BLEND); } glutSwapBuffers(); } fpsCount++; // this displays the frame rate updated every second (independent of frame rate) if (fpsCount >= fpsLimit) { char fps[256]; float milliseconds = 0; // stop timer /* cutilSafeCall(cudaEventRecord(stopEvent, 0)); cutilSafeCall(cudaEventSynchronize(stopEvent)); cutilSafeCall( cudaEventElapsedTime(&milliseconds, startEvent, stopEvent)); */ gettimeofday(&stopTime, 0); milliseconds = (float)(stopTime.tv_sec - startTime.tv_sec) * 1000.0f + (float)(stopTime.tv_usec - startTime.tv_usec) / 1000.0f; milliseconds /= (float)fpsCount; double interactionsPerSecond = 0; double gflops = 0; computePerfStats(interactionsPerSecond, gflops, milliseconds, 1); float ifps = 1.f / (milliseconds / 1000.f); sprintf(fps, "CUDA N-Body (%d bodies): " "%0.1f fps | %0.1f BIPS | %0.1f GFLOP/s", numBodies, ifps, interactionsPerSecond, gflops); glutSetWindowTitle(fps); fpsCount = 0; fpsLimit = (ifps > 1.f) ? (int)ifps : 1; if (bPause) fpsLimit = 0; // restart timer //cutilSafeCall(cudaEventRecord(startEvent, 0)); gettimeofday(&startTime, 0); } glutReportErrors(); }
int main(int argc, char* argv[]) { shadowMapWorldSize = 25; b3Clock clock; float dt = 1./120.f; int width = 1024; int height=768; app = new SimpleOpenGL3App("AllBullet2Demos",width,height); app->m_instancingRenderer->setCameraDistance(13); app->m_instancingRenderer->setCameraPitch(0); app->m_instancingRenderer->setCameraTargetPosition(b3MakeVector3(0,0,0)); app->m_window->setMouseMoveCallback(MyMouseMoveCallback); app->m_window->setMouseButtonCallback(MyMouseButtonCallback); app->m_window->setKeyboardCallback(MyKeyboardCallback); GLint err = glGetError(); assert(err==GL_NO_ERROR); sth_stash* fontstash=app->getFontStash(); gui = new GwenUserInterface; gui->init(width,height,fontstash,app->m_window->getRetinaScale()); // gui->getInternalData()->m_explorerPage Gwen::Controls::TreeControl* tree = gui->getInternalData()->m_explorerTreeCtrl; app->m_parameterInterface = new GwenParameterInterface(gui->getInternalData()); //gui->getInternalData()->m_demoPage; int numDemos = sizeof(allDemos)/sizeof(BulletDemoEntry); char nodeText[1024]; int curDemo = 0; int selectedDemo = loadCurrentDemoEntry(startFileName); Gwen::Controls::TreeNode* curNode = tree; MyMenuItemHander* handler2 = new MyMenuItemHander(-1); tree->onReturnKeyDown.Add(handler2, &MyMenuItemHander::onButtonD); for (int d = 0; d<numDemos; d++) { // sprintf(nodeText, "Node %d", i); Gwen::UnicodeString nodeUText = Gwen::Utility::StringToUnicode(allDemos[d].m_name); if (allDemos[d].m_menuLevel==1) { Gwen::Controls::TreeNode* pNode = curNode->AddNode(nodeUText); if (d == selectedDemo) { pNode->SetSelected(true); tree->ExpandAll(); selectDemo(d); } MyMenuItemHander* handler = new MyMenuItemHander(d); pNode->onNamePress.Add(handler, &MyMenuItemHander::onButtonA); pNode->GetButton()->onDoubleClick.Add(handler, &MyMenuItemHander::onButtonB); pNode->GetButton()->onDown.Add(handler, &MyMenuItemHander::onButtonC); pNode->onSelect.Add(handler, &MyMenuItemHander::onButtonE); pNode->onReturnKeyDown.Add(handler, &MyMenuItemHander::onButtonG); pNode->onSelectChange.Add(handler, &MyMenuItemHander::onButtonF); // pNode->onKeyReturn.Add(handler, &MyMenuItemHander::onButtonD); // pNode->GetButton()->onKeyboardReturn.Add(handler, &MyMenuItemHander::onButtonD); // pNode->onNamePress.Add(handler, &MyMenuItemHander::onButtonD); // pNode->onKeyboardPressed.Add(handler, &MyMenuItemHander::onButtonD); // pNode->OnKeyPress } else { curNode = tree->AddNode(nodeUText); } } /* for (int i=0;i<numDemos;i++) { allNames.push_back(allDemos[i].m_name); } */ //selectDemo(loadCurrentDemoEntry(startFileName)); /* gui->registerComboBox(DEMO_SELECTION_COMBOBOX,allNames.size(),&allNames[0],sCurrentDemoIndex); //const char* names2[] = {"comboF", "comboG","comboH"}; //gui->registerComboBox(2,3,&names2[0],0); gui->setComboBoxCallback(MyComboBoxCallback); */ unsigned long int prevTimeInMicroseconds = clock.getTimeMicroseconds(); do { GLint err = glGetError(); assert(err==GL_NO_ERROR); app->m_instancingRenderer->init(); DrawGridData dg; dg.upAxis = app->getUpAxis(); app->m_instancingRenderer->updateCamera(dg.upAxis); app->drawGrid(dg); static int frameCount = 0; frameCount++; if (0) { char bla[1024]; sprintf(bla,"Simple test frame %d", frameCount); app->drawText(bla,10,10); } if (sCurrentDemo) { if (!pauseSimulation) { unsigned long int curTimeInMicroseconds = clock.getTimeMicroseconds(); unsigned long int diff = curTimeInMicroseconds-prevTimeInMicroseconds; float deltaTimeInSeconds = (diff)*1.e-6; //printf("---------------------------------------------------\n"); //printf("Framecount = %d\n",frameCount); sCurrentDemo->stepSimulation(deltaTimeInSeconds);//1./60.f); prevTimeInMicroseconds = curTimeInMicroseconds; } sCurrentDemo->renderScene(); sCurrentDemo->physicsDebugDraw(); } static int toggle = 1; if (1) { gui->draw(app->m_instancingRenderer->getScreenWidth(),app->m_instancingRenderer->getScreenHeight()); } toggle=1-toggle; app->m_parameterInterface->syncParameters(); app->swapBuffer(); } while (!app->m_window->requestedExit()); // selectDemo(0); delete gui; delete app; return 0; }
int main(int argc, char* argv[]) { sOpenGLVerbose = false; float dt = 1./120.f; int width = 1024; int height=768; app = new SimpleOpenGL3App("AllBullet2Demos",width,height); app->m_instancingRenderer->setCameraDistance(13); app->m_instancingRenderer->setCameraPitch(0); app->m_instancingRenderer->setCameraTargetPosition(b3MakeVector3(0,0,0)); app->m_window->setMouseMoveCallback(MyMouseMoveCallback); app->m_window->setMouseButtonCallback(MyMouseButtonCallback); app->m_window->setKeyboardCallback(MyKeyboardCallback); GLint err = glGetError(); assert(err==GL_NO_ERROR); sth_stash* fontstash=app->getFontStash(); gui = new GwenUserInterface; gui->init(width,height,fontstash,app->m_window->getRetinaScale()); int numDemos = sizeof(allDemos)/sizeof(BulletDemoEntry); for (int i=0;i<numDemos;i++) { allNames.push_back(allDemos[i].m_name); } selectDemo(loadCurrentDemoEntry(startFileName)); gui->registerComboBox(DEMO_SELECTION_COMBOBOX,allNames.size(),&allNames[0],sCurrentDemoIndex); //const char* names2[] = {"comboF", "comboG","comboH"}; //gui->registerComboBox(2,3,&names2[0],0); gui->setComboBoxCallback(MyComboBoxCallback); do { GLint err = glGetError(); assert(err==GL_NO_ERROR); app->m_instancingRenderer->init(); app->m_instancingRenderer->updateCamera(); app->drawGrid(); if (0) { char bla[1024]; static int frameCount = 0; frameCount++; sprintf(bla,"Simple test frame %d", frameCount); app->drawText(bla,10,10); } if (sCurrentDemo) { if (!pauseSimulation) sCurrentDemo->stepSimulation(1./60.f); sCurrentDemo->renderScene(); } static int toggle = 1; if (1) { gui->draw(app->m_instancingRenderer->getScreenWidth(),app->m_instancingRenderer->getScreenHeight()); } toggle=1-toggle; app->swapBuffer(); } while (!app->m_window->requestedExit()); selectDemo(0); delete gui; delete app; return 0; }
int main(int argc, char* argv[]) { shadowMapWorldSize = 25; b3Clock clock; //float dt = 1./120.f; int width = 1024; int height=768; // wci.m_resizeCallback = MyResizeCallback; SimpleOpenGL3App* simpleApp=0; bool useOpenGL2=false; if (useOpenGL2) { app = new SimpleOpenGL2App("AllBullet2Demos",width,height); app->m_renderer = new SimpleOpenGL2Renderer(width,height); } else { simpleApp = new SimpleOpenGL3App("AllBullet2Demos",width,height); app = simpleApp; } s_instancingRenderer = app->m_renderer; s_window = app->m_window; prevMouseMoveCallback = s_window->getMouseMoveCallback(); s_window->setMouseMoveCallback(MyMouseMoveCallback); prevMouseButtonCallback = s_window->getMouseButtonCallback(); s_window->setMouseButtonCallback(MyMouseButtonCallback); prevKeyboardCallback = s_window->getKeyboardCallback(); s_window->setKeyboardCallback(MyKeyboardCallback); app->m_renderer->setCameraDistance(13); app->m_renderer->setCameraPitch(0); app->m_renderer->setCameraTargetPosition(0,0,0); b3SetCustomWarningMessageFunc(MyStatusBarWarning); b3SetCustomPrintfFunc(MyStatusBarPrintf); /* SimpleOpenGL3App* app = new SimpleOpenGL3App("AllBullet2Demos",width,height); s_instancingRenderer->setCameraDistance(13); s_instancingRenderer->setCameraPitch(0); s_instancingRenderer->setCameraTargetPosition(0,0,0); s_window->setMouseMoveCallback(MyMouseMoveCallback); s_window->setMouseButtonCallback(MyMouseButtonCallback); s_window->setKeyboardCallback(MyKeyboardCallback); */ assert(glGetError()==GL_NO_ERROR); gui = new GwenUserInterface; GL3TexLoader* myTexLoader = new GL3TexLoader; Gwen::Renderer::Base* gwenRenderer = 0; if (useOpenGL2) { gwenRenderer = new Gwen::Renderer::OpenGL_DebugFont(); } else { sth_stash* fontstash=simpleApp->getFontStash(); gwenRenderer = new GwenOpenGL3CoreRenderer(simpleApp->m_primRenderer,fontstash,width,height,s_window->getRetinaScale(),myTexLoader); } // gui->init(width,height,gwenRenderer,s_window->getRetinaScale()); // gui->getInternalData()->m_explorerPage Gwen::Controls::TreeControl* tree = gui->getInternalData()->m_explorerTreeCtrl; //gui->getInternalData()->pRenderer->setTextureLoader(myTexLoader); MyProfileWindow* profWindow = setupProfileWindow(gui->getInternalData()); profileWindowSetVisible(profWindow,false); gui->setFocus(); #if 0 { MyGraphInput input(gui->getInternalData()); input.m_width=300; input.m_height=300; input.m_xPos = 0; input.m_yPos = height-input.m_height; input.m_name="Test Graph1"; input.m_texName = "graph1"; GraphingTexture* gt = new GraphingTexture; gt->create(256,256); int texId = gt->getTextureId(); myTexLoader->m_hashMap.insert("graph1", texId); //MyGraphWindow* gw = setupTextureWindow(input); } if (1) { MyGraphInput input(gui->getInternalData()); input.m_width=300; input.m_height=300; input.m_xPos = width-input.m_width; input.m_yPos = height-input.m_height; input.m_name="Test Graph2"; input.m_texName = "graph2"; GraphingTexture* gt = new GraphingTexture; int texWidth = 512; int texHeight = 512; gt->create(texWidth,texHeight); for (int i=0;i<texWidth;i++) { for (int j=0;j<texHeight;j++) { gt->setPixel(i,j,0,0,0,255); } } gt->uploadImageData(); int texId = gt->getTextureId(); input.m_xPos = width-input.m_width; myTexLoader->m_hashMap.insert("graph2", texId); //MyGraphWindow* gw = setupTextureWindow(input); } //destroyTextureWindow(gw); #endif s_parameterInterface = app->m_parameterInterface = new GwenParameterInterface(gui->getInternalData()); app->m_2dCanvasInterface = new QuickCanvas(myTexLoader); //gui->getInternalData()->m_demoPage; int numDemos = sizeof(allDemos)/sizeof(BulletDemoEntry); //char nodeText[1024]; //int curDemo = 0; int selectedDemo = loadCurrentDemoEntry(startFileName); Gwen::Controls::TreeNode* curNode = tree; MyMenuItemHander* handler2 = new MyMenuItemHander(-1); tree->onReturnKeyDown.Add(handler2, &MyMenuItemHander::onButtonD); for (int d = 0; d<numDemos; d++) { // sprintf(nodeText, "Node %d", i); Gwen::UnicodeString nodeUText = Gwen::Utility::StringToUnicode(allDemos[d].m_name); if (allDemos[d].m_menuLevel==1) { Gwen::Controls::TreeNode* pNode = curNode->AddNode(nodeUText); if (d == selectedDemo) { pNode->SetSelected(true); tree->ExpandAll(); selectDemo(d); } MyMenuItemHander* handler = new MyMenuItemHander(d); pNode->onNamePress.Add(handler, &MyMenuItemHander::onButtonA); pNode->GetButton()->onDoubleClick.Add(handler, &MyMenuItemHander::onButtonB); pNode->GetButton()->onDown.Add(handler, &MyMenuItemHander::onButtonC); pNode->onSelect.Add(handler, &MyMenuItemHander::onButtonE); pNode->onReturnKeyDown.Add(handler, &MyMenuItemHander::onButtonG); pNode->onSelectChange.Add(handler, &MyMenuItemHander::onButtonF); // pNode->onKeyReturn.Add(handler, &MyMenuItemHander::onButtonD); // pNode->GetButton()->onKeyboardReturn.Add(handler, &MyMenuItemHander::onButtonD); // pNode->onNamePress.Add(handler, &MyMenuItemHander::onButtonD); // pNode->onKeyboardPressed.Add(handler, &MyMenuItemHander::onButtonD); // pNode->OnKeyPress } else { curNode = tree->AddNode(nodeUText); } } /* for (int i=0;i<numDemos;i++) { allNames.push_back(allDemos[i].m_name); } */ //selectDemo(loadCurrentDemoEntry(startFileName)); /* gui->registerComboBox(DEMO_SELECTION_COMBOBOX,allNames.size(),&allNames[0],sCurrentDemoIndex); //const char* names2[] = {"comboF", "comboG","comboH"}; //gui->registerComboBox(2,3,&names2[0],0); gui->setComboBoxCallback(MyComboBoxCallback); */ unsigned long int prevTimeInMicroseconds = clock.getTimeMicroseconds(); gui->registerFileOpenCallback(fileOpenCallback); do { assert(glGetError()==GL_NO_ERROR); s_instancingRenderer->init(); DrawGridData dg; dg.upAxis = app->getUpAxis(); { BT_PROFILE("Update Camera"); s_instancingRenderer->updateCamera(dg.upAxis); } if (renderGrid) { BT_PROFILE("Draw Grid"); app->drawGrid(dg); } static int frameCount = 0; frameCount++; if (0) { BT_PROFILE("Draw frame counter"); char bla[1024]; sprintf(bla,"Frame %d", frameCount); app->drawText(bla,10,10); } if (sCurrentDemo) { if (!pauseSimulation) { unsigned long int curTimeInMicroseconds = clock.getTimeMicroseconds(); unsigned long int diff = curTimeInMicroseconds-prevTimeInMicroseconds; float deltaTimeInSeconds = (diff)*1.e-6; //printf("---------------------------------------------------\n"); //printf("Framecount = %d\n",frameCount); sCurrentDemo->stepSimulation(deltaTimeInSeconds);//1./60.f); prevTimeInMicroseconds = curTimeInMicroseconds; } if (renderVisualGeometry) { if (visualWireframe) { glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); } BT_PROFILE("Render Scene"); sCurrentDemo->renderScene(); } { glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); sCurrentDemo->physicsDebugDraw(gDebugDrawFlags); } } static int toggle = 1; if (1) { if (!pauseSimulation) processProfileData(profWindow,false); { if (useOpenGL2) { saveOpenGLState(width,height); } BT_PROFILE("Draw Gwen GUI"); gui->draw(s_instancingRenderer->getScreenWidth(),s_instancingRenderer->getScreenHeight()); if (useOpenGL2) { restoreOpenGLState(); } } } toggle=1-toggle; { BT_PROFILE("Sync Parameters"); s_parameterInterface->syncParameters(); } { BT_PROFILE("Swap Buffers"); app->swapBuffer(); } gui->forceUpdateScrollBars(); } while (!s_window->requestedExit()); // selectDemo(0); delete gui; delete app; return 0; }