version 1.1 | | version 1.2 |
---|
| | |
#include <stdio.h> | | #include <stdio.h> |
#include <string.h> | | #include <string.h> |
#include <vga.h> | | #include <vga.h> |
| | #include <vgagl.h> |
#include "gr.h" | | #include "gr.h" |
#include "grdef.h" | | #include "grdef.h" |
#include "palette.h" | | #include "palette.h" |
#include "u_mem.h" | | #include "u_mem.h" |
#include "error.h" | | #include "error.h" |
| | #ifdef SVGALIB_INPUT |
| | #include <vgamouse.h> |
| | #endif |
| | |
int gr_installed = 0; | | int gr_installed = 0; |
| | int usebuffer; |
| | |
| | extern void mouse_handler (int button, int dx, int dy, int dz, int drx, int dry, int drz); |
| | |
| | GraphicsContext *physicalscreen, *screenbuffer; |
| | |
void gr_update() | | void gr_update() |
{ | | { |
//added 05/19/99 Matt Mueller - locking stuff | | if (usebuffer) |
// gr_testunlock(); | | gl_copyscreen(physicalscreen); |
//end addition -MM | | |
} | | } |
| | |
int gr_set_mode(int mode) | | int gr_set_mode(int mode) |
{ | | { |
unsigned int w, h, r, t; | | unsigned int w, h, r; |
char vgamode[16]; | | char vgamode[16]; |
vga_modeinfo *modeinfo; | | vga_modeinfo *modeinfo; |
| | int modenum, rowsize; |
| | void *framebuffer; |
| | |
#ifdef NOGRAPH | | #ifdef NOGRAPH |
return 0; | | return 0; |
| | |
gr_palette_clear(); | | gr_palette_clear(); |
| | |
sprintf(vgamode, "G%dx%dx256", w, h); | | sprintf(vgamode, "G%dx%dx256", w, h); |
vga_setmode(vga_getmodenumber(vgamode)); | | modenum = vga_getmodenumber(vgamode); |
modeinfo = vga_getmodeinfo(vga_getmodenumber(vgamode)); | | vga_setmode(modenum); |
| | #ifdef SVGALIB_INPUT |
| | mouse_seteventhandler(mouse_handler); |
| | #endif |
| | modeinfo = vga_getmodeinfo(modenum); |
| | |
if (modeinfo->flags & IS_MODEX) | | if (modeinfo->flags & CAPABLE_LINEAR) |
t = BM_MODEX; | | { |
| | usebuffer = 0; |
| | vga_setlinearaddressing(); |
| | framebuffer = vga_getgraphmem(); |
| | rowsize = modeinfo->linewidth; |
| | } |
else | | else |
t = BM_LINEAR; | | { |
| | usebuffer = 1; |
| | gl_setcontextvga(modenum); |
| | physicalscreen = gl_allocatecontext(); |
| | gl_getcontext(physicalscreen); |
| | gl_setcontextvgavirtual(modenum); |
| | screenbuffer = gl_allocatecontext(); |
| | gl_getcontext(screenbuffer); |
| | |
| | framebuffer = screenbuffer->vbuf; |
| | rowsize = w; |
| | } |
| | |
memset(grd_curscreen, 0, sizeof(grs_screen)); | | memset(grd_curscreen, 0, sizeof(grs_screen)); |
grd_curscreen->sc_mode = mode; | | grd_curscreen->sc_mode = mode; |
| | |
grd_curscreen->sc_canvas.cv_bitmap.bm_y = 0; | | grd_curscreen->sc_canvas.cv_bitmap.bm_y = 0; |
grd_curscreen->sc_canvas.cv_bitmap.bm_w = w; | | grd_curscreen->sc_canvas.cv_bitmap.bm_w = w; |
grd_curscreen->sc_canvas.cv_bitmap.bm_h = h; | | grd_curscreen->sc_canvas.cv_bitmap.bm_h = h; |
grd_curscreen->sc_canvas.cv_bitmap.bm_rowsize = r; | | grd_curscreen->sc_canvas.cv_bitmap.bm_rowsize = rowsize; |
grd_curscreen->sc_canvas.cv_bitmap.bm_type = t; | | grd_curscreen->sc_canvas.cv_bitmap.bm_type = BM_LINEAR; |
grd_curscreen->sc_canvas.cv_bitmap.bm_data = (unsigned char *)vga_getgraphmem(); | | grd_curscreen->sc_canvas.cv_bitmap.bm_data = framebuffer; |
gr_set_current_canvas(NULL); | | gr_set_current_canvas(NULL); |
return 0; | | return 0; |
} | | } |
| | |
void modex_setplane(int plane) | | |
{ | | |
if (plane < 0 || plane > 3) | | |
return; | | |
port_out(0x02, 0x3C4); | | |
port_out(1 << plane, 0x3C5); | | |
} | | |
| | |
int gr_init(int mode) | | int gr_init(int mode) |
{ | | { |
int retcode; | | int retcode; |
| | |
memset(grd_curscreen, 0, sizeof(grs_screen)); | | memset(grd_curscreen, 0, sizeof(grs_screen)); |
| | |
vga_init(); | | vga_init(); |
vga_setlinearaddressing(); | | |
| | |
if ((retcode=gr_set_mode(mode))) | | if ((retcode=gr_set_mode(mode))) |
return retcode; | | return retcode; |
| | |
{ | | { |
gr_installed = 0; | | gr_installed = 0; |
free(grd_curscreen); | | free(grd_curscreen); |
| | gl_freecontext(screenbuffer); |
| | gl_freecontext(physicalscreen); |
} | | } |
} | | } |
| | |