summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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
6 files changed, 57 insertions, 30 deletions
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 */
}