void LLTextureView::draw() { if (!mFreezeView) { // LLViewerObject *objectp; // S32 te; for_each(mTextureBars.begin(), mTextureBars.end(), KillView()); mTextureBars.clear(); if (mGLTexMemBar) { removeChild(mGLTexMemBar); mGLTexMemBar->die(); mGLTexMemBar = 0; } if (mAvatarTexBar) { removeChild(mAvatarTexBar); mAvatarTexBar->die(); mAvatarTexBar = 0; } typedef std::multiset<decode_pair_t, compare_decode_pair > display_list_t; display_list_t display_image_list; if (mPrintList) { llinfos << "ID\tMEM\tBOOST\tPRI\tWIDTH\tHEIGHT\tDISCARD" << llendl; } for (LLViewerTextureList::image_priority_list_t::iterator iter = gTextureList.mImageList.begin(); iter != gTextureList.mImageList.end(); ) { LLPointer<LLViewerFetchedTexture> imagep = *iter++; if(!imagep->hasFetcher()) { continue ; } S32 cur_discard = imagep->getDiscardLevel(); S32 desired_discard = imagep->mDesiredDiscardLevel; if (mPrintList) { S32 tex_mem = imagep->hasGLTexture() ? imagep->getTextureMemory() : 0 ; llinfos << imagep->getID() << "\t" << tex_mem << "\t" << imagep->getBoostLevel() << "\t" << imagep->getDecodePriority() << "\t" << imagep->getWidth() << "\t" << imagep->getHeight() << "\t" << cur_discard << llendl; } if (imagep->getID() == LLAppViewer::getTextureFetch()->mDebugID) { static S32 debug_count = 0; ++debug_count; // for breakpoints } F32 pri; if (mOrderFetch) { pri = ((F32)imagep->mFetchPriority)/256.f; } else { pri = imagep->getDecodePriority(); } pri = llclamp(pri, 0.0f, HIGH_PRIORITY-1.f); if (sDebugImages.find(imagep) != sDebugImages.end()) { pri += 4*HIGH_PRIORITY; } if (!mOrderFetch) { if (pri < HIGH_PRIORITY && LLSelectMgr::getInstance()) { struct f : public LLSelectedTEFunctor { LLViewerFetchedTexture* mImage; f(LLViewerFetchedTexture* image) : mImage(image) {} virtual bool apply(LLViewerObject* object, S32 te) { return (mImage == object->getTEImage(te)); } } func(imagep); const bool firstonly = true; bool match = LLSelectMgr::getInstance()->getSelection()->applyToTEs(&func, firstonly); if (match) { pri += 3*HIGH_PRIORITY; } } if (pri < HIGH_PRIORITY && (cur_discard< 0 || desired_discard < cur_discard)) { LLSelectNode* hover_node = LLSelectMgr::instance().getHoverNode(); if (hover_node) { LLViewerObject *objectp = hover_node->getObject(); if (objectp) { S32 tex_count = objectp->getNumTEs(); for (S32 i = 0; i < tex_count; i++) { if (imagep == objectp->getTEImage(i)) { pri += 2*HIGH_PRIORITY; break; } } } } } if (pri > 0.f && pri < HIGH_PRIORITY) { if (imagep->mLastPacketTimer.getElapsedTimeF32() < 1.f || imagep->mFetchDeltaTime < 0.25f) { pri += 1*HIGH_PRIORITY; } } } if (pri > 0.0f) { display_image_list.insert(std::make_pair(pri, imagep)); } } if (mPrintList) { mPrintList = FALSE; } static S32 max_count = 50; S32 count = 0; mNumTextureBars = 0 ; for (display_list_t::iterator iter = display_image_list.begin(); iter != display_image_list.end(); iter++) { LLViewerFetchedTexture* imagep = iter->second; S32 hilite = 0; F32 pri = iter->first; if (pri >= 1 * HIGH_PRIORITY) { hilite = (S32)((pri+1) / HIGH_PRIORITY) - 1; } if ((hilite || count < max_count-10) && (count < max_count)) { if (addBar(imagep, hilite)) { count++; } } } if (mOrderFetch) sortChildren(LLTextureBar::sort_fetch()); else sortChildren(LLTextureBar::sort()); LLGLTexMemBar::Params tmbp; LLRect tmbr; tmbp.name("gl texmem bar"); tmbp.rect(tmbr); tmbp.follows.flags = FOLLOWS_LEFT|FOLLOWS_TOP; tmbp.texture_view(this); mGLTexMemBar = LLUICtrlFactory::create<LLGLTexMemBar>(tmbp); addChild(mGLTexMemBar); sendChildToFront(mGLTexMemBar); LLAvatarTexBar::Params atbp; LLRect atbr; atbp.name("gl avatartex bar"); atbp.texture_view(this); atbp.rect(atbr); mAvatarTexBar = LLUICtrlFactory::create<LLAvatarTexBar>(atbp); addChild(mAvatarTexBar); sendChildToFront(mAvatarTexBar); reshape(getRect().getWidth(), getRect().getHeight(), TRUE); LLUI::popMatrix(); LLUI::pushMatrix(); LLUI::translate((F32)getRect().mLeft, (F32)getRect().mBottom); for (child_list_const_iter_t child_iter = getChildList()->begin(); child_iter != getChildList()->end(); ++child_iter) { LLView *viewp = *child_iter; if (viewp->getRect().mBottom < 0) { viewp->setVisible(FALSE); } } } LLContainerView::draw(); }
Matrix flatten(const Matrix& matrix) { return reshape(matrix, {matrix.elements()}); }
// main method largely inspired from opengl wiki // http://www.opengl.org/wiki/Tutorial%3a_OpenGL_3.0_Context_Creation_%28GLX%29 int main (int argc, char** argv) { Display* display = XOpenDisplay(nullptr); if (display == nullptr) { printf("Failed to open X display\n"); exit(1); } int visual_attribs[] = { GLX_RED_SIZE , 8, GLX_GREEN_SIZE , 8, GLX_BLUE_SIZE , 8, GLX_ALPHA_SIZE , 8, GLX_DEPTH_SIZE , 24, GLX_DOUBLEBUFFER , True, None }; int glx_major, glx_minor; if (!glXQueryVersion(display, &glx_major, &glx_minor) || ((glx_major == 1) && (glx_minor < 3)) || (glx_major < 1)) { printf("Invalid GLX version"); exit(1); } int fbcount; GLXFBConfig* fbc = glXChooseFBConfig(display, DefaultScreen(display), visual_attribs, &fbcount); if (fbc == nullptr) { printf("Failed to retrieve a framebuffer config\n"); exit(1); } // Pick the FB config/visual with the most samples per pixel int best_fbc = -1, best_num_samp = -1; for (int i = 0; i < fbcount; i++) { XVisualInfo *vi = glXGetVisualFromFBConfig(display, fbc[i]); if (vi != nullptr) { int samp_buf, samples; glXGetFBConfigAttrib(display, fbc[i], GLX_SAMPLE_BUFFERS, &samp_buf); glXGetFBConfigAttrib(display, fbc[i], GLX_SAMPLES, &samples); if (best_fbc < 0 || (samp_buf && samples > best_num_samp)) { best_fbc = i, best_num_samp = samples; } } XFree(vi); } GLXFBConfig bestFbc = fbc[best_fbc]; XFree(fbc); XVisualInfo *vi = glXGetVisualFromFBConfig(display, bestFbc); XSetWindowAttributes swa; Colormap cmap; swa.colormap = cmap = XCreateColormap(display, RootWindow(display, vi->screen), vi->visual, AllocNone); swa.background_pixmap = None; swa.border_pixel = 0; swa.event_mask = StructureNotifyMask | KeyPressMask; Window win = XCreateWindow(display, RootWindow(display, vi->screen), 0, 0, 800, 600, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel|CWColormap|CWEventMask, &swa); if (!win) { printf("Failed to create window.\n"); exit(1); } XFree(vi); XStoreName(display, win, "Tutorial 02"); XMapWindow(display, win); // Get the default screen's GLX extension list const char *glxExts = glXQueryExtensionsString(display, DefaultScreen(display)); glXCreateContextAttribsARBProc glXCreateContextAttribsARB = 0; glXCreateContextAttribsARB = (glXCreateContextAttribsARBProc) glXGetProcAddressARB((const GLubyte *) "glXCreateContextAttribsARB"); GLXContext ctx = nullptr; // Install an X error handler so the application won't exit if GL 3.0 // context allocation fails. ctxErrorOccurred = false; int (*oldHandler)(Display*, XErrorEvent*) = XSetErrorHandler(&ctxErrorHandler); // Check for the GLX_ARB_create_context extension string and the function. if (isExtensionSupported(glxExts, "GLX_ARB_create_context") && glXCreateContextAttribsARB) { int context_attribs[] = { GLX_CONTEXT_MAJOR_VERSION_ARB, 3, GLX_CONTEXT_MINOR_VERSION_ARB, 1, None }; ctx = glXCreateContextAttribsARB(display, bestFbc, 0, True, context_attribs); // Sync to ensure any errors generated are processed. XSync(display, False); if (ctxErrorOccurred || ctx == nullptr) { printf("Could not create GL 3.0 context\n"); exit(1); } } // Sync to ensure any errors generated are processed. XSync(display, False); // Restore the original error handler XSetErrorHandler(oldHandler); glXMakeCurrent(display, win, ctx); // must be called AFTER the OpenGL context has been created glewInit(); reshape(800, 600); bool done = false; while (!done) { while (XPending(display) > 0) { XEvent event; XNextEvent(display, &event); switch (event.type) { case Expose: break; case ConfigureNotify: reshape(event.xconfigure.width, event.xconfigure.height); break; case KeyPress: done = true; break; } } render(); glXSwapBuffers(display, win); } glXDestroyContext(display, ctx); XDestroyWindow(display, win); XFreeColormap(display, cmap); XCloseDisplay(display); }
int main(int argc, char *argv[]) { char *fileName0 = defaultFile0, *fileName1 = defaultFile1, *fileName2 = defaultFile2; glutInit(&argc, argv); if (argc > 1) { fileName0 = fileName1 = argv[1]; } if (argc > 2) { fileName2 = argv[2]; } if (argc > 3) { fileName1 = fileName2; fileName2 = argv[3]; } if (argc > 4) { if (argc == 6 || argc == 7) { key[0] = atof(argv[argc - 3]); key[1] = atof(argv[argc - 2]); key[2] = atof(argv[argc - 1]); } else { show_usage(); exit(1); } } printf("Matte file is %s\n", fileName0); printf("Image file 1 is %s\n", fileName1); printf("Image file 2 is %s\n", fileName2); printf("Key is (%f %f %f)\n", key[0], key[1], key[2]); img0 = load_img(fileName0, &w0, &h0); img1 = load_img(fileName1, &w1, &h1); img2 = load_img(fileName2, &w2, &h2); #define MAX(a, b) ((a) > (b) ? (a) : (b)) w = MAX(MAX(w0, w1), w2); h = MAX(MAX(h0, h1), h2); glutInitWindowSize(2 * w, 2 * h); glutInitWindowPosition(0, 0); glutInitDisplayMode(GLUT_RGBA | GLUT_ACCUM | GLUT_ALPHA); glutCreateWindow(argv[0]); glutDisplayFunc(draw); glutKeyboardFunc(keyPress); glutReshapeFunc(reshape); glutMouseFunc(button); /* * A hack to see if the color matrix is supported */ while (glGetError() != GL_NO_ERROR); glMatrixMode(GL_COLOR); if (glGetError() != GL_NO_ERROR) { printf("This demo requires OpenGL 1.2 or the color matrix extension.\n"); exit(0); } glMatrixMode(GL_MODELVIEW); init(); reshape(w, h); glutMainLoop(); return 0; }
void LLCheckBoxCtrl::setLabel( const LLStringExplicit& label ) { mLabel->setText( label ); reshape(getRect().getWidth(), getRect().getHeight(), FALSE); }
void gameLoop() { SDL_Event event; /* Grab all the events off the queue. */ while( SDL_PollEvent( &event ) ) { int k = -1; switch( event.type ) { case SDL_MOUSEMOTION: mouseX = event.motion.x; mouseY = event.motion.y; break; case SDL_MOUSEBUTTONDOWN: SceneManager_eventsAdd(evts, SCENEEVENT_TYPE_FINGERDOWN, 0, event.button.x, event.button.y); break; case SDL_MOUSEBUTTONUP: SceneManager_eventsAdd(evts, SCENEEVENT_TYPE_FINGERUP, 0, event.button.x, event.button.y); break; case SDL_VIDEORESIZE: reshape(event.resize.w, event.resize.h); break; case SDL_KEYDOWN: switch (event.key.keysym.sym) { case SDLK_UP: k = OS_key_up; break; case SDLK_DOWN: k = OS_key_down; break; case SDLK_LEFT: k = OS_key_left; break; case SDLK_RIGHT: k = OS_key_right; break; case SDLK_a: k = OS_key_rol; break; case SDLK_d: k = OS_key_ror; break; case SDLK_RETURN: case SDLK_KP_ENTER: k = OS_key_ok; break; case SDLK_ESCAPE: k = OS_key_cancel; break; default: break; } if (k != -1) SceneManager_eventsAdd(evts, SCENEEVENT_TYPE_KEYDOWN, k, 0, 0); break; case SDL_QUIT: OS_quit(); break; default: break; } } timenow = getNanoTime(); while (timenow - ltime < (frameTime)) { timenow = getNanoTime(); } display(); ltime = timenow; }
void LLMediaCtrl::draw() { if ( ! mWebBrowserImage ) return; if ( gRestoreGL == 1 ) { LLRect r = getRect(); reshape( r.getWidth(), r.getHeight(), FALSE ); return; }; // NOTE: optimization needed here - probably only need to do this once // unless tearoffs change the parent which they probably do. const LLUICtrl* ptr = findRootMostFocusRoot(); if ( ptr && ptr->hasFocus() ) { setFrequentUpdates( true ); } else { setFrequentUpdates( false ); }; // alpha off for this LLGLSUIDefault gls_ui; LLGLDisable gls_alphaTest( GL_ALPHA_TEST ); gGL.pushMatrix(); { if (mIgnoreUIScale) { glLoadIdentity(); // font system stores true screen origin, need to scale this by UI scale factor // to get render origin for this view (with unit scale) gGL.translatef(floorf(LLFontGL::sCurOrigin.mX * LLUI::sGLScaleFactor.mV[VX]), floorf(LLFontGL::sCurOrigin.mY * LLUI::sGLScaleFactor.mV[VY]), LLFontGL::sCurOrigin.mZ); } // scale texture to fit the space using texture coords gGL.getTexUnit(0)->bind(mWebBrowserImage->getTexture()); gGL.color4fv( LLColor4::white.mV ); F32 max_u = ( F32 )mWebBrowserImage->getMediaWidth() / ( F32 )mWebBrowserImage->getWidth(); F32 max_v = ( F32 )mWebBrowserImage->getMediaHeight() / ( F32 )mWebBrowserImage->getHeight(); LLRect r = getRect(); S32 width, height; S32 x_offset = 0; S32 y_offset = 0; if(mStretchToFill) { if(mMaintainAspectRatio) { F32 media_aspect = (F32)(mWebBrowserImage->getMediaWidth()) / (F32)(mWebBrowserImage->getMediaHeight()); F32 view_aspect = (F32)(r.getWidth()) / (F32)(r.getHeight()); if(media_aspect > view_aspect) { // max width, adjusted height width = r.getWidth(); height = llmin(llmax(S32(width / media_aspect), 0), r.getHeight()); } else { // max height, adjusted width height = r.getHeight(); width = llmin(llmax(S32(height * media_aspect), 0), r.getWidth()); } } else { width = r.getWidth(); height = r.getHeight(); } } else { width = llmin(mWebBrowserImage->getMediaWidth(), r.getWidth()); height = llmin(mWebBrowserImage->getMediaHeight(), r.getHeight()); } x_offset = (r.getWidth() - width) / 2; y_offset = (r.getHeight() - height) / 2; if (mIgnoreUIScale) { width = llround((F32)width * LLUI::sGLScaleFactor.mV[VX]); height = llround((F32)height * LLUI::sGLScaleFactor.mV[VY]); x_offset = llround((F32)x_offset * LLUI::sGLScaleFactor.mV[VX]); y_offset = llround((F32)y_offset * LLUI::sGLScaleFactor.mV[VY]); } // draw the browser gGL.setSceneBlendType(LLRender::BT_REPLACE); gGL.begin( LLRender::QUADS ); if (! mWebBrowserImage->getTextureCoordsOpenGL()) { // render using web browser reported width and height, instead of trying to invert GL scale gGL.texCoord2f( max_u, 0.f ); gGL.vertex2i( x_offset + width, y_offset + height ); gGL.texCoord2f( 0.f, 0.f ); gGL.vertex2i( x_offset, y_offset + height ); gGL.texCoord2f( 0.f, max_v ); gGL.vertex2i( x_offset, y_offset ); gGL.texCoord2f( max_u, max_v ); gGL.vertex2i( x_offset + width, y_offset ); } else { // render using web browser reported width and height, instead of trying to invert GL scale gGL.texCoord2f( max_u, max_v ); gGL.vertex2i( x_offset + width, y_offset + height ); gGL.texCoord2f( 0.f, max_v ); gGL.vertex2i( x_offset, y_offset + height ); gGL.texCoord2f( 0.f, 0.f ); gGL.vertex2i( x_offset, y_offset ); gGL.texCoord2f( max_u, 0.f ); gGL.vertex2i( x_offset + width, y_offset ); } gGL.end(); gGL.setSceneBlendType(LLRender::BT_ALPHA); } gGL.popMatrix(); // highlight if keyboard focus here. (TODO: this needs some work) if ( mBorder->getVisible() ) mBorder->setKeyboardFocusHighlight( gFocusMgr.childHasKeyboardFocus( this ) ); LLUICtrl::draw(); }
int _main(int argc, char *argv[]) { SDL_Surface *screen; int done; Uint8 *keys; int mousebutton,mouseX,mouseY; int grabbed=false; SDL_Init(SDL_INIT_VIDEO); screen = SDL_SetVideoMode(640, 480, 32, SDL_OPENGL|SDL_RESIZABLE); if ( ! screen ) { fprintf(stderr, "Couldn't set 300x300 GL video mode: %s\n", SDL_GetError()); SDL_Quit(); exit(2); } SDL_WM_SetCaption("Z64Viewer", "z64viewer"); SDL_ShowCursor(SDL_DISABLE); SDL_WM_GrabInput(SDL_GRAB_ON); grabbed=true; init(argc, argv); reshape(screen->w, screen->h); done = 0; while ( ! done ) { SDL_Event event; idle(); while ( SDL_PollEvent(&event) ) { switch(event.type) { case SDL_VIDEORESIZE: screen = SDL_SetVideoMode(event.resize.w, event.resize.h, 16, SDL_OPENGL|SDL_RESIZABLE); if ( screen ) { reshape(screen->w, screen->h); } else { printf("Problem...\n"); } break; case SDL_QUIT: done = 1; break; } } keys = SDL_GetKeyState(NULL); if ( keys[SDLK_ESCAPE] ) { if(grabbed) { SDL_WM_GrabInput(SDL_GRAB_OFF); SDL_ShowCursor(SDL_ENABLE); grabbed=false; waitTime(200); // Wait a bit so we don't exit by mistake } else { done = 1; } } mousebutton=SDL_GetRelativeMouseState(&mouseX,&mouseY); GLfloat viewMatrix[16] = { 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1 }; if(grabbed) { if((mousebutton&1) && (mousebutton&4)) { matrixRotate(viewMatrix, mouseX/600.0f*360.0f, camera[0*4+0],camera[0*4+1],camera[0*4+2]); multM4Vect(&camera[0*4], viewMatrix, &camera[0*4]); multM4Vect(&camera[1*4], viewMatrix, &camera[1*4]); multM4Vect(&camera[2*4], viewMatrix, &camera[2*4]); } else { matrixRotate(viewMatrix, -mouseX/600.0f*360.0f, camera[2*4+0], camera[2*4+1],camera[2*4+2]); matrixRotate(viewMatrix, -mouseY/600.0f*360.0f, camera[1*4+0], camera[1*4+1],camera[1*4+2]); multM4Vect(&camera[0*4], viewMatrix, &camera[0*4]); multM4Vect(&camera[1*4], viewMatrix, &camera[1*4]); if(mousebutton&1) { camera[3*4+0]+=camera[0*4+0]*20; camera[3*4+1]+=camera[0*4+1]*20; camera[3*4+2]+=camera[0*4+2]*20; camera[3*4+3]+=camera[0*4+3]*20; } if(mousebutton&4) { camera[3*4+0]-=camera[0*4+0]*20; camera[3*4+1]-=camera[0*4+1]*20; camera[3*4+2]-=camera[0*4+2]*20; camera[3*4+3]-=camera[0*4+3]*20; } if(keys[SDLK_d]) { camera[3*4+0]+=camera[1*4+0]*20; camera[3*4+1]+=camera[1*4+1]*20; camera[3*4+2]+=camera[1*4+2]*20; camera[3*4+3]+=camera[1*4+3]*20; } if(keys[SDLK_a]) { camera[3*4+0]-=camera[1*4+0]*20; camera[3*4+1]-=camera[1*4+1]*20; camera[3*4+2]-=camera[1*4+2]*20; camera[3*4+3]-=camera[1*4+3]*20; } if(keys[SDLK_w]) { camera[3*4+0]+=camera[2*4+0]*20; camera[3*4+1]+=camera[2*4+1]*20; camera[3*4+2]+=camera[2*4+2]*20; camera[3*4+3]+=camera[2*4+3]*20; } if(keys[SDLK_s]) { camera[3*4+0]-=camera[2*4+0]*20; camera[3*4+1]-=camera[2*4+1]*20; camera[3*4+2]-=camera[2*4+2]*20; camera[3*4+3]-=camera[2*4+3]*20; } //FASTER if(mousebutton&4 && mousebutton&2) { camera[3*4+0]-=camera[0*4+0]*200; camera[3*4+1]-=camera[0*4+1]*200; camera[3*4+2]-=camera[0*4+2]*200; camera[3*4+3]-=camera[0*4+3]*200; } if(mousebutton&1 && mousebutton&2) { camera[3*4+0]+=camera[0*4+0]*200; camera[3*4+1]+=camera[0*4+1]*200; camera[3*4+2]+=camera[0*4+2]*200; camera[3*4+3]+=camera[0*4+3]*200; } if(keys[SDLK_i]) { camera[3*4+0]+=camera[2*4+0]*200; camera[3*4+1]+=camera[2*4+1]*200; camera[3*4+2]+=camera[2*4+2]*200; camera[3*4+3]+=camera[2*4+3]*200; } if(keys[SDLK_k]) { camera[3*4+0]-=camera[2*4+0]*200; camera[3*4+1]-=camera[2*4+1]*200; camera[3*4+2]-=camera[2*4+2]*200; camera[3*4+3]-=camera[2*4+3]*200; } if(keys[SDLK_j]) { camera[3*4+0]-=camera[1*4+0]*200; camera[3*4+1]-=camera[1*4+1]*200; camera[3*4+2]-=camera[1*4+2]*200; camera[3*4+3]-=camera[1*4+3]*200; } if(keys[SDLK_l]) { camera[3*4+0]+=camera[1*4+0]*200; camera[3*4+1]+=camera[1*4+1]*200; camera[3*4+2]+=camera[1*4+2]*200; camera[3*4+3]+=camera[1*4+3]*200; } //FASTER END } } else { if(mousebutton) { SDL_ShowCursor(SDL_DISABLE); SDL_WM_GrabInput(SDL_GRAB_ON); grabbed=true; } } draw(); } SDL_Quit(); return 0; /* ANSI C requires main to return int. */ }
void draw_from_data ( struct Data * k ) { SDL_Surface *screen; int done; Uint8 *keys; int mousebutton,mouseX,mouseY; int grabbed=false; SDL_Init(SDL_INIT_VIDEO); screen = SDL_SetVideoMode(640, 480, 32, SDL_OPENGL|SDL_RESIZABLE); if ( ! screen ) { fprintf(stderr, "Couldn't set 300x300 GL video mode: %s\n", SDL_GetError()); SDL_Quit(); exit(2); } SDL_WM_SetCaption("Z64Viewer", "z64viewer"); SDL_ShowCursor(SDL_DISABLE); SDL_WM_GrabInput(SDL_GRAB_ON); grabbed=true; GLenum err = glewInit(); memset(databuffer,0, 8*1024*1024); entrypoint = k->ep; LoadResourceZ_bin(k->data, k->size, 0, 0); LoadResourceZ( "resources/gameplay_keep.zdata" , 1024*1024, 4); camera[0] = 1; camera[1]=0; camera[2]=0; camera[3]=0; // Forward camera[4] = 0; camera[5]=0; camera[6]=1; camera[7]=0; // Right camera[8] = 0; camera[9]=1; camera[10]=0; camera[11]=0; // Up camera[12] = -1000; camera[13]=0; camera[14]=0; camera[15]=0; // Position reshape(screen->w, screen->h); done = 0; while ( ! done ) { SDL_Event event; idle(); while ( SDL_PollEvent(&event) ) { switch(event.type) { case SDL_VIDEORESIZE: screen = SDL_SetVideoMode(event.resize.w, event.resize.h, 16, SDL_OPENGL|SDL_RESIZABLE); if ( screen ) { reshape(screen->w, screen->h); } else { printf("Problem...\n"); } break; } } keys = SDL_GetKeyState(NULL); if ( keys[SDLK_ESCAPE] ) { if(grabbed) { SDL_WM_GrabInput(SDL_GRAB_OFF); SDL_ShowCursor(SDL_ENABLE); grabbed=false; waitTime(200); // Wait a bit so we don't exit by mistake } else { done = 1; } } mousebutton=SDL_GetRelativeMouseState(&mouseX,&mouseY); GLfloat viewMatrix[16] = { 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1 }; if(grabbed) { if((mousebutton&1) && (mousebutton&4)) { matrixRotate(viewMatrix, mouseX/600.0f*360.0f, camera[0*4+0],camera[0*4+1],camera[0*4+2]); multM4Vect(&camera[0*4], viewMatrix, &camera[0*4]); multM4Vect(&camera[1*4], viewMatrix, &camera[1*4]); multM4Vect(&camera[2*4], viewMatrix, &camera[2*4]); } else { matrixRotate(viewMatrix, -mouseX/600.0f*360.0f, camera[2*4+0], camera[2*4+1],camera[2*4+2]); matrixRotate(viewMatrix, -mouseY/600.0f*360.0f, camera[1*4+0], camera[1*4+1],camera[1*4+2]); multM4Vect(&camera[0*4], viewMatrix, &camera[0*4]); multM4Vect(&camera[1*4], viewMatrix, &camera[1*4]); if(mousebutton&1) { camera[3*4+0]+=camera[0*4+0]*20; camera[3*4+1]+=camera[0*4+1]*20; camera[3*4+2]+=camera[0*4+2]*20; camera[3*4+3]+=camera[0*4+3]*20; } if(mousebutton&4) { camera[3*4+0]-=camera[0*4+0]*20; camera[3*4+1]-=camera[0*4+1]*20; camera[3*4+2]-=camera[0*4+2]*20; camera[3*4+3]-=camera[0*4+3]*20; } if(keys[SDLK_d]) { camera[3*4+0]+=camera[1*4+0]*20; camera[3*4+1]+=camera[1*4+1]*20; camera[3*4+2]+=camera[1*4+2]*20; camera[3*4+3]+=camera[1*4+3]*20; } if(keys[SDLK_a]) { camera[3*4+0]-=camera[1*4+0]*20; camera[3*4+1]-=camera[1*4+1]*20; camera[3*4+2]-=camera[1*4+2]*20; camera[3*4+3]-=camera[1*4+3]*20; } if(keys[SDLK_w]) { camera[3*4+0]+=camera[2*4+0]*20; camera[3*4+1]+=camera[2*4+1]*20; camera[3*4+2]+=camera[2*4+2]*20; camera[3*4+3]+=camera[2*4+3]*20; } if(keys[SDLK_s]) { camera[3*4+0]-=camera[2*4+0]*20; camera[3*4+1]-=camera[2*4+1]*20; camera[3*4+2]-=camera[2*4+2]*20; camera[3*4+3]-=camera[2*4+3]*20; } //FASTER if(mousebutton&4 && mousebutton&2) { camera[3*4+0]-=camera[0*4+0]*200; camera[3*4+1]-=camera[0*4+1]*200; camera[3*4+2]-=camera[0*4+2]*200; camera[3*4+3]-=camera[0*4+3]*200; } if(mousebutton&1 && mousebutton&2) { camera[3*4+0]+=camera[0*4+0]*200; camera[3*4+1]+=camera[0*4+1]*200; camera[3*4+2]+=camera[0*4+2]*200; camera[3*4+3]+=camera[0*4+3]*200; } if(keys[SDLK_i]) { camera[3*4+0]+=camera[2*4+0]*200; camera[3*4+1]+=camera[2*4+1]*200; camera[3*4+2]+=camera[2*4+2]*200; camera[3*4+3]+=camera[2*4+3]*200; } if(keys[SDLK_k]) { camera[3*4+0]-=camera[2*4+0]*200; camera[3*4+1]-=camera[2*4+1]*200; camera[3*4+2]-=camera[2*4+2]*200; camera[3*4+3]-=camera[2*4+3]*200; } if(keys[SDLK_j]) { camera[3*4+0]-=camera[1*4+0]*200; camera[3*4+1]-=camera[1*4+1]*200; camera[3*4+2]-=camera[1*4+2]*200; camera[3*4+3]-=camera[1*4+3]*200; } if(keys[SDLK_l]) { camera[3*4+0]+=camera[1*4+0]*200; camera[3*4+1]+=camera[1*4+1]*200; camera[3*4+2]+=camera[1*4+2]*200; camera[3*4+3]+=camera[1*4+3]*200; } //FASTER END } } else { if(mousebutton) { SDL_ShowCursor(SDL_DISABLE); SDL_WM_GrabInput(SDL_GRAB_ON); grabbed=true; } } draw(); if(__quit) break; } SDL_Quit(); __quited=1; return; /* ANSI C requires main to return int. */ }
int main(int ac, char **av) { float fogcolor[4]={0.025,0.025,0.025,1.0}; fprintf(stderr,"Teapot V1.2\nWritten by David Bucciarelli ([email protected])\n"); /* if(!SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS)) { fprintf(stderr,"Error setting the process class.\n"); return 0; } if(!SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL)) { fprintf(stderr,"Error setting the process priority.\n"); return 0; } */ glutInitWindowPosition(0,0); glutInitWindowSize(WIDTH,HEIGHT); glutInit(&ac,av); glutInitDisplayMode(GLUT_RGB|GLUT_DEPTH|GLUT_DOUBLE); glutCreateWindow("Teapot"); reshape(WIDTH,HEIGHT); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glEnable(GL_TEXTURE_2D); glEnable(GL_FOG); glFogi(GL_FOG_MODE,GL_EXP2); glFogfv(GL_FOG_COLOR,fogcolor); glFogf(GL_FOG_DENSITY,0.04); #ifdef FX glHint(GL_FOG_HINT,GL_NICEST); #endif glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); calcposobs(); inittextures(); initlight(); #ifndef FX glDisable(GL_TEXTURE_2D); usetex=0; #endif initdlists(); glClearColor(fogcolor[0],fogcolor[1],fogcolor[2],fogcolor[3]); glutReshapeFunc(reshape); glutDisplayFunc(draw); glutKeyboardFunc(key); glutSpecialFunc(special); glutIdleFunc(draw); glutMainLoop(); return 0; /* ANSI C requires main to return int. */ }
void LLWebBrowserCtrl::draw() { if ( ! mWebBrowserImage ) return; if ( gRestoreGL == 1 ) { LLRect r = getRect(); mMediaSource->updateMedia(); reshape( r.getWidth(), r.getHeight(), FALSE ); return; }; // NOTE: optimization needed here - probably only need to do this once // unless tearoffs change the parent which they probably do. const LLUICtrl* ptr = findRootMostFocusRoot(); if ( ptr && ptr->hasFocus() ) { setFrequentUpdates( true ); } else { setFrequentUpdates( false ); }; // alpha off for this LLGLSUIDefault gls_ui; LLGLDisable gls_alphaTest( GL_ALPHA_TEST ); gGL.pushMatrix(); { if (mIgnoreUIScale) { glLoadIdentity(); // font system stores true screen origin, need to scale this by UI scale factor // to get render origin for this view (with unit scale) gGL.translatef(floorf(LLFontGL::sCurOrigin.mX * LLUI::sGLScaleFactor.mV[VX]), floorf(LLFontGL::sCurOrigin.mY * LLUI::sGLScaleFactor.mV[VY]), LLFontGL::sCurOrigin.mZ); } // scale texture to fit the space using texture coords gGL.getTexUnit(0)->bind(mWebBrowserImage->getTexture()); gGL.color4fv( LLColor4::white.mV ); F32 max_u = ( F32 )mWebBrowserImage->getBrowserWidth() / ( F32 )mWebBrowserImage->getWidth(); F32 max_v = ( F32 )mWebBrowserImage->getBrowserHeight() / ( F32 )mWebBrowserImage->getHeight(); // draw the browser gGL.setSceneBlendType(LLRender::BT_REPLACE); gGL.begin( LLRender::QUADS ); { // render using web browser reported width and height, instead of trying to invert GL scale gGL.texCoord2f( max_u, max_v ); gGL.vertex2i( mWebBrowserImage->getBrowserWidth(), mWebBrowserImage->getBrowserHeight() ); gGL.texCoord2f( 0.f, max_v ); gGL.vertex2i( 0, mWebBrowserImage->getBrowserHeight() ); gGL.texCoord2f( 0.f, 0.f ); gGL.vertex2i( 0, 0 ); gGL.texCoord2f( max_u, 0.f ); gGL.vertex2i( mWebBrowserImage->getBrowserWidth(), 0 ); } gGL.end(); gGL.setSceneBlendType(LLRender::BT_ALPHA); } gGL.popMatrix(); // highlight if keyboard focus here. (TODO: this needs some work) if ( mBorder->getVisible() ) mBorder->setKeyboardFocusHighlight( gFocusMgr.childHasKeyboardFocus( this ) ); LLUICtrl::draw(); }
static void draw(void) { static int count=0; static char frbuf[80]; float fr; dojoy(); glEnable(GL_DEPTH_TEST); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); if(usetex) glEnable(GL_TEXTURE_2D); else glDisable(GL_TEXTURE_2D); if(fog) glEnable(GL_FOG); else glDisable(GL_FOG); glEnable(GL_LIGHTING); glShadeModel(GL_SMOOTH); glPushMatrix(); calcposobs(); gluLookAt(obs[0],obs[1],obs[2], obs[0]+dir[0],obs[1]+dir[1],obs[2]+dir[2], 0.0,0.0,1.0); drawlight1(); glCallList(basedlist); drawteapot(); drawlight2(); glPopMatrix(); if((count % FRAME)==0) { fr=gettime(); sprintf(frbuf,"Frame rate: %f",FRAME/fr); } glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); glDisable(GL_DEPTH_TEST); glDisable(GL_FOG); glShadeModel(GL_FLAT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-0.5,639.5,-0.5,479.5,-1.0,1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glColor3f(1.0,0.0,0.0); glRasterPos2i(10,10); printstring(GLUT_BITMAP_HELVETICA_18,frbuf); glRasterPos2i(350,470); printstring(GLUT_BITMAP_HELVETICA_10,"Teapot V1.2 Written by David Bucciarelli ([email protected])"); if(help) printhelp(); reshape(WIDTH,HEIGHT); glutSwapBuffers(); count++; }
static void event_loop(Display *dpy, struct gears *gears) { int x, y; while (1) { while (XPending(dpy) > 0) { XEvent event; XNextEvent(dpy, &event); switch (event.type) { case Expose: /* we'll redraw below */ break; case ConfigureNotify: reshape(gears, event.xconfigure.width, event.xconfigure.height); break; case KeyPress: { char buffer[10]; int code; code = XLookupKeysym(&event.xkey, 0); if (code == XK_Left) { view_roty += 5.0; } else if (code == XK_Right) { view_roty -= 5.0; } else if (code == XK_Up) { view_rotx += 5.0; } else if (code == XK_Down) { view_rotx -= 5.0; } else { XLookupString(&event.xkey, buffer, sizeof(buffer), NULL, NULL); if (buffer[0] == 27) { /* escape */ return; } } } } } /* next frame */ angle += 2.0; draw(); glFinish(); for (x = 0; x < gears->width; x += 100) for (y = 0; y < gears->width; y += 100) XCopyArea(dpy, gears->pixmap, gears->win, gears->gc, 50, 50, 100, 100, x, y); /* calc framerate */ { static int t0 = -1; static int frames = 0; int t = current_time(); if (t0 < 0) t0 = t; frames++; if (t - t0 >= 5.0) { GLfloat seconds = t - t0; GLfloat fps = frames / seconds; printf("%d frames in %3.1f seconds = %6.3f FPS\n", frames, seconds, fps); fflush(stdout); t0 = t; frames = 0; } } } }
CRSSparsity vec(const CRSSparsity& a){ return reshape(trans(a),a.numel(),1); }
// program entry int32_t main(int32_t argc, char *argv[]) { GLFWwindow* window; int32_t width, height; NvAssetLoaderInit(NULL); sWindowIsFocused = true; sForcedRenderCount = 0; if( !glfwInit() ) { fprintf( stderr, "Failed to initialize GLFW\n" ); exit( EXIT_FAILURE ); } glfwSetErrorCallback(glfwError); NvLinuxPlatformContext* platform = new NvLinuxPlatformContext; // add command line arguments for (int i = 1; i < argc; i++) { platform->m_commandLine.push_back(argv[i]); } sApp = NvAppFactory(platform); NvEGLConfiguration config(NvGfxAPIVersionGL4(), 8, 8, 8, 8, 16, 0); sApp->configurationCallback(config); // Does not seem to work... /* if (config.api == GLAppContext::Configuration::API_ES) glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, config.majVer); //glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE); */ NvGLLinuxAppContext* context = new NvGLLinuxAppContext(config); window = glfwCreateWindow( 1280, 720, "Linux SDK Application", NULL, NULL ); if (!window) { fprintf( stderr, "Failed to open GLFW window\n" ); glfwTerminate(); exit( EXIT_FAILURE ); } platform->setWindow(window); context->setWindow(window); sApp->setGLContext(context); // Set callback functions glfwSetFramebufferSizeCallback(window, reshape); glfwSetWindowFocusCallback(window, focus); setInputCallbacksGLFW(window); context->bindContext(); glfwSwapInterval( 1 ); glfwGetFramebufferSize(window, &width, &height); int32_t major = glfwGetWindowAttrib(window, GLFW_CONTEXT_VERSION_MAJOR); int32_t minor = glfwGetWindowAttrib(window, GLFW_CONTEXT_VERSION_MINOR); config.apiVer = NvGfxAPIVersion(NvGfxAPI::GL, major, minor); glGetIntegerv(GL_RED_BITS, (GLint*)&config.redBits); glGetIntegerv(GL_GREEN_BITS, (GLint*)&config.greenBits); glGetIntegerv(GL_BLUE_BITS, (GLint*)&config.blueBits); glGetIntegerv(GL_ALPHA_BITS, (GLint*)&config.alphaBits); glGetIntegerv(GL_DEPTH_BITS, (GLint*)&config.depthBits); glGetIntegerv(GL_STENCIL_BITS, (GLint*)&config.stencilBits); context->setConfiguration(config); #if 1 // get extensions (need for ES2.0) GLenum err = glewInit(); if (GLEW_OK != err) { /* Problem: glewInit failed, something is seriously wrong. */ fprintf(stderr, "Error: %s\n", glewGetErrorString(err)); exit(-1); } fprintf(stdout, "Using GLEW %s\n", glewGetString(GLEW_VERSION)); #endif // Parse command-line options initGL(argc, argv); reshape(window, width, height); sApp->mainLoop(); // Shut down the app before shutting down GL delete sApp; // Terminate GLFW glfwTerminate(); NvAssetLoaderShutdown(); // Exit program exit( EXIT_SUCCESS ); }
//----------------------------------------------------------------------------- // postBuild() //----------------------------------------------------------------------------- BOOL LLFloaterAnimPreview::postBuild() { LLRect r; LLKeyframeMotion* motionp = NULL; LLBVHLoader* loaderp = NULL; if (!LLFloaterNameDesc::postBuild()) { return FALSE; } mInWorld = gSavedSettings.getBOOL("PreviewAnimInWorld"); childSetCommitCallback("name_form", onCommitName, this); if (gSavedSettings.getBOOL("AscentPowerfulWizard")) { childSetMaxValue("priority", 7); } childSetLabelArg("ok_btn", "[UPLOADFEE]", gHippoGridManager->getConnectedGrid()->getUploadFee()); childSetAction("ok_btn", onBtnOK, this); setDefaultBtn(); if (mInWorld) { r = getRect(); translate(0, 230); reshape(r.getWidth(), r.getHeight() - 230); childSetValue("bad_animation_text", getString("in_world")); childShow("bad_animation_text"); } else { childHide("bad_animation_text"); } mPreviewRect.set(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT, getRect().getWidth() - PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD); mPreviewImageRect.set(0.f, 1.f, 1.f, 0.f); S32 y = mPreviewRect.mTop + BTN_HEIGHT; S32 btn_left = PREVIEW_HPAD; r.set( btn_left, y, btn_left + 32, y - BTN_HEIGHT ); mPlayButton = getChild<LLButton>( "play_btn"); if (!mPlayButton) { mPlayButton = new LLButton(std::string("play_btn"), LLRect(0,0,0,0)); } mPlayButton->setClickedCallback(onBtnPlay); mPlayButton->setCallbackUserData(this); mPlayButton->setImages(std::string("button_anim_play.tga"), std::string("button_anim_play_selected.tga")); mPlayButton->setDisabledImages(LLStringUtil::null,LLStringUtil::null); mPlayButton->setScaleImage(TRUE); mStopButton = getChild<LLButton>( "stop_btn"); if (!mStopButton) { mStopButton = new LLButton(std::string("stop_btn"), LLRect(0,0,0,0)); } mStopButton->setClickedCallback(onBtnStop); mStopButton->setCallbackUserData(this); mStopButton->setImages(std::string("button_anim_stop.tga"), std::string("button_anim_stop_selected.tga")); mStopButton->setDisabledImages(LLStringUtil::null,LLStringUtil::null); mStopButton->setScaleImage(TRUE); r.set(r.mRight + PREVIEW_HPAD, y, getRect().getWidth() - PREVIEW_HPAD, y - BTN_HEIGHT); //childSetCommitCallback("playback_slider", onSliderMove, this); //childSetCommitCallback("preview_base_anim", onCommitBaseAnim, this); //childSetValue("preview_base_anim", "Standing"); //childSetCommitCallback("priority", onCommitPriority, this); //childSetCommitCallback("loop_check", onCommitLoop, this); //childSetCommitCallback("loop_in_point", onCommitLoopIn, this); //childSetValidate("loop_in_point", validateLoopIn); //childSetCommitCallback("loop_out_point", onCommitLoopOut, this); //childSetValidate("loop_out_point", validateLoopOut); //childSetCommitCallback("hand_pose_combo", onCommitHandPose, this); //childSetCommitCallback("emote_combo", onCommitEmote, this); //childSetValue("emote_combo", "[None]"); //childSetCommitCallback("ease_in_time", onCommitEaseIn, this); //childSetValidate("ease_in_time", validateEaseIn); //childSetCommitCallback("ease_out_time", onCommitEaseOut, this); //childSetValidate("ease_out_time", validateEaseOut); // <edit> moved declaration from below BOOL success = false; // </edit> std::string exten = gDirUtilp->getExtension(mFilename); if (exten == "bvh") { // loading a bvh file // now load bvh file S32 file_size; LLAPRFile infile ; infile.open(mFilenameAndPath, LL_APR_RB, LLAPRFile::global, &file_size); if (!infile.getFileHandle()) { llwarns << "Can't open BVH file:" << mFilename << llendl; } else { char* file_buffer; file_buffer = new char[file_size + 1]; if (file_size == infile.read(file_buffer, file_size)) { file_buffer[file_size] = '\0'; llinfos << "Loading BVH file " << mFilename << llendl; ELoadStatus load_status = E_ST_OK; S32 line_number = 0; loaderp = new LLBVHLoader(file_buffer, load_status, line_number); std::string status = getString(STATUS[load_status]); if(load_status == E_ST_NO_XLT_FILE) { llwarns << "NOTE: No translation table found." << llendl; } else { llwarns << "ERROR: [line: " << line_number << "] " << status << llendl; } } infile.close() ; delete[] file_buffer; // <edit> moved everything bvh from below if(loaderp && loaderp->isInitialized() && loaderp->getDuration() <= MAX_ANIM_DURATION) { mTransactionID.generate(); mMotionID = mTransactionID.makeAssetID(gAgent.getSecureSessionID()); mAnimPreview = new LLPreviewAnimation(256, 256); // motion will be returned, but it will be in a load-pending state, as this is a new motion // this motion will not request an asset transfer until next update, so we have a chance to // load the keyframe data locally if (mInWorld) { motionp = (LLKeyframeMotion*)gAgent.getAvatarObject()->createMotion(mMotionID); } else { motionp = (LLKeyframeMotion*)mAnimPreview->getDummyAvatar()->createMotion(mMotionID); } // create data buffer for keyframe initialization S32 buffer_size = loaderp->getOutputSize(); U8* buffer = new U8[buffer_size]; LLDataPackerBinaryBuffer dp(buffer, buffer_size); // pass animation data through memory buffer loaderp->serialize(dp); dp.reset(); success = motionp && motionp->deserialize(dp); } else { success = false; if ( loaderp ) { if (loaderp->getDuration() > MAX_ANIM_DURATION) { LLUIString out_str = getString("anim_too_long"); out_str.setArg("[LENGTH]", llformat("%.1f", loaderp->getDuration())); out_str.setArg("[MAX_LENGTH]", llformat("%.1f", MAX_ANIM_DURATION)); getChild<LLUICtrl>("bad_animation_text")->setValue(out_str.getString()); } else { LLUIString out_str = getString("failed_file_read"); out_str.setArg("[STATUS]", getString(STATUS[loaderp->getStatus()])); getChild<LLUICtrl>("bad_animation_text")->setValue(out_str.getString()); } } //setEnabled(FALSE); mMotionID.setNull(); mAnimPreview = NULL; } // </edit> } } // <edit> else if(exten == "anim" || exten == "animatn" || exten == "neil") { S32 file_size; LLAPRFile raw_animatn; raw_animatn.open(mFilenameAndPath, LL_APR_RB, LLAPRFile::global, &file_size); if (!raw_animatn.getFileHandle()) { llwarns << "Can't open animatn file:" << mFilename << llendl; } else { char* file_buffer; file_buffer = new char[file_size + 1]; if (file_size == raw_animatn.read(file_buffer, file_size)) { file_buffer[file_size] = '\0'; llinfos << "Loading animatn file " << mFilename << llendl; mTransactionID.generate(); mMotionID = mTransactionID.makeAssetID(gAgent.getSecureSessionID()); mAnimPreview = new LLPreviewAnimation(256, 256); motionp = (LLKeyframeMotion*)mAnimPreview->getDummyAvatar()->createMotion(mMotionID); LLDataPackerBinaryBuffer dp((U8*)file_buffer, file_size); dp.reset(); success = motionp && motionp->deserialize(dp); } raw_animatn.close(); delete[] file_buffer; } } // </edit> if (success) { setAnimCallbacks() ; if (!mInWorld) { const LLBBoxLocal &pelvis_bbox = motionp->getPelvisBBox(); LLVector3 temp = pelvis_bbox.getCenter(); // only consider XY? //temp.mV[VZ] = 0.f; F32 pelvis_offset = temp.magVec(); temp = pelvis_bbox.getExtent(); //temp.mV[VZ] = 0.f; F32 pelvis_max_displacement = pelvis_offset + (temp.magVec() * 0.5f) + 1.f; F32 camera_zoom = LLViewerCamera::getInstance()->getDefaultFOV() / (2.f * atan(pelvis_max_displacement / PREVIEW_CAMERA_DISTANCE)); mAnimPreview->setZoom(camera_zoom); } motionp->setName(childGetValue("name_form").asString()); if (!mInWorld) { mAnimPreview->getDummyAvatar()->startMotion(mMotionID); } childSetMinValue("playback_slider", 0.0); childSetMaxValue("playback_slider", 1.0); childSetValue("loop_check", LLSD(motionp->getLoop())); childSetValue("loop_in_point", LLSD(motionp->getLoopIn() / motionp->getDuration() * 100.f)); childSetValue("loop_out_point", LLSD(motionp->getLoopOut() / motionp->getDuration() * 100.f)); childSetValue("priority", LLSD((F32)motionp->getPriority())); childSetValue("hand_pose_combo", LLHandMotion::getHandPoseName(motionp->getHandPose())); childSetValue("ease_in_time", LLSD(motionp->getEaseInDuration())); childSetValue("ease_out_time", LLSD(motionp->getEaseOutDuration())); setEnabled(TRUE); std::string seconds_string; seconds_string = llformat(" - %.2f seconds", motionp->getDuration()); setTitle(mFilename + std::string(seconds_string)); } else { delete mAnimPreview; mAnimPreview = NULL; mMotionID.setNull(); childSetValue("bad_animation_text", getString("failed_to_initialize")); } refresh(); delete loaderp; return TRUE; }
void LLTextBox::reshapeToFitText() { S32 width = getTextPixelWidth(); S32 height = getTextPixelHeight(); reshape( width + 2 * mHPad, height + 2 * mVPad ); }
GLPresenter::GLPresenter(DeckLinkCapture &capture, int w, int h, int hz) : data_size(w*h*capture.getBytesPerPixel()), capture(capture), running(true), fullscreen(false), useVsync(false), rgbFull(false), texId(0), displayList(0), initialConvert(NULL), buffer(NULL), buffer2(NULL), reqW(w), reqH(h), reqHz(hz), captureBufferW(reqW / (4 / capture.getBytesPerPixel())), frameIndex(0), drawnFrameIndex(0), aspect(16.0/9.0), oneToNScaleFactor(-1.0), frameProcTimes(300) { self = this; sprintf(prepend, "#version 410 compatibility \n#define FRAME_WIDTH %d \n#define FRAME_HEIGHT %d \n", reqW, reqH); RT_ASSERT(glfwInit() == GL_TRUE, "Failed to initalize GLFW."); RT_ASSERT(glfwOpenWindow(w, h, 0, 0, 0, 0, 0, 0, GLFW_WINDOW) == GL_TRUE, "Failed to open GLFW window."); string title("PtBi "); title += VER_STRING; glfwSetWindowTitle(title.c_str()); glfwSetWindowPos(10, 10); dataPointers[0] = malloc(data_size); dataPointers[1] = malloc(data_size); glewInit(); checkExtensions(); ilInit(); glfwDisable(GLFW_AUTO_POLL_EVENTS); glfwSwapInterval(0); glfwSetWindowCloseCallback(closeCallback); glfwSetWindowSizeCallback(resizeCallback); glfwSetMousePosCallback(mousePosCallback); glfwSetKeyCallback(keyCallback); hdc = wglGetCurrentDC(); hrc = wglGetCurrentContext(); initGL(); switch(capture.getPixelFormat()) { case CapturePixelFormat::YUV: initialConvert = new GLFragmentProgram("shaders/uyvy_to_rgb_smooth.glsl", getShaderPrependString()); break; case CapturePixelFormat::ARGB8: initialConvert = new GLFragmentProgram("shaders/argb_input.glsl", getShaderPrependString()); break; case CapturePixelFormat::BGRA8: initialConvert = new GLFragmentProgram("shaders/bgra_input.glsl", getShaderPrependString()); break; default: RT_ASSERT(false, "Unsupported pixel type."); } buffer = new GLRenderTexture(getW(), getH(), GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE); buffer->setFilterMode(GL_LINEAR); buffer2 = new GLRenderTexture(getW(), getH(), GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE); buffer2->setFilterMode(GL_LINEAR); scalingManager = new ScalingManager(*this); aaManager = new AAManager(*this); ipManager = new IPManager(*this); keyBinding = new KeyBinding(this); capture.registerDisplayListener(this); hwnd = GetForegroundWindow(); RT_GL_ASSERT("Error during GL initialization."); reshape(reqW, reqH); graphicsReportText = std::make_shared<StaticText>("", 25.0f,440.0f); Console::get().add(graphicsReportText); }
LLAlertDialog::LLAlertDialog( LLNotificationPtr notification, bool modal) : LLModalDialog( notification->getLabel(), 100, 100, modal ), // dummy size. Will reshape below. LLInstanceTracker<LLAlertDialog, LLUUID>(notification->getID()), mDefaultOption( 0 ), mCheck(NULL), mCaution(notification->getPriority() >= NOTIFICATION_PRIORITY_HIGH), mLabel(notification->getName()), mLineEditor(NULL), mNote(notification) { const LLFontGL* font = LLResMgr::getInstance()->getRes( FONT_NAME ); const S32 LINE_HEIGHT = llfloor(font->getLineHeight() + 0.99f); const S32 EDITOR_HEIGHT = 20; LLNotificationFormPtr form = mNote->getForm(); std::string edit_text_name; std::string edit_text_contents; bool is_password = false; setBackgroundVisible(TRUE); setBackgroundOpaque(TRUE); typedef std::vector<std::pair<std::string, std::string> > options_t; options_t supplied_options; // for now, get LLSD to iterator over form elements LLSD form_sd = form->asLLSD(); S32 option_index = 0; for (LLSD::array_const_iterator it = form_sd.beginArray(); it != form_sd.endArray(); ++it) { std::string type = (*it)["type"].asString(); if (type == "button") { if((*it)["default"]) { mDefaultOption = option_index; } supplied_options.push_back(std::make_pair((*it)["name"].asString(), (*it)["text"].asString())); ButtonData data; data.mSelf = this; if (option_index == mNote->getURLOption()) { data.mURL = mNote->getURL(); } mButtonData.push_back(data); option_index++; } else if (type == "text") { edit_text_contents = (*it)["value"].asString(); edit_text_name = (*it)["name"].asString(); } else if (type == "password") { edit_text_contents = (*it)["value"].asString(); edit_text_name = (*it)["name"].asString(); is_password = true; } } // Buttons options_t options; if (supplied_options.empty()) { options.push_back(std::make_pair(std::string("close"), std::string("Close"))); // add data for ok button. ButtonData ok_button; ok_button.mSelf = this; mButtonData.push_back(ok_button); mDefaultOption = 0; } else { options = supplied_options; } S32 num_options = options.size(); // Calc total width of buttons S32 button_width = 0; S32 sp = font->getWidth(std::string("OO")); for( S32 i = 0; i < num_options; i++ ) { S32 w = S32(font->getWidth( options[i].second ) + 0.99f) + sp + 2 * LLBUTTON_H_PAD; button_width = llmax( w, button_width ); } S32 btn_total_width = button_width; if( num_options > 1 ) { btn_total_width = (num_options * button_width) + ((num_options - 1) * BTN_HPAD); } // Message: create text box using raw string, as text has been structure deliberately // Use size of created text box to generate dialog box size std::string msg = mNote->getMessage(); llwarns << "Alert: " << msg << llendl; LLTextBox* msg_box = new LLTextBox( std::string("Alert message"), msg, (F32)MAX_ALLOWED_MSG_WIDTH, font ); const LLRect& text_rect = msg_box->getRect(); S32 dialog_width = llmax( btn_total_width, text_rect.getWidth() ) + 2 * HPAD; S32 dialog_height = text_rect.getHeight() + 3 * VPAD + BTN_HEIGHT; if (hasTitleBar()) { dialog_height += LINE_HEIGHT; // room for title bar } // it's ok for the edit text body to be empty, but we want the name to exist if we're going to draw it if (!edit_text_name.empty()) { dialog_height += EDITOR_HEIGHT + VPAD; dialog_width = llmax(dialog_width, (S32)(font->getWidth( edit_text_contents ) + 0.99f)); } if (mCaution) { // Make room for the caution icon. dialog_width += 32 + HPAD; } reshape( dialog_width, dialog_height, FALSE ); S32 msg_y = getRect().getHeight() - VPAD; S32 msg_x = HPAD; if (hasTitleBar()) { msg_y -= LINE_HEIGHT; // room for title } if (mCaution) { LLIconCtrl* icon = new LLIconCtrl(std::string("icon"), LLRect(msg_x, msg_y, msg_x+32, msg_y-32), std::string("notify_caution_icon.tga")); icon->setMouseOpaque(FALSE); addChild(icon); msg_x += 32 + HPAD; msg_box->setColor( LLUI::sColorsGroup->getColor( "AlertCautionTextColor" ) ); } else { msg_box->setColor( LLUI::sColorsGroup->getColor( "AlertTextColor" ) ); } LLRect rect; rect.setLeftTopAndSize( msg_x, msg_y, text_rect.getWidth(), text_rect.getHeight() ); msg_box->setRect( rect ); addChild(msg_box); // Buttons S32 button_left = (getRect().getWidth() - btn_total_width) / 2; for( S32 i = 0; i < num_options; i++ ) { LLRect button_rect; button_rect.setOriginAndSize( button_left, VPAD, button_width, BTN_HEIGHT ); LLButton* btn = new LLButton( options[i].first, button_rect, "","", "", NULL, NULL, font, options[i].second, options[i].second); mButtonData[i].mButton = btn; btn->setClickedCallback(&LLAlertDialog::onButtonPressed, (void*)(&mButtonData[i])); addChild(btn); if( i == mDefaultOption ) { btn->setFocus(TRUE); } button_left += button_width + BTN_HPAD; } // (Optional) Edit Box if (!edit_text_name.empty()) { S32 y = VPAD + BTN_HEIGHT + VPAD/2; mLineEditor = new LLLineEditor(edit_text_name, LLRect( HPAD, y+EDITOR_HEIGHT, dialog_width-HPAD, y), edit_text_contents, LLFontGL::getFontSansSerif(), STD_STRING_STR_LEN); // make sure all edit keys get handled properly (DEV-22396) mLineEditor->setHandleEditKeysDirectly(TRUE); addChild(mLineEditor); } if (mLineEditor) { mLineEditor->setDrawAsterixes(is_password); setEditTextArgs(notification->getSubstitutions()); } std::string ignore_label; if (form->getIgnoreType() == LLNotificationForm::IGNORE_WITH_DEFAULT_RESPONSE) { setCheckBox(LLNotifications::instance().getGlobalString("skipnexttime"), ignore_label); } else if (form->getIgnoreType() == LLNotificationForm::IGNORE_WITH_LAST_RESPONSE) { setCheckBox(LLNotifications::instance().getGlobalString("alwayschoose"), ignore_label); } }
static void event_loop(Display *dpy, Window win) { while (1) { while (XPending(dpy) > 0) { XEvent event; XNextEvent(dpy, &event); switch (event.type) { case Expose: /* we'll redraw below */ break; case ConfigureNotify: reshape(event.xconfigure.width, event.xconfigure.height); break; case KeyPress: { char buffer[10]; int r, code; code = XLookupKeysym(&event.xkey, 0); if (code == XK_Left) { view_roty += 5.0; } else if (code == XK_Right) { view_roty -= 5.0; } else if (code == XK_Up) { view_rotx += 5.0; } else if (code == XK_Down) { view_rotx -= 5.0; } else { r = XLookupString(&event.xkey, buffer, sizeof(buffer), NULL, NULL); if (buffer[0] == 27) { /* escape */ return; } } } } } /* next frame */ angle += 2.0; draw(); glXSwapBuffers(dpy, win); /* calc framerate */ { static int t0 = -1; static int frames = 0; int t = current_time(); if (t0 < 0) t0 = t; frames++; if (t - t0 >= 5.0) { GLfloat seconds = t - t0; GLfloat fps = frames / seconds; printf("%d frames in %3.1f seconds = %6.3f FPS\n", frames, seconds, fps); t0 = t; frames = 0; } } } }
//////////////////////////////////////////////////////////////////////////////// // inherited from LLViewerMediaObserver //virtual void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) { switch(event) { case MEDIA_EVENT_CONTENT_UPDATED: { // LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CONTENT_UPDATED " << LL_ENDL; }; break; case MEDIA_EVENT_TIME_DURATION_UPDATED: { // LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_TIME_DURATION_UPDATED, time is " << self->getCurrentTime() << " of " << self->getDuration() << LL_ENDL; }; break; case MEDIA_EVENT_SIZE_CHANGED: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_SIZE_CHANGED " << LL_ENDL; LLRect r = getRect(); reshape( r.getWidth(), r.getHeight(), FALSE ); }; break; case MEDIA_EVENT_CURSOR_CHANGED: { LL_INFOS("Media") << "Media event: MEDIA_EVENT_CURSOR_CHANGED, new cursor is " << self->getCursorName() << LL_ENDL; std::string cursor = self->getCursorName(); if(cursor == "arrow") mLastSetCursor = UI_CURSOR_ARROW; else if(cursor == "ibeam") mLastSetCursor = UI_CURSOR_IBEAM; else if(cursor == "splith") mLastSetCursor = UI_CURSOR_SIZEWE; else if(cursor == "splitv") mLastSetCursor = UI_CURSOR_SIZENS; else if(cursor == "hand") mLastSetCursor = UI_CURSOR_HAND; else // for anything else, default to the arrow mLastSetCursor = UI_CURSOR_ARROW; }; break; case MEDIA_EVENT_NAVIGATE_BEGIN: { LL_INFOS("Media") << "Media event: MEDIA_EVENT_NAVIGATE_BEGIN, url is " << self->getNavigateURI() << LL_ENDL; if(mMediaSource && mHideLoading) { mMediaSource->suspendUpdates(true); } }; break; case MEDIA_EVENT_NAVIGATE_COMPLETE: { LL_INFOS("Media") << "Media event: MEDIA_EVENT_NAVIGATE_COMPLETE, result string is: " << self->getNavigateResultString() << LL_ENDL; if(mMediaSource && mHideLoading) { mMediaSource->suspendUpdates(false); } }; break; case MEDIA_EVENT_PROGRESS_UPDATED: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_PROGRESS_UPDATED, loading at " << self->getProgressPercent() << "%" << LL_ENDL; }; break; case MEDIA_EVENT_STATUS_TEXT_CHANGED: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_STATUS_TEXT_CHANGED, new status text is: " << self->getStatusText() << LL_ENDL; }; break; case MEDIA_EVENT_LOCATION_CHANGED: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_LOCATION_CHANGED, new uri is: " << self->getLocation() << LL_ENDL; }; break; case MEDIA_EVENT_CLICK_LINK_HREF: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << self->getClickTarget() << "\", uri is " << self->getClickURL() << LL_ENDL; onClickLinkHref(self); }; break; case MEDIA_EVENT_CLICK_LINK_NOFOLLOW: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLICK_LINK_NOFOLLOW, uri is " << self->getClickURL() << LL_ENDL; onClickLinkNoFollow(self); }; break; case MEDIA_EVENT_PLUGIN_FAILED: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_PLUGIN_FAILED" << LL_ENDL; }; break; case MEDIA_EVENT_PLUGIN_FAILED_LAUNCH: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_PLUGIN_FAILED_LAUNCH" << LL_ENDL; }; break; case MEDIA_EVENT_NAME_CHANGED: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_NAME_CHANGED" << LL_ENDL; }; break; case MEDIA_EVENT_CLOSE_REQUEST: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLOSE_REQUEST" << LL_ENDL; } break; case MEDIA_EVENT_PICK_FILE_REQUEST: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_PICK_FILE_REQUEST" << LL_ENDL; } break; case MEDIA_EVENT_GEOMETRY_CHANGE: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_GEOMETRY_CHANGE, uuid is " << self->getClickUUID() << LL_ENDL; } break; case MEDIA_EVENT_STATUS_CHANGED: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_STATUS_CHANGED" << LL_ENDL; } break; }; // chain all events to any potential observers of this object. emitEvent(self, event); }
int main(int argc, char *argv[]) { unsigned int winWidth = 300, winHeight = 300; int x = 0, y = 0; Display *dpy; Window win; GLXContext ctx; char *dpyName = NULL; GLboolean printInfo = GL_FALSE; VisualID visId; int i; for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-display") == 0) { dpyName = argv[i+1]; i++; } else if (strcmp(argv[i], "-info") == 0) { printInfo = GL_TRUE; } else if (strcmp(argv[i], "-stereo") == 0) { stereo = GL_TRUE; } else if (i < argc-1 && strcmp(argv[i], "-samples") == 0) { samples = strtod(argv[i+1], NULL ); ++i; } else if (strcmp(argv[i], "-fullscreen") == 0) { fullscreen = GL_TRUE; } else if (i < argc-1 && strcmp(argv[i], "-geometry") == 0) { XParseGeometry(argv[i+1], &x, &y, &winWidth, &winHeight); i++; } else { usage(); return -1; } } dpy = XOpenDisplay(dpyName); if (!dpy) { printf("Error: couldn't open display %s\n", dpyName ? dpyName : getenv("DISPLAY")); return -1; } if (fullscreen) { int scrnum = DefaultScreen(dpy); x = 0; y = 0; winWidth = DisplayWidth(dpy, scrnum); winHeight = DisplayHeight(dpy, scrnum); } make_window(dpy, "glxgears", x, y, winWidth, winHeight, &win, &ctx, &visId); XMapWindow(dpy, win); glXMakeCurrent(dpy, win, ctx); query_vsync(dpy, win); if (printInfo) { printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION)); printf("GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR)); printf("GL_EXTENSIONS = %s\n", (char *) glGetString(GL_EXTENSIONS)); printf("VisualID %d, 0x%x\n", (int) visId, (int) visId); } init(); /* Set initial projection/viewing transformation. * We can't be sure we'll get a ConfigureNotify event when the window * first appears. */ reshape(winWidth, winHeight); event_loop(dpy, win); glDeleteLists(gear1, 1); glDeleteLists(gear2, 1); glDeleteLists(gear3, 1); glXMakeCurrent(dpy, None, NULL); glXDestroyContext(dpy, ctx); XDestroyWindow(dpy, win); XCloseDisplay(dpy); return 0; }
void CollocationIntegrator::setupFG() { // Interpolation order deg_ = getOption("interpolation_order"); // All collocation time points std::vector<long double> tau_root = collocationPointsL(deg_, getOption("collocation_scheme")); // Coefficients of the collocation equation vector<vector<double> > C(deg_+1, vector<double>(deg_+1, 0)); // Coefficients of the continuity equation vector<double> D(deg_+1, 0); // Coefficients of the quadratures vector<double> B(deg_+1, 0); // For all collocation points for (int j=0; j<deg_+1; ++j) { // Construct Lagrange polynomials to get the polynomial basis at the collocation point Polynomial p = 1; for (int r=0; r<deg_+1; ++r) { if (r!=j) { p *= Polynomial(-tau_root[r], 1)/(tau_root[j]-tau_root[r]); } } // Evaluate the polynomial at the final time to get the // coefficients of the continuity equation D[j] = zeroIfSmall(p(1.0L)); // Evaluate the time derivative of the polynomial at all collocation points to // get the coefficients of the continuity equation Polynomial dp = p.derivative(); for (int r=0; r<deg_+1; ++r) { C[j][r] = zeroIfSmall(dp(tau_root[r])); } // Integrate polynomial to get the coefficients of the quadratures Polynomial ip = p.anti_derivative(); B[j] = zeroIfSmall(ip(1.0L)); } // Symbolic inputs MX x0 = MX::sym("x0", f_.input(DAE_X).sparsity()); MX p = MX::sym("p", f_.input(DAE_P).sparsity()); MX t = MX::sym("t", f_.input(DAE_T).sparsity()); // Implicitly defined variables (z and x) MX v = MX::sym("v", deg_*(nx_+nz_)); vector<int> v_offset(1, 0); for (int d=0; d<deg_; ++d) { v_offset.push_back(v_offset.back()+nx_); v_offset.push_back(v_offset.back()+nz_); } vector<MX> vv = vertsplit(v, v_offset); vector<MX>::const_iterator vv_it = vv.begin(); // Collocated states vector<MX> x(deg_+1), z(deg_+1); for (int d=1; d<=deg_; ++d) { x[d] = reshape(*vv_it++, this->x0().shape()); z[d] = reshape(*vv_it++, this->z0().shape()); } casadi_assert(vv_it==vv.end()); // Collocation time points vector<MX> tt(deg_+1); for (int d=0; d<=deg_; ++d) { tt[d] = t + h_*tau_root[d]; } // Equations that implicitly define v vector<MX> eq; // Quadratures MX qf = MX::zeros(f_.output(DAE_QUAD).sparsity()); // End state MX xf = D[0]*x0; // For all collocation points for (int j=1; j<deg_+1; ++j) { //for (int j=deg_; j>=1; --j) { // Evaluate the DAE vector<MX> f_arg(DAE_NUM_IN); f_arg[DAE_T] = tt[j]; f_arg[DAE_P] = p; f_arg[DAE_X] = x[j]; f_arg[DAE_Z] = z[j]; vector<MX> f_res = f_.call(f_arg); // Get an expression for the state derivative at the collocation point MX xp_j = C[0][j] * x0; for (int r=1; r<deg_+1; ++r) { xp_j += C[r][j] * x[r]; } // Add collocation equation eq.push_back(vec(h_*f_res[DAE_ODE] - xp_j)); // Add the algebraic conditions eq.push_back(vec(f_res[DAE_ALG])); // Add contribution to the final state xf += D[j]*x[j]; // Add contribution to quadratures qf += (B[j]*h_)*f_res[DAE_QUAD]; } // Form forward discrete time dynamics vector<MX> F_in(DAE_NUM_IN); F_in[DAE_T] = t; F_in[DAE_X] = x0; F_in[DAE_P] = p; F_in[DAE_Z] = v; vector<MX> F_out(DAE_NUM_OUT); F_out[DAE_ODE] = xf; F_out[DAE_ALG] = vertcat(eq); F_out[DAE_QUAD] = qf; F_ = MXFunction(F_in, F_out); F_.init(); // Backwards dynamics // NOTE: The following is derived so that it will give the exact adjoint // sensitivities whenever g is the reverse mode derivative of f. if (!g_.isNull()) { // Symbolic inputs MX rx0 = MX::sym("x0", g_.input(RDAE_RX).sparsity()); MX rp = MX::sym("p", g_.input(RDAE_RP).sparsity()); // Implicitly defined variables (rz and rx) MX rv = MX::sym("v", deg_*(nrx_+nrz_)); vector<int> rv_offset(1, 0); for (int d=0; d<deg_; ++d) { rv_offset.push_back(rv_offset.back()+nrx_); rv_offset.push_back(rv_offset.back()+nrz_); } vector<MX> rvv = vertsplit(rv, rv_offset); vector<MX>::const_iterator rvv_it = rvv.begin(); // Collocated states vector<MX> rx(deg_+1), rz(deg_+1); for (int d=1; d<=deg_; ++d) { rx[d] = reshape(*rvv_it++, this->rx0().shape()); rz[d] = reshape(*rvv_it++, this->rz0().shape()); } casadi_assert(rvv_it==rvv.end()); // Equations that implicitly define v eq.clear(); // Quadratures MX rqf = MX::zeros(g_.output(RDAE_QUAD).sparsity()); // End state MX rxf = D[0]*rx0; // For all collocation points for (int j=1; j<deg_+1; ++j) { // Evaluate the backward DAE vector<MX> g_arg(RDAE_NUM_IN); g_arg[RDAE_T] = tt[j]; g_arg[RDAE_P] = p; g_arg[RDAE_X] = x[j]; g_arg[RDAE_Z] = z[j]; g_arg[RDAE_RX] = rx[j]; g_arg[RDAE_RZ] = rz[j]; g_arg[RDAE_RP] = rp; vector<MX> g_res = g_.call(g_arg); // Get an expression for the state derivative at the collocation point MX rxp_j = -D[j]*rx0; for (int r=1; r<deg_+1; ++r) { rxp_j += (B[r]*C[j][r]) * rx[r]; } // Add collocation equation eq.push_back(vec(h_*B[j]*g_res[RDAE_ODE] - rxp_j)); // Add the algebraic conditions eq.push_back(vec(g_res[RDAE_ALG])); // Add contribution to the final state rxf += -B[j]*C[0][j]*rx[j]; // Add contribution to quadratures rqf += h_*B[j]*g_res[RDAE_QUAD]; } // Form backward discrete time dynamics vector<MX> G_in(RDAE_NUM_IN); G_in[RDAE_T] = t; G_in[RDAE_X] = x0; G_in[RDAE_P] = p; G_in[RDAE_Z] = v; G_in[RDAE_RX] = rx0; G_in[RDAE_RP] = rp; G_in[RDAE_RZ] = rv; vector<MX> G_out(RDAE_NUM_OUT); G_out[RDAE_ODE] = rxf; G_out[RDAE_ALG] = vertcat(eq); G_out[RDAE_QUAD] = rqf; G_ = MXFunction(G_in, G_out); G_.init(); } }
void LLFloaterStats::buildStats() { LLRect rect; LLStatBar *stat_barp; // // Viewer advanced stats // LLStatView *stat_viewp = NULL; // // Viewer Basic // stat_viewp = new LLStatView("basic stat view", "Basic", "OpenDebugStatBasic", rect); addStatView(stat_viewp); stat_barp = stat_viewp->addStat("FPS", &(LLViewerStats::getInstance()->mFPSStat), "DebugStatModeFPS", TRUE, TRUE); stat_barp->setUnitLabel(" fps"); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 45.f; stat_barp->mTickSpacing = 7.5f; stat_barp->mLabelSpacing = 15.f; stat_barp->mPrecision = 1; stat_barp = stat_viewp->addStat("Bandwidth", &(LLViewerStats::getInstance()->mKBitStat), "DebugStatModeBandwidth", TRUE, FALSE); stat_barp->setUnitLabel(" kbps"); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 900.f; stat_barp->mTickSpacing = 100.f; stat_barp->mLabelSpacing = 300.f; stat_barp = stat_viewp->addStat("Packet Loss", &(LLViewerStats::getInstance()->mPacketsLostPercentStat), "DebugStatModePacketLoss"); stat_barp->setUnitLabel(" %"); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 5.f; stat_barp->mTickSpacing = 1.f; stat_barp->mLabelSpacing = 1.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = TRUE; stat_barp->mPrecision = 1; stat_barp = stat_viewp->addStat("Ping Sim", &(LLViewerStats::getInstance()->mSimPingStat), "DebugStatMode"); stat_barp->setUnitLabel(" msec"); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 1000.f; stat_barp->mTickSpacing = 100.f; stat_barp->mLabelSpacing = 200.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_viewp = new LLStatView("advanced stat view", "Advanced", "OpenDebugStatAdvanced", rect); addStatView(stat_viewp); LLStatView *render_statviewp = stat_viewp->addStatView("render stat view", "Render", "OpenDebugStatRender", rect); stat_barp = render_statviewp->addStat("KTris Drawn", &(gPipeline.mTrianglesDrawnStat), "DebugStatModeKTrisDrawnFr"); stat_barp->setUnitLabel("/fr"); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 500.f; stat_barp->mTickSpacing = 100.f; stat_barp->mLabelSpacing = 500.f; stat_barp->mPrecision = 1; stat_barp->mPerSec = FALSE; stat_barp = render_statviewp->addStat("KTris Drawn", &(gPipeline.mTrianglesDrawnStat), "DebugStatModeKTrisDrawnSec"); stat_barp->setUnitLabel("/sec"); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 3000.f; stat_barp->mTickSpacing = 250.f; stat_barp->mLabelSpacing = 1000.f; stat_barp->mPrecision = 1; stat_barp = render_statviewp->addStat("Total Objs", &(gObjectList.mNumObjectsStat), "DebugStatModeTotalObjs"); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 10000.f; stat_barp->mTickSpacing = 2500.f; stat_barp->mLabelSpacing = 5000.f; stat_barp->mPerSec = FALSE; stat_barp = render_statviewp->addStat("New Objs", &(gObjectList.mNumNewObjectsStat), "DebugStatModeNewObjs"); stat_barp->setLabel("New Objs"); stat_barp->setUnitLabel("/sec"); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 1000.f; stat_barp->mTickSpacing = 100.f; stat_barp->mLabelSpacing = 500.f; stat_barp->mPerSec = TRUE; // Texture statistics LLStatView *texture_statviewp = render_statviewp->addStatView("texture stat view", "Texture", "OpenDebugStatTexture", rect); stat_barp = texture_statviewp->addStat("Count", &(gImageList.sNumImagesStat), "DebugStatModeTextureCount"); stat_barp->setUnitLabel(""); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 8000.f; stat_barp->mTickSpacing = 2000.f; stat_barp->mLabelSpacing = 4000.f; stat_barp->mPerSec = FALSE; stat_barp = texture_statviewp->addStat("Raw Count", &(gImageList.sNumRawImagesStat), "DebugStatModeRawCount"); stat_barp->setUnitLabel(""); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 8000.f; stat_barp->mTickSpacing = 2000.f; stat_barp->mLabelSpacing = 4000.f; stat_barp->mPerSec = FALSE; stat_barp = texture_statviewp->addStat("GL Mem", &(gImageList.sGLTexMemStat), "DebugStatModeGLMem"); stat_barp->setUnitLabel(""); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 400.f; stat_barp->mTickSpacing = 100.f; stat_barp->mLabelSpacing = 200.f; stat_barp->mPrecision = 1; stat_barp->mPerSec = FALSE; stat_barp = texture_statviewp->addStat("Formatted Mem", &(gImageList.sFormattedMemStat), "DebugStatModeFormattedMem"); stat_barp->setUnitLabel(""); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 400.f; stat_barp->mTickSpacing = 100.f; stat_barp->mLabelSpacing = 200.f; stat_barp->mPrecision = 1; stat_barp->mPerSec = FALSE; stat_barp = texture_statviewp->addStat("Raw Mem", &(gImageList.sRawMemStat), "DebugStatModeRawMem"); stat_barp->setUnitLabel(""); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 400.f; stat_barp->mTickSpacing = 100.f; stat_barp->mLabelSpacing = 200.f; stat_barp->mPrecision = 1; stat_barp->mPerSec = FALSE; stat_barp = texture_statviewp->addStat("Bound Mem", &(gImageList.sGLBoundMemStat), "DebugStatModeBoundMem"); stat_barp->setUnitLabel(""); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 400.f; stat_barp->mTickSpacing = 100.f; stat_barp->mLabelSpacing = 200.f; stat_barp->mPrecision = 1; stat_barp->mPerSec = FALSE; // Network statistics LLStatView *net_statviewp = stat_viewp->addStatView("network stat view", "Network", "OpenDebugStatNet", rect); stat_barp = net_statviewp->addStat("Packets In", &(LLViewerStats::getInstance()->mPacketsInStat), "DebugStatModePacketsIn"); stat_barp->setUnitLabel("/sec"); stat_barp = net_statviewp->addStat("Packets Out", &(LLViewerStats::getInstance()->mPacketsOutStat), "DebugStatModePacketsOut"); stat_barp->setUnitLabel("/sec"); stat_barp = net_statviewp->addStat("Objects", &(LLViewerStats::getInstance()->mObjectKBitStat), "DebugStatModeObjects"); stat_barp->setUnitLabel(" kbps"); stat_barp = net_statviewp->addStat("Texture", &(LLViewerStats::getInstance()->mTextureKBitStat), "DebugStatModeTexture"); stat_barp->setUnitLabel(" kbps"); stat_barp = net_statviewp->addStat("Asset", &(LLViewerStats::getInstance()->mAssetKBitStat), "DebugStatModeAsset"); stat_barp->setUnitLabel(" kbps"); stat_barp = net_statviewp->addStat("Layers", &(LLViewerStats::getInstance()->mLayersKBitStat), "DebugStatModeLayers"); stat_barp->setUnitLabel(" kbps"); stat_barp = net_statviewp->addStat("Actual In", &(LLViewerStats::getInstance()->mActualInKBitStat), "DebugStatModeActualIn", TRUE, FALSE); stat_barp->setUnitLabel(" kbps"); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 1024.f; stat_barp->mTickSpacing = 128.f; stat_barp->mLabelSpacing = 256.f; stat_barp = net_statviewp->addStat("Actual Out", &(LLViewerStats::getInstance()->mActualOutKBitStat), "DebugStatModeActualOut", TRUE, FALSE); stat_barp->setUnitLabel(" kbps"); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 512.f; stat_barp->mTickSpacing = 128.f; stat_barp->mLabelSpacing = 256.f; stat_barp = net_statviewp->addStat("VFS Pending Ops", &(LLViewerStats::getInstance()->mVFSPendingOperations), "DebugStatModeVFSPendingOps"); stat_barp->setUnitLabel(" "); stat_barp->mPerSec = FALSE; // Simulator stats LLStatView *sim_statviewp = new LLStatView("sim stat view", "Simulator", "OpenDebugStatSim", rect); addStatView(sim_statviewp); stat_barp = sim_statviewp->addStat("Time Dilation", &(LLViewerStats::getInstance()->mSimTimeDilation), "DebugStatModeTimeDialation"); stat_barp->mPrecision = 2; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 1.f; stat_barp->mTickSpacing = 0.25f; stat_barp->mLabelSpacing = 0.5f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_statviewp->addStat("Sim FPS", &(LLViewerStats::getInstance()->mSimFPS), "DebugStatModeSimFPS"); stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 200.f; stat_barp->mTickSpacing = 20.f; stat_barp->mLabelSpacing = 100.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_statviewp->addStat("Physics FPS", &(LLViewerStats::getInstance()->mSimPhysicsFPS), "DebugStatModePhysicsFPS"); stat_barp->mPrecision = 1; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 66.f; stat_barp->mTickSpacing = 33.f; stat_barp->mLabelSpacing = 33.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; LLStatView *phys_details_viewp = sim_statviewp->addStatView("phys detail view", "Physics Details", "OpenDebugStatPhysicsDetails", rect); stat_barp = phys_details_viewp->addStat("Pinned Objects", &(LLViewerStats::getInstance()->mPhysicsPinnedTasks), "DebugStatModePinnedObjects"); stat_barp->mPrecision = 0; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 500.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 40.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = phys_details_viewp->addStat("Low LOD Objects", &(LLViewerStats::getInstance()->mPhysicsLODTasks), "DebugStatModeLowLODObjects"); stat_barp->mPrecision = 0; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 500.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 40.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = phys_details_viewp->addStat("Memory Allocated", &(LLViewerStats::getInstance()->mPhysicsMemoryAllocated), "DebugStatModeMemoryAllocated"); stat_barp->setUnitLabel(" MB"); stat_barp->mPrecision = 0; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 1024.f; stat_barp->mTickSpacing = 128.f; stat_barp->mLabelSpacing = 256.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_statviewp->addStat("Agent Updates/Sec", &(LLViewerStats::getInstance()->mSimAgentUPS), "DebugStatModeAgentUpdatesSec"); stat_barp->mPrecision = 1; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 100.f; stat_barp->mTickSpacing = 25.f; stat_barp->mLabelSpacing = 50.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_statviewp->addStat("Main Agents", &(LLViewerStats::getInstance()->mSimMainAgents), "DebugStatModeMainAgents"); stat_barp->mPrecision = 0; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 80.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 40.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_statviewp->addStat("Child Agents", &(LLViewerStats::getInstance()->mSimChildAgents), "DebugStatModeChildAgents"); stat_barp->mPrecision = 0; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 40.f; stat_barp->mTickSpacing = 5.f; stat_barp->mLabelSpacing = 10.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_statviewp->addStat("Objects", &(LLViewerStats::getInstance()->mSimObjects), "DebugStatModeSimObjects"); stat_barp->mPrecision = 0; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 30000.f; stat_barp->mTickSpacing = 5000.f; stat_barp->mLabelSpacing = 10000.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_statviewp->addStat("Active Objects", &(LLViewerStats::getInstance()->mSimActiveObjects), "DebugStatModeSimActiveObjects"); stat_barp->mPrecision = 0; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 800.f; stat_barp->mTickSpacing = 100.f; stat_barp->mLabelSpacing = 200.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_statviewp->addStat("Active Scripts", &(LLViewerStats::getInstance()->mSimActiveScripts), "DebugStatModeSimActiveScripts"); stat_barp->mPrecision = 0; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 800.f; stat_barp->mTickSpacing = 100.f; stat_barp->mLabelSpacing = 200.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_statviewp->addStat("Script Events", &(LLViewerStats::getInstance()->mSimScriptEPS), "DebugStatModeSimScriptEvents"); stat_barp->setUnitLabel(" eps"); stat_barp->mPrecision = 0; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 20000.f; stat_barp->mTickSpacing = 2500.f; stat_barp->mLabelSpacing = 5000.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_statviewp->addStat("Packets In", &(LLViewerStats::getInstance()->mSimInPPS), "DebugStatModeSimInPPS"); stat_barp->setUnitLabel(" pps"); stat_barp->mPrecision = 0; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 2000.f; stat_barp->mTickSpacing = 250.f; stat_barp->mLabelSpacing = 1000.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_statviewp->addStat("Packets Out", &(LLViewerStats::getInstance()->mSimOutPPS), "DebugStatModeSimOutPPS"); stat_barp->setUnitLabel(" pps"); stat_barp->mPrecision = 0; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 2000.f; stat_barp->mTickSpacing = 250.f; stat_barp->mLabelSpacing = 1000.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_statviewp->addStat("Pending Downloads", &(LLViewerStats::getInstance()->mSimPendingDownloads), "DebugStatModeSimPendingDownloads"); stat_barp->mPrecision = 0; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 800.f; stat_barp->mTickSpacing = 100.f; stat_barp->mLabelSpacing = 200.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_statviewp->addStat("Pending Uploads", &(LLViewerStats::getInstance()->mSimPendingUploads), "SimPendingUploads"); stat_barp->mPrecision = 0; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 100.f; stat_barp->mTickSpacing = 25.f; stat_barp->mLabelSpacing = 50.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_statviewp->addStat("Total Unacked Bytes", &(LLViewerStats::getInstance()->mSimTotalUnackedBytes), "DebugStatModeSimTotalUnackedBytes"); stat_barp->setUnitLabel(" kb"); stat_barp->mPrecision = 0; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 100000.f; stat_barp->mTickSpacing = 25000.f; stat_barp->mLabelSpacing = 50000.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; LLStatView *sim_time_viewp = sim_statviewp->addStatView("sim perf view", "Time (ms)", "OpenDebugStatSimTime", rect); stat_barp = sim_time_viewp->addStat("Total Frame Time", &(LLViewerStats::getInstance()->mSimFrameMsec), "DebugStatModeSimFrameMsec"); stat_barp->setUnitLabel("ms"); stat_barp->mPrecision = 1; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 40.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 20.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_time_viewp->addStat("Net Time", &(LLViewerStats::getInstance()->mSimNetMsec), "DebugStatModeSimNetMsec"); stat_barp->setUnitLabel("ms"); stat_barp->mPrecision = 1; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 40.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 20.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_time_viewp->addStat("Physics Time", &(LLViewerStats::getInstance()->mSimSimPhysicsMsec), "DebugStatModeSimSimPhysicsMsec"); stat_barp->setUnitLabel("ms"); stat_barp->mPrecision = 1; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 40.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 20.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_time_viewp->addStat("Simulation Time", &(LLViewerStats::getInstance()->mSimSimOtherMsec), "DebugStatModeSimSimOtherMsec"); stat_barp->setUnitLabel("ms"); stat_barp->mPrecision = 1; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 40.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 20.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_time_viewp->addStat("Agent Time", &(LLViewerStats::getInstance()->mSimAgentMsec), "DebugStatModeSimAgentMsec"); stat_barp->setUnitLabel("ms"); stat_barp->mPrecision = 1; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 40.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 20.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_time_viewp->addStat("Images Time", &(LLViewerStats::getInstance()->mSimImagesMsec), "DebugStatModeSimImagesMsec"); stat_barp->setUnitLabel("ms"); stat_barp->mPrecision = 1; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 40.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 20.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_time_viewp->addStat("Script Time", &(LLViewerStats::getInstance()->mSimScriptMsec), "DebugStatModeSimScriptMsec"); stat_barp->setUnitLabel("ms"); //Chalice - Enhanced Script Time precision stat_barp->mPrecision = 3; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 40.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 20.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = sim_time_viewp->addStat("Spare Time", &(LLViewerStats::getInstance()->mSimSpareMsec), "DebugStatModeSimSpareMsec"); stat_barp->setUnitLabel("ms"); stat_barp->mPrecision = 1; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 40.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 20.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; // 2nd level time blocks under 'Details' second LLStatView *detailed_time_viewp = sim_time_viewp->addStatView("sim perf view", "Time Details (ms)", "OpenDebugStatSimTimeDetails", rect); { stat_barp = detailed_time_viewp->addStat(" Physics Step", &(LLViewerStats::getInstance()->mSimSimPhysicsStepMsec), "DebugStatModeSimSimPhysicsStepMsec"); stat_barp->setUnitLabel("ms"); stat_barp->mPrecision = 1; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 40.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 20.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = detailed_time_viewp->addStat(" Update Physics Shapes", &(LLViewerStats::getInstance()->mSimSimPhysicsShapeUpdateMsec), "DebugStatModeSimSimPhysicsShapeUpdateMsec"); stat_barp->setUnitLabel("ms"); stat_barp->mPrecision = 1; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 40.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 20.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = detailed_time_viewp->addStat(" Physics Other", &(LLViewerStats::getInstance()->mSimSimPhysicsOtherMsec), "DebugStatModeSimSimPhysicsOtherMsec"); stat_barp->setUnitLabel("ms"); stat_barp->mPrecision = 1; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 40.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 20.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = detailed_time_viewp->addStat(" Sleep Time", &(LLViewerStats::getInstance()->mSimSleepMsec), "DebugStatModeSimSleepMsec"); stat_barp->setUnitLabel("ms"); stat_barp->mPrecision = 1; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 40.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 20.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; stat_barp = detailed_time_viewp->addStat(" Pump IO", &(LLViewerStats::getInstance()->mSimPumpIOMsec), "DebugStatModeSimPumpIOMsec"); stat_barp->setUnitLabel("ms"); stat_barp->mPrecision = 1; stat_barp->mMinBar = 0.f; stat_barp->mMaxBar = 40.f; stat_barp->mTickSpacing = 10.f; stat_barp->mLabelSpacing = 20.f; stat_barp->mPerSec = FALSE; stat_barp->mDisplayMean = FALSE; } LLRect r = getRect(); // Reshape based on the parameters we set. reshape(r.getWidth(), r.getHeight()); }
BOOL LLCheckBoxCtrl::setLabelArg( const LLString& key, const LLStringExplicit& text ) { BOOL res = mLabel->setTextArg(key, text); reshape(getRect().getWidth(), getRect().getHeight(), FALSE); return res; }
// virtual void LLFloaterStats::onOpen() { LLFloater::onOpen(); gSavedSettings.setBOOL("ShowDebugStats", TRUE); reshape(getRect().getWidth(), getRect().getHeight()); }
//--------------------------------------------------------------------------- // Public methods //--------------------------------------------------------------------------- LLPanelLogin::LLPanelLogin(const LLRect &rect, void (*callback)(S32 option, void* user_data), void *cb_data) : LLPanel(std::string("panel_login"), LLRect(0,600,800,0), FALSE), // not bordered mLogoImage(), mCallback(callback), mCallbackData(cb_data) { setFocusRoot(TRUE); setBackgroundVisible(FALSE); setBackgroundOpaque(TRUE); gViewerWindow->abortShowProgress(); //Kill previous instance. It might still be alive, and if so, its probably pending //deletion via the progressviews idle callback. Kill it now and unregister said idle callback. LLPanelLogin::sInstance = this; // add to front so we are the bottom-most child gViewerWindow->getRootView()->addChildInBack(this); // Logo mLogoImage = LLUI::getUIImage("startup_logo.j2c"); LLUICtrlFactory::getInstance()->buildPanel(this, "panel_login.xml"); reshape(rect.getWidth(), rect.getHeight()); LLComboBox* username_combo(getChild<LLComboBox>("username_combo")); username_combo->setCommitCallback(boost::bind(LLPanelLogin::onSelectLoginEntry, _1, this)); username_combo->setFocusLostCallback(boost::bind(&LLPanelLogin::onLoginComboLostFocus, this, username_combo)); username_combo->setPrevalidate(LLLineEditor::prevalidatePrintableNotPipe); username_combo->setSuppressTentative(true); username_combo->setSuppressAutoComplete(true); childSetCommitCallback("remember_name_check", onNameCheckChanged); LLLineEditor* password_edit(getChild<LLLineEditor>("password_edit")); password_edit->setKeystrokeCallback(onPassKey); // STEAM-14: When user presses Enter with this field in focus, initiate login password_edit->setCommitCallback(mungePassword, this); password_edit->setDrawAsterixes(TRUE); // change z sort of clickable text to be behind buttons sendChildToBack(getChildView("channel_text")); sendChildToBack(getChildView("forgot_password_text")); //llinfos << " url history: " << LLSDOStreamer<LLSDXMLFormatter>(LLURLHistory::getURLHistory("regionuri")) << llendl; LLComboBox* location_combo = getChild<LLComboBox>("start_location_combo"); updateLocationSelectorsVisibility(); // separate so that it can be called from preferences location_combo->setAllowTextEntry(TRUE, 128, FALSE); location_combo->setFocusLostCallback( boost::bind(&LLPanelLogin::onLocationSLURL, this) ); LLComboBox *server_choice_combo = getChild<LLComboBox>("grids_combo"); server_choice_combo->setCommitCallback(boost::bind(&LLPanelLogin::onSelectGrid, _1)); server_choice_combo->setFocusLostCallback(boost::bind(&LLPanelLogin::onSelectGrid, server_choice_combo)); // Load all of the grids, sorted, and then add a bar and the current grid at the top updateGridCombo(); LLSLURL start_slurl(LLStartUp::getStartSLURL()); if ( !start_slurl.isSpatial() ) // has a start been established by the command line or NextLoginLocation ? { // no, so get the preference setting std::string defaultStartLocation = gSavedSettings.getString("LoginLocation"); LL_INFOS("AppInit")<<"default LoginLocation '"<<defaultStartLocation<<"'"<<LL_ENDL; LLSLURL defaultStart(defaultStartLocation); if ( defaultStart.isSpatial() ) { LLStartUp::setStartSLURL(defaultStart); // calls onUpdateStartSLURL } else { LL_INFOS("AppInit")<<"no valid LoginLocation, using home"<<LL_ENDL; LLSLURL homeStart(LLSLURL::SIM_LOCATION_HOME); LLStartUp::setStartSLURL(homeStart); // calls onUpdateStartSLURL } } else { LLPanelLogin::onUpdateStartSLURL(start_slurl); // updates grid if needed } childSetAction("connect_btn", onClickConnect, this); setDefaultBtn("connect_btn"); // Also set default button for subpanels, otherwise hitting enter in text entry fields won't login { LLButton* connect_btn(findChild<LLButton>("connect_btn")); findChild<LLPanel>("name_panel")->setDefaultBtn(connect_btn); findChild<LLPanel>("password_panel")->setDefaultBtn(connect_btn); findChild<LLPanel>("grids_panel")->setDefaultBtn(connect_btn); findChild<LLPanel>("location_panel")->setDefaultBtn(connect_btn); findChild<LLPanel>("login_html")->setDefaultBtn(connect_btn); } childSetAction("grids_btn", onClickGrids, this); std::string channel = gVersionChannel; std::string version = llformat("%d.%d.%d (%d)", gVersionMajor, gVersionMinor, gVersionPatch, LL_VIEWER_BUILD ); LLTextBox* channel_text = getChild<LLTextBox>("channel_text"); channel_text->setTextArg("[CHANNEL]", channel); // though not displayed channel_text->setTextArg("[VERSION]", version); channel_text->setClickedCallback(boost::bind(&LLPanelLogin::onClickVersion,(void*)NULL)); LLTextBox* forgot_password_text = getChild<LLTextBox>("forgot_password_text"); forgot_password_text->setClickedCallback(boost::bind(&onClickForgotPassword)); LLTextBox* create_new_account_text = getChild<LLTextBox>("create_new_account_text"); create_new_account_text->setClickedCallback(boost::bind(&onClickNewAccount)); // get the web browser control LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html"); web_browser->addObserver(this); web_browser->setBackgroundColor(LLColor4::black); reshapeBrowser(); refreshLoginPage(); gHippoGridManager->setCurrentGridChangeCallback(boost::bind(&LLPanelLogin::onCurGridChange,this,_1,_2)); }
int main(int argc, char **argv) { if (argc == 2) { gridDim = atoi(argv[1]); if (gridDim != 0) { if (gridDim > 128) { printf("Grid dimension must be 128 or less.\n"); } else if (gridDim < 0) { printf("Grid dimension must be a positive number.\n"); } else { printf("Using user-specified grid dimension of %d.\n", gridDim); userDim = true; } } else { printf("Invalid grid dimension: %d\n", gridDim); } } SDL_Surface *screen = NULL; SDL_FreeSurface(screen); int done; // Initialize SDL_Init(SDL_INIT_VIDEO); // TODO: Remove. #ifndef __OGL3 glutInit(&argc, argv); #endif // Enable double-buffering SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); // Create a OpenGL window screen = SDL_SetVideoMode(WIDTH, HEIGHT, 0, SDL_OPENGL | SDL_RESIZABLE); if( ! screen ) { printf("Couldn't set %dx%d GL video mode: %s\n", WIDTH, HEIGHT, SDL_GetError()); SDL_Quit(); exit(2); } SDL_WM_SetCaption(WINDOW_TITLE, WINDOW_TITLE); // ##### INSERT ANY ARGUMENT (PARAMETER) PARSING CODE HERE // Initialize the OpenGL context init(screen->w, screen->h); generate(); // The main loop done = 0; while(!done) { SDL_Event event = SDL_Event(); // Respond to any events that occur while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_VIDEORESIZE: screen = SDL_SetVideoMode(event.resize.w, event.resize.h, 0, SDL_OPENGL|SDL_RESIZABLE); if(screen) { reshape(screen->w, screen->h); } else { ; // Oops, we couldn't resize for some reason. This should never happen } break; case SDL_QUIT: done = 1; break; // ##### INSERT CODE TO HANDLE ANY OTHER EVENTS HERE ##### case SDL_KEYDOWN: switch(event.key.keysym.sym){ case SDLK_a: showGrid = !showGrid; break; // Check for escape case SDLK_q: done = 1; break; default: break; } } } // Draw the screen render(); } // Clean up and quit delete vol; glDeleteBuffers(1, &vboId); SDL_Quit(); return 0; }
void Racing::loop(float timeStep) { int width, height; bool joy_left_turn = false; bool joy_right_turn = false; double joy_turn_fact = 0.0; bool joy_paddling = false; bool joy_braking = false; bool joy_tricks = false; bool joy_charging = false; bool airborne; pp::Vec3d dir; float speed; float terrain_weights[NUM_TERRAIN_TYPES]; int new_terrain = 0; int slide_volume; unsigned int i; if (Benchmark::getMode() == Benchmark::AUTO){ m_paddling = true; } dir = players[0].vel; speed = dir.normalize(); //set max_speed if (speed > players[0].max_speed) players[0].max_speed=int(speed); airborne = (bool) ( players[0].pos.y > ( find_y_coord(players[0].pos.x, players[0].pos.z) + JUMP_MAX_START_HEIGHT ) ); width = getparam_x_resolution(); height = getparam_y_resolution(); fpsCounter.update(); update_audio(); clear_rendering_context(); fogPlane.setup(); // Joystick if ( is_joystick_active() ) { float joy_x; float joy_y; update_joystick(); joy_x = get_joystick_x_axis(); joy_y = get_joystick_y_axis(); if ( joy_x > 0.1 ) { joy_right_turn = true; joy_turn_fact = joy_x; } else if ( joy_x < -0.1 ) { joy_left_turn = true; joy_turn_fact = joy_x; } if ( getparam_joystick_brake_button() >= 0 ) { joy_braking = is_joystick_button_down( getparam_joystick_brake_button() ); } if ( !joy_braking ) { joy_braking = (bool) ( joy_y > 0.5 ); } if ( getparam_joystick_paddle_button() >= 0 ) { joy_paddling = is_joystick_button_down( getparam_joystick_paddle_button() ); } if ( !joy_paddling ) { joy_paddling = (bool) ( joy_y < -0.5 ); } if ( getparam_joystick_jump_button() >= 0 ) { joy_charging = is_joystick_button_down( getparam_joystick_jump_button() ); } if ( getparam_joystick_trick_button() >= 0 ) { joy_tricks = is_joystick_button_down( getparam_joystick_trick_button() ); } } // Update braking players[0].control.is_braking = (bool) ( m_braking || joy_braking ); if ( airborne ) { new_terrain = (1<<4); // Tricks if ( m_trickModifier || joy_tricks ) { if ( m_leftTurn || joy_left_turn ) { players[0].control.barrel_roll_left = true; } if ( m_rightTurn || joy_right_turn ) { players[0].control.barrel_roll_right = true; } if ( m_paddling || joy_paddling ) { players[0].control.front_flip = true; } if ( players[0].control.is_braking ) { players[0].control.back_flip = true; } } for(i=0;i<num_terrains;i++){ if ( !terrain_texture[i].sound.empty() && terrain_texture[i].soundactive==true) { halt_sound( terrain_texture[i].sound.c_str() ); terrain_texture[i].soundactive=false; } } } else { get_surface_type(players[0].pos.x, players[0].pos.z, terrain_weights); //Play sliding sound slide_volume = int(MIN( (((pow(players[0].control.turn_fact, 2)*128)) + (players[0].control.is_braking?128:0) + (players[0].control.jumping?128:0) + 20) * (speed/10), 128 )); for(i=0;i<num_terrains;i++){ if ( !terrain_texture[i].sound.empty() ) { if (terrain_weights[i] > 0 ){ set_sound_volume(terrain_texture[i].sound.c_str(), int(slide_volume * terrain_weights[i])); if (terrain_texture[i].soundactive==false){ play_sound(terrain_texture[i].sound.c_str() , -1 ); terrain_texture[i].soundactive=true; } } else if (terrain_texture[i].soundactive==true){ halt_sound( terrain_texture[i].sound.c_str() ); terrain_texture[i].soundactive=false; } } } } // Jumping calcJumpAmt( timeStep ); if ( ( m_charging || joy_charging ) && !players[0].control.jump_charging && !players[0].control.jumping ) { players[0].control.jump_charging = true; m_chargeStartTime = gameMgr->time; } if ( ( !m_charging && !joy_charging ) && players[0].control.jump_charging ) { players[0].control.jump_charging = false; players[0].control.begin_jump = true; } // Turning if ( ( m_leftTurn || joy_left_turn ) ^ (m_rightTurn || joy_right_turn ) ) { bool turning_left = (bool) ( m_leftTurn || joy_left_turn ); if ( joy_left_turn || joy_right_turn ) { players[0].control.turn_fact = joy_turn_fact; } else { players[0].control.turn_fact = (turning_left?-1:1); } players[0].control.turn_animation += (turning_left?-1:1) * 0.15 * timeStep / 0.05; players[0].control.turn_animation = MIN(1.0, MAX(-1.0, players[0].control.turn_animation)); } else { players[0].control.turn_fact = 0; // Decay turn animation if ( timeStep < ROLL_DECAY_TIME_CONSTANT ) { players[0].control.turn_animation *= 1.0 - timeStep/ROLL_DECAY_TIME_CONSTANT; } else { players[0].control.turn_animation = 0.0; } } //Paddling if ( ( m_paddling || joy_paddling ) && players[0].control.is_paddling == false ) { players[0].control.is_paddling = true; players[0].control.paddle_time = gameMgr->time; } //Play flying sound if (new_terrain & (1<<4)) { set_sound_volume("flying_sound", int(MIN(128, speed*2))); if (!(m_lastTerrain & (1<<4))) { play_sound( "flying_sound", -1 ); } } else { if (m_lastTerrain & (1<<4)) { halt_sound( "flying_sound" ); } } m_lastTerrain = new_terrain; //Tricks if ( players[0].control.barrel_roll_left || players[0].control.barrel_roll_right ) { players[0].control.barrel_roll_factor += ( players[0].control.barrel_roll_left ? -1 : 1 ) * 0.15 * timeStep / 0.05; if ( (players[0].control.barrel_roll_factor > 1) || (players[0].control.barrel_roll_factor < -1) ) { players[0].control.barrel_roll_factor = 0; players[0].control.barrel_roll_left = players[0].control.barrel_roll_right = false; } } if ( players[0].control.front_flip || players[0].control.back_flip ) { players[0].control.flip_factor += ( players[0].control.back_flip ? -1 : 1 ) * 0.15 * timeStep / 0.05; if ( (players[0].control.flip_factor > 1) || (players[0].control.flip_factor < -1) ) { players[0].control.flip_factor = 0; players[0].control.front_flip = players[0].control.back_flip = false; } } update_player_pos( players[0], timeStep ); //Track Marks add_track_mark( players[0] ); update_view( players[0], timeStep ); setup_view_frustum( players[0], NEAR_CLIP_DIST, getparam_forward_clip_distance() ); draw_sky(players[0].view.pos); draw_fog_plane(); set_course_clipping( true ); set_course_eye_point( players[0].view.pos ); setup_course_lighting(); render_course(); //Draw snow update_snow( timeStep, false, players[0].view.pos ); draw_snow(players[0].view.pos); draw_trees(); if ( getparam_draw_particles() ) { update_particles( timeStep ); draw_particles( players[0] ); } ModelHndl->draw_tux(); draw_tux_shadow(); HUD1.draw(players[0]); reshape( width, height ); winsys_swap_buffers(); gameMgr->time += timeStep; if (airborne) gameMgr->airbornetime += timeStep; if(Benchmark::getMode() == Benchmark::PAUSED){ set_game_mode(PAUSED); } }
void keys_input(unsigned char key, int x, int y) { keycontrol(key); // maybe some graphical values have changed reshape(win_width, win_height); }