summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Paul <brian.paul@tungstengraphics.com>2003-08-28 16:57:01 +0000
committerBrian Paul <brian.paul@tungstengraphics.com>2003-08-28 16:57:01 +0000
commit760960028f189e3afcbfef1f877dbd5b86fd1ae4 (patch)
treed328ec20f2561c00199f6eb14a98edef0069f22e
parent9e94aaf6e377843194c4b9ab6e2e96f06aef88f2 (diff)
Updates from Daniel Borca
-rw-r--r--docs/README.DJ23
-rw-r--r--include/GL/dmesa.h2
-rw-r--r--progs/samples/Makefile.DJ2
-rw-r--r--src/glut/dos/glutint.h1
-rw-r--r--src/glut/dos/init.c5
-rw-r--r--src/glut/dos/window.c8
-rw-r--r--src/mesa/Makefile.DJ6
-rw-r--r--src/mesa/drivers/dos/dmesa.c33
-rw-r--r--src/mesa/drivers/dos/video.c34
9 files changed, 71 insertions, 43 deletions
diff --git a/docs/README.DJ b/docs/README.DJ
index fe3435e6c1..9fc7a55c63 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 7510fdb9f4..46aa4e2260 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 f8b0ccda48..2f0f687587 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 013b307e94..23ab169d39 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 22bab9f8af..d30f270c64 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 06e8ea9ead..af00897f3e 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 893a91bc1c..a1b11d949b 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 73b47569d9..5d2cfb8b2b 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 35c643b4c9..5432141bb0 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 */
}