version 1.18 | | version 1.19 |
---|
| | |
} | | } |
} | | } |
| | |
| | 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; |
| | |
} | | } |
//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)); |
| | |
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(); |
| | |
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; |
| | |
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)); |
| | |
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++); |
| | |
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); |
| | |
// 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(); |
} | | } |