📄 glwin.c
字号:
return NULL; } w->type = GetMainWindowType(w,w->vInfoMain); if (GLW_IS_INDEX(w->type)) { if (w->vInfoMainClass != StaticColor && w->vInfoMainClass != StaticGray) { w->cMapMain = XCreateColormap(w->display, w->root, w->vInfoMain->visual, AllocAll); } else { w->cMapMain = XCreateColormap(w->display, w->root, w->vInfoMain->visual, AllocNone); } } else { /* alt ging schief fuer MESA auf Xterm w->cMapMain = XCreateColormap(w->display, w->root, w->vInfoMain->visual, AllocNone); */ /* RGB colormap is AllocNone, share the root colormap if possible */ Screen *scr = DefaultScreenOfDisplay(w->display); if (MaxCmapsOfScreen(scr)==1 && w->vInfoMain->visual==DefaultVisual(w->display,w->screen)) { w->cMapMain = DefaultColormap(w->display,w->screen); } else { w->cMapMain = XCreateColormap(w->display, w->root, w->vInfoMain->visual, AllocNone); } }/* PRE-MESA glwSetRGBMap(w,256, colorMaps); */ if (GLW_IS_INDEX(w->type) || w->vInfoMainClass==DirectColor) { glwSetRGBMap(w,256, colorMaps); } if (w->offscreen) create_pixmap(w,overlayFlag); else create_window(w,overlayFlag); if (!glwAttach(w)) { glwDestroy(w); return NULL; } w->isMesa= (strstr(glXGetClientString(w->display,GLX_VENDOR),"Mesa")!=NULL)|| (strstr(glXGetClientString(w->display,GLX_VERSION),"Mesa")!=NULL)|| (strstr(glXQueryServerString(w->display,w->screen,GLX_VENDOR),"Mesa")!=NULL)|| (strstr(glXQueryServerString(w->display,w->screen,GLX_VERSION),"Mesa")!=NULL); glwSetFontSize(w,GLW_DEFAULT_FONT_SIZE); glwSetExposeFunc(w,default_expose_func); glwTrace("window ok"); return w;}static void update_title(glWindow w){ XTextProperty tp; if (w->offscreen) return; if (w->state!=NULL) { sprintf(w->xtitle,"%s [ %s ]",w->title,w->state); XStringListToTextProperty(&w->xtitle, 1, &tp); } else XStringListToTextProperty(&w->title, 1, &tp); XSetWMProperties(w->display, w->wMain, &tp, 0, 0, 0, 0, 0, 0); XFlush(w->display);}void glwShowState(glWindow w, char *state){ if (state!=NULL) { if (w->state==NULL) w->state=(char*)malloc(GLW_NAMELEN); strcpy(w->state,state); } else { free(w->state); w->state=NULL; } update_title(w);}void glwSetTitle(glWindow w, char *title){ strcpy(w->title,title); update_title(w);}char * glwGetTitle(glWindow w){ return w->title;}/*----------------------------------------------------------------*//*----------------------------------------------------------------*//*----------------------------------------------------------------*/void glwStartRecording( glWindow win, char *fileNameStub, int skip ){ FILE *param_file=NULL; FILE *user_param_file=NULL; char *user_param_file_name; user_param_file_name=glwGetDefault(win,"mpegParams",NULL); if (user_param_file_name!=NULL) { user_param_file=fopen(user_param_file_name,"r"); if (user_param_file==NULL) glwError("user parameter file not found"); } param_file=fopen(".glwin.mpeg.param","w"); if (user_param_file==NULL) /* set own default if user parameter file not given */ { fprintf(param_file,"PATTERN IBBPBBPBBPBBPBB\n"); fprintf(param_file,"GOP_SIZE 30\n"); fprintf(param_file,"SLICES_PER_FRAME 1\n"); fprintf(param_file,"PIXEL HALF\n"); fprintf(param_file,"RANGE 10\n"); fprintf(param_file,"PSEARCH_ALG LOGARITHMIC\n"); fprintf(param_file,"BSEARCH_ALG CROSS2\n"); fprintf(param_file,"IQSCALE 8\n"); fprintf(param_file,"PQSCALE 10\n"); fprintf(param_file,"BQSCALE 25\n"); fprintf(param_file,"REFERENCE_FRAME ORIGINAL\n"); } else { while (!feof(user_param_file)) { fgets(glw_string_buffer,GLW_BUFSIZE,user_param_file); fputs(glw_string_buffer,param_file); } fclose(user_param_file); } fprintf(param_file,"BASE_FILE_FORMAT PNM\n"); fprintf(param_file,"INPUT_DIR stdin\n"); fprintf(param_file,"INPUT_CONVERT *\n"); fprintf(param_file,"INPUT\n"); fprintf(param_file,"END_INPUT\n"); fprintf(param_file,"PNM_SIZE %dx%d\n",win->w,win->h); fprintf(param_file,"OUTPUT %s.mpg\n",fileNameStub); fclose(param_file); win->moviepipe=popen("mpeg_encode .glwin.mpeg.param","w"); win->recorded_frame_num=0; win->frame_num=0; win->recording=1; if (skip<0) skip=0; win->skip=skip+1;}void glwStopRecording(glWindow win){ win->recording=0; pclose(win->moviepipe); printf("%d frames recorded\n",win->recorded_frame_num);}#define GLW_SCREEN_WIDTH 2048char pixelbuf[GLW_SCREEN_WIDTH*3];void glwGrabPPM(glWindow win, FILE *f){ register int i; assert(f!=NULL); glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_PACK_SWAP_BYTES, GL_TRUE); fprintf(f, "P6\n"); fprintf(f, "%d %d\n", win->w, win->h); fprintf(f, "%d\n", 255); for(i=1;i<=win->h;i++) { glReadPixels(0, win->h-i, win->w,1, GL_RGB, GL_UNSIGNED_BYTE, pixelbuf); fwrite(pixelbuf, 3, win->w, f); }}void glwGrabPPMAndPrint(glWindow w){ FILE *f; char *command; command=glwGetDefault(w,"printerCommand","pnmtops | lpr"); f=popen(command,"w"); glwGrabPPM(w,f); pclose(f);}void glwDump( glWindow win, void * info, char *fileName, int w, int h ){ FILE *f=fopen(fileName,"w"); glwGrabPPM(win,f); fclose(f);}/*******************************************/void glwRenderFB(glWindow w){ int size=w->fb_initial_size; w->fb_size=0; while (w->fb_size<=0) { w->fb_buffer = calloc(size, sizeof(GLfloat)); if (w->fb_buffer==NULL) { glwError("Not enough memory for feedback buffer"); return; } glFeedbackBuffer(size, GL_3D_COLOR, w->fb_buffer); glRenderMode(GL_FEEDBACK); w->fb_mode=1; (*w->RedrawFunc)(w,w->info); w->fb_mode=0; w->fb_size = glRenderMode(GL_RENDER); /*printf("size=%d, fb_size=%d\n", size,w->fb_size); */ if (w->fb_size<=0) { glwResetFB(w); size=1.5*size; } } w->fb_initial_size=size;}void glwResetFB(glWindow w){ int i; for (i=0;i<GLW_FEEDBACK_MAX_STRINGS;i++) { if (w->fb_strings[i]) free(w->fb_strings[i]); w->fb_strings[i]=NULL; } w->fb_num_strings=0; w->fb_size=0; if (w->fb_buffer!=NULL) free(w->fb_buffer);}float *glwGetFB(glWindow w){ return w->fb_buffer;}int glwGetFBSize(glWindow w){ return w->fb_size;}char *glwGetFBString(glWindow w,int istring){ return w->fb_strings[istring];}double glwGetFBStringSize(glWindow w,int istring){ return w->fb_string_size[istring];}/* * $Log: glwin.c,v $ * Revision 2.49 2000/07/27 12:43:36 schmelze * *** empty log message *** * * Revision 2.48 2000/03/06 14:54:13 fuhrmann * removed toplevel info output * * Revision 2.47 2000/02/22 17:27:06 fuhrmann * * transient_for in glwin * * 0.1a Version of WIASTwoPhase * * Revision 2.46 2000/01/13 17:36:41 fuhrmann * optmized ps output * * Revision 2.45 2000/01/11 16:33:41 fuhrmann * name buffer sizes * * Revision 2.44 1999/11/12 19:50:11 fuhrmann * no abort for X errors * * Revision 2.43 1999/11/10 12:17:21 fuhrmann * sysconlaw.lua, working solve/replay stuff, Append protocol etc. * * Revision 2.42 1999/11/04 17:16:09 philip * string memory bug in glwin * roundoff error in colors in gleps * * Revision 2.41 1999/11/04 16:43:40 philip * removed calloc bug * * Revision 2.40 1999/11/01 18:31:24 fuhrmann * some problem with glXmakecurrent * * Revision 2.39 1999/09/17 16:35:01 fuhrmann * feedback stuff war kaputtrepariert... * * Revision 2.38 1999/09/15 16:16:24 fuhrmann * size_t for feedback buffer * file !=NULL check for dump files * * Revision 2.37 1999/08/19 15:31:46 fuhrmann * strange memory leak in glwDestroy !!! STILL THERE !!! * * Revision 2.36 1999/07/02 10:38:05 fuhrmann * Mesa bug neutralized, gleps reference taken out of glwin * * Revision 2.35 1999/06/30 13:07:50 fuhrmann * font size stuff * * Revision 2.34 1999/06/30 10:55:45 fuhrmann * no exit at token errors * * Revision 2.33 1999/06/30 10:27:25 fuhrmann * some bells &whistles in feedback stuff * * Revision 2.32 1999/06/29 17:56:24 fuhrmann * Feedback buffer is used now... * * Revision 2.31 1999/04/20 17:32:16 fuhrmann * sgi warnings, 3D flux test * * Revision 2.30 1999/04/13 11:43:31 fuhrmann * more thorough checks, k&r stuff deleted * * Revision 2.29 1999/04/08 15:03:15 fuhrmann * glmesh split up * * Revision 2.28 1998/09/04 15:25:48 fuhrmann * skip frame option in StartRecording * * Revision 2.27 1998/07/09 14:39:52 fuhrmann * initialization bug in mpeg stuff removed * * Revision 2.26 1998/07/06 10:45:12 fuhrmann * Increased compiler warning level for all PDELIB-1.7 modules, * removed all bugs, some warnings remain (rcsids, ld_init, unused parameters) * * Revision 2.25 1998/05/18 17:19:27 fuhrmann * if file given in mpeg param ressource is not existent then invoke * default mechanism. * * Revision 2.24 1998/03/11 19:21:04 fuhrmann * Hey we can create batch videos! (still beta, but...) * * Revision 2.23 1998/03/06 16:45:31 fuhrmann * tiff->ppm * print command * video recording * * Revision 2.22 1998/03/05 20:01:24 fuhrmann * interim test version with SGI movie lib : it was a mess... * * Revision 2.21 1998/01/26 11:07:28 schmelze * tests from external working directory, box*test.html * * Revision 2.20 1998/01/14 18:27:34 fuhrmann * Merge mit Ilja * * Revision 2.19 1997/11/27 19:03:09 fuhrmann * glwRecord stuff, PAL-Format, tex-file for keys * * Revision 2.18 1997/11/04 15:53:30 fuhrmann * color scales ; crash with glrnd * * Revision 2.17 1997/10/17 16:54:58 fuhrmann * glwFlush * * Revision 2.16 1997/10/01 15:41:27 fuhrmann * GLW_MOD1 * * Revision 2.15 1997/09/09 17:42:28 fuhrmann * cursor stuff * * Revision 2.14 1997/04/15 08:10:22 fuhrmann * still not clear which font to load... * * Revision 2.13 1997/03/20 18:19:18 fuhrmann * glwGrab in no-tiff case * * Revision 2.12 1997/02/28 17:41:13 fuhrmann * glwGrab code * * Revision 2.11 1997/01/27 14:30:45 fuhrmann * other default font * * Revision 2.10 1996/10/09 16:33:57 fuhrmann * keys next, prev, tab * * Revision 2.9 1996/10/02 11:12:05 fuhrmann * some debugging in visual stuff, no change of algorithm * * Revision 2.8 1996/09/23 17:47:27 fuhrmann * -DUSE_OS_MESA for mesa offscreen contexts * * Revision 2.7 1996/09/19 16:57:34 fuhrmann * typo in glwProcess removed * * Revision 2.6 1996/09/19 16:33:39 fuhrmann * GLW_DEPTH in default mode * redraw first when enterinh glw_process in event mode * * Revision 2.5 1996/09/03 09:22:41 fuhrmann * tiffio.h location changed * * Revision 2.4 1996/09/03 09:09:04 fuhrmann * - fonts & printing characters * - keep aspect ratio * - dump pixmap size can default to window size * * Revision 2.3 1996/08/30 10:47:34 fuhrmann * Default expose function set (glw should redraw in event driven * mode if user has no callbacks set) * * Revision 2.2 1996/04/17 16:47:56 fuhrmann * error in off-screen rendering: PixelAlignment in GL buf was wrong * error in off-screen rendering: wrong count of lines (black upper line in GL dump) fixed * * Revision 2.1 1996/03/12 09:49:27 fuhrmann * Off-screen rendering into memory with large pixmaps using osmesa * * Revision 2.0 1996/02/15 20:26:14 fuhrmann * First meta-stable distribution * * Revision 1.9 1996/02/15 20:25:00 fuhrmann * - Error in return value for glwDump removed * * Revision 1.8 1996/02/15 14:18:20 fuhrmann * - improved behaviour when tiff file not opened * * Revision 1.7 1996/02/09 16:45:02 fuhrmann * - shift keys now part of button mask * - more keysyms available * * Revision 1.6 1996/02/06 09:59:46 fuhrmann * - glwDump ( depends on libtiff.a !) * - glwSetIdleFunc and glwSetDisplayFunc obsolete, * use glwSetRedrawFunc & glwSetControlMode (better to understand) * * Revision 1.5 1996/01/30 18:36:15 fuhrmann * Changed default title to gltools-1.0 * * Revision 1.4 1995/11/08 12:05:39 fuhrmann * glwSetTitle introduced * * Revision 1.3 1995/10/24 18:34:15 fuhrmann * Namelen von 64 auf 128 ??? * Merge mit libtk 1.1 (dmPolicy stuff) vielleicht unnoetig... * * Revision 1.2 1995/10/24 12:40:51 fuhrmann * Zeilennr in glwError * * Revision 1.1 1995/10/20 15:42:03 fuhrmann * Initial revision * */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -