From: Brian Paul Date: Thu, 28 Aug 2003 16:57:01 +0000 (+0000) Subject: Updates from Daniel Borca X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=760960028f189e3afcbfef1f877dbd5b86fd1ae4;p=mesa.git Updates from Daniel Borca --- diff --git a/docs/README.DJ b/docs/README.DJ index fe3435e6c13..9fc7a55c634 100644 --- a/docs/README.DJ +++ b/docs/README.DJ @@ -97,7 +97,7 @@ FAQ: A) DXE3 refers to the DJGPP dynamic modules. You'll need either the latest DJGPP distro, or download the separate package from my web page. Read the DXE3 documentation on how to use them. - A) When compiling for Glide (FX=1), make sure `glid3.dxe' can be found in + A) When compiling for Glide (FX=1), make sure `glide3x.dxe' can be found in LD_LIBRARY_PATH (or top `lib' directory). 2. Using Mesa for DJGPP @@ -160,19 +160,19 @@ means that `printf' can be safely called during graphics. A bit of a hack, I know, because all messages come in bulk, but I think it's better than nothing. "Borrowed" from LIBRHUTI (Robert Hoehne). -Window creating defaults: 300x300x16 at (0,0), 16-bit depth, 16-bit accum, -8-bit stencil. However, the video mode is chosen in such a way that first -window will fit. If you need high resolution with small windows, set initial -position far to the right (or way down); then you can move them back to any -position right before the main loop. +Window creating defaults: (0, 0, 300, 300), 16bpp. However, the video mode is +chosen in such a way that first window will fit. If you need high resolution +with small windows, set initial position far to the right (or way down); then +you can move them back to any position right before the main loop. The following environment variables can customize GLUT behaviour: GLUT_FPS - print frames/second statistics to stderr DMESA_GLUT_REFRESH - set vertical screen refresh rate (VESA3) DMESA_GLUT_BPP - set default bits per pixel (VGA needs 8) - DMESA_GLUT_DEPTH - set default depth bits - DMESA_GLUT_STENCIL - set default stencil bits - DMESA_GLUT_ACCUM - set default accum bits + DMESA_GLUT_ALPHA - set default alpha bits (8) + DMESA_GLUT_DEPTH - set default depth bits (16) + DMESA_GLUT_STENCIL - set default stencil bits (8) + DMESA_GLUT_ACCUM - set default accum bits (16) @@ -211,9 +211,10 @@ v1.3 (mar-2003) v1.4 (aug-2003) + enabled GLUT fonts with DXE - + truly added multi-window support in GLUT + + truly added multi-window support in GLUT (for Adrian Woodward) * accomodated makefiles with the new sourcetree - * hacked and slashed the 3dfx driver (w/ help from Hiroshi Morii) + * fixed some ALPHA issues + x hacked and slashed the 3dfx driver (w/ help from Hiroshi Morii) diff --git a/include/GL/dmesa.h b/include/GL/dmesa.h index 7510fdb9f4e..46aa4e22608 100644 --- a/include/GL/dmesa.h +++ b/include/GL/dmesa.h @@ -65,7 +65,7 @@ DMesaVisual DMesaCreateVisual (GLint width, /* X res */ GLint refresh, /* refresh rate: 0=default */ GLboolean dbFlag, /* double-buffered */ GLboolean rgbFlag, /* RGB mode */ - GLboolean alphaFlag,/* alpha buffer requested */ + GLint alphaSize, /* requested bits/alpha */ GLint depthSize, /* requested bits/depth */ GLint stencilSize, /* requested bits/stencil */ GLint accumSize); /* requested bits/accum */ diff --git a/progs/samples/Makefile.DJ b/progs/samples/Makefile.DJ index f8b0ccda48d..2f0f687587b 100644 --- a/progs/samples/Makefile.DJ +++ b/progs/samples/Makefile.DJ @@ -71,7 +71,7 @@ else LDLIBS = -lglut -lglu -lgl ifeq ($(FX),1) LDFLAGS += -L$(GLIDE)/lib -LDLIBS += -lglid3 +LDLIBS += -lgld3x endif endif diff --git a/src/glut/dos/glutint.h b/src/glut/dos/glutint.h index 013b307e941..23ab169d399 100644 --- a/src/glut/dos/glutint.h +++ b/src/glut/dos/glutint.h @@ -103,6 +103,7 @@ extern GLUTidleCB g_idle_func; extern GLUTmenuStatusCB g_menu_status_func; extern GLuint g_bpp; /* HW: bits per pixel */ +extern GLuint g_alpha; /* HW: alpha bits */ extern GLuint g_depth; /* HW: depth bits */ extern GLuint g_stencil; /* HW: stencil bits */ extern GLuint g_accum; /* HW: accum bits */ diff --git a/src/glut/dos/init.c b/src/glut/dos/init.c index 22bab9f8afc..d30f270c646 100644 --- a/src/glut/dos/init.c +++ b/src/glut/dos/init.c @@ -35,6 +35,7 @@ #define DEFAULT_HEIGHT 300 #define DEFAULT_BPP 16 +#define ALPHA_SIZE 8 #define DEPTH_SIZE 16 #define STENCIL_SIZE 8 #define ACCUM_SIZE 16 @@ -42,6 +43,7 @@ GLuint g_bpp = DEFAULT_BPP; +GLuint g_alpha = ALPHA_SIZE; GLuint g_depth = DEPTH_SIZE; GLuint g_stencil = STENCIL_SIZE; GLuint g_accum = ACCUM_SIZE; @@ -67,6 +69,9 @@ void APIENTRY glutInit (int *argc, char **argv) if ((env = getenv("DMESA_GLUT_BPP")) != NULL) { g_bpp = atoi(env); } + if ((env = getenv("DMESA_GLUT_ALPHA")) != NULL) { + g_alpha = atoi(env); + } if ((env = getenv("DMESA_GLUT_DEPTH")) != NULL) { g_depth = atoi(env); } diff --git a/src/glut/dos/window.c b/src/glut/dos/window.c index 06e8ea9ead1..af00897f3e5 100644 --- a/src/glut/dos/window.c +++ b/src/glut/dos/window.c @@ -71,10 +71,10 @@ int APIENTRY glutCreateWindow (const char *title) if ((visual=DMesaCreateVisual(g_init_x + m8width, g_init_y + g_init_h, g_bpp, g_refresh, g_display_mode & GLUT_DOUBLE, !(g_display_mode & GLUT_INDEX), - g_display_mode & GLUT_ALPHA, - g_display_mode & GLUT_DEPTH ? g_depth :0, - g_display_mode & GLUT_STENCIL ? g_stencil:0, - g_display_mode & GLUT_ACCUM ? g_accum :0))==NULL) { + (g_display_mode & GLUT_ALPHA ) ? g_alpha : 0, + (g_display_mode & GLUT_DEPTH ) ? g_depth : 0, + (g_display_mode & GLUT_STENCIL) ? g_stencil : 0, + (g_display_mode & GLUT_ACCUM ) ? g_accum : 0))==NULL) { return 0; } diff --git a/src/mesa/Makefile.DJ b/src/mesa/Makefile.DJ index 893a91bc1cb..a1b11d949be 100644 --- a/src/mesa/Makefile.DJ +++ b/src/mesa/Makefile.DJ @@ -78,13 +78,13 @@ CFLAGS += -I$(TOP)/include -I. -Imain -Iglapi ifeq ($(FX),1) CFLAGS += -D__DOS__ -DH3 CFLAGS += -I$(GLIDE)/include -DFX -LIBNAME = "MesaGL/FX DJGPP" +LIBNAME = "Mesa/FX DJGPP" else ifeq ($(MATROX),1) CFLAGS += -DMATROX -LIBNAME = "MesaGL/MGA DJGPP" +LIBNAME = "Mesa/MGA DJGPP" else -LIBNAME = "MesaGL DJGPP" +LIBNAME = "Mesa DJGPP" endif endif diff --git a/src/mesa/drivers/dos/dmesa.c b/src/mesa/drivers/dos/dmesa.c index 73b47569d9b..5d2cfb8b2bb 100644 --- a/src/mesa/drivers/dos/dmesa.c +++ b/src/mesa/drivers/dos/dmesa.c @@ -73,6 +73,7 @@ struct dmesa_visual { GLvisual gl_visual; GLboolean db_flag; /* double buffered? */ GLboolean rgb_flag; /* RGB mode? */ + GLboolean sw_alpha; /* use Mesa's alpha buffer? */ GLuint depth; /* bits per pixel (1, 8, 24, etc) */ #ifdef MATROX int stride_in_pixels; @@ -1335,7 +1336,7 @@ DMesaVisual DMesaCreateVisual (GLint width, GLint refresh, GLboolean dbFlag, GLboolean rgbFlag, - GLboolean alphaFlag, + GLint alphaSize, GLint depthSize, GLint stencilSize, GLint accumSize) @@ -1343,6 +1344,7 @@ DMesaVisual DMesaCreateVisual (GLint width, #ifndef FX DMesaVisual v; GLint redBits, greenBits, blueBits, alphaBits, indexBits; + GLboolean sw_alpha; #ifndef MATROX if (!dbFlag) { @@ -1370,6 +1372,7 @@ DMesaVisual DMesaCreateVisual (GLint width, blueBits = 8; break; case 15: + alphaBits = 1; redBits = 5; greenBits = 5; blueBits = 5; @@ -1391,6 +1394,23 @@ DMesaVisual DMesaCreateVisual (GLint width, } } + /* Okay, + * `alphaBits' is what we can provide + * `alphaSize' is what app requests + * + * Note that alpha buffering is required only if destination alpha is used + * in alpha blending; alpha blending modes that do not use destination alpha + * can be used w/o alpha buffer. + * + * We will use whatever ALPHA app requests. Later, in `CreateBuffer' we'll + * instruct Mesa to use its own ALPHA buffer, by passing a non-FALSE value + * for ALPHA to `_mesa_initialize_framebuffer'. + * + * Basically, 32bit modes provide ALPHA storage, but can we rely on this? + */ + alphaBits = alphaSize; + sw_alpha = (alphaBits > 0); + #ifndef MATROX if ((colDepth=vl_video_init(width, height, colDepth, rgbFlag, refresh)) <= 0) { return NULL; @@ -1401,10 +1421,6 @@ DMesaVisual DMesaCreateVisual (GLint width, } #endif - if (alphaFlag && (alphaBits==0)) { - alphaBits = 8; - } - if ((v=(DMesaVisual)CALLOC_STRUCT(dmesa_visual)) != NULL) { /* Create core visual */ _mesa_initialize_visual((GLvisual *)v, @@ -1421,12 +1437,13 @@ DMesaVisual DMesaCreateVisual (GLint width, accumSize, /* accumRed */ accumSize, /* accumGreen */ accumSize, /* accumBlue */ - alphaFlag?accumSize:0, /* accumAlpha */ + alphaBits?accumSize:0, /* accumAlpha */ 1); /* numSamples */ v->depth = colDepth; v->db_flag = dbFlag; v->rgb_flag = rgbFlag; + v->sw_alpha = sw_alpha; v->zbuffer = (depthSize > 0) ? 1 : 0; #ifdef MATROX @@ -1451,7 +1468,7 @@ DMesaVisual DMesaCreateVisual (GLint width, if (depthSize > 0) { fx_attrib[i++] = FXMESA_DEPTH_SIZE; fx_attrib[i++] = depthSize; } if (stencilSize > 0) { fx_attrib[i++] = FXMESA_STENCIL_SIZE; fx_attrib[i++] = stencilSize; } if (accumSize > 0) { fx_attrib[i++] = FXMESA_ACCUM_SIZE; fx_attrib[i++] = accumSize; } - if (alphaFlag) { fx_attrib[i++] = FXMESA_ALPHA_SIZE; fx_attrib[i++] = 1; } + if (alphaSize) { fx_attrib[i++] = FXMESA_ALPHA_SIZE; fx_attrib[i++] = alphaSize; } fx_attrib[i++] = FXMESA_COLORDEPTH; fx_attrib[i++] = colDepth; fx_attrib[i] = FXMESA_NONE; @@ -1493,7 +1510,7 @@ DMesaBuffer DMesaCreateBuffer (DMesaVisual visual, visual->zbuffer == 1, ((GLvisual *)visual)->stencilBits > 0, ((GLvisual *)visual)->accumRedBits > 0, - ((GLvisual *)visual)->alphaBits > 0); + visual->sw_alpha); b->xpos = xpos; b->ypos = ypos; b->width = width; diff --git a/src/mesa/drivers/dos/video.c b/src/mesa/drivers/dos/video.c index 35c643b4c9a..5432141bb0d 100644 --- a/src/mesa/drivers/dos/video.c +++ b/src/mesa/drivers/dos/video.c @@ -23,10 +23,10 @@ */ /* - * DOS/DJGPP device driver v1.3 for Mesa + * DOS/DJGPP device driver v1.4 for Mesa * * Copyright (C) 2002 - Borca Daniel - * Email : dborca@yahoo.com + * Email : dborca@users.sourceforge.net * Web : http://www.geocities.com/dborca * * Thanks to CrazyPyro (Neil Funk) for FakeColor @@ -163,7 +163,11 @@ static int vl_mixfix32 (fixed r, fixed g, fixed b) #define vl_mixrgba24 vl_mixrgb24 static int vl_mixrgba32 (const unsigned char rgba[]) { - return (rgba[3]<<24)|(rgba[0]<<16)|(rgba[1]<<8)|(rgba[2]); + /* Hack alert: + * currently, DMesa uses Mesa's alpha buffer; + * so we don't really care about alpha value here... + */ + return /*(rgba[3]<<24)|*/(rgba[0]<<16)|(rgba[1]<<8)|(rgba[2]); } @@ -175,11 +179,11 @@ static int vl_mixrgba32 (const unsigned char rgba[]) * * Note: - */ -static int vl_mixrgb8fake (const unsigned char rgba[]) +static int vl_mixrgb8fake (const unsigned char rgb[]) { - return array_b[rgba[2]]*G_CNT*R_CNT - + array_g[rgba[1]]*R_CNT - + array_r[rgba[0]]; + return array_b[rgb[2]]*G_CNT*R_CNT + + array_g[rgb[1]]*R_CNT + + array_r[rgb[0]]; } #define vl_mixrgb8 vl_mixrgb8fake static int vl_mixrgb15 (const unsigned char rgb[]) @@ -205,21 +209,21 @@ static int vl_mixrgb32 (const unsigned char rgb[]) * * Note: uses current read buffer */ -static void v_getrgba8fake6 (unsigned int offset, unsigned char rgba[]) +static void v_getrgba8fake6 (unsigned int offset, unsigned char rgba[4]) { word32 c = VGAPalette[((word8 *)vl_current_read_buffer)[offset]]; rgba[0] = _rgb_scale_6[(c >> 16) & 0x3F]; rgba[1] = _rgb_scale_6[(c >> 8) & 0x3F]; rgba[2] = _rgb_scale_6[c & 0x3F]; - rgba[3] = c >> 24; + /*rgba[3] = c >> 24;*/ /* dummy alpha; we have separate SW alpha, so ignore */ } -static void v_getrgba8fake8 (unsigned int offset, unsigned char rgba[]) +static void v_getrgba8fake8 (unsigned int offset, unsigned char rgba[4]) { word32 c = VGAPalette[((word8 *)vl_current_read_buffer)[offset]]; rgba[0] = c >> 16; rgba[1] = c >> 8; rgba[2] = c; - rgba[3] = c >> 24; + /*rgba[3] = c >> 24;*/ /* dummy alpha; we have separate SW alpha, so ignore */ } #define v_getrgba8 v_getrgba8fake6 static void v_getrgba15 (unsigned int offset, unsigned char rgba[4]) @@ -235,7 +239,7 @@ static void v_getrgba15 (unsigned int offset, unsigned char rgba[4]) rgba[1] = _rgb_scale_5[(c >> 5) & 0x1F]; rgba[2] = _rgb_scale_5[c & 0x1F]; #endif - rgba[3] = 255; + /*rgba[3] = 255;*/ /* dummy alpha; we have separate SW alpha, so ignore */ } static void v_getrgba16 (unsigned int offset, unsigned char rgba[4]) { @@ -249,7 +253,7 @@ static void v_getrgba16 (unsigned int offset, unsigned char rgba[4]) rgba[1] = _rgb_scale_6[(c >> 5) & 0x3F]; rgba[2] = _rgb_scale_5[c & 0x1F]; #endif - rgba[3] = 255; + /*rgba[3] = 255;*/ /* dummy alpha; we have separate SW alpha, so ignore */ } static void v_getrgba24 (unsigned int offset, unsigned char rgba[4]) { @@ -257,7 +261,7 @@ static void v_getrgba24 (unsigned int offset, unsigned char rgba[4]) rgba[0] = c >> 16; rgba[1] = c >> 8; rgba[2] = c; - rgba[3] = 255; + /*rgba[3] = 255;*/ /* dummy alpha; we have separate SW alpha, so ignore */ } static void v_getrgba32 (unsigned int offset, unsigned char rgba[4]) { @@ -265,7 +269,7 @@ static void v_getrgba32 (unsigned int offset, unsigned char rgba[4]) rgba[0] = c >> 16; rgba[1] = c >> 8; rgba[2] = c; - rgba[3] = c >> 24; + /*rgba[3] = c >> 24;*/ /* dummy alpha; we have separate SW alpha, so ignore */ }