From c4c4213b69b599bcdefe1c7720908fe5884f44b6 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Fri, 15 Feb 2002 14:10:19 +0000 Subject: obsolete --- src/mesa/drivers/dos/DEPEND.DOS | 119 --- src/mesa/drivers/dos/dosmesa.c | 1542 --------------------------------------- 2 files changed, 1661 deletions(-) delete mode 100644 src/mesa/drivers/dos/DEPEND.DOS delete mode 100644 src/mesa/drivers/dos/dosmesa.c (limited to 'src/mesa') diff --git a/src/mesa/drivers/dos/DEPEND.DOS b/src/mesa/drivers/dos/DEPEND.DOS deleted file mode 100644 index 60a0fdcc28..0000000000 --- a/src/mesa/drivers/dos/DEPEND.DOS +++ /dev/null @@ -1,119 +0,0 @@ -# DO NOT DELETE - -accum.obj: accum.h types.h ..\include\GL\gl.h config.h fixed.h dd.h context.h -accum.obj: dlist.h macros.h -alpha.obj: alpha.h types.h ..\include\GL\gl.h config.h fixed.h dd.h context.h -alpha.obj: dlist.h macros.h -alphabuf.obj: alphabuf.h types.h ..\include\GL\gl.h config.h fixed.h dd.h -alphabuf.obj: context.h macros.h -api1.obj: api.h bitmap.h types.h ..\include\GL\gl.h config.h fixed.h dd.h context.h -api1.obj: eval.h image.h macros.h matrix.h teximage.h -api2.obj: api.h bitmap.h types.h ..\include\GL\gl.h config.h fixed.h dd.h context.h -api2.obj: eval.h image.h macros.h matrix.h teximage.h -attrib.obj: attrib.h types.h ..\include\GL\gl.h config.h fixed.h dd.h context.h -attrib.obj: draw.h dlist.h macros.h -bitmap.obj: bitmap.h types.h ..\include\GL\gl.h config.h fixed.h dd.h context.h -bitmap.obj: feedback.h image.h macros.h pb.h -blend.obj: alphabuf.h types.h ..\include\GL\gl.h config.h fixed.h dd.h blend.h -blend.obj: context.h dlist.h macros.h pb.h span.h -bresenhm.obj: bresenhm.h types.h ..\include\GL\gl.h config.h fixed.h dd.h -clip.obj: clip.h types.h ..\include\GL\gl.h config.h fixed.h dd.h context.h -clip.obj: dlist.h macros.h matrix.h vb.h xform.h -context.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h depth.h -context.obj: draw.h eval.h light.h lines.h dlist.h macros.h pb.h points.h -context.obj: pointers.h triangle.h teximage.h texobj.h texture.h vb.h vertex.h -copypix.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h -copypix.obj: copypix.h depth.h feedback.h dlist.h macros.h pixel.h span.h -copypix.obj: stencil.h -depth.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h depth.h -depth.obj: dlist.h macros.h -dlist.obj: accum.h types.h ..\include\GL\gl.h config.h fixed.h dd.h alpha.h -dlist.obj: attrib.h bitmap.h blend.h clip.h context.h copypix.h depth.h draw.h -dlist.obj: drawpix.h enable.h eval.h feedback.h fog.h image.h light.h lines.h -dlist.obj: dlist.h logic.h macros.h masking.h matrix.h misc.h pixel.h points.h -dlist.obj: polygon.h scissor.h stencil.h texobj.h teximage.h texture.h vb.h -dlist.obj: vertex.h winpos.h -draw.obj: clip.h types.h ..\include\GL\gl.h config.h fixed.h dd.h context.h -draw.obj: draw.h feedback.h fog.h light.h lines.h dlist.h macros.h matrix.h -draw.obj: pb.h points.h texture.h vb.h xform.h -drawpix.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h -drawpix.obj: drawpix.h feedback.h dlist.h macros.h pixel.h span.h stencil.h -enable.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h depth.h -enable.obj: draw.h enable.h light.h dlist.h macros.h stencil.h -eval.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h draw.h -eval.obj: eval.h dlist.h macros.h -feedback.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h -feedback.obj: feedback.h dlist.h macros.h -fog.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h fog.h -fog.obj: dlist.h macros.h -get.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h get.h -get.obj: dlist.h macros.h -hash.obj: hash.h -interp.obj: interp.h types.h ..\include\GL\gl.h config.h fixed.h dd.h macros.h -image.obj: image.h types.h ..\include\GL\gl.h config.h fixed.h dd.h macros.h -image.obj: pixel.h -light.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h light.h -light.obj: dlist.h macros.h matrix.h vb.h xform.h -lines.obj: bresenhm.h types.h ..\include\GL\gl.h config.h fixed.h dd.h -lines.obj: context.h feedback.h interp.h lines.h dlist.h macros.h pb.h vb.h -logic.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h dlist.h -logic.obj: logic.h macros.h pb.h -masking.obj: alphabuf.h types.h ..\include\GL\gl.h config.h fixed.h dd.h -masking.obj: context.h macros.h masking.h pb.h -matrix.obj: accum.h types.h ..\include\GL\gl.h config.h fixed.h dd.h alphabuf.h -matrix.obj: context.h depth.h dlist.h macros.h matrix.h stencil.h -misc.obj: accum.h types.h ..\include\GL\gl.h config.h fixed.h dd.h alphabuf.h -misc.obj: context.h depth.h macros.h masking.h misc.h stencil.h -pb.obj: alpha.h types.h ..\include\GL\gl.h config.h fixed.h dd.h alphabuf.h -pb.obj: blend.h depth.h fog.h logic.h macros.h masking.h pb.h scissor.h -pb.obj: stencil.h texture.h -pixel.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h dlist.h -pixel.obj: macros.h pixel.h image.h span.h stencil.h -points.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h -points.obj: feedback.h dlist.h macros.h pb.h span.h vb.h -pointers.obj: accum.h types.h ..\include\GL\gl.h config.h fixed.h dd.h alpha.h -pointers.obj: attrib.h bitmap.h blend.h clip.h context.h copypix.h depth.h -pointers.obj: draw.h drawpix.h enable.h eval.h feedback.h fog.h get.h light.h -pointers.obj: lines.h dlist.h logic.h macros.h masking.h matrix.h misc.h -pointers.obj: pixel.h points.h polygon.h readpix.h scissor.h stencil.h -pointers.obj: teximage.h texobj.h texture.h varray.h vb.h vertex.h winpos.h -polygon.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h -polygon.obj: macros.h polygon.h -readpix.obj: alphabuf.h types.h ..\include\GL\gl.h config.h fixed.h dd.h -readpix.obj: context.h depth.h feedback.h dlist.h macros.h image.h readpix.h -readpix.obj: span.h stencil.h -scissor.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h -scissor.obj: macros.h dlist.h scissor.h -span.obj: alpha.h types.h ..\include\GL\gl.h config.h fixed.h dd.h alphabuf.h -span.obj: blend.h depth.h fog.h logic.h macros.h masking.h scissor.h span.h -span.obj: stencil.h texture.h -stencil.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h dlist.h -stencil.obj: macros.h pb.h stencil.h -teximage.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h -teximage.obj: image.h macros.h pixel.h span.h teximage.h -texobj.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h macros.h -texobj.obj: teximage.h texobj.h -texture.obj: context.h types.h ..\include\GL\gl.h config.h fixed.h dd.h dlist.h -texture.obj: macros.h pb.h teximage.h texture.h -triangle.obj: depth.h types.h ..\include\GL\gl.h config.h fixed.h dd.h -triangle.obj: feedback.h macros.h span.h triangle.h vb.h tritemp.h -varray.obj: draw.h types.h ..\include\GL\gl.h config.h fixed.h dd.h context.h -varray.obj: enable.h dlist.h macros.h varray.h vb.h xform.h -vb.obj: types.h ..\include\GL\gl.h config.h fixed.h dd.h vb.h -vertex.obj: draw.h types.h ..\include\GL\gl.h config.h fixed.h dd.h light.h -vertex.obj: dlist.h macros.h vb.h vertex.h -winpos.obj: ..\include\GL\gl.h draw.h types.h config.h fixed.h dd.h dlist.h -winpos.obj: macros.h winpos.h -xform.obj: types.h ..\include\GL\gl.h config.h fixed.h dd.h xform.h -glx.obj: ..\include\GL\gl.h ..\include\GL\glx.h ..\include\GL\xmesa.h context.h -glx.obj: types.h config.h fixed.h dd.h macros.h xmesaP.h -osmesa.obj: ..\include\GL\osmesa.h ..\include\GL\gl.h context.h types.h -osmesa.obj: config.h fixed.h dd.h depth.h macros.h matrix.h vb.h tritemp.h -xfonts.obj: ..\include\GL\gl.h ..\include\GL\xmesa.h macros.h xmesaP.h types.h -xfonts.obj: config.h fixed.h dd.h context.h -xmesa1.obj: ..\include\GL\xmesa.h ..\include\GL\gl.h xmesaP.h types.h config.h -xmesa1.obj: fixed.h dd.h context.h macros.h matrix.h -xmesa2.obj: ..\include\GL\xmesa.h ..\include\GL\gl.h macros.h types.h config.h -xmesa2.obj: fixed.h dd.h xmesaP.h -xmesa3.obj: bresenhm.h types.h ..\include\GL\gl.h config.h fixed.h dd.h depth.h -xmesa3.obj: interp.h macros.h vb.h xmesaP.h ..\include\GL\xmesa.h tritemp.h diff --git a/src/mesa/drivers/dos/dosmesa.c b/src/mesa/drivers/dos/dosmesa.c deleted file mode 100644 index 6ee7291de1..0000000000 --- a/src/mesa/drivers/dos/dosmesa.c +++ /dev/null @@ -1,1542 +0,0 @@ -/* $Id: dosmesa.c,v 1.4 2001/03/03 20:33:29 brianp Exp $ */ - -/* - * Mesa 3-D graphics library - * Version: 2.3 - * Copyright (C) 1995-1997 Brian Paul - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free - * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - - -/* - * $Log: dosmesa.c,v $ - * Revision 1.4 2001/03/03 20:33:29 brianp - * lots of gl_*() to _mesa_*() namespace clean-up - * - * Revision 1.3 2000/11/22 08:55:52 joukj - * - * - * Modified Files: - * Mesa/src/Allegro/amesa.c Mesa/src/DOS/dosmesa.c - * Mesa/src/FX/fxdd.c Mesa/src/FX/fxdrv.h - * Mesa/src/FX/fxfastpath.c - * Mesa/src/GGI/include/ggi/mesa/ggimesa.h - * Mesa/src/OSmesa/osmesa.c Mesa/src/SVGA/svgamesa.c - * Mesa/src/Trace/tr_control.c Mesa/src/Windows/wgl.c - * Mesa/src/X/xmesaP.h Mesa/src/X86/3dnow.c Mesa/src/X86/katmai.c - * Mesa/src/X86/x86.c - * Removed Files: - * Mesa/src/mms_depend - * - * Oops,... all files containing Caps in directory name or file name were - * missing in my types->mtypes commit. - * - * ---------------------------------------------------------------------- - * - * Revision 1.2 2000/09/26 20:54:10 brianp - * First batch of OpenGL SI related changes: - * Renamed struct gl_context to struct __GLcontextRec. - * Include glcore.h, setup GL imports/exports. - * Replaced gl_ prefix with _mesa_ prefix in context.[ch] functions. - * GLcontext's Visual field is no longer a pointer. - * - * Revision 1.1.1.1 1999/08/19 00:55:41 jtg - * Imported sources - * - * Revision 1.2 1999/03/28 21:11:57 brianp - * updated SetBuffer driver function - * - * Revision 1.1 1999/02/24 03:56:31 brianp - * initial check-in - * - * - * Revision 1.5 1997/06/19 22:00:00 Brian Paul - * Removed all ColorShift stuff - * - * Revision 1.4 1997/06/03 19:00:00 Brian Paul - * Replaced VB->Unclipped[] with VB->ClipMask[] - * - * Revision 1.3 1997/05/28 07:00:00 Phil Frisbie, Jr. - * Now pass red/green/blue/alpha bits to gl_create_visual() - * Fixed DJGPP mode 13 support. - * - * Revision 1.2 1996/12/08 16:13:45 Charlie - * Added VESA support via Scitechs SVGA kit. - * - * Revision 1.1 1996/12/08 16:09:52 Charlie - * Initial revision - * - */ - - -/* - * DOS VGA/VESA/MGL/Mesa interface. - * - */ - -/* - * - * TODO: (cw) - * Improve the colour matcher for rgb non vesa modes, its pretty bad and incorrect - * Keyboard interrupt. - * Comments and tidy up. - * Add support for VESA without SVGAKIT. - * DirectX Support. - * Better GLIDE Support. - * Clear up the #ifdef madness. - */ - -#ifdef DOSVGA - -#if defined(DOSVGA) && !defined(GLIDE) && defined(DJGPP) && !defined(UNIVBE) && !defined(MGL) - -/* Should help cut down on the crazy #if`s */ -#define MODE13 1 - -#else -#undef MODE13 -#endif - -#include -#include -#include -#include -#include - -#ifdef DJGPP -#include -#endif - -#ifdef MGL -#include -#endif - -#include "GL/DOSmesa.h" -#include "context.h" -#include "matrix.h" -#include "mtypes.h" - -#ifdef GLIDE - -static void glideshutdown( void ); -#include "vb.h" -#include "glide.h" - -/* the glide modes available, set one */ - -//#define GLIDE_MODE GR_RESOLUTION_ -#define GLIDE_MODE GR_RESOLUTION_800x600 -//#define GLIDE_MODE GR_RESOLUTION_640x480 - -static GrVertex gr_vtx,gr_vtx1,gr_vtx2; - -#endif - -#ifdef UNIVBE -/* You get this file from Scitechs VESA development kit */ -#include "svga.h" - -/* - Set these to the VESA mode you require, the first is for 256 colour modes, - the other is High colour modes, they must both be the same XRes and YRes. - */ - -#define VESA_256COLOUR_MODE 0x11c -#define VESA_HICOLOUR_MODE 0x11f - -#endif - -struct DOSmesa_context { - GLcontext *gl_ctx; /* the core Mesa context */ - GLvisual *gl_vis; /* describes the color buffer */ - GLframebuffer *gl_buffer; /* the ancillary buffers */ - GLuint index; /* current color index */ - GLint red, green, blue; /* current rgb color */ - GLint width, height; /* size of color buffer */ - GLint depth; /* bits per pixel (8,16,24 or 32) */ -}; - -static DOSMesaContext DOSMesa = NULL; /* the current context */ - -#ifdef UNIVBE -SV_devCtx *DC=NULL; -int useLinear = TRUE; -SV_modeInfo *mi=NULL; -unsigned long modeNumber = 0; - -int activePage = 0; -int visualPage = 1; - -#endif - -#if defined(MODE13) - -/* DOSVGA With no UniVBE support */ - -unsigned char *video_buffer; - -#define VID_BUF(x,y) *(video_buffer+x+(y*320)) - -#if defined(__WATCOMC__) && defined(__386__) && defined(__DOS__) - -void setupcopy(void); -void copyscr(void); - -/* Watcom C specfic, screen copy and clear */ - -#pragma aux setupcopy = \ - ".386P"\ - "push ebp" \ - "mov esi,video_buffer" \ - "mov edi,0xa0000" \ - "mov ecx,2000" \ - "xor ebp,ebp"; - -#pragma aux copyscr = \ - ".386P" \ - "lop1: mov eax,[esi]"\ - "mov ebx,[esi+4]"\ - "mov edx,[esi+8]"\ - "mov [edi],eax"\ - "mov eax,[esi+12]"\ - "mov dword ptr [esi],ebp"\ - "mov dword ptr [esi+4],ebp"\ - "mov dword ptr [esi+8],ebp"\ - "mov dword ptr [esi+12],ebp"\ - "mov [edi+4],ebx"\ - "mov [edi+8],edx"\ - "mov [edi+12],eax"\ - "mov eax,[esi+16]"\ - "mov ebx,[esi+4+16]"\ - "mov edx,[esi+8+16]"\ - "mov [edi+16],eax"\ - "mov eax,[esi+12+16]"\ - "mov dword ptr [esi+16],ebp"\ - "mov dword ptr [esi+4+16],ebp"\ - "mov dword ptr [esi+8+16],ebp"\ - "mov dword ptr [esi+12+16],ebp"\ - "mov [edi+4+16],ebx"\ - "mov [edi+8+16],edx"\ - "mov [edi+12+16],eax"\ - "add esi,32"\ - "add edi,32"\ - "dec ecx"\ - "jnz lop1"\ - "pop ebp"\ - modify exact [edi esi eax ebx ecx] ; - -#endif // WATCOM - -#endif // MODE13 - -/* - * Convert Mesa window Y coordinate to VGA screen Y coordinate: - */ -#define FLIP(Y) (DOSMesa->height-(Y)-1) - -unsigned short vga_cindex = 32768 ; - -static points_func choose_points_function( void ); -static line_func choose_line_function( void ); -static triangle_func choose_polygon_function( void ); -static void fast_tri(GLcontext *ctx,GLuint v0, GLuint v1, GLuint v2, GLuint pv ); - -static points_func choose_points_function( void ) -{ - return NULL; -} - -static line_func choose_line_function( void ) -{ - return NULL; -} - -static triangle_func choose_triangle_function( void ) -{ - #if defined(MODE13) - return NULL; - #endif - - #if defined(GLIDE) - return fast_tri; - #endif - - return NULL; -} - - -#if defined(MODE13) - -void setgfxmode(void); -void settextmode(void); - -#ifndef DJGPP -#pragma aux setgfxmode = \ - "mov ax,13h" \ - "int 10h" \ - modify [eax]; - -#pragma aux settextmode = \ - "mov ax,3h" \ - "int 10h" \ - modify [eax]; -#else -void setgfxmode(void) -{ - union REGS in_regs,out_regs; - - in_regs.x.ax = 0x13; - int386(0x10,&in_regs,&out_regs); -} - -void settextmode(void) -{ - union REGS in_regs,out_regs; - - in_regs.x.ax = 0x3; - int386(0x10,&in_regs,&out_regs); -} - -#endif - -int set_video_mode(unsigned short x,unsigned short y,char mode) -{ - setgfxmode(); - return 1; /* likelyhood of this failing is very small */ -} - -void restore_video_mode(void) -{ - settextmode(); -} - -int vga_getcolors(void) -{ - return vga_cindex; -} - -int vga_getxdim(void) -{ - return 320; -} - -int vga_getydim(void) -{ - return 200; -} - -static unsigned short num_rgb_alloc = 1; /* start from 1, zero is black */ - -/* an unlikely colour */ -static unsigned char last_r=1,last_g=255,last_b=99; - -extern void set_onecolor(int index,int R,int G,int B); - -static unsigned char rgbtable[64][64][64]; - -void vga_setrgbcolor(int r,int g,int b) -{ - -/* - * make this into a translation table - */ - - DOSMesa->red = r; - DOSMesa->green = g ; - DOSMesa->blue = b ; - - r/=4; g/=4; b/=4; - - if( (r == last_r) && (g == last_g) && (b == last_b) ) return; - - last_r = r ; - last_g = g ; - last_b = b ; - - if(r+g+b == 0 ) { - DOSMesa->index = 0 ; - return ; - } - - if( rgbtable[r][g][b] == 0 ) { - /* not allocated yet */ - if(num_rgb_alloc<256) { - DOSMesa->index = num_rgb_alloc; - set_onecolor(num_rgb_alloc,r,g,b); - rgbtable[r][g][b] = num_rgb_alloc; - num_rgb_alloc++; - return; - - } else { - /* need to search for a close colour */ - { - unsigned short pass ; - - for(pass=0;pass<64;pass++) { - if(r-pass>0) { - if( rgbtable[r-pass][g][b] !=0 ) { - rgbtable[r][g][b] = rgbtable[r-pass][g][b]; - DOSMesa->index = rgbtable[r-pass][g][b]; - return; - } - } - if(r+pass<64) { - if( rgbtable[r+pass][g][b] !=0 ) { - rgbtable[r][g][b] = rgbtable[r+pass][g][b]; - DOSMesa->index = rgbtable[r+pass][g][b]; - return; - } - } - } - } - rgbtable[r][g][b] = rand()%255; - } - } - DOSMesa->index = rgbtable[r][g][b]; -} - -#if defined(DJGPP) -static int dos_seg; -#endif - -void vga_clear(void) -{ - -/* Check if we`re using watcom and DOS */ -#if defined(__WATCOMC__) && defined(__386__) && defined(__DOS__) - setupcopy(); - copyscr(); -#else - -#if defined (DJGPP) - - - asm (" - pusha - pushw %es - - movw _dos_seg, %es - - movl _video_buffer, %esi - movl $0xa0000, %edi - - movl $64000, %ecx - - rep ; movsb - - popw %es - popa - "); - -#else - - /* copy the RAM buffer to the Video memory */ - memcpy((unsigned char *)0xa0000,video_buffer, vga_getxdim()*vga_getydim() ); - -#endif //DJGPP - - /* clear the RAM buffer */ - memset(video_buffer,0, vga_getxdim()*vga_getydim() ); - -#endif //WATCOMC - -} - -#ifndef DEBUG -#define vga_drawpixel(x,y) { VID_BUF(x,y) = DOSMesa->index; } -#else -void vga_drawpixel(x,y) -{ - VID_BUF(x,y) = DOSMesa->index; -} -#endif - -int vga_getpixel(int x,int y) -{ - return 1; -} - -void vga_flip(void) -{ - -} - -void vga_setcolor(int index) -{ - /* does something, what i`ve no idea */ - DOSMesa->index = index; - -} - -#endif - -#if defined(UNIVBE) - -/* UniVBE VESA support */ - -void set_video_mode(unsigned short x,unsigned short y,char mode) -{ - if( setup_vesa_mode(x,y,mode) == FALSE ) { - fprintf(stderr,"VESA: Set mode failed\n"); - exit(1); - } -} - -/* - This is problematic as we don`t know what resolution the user program - wants when we reach here. This is why the 256 colour and HiColour modes - should be the same resolution, perhaps i`ll make this an environment - variable - */ - - -void check_mi(void) -{ - if(mi!=0) return; - - if(DC==NULL) { - DC = SV_init( TRUE ); - } - - if(modeNumber == 0 ) { - modeNumber = VESA_HICOLOUR_MODE; - } - - SV_getModeInfo(modeNumber,mi); - - return; -} - -int setup_vesa_mode(short height,short width,short depth) -{ - if(DC==NULL) { - DC = SV_init( TRUE ); - /* how many bits per pixel */ - if( depth == 0) - modeNumber = VESA_256COLOUR_MODE; - else - modeNumber = VESA_HICOLOUR_MODE; - } - - /* Check if correct VESA Version is available */ - if( !DC || DC->VBEVersion < 0x0102) { - fprintf(stderr,"Require a VESA VBE version 1.2 or higher\n"); - return FALSE; - } - - /* Check for LFB Supprt */ - if(DC->VBEVersion < 0x0200 ) { - useLinear = FALSE; - } else { - useLinear = TRUE ; - } - - /* Get desired mode info */ - if(!SV_getModeInfo( modeNumber, mi)) - return FALSE; - - /* Set VESA mode */ - if(!SV_setMode(modeNumber | svMultiBuffer, FALSE, TRUE, mi->NumberOfPages) ) - return FALSE; - - return TRUE; -} - -void restore_video_mode(void) -{ - SV_restoreMode(); -} - -void vga_clear(void) -{ - SV_clear(0); -} - -void vga_flip(void) -{ - activePage = 1-activePage; - visualPage = 1-activePage; - - SV_setActivePage(activePage); - - /* - Change false to true if you`re getting flickering - even in double buffer mode, ( sets wait for Vertical retrace ) - */ - SV_setVisualPage(visualPage,false); -} - -int vga_getcolors(void) -{ - check_mi(); - switch ( mi->BitsPerPixel ) { - case 8: - return 256; - case 15: - case 16: - return 32768; - default: - return 64000; - } -} - -int vga_getxdim(void) -{ - check_mi(); - return mi->XResolution; -} - -int vga_getydim(void) -{ - check_mi(); - return mi->YResolution; -} - -unsigned long current_color = 255; - -void vga_setrgbcolor(int r,int g,int b) -{ - DOSMesa->red = r; - DOSMesa->green = g ; - DOSMesa->blue = b ; - current_color = SV_rgbColor(r,g,b); -} - -void vga_setcolor(int index) -{ - DOSMesa->index = index; - current_color = index; -} - -void vga_drawpixel(x,y) -{ - SV_putPixel(x,y,current_color); -} - -/* TODO: */ -int vga_getpixel(x,y) -{ -/* return (int)SV_getPixel(x,y); */ - fprintf(stderr,"vga_getpixel: Not implemented yet\n"); - return 1; -} - -/* End of UNIVBE section */ -#endif - -/* Scitechs MegaGraphicsLibrary http://www.scitechsoft.com/ */ - -#if defined(MGL) - -/* MGL support */ -struct MI { - unsigned short BitsPerPixel; - unsigned long XResolution; - unsigned long YResolution; -}; - -struct MI*mi; - -static MGLDC*DC; -static int activePage = 0; -static int visualPage = 1; -static int modeNumber = 0; - -void set_video_mode(unsigned short xres,unsigned short yres,char mode) -{ - int i,driver = grDETECT,dmode = grDETECT; - event_t evt; - - /* Start the MGL with only the SVGA 16m driver active */ - MGL_registerDriver(MGL_SVGA16NAME,SVGA16_driver); - if (!MGL_init(&driver,&dmode,"..\\..\\")) - MGL_fatalError(MGL_errorMsg(MGL_result())); - if ((DC = MGL_createDisplayDC(false)) == NULL) - MGL_fatalError(MGL_errorMsg(MGL_result())); - MGL_makeCurrentDC(DC); -} - -/* - This is problematic as we don`t know what resolution the user program - wants when we reach here. This is why the 256 colour and HiColour modes - should be the same resolution, perhaps i`ll make this an environment - variable - */ - -#define MGL_HICOLOUR_MODE 0 - - -void check_mi(void) -{ - if(mi!=0) return; - - if(DC==NULL) { -// DC = SV_init( TRUE ); - } - - if(modeNumber == 0 ) { - modeNumber = MGL_HICOLOUR_MODE; - } - -// SV_getModeInfo(modeNumber,mi); - - return; -} - -void restore_video_mode(void) -{ - MGL_exit(); -} - -void vga_clear(void) -{ - MGL_clearDevice(); -} - -void vga_flip(void) -{ - activePage = 1-activePage; - visualPage = 1-activePage; - -// SV_setActivePage(activePage); - - /* - Change false to true if you`re getting flickering - even in double buffer mode, ( sets wait for Vertical retrace ) - */ -// SV_setVisualPage(visualPage,false); -} - -int vga_getcolors(void) -{ - check_mi(); - switch ( mi->BitsPerPixel ) { - case 8: - return 256; - case 15: - case 16: - return 32768; - default: - return 64000; - } -} - -int vga_getxdim(void) -{ - check_mi(); - return mi->XResolution; -} - -int vga_getydim(void) -{ - check_mi(); - return mi->YResolution; -} - -unsigned long current_color = 255; - -void vga_setrgbcolor(int r,int g,int b) -{ - DOSMesa->red = r; - DOSMesa->green = g ; - DOSMesa->blue = b ; - current_color = MGL_rgbColor(DC,r,g,b); -} - -void vga_setcolor(int index) -{ - DOSMesa->index = index; - current_color = index; -} - -void vga_drawpixel(x,y) -{ - MGL_pixelCoord(x,y); -} - -/* TODO: */ -int vga_getpixel(x,y) -{ -/* return (int)SV_getPixel(x,y); */ - fprintf(stderr,"vga_getpixel: Not implemented yet\n"); - return 1; -} - -/* End of UNIVBE section */ -#endif - -#ifdef GLIDE - -/* GLIDE support */ - -static GrHwConfiguration hwconfig; - -void set_video_mode(unsigned short x,unsigned short y,char mode) -{ - grGlideInit(); - if( grSstQueryHardware( &hwconfig ) ) { - grSstSelect( 0 ) ; - if( !grSstOpen( GLIDE_MODE, - GR_REFRESH_60Hz, - GR_COLORFORMAT_ABGR, - GR_ORIGIN_UPPER_LEFT, - GR_SMOOTHING_ENABLE, - 2 ) ) { - fprintf(stderr,"Detected 3DFX board, but couldn`t initialize!"); - exit(1); - } - - grBufferClear( 0, 0, GR_WDEPTHVALUE_FARTHEST); - - grDisableAllEffects(); - atexit( glideshutdown ); - -// guColorCombineFunction( GR_COLORCOMBINE_ITRGB ); -// grTexCombineFunction( GR_TMU0, GR_TEXTURECOMBINE_ZERO); - } -} - -void restore_video_mode(void) -{ -} - -static void glideshutdown( void ) -{ - grGlideShutdown() ; -} - -void vga_clear(void) -{ - grBufferSwap(0); - grBufferClear( 0, 0, GR_WDEPTHVALUE_FARTHEST); -} - -void vga_flip(void) -{ -} - -int vga_getcolors(void) -{ - return 32768; -} - -int vga_getxdim(void) -{ -#if GLIDE_MODE == GR_RESOLUTION_800x600 - return 800; -#else - return 640; -#endif -} - -int vga_getydim(void) -{ -#if GLIDE_MODE == GR_RESOLUTION_800x600 - return 600; -#else - return 480; -#endif -} - -unsigned long current_color = 255; - -void vga_setrgbcolor(int r,int g,int b) -{ - DOSMesa->red = r; - DOSMesa->green = g ; - DOSMesa->blue = b ; -} - -void vga_setcolor(int index) -{ - DOSMesa->index = index; -} - -void vga_drawpixel(x,y) -{ - - gr_vtx.x = x; - gr_vtx.y = y; - gr_vtx.z = 0; - gr_vtx.r = DOSMesa->red; - gr_vtx.g = DOSMesa->green; - gr_vtx.b = DOSMesa->blue; - - grDrawPoint( &gr_vtx ); -} - -static void fast_tri(GLcontext *ctx,GLuint v0, GLuint v1, GLuint v2, GLuint pv ) -{ - struct vertex_buffer *VB = ctx->VB; - - gr_vtx.z = 0; - gr_vtx1.z = 0; - gr_vtx2.z = 0; - - if (VB->MonoColor) { - gr_vtx.r = DOSMesa->red; - gr_vtx.g = DOSMesa->green; - gr_vtx.b = DOSMesa->blue; - gr_vtx1.r = DOSMesa->red; - gr_vtx1.g = DOSMesa->green; - gr_vtx1.b = DOSMesa->blue; - gr_vtx2.r = DOSMesa->red; - gr_vtx2.g = DOSMesa->green; - gr_vtx2.b = DOSMesa->blue; - } else { - if(ctx->Light.ShadeModel == GL_SMOOTH ) { - gr_vtx.r = FixedToInt( VB->Color[v0][0] ); - gr_vtx.g = FixedToInt( VB->Color[v0][1] ); - gr_vtx.b = FixedToInt( VB->Color[v0][2] ); - - gr_vtx1.r = FixedToInt( VB->Color[v1][0] ); - gr_vtx1.g = FixedToInt( VB->Color[v1][1] ); - gr_vtx1.b = FixedToInt( VB->Color[v1][2] ); - - gr_vtx2.r = FixedToInt( VB->Color[v2][0] ); - gr_vtx2.g = FixedToInt( VB->Color[v2][1] ); - gr_vtx2.b = FixedToInt( VB->Color[v2][2] ); - } else { - gr_vtx.r = VB->Color[pv][0]; - gr_vtx.g = VB->Color[pv][1]; - gr_vtx.b = VB->Color[pv][2]; - - gr_vtx1.r = VB->Color[pv][0]; - gr_vtx1.g = VB->Color[pv][1]; - gr_vtx1.b = VB->Color[pv][2]; - - gr_vtx2.r = VB->Color[pv][0]; - gr_vtx2.g = VB->Color[pv][1]; - gr_vtx2.b = VB->Color[pv][2]; - } - } - - gr_vtx.x = (VB->Win[v0][0] ); - gr_vtx.y = FLIP( (VB->Win[v0][1] ) ); - gr_vtx1.x = (VB->Win[v1][0] ); - gr_vtx1.y = FLIP( (VB->Win[v1][1] ) ); - gr_vtx2.x = (VB->Win[v2][0] ); - gr_vtx2.y = FLIP( (VB->Win[v2][1] ) ); - - if(gr_vtx.x <0 || gr_vtx.x > 639 ) - return; - if(gr_vtx1.x <0 || gr_vtx1.x > 639 ) - return; - if(gr_vtx2.x <0 || gr_vtx2.x > 639 ) - return; - - if(gr_vtx.y <0 || gr_vtx.y > 479 ) - return; - if(gr_vtx1.y <0 || gr_vtx1.y > 479 ) - return; - if(gr_vtx2.y <0 || gr_vtx2.y > 479 ) - return; - - grDrawTriangle( &gr_vtx,&gr_vtx1,&gr_vtx2); -} - -void fast_plot(GLcontext *ctx,GLuint first,GLuint last ) -{ - struct vertex_buffer *VB = ctx->VB; - register GLuint i; - - if(VB->MonoColor) { - /* all same color */ - - gr_vtx.r = DOSMesa->red; - gr_vtx.g = DOSMesa->green; - gr_vtx.b = DOSMesa->blue; - - for(i=first;iClipMask[i]==0) { - gr_vtx.x = VB->Win[i][0]; - gr_vtx.y = FLIP(VB->Win[i][1]); - } - } - } -} - -/* TODO: */ -int vga_getpixel(x,y) -{ -/* return (int)SV_getPixel(x,y); */ - fprintf(stderr,"vga_getpixel: Not implemented yet\n"); - return 1; -} - -/* End of GLIDE section */ - -#endif // GLIDE -/**********************************************************************/ -/***** Miscellaneous functions *****/ -/**********************************************************************/ - - -static void get_buffer_size( GLcontext *ctx, GLuint *width, GLuint *height ) -{ - *width = DOSMesa->width = vga_getxdim(); - *height = DOSMesa->height = vga_getydim(); -} - - -/* Set current color index */ -static void set_index( GLcontext *ctx, GLuint index ) -{ - DOSMesa->index = index; - /*vga_setcolor( index );*/ -} - - -/* Set current drawing color */ -static void set_color( GLcontext *ctx, - GLubyte red, GLubyte green, - GLubyte blue, GLubyte alpha ) -{ - DOSMesa->red = red; - DOSMesa->green = green; - DOSMesa->blue = blue; - vga_setrgbcolor( red, green, blue ); -} - - -static void clear_index( GLcontext *ctx, GLuint index ) -{ - /* TODO: Implements glClearIndex() */ -} - - -static void clear_color( GLcontext *ctx, - GLubyte red, GLubyte green, - GLubyte blue, GLubyte alpha ) -{ - /* TODO: Implements glClearColor() */ -} - - -static void clear( GLcontext *ctx, - GLboolean all, - GLint x, GLint y, GLint width, GLint height ) -{ - vga_clear(); -} - - -static GLboolean set_buffer( GLcontext *ctx, - GLenum mode ) -{ - /* TODO: implement double buffering and use this function to select */ - /* between front and back buffers. */ - if (buffer == GL_FRONT_LEFT) - return GL_TRUE; - else if (buffer == GL_BACK_LEFT) - return GL_TRUE; - else - return GL_FALSE; -} - - - - -/**********************************************************************/ -/***** Write spans of pixels *****/ -/**********************************************************************/ - - -static void write_index_span( GLcontext *ctx, - GLuint n, GLint x, GLint y, - const GLuint index[], - const GLubyte mask[] ) -{ - int i; - y = FLIP(y); -#ifdef UNIVBE - SV_beginPixel(); -#endif - for (i=0;iindex ); -#ifdef UNIVBE - SV_beginPixel(); -#endif - for (i=0;ired, DOSMesa->green, DOSMesa->blue ); - for (i=0; iindex ); -#ifdef UNIVBE - SV_beginPixel(); -#endif - for (i=0; iindex); -#else - vga_drawpixel( x[i], FLIP(y[i]) ); -#endif - } - } -#ifdef UNIVBE - SV_endPixel(); -#endif -} - - - -static void write_color_pixels( GLcontext *ctx, - GLuint n, const GLint x[], const GLint y[], - const GLubyte r[], const GLubyte g[], - const GLubyte b[], const GLubyte a[], - const GLubyte mask[] ) -{ - int i; -#ifdef UNIVBE - SV_beginPixel(); -#endif - for (i=0; ired, DOSMesa->green, DOSMesa->blue ); -#ifdef UNIVBE - SV_beginPixel(); -#endif - for (i=0; iDriver.UpdateState = DOSmesa_setup_DD_pointers; - - ctx->Driver.ClearIndex = clear_index; - ctx->Driver.ClearColor = clear_color; - ctx->Driver.Clear = clear; - - ctx->Driver.Index = set_index; - ctx->Driver.Color = set_color; - - ctx->Driver.SetBuffer = set_buffer; - ctx->Driver.GetBufferSize = get_buffer_size; - - ctx->Driver.PointsFunc = choose_points_function(); - ctx->Driver.LineFunc = choose_line_function(); - ctx->Driver.TriangleFunc = choose_triangle_function(); - - - /* Pixel/span writing functions: */ - /* TODO: use different funcs for 8, 16, 32-bit depths */ - ctx->Driver.WriteColorSpan = write_color_span; - ctx->Driver.WriteMonocolorSpan = write_monocolor_span; - ctx->Driver.WriteColorPixels = write_color_pixels; - ctx->Driver.WriteMonocolorPixels = write_monocolor_pixels; - ctx->Driver.WriteIndexSpan = write_index_span; - ctx->Driver.WriteMonoindexSpan = write_monoindex_span; - ctx->Driver.WriteIndexPixels = write_index_pixels; - ctx->Driver.WriteMonoindexPixels = write_monoindex_pixels; - - /* Pixel/span reading functions: */ - /* TODO: use different funcs for 8, 16, 32-bit depths */ - ctx->Driver.ReadIndexSpan = read_index_span; - ctx->Driver.ReadColorSpan = read_color_span; - ctx->Driver.ReadIndexPixels = read_index_pixels; - ctx->Driver.ReadColorPixels = read_color_pixels; -} - -/* - * Create a new VGA/Mesa context and return a handle to it. - */ -DOSMesaContext DOSMesaCreateContext( void ) -{ - DOSMesaContext ctx; - GLboolean rgb_flag; - GLfloat redscale, greenscale, bluescale, alphascale; - GLboolean db_flag = GL_FALSE; - GLboolean alpha_flag = GL_FALSE; - int colors; - GLint index_bits; - GLint redbits, greenbits, bluebits, alphabits; - -#if !defined(UNIVBE) && !defined(GLIDE) && !defined(MGL) - video_buffer = (unsigned char *) malloc( vga_getxdim() * vga_getydim() ); - - memset(video_buffer,0, vga_getxdim() * vga_getydim() ); - - memset(rgbtable,0,sizeof( rgbtable ) ); -#endif - -#if defined( DJGPP ) && !defined(UNIVBE) && !defined(GLIDE) - dos_seg = _go32_conventional_mem_selector(); -#endif - - /* determine if we're in RGB or color index mode */ - colors = vga_getcolors(); - if (colors==32768) { - rgb_flag = GL_TRUE; - redscale = greenscale = bluescale = alphascale = 255.0; - redbits = greenbits = bluebits = 8; - alphabits = 0; - index_bits = 0; - } - else if (colors==256) { - rgb_flag = GL_FALSE; - redscale = greenscale = bluescale = alphascale = 0.0; - redbits = greenbits = bluebits = alphabits = 0; - index_bits = 8; - } - else { - restore_video_mode(); - fprintf(stderr,"[%d] >16 bit color not implemented yet!\n",colors); - return NULL; - } - - ctx = (DOSMesaContext) calloc( 1, sizeof(struct DOSmesa_context) ); - if (!ctx) { - return NULL; - } - - ctx->gl_vis = _mesa_create_visual( rgb_flag, - db_flag, - GL_FALSE, /* stereo */ - redbits, - greenbits, - bluebits, - alphabits, - index_bits, - 16, /* depth_size */ - 8, /* stencil_size */ - 16, 16, 16, 16, /* accum_size */ - 1 ); - - ctx->gl_ctx = _mesa_create_context( ctx->gl_vis, - NULL, /* share list context */ - (void *) ctx - ); - - ctx->gl_buffer = _mesa_create_framebuffer( ctx->gl_vis ); - - ctx->index = 1; - ctx->red = ctx->green = ctx->blue = 255; - - ctx->width = ctx->height = 0; /* temporary until first "make-current" */ - - return ctx; -} - -/* - * Destroy the given VGA/Mesa context. - */ -void DOSMesaDestroyContext( DOSMesaContext ctx ) -{ - if (ctx) { - _mesa_destroy_visual( ctx->gl_vis ); - _mesa_destroy_context( ctx->gl_ctx ); - _mesa_destroy_framebuffer( ctx->gl_buffer ); - free( ctx ); - if (ctx==DOSMesa) { - DOSMesa = NULL; - } - } -} - - - -/* - * Make the specified VGA/Mesa context the current one. - */ -void DOSMesaMakeCurrent( DOSMesaContext ctx ) -{ - DOSMesa = ctx; - _mesa_make_current( ctx->gl_ctx, ctx->gl_buffer ); - DOSmesa_setup_DD_pointers( ctx->gl_ctx ); - - if (ctx->width==0 || ctx->height==0) { - /* setup initial viewport */ - ctx->width = vga_getxdim(); - ctx->height = vga_getydim(); - _mesa_set_viewport( ctx->gl_ctx, 0, 0, ctx->width, ctx->height ); - } -} - - - -/* - * Return a handle to the current VGA/Mesa context. - */ -DOSMesaContext DOSMesaGetCurrentContext( void ) -{ - return DOSMesa; -} - - -/* - * Swap front/back buffers for current context if double buffered. - */ -void DOSMesaSwapBuffers( void ) -{ -#if !defined(UNIVBE) -/* Assume double buffering is available if in UNIVBE, - if it isn`t its taken care of anyway */ -// if (DOSMesa->gl_vis->DBflag) -#endif - { - vga_flip(); - } -} - - -#else - -/* - * Need this to provide at least one external definition when DOS is - * not defined on the compiler command line. - */ - -int gl_DOS_dummy_function(void) -{ - return 0; -} - -#endif /*DOS*/ - -- cgit v1.2.3