int main(int argc, char** argv) { fullscreen = false; grab = false; quit = false; initScreen(); initFrameBuffer(); createGLContext(); createColorMap(); createWindow(); createBlankCursor(); int x = 0; while(x<5000) { renderFrame(); updateWindowTitle(); x++; } /* Cleanup glXDestroyWindow(display, glxwindow); xcb_destroy_window(connection, window); glXDestroyContext(display, context); XCloseDisplay(display); */ return 0; }
bool window_create(const char *caption,int width,int height) { // windowData.display = XOpenDisplay(NULL); if(!windowData.display) { fprintf(stderr,"window_create: Failed to open X display.\n"); return false; } // if(!window_check_glx(windowData.display)) { //todo close display fprintf(stderr,"window_create: Invalid GLX version.\n"); return false; } // int screen; screen = XDefaultScreen(windowData.display); // GLXFBConfig bestFbc=get_gl_bestFbc(windowData.display,screen); // XVisualInfo *vi = glXGetVisualFromFBConfig(windowData.display,bestFbc); if(!vi) { //todo close display fprintf(stderr,"Could not get visual info.\n"); return false; } fprintf(stderr,"Chosen visual ID = 0x%d\n",vi->visualid); Visual *viVisual=vi->visual; int viScreen=vi->screen; int viDepth=vi->depth; XFree(vi); // // int depth = DefaultDepth(windowData.display, screen); // XVisualInfo vi; // XMatchVisualInfo(windowData.display, screen, depth, TrueColor, &vi); // fprintf(stderr,"Chosen visual ID = 0x%d\n",vi.visualid); // visual=vi.visual; // if(!create_window_x11(windowData.display,viScreen,viVisual,viDepth, caption,width,height, &windowData.cmap,&windowData.win)) { //todo close display return false; } // windowData.wmDelete=XInternAtom(windowData.display, "WM_DELETE_WINDOW", True); XSetWMProtocols(windowData.display, windowData.win, &windowData.wmDelete, 1); // windowData.xiopcode=setupXiInput(windowData.display); if(!windowData.xiopcode) { //todo destroy window //todo free colormap //todo close display return false; } // windowData.blankCursor=createBlankCursor(windowData.display,windowData.win); if(!windowData.blankCursor) { //todo destroy xi //todo destroy window //todo free colormap //todo close display return false; } // const char *glxExts = glXQueryExtensionsString(windowData.display,viScreen); if(!isExtensionSupported(glxExts,"GLX_ARB_create_context")) { //todo destroy blank cursor //todo destroy xi //todo destroy window //todo free colormap //todo close display fprintf(stderr,"window_create: glXCreateContextAttribsARB not supported.\n"); return false; } glXCreateContextAttribsARBProc glXCreateContextAttribsARB; glXCreateContextAttribsARB=(glXCreateContextAttribsARBProc) glXGetProcAddressARB((const GLubyte*)"glXCreateContextAttribsARB"); if(!glXCreateContextAttribsARB) { //todo destroy blank cursor //todo destroy xi //todo destroy window //todo free colormap //todo close display fprintf(stderr,"glXCreateContextAttribsARB err.\n"); return false; } // windowData.ctx=0; // if( !window_gl_context(windowData.display,windowData.win, glXCreateContextAttribsARB,bestFbc, &windowData.ctx,3,3,false) && !window_gl_context(windowData.display,windowData.win, glXCreateContextAttribsARB,bestFbc, &windowData.ctx,3,2,false) && !window_gl_context(windowData.display,windowData.win, glXCreateContextAttribsARB,bestFbc, &windowData.ctx,3,1,false) && !window_gl_context(windowData.display,windowData.win, glXCreateContextAttribsARB,bestFbc, &windowData.ctx,3,0,false) && !window_gl_context(windowData.display,windowData.win, glXCreateContextAttribsARB,bestFbc, &windowData.ctx,2,1,false) && !window_gl_context(windowData.display,windowData.win, glXCreateContextAttribsARB,bestFbc, &windowData.ctx,2,0,false)) { //todo destroy blank cursor //todo destroy xi //todo destroy window //todo free colormap //todo close display return false; } // if(!glXIsDirect(windowData.display,windowData.ctx)) { fprintf(stderr,"window_create: Indirect GLX rendering context obtained.\n"); } else { fprintf(stderr,"window_create: Direct GLX rendering context obtained.\n"); } // run_gl_swap_interval(windowData.display); // int i; // windowData.iconic=false; windowData.restored=false; windowData.sized=false; windowData.clientWidth=-1; windowData.clientHeight=-1; windowData.cursorX=0; windowData.cursorY=0; windowData.mouseX=0; windowData.mouseY=0; windowData.mouseZ=0; windowData.lockCursor=false; windowData.cursorLocked=false; for(i=0;i<INPUTS_SIZE;i++) { windowData.inputs[i]=INPUT_UP; } // int event_mask=ButtonPressMask|ButtonReleaseMask| // PointerMotionMask |FocusChangeMask| // EnterWindowMask|LeaveWindowMask; // if(GrabSuccess !=XGrabPointer(windowData.display,windowData.win, True, // event_mask,GrabModeAsync,GrabModeAsync, // windowData.win, None, CurrentTime)) { // printf("grabfail\n"); // } // return true; }