Difference for arch/ogl/gr.c from version 1.18 to 1.19


version 1.18 version 1.19
Line 112
 
Line 112
  }   }
 }  }
   
   const char *gl_vendor,*gl_renderer,*gl_version,*gl_extensions;
   void ogl_get_verinfo(void){
    int t;
    gl_vendor=glGetString(GL_VENDOR);
    gl_renderer=glGetString(GL_RENDERER);
    gl_version=glGetString(GL_VERSION);
    gl_extensions=glGetString(GL_EXTENSIONS);
   
    printf("gl vendor:%s renderer:%s version:%s extensions:%s\n",gl_vendor,gl_renderer,gl_version,gl_extensions);
   
    ogl_intensity4_ok=1;ogl_luminance4_alpha4_ok=1;ogl_rgba2_ok=1;
   
    //add driver specific hacks here.  whee.
    if (stricmp(gl_renderer,"Mesa NVIDIA RIVA 1.0\n")==0 && stricmp(gl_version,"1.2 Mesa 3.0")==0){
    ogl_intensity4_ok=0;//ignores alpha, always black background instead of transparent.
    ogl_readpixels_ok=0;//either just returns all black, or kills the X server entirely
    }
   
    //allow overriding of stuff.
    if ((t=FindArg("-gl_intensity4_ok"))){
    ogl_intensity4_ok=atoi(Args[t+1]);
    }
    if ((t=FindArg("-gl_luminance4_alpha4_ok"))){
    ogl_luminance4_alpha4_ok=atoi(Args[t+1]);
    }
    if ((t=FindArg("-gl_rgba2_ok"))){
    ogl_rgba2_ok=atoi(Args[t+1]);
    }
    if ((t=FindArg("-gl_readpixels_ok"))){
    ogl_readpixels_ok=atoi(Args[t+1]);
    }
   
    printf("gl_intensity4:%i gl_luminance4_alpha4:%i gl_rgba2:%i gl_readpixels:%i\n",ogl_intensity4_ok,ogl_luminance4_alpha4_ok,ogl_rgba2_ok,ogl_readpixels_ok);
   }
   
 int gr_set_mode(int mode)  int gr_set_mode(int mode)
 {  {
  unsigned int w,h, r;   unsigned int w,h, r;
Line 152
 
Line 187
  }   }
  //if (screen != NULL) gr_palette_clear();   //if (screen != NULL) gr_palette_clear();
   
  ogl_init_window(w,h);//platform specific code  
 // ogl_init_state();  // ogl_init_state();
    
  memset( grd_curscreen, 0, sizeof(grs_screen));   memset( grd_curscreen, 0, sizeof(grs_screen));
Line 172
 
Line 206
  gr_set_current_canvas(NULL);   gr_set_current_canvas(NULL);
  //gr_enable_default_palette_loading();   //gr_enable_default_palette_loading();
    
    ogl_init_window(w,h);//platform specific code
   
    ogl_get_verinfo();
   
  OGL_VIEWPORT(0,0,w,h);   OGL_VIEWPORT(0,0,w,h);
   
  ogl_set_screen_mode();   ogl_set_screen_mode();
Line 270
 
Line 308
  ogl_alttexmerge=0;   ogl_alttexmerge=0;
    
  if ((glt=FindArg("-gl_16bittextures")))   if ((glt=FindArg("-gl_16bittextures")))
  ogl_16bittextures=1;   ogl_rgba_format=GL_RGB5_A1;
   
  if ((glt=FindArg("-gl_mipmap"))){   if ((glt=FindArg("-gl_mipmap"))){
  GL_texmagfilt=GL_LINEAR;   GL_texmagfilt=GL_LINEAR;
Line 510
 
Line 548
  f=open(savename,O_CREAT|O_EXCL|O_WRONLY,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);   f=open(savename,O_CREAT|O_EXCL|O_WRONLY,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
 #endif  #endif
  if (f>=0){   if (f>=0){
  GLubyte    targaMagic[12] = { 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 };   GLubyte    targaMagic[12] = { 0, //no identification field
    0,//no colormap
    2,//RGB image (well, BGR, actually)
    0, 0, 0, 0, 0, 0, 0, 0, 0 };//no colormap or image origin stuff.
  GLubyte blah;   GLubyte blah;
  int r;   int r;
  int i=w*h*3;   GLubyte *s;
    int x,y;
   
  //write .TGA header.   //write .TGA header.
  write (f,targaMagic,sizeof(targaMagic));   write (f,targaMagic,sizeof(targaMagic));
Line 522
 
Line 564
  blah=h%256;write (f,&blah,1);//h, low   blah=h%256;write (f,&blah,1);//h, low
  blah=h/256;write (f,&blah,1);//h, high   blah=h/256;write (f,&blah,1);//h, high
  blah=24;write (f,&blah,1);//24 bpp   blah=24;write (f,&blah,1);//24 bpp
  blah=0;write (f,&blah,1);//?   blah=0;write (f,&blah,1);//no attribute bits, origin is lowerleft, no interleave
  while (i>0){  
  i-=3;   s=buf;
  r=write(f,buf+i,3);   for (y=0;y<h;y++){//TGAs use BGR ordering of data.
  if (r<=0){   for (x=0;x<w;x++){
  mprintf((0,"screeshot error, couldn't write to %s (err %i)\n",savename,errno));   blah=s[0];
  break;   s[0]=s[2];
    s[2]=blah;
    s+=3;
    }
  }   }
  else if (r!=3){   x=0;y=w*h*3;
  mprintf((0,"screeshot error, only wrote %i (e %i)\n",r,errno));   while (x<y){
    r=write(f,buf+x,y);
    if (r<=0){
    mprintf((0,"screenshot error, couldn't write to %s (err %i)\n",savename,errno));
  break;   break;
  }   }
 // i-=r;   x+=r;y-=r;
 // buf+=r;  
  }   }
  close(f);   close(f);
  }else{   }else{
  mprintf((0,"screeshot error, couldn't open %s (err %i)\n",savename,errno));   mprintf((0,"screenshot error, couldn't open %s (err %i)\n",savename,errno));
  }   }
 }  }
 //OGL screenshot code.  Doesn't work for me, but I hear the glReadPixels is broken for mesa/glx at least with the beta tnt2 drivers.  all I get is a bunch of zeros.  
 void save_screen_shot(int automap_flag)  void save_screen_shot(int automap_flag)
 {  {
 // fix t1;  // fix t1;
  char message[100];   char message[100];
 // grs_canvas *screen_canv=&grd_curscreen->sc_canvas;  
 // grs_font *save_font;  
  static int savenum=0;   static int savenum=0;
 // grs_canvas *temp_canv,*save_canv  
  char savename[13];   char savename[13];
  unsigned char *buf;   unsigned char *buf;
 // ubyte pal[768];  
 // int w,h,aw,x,y;  
   
  // Can't do screen shots in VR modes.   if (!ogl_readpixels_ok){
 // if ( VR_render_mode != VR_NONE )   if (!automap_flag)
 // return;   hud_message(MSGC_GAME_FEEDBACK,"glReadPixels not supported on your configuration");
    return;
    }
   
  stop_time();   stop_time();
   
 // save_canv = grd_curcanv;  
 // temp_canv = gr_create_canvas(screen_canv->cv_bitmap.bm_w,screen_canv->cv_bitmap.bm_h);  
 // gr_set_current_canvas(temp_canv);  
 // gr_ubitmap(0,0,&screen_canv->cv_bitmap);*/  
   
   
 //added/changed on 10/31/98 by Victor Rachels to fix overwrite each new game  //added/changed on 10/31/98 by Victor Rachels to fix overwrite each new game
  if ( savenum == 9999 ) savenum = 0;   if ( savenum == 9999 ) savenum = 0;
  sprintf(savename,"scrn%04d.tga",savenum++);   sprintf(savename,"scrn%04d.tga",savenum++);
Line 580
 
Line 617
  sprintf( message, "%s '%s'", TXT_DUMPING_SCREEN, savename );   sprintf( message, "%s '%s'", TXT_DUMPING_SCREEN, savename );
 //end this section addition/change - Victor Rachels  //end this section addition/change - Victor Rachels
   
 // gr_set_current_canvas(&VR_screen_pages[VR_current_page]);  
 // x = (VR_screen_pages[VR_current_page].cv_w-w)/2;  
 // y = (VR_screen_pages[VR_current_page].cv_h-h)/2;  
   
  if (automap_flag) {   if (automap_flag) {
 // save_font = grd_curcanv->cv_font;  // save_font = grd_curcanv->cv_font;
 // gr_set_curfont(GAME_FONT);  // gr_set_curfont(GAME_FONT);
Line 591
 
Line 624
 // gr_get_string_size(message,&w,&h,&aw);  // gr_get_string_size(message,&w,&h,&aw);
 // modex_print_message(32, 2, message);  // modex_print_message(32, 2, message);
  } else {   } else {
 // gr_setcolor(gr_find_closest_color_current(0,0,0));  
 // gr_rect(x-2,y-2,x+w+2,y+h+2);  
 // gr_printf(x,y,message);  
 // gr_set_curfont(save_font);  
  hud_message(MSGC_GAME_FEEDBACK,message);   hud_message(MSGC_GAME_FEEDBACK,message);
  }   }
 // t1 = timer_get_fixed_seconds() + F1_0;  
  buf = malloc(grd_curscreen->sc_w*grd_curscreen->sc_h*3);   buf = malloc(grd_curscreen->sc_w*grd_curscreen->sc_h*3);
  glReadBuffer(GL_FRONT);   glReadBuffer(GL_FRONT);
  glReadPixels(0,0,grd_curscreen->sc_w,grd_curscreen->sc_h,GL_RGB,GL_UNSIGNED_BYTE,buf);   glReadPixels(0,0,grd_curscreen->sc_w,grd_curscreen->sc_h,GL_RGB,GL_UNSIGNED_BYTE,buf);
  write_bmp(savename,grd_curscreen->sc_w,grd_curscreen->sc_h,buf);   write_bmp(savename,grd_curscreen->sc_w,grd_curscreen->sc_h,buf);
  free(buf);   free(buf);
   
 // gr_palette_read(pal); //get actual palette from the hardware  
 // pcx_write_bitmap(savename,&temp_canv->cv_bitmap,pal);  
   
 // while ( timer_get_fixed_seconds() < t1 ); // Wait so that messag stays up at least 1 second.  
   
 // gr_set_current_canvas(screen_canv);  
   
 // if (!automap_flag)  
 // gr_ubitmap(0,0,&temp_canv->cv_bitmap);  
   
 // gr_free_canvas(temp_canv);  
   
 // gr_set_current_canvas(save_canv);  
  key_flush();   key_flush();
  start_time();   start_time();
 }  }

Legend:
line(s) removed in v.1.18 
line(s) changed
 line(s) added in v.1.19