int vid_set_mode(uint32_t mode) { short w, h; #ifdef NOGRAPH return 0; #endif // mode=0; if (mode<=0) return 0; if (mode == Vid_current_mode) return 0; w=SM_W(mode); h=SM_H(mode); Vid_current_mode = mode; //if (screen != NULL) gr_palette_clear(); // ogl_init_state(); gr_init_screen(BM_OGL, w, h, 0, 0, w, NULL); //gr_enable_default_palette_loading(); ogl_init_window(w,h);//platform specific code ogl_get_verinfo(); OGL_VIEWPORT(0,0,w,h); ogl_set_screen_mode(); // gamefont_choose_game_font(w,h); return 0; }
short vga_set_mode(short mode) { int retcode; unsigned int w,h,t,data, r; #if defined(POLY_ACC) if(mode != SM_640x480x15xPA) { Int3(); mprintf((0, "vga_set_mode(%d)\n", mode)); return 0; } #endif LinearSVGABuffer=0; if (!vga_installed) return 1; switch(mode) { case SM_ORIGINAL: return 0; case SM_320x200C: if (!isvga()) return 1; vga_set_misc_mode(0x13); w = 320; r = 320; h = 200; t=BM_LINEAR; data = 0xA0000; break; case SM_640x400V: retcode = vga_vesa_setmode( 0x100 ); //gr_enable_default_palette_loading(); if (retcode !=0 ) return retcode; w = 640; r = 640; h = 400; t=BM_SVGA; data = 0; break; case SM_640x480V: retcode = vga_vesa_setmode( 0x101 ); //gr_enable_default_palette_loading(); if (retcode !=0 ) return retcode; w = 640; r = 640; h = 480; t=BM_SVGA; data = 0; break; case SM_800x600V: retcode = vga_vesa_setmode( 0x103 ); //gr_enable_default_palette_loading(); if (retcode !=0 ) return retcode; w = 800; h = 600; t=BM_SVGA; data = 0; r=VesaGetRowSize (0x103); break; case SM_1024x768V: retcode = vga_vesa_setmode( 0x105 ); //gr_enable_default_palette_loading(); if (retcode !=0 ) return retcode; w = 1024; r = 1024; h = 768; t=BM_SVGA; data = 0; r=VesaGetRowSize (0x105); break; case SM_1280x1024V: retcode = vga_vesa_setmode( 0x107 ); //gr_enable_default_palette_loading(); if (retcode !=0 ) return retcode; w = 1280; r = 1280; h = 1024; t=BM_SVGA; data = 0; r=VesaGetRowSize (0x107); break; case SM_640x480V15: retcode = vga_vesa_setmode( 0x110 ); //gr_enable_default_palette_loading(); if (retcode !=0 ) return retcode; w = 640; r = 640*2; h=480; t=BM_SVGA15; data = 0; break; case SM_800x600V15: retcode = vga_vesa_setmode( 0x113 ); //gr_enable_default_palette_loading(); if (retcode !=0 ) return retcode; w = 800; r = 800*2; h=600; t=BM_SVGA15; data = 0; break; //super-special code for 3dmax high-res mode case SM_320x400_3DMAX: // 3dmax 320x400 if (!isvga()) return 1; gr_set_3dbios_mode(0x31); //w = 320; r = 320/4; h = 400; t=BM_MODEX; data = 0; w = 320; r = 320; h = 400; t=BM_SVGA; data = 0; break; //@@case 19: //@@ if (!isvga()) return 1; //@@ vga_set_misc_mode(0x13); //@@ vga_set_cellheight( 3 ); //@@ w = 320; r = 320; h = 200; t=BM_LINEAR; data = 0xA0000; //@@ break; //@@ //@@case 20: //@@ retcode = vga_vesa_setmode( 0x102 ); //@@ //gr_enable_default_palette_loading(); //@@ if (retcode !=0 ) return retcode; //@@ vga_16_to_256(); //@@ vga_set_linear(); //@@ //gr_set_cellheight( 1 ); //@@ gr_vesa_setlogical( 400 ); //@@ w = 400; r = 400; h = 600; t=BM_SVGA; data = 0; //@@ break; //@@ //@@case 21: //@@ if (!isvga()) return 1; //@@ vga_set_misc_mode(0xd); //@@ vga_16_to_256(); //@@ vga_set_linear(); //@@ //gr_set_cellheight( 3 ); //@@ w = 160; r = 160; h = 200; t=BM_LINEAR; data = 0xA0000; //@@ break; case SM_320x200U: case SM_320x240U: case SM_360x200U: case SM_360x240U: case SM_376x282U: case SM_320x400U: case SM_320x480U: case SM_360x400U: case SM_360x480U: case SM_360x360U: case SM_376x308U: case SM_376x564U: //mode X modes if (!isvga()) return 1; w = gr_modex_setmode( mode ); //gr_enable_default_palette_loading(); h = w & 0xffff; w = w >> 16; r = w / 4;t = BM_MODEX; data = 0; break; #if defined(POLY_ACC) case SM_640x480x15xPA: pa_set_mode(mode); w = 640; r = 640*2; h=480; t=BM_LINEAR15; data = 0; //$$ data should be what? #ifdef PA_3DFX_VOODOO r=2048; #endif break; #endif default: //unknown mode!!! Very bad!! Error("Unknown mode %d in vga_set_mode()",mode); } // if (vga_palette_realized && (vga_prevent_palette_loading==0)) // gr_pal_setblock( 0, 256, gr_palette); // return 0; VGA_current_mode = mode; #if defined(POLY_ACC) vga_screen_addr = pa_get_buffer_address(0); #else if (LinearSVGABuffer) { mprintf ((0,"GREEEEAT!\n")); t=BM_LINEAR; vga_screen_addr=(ubyte *)VesaGetPtr(); } else vga_screen_addr=(ubyte *)0xa0000; #endif gr_palette_clear(); return gr_init_screen( t,w,h,0,0,r,vga_screen_addr); }