mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2024-11-28 12:45:56 +08:00
DOS and glide driver updates from Daniel Borca
This commit is contained in:
parent
3dc8cc4ebc
commit
9ec58c2c5b
10
Makefile.DJ
10
Makefile.DJ
@ -23,7 +23,7 @@
|
||||
# DOS/DJGPP makefile v1.4 for Mesa
|
||||
#
|
||||
# Copyright (C) 2002 - Borca Daniel
|
||||
# Email : dborca@yahoo.com
|
||||
# Email : dborca@users.sourceforge.net
|
||||
# Web : http://www.geocities.com/dborca
|
||||
|
||||
|
||||
@ -32,12 +32,12 @@
|
||||
#
|
||||
# Environment variables:
|
||||
# CPU optimize for the given processor.
|
||||
# default = k6
|
||||
# default = pentium
|
||||
# GLU=[mesa|sgi] specify GLU directory; can be `sgi' (requires GNU/C++)
|
||||
# or `mesa'.
|
||||
# default = mesa
|
||||
# GLIDE path to Glide3 SDK include files; used with FX.
|
||||
# default = $(TOP)/include/glide3
|
||||
# GLIDE path to Glide3 SDK; used with FX.
|
||||
# default = $(TOP)/glide3
|
||||
# FX=1 build for 3dfx Glide3. Note that this disables
|
||||
# compilation of most DMesa code and requires fxMesa.
|
||||
# As a consequence, you'll need the DJGPP Glide3
|
||||
@ -70,7 +70,7 @@
|
||||
|
||||
.PHONY : all libgl libglu libglut clean realclean
|
||||
|
||||
CPU ?= k6
|
||||
CPU ?= pentium
|
||||
|
||||
GLU ?= mesa
|
||||
|
||||
|
@ -32,7 +32,7 @@
|
||||
#
|
||||
# Environment variables:
|
||||
# CPU optimize for the given processor.
|
||||
# default = k6
|
||||
# default = pentium
|
||||
# GLIDE path to Glide3 SDK; used with FX.
|
||||
# default = $(TOP)/glide3
|
||||
# FX=1 build for 3dfx Glide3. Note that this disables
|
||||
@ -62,7 +62,7 @@
|
||||
|
||||
.PHONY : all libgl clean realclean
|
||||
|
||||
CPU ?= k6
|
||||
CPU ?= pentium
|
||||
|
||||
CFLAGS = -Wall -W -pedantic
|
||||
CFLAGS += -O2 -ffast-math -mcpu=$(CPU)
|
||||
|
@ -31,12 +31,12 @@ Available options:
|
||||
|
||||
Environment variables:
|
||||
CPU optimize for the given processor.
|
||||
default = k6
|
||||
default = pentium
|
||||
GLU=[mesa|sgi] specify GLU directory; can be `sgi' (requires GNU/C++)
|
||||
or `mesa'.
|
||||
default = mesa
|
||||
GLIDE path to Glide3 SDK include files; used with FX.
|
||||
default = $(TOP)/include/glide3
|
||||
GLIDE path to Glide3 SDK; used with FX.
|
||||
default = $(TOP)/glide3
|
||||
FX=1 build for 3dfx Glide3. Note that this disables
|
||||
compilation of most DMesa code and requires fxMesa.
|
||||
As a consequence, you'll need the DJGPP Glide3
|
||||
@ -70,7 +70,7 @@ Tested on:
|
||||
CPU: AMD Athlon XP 1800+
|
||||
Mainboard: EP-8KTA3 w/ 128 MB SDRAM
|
||||
Video card: Voodoo5 5500 AGP w/ 64 MB SDRAM
|
||||
DJGPP: djdev 2.04 + gcc v3.2.2 + make v3.79.1
|
||||
DJGPP: djdev 2.04 + gcc v3.2.2 + make v3.80
|
||||
OS: DOS and Win98SE
|
||||
|
||||
|
||||
@ -119,12 +119,6 @@ FAQ:
|
||||
lazy programmer and I found that the easiest way to keep buffer handling
|
||||
at peak performance ;-).
|
||||
|
||||
Q) My demo doesn't display text. I know I used the GLUT font routines!
|
||||
A) Then you probably use GLUT as a DXE. Well, there is no direct access to
|
||||
variables due to the way DXE works. Read the documentation. The author of
|
||||
GLUT took this into account for _WIN32 DLL's only; I don't want to modify
|
||||
his headers. The only workaround is to link GLUT the old way :-(
|
||||
|
||||
Q) The GLUT is incomplete.
|
||||
A) See below.
|
||||
|
||||
@ -173,9 +167,12 @@ 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)
|
||||
GLUT_FPS - print frames/second statistics to stderr
|
||||
DMESA_GLUT_DEPTH - set default depth bits
|
||||
DMESA_GLUT_STENCIL - set default stencil bits
|
||||
DMESA_GLUT_ACCUM - set default accum bits
|
||||
|
||||
|
||||
|
||||
@ -212,8 +209,11 @@ v1.3 (mar-2003)
|
||||
* revamped GLUT
|
||||
* switched to DXE3
|
||||
|
||||
v1.4 (jun-2003)
|
||||
v1.4 (aug-2003)
|
||||
+ enabled fonts with DXE
|
||||
+ truly added multi-window support in GLUT
|
||||
* accomodated makefiles with the new sourcetree
|
||||
* hacked and slashed the 3dfx driver (w/ help from Hiroshi Morii)
|
||||
|
||||
|
||||
|
||||
@ -221,5 +221,5 @@ Contact:
|
||||
~~~~~~~~
|
||||
|
||||
Name: Borca Daniel
|
||||
E-mail: dborca@yahoo.com
|
||||
E-mail: dborca@users.sourceforge.net
|
||||
WWW: http://www.geocities.com/dborca/
|
||||
|
@ -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
|
||||
*/
|
||||
|
||||
@ -90,7 +90,7 @@ void DMesaDestroyContext (DMesaContext c);
|
||||
/*
|
||||
* Return a handle to the current context.
|
||||
*/
|
||||
DMesaContext DMesaGetCurrentContext (void);
|
||||
void *DMesaGetCurrentContext (void);
|
||||
|
||||
|
||||
|
||||
|
@ -76,7 +76,7 @@ GLAPI GLboolean GLAPIENTRY fxMesaSelectCurrentBoard(int n);
|
||||
|
||||
GLAPI void GLAPIENTRY fxMesaMakeCurrent(fxMesaContext ctx);
|
||||
|
||||
GLAPI fxMesaContext GLAPIENTRY fxMesaGetCurrentContext(void);
|
||||
GLAPI void * GLAPIENTRY fxMesaGetCurrentContext(void);
|
||||
|
||||
GLAPI void GLAPIENTRY fxMesaSwapBuffers(void);
|
||||
|
||||
@ -88,6 +88,8 @@ GLAPI int GLAPIENTRY fxQueryHardware(void);
|
||||
|
||||
GLAPI void GLAPIENTRY fxCloseHardware(void);
|
||||
|
||||
GLAPI void GLAPIENTRY fxGetScreenGeometry (GLint *w, GLint *h);
|
||||
|
||||
|
||||
#if defined (__BEOS__)
|
||||
#pragma export off
|
||||
|
@ -350,7 +350,7 @@ WGLAPI int GLAPIENTRY SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR *);
|
||||
#define GLUT_NORMAL 0
|
||||
#define GLUT_OVERLAY 1
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(_WIN32) || defined (GLUT_IMPORT_LIB)
|
||||
/* Stroke font constants (use these in GLUT program). */
|
||||
#define GLUT_STROKE_ROMAN ((void*)0)
|
||||
#define GLUT_STROKE_MONO_ROMAN ((void*)1)
|
||||
|
@ -23,7 +23,7 @@
|
||||
# DOS/DJGPP samples makefile v1.4 for Mesa
|
||||
#
|
||||
# Copyright (C) 2002 - Borca Daniel
|
||||
# Email : dborca@yahoo.com
|
||||
# Email : dborca@users.sourceforge.net
|
||||
# Web : http://www.geocities.com/dborca
|
||||
|
||||
|
||||
@ -32,9 +32,9 @@
|
||||
#
|
||||
# Environment variables:
|
||||
# CPU optimize for the given processor.
|
||||
# default = k6
|
||||
# GLIDE path to Glide3 SDK library files; used with FX.
|
||||
# default = $(TOP)/lib/glide3
|
||||
# default = pentium
|
||||
# GLIDE path to Glide3 SDK; used with FX.
|
||||
# default = $(TOP)/glide3
|
||||
# FX=1 build for 3dfx Glide3. Note that this disables
|
||||
# compilation of most DMesa code and requires fxMesa.
|
||||
# As a consequence, you'll need the DJGPP Glide3
|
||||
@ -53,13 +53,14 @@
|
||||
.SUFFIXES : .c .o .exe
|
||||
|
||||
TOP = ../..
|
||||
CPU ?= k6
|
||||
GLIDE ?= $(TOP)/lib/glide3
|
||||
CPU ?= pentium
|
||||
GLIDE ?= $(TOP)/glide3
|
||||
|
||||
CC = gcc
|
||||
CFLAGS = -Wall -W -pedantic
|
||||
CFLAGS += -O2 -ffast-math -mcpu=$(CPU)
|
||||
CFLAGS += -I$(TOP)/include -I../util
|
||||
CFLAGS += -DGLUT_IMPORT_LIB
|
||||
|
||||
LD = gxx
|
||||
LDFLAGS = -s -L$(TOP)/lib
|
||||
@ -69,7 +70,7 @@ LDLIBS += -liglut -liglu -ligl
|
||||
else
|
||||
LDLIBS = -lglut -lglu -lgl
|
||||
ifeq ($(FX),1)
|
||||
LDFLAGS += -L$(GLIDE)
|
||||
LDFLAGS += -L$(GLIDE)/lib
|
||||
LDLIBS += -lglid3
|
||||
endif
|
||||
endif
|
||||
|
@ -23,7 +23,7 @@
|
||||
# DOS/DJGPP glu makefile v1.4 for Mesa
|
||||
#
|
||||
# Copyright (C) 2002 - Borca Daniel
|
||||
# Email : dborca@yahoo.com
|
||||
# Email : dborca@users.sourceforge.net
|
||||
# Web : http://www.geocities.com/dborca
|
||||
|
||||
|
||||
@ -48,7 +48,7 @@ GLU_LIB = libglu.a
|
||||
GLU_DXE = glu.dxe
|
||||
GLU_IMP = libiglu.a
|
||||
|
||||
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH);$(LIBDIR)
|
||||
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH);$(LIBDIR);$(GLIDE)/lib
|
||||
|
||||
CC = gcc
|
||||
CFLAGS += -I$(TOP)/include
|
||||
@ -87,16 +87,14 @@ OBJECTS = $(SOURCES:.c=.o)
|
||||
all: $(LIBDIR)/$(GLU_LIB) $(LIBDIR)/$(GLU_DXE) $(LIBDIR)/$(GLU_IMP)
|
||||
|
||||
$(LIBDIR)/$(GLU_LIB): $(OBJECTS)
|
||||
$(AR) $(ARFLAGS) $(LIBDIR)/$(GLU_LIB) $(OBJECTS)
|
||||
$(AR) $(ARFLAGS) $@ $^
|
||||
|
||||
$(LIBDIR)/$(GLU_DXE) $(LIBDIR)/$(GLU_IMP): $(OBJECTS)
|
||||
ifeq ($(HAVEDXE3),)
|
||||
$(warning Missing DXE3 package... Skipping $(GLU_DXE))
|
||||
else
|
||||
-dxe3gen -o $(LIBDIR)/$(GLU_DXE) -Y $(LIBDIR)/$(GLU_IMP) -D "MesaGLU DJGPP" -E _glu -P gl.dxe -U $(OBJECTS)
|
||||
-dxe3gen -o $(LIBDIR)/$(GLU_DXE) -Y $(LIBDIR)/$(GLU_IMP) -D "MesaGLU DJGPP" -E _glu -P gl.dxe -U $^
|
||||
endif
|
||||
|
||||
clean:
|
||||
-$(call UNLINK,*.o)
|
||||
|
||||
-include depend
|
||||
|
@ -23,7 +23,7 @@
|
||||
# DOS/DJGPP glu makefile v1.4 for Mesa
|
||||
#
|
||||
# Copyright (C) 2002 - Borca Daniel
|
||||
# Email : dborca@yahoo.com
|
||||
# Email : dborca@users.sourceforge.net
|
||||
# Web : http://www.geocities.com/dborca
|
||||
|
||||
|
||||
@ -48,7 +48,7 @@ GLU_LIB = libglu.a
|
||||
GLU_DXE = glu.dxe
|
||||
GLU_IMP = libiglu.a
|
||||
|
||||
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH);$(LIBDIR)
|
||||
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH);$(LIBDIR);$(GLIDE)/lib
|
||||
|
||||
CC = gcc
|
||||
CFLAGS += -DNDEBUG -DLIBRARYBUILD -I$(TOP)/include -Iinclude
|
||||
@ -171,13 +171,13 @@ OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))
|
||||
all: $(LIBDIR)/$(GLU_LIB) $(LIBDIR)/$(GLU_DXE) $(LIBDIR)/$(GLU_IMP)
|
||||
|
||||
$(LIBDIR)/$(GLU_LIB): $(OBJECTS)
|
||||
$(AR) $(ARFLAGS) $(LIBDIR)/$(GLU_LIB) $(OBJECTS)
|
||||
$(AR) $(ARFLAGS) $@ $^
|
||||
|
||||
$(LIBDIR)/$(GLU_DXE) $(LIBDIR)/$(GLU_IMP): $(OBJECTS)
|
||||
ifeq ($(HAVEDXE3),)
|
||||
$(warning Missing DXE3 package... Skipping $(GLU_DXE))
|
||||
else
|
||||
-dxe3gen -o $(LIBDIR)/$(GLU_DXE) -Y $(LIBDIR)/$(GLU_IMP) -D "MesaGLU/SGI DJGPP" -E _glu -P gl.dxe -U $(OBJECTS)
|
||||
-dxe3gen -o $(LIBDIR)/$(GLU_DXE) -Y $(LIBDIR)/$(GLU_IMP) -D "MesaGLU/SGI DJGPP" -E _glu -P gl.dxe -U $^
|
||||
endif
|
||||
|
||||
clean:
|
||||
@ -186,5 +186,3 @@ clean:
|
||||
-$(call UNLINK,libnurbs/interface/*.o)
|
||||
-$(call UNLINK,libnurbs/internals/*.o)
|
||||
-$(call UNLINK,libnurbs/nurbtess/*.o)
|
||||
|
||||
-include depend
|
||||
|
@ -23,7 +23,7 @@
|
||||
# DOS/DJGPP glut makefile v1.4 for Mesa
|
||||
#
|
||||
# Copyright (C) 2002 - Borca Daniel
|
||||
# Email : dborca@yahoo.com
|
||||
# Email : dborca@users.sourceforge.net
|
||||
# Web : http://www.geocities.com/dborca
|
||||
|
||||
|
||||
@ -53,10 +53,11 @@ GLUT_LIB = libglut.a
|
||||
GLUT_DXE = glut.dxe
|
||||
GLUT_IMP = libiglut.a
|
||||
|
||||
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH);$(LIBDIR)
|
||||
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH);$(LIBDIR);$(GLIDE)/lib
|
||||
|
||||
CC = gcc
|
||||
CFLAGS += -I- -I$(TOP)/include -I. -I$(MKGLUT) -IPC_HW
|
||||
CFLAGS += -DGLUT_IMPORT_LIB
|
||||
|
||||
AR = ar
|
||||
ARFLAGS = rus
|
||||
@ -78,6 +79,7 @@ CORE_SOURCES = \
|
||||
mouse.c \
|
||||
overlay.c \
|
||||
state.c \
|
||||
util.c \
|
||||
window.c
|
||||
|
||||
PC_HW_SOURCES = \
|
||||
@ -119,13 +121,13 @@ OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))
|
||||
all: $(LIBDIR)/$(GLUT_LIB) $(LIBDIR)/$(GLUT_DXE) $(LIBDIR)/$(GLUT_IMP)
|
||||
|
||||
$(LIBDIR)/$(GLUT_LIB): $(OBJECTS)
|
||||
$(AR) $(ARFLAGS) $(LIBDIR)/$(GLUT_LIB) $(OBJECTS)
|
||||
$(AR) $(ARFLAGS) $@ $^
|
||||
|
||||
$(LIBDIR)/$(GLUT_DXE) $(LIBDIR)/$(GLUT_IMP): $(OBJECTS)
|
||||
ifeq ($(HAVEDXE3),)
|
||||
$(warning Missing DXE3 package... Skipping $(GLUT_DXE))
|
||||
else
|
||||
-dxe3gen -o $(LIBDIR)/$(GLUT_DXE) -Y $(LIBDIR)/$(GLUT_IMP) -D "MesaGLUT DJGPP" -E _glut -P gl.dxe -P glu.dxe -U $(OBJECTS)
|
||||
-dxe3gen -o $(LIBDIR)/$(GLUT_DXE) -Y $(LIBDIR)/$(GLUT_IMP) -D "MesaGLUT DJGPP" -E _glut -P gl.dxe -P glu.dxe -U $^
|
||||
endif
|
||||
|
||||
clean:
|
||||
|
@ -19,10 +19,10 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* DOS/DJGPP glut driver v1.3 for Mesa
|
||||
* DOS/DJGPP glut 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
|
||||
*/
|
||||
|
||||
@ -64,9 +64,11 @@ typedef void (GLUTCALLBACK *GLUTjoystickCB) (unsigned int, int, int, int);
|
||||
typedef struct GLUTwindow {
|
||||
int num; /* window id */
|
||||
|
||||
DMesaContext context;
|
||||
DMesaBuffer buffer;
|
||||
|
||||
int show_mouse;
|
||||
GLboolean redisplay;
|
||||
|
||||
/* GLUT settable or visible window state. */
|
||||
int xpos;
|
||||
@ -100,9 +102,10 @@ typedef struct GLUTwindow {
|
||||
extern GLUTidleCB g_idle_func;
|
||||
extern GLUTmenuStatusCB g_menu_status_func;
|
||||
|
||||
extern GLboolean g_redisplay;
|
||||
|
||||
extern GLuint g_bpp; /* HW: bits per pixel */
|
||||
extern GLuint g_depth; /* HW: depth bits */
|
||||
extern GLuint g_stencil; /* HW: stencil bits */
|
||||
extern GLuint g_accum; /* HW: accum bits */
|
||||
extern GLuint g_refresh; /* HW: vertical refresh rate */
|
||||
extern GLuint g_screen_w, g_screen_h; /* HW: physical screen size */
|
||||
extern GLint g_driver_caps;
|
||||
@ -117,6 +120,7 @@ extern int g_mouse; /* non-zero if mouse installed */
|
||||
extern int g_mouse_x, g_mouse_y; /* mouse coords, relative to current win */
|
||||
|
||||
extern GLUTwindow *g_curwin; /* current window */
|
||||
extern GLUTwindow *g_windows[];
|
||||
|
||||
extern char *__glutProgramName; /* program name */
|
||||
|
||||
@ -127,6 +131,10 @@ extern char * __glutStrdup(const char *string);
|
||||
extern void __glutWarning(char *format,...);
|
||||
extern void __glutFatalError(char *format,...);
|
||||
extern void __glutFatalUsage(char *format,...);
|
||||
/* Private routines from util.c */
|
||||
#ifdef GLUT_IMPORT_LIB
|
||||
extern void *__glutFont(void *font);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@ -137,14 +145,6 @@ extern void __glutFatalUsage(char *format,...);
|
||||
|
||||
#define MAX_WINDOWS 2
|
||||
|
||||
#define DEFAULT_WIDTH 300
|
||||
#define DEFAULT_HEIGHT 300
|
||||
#define DEFAULT_BPP 16
|
||||
|
||||
#define DEPTH_SIZE 16
|
||||
#define STENCIL_SIZE 8
|
||||
#define ACCUM_SIZE 16
|
||||
|
||||
#define RESERVED_COLORS 0
|
||||
|
||||
#endif /* __glutint_h__ */
|
||||
|
@ -19,10 +19,10 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* DOS/DJGPP glut driver v1.3 for Mesa
|
||||
* DOS/DJGPP glut 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
|
||||
*/
|
||||
|
||||
@ -31,11 +31,20 @@
|
||||
|
||||
#include "glutint.h"
|
||||
|
||||
#define DEFAULT_WIDTH 300
|
||||
#define DEFAULT_HEIGHT 300
|
||||
#define DEFAULT_BPP 16
|
||||
|
||||
#define DEPTH_SIZE 16
|
||||
#define STENCIL_SIZE 8
|
||||
#define ACCUM_SIZE 16
|
||||
|
||||
|
||||
GLboolean g_redisplay = GL_FALSE;
|
||||
|
||||
GLuint g_bpp = DEFAULT_BPP;
|
||||
GLuint g_depth = DEPTH_SIZE;
|
||||
GLuint g_stencil = STENCIL_SIZE;
|
||||
GLuint g_accum = ACCUM_SIZE;
|
||||
GLuint g_refresh = 0;
|
||||
GLuint g_screen_w, g_screen_h;
|
||||
GLint g_driver_caps;
|
||||
@ -58,6 +67,15 @@ void APIENTRY glutInit (int *argc, char **argv)
|
||||
if ((env = getenv("DMESA_GLUT_BPP")) != NULL) {
|
||||
g_bpp = atoi(env);
|
||||
}
|
||||
if ((env = getenv("DMESA_GLUT_DEPTH")) != NULL) {
|
||||
g_depth = atoi(env);
|
||||
}
|
||||
if ((env = getenv("DMESA_GLUT_STENCIL")) != NULL) {
|
||||
g_stencil = atoi(env);
|
||||
}
|
||||
if ((env = getenv("DMESA_GLUT_ACCUM")) != NULL) {
|
||||
g_accum = atoi(env);
|
||||
}
|
||||
if ((env = getenv("DMESA_GLUT_REFRESH")) != NULL) {
|
||||
g_refresh = atoi(env);
|
||||
}
|
||||
@ -109,6 +127,7 @@ void APIENTRY glutInitWindowSize (int width, int height)
|
||||
|
||||
void APIENTRY glutMainLoop (void)
|
||||
{
|
||||
int i;
|
||||
GLboolean idle;
|
||||
static int old_mouse_x = 0;
|
||||
static int old_mouse_y = 0;
|
||||
@ -125,29 +144,43 @@ void APIENTRY glutMainLoop (void)
|
||||
pc_install_keyb();
|
||||
__glutInitMouse();
|
||||
|
||||
glutPostRedisplay();
|
||||
if (g_curwin->reshape) {
|
||||
g_curwin->reshape(g_curwin->width, g_curwin->height);
|
||||
}
|
||||
if (g_curwin->visibility) {
|
||||
g_curwin->visibility(GLUT_VISIBLE);
|
||||
for (i = 0; i < MAX_WINDOWS; i++) {
|
||||
if (g_windows[i] != NULL) {
|
||||
GLUTwindow *w = g_windows[i];
|
||||
glutSetWindow(w->num);
|
||||
glutPostRedisplay();
|
||||
if (w->reshape) {
|
||||
w->reshape(w->width, w->height);
|
||||
}
|
||||
if (w->visibility) {
|
||||
w->visibility(GLUT_VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while (GL_TRUE) {
|
||||
idle = GL_TRUE;
|
||||
|
||||
if (g_redisplay && g_curwin->display) {
|
||||
idle = GL_FALSE;
|
||||
g_redisplay = GL_FALSE;
|
||||
for (i = 0; i < MAX_WINDOWS; i++) {
|
||||
if (g_windows[i] != NULL) {
|
||||
GLUTwindow *w = g_windows[i];
|
||||
if (w->redisplay && w->display) {
|
||||
idle = GL_FALSE;
|
||||
w->redisplay = GL_FALSE;
|
||||
|
||||
if (g_curwin->show_mouse && !(g_display_mode & GLUT_DOUBLE)) {
|
||||
/* XXX scare mouse */
|
||||
g_curwin->display();
|
||||
/* XXX unscare mouse */
|
||||
} else {
|
||||
g_curwin->display();
|
||||
}
|
||||
if (DMesaMakeCurrent(w->context, w->buffer)) {
|
||||
if (w->show_mouse && !(g_display_mode & GLUT_DOUBLE)) {
|
||||
/* XXX scare mouse */
|
||||
w->display();
|
||||
/* XXX unscare mouse */
|
||||
} else {
|
||||
w->display();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
DMesaMakeCurrent(g_curwin->context, g_curwin->buffer);
|
||||
|
||||
if (g_mouse) {
|
||||
int mouse_x;
|
||||
|
@ -19,7 +19,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* DOS/DJGPP glut driver v1.3 for Mesa
|
||||
* DOS/DJGPP glut driver v1.4 for Mesa
|
||||
*
|
||||
* Copyright (C) 2002 - Borca Daniel
|
||||
* Email : dborca@yahoo.com
|
||||
@ -60,9 +60,9 @@ int APIENTRY glutGet (GLenum type)
|
||||
case GLUT_WINDOW_HEIGHT:
|
||||
return g_curwin->height;
|
||||
case GLUT_WINDOW_STENCIL_SIZE:
|
||||
return STENCIL_SIZE;
|
||||
return g_stencil;
|
||||
case GLUT_WINDOW_DEPTH_SIZE:
|
||||
return DEPTH_SIZE;
|
||||
return g_depth;
|
||||
case GLUT_WINDOW_RGBA:
|
||||
return !(g_display_mode & GLUT_INDEX);
|
||||
case GLUT_WINDOW_COLORMAP_SIZE:
|
||||
|
@ -19,10 +19,10 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* DOS/DJGPP glut driver v1.3 for Mesa
|
||||
* DOS/DJGPP glut 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
|
||||
*/
|
||||
|
||||
@ -38,8 +38,7 @@ GLUTwindow *g_curwin;
|
||||
static GLuint swaptime, swapcount;
|
||||
|
||||
static DMesaVisual visual = NULL;
|
||||
static DMesaContext context = NULL;
|
||||
static GLUTwindow *windows[MAX_WINDOWS];
|
||||
GLUTwindow *g_windows[MAX_WINDOWS];
|
||||
|
||||
|
||||
|
||||
@ -50,7 +49,6 @@ static void clean (void)
|
||||
for (i=1; i<=MAX_WINDOWS; i++) {
|
||||
glutDestroyWindow(i);
|
||||
}
|
||||
if (context) DMesaDestroyContext(context);
|
||||
if (visual) DMesaDestroyVisual(visual);
|
||||
|
||||
pc_close_stdout();
|
||||
@ -64,53 +62,72 @@ int APIENTRY glutCreateWindow (const char *title)
|
||||
int i;
|
||||
int m8width = (g_init_w + 7) & ~7;
|
||||
|
||||
/* We set the Visual once. This will be our desktop (graphic mode).
|
||||
* We should do this in the `glutInit' code, but we don't have any idea
|
||||
* about its geometry. Supposedly, when we are about to create one
|
||||
* window, we have a slight idea about resolution.
|
||||
*/
|
||||
if (!visual) {
|
||||
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 ?DEPTH_SIZE :0,
|
||||
g_display_mode & GLUT_STENCIL?STENCIL_SIZE:0,
|
||||
g_display_mode & GLUT_ACCUM ?ACCUM_SIZE :0))==NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((context=DMesaCreateContext(visual, NULL))==NULL) {
|
||||
DMesaDestroyVisual(visual);
|
||||
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;
|
||||
}
|
||||
|
||||
/* Also hook stdio/stderr once */
|
||||
pc_open_stdout();
|
||||
pc_open_stderr();
|
||||
pc_atexit(clean);
|
||||
}
|
||||
|
||||
/* Search for an empty slot.
|
||||
* Each window has its own rendering Context and its own Buffer.
|
||||
*/
|
||||
for (i=0; i<MAX_WINDOWS; i++) {
|
||||
if (windows[i] == NULL) {
|
||||
if (g_windows[i] == NULL) {
|
||||
DMesaContext c;
|
||||
DMesaBuffer b;
|
||||
GLUTwindow *w;
|
||||
|
||||
if ((w=(GLUTwindow *)calloc(1, sizeof(GLUTwindow))) == NULL) {
|
||||
if ((w = (GLUTwindow *)calloc(1, sizeof(GLUTwindow))) == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((b=DMesaCreateBuffer(visual, g_init_x, g_init_y, m8width, g_init_h))==NULL) {
|
||||
/* Allocate the rendering Context. */
|
||||
if ((c = DMesaCreateContext(visual, NULL)) == NULL) {
|
||||
free(w);
|
||||
return 0;
|
||||
}
|
||||
if (!DMesaMakeCurrent(context, b)) {
|
||||
|
||||
/* Allocate the Buffer (displayable area).
|
||||
* We have to specify buffer size and position (inside the desktop).
|
||||
*/
|
||||
if ((b = DMesaCreateBuffer(visual, g_init_x, g_init_y, m8width, g_init_h)) == NULL) {
|
||||
DMesaDestroyContext(c);
|
||||
free(w);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Bind Buffer to Context and make the Context the current one. */
|
||||
if (!DMesaMakeCurrent(c, b)) {
|
||||
DMesaDestroyBuffer(b);
|
||||
DMesaDestroyContext(c);
|
||||
free(w);
|
||||
return 0;
|
||||
}
|
||||
|
||||
g_curwin = windows[i] = w;
|
||||
g_curwin = g_windows[i] = w;
|
||||
|
||||
w->num = ++i;
|
||||
w->xpos = g_init_x;
|
||||
w->ypos = g_init_y;
|
||||
w->width = m8width;
|
||||
w->height = g_init_h;
|
||||
w->context = c;
|
||||
w->buffer = b;
|
||||
|
||||
return i;
|
||||
@ -131,10 +148,13 @@ int APIENTRY glutCreateSubWindow (int win, int x, int y, int width, int height)
|
||||
|
||||
void APIENTRY glutDestroyWindow (int win)
|
||||
{
|
||||
if (windows[--win]) {
|
||||
DMesaDestroyBuffer(windows[win]->buffer);
|
||||
free(windows[win]);
|
||||
windows[win] = NULL;
|
||||
if (g_windows[--win]) {
|
||||
GLUTwindow *w = g_windows[win];
|
||||
DMesaMakeCurrent(NULL, NULL);
|
||||
DMesaDestroyBuffer(w->buffer);
|
||||
DMesaDestroyContext(w->context);
|
||||
free(w);
|
||||
g_windows[win] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@ -142,7 +162,7 @@ void APIENTRY glutDestroyWindow (int win)
|
||||
|
||||
void APIENTRY glutPostRedisplay (void)
|
||||
{
|
||||
g_redisplay = GL_TRUE;
|
||||
g_curwin->redisplay = GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
@ -183,7 +203,8 @@ int APIENTRY glutGetWindow (void)
|
||||
|
||||
void APIENTRY glutSetWindow (int win)
|
||||
{
|
||||
g_curwin = windows[win - 1];
|
||||
g_curwin = g_windows[win - 1];
|
||||
DMesaMakeCurrent(g_curwin->context, g_curwin->buffer);
|
||||
}
|
||||
|
||||
|
||||
|
@ -16,7 +16,7 @@ glutBitmapCharacter(GLUTbitmapFont font, int c)
|
||||
GLint swapbytes, lsbfirst, rowlength;
|
||||
GLint skiprows, skippixels, alignment;
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(_WIN32) || defined(GLUT_IMPORT_LIB)
|
||||
fontinfo = (BitmapFontPtr) __glutFont(font);
|
||||
#else
|
||||
fontinfo = (BitmapFontPtr) font;
|
||||
|
@ -15,7 +15,7 @@ glutBitmapWidth(GLUTbitmapFont font, int c)
|
||||
BitmapFontPtr fontinfo;
|
||||
const BitmapCharRec *ch;
|
||||
|
||||
#ifdef _WIN32
|
||||
#if defined(_WIN32) || defined(GLUT_IMPORT_LIB)
|
||||
fontinfo = (BitmapFontPtr) __glutFont(font);
|
||||
#else
|
||||
fontinfo = (BitmapFontPtr) font;
|
||||
@ -37,7 +37,7 @@ glutBitmapLength(GLUTbitmapFont font, const unsigned char *string)
|
||||
BitmapFontPtr fontinfo;
|
||||
const BitmapCharRec *ch;
|
||||
|
||||
#ifdef _WIN32
|
||||
#if defined(_WIN32) || defined(GLUT_IMPORT_LIB)
|
||||
fontinfo = (BitmapFontPtr) __glutFont(font);
|
||||
#else
|
||||
fontinfo = (BitmapFontPtr) font;
|
||||
|
@ -18,7 +18,7 @@ glutStrokeCharacter(GLUTstrokeFont font, int c)
|
||||
int i, j;
|
||||
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(_WIN32) || defined(GLUT_IMPORT_LIB)
|
||||
fontinfo = (StrokeFontPtr) __glutFont(font);
|
||||
#else
|
||||
fontinfo = (StrokeFontPtr) font;
|
||||
|
@ -15,7 +15,7 @@ glutStrokeWidth(GLUTstrokeFont font, int c)
|
||||
StrokeFontPtr fontinfo;
|
||||
const StrokeCharRec *ch;
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(_WIN32) || defined(GLUT_IMPORT_LIB)
|
||||
fontinfo = (StrokeFontPtr) __glutFont(font);
|
||||
#else
|
||||
fontinfo = (StrokeFontPtr) font;
|
||||
@ -37,7 +37,7 @@ glutStrokeLength(GLUTstrokeFont font, const unsigned char *string)
|
||||
StrokeFontPtr fontinfo;
|
||||
const StrokeCharRec *ch;
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(_WIN32) || defined(GLUT_IMPORT_LIB)
|
||||
fontinfo = (StrokeFontPtr) __glutFont(font);
|
||||
#else
|
||||
fontinfo = (StrokeFontPtr) font;
|
||||
|
@ -23,7 +23,7 @@
|
||||
# DOS/DJGPP core makefile v1.4 for Mesa
|
||||
#
|
||||
# Copyright (C) 2002 - Borca Daniel
|
||||
# Email : dborca@yahoo.com
|
||||
# Email : dborca@users.sourceforge.net
|
||||
# Web : http://www.geocities.com/dborca
|
||||
|
||||
|
||||
@ -33,8 +33,8 @@
|
||||
# Environment variables:
|
||||
# CFLAGS
|
||||
#
|
||||
# GLIDE path to Glide3 SDK include files; used with FX.
|
||||
# default = $(TOP)/include/glide3
|
||||
# GLIDE path to Glide3 SDK; used with FX.
|
||||
# default = $(TOP)/glide3
|
||||
# FX=1 build for 3dfx Glide3. Note that this disables
|
||||
# compilation of most DMesa code and requires fxMesa.
|
||||
# As a consequence, you'll need the DJGPP Glide3
|
||||
@ -65,19 +65,19 @@
|
||||
.INTERMEDIATE: x86/gen_matypes.exe
|
||||
|
||||
TOP = ../..
|
||||
GLIDE ?= $(TOP)/include/glide3
|
||||
GLIDE ?= $(TOP)/glide3
|
||||
LIBDIR = $(TOP)/lib
|
||||
GL_LIB = libgl.a
|
||||
GL_DXE = gl.dxe
|
||||
GL_IMP = libigl.a
|
||||
|
||||
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH);$(LIBDIR)
|
||||
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH);$(LIBDIR);$(GLIDE)/lib
|
||||
|
||||
CC = gcc
|
||||
CFLAGS += -I$(TOP)/include -I. -Imain -Iglapi
|
||||
ifeq ($(FX),1)
|
||||
CFLAGS += -D__DOS__ -DH3
|
||||
CFLAGS += -I$(GLIDE) -DFX -DFX_GLIDE3 -DFXMESA_USE_ARGB
|
||||
CFLAGS += -I$(GLIDE)/include -DFX
|
||||
LIBNAME = "MesaGL/FX DJGPP"
|
||||
else
|
||||
ifeq ($(MATROX),1)
|
||||
@ -260,12 +260,12 @@ K3D_SOURCES = \
|
||||
x86/3dnow_normal.S
|
||||
|
||||
CORE_SOURCES = \
|
||||
$(MAIN_SOURCES) \
|
||||
$(GLAPI_SOURCES) \
|
||||
$(MATH_SOURCES) \
|
||||
$(ARRAY_CACHE_SOURCES) \
|
||||
$(SWRAST_SOURCES) \
|
||||
$(SWRAST_SETUP_SOURCES) \
|
||||
$(MAIN_SOURCES) \
|
||||
$(GLAPI_SOURCES) \
|
||||
$(MATH_SOURCES) \
|
||||
$(ARRAY_CACHE_SOURCES) \
|
||||
$(SWRAST_SOURCES) \
|
||||
$(SWRAST_SETUP_SOURCES) \
|
||||
$(TNL_SOURCES)
|
||||
|
||||
ifeq ($(HAVE_MMX),1)
|
||||
@ -336,16 +336,16 @@ X86_OBJECTS = $(addsuffix .o,$(basename $(X86_SOURCES)))
|
||||
all: $(LIBDIR)/$(GL_LIB) $(LIBDIR)/$(GL_DXE) $(LIBDIR)/$(GL_IMP)
|
||||
|
||||
$(LIBDIR)/$(GL_LIB): $(OBJECTS)
|
||||
$(AR) $(ARFLAGS) $(LIBDIR)/$(GL_LIB) $(OBJECTS)
|
||||
$(AR) $(ARFLAGS) $@ $^
|
||||
|
||||
$(LIBDIR)/$(GL_DXE) $(LIBDIR)/$(GL_IMP): $(OBJECTS)
|
||||
ifeq ($(HAVEDXE3),)
|
||||
$(warning Missing DXE3 package... Skipping $(GL_DXE))
|
||||
else
|
||||
ifeq ($(FX),1)
|
||||
-dxe3gen -o $(LIBDIR)/$(GL_DXE) -Y $(LIBDIR)/$(GL_IMP) -D $(LIBNAME) -E _gl -E _DMesa -P glid3.dxe -U $(OBJECTS)
|
||||
-dxe3gen -o $(LIBDIR)/$(GL_DXE) -Y $(LIBDIR)/$(GL_IMP) -D $(LIBNAME) -E _gl -E _DMesa -P glid3.dxe -U $^
|
||||
else
|
||||
-dxe3gen -o $(LIBDIR)/$(GL_DXE) -Y $(LIBDIR)/$(GL_IMP) -D $(LIBNAME) -E _gl -E _DMesa -U $(OBJECTS)
|
||||
-dxe3gen -o $(LIBDIR)/$(GL_DXE) -Y $(LIBDIR)/$(GL_IMP) -D $(LIBNAME) -E _gl -E _DMesa -U $^
|
||||
endif
|
||||
endif
|
||||
|
||||
@ -369,5 +369,3 @@ clean:
|
||||
-$(call UNLINK,drivers/dos/*.o)
|
||||
-$(call UNLINK,drivers/dos/mga/*.o)
|
||||
-$(call UNLINK,drivers/glide/*.o)
|
||||
|
||||
-include depend
|
||||
|
@ -26,14 +26,14 @@
|
||||
* DOS/DJGPP device driver v1.4 for Mesa
|
||||
*
|
||||
* Copyright (c) 2003 - Borca Daniel
|
||||
* Email : dborca@yahoo.com
|
||||
* Email : dborca@users.sourceforge.net
|
||||
* Web : http://www.geocities.com/dborca
|
||||
*/
|
||||
|
||||
|
||||
#ifndef FX
|
||||
#include "glheader.h"
|
||||
#include "context.h"
|
||||
#ifndef FX
|
||||
#include "extensions.h"
|
||||
#include "macros.h"
|
||||
#include "matrix.h"
|
||||
@ -58,7 +58,7 @@
|
||||
#include "mga/mga.h"
|
||||
#endif /* MATROX */
|
||||
#else /* FX */
|
||||
#include "../glide/fxdrv.h"
|
||||
#include "GL/fxmesa.h"
|
||||
#endif /* FX */
|
||||
|
||||
#include "GL/dmesa.h"
|
||||
@ -1142,7 +1142,7 @@ static const GLubyte* get_string (GLcontext *ctx, GLenum name)
|
||||
#ifdef MATROX
|
||||
" (MGA)"
|
||||
#endif
|
||||
"\0port (c) Borca Daniel mar-2003";
|
||||
"\0port (c) Borca Daniel aug-2003";
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
@ -1474,7 +1474,7 @@ void DMesaDestroyVisual (DMesaVisual v)
|
||||
#endif
|
||||
|
||||
#else
|
||||
fxMesaDestroyContext((fxMesaContext)v);
|
||||
fxMesaDestroyContext((tdfxContextPtr)v);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -1536,7 +1536,7 @@ DMesaContext DMesaCreateContext (DMesaVisual visual,
|
||||
_mesa_enable_sw_extensions((GLcontext *)c);
|
||||
_mesa_enable_1_3_extensions((GLcontext *)c);
|
||||
_mesa_enable_1_4_extensions((GLcontext *)c);
|
||||
_mesa_enable_1_5_extensions((GLcontext *)c);
|
||||
_mesa_enable_1_5_extensions((GLcontext *)c);
|
||||
|
||||
/* you probably have to do a bunch of other initializations here. */
|
||||
c->visual = visual;
|
||||
@ -1645,7 +1645,7 @@ GLboolean DMesaMakeCurrent (DMesaContext c, DMesaBuffer b)
|
||||
}
|
||||
|
||||
#else
|
||||
fxMesaMakeCurrent((fxMesaContext)c);
|
||||
fxMesaMakeCurrent((tdfxContextPtr)c);
|
||||
#endif
|
||||
|
||||
return GL_TRUE;
|
||||
@ -1682,13 +1682,13 @@ void DMesaSetCI (int ndx, GLfloat red, GLfloat green, GLfloat blue)
|
||||
|
||||
|
||||
|
||||
DMesaContext DMesaGetCurrentContext (void)
|
||||
void *DMesaGetCurrentContext (void)
|
||||
{
|
||||
#ifndef FX
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
return (DMesaContext)ctx;
|
||||
return ctx;
|
||||
#else
|
||||
return (DMesaContext)fxMesaGetCurrentContext();
|
||||
return fxMesaGetCurrentContext();
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -1696,14 +1696,7 @@ DMesaContext DMesaGetCurrentContext (void)
|
||||
|
||||
int DMesaGetIntegerv (GLenum pname, GLint *params)
|
||||
{
|
||||
#ifndef FX
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
const DMesaContext c = (DMesaContext)ctx;
|
||||
#else
|
||||
const fxMesaContext c = fxMesaGetCurrentContext();
|
||||
#endif
|
||||
|
||||
if (c == NULL) {
|
||||
if (DMesaGetCurrentContext() == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1716,8 +1709,7 @@ int DMesaGetIntegerv (GLenum pname, GLint *params)
|
||||
mga_get(MGA_GET_SCREEN_SIZE, params);
|
||||
#endif
|
||||
#else
|
||||
params[0] = c->screen_width;
|
||||
params[1] = c->screen_height;
|
||||
fxGetScreenGeometry(¶ms[0], ¶ms[1]);
|
||||
#endif
|
||||
break;
|
||||
case DMESA_GET_DRIVER_CAPS:
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: fxapi.c,v 1.36 2003/07/17 14:50:12 brianp Exp $ */
|
||||
/* $Id: fxapi.c,v 1.37 2003/08/19 15:52:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@ -29,6 +29,8 @@
|
||||
* Brian Paul
|
||||
* Daryll Strauss
|
||||
* Keith Whitwell
|
||||
* Daniel Borca
|
||||
* Hiroshi Morii
|
||||
*/
|
||||
|
||||
|
||||
@ -103,10 +105,29 @@ fxMesaSelectCurrentBoard(int n)
|
||||
}
|
||||
|
||||
|
||||
fxMesaContext GLAPIENTRY
|
||||
fxMesaGetCurrentContext(void)
|
||||
void * GLAPIENTRY fxMesaGetCurrentContext (void)
|
||||
{
|
||||
return fxMesaCurrentCtx;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
return ctx;
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY fxGetScreenGeometry (GLint *w, GLint *h)
|
||||
{
|
||||
GLint width = 0;
|
||||
GLint height = 0;
|
||||
|
||||
if (fxMesaCurrentCtx != NULL) {
|
||||
width = fxMesaCurrentCtx->screen_width;
|
||||
height = fxMesaCurrentCtx->screen_height;
|
||||
}
|
||||
|
||||
if (w != NULL) {
|
||||
*w = width;
|
||||
}
|
||||
if (h != NULL) {
|
||||
*h = height;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -133,11 +154,7 @@ gl3DfxSetPaletteEXT(GLuint * pal)
|
||||
if (fxMesa) {
|
||||
fxMesa->haveGlobalPaletteTexture = 1;
|
||||
|
||||
FX_grTexDownloadTable(GR_TMU0, GR_TEXTABLE_PALETTE,
|
||||
(GuTexPalette *) pal);
|
||||
if (fxMesa->haveTwoTMUs)
|
||||
FX_grTexDownloadTable(GR_TMU1, GR_TEXTABLE_PALETTE,
|
||||
(GuTexPalette *) pal);
|
||||
grTexDownloadTable(GR_TEXTABLE_PALETTE, (GuTexPalette *) pal);
|
||||
}
|
||||
}
|
||||
|
||||
@ -169,16 +186,8 @@ fxBestResolution(int width, int height, int aux)
|
||||
|
||||
fxQueryHardware();
|
||||
|
||||
if (glbHWConfig.SSTs[glbCurrentBoard].type == GR_SSTTYPE_VOODOO) {
|
||||
fbmem = glbHWConfig.SSTs[glbCurrentBoard].sstBoard.VoodooConfig.fbRam;
|
||||
|
||||
if (glbHWConfig.SSTs[glbCurrentBoard].sstBoard.VoodooConfig.sliDetect)
|
||||
fbmem *= 2;
|
||||
}
|
||||
else if (glbHWConfig.SSTs[glbCurrentBoard].type == GR_SSTTYPE_SST96)
|
||||
fbmem = glbHWConfig.SSTs[glbCurrentBoard].sstBoard.SST96Config.fbRam;
|
||||
else
|
||||
fbmem = 2;
|
||||
fbmem = glbHWConfig.SSTs[glbCurrentBoard].VoodooConfig.fbRam
|
||||
* glbHWConfig.SSTs[glbCurrentBoard].VoodooConfig.numChips;
|
||||
|
||||
/* A work around for BZFlag */
|
||||
|
||||
@ -187,13 +196,14 @@ fxBestResolution(int width, int height, int aux)
|
||||
height = 480;
|
||||
}
|
||||
|
||||
for (i = 0; i < NUM_RESOLUTIONS; i++)
|
||||
for (i = 0; i < NUM_RESOLUTIONS; i++) {
|
||||
if (resolutions[i][4 - aux] <= fbmem) {
|
||||
if ((width <= resolutions[i][0]) && (height <= resolutions[i][1]))
|
||||
if ((width <= resolutions[i][0]) && (height <= resolutions[i][1])) {
|
||||
return resolutions[i][2];
|
||||
|
||||
}
|
||||
lastvalidres = resolutions[i][2];
|
||||
}
|
||||
}
|
||||
|
||||
return lastvalidres;
|
||||
}
|
||||
@ -282,7 +292,6 @@ fxMesaCreateContext(GLuint win,
|
||||
/*FX_GrContext_t glideContext = 0; */
|
||||
char *errorstr;
|
||||
GLboolean useBGR;
|
||||
char *system = NULL;
|
||||
GLuint pixFmt, colDepth = 16;
|
||||
GLint redBits, greenBits, blueBits, alphaBits;
|
||||
|
||||
@ -306,15 +315,15 @@ fxMesaCreateContext(GLuint win,
|
||||
case FXMESA_ALPHA_SIZE:
|
||||
i++;
|
||||
alphaBuffer = attribList[i] > 0;
|
||||
if (alphaBuffer)
|
||||
if (alphaBuffer) {
|
||||
aux = 1;
|
||||
}
|
||||
break;
|
||||
case FXMESA_DEPTH_SIZE:
|
||||
i++;
|
||||
depthSize = attribList[i];
|
||||
if (depthSize) {
|
||||
aux = 1;
|
||||
depthSize = 16;
|
||||
}
|
||||
break;
|
||||
case FXMESA_STENCIL_SIZE:
|
||||
@ -337,26 +346,26 @@ fxMesaCreateContext(GLuint win,
|
||||
break;
|
||||
default:
|
||||
if (MESA_VERBOSE & VERBOSE_DRIVER) {
|
||||
fprintf(stderr, "fxmesa: fxMesaCreateContext() End (defualt)\n");
|
||||
fprintf(stderr, "fxmesa: bad FXMESA_* switch\n");
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
if (depthSize) {
|
||||
depthSize = (colDepth == 32) ? 24 : 16;
|
||||
}
|
||||
|
||||
/* A workaround for Linux GLQuake */
|
||||
if (depthSize && alphaBuffer)
|
||||
alphaBuffer = 0;
|
||||
|
||||
if ((type = fxQueryHardware()) < 0) {
|
||||
fprintf(stderr,
|
||||
"fx Driver: ERROR no Voodoo1/2 Graphics or Voodoo Rush !\n");
|
||||
fprintf(stderr, "fxmesa: ERROR no Voodoo hardware!\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (type == GR_SSTTYPE_VOODOO)
|
||||
win = 0;
|
||||
|
||||
grSstSelect(glbCurrentBoard);
|
||||
|
||||
fxMesa = (fxMesaContext) calloc(1, sizeof(struct tfxMesaContext));
|
||||
@ -365,23 +374,14 @@ fxMesaCreateContext(GLuint win,
|
||||
goto errorhandler;
|
||||
}
|
||||
|
||||
if (glbHWConfig.SSTs[glbCurrentBoard].type == GR_SSTTYPE_VOODOO)
|
||||
fxMesa->haveTwoTMUs =
|
||||
(glbHWConfig.SSTs[glbCurrentBoard].sstBoard.VoodooConfig.nTexelfx >
|
||||
1);
|
||||
else if (glbHWConfig.SSTs[glbCurrentBoard].type == GR_SSTTYPE_SST96)
|
||||
fxMesa->haveTwoTMUs =
|
||||
(glbHWConfig.SSTs[glbCurrentBoard].sstBoard.SST96Config.nTexelfx >
|
||||
1);
|
||||
else
|
||||
fxMesa->haveTwoTMUs = GL_FALSE;
|
||||
|
||||
fxMesa->haveTwoTMUs = (glbHWConfig.SSTs[glbCurrentBoard].VoodooConfig.nTexelfx > 1);
|
||||
fxMesa->haveDoubleBuffer = doubleBuffer;
|
||||
fxMesa->haveAlphaBuffer = alphaBuffer;
|
||||
fxMesa->haveGlobalPaletteTexture = GL_FALSE;
|
||||
fxMesa->haveZBuffer = depthSize ? 1 : 0;
|
||||
fxMesa->verbose = verbose;
|
||||
fxMesa->board = glbCurrentBoard;
|
||||
fxMesa->maxTextureSize = glbHWConfig.SSTs[glbCurrentBoard].VoodooConfig.maxTextureSize; /* [koolsmoky] */
|
||||
|
||||
|
||||
switch (fxMesa->colDepth = colDepth) {
|
||||
@ -390,21 +390,21 @@ fxMesaCreateContext(GLuint win,
|
||||
greenBits = 5;
|
||||
blueBits = 5;
|
||||
alphaBits = 1;
|
||||
pixFmt = 4; /* GR_PIXFMT_ARGB_1555 */
|
||||
pixFmt = GR_PIXFMT_ARGB_1555;
|
||||
break;
|
||||
case 16:
|
||||
redBits = 5;
|
||||
greenBits = 6;
|
||||
blueBits = 5;
|
||||
alphaBits = 0;
|
||||
pixFmt = 3; /* GR_PIXFMT_ARGB_565 */
|
||||
pixFmt = GR_PIXFMT_RGB_565;
|
||||
break;
|
||||
case 32:
|
||||
redBits = 8;
|
||||
greenBits = 8;
|
||||
blueBits = 8;
|
||||
alphaBits = 8;
|
||||
pixFmt = 5; /* GR_PIXFMT_ARGB_8888 */
|
||||
pixFmt = GR_PIXFMT_ARGB_8888;
|
||||
break;
|
||||
default:
|
||||
errorstr = "pixelFormat";
|
||||
@ -414,11 +414,7 @@ fxMesaCreateContext(GLuint win,
|
||||
|
||||
fxMesa->glideContext = FX_grSstWinOpen(&glbHWConfig.SSTs[glbCurrentBoard],
|
||||
(FxU32)win, res, ref,
|
||||
#ifdef FXMESA_USE_ARGB
|
||||
GR_COLORFORMAT_ARGB,
|
||||
#else
|
||||
GR_COLORFORMAT_ABGR,
|
||||
#endif
|
||||
pixFmt,
|
||||
GR_ORIGIN_LOWER_LEFT, 2, aux);
|
||||
if (!fxMesa->glideContext) {
|
||||
@ -428,87 +424,34 @@ fxMesaCreateContext(GLuint win,
|
||||
|
||||
/*
|
||||
* Pixel tables are used during pixel read-back
|
||||
* Either initialize them for RGB or BGR order.
|
||||
* Either initialize them for RGB or BGR order;
|
||||
* However, 32bit capable cards have the right order.
|
||||
* As a consequence, 32bit read-back is not swizzled!
|
||||
* Also determine if we need vertex snapping.
|
||||
*/
|
||||
|
||||
fxMesa->snapVertices = GL_TRUE; /* play it safe */
|
||||
|
||||
#ifdef FXMESA_USE_ARGB
|
||||
useBGR = GL_FALSE; /* Force RGB pixel order */
|
||||
system = "FXMESA_USE_ARGB";
|
||||
#else
|
||||
if (glbHWConfig.SSTs[glbCurrentBoard].type == GR_SSTTYPE_VOODOO) {
|
||||
/* jk991130 - Voodoo 3s don't use BGR. Query the # of TMUs
|
||||
* as Voodoo3s have 2 TMUs on board, Banshee has only 1
|
||||
* bk000413 - another suggestion from Joseph Kain is using
|
||||
* VendorID 0x121a for all 3dfx boards
|
||||
* DeviceID VG 1/V2 2/VB 3/V3 5
|
||||
* For now we cehck for known BGR devices, and presume
|
||||
* everything else to be a V3/RGB.
|
||||
*/
|
||||
GrVoodooConfig_t *voodoo;
|
||||
voodoo = &glbHWConfig.SSTs[glbCurrentBoard].sstBoard.VoodooConfig;
|
||||
|
||||
if (voodoo->nTexelfx == 1) {
|
||||
/* Voodoo1 or Banshee */
|
||||
useBGR = GL_TRUE;
|
||||
system = "Voodoo1";
|
||||
}
|
||||
else if (voodoo->nTexelfx == 2 &&
|
||||
voodoo->fbiRev == 260 &&
|
||||
voodoo->tmuConfig[0].tmuRev == 4 &&
|
||||
(voodoo->tmuConfig[0].tmuRam == 2 ||
|
||||
voodoo->tmuConfig[0].tmuRam == 4)) {
|
||||
/* Voodoo 2 */
|
||||
useBGR = GL_TRUE;
|
||||
system = "Voodoo2";
|
||||
fxMesa->snapVertices = GL_FALSE;
|
||||
}
|
||||
else if (voodoo->nTexelfx == 2 &&
|
||||
voodoo->fbiRev == 2 &&
|
||||
voodoo->tmuConfig[0].tmuRev == 1 &&
|
||||
voodoo->tmuConfig[0].tmuRam == 4) {
|
||||
/* Quantum3D Obsidian 50/100 */
|
||||
useBGR = GL_TRUE;
|
||||
system = "Quantum3D Obsidian";
|
||||
}
|
||||
else
|
||||
/* Brian
|
||||
* (voodoo->nTexelfx == 2 &&
|
||||
* voodoo->fbiRev == 0 &&
|
||||
* voodoo->tmuConfig[0].tmuRev == 148441048 &&
|
||||
* voodoo->tmuConfig[0].tmuRam == 3)
|
||||
* Bernd
|
||||
* (voodoo->nTexelfx == 2 &&
|
||||
* voodoo->fbiRev == 69634 &&
|
||||
* voodoo->tmuConfig[0].tmuRev == 69634 &&
|
||||
* voodoo->tmuConfig[0].tmuRam == 2 )
|
||||
*/
|
||||
{
|
||||
/* Presumed Voodoo3 */
|
||||
useBGR = GL_FALSE;
|
||||
system = "Voodoo3";
|
||||
fxMesa->snapVertices = GL_FALSE;
|
||||
}
|
||||
if (verbose) {
|
||||
fprintf(stderr,
|
||||
"Voodoo: Texelfx: %d / FBI Rev.: %d / TMU Rev.: %d / TMU RAM: %d\n",
|
||||
voodoo->nTexelfx, voodoo->fbiRev, voodoo->tmuConfig[0].tmuRev,
|
||||
voodoo->tmuConfig[0].tmuRam);
|
||||
}
|
||||
switch (glbHWConfig.SSTs[glbCurrentBoard].type) {
|
||||
case GR_SSTTYPE_VOODOO:
|
||||
case GR_SSTTYPE_Banshee:
|
||||
useBGR = GL_TRUE;
|
||||
fxMesa->snapVertices = GL_TRUE;
|
||||
break;
|
||||
case GR_SSTTYPE_Voodoo2:
|
||||
useBGR = GL_TRUE;
|
||||
fxMesa->snapVertices = GL_FALSE;
|
||||
break;
|
||||
case GR_SSTTYPE_Voodoo3:
|
||||
case GR_SSTTYPE_Voodoo4:
|
||||
case GR_SSTTYPE_Voodoo5:
|
||||
default:
|
||||
useBGR = GL_FALSE;
|
||||
fxMesa->snapVertices = GL_FALSE;
|
||||
break;
|
||||
}
|
||||
else {
|
||||
useBGR = GL_FALSE; /* use RGB pixel order otherwise */
|
||||
system = "non-voodoo";
|
||||
fxMesa->snapVertices = GL_FALSE;
|
||||
}
|
||||
#endif /*FXMESA_USE_ARGB */
|
||||
|
||||
if (verbose) {
|
||||
fprintf(stderr, "Voodoo pixel order: %s (%s)\n",
|
||||
useBGR ? "BGR" : "RGB", system);
|
||||
fprintf(stderr, "Vertex snapping: %d\n", fxMesa->snapVertices);
|
||||
fprintf(stderr, "Voodoo pixel order = %s, vertex snapping = %d\n",
|
||||
useBGR ? "BGR" : "RGB",
|
||||
fxMesa->snapVertices);
|
||||
}
|
||||
|
||||
fxInitPixelTables(fxMesa, useBGR);
|
||||
@ -527,8 +470,8 @@ fxMesaCreateContext(GLuint win,
|
||||
fxMesa->new_state = ~0;
|
||||
|
||||
if (verbose)
|
||||
fprintf(stderr, "Voodoo Glide screen size: %dx%d\n",
|
||||
(int) FX_grSstScreenWidth(), (int) FX_grSstScreenHeight());
|
||||
fprintf(stderr, "Voodoo screen: %dx%dx%d\n",
|
||||
(int)FX_grSstScreenWidth(), (int)FX_grSstScreenHeight(), colDepth);
|
||||
|
||||
fxMesa->glVis = _mesa_create_visual(GL_TRUE, /* RGB mode */
|
||||
doubleBuffer, GL_FALSE, /* stereo */
|
||||
@ -594,7 +537,7 @@ fxMesaCreateContext(GLuint win,
|
||||
errorhandler:
|
||||
if (fxMesa) {
|
||||
if (fxMesa->glideContext)
|
||||
FX_grSstWinClose(fxMesa->glideContext);
|
||||
grSstWinClose(fxMesa->glideContext);
|
||||
fxMesa->glideContext = 0;
|
||||
|
||||
if (fxMesa->state)
|
||||
@ -611,7 +554,7 @@ fxMesaCreateContext(GLuint win,
|
||||
}
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_DRIVER) {
|
||||
fprintf(stderr, "fxmesa: fxMesaCreateContext() End (%s)\n", errorstr);
|
||||
fprintf(stderr, "fxmesa: ERROR (%s)\n", errorstr);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@ -679,7 +622,7 @@ fxMesaDestroyContext(fxMesaContext fxMesa)
|
||||
_mesa_destroy_framebuffer(fxMesa->glBuffer);
|
||||
|
||||
fxCloseHardware();
|
||||
FX_grSstWinClose(fxMesa->glideContext);
|
||||
grSstWinClose(fxMesa->glideContext);
|
||||
|
||||
free(fxMesa);
|
||||
|
||||
@ -784,7 +727,7 @@ fxMesaSwapBuffers(void)
|
||||
/*
|
||||
* Don't allow swap buffer commands to build up!
|
||||
*/
|
||||
while (FX_grGetInteger(FX_PENDING_BUFFERSWAPS) >
|
||||
while (FX_grGetInteger(GR_PENDING_BUFFERSWAPS) >
|
||||
fxMesaCurrentCtx->maxPendingSwapBuffers)
|
||||
/* The driver is able to sleep when waiting for the completation
|
||||
of multiple swapbuffer operations instead of wasting
|
||||
@ -817,38 +760,15 @@ fxQueryHardware(void)
|
||||
|
||||
if (getenv("MESA_FX_INFO")) {
|
||||
char buf[80];
|
||||
GrVoodooConfig_t *voodoo = &glbHWConfig.SSTs[glbCurrentBoard].VoodooConfig;
|
||||
|
||||
FX_grGlideGetVersion(buf);
|
||||
fprintf(stderr, "Voodoo Using Glide V%s\n", buf);
|
||||
fprintf(stderr, "Voodoo Number of boards: %d\n",
|
||||
glbHWConfig.num_sst);
|
||||
|
||||
if (glbHWConfig.SSTs[glbCurrentBoard].type == GR_SSTTYPE_VOODOO) {
|
||||
GrVoodooConfig_t *voodoo;
|
||||
voodoo =
|
||||
&glbHWConfig.SSTs[glbCurrentBoard].sstBoard.VoodooConfig;
|
||||
|
||||
fprintf(stderr, "Voodoo Framebuffer RAM: %d\n",
|
||||
voodoo->sliDetect ? (voodoo->fbRam *
|
||||
2) : voodoo->fbRam);
|
||||
fprintf(stderr, "Voodoo Number of TMUs: %d\n",
|
||||
voodoo->nTexelfx);
|
||||
fprintf(stderr, "Voodoo fbRam: %d\n", voodoo->fbRam);
|
||||
fprintf(stderr, "Voodoo fbiRev: %d\n", voodoo->fbiRev);
|
||||
|
||||
fprintf(stderr, "Voodoo SLI detected: %d\n",
|
||||
voodoo->sliDetect);
|
||||
}
|
||||
else if (glbHWConfig.SSTs[glbCurrentBoard].type ==
|
||||
GR_SSTTYPE_SST96) {
|
||||
GrSst96Config_t *sst96;
|
||||
sst96 =
|
||||
&glbHWConfig.SSTs[glbCurrentBoard].sstBoard.SST96Config;
|
||||
fprintf(stderr, "Voodoo Framebuffer RAM: %d\n", sst96->fbRam);
|
||||
fprintf(stderr, "Voodoo Number of TMUs: %d\n",
|
||||
sst96->nTexelfx);
|
||||
}
|
||||
|
||||
strcpy(buf, grGetString(GR_VERSION));
|
||||
fprintf(stderr, "Voodoo Using Glide %s\n", buf);
|
||||
fprintf(stderr, "Voodoo Number of boards: %d\n", glbHWConfig.num_sst);
|
||||
fprintf(stderr, "Voodoo Number of TMUs: %d\n", voodoo->nTexelfx);
|
||||
fprintf(stderr, "Voodoo fbRam: %d\n", voodoo->fbRam);
|
||||
fprintf(stderr, "Voodoo fbiRev: %d\n", voodoo->fbiRev);
|
||||
fprintf(stderr, "Voodoo chips detected: %d\n", voodoo->numChips);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -858,7 +778,7 @@ fxQueryHardware(void)
|
||||
glbGlideInitialized = 1;
|
||||
|
||||
#if defined(__WIN32__)
|
||||
onexit((_onexit_t) cleangraphics);
|
||||
_onexit((_onexit_t) cleangraphics);
|
||||
#elif defined(__linux__)
|
||||
/* Only register handler if environment variable is not defined. */
|
||||
if (!getenv("MESA_FX_NO_SIGNALS")) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
* fxDDReadPixels888 does not convert 8A8R8G8B into 5R5G5B
|
||||
*/
|
||||
|
||||
/* $Id: fxdd.c,v 1.98 2003/07/17 14:50:12 brianp Exp $ */
|
||||
/* $Id: fxdd.c,v 1.99 2003/08/19 15:52:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@ -33,6 +33,8 @@
|
||||
* Brian Paul
|
||||
* Daryll Strauss
|
||||
* Keith Whitwell
|
||||
* Daniel Borca
|
||||
* Hiroshi Morii
|
||||
*/
|
||||
|
||||
/* fxdd.c - 3Dfx VooDoo Mesa device driver functions */
|
||||
@ -167,7 +169,8 @@ fxDDClear(GLcontext * ctx, GLbitfield mask, GLboolean all,
|
||||
{
|
||||
fxMesaContext fxMesa = (fxMesaContext) ctx->DriverCtx;
|
||||
const GLuint colorMask = *((GLuint *) & ctx->Color.ColorMask);
|
||||
const FxU16 clearD = (FxU16) (ctx->Depth.Clear * 0xffff);
|
||||
/* [dBorca] should use an adequate scaler for 16 vs 32bit (GR_ZDEPTH_MIN_MAX) */
|
||||
const FxU32 clearD = (FxU32) (ctx->Depth.Clear * 0x00ffffff);
|
||||
GLbitfield softwareMask = mask & (DD_STENCIL_BIT | DD_ACCUM_BIT);
|
||||
|
||||
/* we can't clear stencil or accum buffers */
|
||||
@ -191,11 +194,11 @@ fxDDClear(GLcontext * ctx, GLbitfield mask, GLboolean all,
|
||||
switch (mask) {
|
||||
case DD_BACK_LEFT_BIT | DD_DEPTH_BIT:
|
||||
/* back buffer & depth */
|
||||
FX_grDepthMask(FXTRUE);
|
||||
FX_grRenderBuffer(GR_BUFFER_BACKBUFFER);
|
||||
grDepthMask(FXTRUE);
|
||||
grRenderBuffer(GR_BUFFER_BACKBUFFER);
|
||||
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD);
|
||||
if (!ctx->Depth.Mask) {
|
||||
FX_grDepthMask(FXFALSE);
|
||||
grDepthMask(FXFALSE);
|
||||
}
|
||||
break;
|
||||
case DD_FRONT_LEFT_BIT | DD_DEPTH_BIT:
|
||||
@ -204,70 +207,68 @@ fxDDClear(GLcontext * ctx, GLbitfield mask, GLboolean all,
|
||||
* This is a work-around/
|
||||
*/
|
||||
/* clear depth */
|
||||
FX_grDepthMask(FXTRUE);
|
||||
FX_grRenderBuffer(GR_BUFFER_BACKBUFFER);
|
||||
FX_grColorMask(FXFALSE, FXFALSE);
|
||||
grDepthMask(FXTRUE);
|
||||
grRenderBuffer(GR_BUFFER_BACKBUFFER);
|
||||
grColorMask(FXFALSE, FXFALSE);
|
||||
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD);
|
||||
/* clear front */
|
||||
FX_grColorMask(FXTRUE, ctx->Color.ColorMask[ACOMP]
|
||||
&& fxMesa->haveAlphaBuffer);
|
||||
FX_grRenderBuffer(GR_BUFFER_FRONTBUFFER);
|
||||
grColorMask(FXTRUE, ctx->Color.ColorMask[ACOMP] && fxMesa->haveAlphaBuffer);
|
||||
grRenderBuffer(GR_BUFFER_FRONTBUFFER);
|
||||
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD);
|
||||
break;
|
||||
case DD_BACK_LEFT_BIT:
|
||||
/* back buffer only */
|
||||
FX_grDepthMask(FXFALSE);
|
||||
FX_grRenderBuffer(GR_BUFFER_BACKBUFFER);
|
||||
grDepthMask(FXFALSE);
|
||||
grRenderBuffer(GR_BUFFER_BACKBUFFER);
|
||||
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD);
|
||||
if (ctx->Depth.Mask) {
|
||||
FX_grDepthMask(FXTRUE);
|
||||
grDepthMask(FXTRUE);
|
||||
}
|
||||
break;
|
||||
case DD_FRONT_LEFT_BIT:
|
||||
/* front buffer only */
|
||||
FX_grDepthMask(FXFALSE);
|
||||
FX_grRenderBuffer(GR_BUFFER_FRONTBUFFER);
|
||||
grDepthMask(FXFALSE);
|
||||
grRenderBuffer(GR_BUFFER_FRONTBUFFER);
|
||||
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD);
|
||||
if (ctx->Depth.Mask) {
|
||||
FX_grDepthMask(FXTRUE);
|
||||
grDepthMask(FXTRUE);
|
||||
}
|
||||
break;
|
||||
case DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT:
|
||||
/* front and back */
|
||||
FX_grDepthMask(FXFALSE);
|
||||
FX_grRenderBuffer(GR_BUFFER_BACKBUFFER);
|
||||
grDepthMask(FXFALSE);
|
||||
grRenderBuffer(GR_BUFFER_BACKBUFFER);
|
||||
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD);
|
||||
FX_grRenderBuffer(GR_BUFFER_FRONTBUFFER);
|
||||
grRenderBuffer(GR_BUFFER_FRONTBUFFER);
|
||||
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD);
|
||||
if (ctx->Depth.Mask) {
|
||||
FX_grDepthMask(FXTRUE);
|
||||
grDepthMask(FXTRUE);
|
||||
}
|
||||
break;
|
||||
case DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT | DD_DEPTH_BIT:
|
||||
/* clear front */
|
||||
FX_grDepthMask(FXFALSE);
|
||||
FX_grRenderBuffer(GR_BUFFER_FRONTBUFFER);
|
||||
grDepthMask(FXFALSE);
|
||||
grRenderBuffer(GR_BUFFER_FRONTBUFFER);
|
||||
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD);
|
||||
/* clear back and depth */
|
||||
FX_grDepthMask(FXTRUE);
|
||||
FX_grRenderBuffer(GR_BUFFER_BACKBUFFER);
|
||||
grDepthMask(FXTRUE);
|
||||
grRenderBuffer(GR_BUFFER_BACKBUFFER);
|
||||
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD);
|
||||
if (!ctx->Depth.Mask) {
|
||||
FX_grDepthMask(FXFALSE);
|
||||
grDepthMask(FXFALSE);
|
||||
}
|
||||
break;
|
||||
case DD_DEPTH_BIT:
|
||||
/* just the depth buffer */
|
||||
FX_grRenderBuffer(GR_BUFFER_BACKBUFFER);
|
||||
FX_grColorMask(FXFALSE, FXFALSE);
|
||||
FX_grDepthMask(FXTRUE);
|
||||
grRenderBuffer(GR_BUFFER_BACKBUFFER);
|
||||
grColorMask(FXFALSE, FXFALSE);
|
||||
grDepthMask(FXTRUE);
|
||||
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, clearD);
|
||||
FX_grColorMask(FXTRUE, ctx->Color.ColorMask[ACOMP]
|
||||
&& fxMesa->haveAlphaBuffer);
|
||||
grColorMask(FXTRUE, ctx->Color.ColorMask[ACOMP] && fxMesa->haveAlphaBuffer);
|
||||
if (ctx->Color._DrawDestMask & FRONT_LEFT_BIT)
|
||||
FX_grRenderBuffer(GR_BUFFER_FRONTBUFFER);
|
||||
grRenderBuffer(GR_BUFFER_FRONTBUFFER);
|
||||
if (!ctx->Depth.Test || !ctx->Depth.Mask)
|
||||
FX_grDepthMask(FXFALSE);
|
||||
grDepthMask(FXFALSE);
|
||||
break;
|
||||
default:
|
||||
/* error */
|
||||
@ -294,14 +295,14 @@ fxDDSetDrawBuffer(GLcontext * ctx, GLenum mode)
|
||||
|
||||
if (mode == GL_FRONT_LEFT) {
|
||||
fxMesa->currentFB = GR_BUFFER_FRONTBUFFER;
|
||||
FX_grRenderBuffer(fxMesa->currentFB);
|
||||
grRenderBuffer(fxMesa->currentFB);
|
||||
}
|
||||
else if (mode == GL_BACK_LEFT) {
|
||||
fxMesa->currentFB = GR_BUFFER_BACKBUFFER;
|
||||
FX_grRenderBuffer(fxMesa->currentFB);
|
||||
grRenderBuffer(fxMesa->currentFB);
|
||||
}
|
||||
else if (mode == GL_NONE) {
|
||||
FX_grColorMask(FXFALSE, FXFALSE);
|
||||
grColorMask(FXFALSE, FXFALSE);
|
||||
}
|
||||
else {
|
||||
/* we'll need a software fallback */
|
||||
@ -404,10 +405,10 @@ fxDDDrawBitmap(GLcontext * ctx, GLint px, GLint py,
|
||||
}
|
||||
|
||||
info.size = sizeof(info);
|
||||
if (!FX_grLfbLock(GR_LFB_WRITE_ONLY,
|
||||
fxMesa->currentFB,
|
||||
GR_LFBWRITEMODE_565,
|
||||
GR_ORIGIN_UPPER_LEFT, FXFALSE, &info)) {
|
||||
if (!grLfbLock(GR_LFB_WRITE_ONLY,
|
||||
fxMesa->currentFB,
|
||||
GR_LFBWRITEMODE_565,
|
||||
GR_ORIGIN_UPPER_LEFT, FXFALSE, &info)) {
|
||||
#ifndef FX_SILENT
|
||||
fprintf(stderr, "fx Driver: error locking the linear frame buffer\n");
|
||||
#endif
|
||||
@ -476,7 +477,7 @@ fxDDDrawBitmap(GLcontext * ctx, GLint px, GLint py,
|
||||
}
|
||||
}
|
||||
|
||||
FX_grLfbUnlock(GR_LFB_WRITE_ONLY, fxMesa->currentFB);
|
||||
grLfbUnlock(GR_LFB_WRITE_ONLY, fxMesa->currentFB);
|
||||
}
|
||||
|
||||
|
||||
@ -783,7 +784,7 @@ static void fxDDReadPixels888 (GLcontext * ctx,
|
||||
static void
|
||||
fxDDFinish(GLcontext * ctx)
|
||||
{
|
||||
FX_grFlush();
|
||||
grFlush();
|
||||
}
|
||||
|
||||
|
||||
@ -797,43 +798,23 @@ fxDDFinish(GLcontext * ctx)
|
||||
static const GLubyte *
|
||||
fxDDGetString(GLcontext * ctx, GLenum name)
|
||||
{
|
||||
switch (name) {
|
||||
case GL_RENDERER:
|
||||
{
|
||||
static char buf[80];
|
||||
|
||||
if (glbHWConfig.SSTs[glbCurrentBoard].type == GR_SSTTYPE_VOODOO) {
|
||||
GrVoodooConfig_t *vc =
|
||||
&glbHWConfig.SSTs[glbCurrentBoard].sstBoard.VoodooConfig;
|
||||
|
||||
sprintf(buf,
|
||||
"Mesa Glide v0.30 Voodoo_Graphics %d "
|
||||
"CARD/%d FB/%d TM/%d TMU/%s",
|
||||
glbCurrentBoard,
|
||||
(vc->sliDetect ? (vc->fbRam * 2) : vc->fbRam),
|
||||
(vc->tmuConfig[GR_TMU0].tmuRam +
|
||||
((vc->nTexelfx > 1) ? vc->tmuConfig[GR_TMU1].
|
||||
tmuRam : 0)), vc->nTexelfx,
|
||||
(vc->sliDetect ? "SLI" : "NOSLI"));
|
||||
}
|
||||
else if (glbHWConfig.SSTs[glbCurrentBoard].type == GR_SSTTYPE_SST96) {
|
||||
GrSst96Config_t *sc =
|
||||
&glbHWConfig.SSTs[glbCurrentBoard].sstBoard.SST96Config;
|
||||
|
||||
sprintf(buf,
|
||||
"Glide v0.30 Voodoo_Rush %d "
|
||||
"CARD/%d FB/%d TM/%d TMU/NOSLI",
|
||||
glbCurrentBoard,
|
||||
sc->fbRam, sc->tmuConfig.tmuRam, sc->nTexelfx);
|
||||
}
|
||||
else {
|
||||
strcpy(buf, "Glide v0.30 UNKNOWN");
|
||||
}
|
||||
return (GLubyte *) buf;
|
||||
}
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
switch (name) {
|
||||
case GL_RENDERER:
|
||||
{
|
||||
static char buf[80];
|
||||
GrVoodooConfig_t *vc = &glbHWConfig.SSTs[glbCurrentBoard].VoodooConfig;
|
||||
sprintf(buf, "Mesa %s v0.31 %s %dMB FB, %dMB TM, %d TMU, %s",
|
||||
grGetString(GR_RENDERER),
|
||||
grGetString(GR_HARDWARE),
|
||||
vc->fbRam,
|
||||
(vc->tmuConfig[GR_TMU0].tmuRam + ((vc->nTexelfx > 1) ? vc->tmuConfig[GR_TMU1].tmuRam : 0)),
|
||||
(vc->nTexelfx * vc->numChips),
|
||||
(vc->numChips > 1) ? "SLI" : "NOSLI");
|
||||
return (GLubyte *)buf;
|
||||
}
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static const struct gl_pipeline_stage *fx_pipeline[] = {
|
||||
@ -909,18 +890,18 @@ fxDDInitFxMesaContext(fxMesaContext fxMesa)
|
||||
fxMesa->unitsState.depthMask = GL_TRUE;
|
||||
fxMesa->unitsState.depthTestFunc = GR_CMP_LESS;
|
||||
|
||||
FX_grColorMask(FXTRUE, fxMesa->haveAlphaBuffer ? FXTRUE : FXFALSE);
|
||||
grColorMask(FXTRUE, fxMesa->haveAlphaBuffer ? FXTRUE : FXFALSE);
|
||||
if (fxMesa->haveDoubleBuffer) {
|
||||
fxMesa->currentFB = GR_BUFFER_BACKBUFFER;
|
||||
FX_grRenderBuffer(GR_BUFFER_BACKBUFFER);
|
||||
grRenderBuffer(GR_BUFFER_BACKBUFFER);
|
||||
}
|
||||
else {
|
||||
fxMesa->currentFB = GR_BUFFER_FRONTBUFFER;
|
||||
FX_grRenderBuffer(GR_BUFFER_FRONTBUFFER);
|
||||
grRenderBuffer(GR_BUFFER_FRONTBUFFER);
|
||||
}
|
||||
|
||||
fxMesa->state = malloc(FX_grGetInteger(FX_GLIDE_STATE_SIZE));
|
||||
fxMesa->fogTable = (GrFog_t *) malloc(FX_grGetInteger(FX_FOG_TABLE_ENTRIES) *
|
||||
fxMesa->state = malloc(FX_grGetInteger(GR_GLIDE_STATE_SIZE));
|
||||
fxMesa->fogTable = (GrFog_t *) malloc(FX_grGetInteger(GR_FOG_TABLE_ENTRIES) *
|
||||
sizeof(GrFog_t));
|
||||
|
||||
if (!fxMesa->state || !fxMesa->fogTable) {
|
||||
@ -932,14 +913,19 @@ fxDDInitFxMesaContext(fxMesaContext fxMesa)
|
||||
}
|
||||
|
||||
if (fxMesa->haveZBuffer)
|
||||
FX_grDepthBufferMode(GR_DEPTHBUFFER_ZBUFFER);
|
||||
grDepthBufferMode(GR_DEPTHBUFFER_ZBUFFER);
|
||||
|
||||
#ifndef FXMESA_USE_ARGB
|
||||
FX_grLfbWriteColorFormat(GR_COLORFORMAT_ABGR); /* Not every Glide has this */
|
||||
#endif
|
||||
grLfbWriteColorFormat(GR_COLORFORMAT_ABGR);
|
||||
|
||||
fxMesa->textureAlign = FX_grGetInteger(FX_TEXTURE_ALIGN);
|
||||
fxMesa->glCtx->Const.MaxTextureLevels = 9;
|
||||
fxMesa->textureAlign = FX_grGetInteger(GR_TEXTURE_ALIGN);
|
||||
/* [koolsmoky] */
|
||||
{
|
||||
int textureSize = ((fxMesa->maxTextureSize > 2048) ? 2048 : fxMesa->maxTextureSize);
|
||||
fxMesa->glCtx->Const.MaxTextureLevels = 0;
|
||||
do {
|
||||
fxMesa->glCtx->Const.MaxTextureLevels++;
|
||||
} while ((textureSize >>= 0x1) & 0x7ff);
|
||||
}
|
||||
fxMesa->glCtx->Const.MaxTextureUnits = fxMesa->haveTwoTMUs ? 2 : 1;
|
||||
fxMesa->new_state = _NEW_ALL;
|
||||
|
||||
@ -950,6 +936,7 @@ fxDDInitFxMesaContext(fxMesaContext fxMesa)
|
||||
_tnl_CreateContext(fxMesa->glCtx);
|
||||
_swsetup_CreateContext(fxMesa->glCtx);
|
||||
|
||||
/* Install customized pipeline */
|
||||
_tnl_destroy_pipeline(fxMesa->glCtx);
|
||||
_tnl_install_pipeline(fxMesa->glCtx, fx_pipeline);
|
||||
|
||||
@ -970,7 +957,7 @@ fxDDInitFxMesaContext(fxMesaContext fxMesa)
|
||||
|
||||
fxDDInitExtensions(fxMesa->glCtx);
|
||||
|
||||
FX_grGlideGetState((GrState *) fxMesa->state);
|
||||
grGlideGetState((GrState *) fxMesa->state);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -1,9 +1,11 @@
|
||||
/* Hack alert:
|
||||
* Depth32 functions won't compile with Glide2
|
||||
* The performance hit is disastruous for SPAN functions.
|
||||
* Should we use SpanRenderStart / SpanRenderFinish in `swrast.h'
|
||||
* for locking / unlocking the LFB?
|
||||
* Optimize and check endianess for `read_R8G8B8_pixels'
|
||||
*/
|
||||
|
||||
/* $Id: fxddspan.c,v 1.23 2003/07/17 14:50:12 brianp Exp $ */
|
||||
/* $Id: fxddspan.c,v 1.24 2003/08/19 15:52:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@ -34,6 +36,8 @@
|
||||
* Brian Paul
|
||||
* Daryll Strauss
|
||||
* Keith Whitwell
|
||||
* Daniel Borca
|
||||
* Hiroshi Morii
|
||||
*/
|
||||
|
||||
|
||||
@ -60,9 +64,6 @@
|
||||
#endif
|
||||
|
||||
|
||||
#if !defined(FXMESA_USE_ARGB)
|
||||
|
||||
|
||||
|
||||
#define writeRegionClipped(fxm,dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data) \
|
||||
FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)
|
||||
@ -87,42 +88,6 @@
|
||||
src_data) \
|
||||
|
||||
|
||||
#else /* !defined(FXMESA_USE_RGBA) */
|
||||
|
||||
#define writeRegionClipped(fxm,dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data) \
|
||||
FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)
|
||||
|
||||
|
||||
#define MESACOLOR_TO_ARGB(c) ( \
|
||||
( ((unsigned int)(c[ACOMP]))<<24 ) | \
|
||||
( ((unsigned int)(c[RCOMP]))<<16 ) | \
|
||||
( ((unsigned int)(c[GCOMP]))<<8 ) | \
|
||||
( (unsigned int)(c[BCOMP])) )
|
||||
|
||||
inline void
|
||||
LFB_WRITE_SPAN_MESA(GrBuffer_t dst_buffer,
|
||||
FxU32 dst_x,
|
||||
FxU32 dst_y,
|
||||
FxU32 src_width, FxI32 src_stride, void *src_data)
|
||||
{
|
||||
/* Covert to ARGB */
|
||||
GLubyte(*rgba)[4] = src_data;
|
||||
GLuint argb[MAX_WIDTH];
|
||||
int i;
|
||||
|
||||
for (i = 0; i < src_width; i++) {
|
||||
argb[i] = MESACOLOR_TO_ARGB(rgba[i]);
|
||||
}
|
||||
writeRegionClipped( /*fxMesa, */ NULL, dst_buffer,
|
||||
dst_x,
|
||||
dst_y,
|
||||
GR_LFB_SRC_FMT_8888,
|
||||
src_width, 1, src_stride, (void *) argb);
|
||||
}
|
||||
|
||||
#endif /* !defined(FXMESA_USE_RGBA) */
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/***** Span functions *****/
|
||||
/************************************************************************/
|
||||
@ -412,7 +377,7 @@ static void read_R8G8B8_span (const GLcontext * ctx,
|
||||
{
|
||||
fxMesaContext fxMesa = (fxMesaContext) ctx->DriverCtx;
|
||||
BEGIN_BOARD_LOCK();
|
||||
FX_grLfbReadRegion(fxMesa->currentFB, x, fxMesa->height - 1 - y, n, 1, n * 4, rgba);
|
||||
grLfbReadRegion(fxMesa->currentFB, x, fxMesa->height - 1 - y, n, 1, n * 4, rgba);
|
||||
END_BOARD_LOCK();
|
||||
}
|
||||
|
||||
@ -602,6 +567,7 @@ fxDDWriteDepth32Span(GLcontext * ctx,
|
||||
{
|
||||
fxMesaContext fxMesa = (fxMesaContext) ctx->DriverCtx;
|
||||
GLint bottom = fxMesa->height - 1;
|
||||
GLint i;
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_DRIVER) {
|
||||
fprintf(stderr, "fxmesa: fxDDWriteDepth32Span(...)\n");
|
||||
@ -609,17 +575,21 @@ fxDDWriteDepth32Span(GLcontext * ctx,
|
||||
|
||||
|
||||
if (mask) {
|
||||
GLint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
if (mask[i]) {
|
||||
GLuint d = depth[i] << 8;
|
||||
writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER, x + i, bottom - y,
|
||||
GR_LFBWRITEMODE_Z32, 1, 1, 0, (void *) &depth[i]);
|
||||
GR_LFBWRITEMODE_Z32, 1, 1, 0, (void *) &d);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
GLuint depth32[MAX_WIDTH];
|
||||
for (i = 0; i < n; i++) {
|
||||
depth32[i] = depth[i] << 8;
|
||||
}
|
||||
writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER, x, bottom - y,
|
||||
GR_LFBWRITEMODE_Z32, n, 1, 0, (void *) depth);
|
||||
GR_LFBWRITEMODE_Z32, n, 1, 0, (void *) depth32);
|
||||
}
|
||||
}
|
||||
|
||||
@ -637,7 +607,7 @@ fxDDReadDepthSpan(GLcontext * ctx,
|
||||
fprintf(stderr, "fxmesa: fxDDReadDepthSpan(...)\n");
|
||||
}
|
||||
|
||||
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER, x, bottom - y, n, 1, 0, depth16);
|
||||
grLfbReadRegion(GR_BUFFER_AUXBUFFER, x, bottom - y, n, 1, 0, depth16);
|
||||
for (i = 0; i < n; i++) {
|
||||
depth[i] = depth16[i];
|
||||
}
|
||||
@ -655,7 +625,7 @@ fxDDReadDepth32Span(GLcontext * ctx,
|
||||
fprintf(stderr, "fxmesa: fxDDReadDepth32Span(...)\n");
|
||||
}
|
||||
|
||||
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER, x, bottom - y, n, 1, 0, depth);
|
||||
grLfbReadRegion(GR_BUFFER_AUXBUFFER, x, bottom - y, n, 1, 0, depth);
|
||||
}
|
||||
|
||||
|
||||
@ -702,8 +672,9 @@ fxDDWriteDepth32Pixels(GLcontext * ctx,
|
||||
if (mask[i]) {
|
||||
int xpos = x[i];
|
||||
int ypos = bottom - y[i];
|
||||
GLuint d = depth[i] << 8;
|
||||
writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER, xpos, ypos,
|
||||
GR_LFBWRITEMODE_Z32, 1, 1, 0, (void *) &depth[i]);
|
||||
GR_LFBWRITEMODE_Z32, 1, 1, 0, (void *) &d);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -725,7 +696,7 @@ fxDDReadDepthPixels(GLcontext * ctx, GLuint n,
|
||||
int xpos = x[i];
|
||||
int ypos = bottom - y[i];
|
||||
GLushort d;
|
||||
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER, xpos, ypos, 1, 1, 0, &d);
|
||||
grLfbReadRegion(GR_BUFFER_AUXBUFFER, xpos, ypos, 1, 1, 0, &d);
|
||||
depth[i] = d;
|
||||
}
|
||||
}
|
||||
@ -746,7 +717,7 @@ fxDDReadDepth32Pixels(GLcontext * ctx, GLuint n,
|
||||
for (i = 0; i < n; i++) {
|
||||
int xpos = x[i];
|
||||
int ypos = bottom - y[i];
|
||||
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER, xpos, ypos, 1, 1, 0, &depth[i]);
|
||||
grLfbReadRegion(GR_BUFFER_AUXBUFFER, xpos, ypos, 1, 1, 0, &depth[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -766,11 +737,11 @@ fxDDSetBuffer(GLcontext * ctx, GLframebuffer * buffer, GLuint bufferBit)
|
||||
|
||||
if (bufferBit == FRONT_LEFT_BIT) {
|
||||
fxMesa->currentFB = GR_BUFFER_FRONTBUFFER;
|
||||
FX_grRenderBuffer(fxMesa->currentFB);
|
||||
grRenderBuffer(fxMesa->currentFB);
|
||||
}
|
||||
else if (bufferBit == BACK_LEFT_BIT) {
|
||||
fxMesa->currentFB = GR_BUFFER_BACKBUFFER;
|
||||
FX_grRenderBuffer(fxMesa->currentFB);
|
||||
grRenderBuffer(fxMesa->currentFB);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: fxddtex.c,v 1.46 2001/11/06 16:01:19 brianp Exp $ */
|
||||
/* $Id: fxddtex.c,v 1.47 2003/08/19 15:52:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@ -29,6 +29,8 @@
|
||||
* Brian Paul
|
||||
* Daryll Strauss
|
||||
* Keith Whitwell
|
||||
* Daniel Borca
|
||||
* Hiroshi Morii
|
||||
*/
|
||||
|
||||
|
||||
@ -172,10 +174,10 @@ fxDDTexEnv(GLcontext * ctx, GLenum target, GLenum pname,
|
||||
|
||||
/* apply any lod biasing right now */
|
||||
if (pname == GL_TEXTURE_LOD_BIAS_EXT) {
|
||||
FX_grTexLodBiasValue(GR_TMU0, *param);
|
||||
grTexLodBiasValue(GR_TMU0, *param);
|
||||
|
||||
if (fxMesa->haveTwoTMUs) {
|
||||
FX_grTexLodBiasValue(GR_TMU1, *param);
|
||||
grTexLodBiasValue(GR_TMU1, *param);
|
||||
}
|
||||
|
||||
}
|
||||
@ -450,11 +452,7 @@ fxDDTexUseGlbPalette(GLcontext * ctx, GLboolean state)
|
||||
if (state) {
|
||||
fxMesa->haveGlobalPaletteTexture = 1;
|
||||
|
||||
FX_grTexDownloadTable(GR_TMU0, GR_TEXTABLE_PALETTE,
|
||||
&(fxMesa->glbPalette));
|
||||
if (fxMesa->haveTwoTMUs)
|
||||
FX_grTexDownloadTable(GR_TMU1, GR_TEXTABLE_PALETTE,
|
||||
&(fxMesa->glbPalette));
|
||||
grTexDownloadTable(GR_TEXTABLE_PALETTE, &(fxMesa->glbPalette));
|
||||
}
|
||||
else {
|
||||
fxMesa->haveGlobalPaletteTexture = 0;
|
||||
@ -504,8 +502,8 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
float *sscale, float *tscale,
|
||||
int *i_sscale, int *i_tscale, int *wscale, int *hscale)
|
||||
{
|
||||
|
||||
static GrLOD_t lod[9] = { GR_LOD_256, GR_LOD_128, GR_LOD_64, GR_LOD_32,
|
||||
/* [koolsmoky] */
|
||||
static GrLOD_t lod[12] = { GR_LOD_2048, GR_LOD_1024, GR_LOD_512, GR_LOD_256, GR_LOD_128, GR_LOD_64, GR_LOD_32,
|
||||
GR_LOD_16, GR_LOD_8, GR_LOD_4, GR_LOD_2, GR_LOD_1
|
||||
};
|
||||
|
||||
@ -521,14 +519,14 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
switch (logw - logh) {
|
||||
case 0:
|
||||
aspectratio = GR_ASPECT_1x1;
|
||||
l = lod[8 - logw];
|
||||
l = lod[11 - logw];
|
||||
s = t = 256.0f;
|
||||
is = it = INT_TRICK(8);
|
||||
ws = hs = 1;
|
||||
break;
|
||||
case 1:
|
||||
aspectratio = GR_ASPECT_2x1;
|
||||
l = lod[8 - logw];
|
||||
l = lod[11 - logw];
|
||||
s = 256.0f;
|
||||
t = 128.0f;
|
||||
is = INT_TRICK(8);
|
||||
@ -538,7 +536,7 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
break;
|
||||
case 2:
|
||||
aspectratio = GR_ASPECT_4x1;
|
||||
l = lod[8 - logw];
|
||||
l = lod[11 - logw];
|
||||
s = 256.0f;
|
||||
t = 64.0f;
|
||||
is = INT_TRICK(8);
|
||||
@ -548,7 +546,7 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
break;
|
||||
case 3:
|
||||
aspectratio = GR_ASPECT_8x1;
|
||||
l = lod[8 - logw];
|
||||
l = lod[11 - logw];
|
||||
s = 256.0f;
|
||||
t = 32.0f;
|
||||
is = INT_TRICK(8);
|
||||
@ -558,7 +556,7 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
break;
|
||||
case 4:
|
||||
aspectratio = GR_ASPECT_8x1;
|
||||
l = lod[8 - logw];
|
||||
l = lod[11 - logw];
|
||||
s = 256.0f;
|
||||
t = 32.0f;
|
||||
is = INT_TRICK(8);
|
||||
@ -568,7 +566,7 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
break;
|
||||
case 5:
|
||||
aspectratio = GR_ASPECT_8x1;
|
||||
l = lod[8 - logw];
|
||||
l = lod[11 - logw];
|
||||
s = 256.0f;
|
||||
t = 32.0f;
|
||||
is = INT_TRICK(8);
|
||||
@ -578,7 +576,7 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
break;
|
||||
case 6:
|
||||
aspectratio = GR_ASPECT_8x1;
|
||||
l = lod[8 - logw];
|
||||
l = lod[11 - logw];
|
||||
s = 256.0f;
|
||||
t = 32.0f;
|
||||
is = INT_TRICK(8);
|
||||
@ -588,7 +586,7 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
break;
|
||||
case 7:
|
||||
aspectratio = GR_ASPECT_8x1;
|
||||
l = lod[8 - logw];
|
||||
l = lod[11 - logw];
|
||||
s = 256.0f;
|
||||
t = 32.0f;
|
||||
is = INT_TRICK(8);
|
||||
@ -598,7 +596,7 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
break;
|
||||
case 8:
|
||||
aspectratio = GR_ASPECT_8x1;
|
||||
l = lod[8 - logw];
|
||||
l = lod[11 - logw];
|
||||
s = 256.0f;
|
||||
t = 32.0f;
|
||||
is = INT_TRICK(8);
|
||||
@ -606,9 +604,39 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
ws = 1;
|
||||
hs = 32;
|
||||
break;
|
||||
case 9:
|
||||
aspectratio = GR_ASPECT_8x1;
|
||||
l = lod[11 - logw];
|
||||
s = 256.0f;
|
||||
t = 32.0f;
|
||||
is = INT_TRICK(8);
|
||||
it = INT_TRICK(5);
|
||||
ws = 1;
|
||||
hs = 64;
|
||||
break;
|
||||
case 10:
|
||||
aspectratio = GR_ASPECT_8x1;
|
||||
l = lod[11 - logw];
|
||||
s = 256.0f;
|
||||
t = 32.0f;
|
||||
is = INT_TRICK(8);
|
||||
it = INT_TRICK(5);
|
||||
ws = 1;
|
||||
hs = 128;
|
||||
break;
|
||||
case 11:
|
||||
aspectratio = GR_ASPECT_8x1;
|
||||
l = lod[11 - logw];
|
||||
s = 256.0f;
|
||||
t = 32.0f;
|
||||
is = INT_TRICK(8);
|
||||
it = INT_TRICK(5);
|
||||
ws = 1;
|
||||
hs = 256;
|
||||
break;
|
||||
case -1:
|
||||
aspectratio = GR_ASPECT_1x2;
|
||||
l = lod[8 - logh];
|
||||
l = lod[11 - logh];
|
||||
s = 128.0f;
|
||||
t = 256.0f;
|
||||
is = INT_TRICK(7);
|
||||
@ -618,7 +646,7 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
break;
|
||||
case -2:
|
||||
aspectratio = GR_ASPECT_1x4;
|
||||
l = lod[8 - logh];
|
||||
l = lod[11 - logh];
|
||||
s = 64.0f;
|
||||
t = 256.0f;
|
||||
is = INT_TRICK(6);
|
||||
@ -628,7 +656,7 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
break;
|
||||
case -3:
|
||||
aspectratio = GR_ASPECT_1x8;
|
||||
l = lod[8 - logh];
|
||||
l = lod[11 - logh];
|
||||
s = 32.0f;
|
||||
t = 256.0f;
|
||||
is = INT_TRICK(5);
|
||||
@ -638,7 +666,7 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
break;
|
||||
case -4:
|
||||
aspectratio = GR_ASPECT_1x8;
|
||||
l = lod[8 - logh];
|
||||
l = lod[11 - logh];
|
||||
s = 32.0f;
|
||||
t = 256.0f;
|
||||
is = INT_TRICK(5);
|
||||
@ -648,7 +676,7 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
break;
|
||||
case -5:
|
||||
aspectratio = GR_ASPECT_1x8;
|
||||
l = lod[8 - logh];
|
||||
l = lod[11 - logh];
|
||||
s = 32.0f;
|
||||
t = 256.0f;
|
||||
is = INT_TRICK(5);
|
||||
@ -658,7 +686,7 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
break;
|
||||
case -6:
|
||||
aspectratio = GR_ASPECT_1x8;
|
||||
l = lod[8 - logh];
|
||||
l = lod[11 - logh];
|
||||
s = 32.0f;
|
||||
t = 256.0f;
|
||||
is = INT_TRICK(5);
|
||||
@ -668,7 +696,7 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
break;
|
||||
case -7:
|
||||
aspectratio = GR_ASPECT_1x8;
|
||||
l = lod[8 - logh];
|
||||
l = lod[11 - logh];
|
||||
s = 32.0f;
|
||||
t = 256.0f;
|
||||
is = INT_TRICK(5);
|
||||
@ -678,7 +706,7 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
break;
|
||||
case -8:
|
||||
aspectratio = GR_ASPECT_1x8;
|
||||
l = lod[8 - logh];
|
||||
l = lod[11 - logh];
|
||||
s = 32.0f;
|
||||
t = 256.0f;
|
||||
is = INT_TRICK(5);
|
||||
@ -686,6 +714,36 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
ws = 32;
|
||||
hs = 1;
|
||||
break;
|
||||
case -9:
|
||||
aspectratio = GR_ASPECT_1x8;
|
||||
l = lod[11 - logh];
|
||||
s = 32.0f;
|
||||
t = 256.0f;
|
||||
is = INT_TRICK(5);
|
||||
it = INT_TRICK(8);
|
||||
ws = 64;
|
||||
hs = 1;
|
||||
break;
|
||||
case -10:
|
||||
aspectratio = GR_ASPECT_1x8;
|
||||
l = lod[11 - logh];
|
||||
s = 32.0f;
|
||||
t = 256.0f;
|
||||
is = INT_TRICK(5);
|
||||
it = INT_TRICK(8);
|
||||
ws = 128;
|
||||
hs = 1;
|
||||
break;
|
||||
case -11:
|
||||
aspectratio = GR_ASPECT_1x8;
|
||||
l = lod[11 - logh];
|
||||
s = 32.0f;
|
||||
t = 256.0f;
|
||||
is = INT_TRICK(5);
|
||||
it = INT_TRICK(8);
|
||||
ws = 256;
|
||||
hs = 1;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
@ -724,8 +782,10 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,
|
||||
* Glide internal texture format and base texture format.
|
||||
*/
|
||||
void
|
||||
fxTexGetFormat(GLenum glformat, GrTextureFormat_t * tfmt, GLint * ifmt)
|
||||
fxTexGetFormat(GLcontext *ctx, GLenum glformat, GrTextureFormat_t * tfmt, GLint * ifmt) /* [koolsmoky] */
|
||||
{
|
||||
fxMesaContext fxMesa = FX_CONTEXT(ctx);
|
||||
|
||||
switch (glformat) {
|
||||
case 1:
|
||||
case GL_LUMINANCE:
|
||||
@ -771,33 +831,61 @@ fxTexGetFormat(GLenum glformat, GrTextureFormat_t * tfmt, GLint * ifmt)
|
||||
if (ifmt)
|
||||
(*ifmt) = GL_ALPHA;
|
||||
break;
|
||||
case 3:
|
||||
case GL_RGB:
|
||||
case GL_R3_G3_B2:
|
||||
case GL_RGB4:
|
||||
case GL_RGB5:
|
||||
case GL_RGB8:
|
||||
case GL_RGB10:
|
||||
case GL_RGB12:
|
||||
case GL_RGB16:
|
||||
if (tfmt)
|
||||
(*tfmt) = GR_TEXFMT_RGB_565;
|
||||
if (ifmt)
|
||||
(*ifmt) = GL_RGB;
|
||||
break;
|
||||
case 4:
|
||||
case GL_RGBA:
|
||||
case 3:
|
||||
case GL_RGB:
|
||||
case GL_RGB8:
|
||||
case GL_RGB10:
|
||||
case GL_RGB12:
|
||||
case GL_RGB16:
|
||||
#if 0 /* [koolsmoky] getting ready for 32bpp textures */
|
||||
if (fxMesa->colDepth == 32) {
|
||||
if (tfmt) (*tfmt) = GR_TEXFMT_ARGB_8888;
|
||||
} else {
|
||||
if (tfmt) (*tfmt) = GR_TEXFMT_RGB_565;
|
||||
}
|
||||
if (ifmt) (*ifmt) = GL_RGB;
|
||||
#else
|
||||
if (tfmt)
|
||||
(*tfmt) = GR_TEXFMT_RGB_565;
|
||||
if (ifmt)
|
||||
(*ifmt) = GL_RGB;
|
||||
#endif
|
||||
break;
|
||||
case GL_RGBA2:
|
||||
case GL_RGBA4:
|
||||
case GL_RGBA8:
|
||||
case GL_RGB10_A2:
|
||||
case GL_RGBA12:
|
||||
case GL_RGBA16:
|
||||
if (tfmt)
|
||||
(*tfmt) = GR_TEXFMT_ARGB_4444;
|
||||
if (ifmt)
|
||||
(*ifmt) = GL_RGBA;
|
||||
break;
|
||||
case 4:
|
||||
case GL_RGBA:
|
||||
case GL_RGBA8:
|
||||
case GL_RGB10_A2:
|
||||
case GL_RGBA12:
|
||||
case GL_RGBA16:
|
||||
#if 0 /* [koolsmoky] getting ready for 32bpp textures */
|
||||
if (fxMesa->colDepth == 32) {
|
||||
if (tfmt) (*tfmt) = GR_TEXFMT_ARGB_8888;
|
||||
} else {
|
||||
if (tfmt) (*tfmt) = GR_TEXFMT_ARGB_4444;
|
||||
}
|
||||
if (ifmt) (*ifmt) = GL_RGBA;
|
||||
#else
|
||||
if (tfmt)
|
||||
(*tfmt) = GR_TEXFMT_ARGB_4444;
|
||||
if (ifmt)
|
||||
(*ifmt) = GL_RGBA;
|
||||
#endif
|
||||
break;
|
||||
case GL_RGB5_A1:
|
||||
if (tfmt)
|
||||
(*tfmt) = GR_TEXFMT_ARGB_1555;
|
||||
@ -1008,6 +1096,27 @@ fetch_r5g5b5a1(const struct gl_texture_image *texImage,
|
||||
}
|
||||
|
||||
|
||||
#if 0 /* [koolsmoky] getting ready for 32bpp textures */
|
||||
static void
|
||||
fetch_a8r8g8b8(const struct gl_texture_image *texImage,
|
||||
GLint i, GLint j, GLint k, GLvoid * texelOut)
|
||||
{
|
||||
GLchan *rgba = (GLchan *) texelOut;
|
||||
const tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
|
||||
const GLuint *texel;
|
||||
|
||||
i = i * mml->wScale;
|
||||
j = j * mml->hScale;
|
||||
|
||||
texel = ((GLuint *) texImage->Data) + j * mml->width + i;
|
||||
rgba[RCOMP] = (((*texel) >> 16) & 0xff);
|
||||
rgba[GCOMP] = (((*texel) >> 8) & 0xff);
|
||||
rgba[BCOMP] = (((*texel)) & 0xff);
|
||||
rgba[ACOMP] = (((*texel) >> 24) & 0xff);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static void
|
||||
PrintTexture(int w, int h, int c, const GLubyte * data)
|
||||
{
|
||||
@ -1029,6 +1138,8 @@ const struct gl_texture_format *
|
||||
fxDDChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
||||
GLenum srcFormat, GLenum srcType )
|
||||
{
|
||||
fxMesaContext fxMesa = FX_CONTEXT(ctx);
|
||||
|
||||
switch (internalFormat) {
|
||||
case GL_INTENSITY:
|
||||
case GL_INTENSITY4:
|
||||
@ -1066,25 +1177,37 @@ fxDDChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
|
||||
case GL_LUMINANCE12_ALPHA12:
|
||||
case GL_LUMINANCE16_ALPHA16:
|
||||
return &_mesa_texformat_al88;
|
||||
case 3:
|
||||
case GL_RGB:
|
||||
case GL_R3_G3_B2:
|
||||
case GL_RGB4:
|
||||
case GL_RGB5:
|
||||
return &_mesa_texformat_rgb565;
|
||||
case 3:
|
||||
case GL_RGB:
|
||||
case GL_RGB8:
|
||||
case GL_RGB10:
|
||||
case GL_RGB12:
|
||||
case GL_RGB16:
|
||||
#if 0 /* [koolsmoky] getting ready for 32bpp textures */
|
||||
return (fxMesa->colDepth == 32) ? &_mesa_texformat_argb8888
|
||||
: &_mesa_texformat_rgb565;
|
||||
#else
|
||||
return &_mesa_texformat_rgb565;
|
||||
case 4:
|
||||
case GL_RGBA:
|
||||
#endif
|
||||
case GL_RGBA2:
|
||||
case GL_RGBA4:
|
||||
return &_mesa_texformat_argb4444;
|
||||
case 4:
|
||||
case GL_RGBA:
|
||||
case GL_RGBA8:
|
||||
case GL_RGB10_A2:
|
||||
case GL_RGBA12:
|
||||
case GL_RGBA16:
|
||||
#if 0 /* [koolsmoky] getting ready for 32bpp textures */
|
||||
return (fxMesa->colDepth == 32) ? &_mesa_texformat_argb8888
|
||||
: &_mesa_texformat_argb4444;
|
||||
#else
|
||||
return &_mesa_texformat_argb4444;
|
||||
#endif
|
||||
case GL_RGB5_A1:
|
||||
return &_mesa_texformat_argb1555;
|
||||
default:
|
||||
@ -1114,6 +1237,10 @@ fxGlideFormat(GLint mesaFormat)
|
||||
return GR_TEXFMT_ARGB_4444;
|
||||
case MESA_FORMAT_ARGB1555:
|
||||
return GR_TEXFMT_ARGB_1555;
|
||||
#if 0 /* [koolsmoky] getting ready for 32bpp textures */
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
return GR_TEXFMT_ARGB_8888;
|
||||
#endif
|
||||
default:
|
||||
_mesa_problem(NULL, "Unexpected format in fxGlideFormat");
|
||||
return 0;
|
||||
@ -1141,6 +1268,10 @@ fxFetchFunction(GLint mesaFormat)
|
||||
return fetch_r4g4b4a4;
|
||||
case MESA_FORMAT_ARGB1555:
|
||||
return fetch_r5g5b5a1;
|
||||
#if 0 /* [koolsmoky] getting ready for 32bpp textures */
|
||||
case MESA_FORMAT_ARGB8888:
|
||||
return fetch_a8r8g8b8;
|
||||
#endif
|
||||
default:
|
||||
_mesa_problem(NULL, "Unexpected format in fxGlideFormat");
|
||||
return NULL;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: fxdrv.h,v 1.57 2003/07/17 14:50:12 brianp Exp $ */
|
||||
/* $Id: fxdrv.h,v 1.58 2003/08/19 15:52:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@ -29,6 +29,8 @@
|
||||
* Brian Paul
|
||||
* Daryll Strauss
|
||||
* Keith Whitwell
|
||||
* Daniel Borca
|
||||
* Hiroshi Morii
|
||||
*/
|
||||
|
||||
/* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */
|
||||
@ -87,14 +89,6 @@ extern float gl_ubyte_to_float_255_color_tab[256];
|
||||
|
||||
|
||||
|
||||
#if defined(FXMESA_USE_ARGB)
|
||||
#define FXCOLOR4( c ) ( \
|
||||
( ((unsigned int)(c[3]))<<24 ) | \
|
||||
( ((unsigned int)(c[0]))<<16 ) | \
|
||||
( ((unsigned int)(c[1]))<<8 ) | \
|
||||
( (unsigned int)(c[2])) )
|
||||
|
||||
#else
|
||||
#ifdef __i386__
|
||||
#define FXCOLOR4( c ) (* (int *)c)
|
||||
#else
|
||||
@ -104,7 +98,6 @@ extern float gl_ubyte_to_float_255_color_tab[256];
|
||||
( ((unsigned int)(c[1]))<<8 ) | \
|
||||
( (unsigned int)(c[0])) )
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@ -433,7 +426,7 @@ struct tfxMesaContext
|
||||
GLint swapInterval;
|
||||
GLint maxPendingSwapBuffers;
|
||||
|
||||
FX_GrContext_t glideContext;
|
||||
GrContext_t glideContext;
|
||||
|
||||
int screen_width;
|
||||
int screen_height;
|
||||
@ -444,6 +437,7 @@ struct tfxMesaContext
|
||||
int clipMaxY;
|
||||
|
||||
int colDepth;
|
||||
int maxTextureSize; /* [koolsmoky] */
|
||||
};
|
||||
|
||||
|
||||
@ -527,7 +521,8 @@ extern void fxTMReloadSubMipMapLevel(fxMesaContext,
|
||||
struct gl_texture_object *, GLint, GLint,
|
||||
GLint);
|
||||
|
||||
extern void fxTexGetFormat(GLenum, GrTextureFormat_t *, GLint *);
|
||||
extern void fxTexGetFormat(GLcontext *, GLenum, GrTextureFormat_t *, GLint *); /* [koolsmoky] */
|
||||
|
||||
extern int fxTexGetInfo(int, int, GrLOD_t *, GrAspectRatio_t *,
|
||||
float *, float *, int *, int *, int *, int *);
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: fxglidew.c,v 1.20 2003/07/17 14:50:12 brianp Exp $ */
|
||||
/* $Id: fxglidew.c,v 1.21 2003/08/19 15:52:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@ -29,6 +29,8 @@
|
||||
* Brian Paul
|
||||
* Daryll Strauss
|
||||
* Keith Whitwell
|
||||
* Daniel Borca
|
||||
* Hiroshi Morii
|
||||
*/
|
||||
|
||||
/* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */
|
||||
@ -49,111 +51,21 @@
|
||||
FxI32
|
||||
FX_grGetInteger_NoLock(FxU32 pname)
|
||||
{
|
||||
#if !defined(FX_GLIDE3)
|
||||
switch (pname) {
|
||||
case FX_FOG_TABLE_ENTRIES:
|
||||
return GR_FOG_TABLE_SIZE;
|
||||
case FX_GLIDE_STATE_SIZE:
|
||||
return sizeof(GrState);
|
||||
case FX_LFB_PIXEL_PIPE:
|
||||
return FXFALSE;
|
||||
case FX_PENDING_BUFFERSWAPS:
|
||||
return grBufferNumPending();
|
||||
case FX_TEXTURE_ALIGN:
|
||||
/* This is a guess from reading the glide3 docs */
|
||||
return 8;
|
||||
default:
|
||||
if (MESA_VERBOSE & VERBOSE_DRIVER) {
|
||||
fprintf(stderr, "Wrong parameter in FX_grGetInteger!\n");
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
#else
|
||||
FxU32 grname;
|
||||
FxI32 result;
|
||||
FxI32 result;
|
||||
|
||||
switch (pname) {
|
||||
case FX_FOG_TABLE_ENTRIES:
|
||||
case FX_GLIDE_STATE_SIZE:
|
||||
case FX_LFB_PIXEL_PIPE:
|
||||
case FX_PENDING_BUFFERSWAPS:
|
||||
case FX_TEXTURE_ALIGN:
|
||||
grname = pname;
|
||||
break;
|
||||
default:
|
||||
if (MESA_VERBOSE & VERBOSE_DRIVER) {
|
||||
fprintf(stderr, "Wrong parameter in FX_grGetInteger!\n");
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
if (grGet(pname, 4, &result)) {
|
||||
return result;
|
||||
}
|
||||
|
||||
grGet(grname, 4, &result);
|
||||
return result;
|
||||
#endif
|
||||
}
|
||||
|
||||
FxI32
|
||||
FX_grGetInteger(FxU32 pname)
|
||||
{
|
||||
int result;
|
||||
|
||||
BEGIN_BOARD_LOCK();
|
||||
result = FX_grGetInteger_NoLock(pname);
|
||||
END_BOARD_LOCK();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
FxBool
|
||||
FX_grLfbLock(GrLock_t type, GrBuffer_t buffer,
|
||||
GrLfbWriteMode_t writeMode, GrOriginLocation_t origin,
|
||||
FxBool pixelPipeline, GrLfbInfo_t * info)
|
||||
{
|
||||
FxBool result;
|
||||
|
||||
BEGIN_BOARD_LOCK();
|
||||
result = grLfbLock(type, buffer, writeMode, origin, pixelPipeline, info);
|
||||
END_BOARD_LOCK();
|
||||
return result;
|
||||
}
|
||||
|
||||
FxU32
|
||||
FX_grTexTextureMemRequired(FxU32 evenOdd, GrTexInfo * info)
|
||||
{
|
||||
FxU32 result;
|
||||
|
||||
BEGIN_BOARD_LOCK();
|
||||
result = grTexTextureMemRequired(evenOdd, info);
|
||||
END_BOARD_LOCK();
|
||||
return result;
|
||||
}
|
||||
|
||||
FxU32
|
||||
FX_grTexMinAddress(GrChipID_t tmu)
|
||||
{
|
||||
FxU32 result;
|
||||
|
||||
BEGIN_BOARD_LOCK();
|
||||
result = grTexMinAddress(tmu);
|
||||
END_BOARD_LOCK();
|
||||
return result;
|
||||
}
|
||||
|
||||
extern FxU32
|
||||
FX_grTexMaxAddress(GrChipID_t tmu)
|
||||
{
|
||||
FxU32 result;
|
||||
|
||||
BEGIN_BOARD_LOCK();
|
||||
result = grTexMaxAddress(tmu);
|
||||
END_BOARD_LOCK();
|
||||
return result;
|
||||
if (MESA_VERBOSE & VERBOSE_DRIVER) {
|
||||
fprintf(stderr, "Wrong parameter in FX_grGetInteger!\n");
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
FxBool
|
||||
FX_grSstControl(FxU32 code)
|
||||
{
|
||||
#if defined(FX_GLIDE3)
|
||||
/* The glide 3 sources call for grEnable/grDisable to be called in exchange
|
||||
* for grSstControl. */
|
||||
switch (code) {
|
||||
@ -166,47 +78,9 @@ FX_grSstControl(FxU32 code)
|
||||
}
|
||||
/* Appearently GR_CONTROL_RESIZE can be ignored. */
|
||||
return 1; /* OK? */
|
||||
#else
|
||||
FxU32 result;
|
||||
BEGIN_BOARD_LOCK();
|
||||
result = grSstControl(code);
|
||||
END_BOARD_LOCK();
|
||||
return result;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#if defined(FX_GLIDE3)
|
||||
|
||||
void
|
||||
FX_grGammaCorrectionValue(float val)
|
||||
{
|
||||
(void) val;
|
||||
/* ToDo */
|
||||
}
|
||||
|
||||
int
|
||||
FX_getFogTableSize(void)
|
||||
{
|
||||
int result;
|
||||
BEGIN_BOARD_LOCK();
|
||||
grGet(GR_FOG_TABLE_ENTRIES, sizeof(int), (void *) &result);
|
||||
END_BOARD_LOCK();
|
||||
return result;
|
||||
}
|
||||
|
||||
int
|
||||
FX_getGrStateSize(void)
|
||||
{
|
||||
int result;
|
||||
BEGIN_BOARD_LOCK();
|
||||
grGet(GR_GLIDE_STATE_SIZE, sizeof(int), (void *) &result);
|
||||
END_BOARD_LOCK();
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
FX_grSstScreenWidth()
|
||||
{
|
||||
@ -231,14 +105,6 @@ FX_grSstScreenHeight()
|
||||
return result[3];
|
||||
}
|
||||
|
||||
void
|
||||
FX_grGlideGetVersion(char *buf)
|
||||
{
|
||||
BEGIN_BOARD_LOCK();
|
||||
strcpy(buf, grGetString(GR_VERSION));
|
||||
END_BOARD_LOCK();
|
||||
}
|
||||
|
||||
void
|
||||
FX_grSstPerfStats(GrSstPerfStats_t * st)
|
||||
{
|
||||
@ -272,14 +138,6 @@ FX_grAADrawPoint(GrVertex * a)
|
||||
END_CLIP_LOOP();
|
||||
}
|
||||
|
||||
void
|
||||
FX_grDrawPolygonVertexList(int n, GrVertex * verts)
|
||||
{
|
||||
BEGIN_CLIP_LOOP();
|
||||
grDrawVertexArrayContiguous(GR_POLYGON, n, verts, sizeof(GrVertex));
|
||||
END_CLIP_LOOP();
|
||||
}
|
||||
|
||||
void
|
||||
FX_setupGrVertexLayout(void)
|
||||
{
|
||||
@ -334,14 +192,6 @@ FX_grHints_NoLock(GrHint_t hintType, FxU32 hintMask)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
FX_grHints(GrHint_t hintType, FxU32 hintMask)
|
||||
{
|
||||
BEGIN_BOARD_LOCK();
|
||||
FX_grHints_NoLock(hintType, hintMask);
|
||||
END_BOARD_LOCK();
|
||||
}
|
||||
|
||||
/*
|
||||
* Glide3 doesn't have the grSstQueryHardware function anymore.
|
||||
* Instead, we call grGet() and fill in the data structures ourselves.
|
||||
@ -360,81 +210,63 @@ FX_grSstQueryHardware(GrHwConfiguration * config)
|
||||
|
||||
for (i = 0; i < config->num_sst; i++) {
|
||||
FxI32 result;
|
||||
const char *extension;
|
||||
|
||||
config->SSTs[i].type = GR_SSTTYPE_VOODOO;
|
||||
grSstSelect(i);
|
||||
|
||||
extension = grGetString(GR_HARDWARE);
|
||||
if (strstr(extension, "Voodoo Banshee")) {
|
||||
config->SSTs[i].type = GR_SSTTYPE_Banshee;
|
||||
} else if (strstr(extension, "Voodoo3")) {
|
||||
config->SSTs[i].type = GR_SSTTYPE_Voodoo3;
|
||||
} else if (strstr(extension, "Voodoo4")) {
|
||||
config->SSTs[i].type = GR_SSTTYPE_Voodoo4;
|
||||
} else if (strstr(extension, "Voodoo5")) {
|
||||
config->SSTs[i].type = GR_SSTTYPE_Voodoo5;
|
||||
} else { /* Voodoo1,2,rush */
|
||||
/* ZZZ TO DO */
|
||||
config->SSTs[i].type = GR_SSTTYPE_VOODOO;
|
||||
}
|
||||
|
||||
grGet(GR_MEMORY_FB, 4, &result);
|
||||
config->SSTs[i].sstBoard.VoodooConfig.fbRam = result / (1024 * 1024);
|
||||
config->SSTs[i].VoodooConfig.fbRam = result / (1024 * 1024);
|
||||
|
||||
grGet(GR_NUM_TMU, 4, &result);
|
||||
config->SSTs[i].sstBoard.VoodooConfig.nTexelfx = result;
|
||||
config->SSTs[i].VoodooConfig.nTexelfx = result;
|
||||
|
||||
grGet(GR_REVISION_FB, 4, &result);
|
||||
config->SSTs[i].sstBoard.VoodooConfig.fbiRev = result;
|
||||
config->SSTs[i].VoodooConfig.fbiRev = result;
|
||||
|
||||
grGet(GR_NUM_FB, 4, (void *) &numFB);
|
||||
if (numFB > 1)
|
||||
config->SSTs[i].sstBoard.VoodooConfig.sliDetect = FXTRUE;
|
||||
else
|
||||
config->SSTs[i].sstBoard.VoodooConfig.sliDetect = FXFALSE;
|
||||
|
||||
for (j = 0; j < config->SSTs[i].sstBoard.VoodooConfig.nTexelfx; j++) {
|
||||
for (j = 0; j < config->SSTs[i].VoodooConfig.nTexelfx; j++) {
|
||||
grGet(GR_MEMORY_TMU, 4, &result);
|
||||
config->SSTs[i].sstBoard.VoodooConfig.tmuConfig[j].tmuRam =
|
||||
result / (1024 * 1024);
|
||||
config->SSTs[i].VoodooConfig.tmuConfig[j].tmuRam = result / (1024 * 1024);
|
||||
grGet(GR_REVISION_TMU, 4, &result);
|
||||
config->SSTs[i].sstBoard.VoodooConfig.tmuConfig[j].tmuRev = result;
|
||||
config->SSTs[i].VoodooConfig.tmuConfig[j].tmuRev = result;
|
||||
}
|
||||
|
||||
{
|
||||
const char *extension = grGetString(GR_EXTENSION);
|
||||
if (strstr(extension, " PIXEXT ")) {
|
||||
config->SSTs[i].sstBoard.VoodooConfig.gExt.grSstWinOpen = grGetProcAddress("grSstWinOpenExt");
|
||||
}
|
||||
extension = grGetString(GR_EXTENSION);
|
||||
if (strstr(extension, " PIXEXT ")) {
|
||||
config->SSTs[i].VoodooConfig.grSstWinOpenExt = grGetProcAddress("grSstWinOpenExt");
|
||||
}
|
||||
|
||||
/* [koolsmoky] */
|
||||
grGet(GR_MAX_TEXTURE_SIZE, 4, &result);
|
||||
config->SSTs[i].VoodooConfig.maxTextureSize = result;
|
||||
|
||||
/* need to get the number of SLI units for napalm */
|
||||
grGet(GR_NUM_FB, 4, (void *) &numFB);
|
||||
config->SSTs[i].VoodooConfig.numChips = numFB;
|
||||
/* this can only be useful for Voodoo2:
|
||||
* sliDetect = ((config->SSTs[i].type == GR_SSTTYPE_Voodoo2) && (numFB > 1));
|
||||
*/
|
||||
}
|
||||
END_BOARD_LOCK();
|
||||
return 1;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
int
|
||||
FX_grSstScreenWidth()
|
||||
{
|
||||
int i;
|
||||
BEGIN_BOARD_LOCK();
|
||||
i = grSstScreenWidth();
|
||||
END_BOARD_LOCK();
|
||||
return i;
|
||||
}
|
||||
|
||||
int
|
||||
FX_grSstScreenHeight()
|
||||
{
|
||||
int i;
|
||||
BEGIN_BOARD_LOCK();
|
||||
i = grSstScreenHeight();
|
||||
END_BOARD_LOCK();
|
||||
return i;
|
||||
}
|
||||
|
||||
int
|
||||
FX_grSstQueryHardware(GrHwConfiguration * c)
|
||||
{
|
||||
int i;
|
||||
BEGIN_BOARD_LOCK();
|
||||
i = grSstQueryHardware(c);
|
||||
END_BOARD_LOCK();
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
#endif /* FX_GLIDE3 */
|
||||
|
||||
/* It appears to me that this function is needed either way. */
|
||||
FX_GrContext_t
|
||||
GrContext_t
|
||||
FX_grSstWinOpen(struct SstCard_St *c,
|
||||
FxU32 hWnd,
|
||||
GrScreenResolution_t screen_resolution,
|
||||
@ -444,15 +276,15 @@ FX_grSstWinOpen(struct SstCard_St *c,
|
||||
GrOriginLocation_t origin_location,
|
||||
int nColBuffers, int nAuxBuffers)
|
||||
{
|
||||
FX_GrContext_t i;
|
||||
GrContext_t i;
|
||||
BEGIN_BOARD_LOCK();
|
||||
if ((c->type == GR_SSTTYPE_VOODOO) && c->sstBoard.VoodooConfig.gExt.grSstWinOpen) {
|
||||
i = c->sstBoard.VoodooConfig.gExt.grSstWinOpen(hWnd,
|
||||
screen_resolution,
|
||||
refresh_rate,
|
||||
color_format, origin_location,
|
||||
pixel_format,
|
||||
nColBuffers, nAuxBuffers);
|
||||
if (c->VoodooConfig.grSstWinOpenExt) {
|
||||
i = c->VoodooConfig.grSstWinOpenExt(hWnd,
|
||||
screen_resolution,
|
||||
refresh_rate,
|
||||
color_format, origin_location,
|
||||
pixel_format,
|
||||
nColBuffers, nAuxBuffers);
|
||||
} else
|
||||
i = grSstWinOpen(hWnd,
|
||||
screen_resolution,
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: fxglidew.h,v 1.14 2003/07/17 14:50:12 brianp Exp $ */
|
||||
/* $Id: fxglidew.h,v 1.15 2003/08/19 15:52:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@ -29,141 +29,95 @@
|
||||
* Brian Paul
|
||||
* Daryll Strauss
|
||||
* Keith Whitwell
|
||||
* Daniel Borca
|
||||
* Hiroshi Morii
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __FX_GLIDE_WARPER__
|
||||
#define __FX_GLIDE_WARPER__
|
||||
|
||||
|
||||
#include <glide.h>
|
||||
|
||||
/*
|
||||
* General context:
|
||||
*/
|
||||
#if !defined(FX_GLIDE3)
|
||||
typedef FxU32 FX_GrContext_t; /* Not used in Glide2 */
|
||||
typedef FxU32 GrPixelFormat_t;
|
||||
#else
|
||||
#include <g3ext.h>
|
||||
typedef GrContext_t FX_GrContext_t;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Glide3 emulation on Glide2:
|
||||
*/
|
||||
#if !defined(FX_GLIDE3)
|
||||
/* Constanst for FX_grGetInteger( ) */
|
||||
#define FX_FOG_TABLE_ENTRIES 0x0004 /* The number of entries in the hardware fog table. */
|
||||
#define FX_GLIDE_STATE_SIZE 0x0006 /* Size of buffer, in bytes, needed to save Glide state. */
|
||||
#define FX_LFB_PIXEL_PIPE 0x0009 /* 1 if LFB writes can go through the 3D pixel pipe. */
|
||||
#define FX_PENDING_BUFFERSWAPS 0x0014 /* The number of buffer swaps pending. */
|
||||
#define FX_TEXTURE_ALIGN 0x0024 /* The required alignment for textures */
|
||||
#else
|
||||
#define FX_FOG_TABLE_ENTRIES GR_FOG_TABLE_ENTRIES
|
||||
#define FX_GLIDE_STATE_SIZE GR_GLIDE_STATE_SIZE
|
||||
#define FX_LFB_PIXEL_PIPE GR_LFB_PIXEL_PIPE
|
||||
#define FX_PENDING_BUFFERSWAPS GR_PENDING_BUFFERSWAPS
|
||||
#define FX_TEXTURE_ALIGN GR_TEXTURE_ALIGN
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Genral warper functions for Glide2/Glide3:
|
||||
*/
|
||||
extern FxI32 FX_grGetInteger(FxU32 pname);
|
||||
|
||||
#define FX_grGetInteger FX_grGetInteger_NoLock
|
||||
extern FxI32 FX_grGetInteger_NoLock(FxU32 pname);
|
||||
|
||||
/*
|
||||
* Glide2 emulation on Glide3:
|
||||
*/
|
||||
#if defined(FX_GLIDE3)
|
||||
|
||||
#define GR_ASPECT_1x1 GR_ASPECT_LOG2_1x1
|
||||
#define GR_ASPECT_2x1 GR_ASPECT_LOG2_2x1
|
||||
#define GR_ASPECT_4x1 GR_ASPECT_LOG2_4x1
|
||||
#define GR_ASPECT_8x1 GR_ASPECT_LOG2_8x1
|
||||
#define GR_ASPECT_1x2 GR_ASPECT_LOG2_1x2
|
||||
#define GR_ASPECT_1x4 GR_ASPECT_LOG2_1x4
|
||||
#define GR_ASPECT_1x8 GR_ASPECT_LOG2_1x8
|
||||
|
||||
#define GR_LOD_256 GR_LOD_LOG2_256
|
||||
#define GR_LOD_128 GR_LOD_LOG2_128
|
||||
#define GR_LOD_64 GR_LOD_LOG2_64
|
||||
#define GR_LOD_32 GR_LOD_LOG2_32
|
||||
#define GR_LOD_16 GR_LOD_LOG2_16
|
||||
#define GR_LOD_8 GR_LOD_LOG2_8
|
||||
#define GR_LOD_4 GR_LOD_LOG2_4
|
||||
#define GR_LOD_2 GR_LOD_LOG2_2
|
||||
#define GR_LOD_1 GR_LOD_LOG2_1
|
||||
#define GR_ASPECT_1x1 GR_ASPECT_LOG2_1x1
|
||||
#define GR_ASPECT_2x1 GR_ASPECT_LOG2_2x1
|
||||
#define GR_ASPECT_4x1 GR_ASPECT_LOG2_4x1
|
||||
#define GR_ASPECT_8x1 GR_ASPECT_LOG2_8x1
|
||||
#define GR_ASPECT_1x2 GR_ASPECT_LOG2_1x2
|
||||
#define GR_ASPECT_1x4 GR_ASPECT_LOG2_1x4
|
||||
#define GR_ASPECT_1x8 GR_ASPECT_LOG2_1x8
|
||||
|
||||
#define GR_LOD_2048 GR_LOD_LOG2_2048 /* [koolsmoky] big texture support for napalm */
|
||||
#define GR_LOD_1024 GR_LOD_LOG2_1024
|
||||
#define GR_LOD_512 GR_LOD_LOG2_512
|
||||
#define GR_LOD_256 GR_LOD_LOG2_256
|
||||
#define GR_LOD_128 GR_LOD_LOG2_128
|
||||
#define GR_LOD_64 GR_LOD_LOG2_64
|
||||
#define GR_LOD_32 GR_LOD_LOG2_32
|
||||
#define GR_LOD_16 GR_LOD_LOG2_16
|
||||
#define GR_LOD_8 GR_LOD_LOG2_8
|
||||
#define GR_LOD_4 GR_LOD_LOG2_4
|
||||
#define GR_LOD_2 GR_LOD_LOG2_2
|
||||
#define GR_LOD_1 GR_LOD_LOG2_1
|
||||
|
||||
#define GR_FOG_WITH_TABLE GR_FOG_WITH_TABLE_ON_Q
|
||||
|
||||
|
||||
#define GR_FOG_WITH_TABLE GR_FOG_WITH_TABLE_ON_Q
|
||||
|
||||
typedef int GrSstType;
|
||||
|
||||
#define MAX_NUM_SST 4
|
||||
#define MAX_NUM_SST 4
|
||||
|
||||
#define GR_SSTTYPE_VOODOO 0
|
||||
#define GR_SSTTYPE_SST96 1
|
||||
#define GR_SSTTYPE_AT3D 2
|
||||
#define GR_SSTTYPE_Voodoo2 3
|
||||
enum {
|
||||
GR_SSTTYPE_VOODOO = 0,
|
||||
GR_SSTTYPE_SST96 = 1,
|
||||
GR_SSTTYPE_AT3D = 2,
|
||||
GR_SSTTYPE_Voodoo2 = 3,
|
||||
GR_SSTTYPE_Banshee = 4,
|
||||
GR_SSTTYPE_Voodoo3 = 5,
|
||||
GR_SSTTYPE_Voodoo4 = 6,
|
||||
GR_SSTTYPE_Voodoo5 = 7
|
||||
};
|
||||
|
||||
typedef struct GrTMUConfig_St
|
||||
{
|
||||
int tmuRev; /* Rev of Texelfx chip */
|
||||
int tmuRam; /* 1, 2, or 4 MB */
|
||||
}
|
||||
GrTMUConfig_t;
|
||||
typedef struct GrTMUConfig_St {
|
||||
int tmuRev; /* Rev of Texelfx chip */
|
||||
int tmuRam; /* 1, 2, or 4 MB */
|
||||
} GrTMUConfig_t;
|
||||
|
||||
typedef struct GrVoodooConfig_St
|
||||
{
|
||||
int fbRam; /* 1, 2, or 4 MB */
|
||||
int fbiRev; /* Rev of Pixelfx chip */
|
||||
int nTexelfx; /* How many texelFX chips are there? */
|
||||
FxBool sliDetect; /* Is it a scan-line interleaved board? */
|
||||
struct { /* Glide extensions */
|
||||
GrProc grSstWinOpen;
|
||||
} gExt;
|
||||
GrTMUConfig_t tmuConfig[GLIDE_NUM_TMU]; /* Configuration of the Texelfx chips */
|
||||
}
|
||||
GrVoodooConfig_t;
|
||||
typedef struct GrVoodooConfig_St {
|
||||
int fbRam; /* 1, 2, or 4 MB */
|
||||
int fbiRev; /* Rev of Pixelfx chip */
|
||||
int nTexelfx; /* How many texelFX chips are there? */
|
||||
GrTMUConfig_t tmuConfig[GLIDE_NUM_TMU]; /* Configuration of the Texelfx chips */
|
||||
int maxTextureSize;
|
||||
int numChips; /* Number of Voodoo chips [koolsmoky] */
|
||||
/* Glide3 extensions */
|
||||
GrProc grSstWinOpenExt;
|
||||
} GrVoodooConfig_t;
|
||||
|
||||
typedef struct GrSst96Config_St
|
||||
{
|
||||
int fbRam; /* How much? */
|
||||
int nTexelfx;
|
||||
GrTMUConfig_t tmuConfig;
|
||||
}
|
||||
GrSst96Config_t;
|
||||
typedef struct {
|
||||
int num_sst; /* # of HW units in the system */
|
||||
struct SstCard_St {
|
||||
GrSstType type; /* Which hardware is it? */
|
||||
GrVoodooConfig_t VoodooConfig;
|
||||
}
|
||||
SSTs[MAX_NUM_SST]; /* configuration for each board */
|
||||
} GrHwConfiguration;
|
||||
|
||||
typedef GrVoodooConfig_t GrVoodoo2Config_t;
|
||||
|
||||
typedef struct GrAT3DConfig_St
|
||||
{
|
||||
int rev;
|
||||
}
|
||||
GrAT3DConfig_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int num_sst; /* # of HW units in the system */
|
||||
struct SstCard_St
|
||||
{
|
||||
GrSstType type; /* Which hardware is it? */
|
||||
union SstBoard_u
|
||||
{
|
||||
GrVoodooConfig_t VoodooConfig;
|
||||
GrSst96Config_t SST96Config;
|
||||
GrAT3DConfig_t AT3DConfig;
|
||||
GrVoodoo2Config_t Voodoo2Config;
|
||||
}
|
||||
sstBoard;
|
||||
}
|
||||
SSTs[MAX_NUM_SST]; /* configuration for each board */
|
||||
}
|
||||
GrHwConfiguration;
|
||||
|
||||
typedef FxU32 GrHint_t;
|
||||
#define GR_HINTTYPE_MIN 0
|
||||
#define GR_HINT_STWHINT 0
|
||||
#define GR_HINTTYPE_MIN 0
|
||||
#define GR_HINT_STWHINT 0
|
||||
|
||||
typedef FxU32 GrSTWHint_t;
|
||||
#define GR_STWHINT_W_DIFF_FBI FXBIT(0)
|
||||
@ -174,33 +128,32 @@ typedef FxU32 GrSTWHint_t;
|
||||
#define GR_STWHINT_W_DIFF_TMU2 FXBIT(5)
|
||||
#define GR_STWHINT_ST_DIFF_TMU2 FXBIT(6)
|
||||
|
||||
#define GR_CONTROL_ACTIVATE 1
|
||||
#define GR_CONTROL_DEACTIVATE 0
|
||||
#define GR_CONTROL_ACTIVATE 1
|
||||
#define GR_CONTROL_DEACTIVATE 0
|
||||
|
||||
|
||||
|
||||
#define GrState void
|
||||
|
||||
|
||||
#define GrState void
|
||||
|
||||
/*
|
||||
** move the vertex layout defintion to application
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
float sow; /* s texture ordinate (s over w) */
|
||||
float tow; /* t texture ordinate (t over w) */
|
||||
float oow; /* 1/w (used mipmapping - really 0xfff/w) */
|
||||
}
|
||||
GrTmuVertex;
|
||||
typedef struct {
|
||||
float sow; /* s texture ordinate (s over w) */
|
||||
float tow; /* t texture ordinate (t over w) */
|
||||
float oow; /* 1/w (used mipmapping - really 0xfff/w) */
|
||||
} GrTmuVertex;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float x, y, z; /* X, Y, and Z of scrn space -- Z is ignored */
|
||||
float r, g, b; /* R, G, B, ([0..255.0]) */
|
||||
float ooz; /* 65535/Z (used for Z-buffering) */
|
||||
float a; /* Alpha [0..255.0] */
|
||||
float oow; /* 1/W (used for W-buffering, texturing) */
|
||||
GrTmuVertex tmuvtx[GLIDE_NUM_TMU];
|
||||
}
|
||||
GrVertex;
|
||||
typedef struct {
|
||||
float x, y, z; /* X, Y, and Z of scrn space -- Z is ignored */
|
||||
float r, g, b; /* R, G, B, ([0..255.0]) */
|
||||
float ooz; /* 65535/Z (used for Z-buffering) */
|
||||
float a; /* Alpha [0..255.0] */
|
||||
float oow; /* 1/W (used for W-buffering, texturing) */
|
||||
GrTmuVertex tmuvtx[GLIDE_NUM_TMU];
|
||||
} GrVertex;
|
||||
|
||||
#define GR_VERTEX_X_OFFSET 0
|
||||
#define GR_VERTEX_Y_OFFSET 1
|
||||
@ -218,142 +171,52 @@ GrVertex;
|
||||
#define GR_VERTEX_TOW_TMU1_OFFSET 13
|
||||
#define GR_VERTEX_OOW_TMU1_OFFSET 14
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Glide2 functions for Glide3
|
||||
*/
|
||||
#if defined(FX_GLIDE3)
|
||||
#define FX_grTexDownloadTable(TMU,type,data) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grTexDownloadTable(type,data); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0);
|
||||
#define FX_grTexDownloadTable_NoLock(TMU,type,data) \
|
||||
grTexDownloadTable(type, data)
|
||||
#else
|
||||
#define FX_grTexDownloadTable(TMU,type,data) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grTexDownloadTable(TMU,type,data); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0);
|
||||
#define FX_grTexDownloadTable_NoLock grTexDownloadTable
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Flush
|
||||
*/
|
||||
#if defined(FX_GLIDE3)
|
||||
#define FX_grFlush() \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grFlush(); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
#else
|
||||
#define FX_grFlush() \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grSstIdle(); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#define FX_grFinish() \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grFinish(); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Write region: ToDo possible exploit the PixelPipe parameter.
|
||||
*/
|
||||
#if defined(FX_GLIDE3)
|
||||
#define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,FXFALSE,src_stride,src_data); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while(0)
|
||||
#else
|
||||
#define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
#endif
|
||||
#define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grLfbWriteRegion(dst_buffer,\
|
||||
dst_x, \
|
||||
dst_y, \
|
||||
src_format,\
|
||||
src_width, \
|
||||
src_height,\
|
||||
FXFALSE, \
|
||||
src_stride,\
|
||||
src_data); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while(0)
|
||||
|
||||
|
||||
/*
|
||||
* Read region
|
||||
*/
|
||||
#define FX_grLfbReadRegion(src_buffer,src_x,src_y,src_width,src_height,dst_stride,dst_data) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grLfbReadRegion(src_buffer,src_x,src_y,src_width,src_height,dst_stride,dst_data); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0);
|
||||
|
||||
/*
|
||||
* Draw triangle
|
||||
*/
|
||||
#define FX_grDrawTriangle(a,b,c) \
|
||||
do { \
|
||||
BEGIN_CLIP_LOOP(); \
|
||||
grDrawTriangle(a,b,c); \
|
||||
END_CLIP_LOOP(); \
|
||||
#define FX_grDrawTriangle(a,b,c)\
|
||||
do { \
|
||||
BEGIN_CLIP_LOOP(); \
|
||||
grDrawTriangle(a,b,c); \
|
||||
END_CLIP_LOOP(); \
|
||||
} while (0)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* For Lod/LodLog2 conversion.
|
||||
*/
|
||||
#if defined(FX_GLIDE3)
|
||||
#define FX_largeLodLog2(info) (info).largeLodLog2
|
||||
#else
|
||||
#define FX_largeLodLog2(info) (info).largeLod
|
||||
#endif
|
||||
|
||||
#if defined(FX_GLIDE3)
|
||||
#define FX_aspectRatioLog2(info) (info).aspectRatioLog2
|
||||
#else
|
||||
#define FX_aspectRatioLog2(info) (info).aspectRatio
|
||||
#endif
|
||||
|
||||
#if defined(FX_GLIDE3)
|
||||
#define FX_aspectRatioLog2(info) (info).aspectRatioLog2
|
||||
#define FX_smallLodLog2(info) (info).smallLodLog2
|
||||
#else
|
||||
#define FX_smallLodLog2(info) (info).smallLod
|
||||
#endif
|
||||
|
||||
#if defined(FX_GLIDE3)
|
||||
#define FX_lodToValue(val) ((int)(GR_LOD_256-val))
|
||||
#else
|
||||
#define FX_lodToValue(val) ((int)(val))
|
||||
#endif
|
||||
|
||||
#if defined(FX_GLIDE3)
|
||||
#define FX_largeLodValue(info) ((int)(GR_LOD_256-(info).largeLodLog2))
|
||||
#else
|
||||
#define FX_largeLodValue(info) ((int)(info).largeLod)
|
||||
#endif
|
||||
#define FX_largeLodValue_NoLock FX_largeLodValue
|
||||
|
||||
#if defined(FX_GLIDE3)
|
||||
#define FX_smallLodValue(info) ((int)(GR_LOD_256-(info).smallLodLog2))
|
||||
#else
|
||||
#define FX_smallLodValue(info) ((int)(info).smallLod)
|
||||
#endif
|
||||
#define FX_smallLodValue_NoLock FX_smallLodValue
|
||||
|
||||
#if defined(FX_GLIDE3)
|
||||
#define FX_valueToLod(val) ((GrLOD_t)(GR_LOD_256-val))
|
||||
#else
|
||||
#define FX_valueToLod(val) ((GrLOD_t)(val))
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* ScreenWidth/Height stuff.
|
||||
@ -364,129 +227,51 @@ extern int FX_grSstScreenHeight(void);
|
||||
|
||||
|
||||
/*
|
||||
* Version string.
|
||||
* Query
|
||||
*/
|
||||
#if defined(FX_GLIDE3)
|
||||
extern void FX_grGlideGetVersion(char *buf);
|
||||
#else
|
||||
#define FX_grGlideGetVersion(b) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grGlideGetVersion(b); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
#endif
|
||||
/*
|
||||
* Performance statistics
|
||||
*/
|
||||
#if defined(FX_GLIDE3)
|
||||
extern void FX_grSstPerfStats(GrSstPerfStats_t * st);
|
||||
#else
|
||||
#define FX_grSstPerfStats(s) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grSstPerfStats(s); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
#endif
|
||||
extern void FX_grSstPerfStats(GrSstPerfStats_t *st);
|
||||
extern int FX_grSstQueryHardware(GrHwConfiguration *config);
|
||||
|
||||
|
||||
/*
|
||||
* Hardware Query
|
||||
*/
|
||||
extern int FX_grSstQueryHardware(GrHwConfiguration * config);
|
||||
|
||||
/*
|
||||
* GrHints
|
||||
*/
|
||||
#if defined(FX_GLIDE3)
|
||||
#define FX_grHints FX_grHints_NoLock
|
||||
extern void FX_grHints_NoLock(GrHint_t hintType, FxU32 hintMask);
|
||||
extern void FX_grHints(GrHint_t hintType, FxU32 hintMask);
|
||||
#else
|
||||
#define FX_grHints(t,m) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grHints(t, m); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while(0)
|
||||
#define FX_grHints_NoLock grHints
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Antialiashed line+point drawing.
|
||||
*/
|
||||
#if defined(FX_GLIDE3)
|
||||
extern void FX_grAADrawLine(GrVertex * a, GrVertex * b);
|
||||
#else
|
||||
#define FX_grAADrawLine(a,b) \
|
||||
do { \
|
||||
BEGIN_CLIP_LOOP(); \
|
||||
grAADrawLine(a,b); \
|
||||
END_CLIP_LOOP(); \
|
||||
} while (0)
|
||||
#endif
|
||||
extern void FX_grAADrawLine(GrVertex *a, GrVertex *b);
|
||||
extern void FX_grAADrawPoint(GrVertex *a);
|
||||
|
||||
|
||||
#if defined(FX_GLIDE3)
|
||||
extern void FX_grAADrawPoint(GrVertex * a);
|
||||
#else
|
||||
#define FX_grAADrawPoint(a) \
|
||||
do { \
|
||||
BEGIN_CLIP_LOOP(); \
|
||||
grAADrawPoint(a); \
|
||||
END_CLIP_LOOP(); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Needed for Glide3 only, to set up Glide2 compatible vertex layout.
|
||||
*/
|
||||
#if defined(FX_GLIDE3)
|
||||
extern void FX_setupGrVertexLayout(void);
|
||||
#else
|
||||
#define FX_setupGrVertexLayout() do {} while (0)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* grSstControl stuff
|
||||
*/
|
||||
extern FxBool FX_grSstControl(FxU32 code);
|
||||
|
||||
/*
|
||||
* grGammaCorrectionValue
|
||||
*/
|
||||
#if defined(FX_GLIDE3)
|
||||
extern void FX_grGammaCorrectionValue(float val);
|
||||
#else
|
||||
#define FX_grGammaCorrectionValue(v) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grGammaCorrectionValue(v) \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#if defined(FX_GLIDE3)
|
||||
#define FX_grSstWinClose(w) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grSstWinClose(w); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
#else
|
||||
#define FX_grSstWinClose(w) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grSstWinClose(); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
|
||||
extern FX_GrContext_t FX_grSstWinOpen(struct SstCard_St *c,
|
||||
FxU32 hWnd,
|
||||
GrScreenResolution_t screen_resolution,
|
||||
GrScreenRefresh_t refresh_rate,
|
||||
GrColorFormat_t color_format,
|
||||
GrPixelFormat_t pixel_format,
|
||||
GrOriginLocation_t origin_location,
|
||||
int nColBuffers, int nAuxBuffers);
|
||||
extern GrContext_t FX_grSstWinOpen(struct SstCard_St *c,
|
||||
FxU32 hWnd,
|
||||
GrScreenResolution_t screen_resolution,
|
||||
GrScreenRefresh_t refresh_rate,
|
||||
GrColorFormat_t color_format,
|
||||
GrPixelFormat_t pixel_format,
|
||||
GrOriginLocation_t origin_location,
|
||||
int nColBuffers, int nAuxBuffers);
|
||||
|
||||
|
||||
#define FX_grDrawLine(v1, v2) \
|
||||
@ -503,30 +288,12 @@ extern FX_GrContext_t FX_grSstWinOpen(struct SstCard_St *c,
|
||||
END_CLIP_LOOP(); \
|
||||
} while (0)
|
||||
|
||||
#if defined(FX_GLIDE3)
|
||||
extern void FX_grDrawPolygonVertexList(int n, GrVertex * v);
|
||||
#else
|
||||
#define FX_grDrawPolygonVertexList(n, v) \
|
||||
do { \
|
||||
BEGIN_CLIP_LOOP(); \
|
||||
grDrawPolygonVertexList(n, v); \
|
||||
END_CLIP_LOOP(); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#define FX_grDitherMode(m) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grDitherMode(m); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grRenderBuffer(b) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grRenderBuffer(b); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
#define FX_grDrawPolygonVertexList(n, v) \
|
||||
do { \
|
||||
BEGIN_CLIP_LOOP(); \
|
||||
grDrawVertexArrayContiguous(GR_POLYGON, n, v, sizeof(GrVertex)); \
|
||||
END_CLIP_LOOP(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grBufferClear(c, a, d) \
|
||||
do { \
|
||||
@ -535,40 +302,6 @@ extern void FX_grDrawPolygonVertexList(int n, GrVertex * v);
|
||||
END_CLIP_LOOP(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grDepthMask(m) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grDepthMask(m); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grColorMask(c, a) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grColorMask(c, a); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
extern FxBool FX_grLfbLock(GrLock_t type, GrBuffer_t buffer,
|
||||
GrLfbWriteMode_t writeMode,
|
||||
GrOriginLocation_t origin, FxBool pixelPipeline,
|
||||
GrLfbInfo_t * info);
|
||||
|
||||
#define FX_grLfbUnlock(t, b) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grLfbUnlock(t, b); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grConstantColorValue(v) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grConstantColorValue(v); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grConstantColorValue_NoLock grConstantColorValue
|
||||
|
||||
#define FX_grAADrawTriangle(a, b, c, ab, bc, ca) \
|
||||
do { \
|
||||
@ -577,208 +310,7 @@ extern FxBool FX_grLfbLock(GrLock_t type, GrBuffer_t buffer,
|
||||
END_CLIP_LOOP(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grAlphaBlendFunction(rs, rd, as, ad) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grAlphaBlendFunction(rs, rd, as, ad); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grAlphaCombine(func, fact, loc, oth, inv) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grAlphaCombine(func, fact, loc, oth, inv); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grAlphaCombine_NoLock grAlphaCombine
|
||||
|
||||
#define FX_grAlphaTestFunction(f) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grAlphaTestFunction(f); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grAlphaTestReferenceValue(v) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grAlphaTestReferenceValue(v); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grClipWindow(minx, miny, maxx, maxy) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grClipWindow(minx, miny, maxx, maxy); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grClipWindow_NoLock grClipWindow
|
||||
|
||||
#define FX_grColorCombine(func, fact, loc, oth, inv) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grColorCombine(func, fact, loc, oth, inv); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grColorCombine_NoLock grColorCombine
|
||||
|
||||
#define FX_grCullMode(m) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grCullMode(m); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grDepthBiasLevel(lev) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grDepthBiasLevel(lev); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grDepthBufferFunction(func) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grDepthBufferFunction(func); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grFogColorValue(c) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grFogColorValue(c); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grFogMode(m) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grFogMode(m); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grFogTable(t) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grFogTable(t); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grTexClampMode(t, sc, tc) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grTexClampMode(t, sc, tc); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grTexClampMode_NoLock grTexClampMode
|
||||
|
||||
#define FX_grTexCombine(t, rfunc, rfact, afunc, afact, rinv, ainv) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grTexCombine(t, rfunc, rfact, afunc, afact, rinv, ainv); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grTexCombine_NoLock grTexCombine
|
||||
|
||||
#define FX_grTexDownloadMipMapLevel(t, sa, tlod, llod, ar, f, eo, d) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grTexDownloadMipMapLevel(t, sa, tlod, llod, ar, f, eo, d); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grTexDownloadMipMapLevel_NoLock grTexDownloadMipMapLevel
|
||||
|
||||
#define FX_grTexDownloadMipMapLevelPartial(t, sa, tlod, llod, ar, f, eo, d, s, e); \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grTexDownloadMipMapLevelPartial(t, sa, tlod, llod, ar, f, eo, d, s, e); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grTexFilterMode(t, minf, magf) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grTexFilterMode(t, minf, magf); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grTexFilterMode_NoLock grTexFilterMode
|
||||
|
||||
extern FxU32 FX_grTexMinAddress(GrChipID_t tmu);
|
||||
extern FxU32 FX_grTexMaxAddress(GrChipID_t tmu);
|
||||
|
||||
#define FX_grTexMipMapMode(t, m, lod) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grTexMipMapMode(t, m, lod); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grTexMipMapMode_NoLock grTexMipMapMode
|
||||
|
||||
#define FX_grTexSource(t, sa, eo, i) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grTexSource(t, sa, eo, i); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grTexSource_NoLock grTexSource
|
||||
|
||||
extern FxU32 FX_grTexTextureMemRequired(FxU32 evenOdd, GrTexInfo * info);
|
||||
#define FX_grTexTextureMemRequired_NoLock grTexTextureMemRequired
|
||||
|
||||
#define FX_grGlideGetState(s) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grGlideGetState(s); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
#define FX_grGlideGetState_NoLock(s) grGlideGetState(s);
|
||||
|
||||
#define FX_grDRIBufferSwap(i) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grDRIBufferSwap(i); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grSstSelect(b) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grSstSelect(b); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grSstSelect_NoLock grSstSelect
|
||||
|
||||
#define FX_grGlideSetState(s) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grGlideSetState(s); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
#define FX_grGlideSetState_NoLock(s) grGlideSetState(s);
|
||||
|
||||
#define FX_grDepthBufferMode(m) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grDepthBufferMode(m); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grLfbWriteColorFormat(f) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grLfbWriteColorFormat(f); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grDrawVertexArray(m, c, p) \
|
||||
do { \
|
||||
@ -787,26 +319,6 @@ extern FxU32 FX_grTexTextureMemRequired(FxU32 evenOdd, GrTexInfo * info);
|
||||
END_CLIP_LOOP(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grGlideShutdown() \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grGlideShutdown(); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grTexLodBiasValue_NoLock(t, v) grTexLodBiasValue(t, v)
|
||||
|
||||
#define FX_grTexLodBiasValue(t, v) \
|
||||
do { \
|
||||
BEGIN_BOARD_LOCK(); \
|
||||
grTexLodBiasValue(t, v); \
|
||||
END_BOARD_LOCK(); \
|
||||
} while (0)
|
||||
|
||||
#define FX_grGlideInit_NoLock grGlideInit
|
||||
#define FX_grSstWinOpen_NoLock grSstWinOpen
|
||||
|
||||
extern int FX_getFogTableSize(void);
|
||||
extern int FX_getGrStateSize(void);
|
||||
|
||||
#endif /* __FX_GLIDE_WARPER__ */
|
||||
|
@ -1,467 +1,467 @@
|
||||
EXPORTS
|
||||
glAccum
|
||||
glAlphaFunc
|
||||
glAreTexturesResident
|
||||
glArrayElement
|
||||
glBegin
|
||||
glBindTexture
|
||||
glBitmap
|
||||
glBlendFunc
|
||||
glCallList
|
||||
glCallLists
|
||||
glClear
|
||||
glClearAccum
|
||||
glClearIndex
|
||||
glClearColor
|
||||
glClearDepth
|
||||
glClearStencil
|
||||
glClipPlane
|
||||
glColor3b
|
||||
glColor3d
|
||||
glColor3f
|
||||
glColor3i
|
||||
glColor3s
|
||||
glColor3ub
|
||||
glColor3ui
|
||||
glColor3us
|
||||
glColor4b
|
||||
glColor4d
|
||||
glColor4f
|
||||
glColor4i
|
||||
glColor4s
|
||||
glColor4ub
|
||||
glColor4ui
|
||||
glColor4us
|
||||
glColor3bv
|
||||
glColor3dv
|
||||
glColor3fv
|
||||
glColor3iv
|
||||
glColor3sv
|
||||
glColor3ubv
|
||||
glColor3uiv
|
||||
glColor3usv
|
||||
glColor4bv
|
||||
glColor4dv
|
||||
glColor4fv
|
||||
glColor4iv
|
||||
glColor4sv
|
||||
glColor4ubv
|
||||
glColor4uiv
|
||||
glColor4usv
|
||||
glColorMask
|
||||
glColorMaterial
|
||||
glColorPointer
|
||||
glColorTableEXT
|
||||
glColorSubTableEXT
|
||||
glCopyPixels
|
||||
glCopyTexImage1D
|
||||
glCopyTexImage2D
|
||||
glCopyTexSubImage1D
|
||||
glCopyTexSubImage2D
|
||||
glCullFace
|
||||
glDepthFunc
|
||||
glDepthMask
|
||||
glDepthRange
|
||||
glDeleteLists
|
||||
glDeleteTextures
|
||||
glDisable
|
||||
glDisableClientState
|
||||
glDrawArrays
|
||||
glDrawBuffer
|
||||
glDrawElements
|
||||
glDrawPixels
|
||||
glEnable
|
||||
glEnableClientState
|
||||
glEnd
|
||||
glEndList
|
||||
glEvalCoord1d
|
||||
glEvalCoord1f
|
||||
glEvalCoord1dv
|
||||
glEvalCoord1fv
|
||||
glEvalCoord2d
|
||||
glEvalCoord2f
|
||||
glEvalCoord2dv
|
||||
glEvalCoord2fv
|
||||
glEvalPoint1
|
||||
glEvalPoint2
|
||||
glEvalMesh1
|
||||
glEdgeFlag
|
||||
glEdgeFlagv
|
||||
glEdgeFlagPointer
|
||||
glEvalMesh2
|
||||
glFeedbackBuffer
|
||||
glFinish
|
||||
glFlush
|
||||
glFogf
|
||||
glFogi
|
||||
glFogfv
|
||||
glFogiv
|
||||
glFrontFace
|
||||
glFrustum
|
||||
glGenLists
|
||||
glGenTextures
|
||||
glGetBooleanv
|
||||
glGetClipPlane
|
||||
glGetColorTableEXT
|
||||
glGetColorTableParameterivEXT
|
||||
glGetColorTableParameterfvEXT
|
||||
glGetDoublev
|
||||
glGetError
|
||||
glGetFloatv
|
||||
glGetIntegerv
|
||||
glGetLightfv
|
||||
glGetLightiv
|
||||
glGetMapdv
|
||||
glGetMapfv
|
||||
glGetMapiv
|
||||
glGetMaterialfv
|
||||
glGetMaterialiv
|
||||
glGetPixelMapfv
|
||||
glGetPixelMapuiv
|
||||
glGetPixelMapusv
|
||||
glGetPointerv
|
||||
glGetPolygonStipple
|
||||
glGetString
|
||||
glGetTexEnvfv
|
||||
glGetTexEnviv
|
||||
glGetTexGeniv
|
||||
glGetTexGendv
|
||||
glGetTexGenfv
|
||||
glGetTexImage
|
||||
glGetTexLevelParameterfv
|
||||
glGetTexLevelParameteriv
|
||||
glGetTexParameterfv
|
||||
glGetTexParameteriv
|
||||
glHint
|
||||
glIndexd
|
||||
glIndexf
|
||||
glIndexi
|
||||
glIndexs
|
||||
glIndexub
|
||||
glIndexdv
|
||||
glIndexfv
|
||||
glIndexiv
|
||||
glIndexsv
|
||||
glIndexubv
|
||||
glIndexMask
|
||||
glIndexPointer
|
||||
glInterleavedArrays
|
||||
glInitNames
|
||||
glIsList
|
||||
glIsTexture
|
||||
glLightf
|
||||
glLighti
|
||||
glLightfv
|
||||
glLightiv
|
||||
glLightModelf
|
||||
glLightModeli
|
||||
glLightModelfv
|
||||
glLightModeliv
|
||||
glLineWidth
|
||||
glLineStipple
|
||||
glListBase
|
||||
glLoadIdentity
|
||||
glLoadMatrixd
|
||||
glLoadMatrixf
|
||||
glLoadName
|
||||
glLogicOp
|
||||
glMap1d
|
||||
glMap1f
|
||||
glMap2d
|
||||
glMap2f
|
||||
glMapGrid1d
|
||||
glMapGrid1f
|
||||
glMapGrid2d
|
||||
glMapGrid2f
|
||||
glMaterialf
|
||||
glMateriali
|
||||
glMaterialfv
|
||||
glMaterialiv
|
||||
glMatrixMode
|
||||
glMultMatrixd
|
||||
glMultMatrixf
|
||||
glNewList
|
||||
glNormal3b
|
||||
glNormal3d
|
||||
glNormal3f
|
||||
glNormal3i
|
||||
glNormal3s
|
||||
glNormal3bv
|
||||
glNormal3dv
|
||||
glNormal3fv
|
||||
glNormal3iv
|
||||
glNormal3sv
|
||||
glNormalPointer
|
||||
glOrtho
|
||||
glPassThrough
|
||||
glPixelMapfv
|
||||
glPixelMapuiv
|
||||
glPixelMapusv
|
||||
glPixelStoref
|
||||
glPixelStorei
|
||||
glPixelTransferf
|
||||
glPixelTransferi
|
||||
glPixelZoom
|
||||
glPointSize
|
||||
glPolygonMode
|
||||
glPolygonOffset
|
||||
glPolygonOffsetEXT
|
||||
glPolygonStipple
|
||||
glPopAttrib
|
||||
glPopClientAttrib
|
||||
glPopMatrix
|
||||
glPopName
|
||||
glPrioritizeTextures
|
||||
glPushMatrix
|
||||
glRasterPos2d
|
||||
glRasterPos2f
|
||||
glRasterPos2i
|
||||
glRasterPos2s
|
||||
glRasterPos3d
|
||||
glRasterPos3f
|
||||
glRasterPos3i
|
||||
glRasterPos3s
|
||||
glRasterPos4d
|
||||
glRasterPos4f
|
||||
glRasterPos4i
|
||||
glRasterPos4s
|
||||
glRasterPos2dv
|
||||
glRasterPos2fv
|
||||
glRasterPos2iv
|
||||
glRasterPos2sv
|
||||
glRasterPos3dv
|
||||
glRasterPos3fv
|
||||
glRasterPos3iv
|
||||
glRasterPos3sv
|
||||
glRasterPos4dv
|
||||
glRasterPos4fv
|
||||
glRasterPos4iv
|
||||
glRasterPos4sv
|
||||
glReadBuffer
|
||||
glReadPixels
|
||||
glRectd
|
||||
glRectf
|
||||
glRecti
|
||||
glRects
|
||||
glRectdv
|
||||
glRectfv
|
||||
glRectiv
|
||||
glRectsv
|
||||
glScissor
|
||||
glIsEnabled
|
||||
glPushAttrib
|
||||
glPushClientAttrib
|
||||
glPushName
|
||||
glRenderMode
|
||||
glRotated
|
||||
glRotatef
|
||||
glSelectBuffer
|
||||
glScaled
|
||||
glScalef
|
||||
glShadeModel
|
||||
glStencilFunc
|
||||
glStencilMask
|
||||
glStencilOp
|
||||
glTexCoord1d
|
||||
glTexCoord1f
|
||||
glTexCoord1i
|
||||
glTexCoord1s
|
||||
glTexCoord2d
|
||||
glTexCoord2f
|
||||
glTexCoord2i
|
||||
glTexCoord2s
|
||||
glTexCoord3d
|
||||
glTexCoord3f
|
||||
glTexCoord3i
|
||||
glTexCoord3s
|
||||
glTexCoord4d
|
||||
glTexCoord4f
|
||||
glTexCoord4i
|
||||
glTexCoord4s
|
||||
glTexCoord1dv
|
||||
glTexCoord1fv
|
||||
glTexCoord1iv
|
||||
glTexCoord1sv
|
||||
glTexCoord2dv
|
||||
glTexCoord2fv
|
||||
glTexCoord2iv
|
||||
glTexCoord2sv
|
||||
glTexCoord3dv
|
||||
glTexCoord3fv
|
||||
glTexCoord3iv
|
||||
glTexCoord3sv
|
||||
glTexCoord4dv
|
||||
glTexCoord4fv
|
||||
glTexCoord4iv
|
||||
glTexCoord4sv
|
||||
glTexCoordPointer
|
||||
glTexGend
|
||||
glTexGenf
|
||||
glTexGeni
|
||||
glTexGendv
|
||||
glTexGeniv
|
||||
glTexGenfv
|
||||
glTexEnvf
|
||||
glTexEnvi
|
||||
glTexEnvfv
|
||||
glTexEnviv
|
||||
glTexImage1D
|
||||
glTexImage2D
|
||||
glTexParameterf
|
||||
glTexParameteri
|
||||
glTexParameterfv
|
||||
glTexParameteriv
|
||||
glTexSubImage1D
|
||||
glTexSubImage2D
|
||||
glTranslated
|
||||
glTranslatef
|
||||
glVertex2d
|
||||
glVertex2f
|
||||
glVertex2i
|
||||
glVertex2s
|
||||
glVertex3d
|
||||
glVertex3f
|
||||
glVertex3i
|
||||
glVertex3s
|
||||
glVertex4d
|
||||
glVertex4f
|
||||
glVertex4i
|
||||
glVertex4s
|
||||
glVertex2dv
|
||||
glVertex2fv
|
||||
glVertex2iv
|
||||
glVertex2sv
|
||||
glVertex3dv
|
||||
glVertex3fv
|
||||
glVertex3iv
|
||||
glVertex3sv
|
||||
glVertex4dv
|
||||
glVertex4fv
|
||||
glVertex4iv
|
||||
glVertex4sv
|
||||
glVertexPointer
|
||||
glViewport
|
||||
glBlendEquationEXT
|
||||
glBlendColorEXT
|
||||
glVertexPointerEXT
|
||||
glNormalPointerEXT
|
||||
glColorPointerEXT
|
||||
glIndexPointerEXT
|
||||
glTexCoordPointerEXT
|
||||
glEdgeFlagPointerEXT
|
||||
glGetPointervEXT
|
||||
glArrayElementEXT
|
||||
glDrawArraysEXT
|
||||
glBindTextureEXT
|
||||
glDeleteTexturesEXT
|
||||
glGenTexturesEXT
|
||||
glPrioritizeTexturesEXT
|
||||
glCopyTexSubImage3DEXT
|
||||
glTexImage3DEXT
|
||||
glTexSubImage3DEXT
|
||||
glWindowPos4fMESA
|
||||
glWindowPos2iMESA
|
||||
glWindowPos2sMESA
|
||||
glWindowPos2fMESA
|
||||
glWindowPos2dMESA
|
||||
glWindowPos2ivMESA
|
||||
glWindowPos2svMESA
|
||||
glWindowPos2fvMESA
|
||||
glWindowPos2dvMESA
|
||||
glWindowPos3iMESA
|
||||
glWindowPos3sMESA
|
||||
glWindowPos3fMESA
|
||||
glWindowPos3dMESA
|
||||
glWindowPos3ivMESA
|
||||
glWindowPos3svMESA
|
||||
glWindowPos3fvMESA
|
||||
glWindowPos3dvMESA
|
||||
glWindowPos4iMESA
|
||||
glWindowPos4sMESA
|
||||
glWindowPos4dMESA
|
||||
glWindowPos4ivMESA
|
||||
glWindowPos4svMESA
|
||||
glWindowPos4fvMESA
|
||||
glWindowPos4dvMESA
|
||||
glResizeBuffersMESA
|
||||
wglCopyContext
|
||||
wglCreateContext
|
||||
wglCreateLayerContext
|
||||
wglDeleteContext
|
||||
;wglDescribeLayerPlane
|
||||
wglGetCurrentContext
|
||||
wglGetCurrentDC
|
||||
;wglGetLayerPaletteEntries
|
||||
wglGetProcAddress
|
||||
wglMakeCurrent
|
||||
;wglRealizeLayerPalette
|
||||
;wglSetLayerPaletteEntries
|
||||
wglShareLists
|
||||
wglSwapLayerBuffers
|
||||
wglUseFontBitmapsA
|
||||
wglUseFontBitmapsW
|
||||
wglUseFontOutlinesA
|
||||
wglUseFontOutlinesW
|
||||
wglChoosePixelFormat
|
||||
ChoosePixelFormat
|
||||
wglDescribePixelFormat
|
||||
DescribePixelFormat
|
||||
wglGetPixelFormat
|
||||
GetPixelFormat
|
||||
wglSetPixelFormat
|
||||
SetPixelFormat
|
||||
wglSwapBuffers
|
||||
SwapBuffers
|
||||
gl3DfxSetPaletteEXT
|
||||
glActiveTextureARB
|
||||
glClientActiveTextureARB
|
||||
glMultiTexCoord1dARB
|
||||
glMultiTexCoord1dvARB
|
||||
glMultiTexCoord1fARB
|
||||
glMultiTexCoord1fvARB
|
||||
glMultiTexCoord1iARB
|
||||
glMultiTexCoord1ivARB
|
||||
glMultiTexCoord1sARB
|
||||
glMultiTexCoord1svARB
|
||||
glMultiTexCoord2dARB
|
||||
glMultiTexCoord2dvARB
|
||||
glMultiTexCoord2fARB
|
||||
glMultiTexCoord2fvARB
|
||||
glMultiTexCoord2iARB
|
||||
glMultiTexCoord2ivARB
|
||||
glMultiTexCoord2sARB
|
||||
glMultiTexCoord2svARB
|
||||
glMultiTexCoord3dARB
|
||||
glMultiTexCoord3dvARB
|
||||
glMultiTexCoord3fARB
|
||||
glMultiTexCoord3fvARB
|
||||
glMultiTexCoord3iARB
|
||||
glMultiTexCoord3ivARB
|
||||
glMultiTexCoord3sARB
|
||||
glMultiTexCoord3svARB
|
||||
glMultiTexCoord4dARB
|
||||
glMultiTexCoord4dvARB
|
||||
glMultiTexCoord4fARB
|
||||
glMultiTexCoord4fvARB
|
||||
glMultiTexCoord4iARB
|
||||
glMultiTexCoord4ivARB
|
||||
glMultiTexCoord4sARB
|
||||
glMultiTexCoord4svARB
|
||||
fxMesaCreateContext
|
||||
fxMesaCreateBestContext
|
||||
fxMesaDestroyContext
|
||||
fxMesaSelectCurrentBoard
|
||||
fxMesaMakeCurrent
|
||||
fxMesaGetCurrentContext
|
||||
fxMesaSwapBuffers
|
||||
fxMesaSetNearFar
|
||||
fxMesaUpdateScreenSize
|
||||
fxQueryHardware
|
||||
fxCloseHardware
|
||||
OSMesaCreateContext
|
||||
OSMesaDestroyContext
|
||||
OSMesaGetCurrentContext
|
||||
OSMesaGetDepthBuffer
|
||||
OSMesaGetIntegerv
|
||||
OSMesaMakeCurrent
|
||||
OSMesaPixelStore
|
||||
EXPORTS
|
||||
glAccum
|
||||
glAlphaFunc
|
||||
glAreTexturesResident
|
||||
glArrayElement
|
||||
glBegin
|
||||
glBindTexture
|
||||
glBitmap
|
||||
glBlendFunc
|
||||
glCallList
|
||||
glCallLists
|
||||
glClear
|
||||
glClearAccum
|
||||
glClearIndex
|
||||
glClearColor
|
||||
glClearDepth
|
||||
glClearStencil
|
||||
glClipPlane
|
||||
glColor3b
|
||||
glColor3d
|
||||
glColor3f
|
||||
glColor3i
|
||||
glColor3s
|
||||
glColor3ub
|
||||
glColor3ui
|
||||
glColor3us
|
||||
glColor4b
|
||||
glColor4d
|
||||
glColor4f
|
||||
glColor4i
|
||||
glColor4s
|
||||
glColor4ub
|
||||
glColor4ui
|
||||
glColor4us
|
||||
glColor3bv
|
||||
glColor3dv
|
||||
glColor3fv
|
||||
glColor3iv
|
||||
glColor3sv
|
||||
glColor3ubv
|
||||
glColor3uiv
|
||||
glColor3usv
|
||||
glColor4bv
|
||||
glColor4dv
|
||||
glColor4fv
|
||||
glColor4iv
|
||||
glColor4sv
|
||||
glColor4ubv
|
||||
glColor4uiv
|
||||
glColor4usv
|
||||
glColorMask
|
||||
glColorMaterial
|
||||
glColorPointer
|
||||
glColorTableEXT
|
||||
glColorSubTableEXT
|
||||
glCopyPixels
|
||||
glCopyTexImage1D
|
||||
glCopyTexImage2D
|
||||
glCopyTexSubImage1D
|
||||
glCopyTexSubImage2D
|
||||
glCullFace
|
||||
glDepthFunc
|
||||
glDepthMask
|
||||
glDepthRange
|
||||
glDeleteLists
|
||||
glDeleteTextures
|
||||
glDisable
|
||||
glDisableClientState
|
||||
glDrawArrays
|
||||
glDrawBuffer
|
||||
glDrawElements
|
||||
glDrawPixels
|
||||
glEnable
|
||||
glEnableClientState
|
||||
glEnd
|
||||
glEndList
|
||||
glEvalCoord1d
|
||||
glEvalCoord1f
|
||||
glEvalCoord1dv
|
||||
glEvalCoord1fv
|
||||
glEvalCoord2d
|
||||
glEvalCoord2f
|
||||
glEvalCoord2dv
|
||||
glEvalCoord2fv
|
||||
glEvalPoint1
|
||||
glEvalPoint2
|
||||
glEvalMesh1
|
||||
glEdgeFlag
|
||||
glEdgeFlagv
|
||||
glEdgeFlagPointer
|
||||
glEvalMesh2
|
||||
glFeedbackBuffer
|
||||
glFinish
|
||||
glFlush
|
||||
glFogf
|
||||
glFogi
|
||||
glFogfv
|
||||
glFogiv
|
||||
glFrontFace
|
||||
glFrustum
|
||||
glGenLists
|
||||
glGenTextures
|
||||
glGetBooleanv
|
||||
glGetClipPlane
|
||||
glGetColorTableEXT
|
||||
glGetColorTableParameterivEXT
|
||||
glGetColorTableParameterfvEXT
|
||||
glGetDoublev
|
||||
glGetError
|
||||
glGetFloatv
|
||||
glGetIntegerv
|
||||
glGetLightfv
|
||||
glGetLightiv
|
||||
glGetMapdv
|
||||
glGetMapfv
|
||||
glGetMapiv
|
||||
glGetMaterialfv
|
||||
glGetMaterialiv
|
||||
glGetPixelMapfv
|
||||
glGetPixelMapuiv
|
||||
glGetPixelMapusv
|
||||
glGetPointerv
|
||||
glGetPolygonStipple
|
||||
glGetString
|
||||
glGetTexEnvfv
|
||||
glGetTexEnviv
|
||||
glGetTexGeniv
|
||||
glGetTexGendv
|
||||
glGetTexGenfv
|
||||
glGetTexImage
|
||||
glGetTexLevelParameterfv
|
||||
glGetTexLevelParameteriv
|
||||
glGetTexParameterfv
|
||||
glGetTexParameteriv
|
||||
glHint
|
||||
glIndexd
|
||||
glIndexf
|
||||
glIndexi
|
||||
glIndexs
|
||||
glIndexub
|
||||
glIndexdv
|
||||
glIndexfv
|
||||
glIndexiv
|
||||
glIndexsv
|
||||
glIndexubv
|
||||
glIndexMask
|
||||
glIndexPointer
|
||||
glInterleavedArrays
|
||||
glInitNames
|
||||
glIsList
|
||||
glIsTexture
|
||||
glLightf
|
||||
glLighti
|
||||
glLightfv
|
||||
glLightiv
|
||||
glLightModelf
|
||||
glLightModeli
|
||||
glLightModelfv
|
||||
glLightModeliv
|
||||
glLineWidth
|
||||
glLineStipple
|
||||
glListBase
|
||||
glLoadIdentity
|
||||
glLoadMatrixd
|
||||
glLoadMatrixf
|
||||
glLoadName
|
||||
glLogicOp
|
||||
glMap1d
|
||||
glMap1f
|
||||
glMap2d
|
||||
glMap2f
|
||||
glMapGrid1d
|
||||
glMapGrid1f
|
||||
glMapGrid2d
|
||||
glMapGrid2f
|
||||
glMaterialf
|
||||
glMateriali
|
||||
glMaterialfv
|
||||
glMaterialiv
|
||||
glMatrixMode
|
||||
glMultMatrixd
|
||||
glMultMatrixf
|
||||
glNewList
|
||||
glNormal3b
|
||||
glNormal3d
|
||||
glNormal3f
|
||||
glNormal3i
|
||||
glNormal3s
|
||||
glNormal3bv
|
||||
glNormal3dv
|
||||
glNormal3fv
|
||||
glNormal3iv
|
||||
glNormal3sv
|
||||
glNormalPointer
|
||||
glOrtho
|
||||
glPassThrough
|
||||
glPixelMapfv
|
||||
glPixelMapuiv
|
||||
glPixelMapusv
|
||||
glPixelStoref
|
||||
glPixelStorei
|
||||
glPixelTransferf
|
||||
glPixelTransferi
|
||||
glPixelZoom
|
||||
glPointSize
|
||||
glPolygonMode
|
||||
glPolygonOffset
|
||||
glPolygonOffsetEXT
|
||||
glPolygonStipple
|
||||
glPopAttrib
|
||||
glPopClientAttrib
|
||||
glPopMatrix
|
||||
glPopName
|
||||
glPrioritizeTextures
|
||||
glPushMatrix
|
||||
glRasterPos2d
|
||||
glRasterPos2f
|
||||
glRasterPos2i
|
||||
glRasterPos2s
|
||||
glRasterPos3d
|
||||
glRasterPos3f
|
||||
glRasterPos3i
|
||||
glRasterPos3s
|
||||
glRasterPos4d
|
||||
glRasterPos4f
|
||||
glRasterPos4i
|
||||
glRasterPos4s
|
||||
glRasterPos2dv
|
||||
glRasterPos2fv
|
||||
glRasterPos2iv
|
||||
glRasterPos2sv
|
||||
glRasterPos3dv
|
||||
glRasterPos3fv
|
||||
glRasterPos3iv
|
||||
glRasterPos3sv
|
||||
glRasterPos4dv
|
||||
glRasterPos4fv
|
||||
glRasterPos4iv
|
||||
glRasterPos4sv
|
||||
glReadBuffer
|
||||
glReadPixels
|
||||
glRectd
|
||||
glRectf
|
||||
glRecti
|
||||
glRects
|
||||
glRectdv
|
||||
glRectfv
|
||||
glRectiv
|
||||
glRectsv
|
||||
glScissor
|
||||
glIsEnabled
|
||||
glPushAttrib
|
||||
glPushClientAttrib
|
||||
glPushName
|
||||
glRenderMode
|
||||
glRotated
|
||||
glRotatef
|
||||
glSelectBuffer
|
||||
glScaled
|
||||
glScalef
|
||||
glShadeModel
|
||||
glStencilFunc
|
||||
glStencilMask
|
||||
glStencilOp
|
||||
glTexCoord1d
|
||||
glTexCoord1f
|
||||
glTexCoord1i
|
||||
glTexCoord1s
|
||||
glTexCoord2d
|
||||
glTexCoord2f
|
||||
glTexCoord2i
|
||||
glTexCoord2s
|
||||
glTexCoord3d
|
||||
glTexCoord3f
|
||||
glTexCoord3i
|
||||
glTexCoord3s
|
||||
glTexCoord4d
|
||||
glTexCoord4f
|
||||
glTexCoord4i
|
||||
glTexCoord4s
|
||||
glTexCoord1dv
|
||||
glTexCoord1fv
|
||||
glTexCoord1iv
|
||||
glTexCoord1sv
|
||||
glTexCoord2dv
|
||||
glTexCoord2fv
|
||||
glTexCoord2iv
|
||||
glTexCoord2sv
|
||||
glTexCoord3dv
|
||||
glTexCoord3fv
|
||||
glTexCoord3iv
|
||||
glTexCoord3sv
|
||||
glTexCoord4dv
|
||||
glTexCoord4fv
|
||||
glTexCoord4iv
|
||||
glTexCoord4sv
|
||||
glTexCoordPointer
|
||||
glTexGend
|
||||
glTexGenf
|
||||
glTexGeni
|
||||
glTexGendv
|
||||
glTexGeniv
|
||||
glTexGenfv
|
||||
glTexEnvf
|
||||
glTexEnvi
|
||||
glTexEnvfv
|
||||
glTexEnviv
|
||||
glTexImage1D
|
||||
glTexImage2D
|
||||
glTexParameterf
|
||||
glTexParameteri
|
||||
glTexParameterfv
|
||||
glTexParameteriv
|
||||
glTexSubImage1D
|
||||
glTexSubImage2D
|
||||
glTranslated
|
||||
glTranslatef
|
||||
glVertex2d
|
||||
glVertex2f
|
||||
glVertex2i
|
||||
glVertex2s
|
||||
glVertex3d
|
||||
glVertex3f
|
||||
glVertex3i
|
||||
glVertex3s
|
||||
glVertex4d
|
||||
glVertex4f
|
||||
glVertex4i
|
||||
glVertex4s
|
||||
glVertex2dv
|
||||
glVertex2fv
|
||||
glVertex2iv
|
||||
glVertex2sv
|
||||
glVertex3dv
|
||||
glVertex3fv
|
||||
glVertex3iv
|
||||
glVertex3sv
|
||||
glVertex4dv
|
||||
glVertex4fv
|
||||
glVertex4iv
|
||||
glVertex4sv
|
||||
glVertexPointer
|
||||
glViewport
|
||||
glBlendEquationEXT
|
||||
glBlendColorEXT
|
||||
glVertexPointerEXT
|
||||
glNormalPointerEXT
|
||||
glColorPointerEXT
|
||||
glIndexPointerEXT
|
||||
glTexCoordPointerEXT
|
||||
glEdgeFlagPointerEXT
|
||||
glGetPointervEXT
|
||||
glArrayElementEXT
|
||||
glDrawArraysEXT
|
||||
glBindTextureEXT
|
||||
glDeleteTexturesEXT
|
||||
glGenTexturesEXT
|
||||
glPrioritizeTexturesEXT
|
||||
glCopyTexSubImage3DEXT
|
||||
glTexImage3DEXT
|
||||
glTexSubImage3DEXT
|
||||
glWindowPos4fMESA
|
||||
glWindowPos2iMESA
|
||||
glWindowPos2sMESA
|
||||
glWindowPos2fMESA
|
||||
glWindowPos2dMESA
|
||||
glWindowPos2ivMESA
|
||||
glWindowPos2svMESA
|
||||
glWindowPos2fvMESA
|
||||
glWindowPos2dvMESA
|
||||
glWindowPos3iMESA
|
||||
glWindowPos3sMESA
|
||||
glWindowPos3fMESA
|
||||
glWindowPos3dMESA
|
||||
glWindowPos3ivMESA
|
||||
glWindowPos3svMESA
|
||||
glWindowPos3fvMESA
|
||||
glWindowPos3dvMESA
|
||||
glWindowPos4iMESA
|
||||
glWindowPos4sMESA
|
||||
glWindowPos4dMESA
|
||||
glWindowPos4ivMESA
|
||||
glWindowPos4svMESA
|
||||
glWindowPos4fvMESA
|
||||
glWindowPos4dvMESA
|
||||
glResizeBuffersMESA
|
||||
wglCopyContext
|
||||
wglCreateContext
|
||||
wglCreateLayerContext
|
||||
wglDeleteContext
|
||||
;wglDescribeLayerPlane
|
||||
wglGetCurrentContext
|
||||
wglGetCurrentDC
|
||||
;wglGetLayerPaletteEntries
|
||||
wglGetProcAddress
|
||||
wglMakeCurrent
|
||||
;wglRealizeLayerPalette
|
||||
;wglSetLayerPaletteEntries
|
||||
wglShareLists
|
||||
wglSwapLayerBuffers
|
||||
wglUseFontBitmapsA
|
||||
wglUseFontBitmapsW
|
||||
wglUseFontOutlinesA
|
||||
wglUseFontOutlinesW
|
||||
wglChoosePixelFormat
|
||||
ChoosePixelFormat
|
||||
wglDescribePixelFormat
|
||||
DescribePixelFormat
|
||||
wglGetPixelFormat
|
||||
GetPixelFormat
|
||||
wglSetPixelFormat
|
||||
SetPixelFormat
|
||||
wglSwapBuffers
|
||||
SwapBuffers
|
||||
gl3DfxSetPaletteEXT
|
||||
glActiveTextureARB
|
||||
glClientActiveTextureARB
|
||||
glMultiTexCoord1dARB
|
||||
glMultiTexCoord1dvARB
|
||||
glMultiTexCoord1fARB
|
||||
glMultiTexCoord1fvARB
|
||||
glMultiTexCoord1iARB
|
||||
glMultiTexCoord1ivARB
|
||||
glMultiTexCoord1sARB
|
||||
glMultiTexCoord1svARB
|
||||
glMultiTexCoord2dARB
|
||||
glMultiTexCoord2dvARB
|
||||
glMultiTexCoord2fARB
|
||||
glMultiTexCoord2fvARB
|
||||
glMultiTexCoord2iARB
|
||||
glMultiTexCoord2ivARB
|
||||
glMultiTexCoord2sARB
|
||||
glMultiTexCoord2svARB
|
||||
glMultiTexCoord3dARB
|
||||
glMultiTexCoord3dvARB
|
||||
glMultiTexCoord3fARB
|
||||
glMultiTexCoord3fvARB
|
||||
glMultiTexCoord3iARB
|
||||
glMultiTexCoord3ivARB
|
||||
glMultiTexCoord3sARB
|
||||
glMultiTexCoord3svARB
|
||||
glMultiTexCoord4dARB
|
||||
glMultiTexCoord4dvARB
|
||||
glMultiTexCoord4fARB
|
||||
glMultiTexCoord4fvARB
|
||||
glMultiTexCoord4iARB
|
||||
glMultiTexCoord4ivARB
|
||||
glMultiTexCoord4sARB
|
||||
glMultiTexCoord4svARB
|
||||
fxMesaCreateContext
|
||||
fxMesaCreateBestContext
|
||||
fxMesaDestroyContext
|
||||
fxMesaSelectCurrentBoard
|
||||
fxMesaMakeCurrent
|
||||
fxMesaGetCurrentContext
|
||||
fxMesaSwapBuffers
|
||||
; fxMesaSetNearFar
|
||||
fxMesaUpdateScreenSize
|
||||
fxQueryHardware
|
||||
fxCloseHardware
|
||||
; OSMesaCreateContext
|
||||
; OSMesaDestroyContext
|
||||
; OSMesaGetCurrentContext
|
||||
; OSMesaGetDepthBuffer
|
||||
; OSMesaGetIntegerv
|
||||
; OSMesaMakeCurrent
|
||||
; OSMesaPixelStore
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: fxsetup.c,v 1.38 2002/11/04 20:29:04 brianp Exp $ */
|
||||
/* $Id: fxsetup.c,v 1.39 2003/08/19 15:52:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@ -29,6 +29,8 @@
|
||||
* Brian Paul
|
||||
* Daryll Strauss
|
||||
* Keith Whitwell
|
||||
* Daniel Borca
|
||||
* Hiroshi Morii
|
||||
*/
|
||||
|
||||
/* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */
|
||||
@ -78,8 +80,8 @@ fxTexValidate(GLcontext * ctx, struct gl_texture_object *tObj)
|
||||
else
|
||||
FX_smallLodLog2(ti->info) = FX_largeLodLog2(ti->info);
|
||||
|
||||
fxTexGetFormat(tObj->Image[minl]->TexFormat->BaseFormat, &(ti->info.format),
|
||||
&(ti->baseLevelInternalFormat));
|
||||
fxTexGetFormat(ctx, tObj->Image[minl]->TexFormat->BaseFormat, &(ti->info.format),
|
||||
&(ti->baseLevelInternalFormat)); /* [koolsmoky] */
|
||||
|
||||
switch (tObj->WrapS) {
|
||||
case GL_CLAMP_TO_EDGE:
|
||||
@ -309,7 +311,7 @@ fxSetupSingleTMU_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj)
|
||||
else {
|
||||
if (fxMesa->haveTwoTMUs) {
|
||||
if (fxMesa->freeTexMem[FX_TMU0] >
|
||||
FX_grTexTextureMemRequired_NoLock(GR_MIPMAPLEVELMASK_BOTH,
|
||||
grTexTextureMemRequired(GR_MIPMAPLEVELMASK_BOTH,
|
||||
&(ti->info))) {
|
||||
fxTMMoveInTM_NoLock(fxMesa, tObj, FX_TMU0);
|
||||
}
|
||||
@ -328,22 +330,19 @@ fxSetupSingleTMU_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj)
|
||||
if (MESA_VERBOSE & VERBOSE_DRIVER) {
|
||||
fprintf(stderr, "fxmesa: uploading texture palette\n");
|
||||
}
|
||||
FX_grTexDownloadTable_NoLock(GR_TMU0, GR_TEXTABLE_PALETTE,
|
||||
&(ti->palette));
|
||||
FX_grTexDownloadTable_NoLock(GR_TMU1, GR_TEXTABLE_PALETTE,
|
||||
&(ti->palette));
|
||||
grTexDownloadTable(GR_TEXTABLE_PALETTE, &(ti->palette));
|
||||
}
|
||||
|
||||
FX_grTexClampMode_NoLock(GR_TMU0, ti->sClamp, ti->tClamp);
|
||||
FX_grTexClampMode_NoLock(GR_TMU1, ti->sClamp, ti->tClamp);
|
||||
FX_grTexFilterMode_NoLock(GR_TMU0, ti->minFilt, ti->maxFilt);
|
||||
FX_grTexFilterMode_NoLock(GR_TMU1, ti->minFilt, ti->maxFilt);
|
||||
FX_grTexMipMapMode_NoLock(GR_TMU0, ti->mmMode, ti->LODblend);
|
||||
FX_grTexMipMapMode_NoLock(GR_TMU1, ti->mmMode, ti->LODblend);
|
||||
grTexClampMode(GR_TMU0, ti->sClamp, ti->tClamp);
|
||||
grTexClampMode(GR_TMU1, ti->sClamp, ti->tClamp);
|
||||
grTexFilterMode(GR_TMU0, ti->minFilt, ti->maxFilt);
|
||||
grTexFilterMode(GR_TMU1, ti->minFilt, ti->maxFilt);
|
||||
grTexMipMapMode(GR_TMU0, ti->mmMode, ti->LODblend);
|
||||
grTexMipMapMode(GR_TMU1, ti->mmMode, ti->LODblend);
|
||||
|
||||
FX_grTexSource_NoLock(GR_TMU0, ti->tm[FX_TMU0]->startAddr,
|
||||
grTexSource(GR_TMU0, ti->tm[FX_TMU0]->startAddr,
|
||||
GR_MIPMAPLEVELMASK_ODD, &(ti->info));
|
||||
FX_grTexSource_NoLock(GR_TMU1, ti->tm[FX_TMU1]->startAddr,
|
||||
grTexSource(GR_TMU1, ti->tm[FX_TMU1]->startAddr,
|
||||
GR_MIPMAPLEVELMASK_EVEN, &(ti->info));
|
||||
}
|
||||
else {
|
||||
@ -357,8 +356,7 @@ fxSetupSingleTMU_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj)
|
||||
if (MESA_VERBOSE & VERBOSE_DRIVER) {
|
||||
fprintf(stderr, "fxmesa: uploading texture palette\n");
|
||||
}
|
||||
FX_grTexDownloadTable_NoLock(tmu, GR_TEXTABLE_PALETTE,
|
||||
&(ti->palette));
|
||||
grTexDownloadTable(GR_TEXTABLE_PALETTE, &(ti->palette));
|
||||
}
|
||||
|
||||
/* KW: The alternative is to do the download to the other tmu. If
|
||||
@ -368,12 +366,11 @@ fxSetupSingleTMU_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj)
|
||||
if (ti->LODblend && (MESA_VERBOSE & VERBOSE_DRIVER))
|
||||
fprintf(stderr, "fxmesa: not blending texture - only on one tmu\n");
|
||||
|
||||
FX_grTexClampMode_NoLock(tmu, ti->sClamp, ti->tClamp);
|
||||
FX_grTexFilterMode_NoLock(tmu, ti->minFilt, ti->maxFilt);
|
||||
FX_grTexMipMapMode_NoLock(tmu, ti->mmMode, FXFALSE);
|
||||
grTexClampMode(tmu, ti->sClamp, ti->tClamp);
|
||||
grTexFilterMode(tmu, ti->minFilt, ti->maxFilt);
|
||||
grTexMipMapMode(tmu, ti->mmMode, FXFALSE);
|
||||
|
||||
FX_grTexSource_NoLock(tmu, ti->tm[tmu]->startAddr,
|
||||
GR_MIPMAPLEVELMASK_BOTH, &(ti->info));
|
||||
grTexSource(tmu, ti->tm[tmu]->startAddr, GR_MIPMAPLEVELMASK_BOTH, &(ti->info));
|
||||
}
|
||||
}
|
||||
|
||||
@ -385,7 +382,7 @@ fxSelectSingleTMUSrc_NoLock(fxMesaContext fxMesa, GLint tmu, FxBool LODblend)
|
||||
}
|
||||
|
||||
if (LODblend) {
|
||||
FX_grTexCombine_NoLock(GR_TMU0,
|
||||
grTexCombine(GR_TMU0,
|
||||
GR_COMBINE_FUNCTION_BLEND,
|
||||
GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION,
|
||||
GR_COMBINE_FUNCTION_BLEND,
|
||||
@ -393,7 +390,7 @@ fxSelectSingleTMUSrc_NoLock(fxMesaContext fxMesa, GLint tmu, FxBool LODblend)
|
||||
FXFALSE, FXFALSE);
|
||||
|
||||
if (fxMesa->haveTwoTMUs)
|
||||
FX_grTexCombine_NoLock(GR_TMU1,
|
||||
grTexCombine(GR_TMU1,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
@ -402,13 +399,13 @@ fxSelectSingleTMUSrc_NoLock(fxMesaContext fxMesa, GLint tmu, FxBool LODblend)
|
||||
}
|
||||
else {
|
||||
if (tmu != FX_TMU1) {
|
||||
FX_grTexCombine_NoLock(GR_TMU0,
|
||||
grTexCombine(GR_TMU0,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE, FXFALSE, FXFALSE);
|
||||
if (fxMesa->haveTwoTMUs) {
|
||||
FX_grTexCombine_NoLock(GR_TMU1,
|
||||
grTexCombine(GR_TMU1,
|
||||
GR_COMBINE_FUNCTION_ZERO,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_ZERO,
|
||||
@ -417,7 +414,7 @@ fxSelectSingleTMUSrc_NoLock(fxMesaContext fxMesa, GLint tmu, FxBool LODblend)
|
||||
fxMesa->tmuSrc = FX_TMU0;
|
||||
}
|
||||
else {
|
||||
FX_grTexCombine_NoLock(GR_TMU1,
|
||||
grTexCombine(GR_TMU1,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
@ -425,7 +422,7 @@ fxSelectSingleTMUSrc_NoLock(fxMesaContext fxMesa, GLint tmu, FxBool LODblend)
|
||||
|
||||
/* GR_COMBINE_FUNCTION_SCALE_OTHER doesn't work ?!? */
|
||||
|
||||
FX_grTexCombine_NoLock(GR_TMU0,
|
||||
grTexCombine(GR_TMU0,
|
||||
GR_COMBINE_FUNCTION_BLEND,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
GR_COMBINE_FUNCTION_BLEND,
|
||||
@ -495,25 +492,25 @@ fxSetupTextureSingleTMU_NoLock(GLcontext * ctx, GLuint textureset)
|
||||
|
||||
switch (ctx->Texture.Unit[textureset].EnvMode) {
|
||||
case GL_DECAL:
|
||||
FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
|
||||
grAlphaCombine(GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
locala, GR_COMBINE_OTHER_NONE, FXFALSE);
|
||||
|
||||
FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_BLEND,
|
||||
grColorCombine(GR_COMBINE_FUNCTION_BLEND,
|
||||
GR_COMBINE_FACTOR_TEXTURE_ALPHA,
|
||||
localc, GR_COMBINE_OTHER_TEXTURE, FXFALSE);
|
||||
break;
|
||||
case GL_MODULATE:
|
||||
FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
grAlphaCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
locala, GR_COMBINE_OTHER_TEXTURE, FXFALSE);
|
||||
|
||||
if (ifmt == GL_ALPHA)
|
||||
FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
|
||||
grColorCombine(GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
localc, GR_COMBINE_OTHER_NONE, FXFALSE);
|
||||
else
|
||||
FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
localc, GR_COMBINE_OTHER_TEXTURE, FXFALSE);
|
||||
break;
|
||||
@ -523,20 +520,20 @@ fxSetupTextureSingleTMU_NoLock(GLcontext * ctx, GLuint textureset)
|
||||
break;
|
||||
case GL_REPLACE:
|
||||
if ((ifmt == GL_RGB) || (ifmt == GL_LUMINANCE))
|
||||
FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
|
||||
grAlphaCombine(GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
locala, GR_COMBINE_OTHER_NONE, FXFALSE);
|
||||
else
|
||||
FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
grAlphaCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
locala, GR_COMBINE_OTHER_TEXTURE, FXFALSE);
|
||||
|
||||
if (ifmt == GL_ALPHA)
|
||||
FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
|
||||
grColorCombine(GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
localc, GR_COMBINE_OTHER_NONE, FXFALSE);
|
||||
else
|
||||
FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
localc, GR_COMBINE_OTHER_TEXTURE, FXFALSE);
|
||||
break;
|
||||
@ -673,34 +670,29 @@ fxSetupDoubleTMU_NoLock(fxMesaContext fxMesa,
|
||||
}
|
||||
|
||||
if (!fxMesa->haveGlobalPaletteTexture) {
|
||||
/* [dBorca]
|
||||
* all TMUs share the same table.
|
||||
* The next test shouldn't be TMU specific...
|
||||
*/
|
||||
if (ti0->info.format == GR_TEXFMT_P_8) {
|
||||
if (MESA_VERBOSE & VERBOSE_DRIVER) {
|
||||
fprintf(stderr, "fxmesa: uploading texture palette TMU0\n");
|
||||
}
|
||||
FX_grTexDownloadTable_NoLock(tmu0, GR_TEXTABLE_PALETTE,
|
||||
&(ti0->palette));
|
||||
}
|
||||
|
||||
if (ti1->info.format == GR_TEXFMT_P_8) {
|
||||
if (MESA_VERBOSE & VERBOSE_DRIVER) {
|
||||
fprintf(stderr, "fxmesa: uploading texture palette TMU1\n");
|
||||
}
|
||||
FX_grTexDownloadTable_NoLock(tmu1, GR_TEXTABLE_PALETTE,
|
||||
&(ti1->palette));
|
||||
grTexDownloadTable(GR_TEXTABLE_PALETTE, &(ti0->palette));
|
||||
}
|
||||
}
|
||||
|
||||
FX_grTexSource_NoLock(tmu0, ti0->tm[tmu0]->startAddr,
|
||||
grTexSource(tmu0, ti0->tm[tmu0]->startAddr,
|
||||
GR_MIPMAPLEVELMASK_BOTH, &(ti0->info));
|
||||
FX_grTexClampMode_NoLock(tmu0, ti0->sClamp, ti0->tClamp);
|
||||
FX_grTexFilterMode_NoLock(tmu0, ti0->minFilt, ti0->maxFilt);
|
||||
FX_grTexMipMapMode_NoLock(tmu0, ti0->mmMode, FXFALSE);
|
||||
grTexClampMode(tmu0, ti0->sClamp, ti0->tClamp);
|
||||
grTexFilterMode(tmu0, ti0->minFilt, ti0->maxFilt);
|
||||
grTexMipMapMode(tmu0, ti0->mmMode, FXFALSE);
|
||||
|
||||
FX_grTexSource_NoLock(tmu1, ti1->tm[tmu1]->startAddr,
|
||||
grTexSource(tmu1, ti1->tm[tmu1]->startAddr,
|
||||
GR_MIPMAPLEVELMASK_BOTH, &(ti1->info));
|
||||
FX_grTexClampMode_NoLock(tmu1, ti1->sClamp, ti1->tClamp);
|
||||
FX_grTexFilterMode_NoLock(tmu1, ti1->minFilt, ti1->maxFilt);
|
||||
FX_grTexMipMapMode_NoLock(tmu1, ti1->mmMode, FXFALSE);
|
||||
grTexClampMode(tmu1, ti1->sClamp, ti1->tClamp);
|
||||
grTexFilterMode(tmu1, ti1->minFilt, ti1->maxFilt);
|
||||
grTexMipMapMode(tmu1, ti1->mmMode, FXFALSE);
|
||||
|
||||
#undef T0_NOT_IN_TMU
|
||||
#undef T1_NOT_IN_TMU
|
||||
@ -784,62 +776,62 @@ fxSetupTextureDoubleTMU_NoLock(GLcontext * ctx)
|
||||
isalpha[tmu1] = GL_FALSE;
|
||||
|
||||
if (isalpha[FX_TMU1])
|
||||
FX_grTexCombine_NoLock(GR_TMU1,
|
||||
grTexCombine(GR_TMU1,
|
||||
GR_COMBINE_FUNCTION_ZERO,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE, FXTRUE, FXFALSE);
|
||||
else
|
||||
FX_grTexCombine_NoLock(GR_TMU1,
|
||||
grTexCombine(GR_TMU1,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE, FXFALSE, FXFALSE);
|
||||
|
||||
if (isalpha[FX_TMU0])
|
||||
FX_grTexCombine_NoLock(GR_TMU0,
|
||||
grTexCombine(GR_TMU0,
|
||||
GR_COMBINE_FUNCTION_BLEND_OTHER,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
GR_COMBINE_FUNCTION_BLEND_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL, FXFALSE, FXFALSE);
|
||||
else
|
||||
FX_grTexCombine_NoLock(GR_TMU0,
|
||||
grTexCombine(GR_TMU0,
|
||||
GR_COMBINE_FUNCTION_BLEND_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
GR_COMBINE_FUNCTION_BLEND_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL, FXFALSE, FXFALSE);
|
||||
|
||||
FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
localc, GR_COMBINE_OTHER_TEXTURE, FXFALSE);
|
||||
|
||||
FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
grAlphaCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
locala, GR_COMBINE_OTHER_TEXTURE, FXFALSE);
|
||||
break;
|
||||
}
|
||||
case (FX_UM_E0_REPLACE | FX_UM_E1_BLEND): /* Only for GLQuake */
|
||||
if (tmu1 == FX_TMU1) {
|
||||
FX_grTexCombine_NoLock(GR_TMU1,
|
||||
grTexCombine(GR_TMU1,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE, FXTRUE, FXFALSE);
|
||||
|
||||
FX_grTexCombine_NoLock(GR_TMU0,
|
||||
grTexCombine(GR_TMU0,
|
||||
GR_COMBINE_FUNCTION_BLEND_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
GR_COMBINE_FUNCTION_BLEND_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL, FXFALSE, FXFALSE);
|
||||
}
|
||||
else {
|
||||
FX_grTexCombine_NoLock(GR_TMU1,
|
||||
grTexCombine(GR_TMU1,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE, FXFALSE, FXFALSE);
|
||||
|
||||
FX_grTexCombine_NoLock(GR_TMU0,
|
||||
grTexCombine(GR_TMU0,
|
||||
GR_COMBINE_FUNCTION_BLEND_OTHER,
|
||||
GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
|
||||
GR_COMBINE_FUNCTION_BLEND_OTHER,
|
||||
@ -847,23 +839,23 @@ fxSetupTextureDoubleTMU_NoLock(GLcontext * ctx)
|
||||
FXFALSE, FXFALSE);
|
||||
}
|
||||
|
||||
FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
|
||||
grAlphaCombine(GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
locala, GR_COMBINE_OTHER_NONE, FXFALSE);
|
||||
|
||||
FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
localc, GR_COMBINE_OTHER_TEXTURE, FXFALSE);
|
||||
break;
|
||||
case (FX_UM_E0_REPLACE | FX_UM_E1_MODULATE): /* Quake 2 and 3 */
|
||||
if (tmu1 == FX_TMU1) {
|
||||
FX_grTexCombine_NoLock(GR_TMU1,
|
||||
grTexCombine(GR_TMU1,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_ZERO,
|
||||
GR_COMBINE_FACTOR_NONE, FXFALSE, FXTRUE);
|
||||
|
||||
FX_grTexCombine_NoLock(GR_TMU0,
|
||||
grTexCombine(GR_TMU0,
|
||||
GR_COMBINE_FUNCTION_BLEND_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
GR_COMBINE_FUNCTION_BLEND_OTHER,
|
||||
@ -871,13 +863,13 @@ fxSetupTextureDoubleTMU_NoLock(GLcontext * ctx)
|
||||
|
||||
}
|
||||
else {
|
||||
FX_grTexCombine_NoLock(GR_TMU1,
|
||||
grTexCombine(GR_TMU1,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE, FXFALSE, FXFALSE);
|
||||
|
||||
FX_grTexCombine_NoLock(GR_TMU0,
|
||||
grTexCombine(GR_TMU0,
|
||||
GR_COMBINE_FUNCTION_BLEND_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
GR_COMBINE_FUNCTION_BLEND_OTHER,
|
||||
@ -885,16 +877,16 @@ fxSetupTextureDoubleTMU_NoLock(GLcontext * ctx)
|
||||
}
|
||||
|
||||
if (ti0->baseLevelInternalFormat == GL_RGB)
|
||||
FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
|
||||
grAlphaCombine(GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
locala, GR_COMBINE_OTHER_NONE, FXFALSE);
|
||||
else
|
||||
FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
grAlphaCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
locala, GR_COMBINE_OTHER_NONE, FXFALSE);
|
||||
|
||||
|
||||
FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
localc, GR_COMBINE_OTHER_TEXTURE, FXFALSE);
|
||||
break;
|
||||
@ -915,36 +907,36 @@ fxSetupTextureDoubleTMU_NoLock(GLcontext * ctx)
|
||||
isalpha[tmu1] = GL_FALSE;
|
||||
|
||||
if (isalpha[FX_TMU1])
|
||||
FX_grTexCombine_NoLock(GR_TMU1,
|
||||
grTexCombine(GR_TMU1,
|
||||
GR_COMBINE_FUNCTION_ZERO,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE, FXTRUE, FXFALSE);
|
||||
else
|
||||
FX_grTexCombine_NoLock(GR_TMU1,
|
||||
grTexCombine(GR_TMU1,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE, FXFALSE, FXFALSE);
|
||||
|
||||
if (isalpha[FX_TMU0])
|
||||
FX_grTexCombine_NoLock(GR_TMU0,
|
||||
grTexCombine(GR_TMU0,
|
||||
GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
|
||||
GR_COMBINE_FACTOR_ONE, FXFALSE, FXFALSE);
|
||||
else
|
||||
FX_grTexCombine_NoLock(GR_TMU0,
|
||||
grTexCombine(GR_TMU0,
|
||||
GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
|
||||
GR_COMBINE_FACTOR_ONE,
|
||||
GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
|
||||
GR_COMBINE_FACTOR_ONE, FXFALSE, FXFALSE);
|
||||
|
||||
FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
localc, GR_COMBINE_OTHER_TEXTURE, FXFALSE);
|
||||
|
||||
FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
grAlphaCombine(GR_COMBINE_FUNCTION_SCALE_OTHER,
|
||||
GR_COMBINE_FACTOR_LOCAL,
|
||||
locala, GR_COMBINE_OTHER_TEXTURE, FXFALSE);
|
||||
break;
|
||||
@ -983,11 +975,11 @@ fxSetupTextureNone_NoLock(GLcontext * ctx)
|
||||
else
|
||||
localc = GR_COMBINE_LOCAL_CONSTANT;
|
||||
|
||||
FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
|
||||
grAlphaCombine(GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
locala, GR_COMBINE_OTHER_NONE, FXFALSE);
|
||||
|
||||
FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
|
||||
grColorCombine(GR_COMBINE_FUNCTION_LOCAL,
|
||||
GR_COMBINE_FACTOR_NONE,
|
||||
localc, GR_COMBINE_OTHER_NONE, FXFALSE);
|
||||
|
||||
@ -1161,10 +1153,10 @@ fxSetupBlend(GLcontext * ctx)
|
||||
tfxUnitsState *us = &fxMesa->unitsState;
|
||||
|
||||
if (us->blendEnabled)
|
||||
FX_grAlphaBlendFunction(us->blendSrcFuncRGB, us->blendDstFuncRGB,
|
||||
grAlphaBlendFunction(us->blendSrcFuncRGB, us->blendDstFuncRGB,
|
||||
us->blendSrcFuncAlpha, us->blendDstFuncAlpha);
|
||||
else
|
||||
FX_grAlphaBlendFunction(GR_BLEND_ONE, GR_BLEND_ZERO, GR_BLEND_ONE,
|
||||
grAlphaBlendFunction(GR_BLEND_ONE, GR_BLEND_ZERO, GR_BLEND_ONE,
|
||||
GR_BLEND_ZERO);
|
||||
}
|
||||
|
||||
@ -1230,11 +1222,11 @@ fxSetupAlphaTest(GLcontext * ctx)
|
||||
|
||||
if (us->alphaTestEnabled) {
|
||||
GrAlpha_t ref = (GLint) (us->alphaTestRefValue * 255.0);
|
||||
FX_grAlphaTestFunction(us->alphaTestFunc);
|
||||
FX_grAlphaTestReferenceValue(ref);
|
||||
grAlphaTestFunction(us->alphaTestFunc);
|
||||
grAlphaTestReferenceValue(ref);
|
||||
}
|
||||
else
|
||||
FX_grAlphaTestFunction(GR_CMP_ALWAYS);
|
||||
grAlphaTestFunction(GR_CMP_ALWAYS);
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
@ -1306,12 +1298,12 @@ fxSetupDepthTest(GLcontext * ctx)
|
||||
tfxUnitsState *us = &fxMesa->unitsState;
|
||||
|
||||
if (us->depthTestEnabled) {
|
||||
FX_grDepthBufferFunction(us->depthTestFunc);
|
||||
FX_grDepthMask(us->depthMask);
|
||||
grDepthBufferFunction(us->depthTestFunc);
|
||||
grDepthMask(us->depthMask);
|
||||
}
|
||||
else {
|
||||
FX_grDepthBufferFunction(GR_CMP_ALWAYS);
|
||||
FX_grDepthMask(FXFALSE);
|
||||
grDepthBufferFunction(GR_CMP_ALWAYS);
|
||||
grDepthMask(FXFALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1337,10 +1329,10 @@ fxSetupColorMask(GLcontext * ctx)
|
||||
fxMesaContext fxMesa = FX_CONTEXT(ctx);
|
||||
|
||||
if (ctx->Color.DrawBuffer == GL_NONE) {
|
||||
FX_grColorMask(FXFALSE, FXFALSE);
|
||||
grColorMask(FXFALSE, FXFALSE);
|
||||
}
|
||||
else {
|
||||
FX_grColorMask(ctx->Color.ColorMask[RCOMP] ||
|
||||
grColorMask(ctx->Color.ColorMask[RCOMP] ||
|
||||
ctx->Color.ColorMask[GCOMP] ||
|
||||
ctx->Color.ColorMask[BCOMP],
|
||||
ctx->Color.ColorMask[ACOMP] && fxMesa->haveAlphaBuffer);
|
||||
@ -1369,7 +1361,7 @@ fxSetupFog(GLcontext * ctx)
|
||||
col[1] = (unsigned int) (255 * ctx->Fog.Color[1]);
|
||||
col[2] = (unsigned int) (255 * ctx->Fog.Color[2]);
|
||||
col[3] = (unsigned int) (255 * ctx->Fog.Color[3]);
|
||||
FX_grFogColorValue(FXCOLOR4(col));
|
||||
grFogColorValue(FXCOLOR4(col));
|
||||
|
||||
if (fxMesa->fogTableMode != ctx->Fog.Mode ||
|
||||
fxMesa->fogDensity != ctx->Fog.Density ||
|
||||
@ -1396,11 +1388,11 @@ fxSetupFog(GLcontext * ctx)
|
||||
fxMesa->fogEnd = ctx->Fog.End;
|
||||
}
|
||||
|
||||
FX_grFogTable(fxMesa->fogTable);
|
||||
FX_grFogMode(GR_FOG_WITH_TABLE);
|
||||
grFogTable(fxMesa->fogTable);
|
||||
grFogMode(GR_FOG_WITH_TABLE);
|
||||
}
|
||||
else {
|
||||
FX_grFogMode(GR_FOG_DISABLE);
|
||||
grFogMode(GR_FOG_DISABLE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1444,7 +1436,7 @@ fxSetScissorValues(GLcontext * ctx)
|
||||
ymin = fxMesa->screen_height - fxMesa->clipMaxY;
|
||||
if (ymax > fxMesa->screen_height - fxMesa->clipMinY)
|
||||
ymax = fxMesa->screen_height - fxMesa->clipMinY;
|
||||
FX_grClipWindow_NoLock(xmin, ymin, xmax, ymax);
|
||||
grClipWindow(xmin, ymin, xmax, ymax);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1509,7 +1501,7 @@ fxSetupCull(GLcontext * ctx)
|
||||
FX_CONTEXT(ctx)->cullMode = GR_CULL_DISABLE;
|
||||
|
||||
if (FX_CONTEXT(ctx)->raster_primitive == GL_TRIANGLES)
|
||||
FX_grCullMode(FX_CONTEXT(ctx)->cullMode);
|
||||
grCullMode(FX_CONTEXT(ctx)->cullMode);
|
||||
}
|
||||
|
||||
|
||||
@ -1548,10 +1540,10 @@ fxDDEnable(GLcontext * ctx, GLenum cap, GLboolean state)
|
||||
break;
|
||||
case GL_DITHER:
|
||||
if (state) {
|
||||
FX_grDitherMode(GR_DITHER_4x4);
|
||||
grDitherMode(GR_DITHER_4x4);
|
||||
}
|
||||
else {
|
||||
FX_grDitherMode(GR_DITHER_DISABLE);
|
||||
grDitherMode(GR_DITHER_DISABLE);
|
||||
}
|
||||
break;
|
||||
case GL_SCISSOR_TEST:
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: fxtexman.c,v 1.15 2001/09/23 16:50:01 brianp Exp $ */
|
||||
/* $Id: fxtexman.c,v 1.16 2003/08/19 15:52:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@ -29,6 +29,8 @@
|
||||
* Brian Paul
|
||||
* Daryll Strauss
|
||||
* Keith Whitwell
|
||||
* Daniel Borca
|
||||
* Hiroshi Morii
|
||||
*/
|
||||
|
||||
/* fxtexman.c - 3Dfx VooDoo texture memory functions */
|
||||
@ -137,11 +139,11 @@ fxTMUInit(fxMesaContext fxMesa, int tmu)
|
||||
MemRange *tmn, *last;
|
||||
FxU32 start, end, blockstart, blockend;
|
||||
|
||||
start = FX_grTexMinAddress(tmu);
|
||||
end = FX_grTexMaxAddress(tmu);
|
||||
start = grTexMinAddress(tmu);
|
||||
end = grTexMaxAddress(tmu);
|
||||
|
||||
if (fxMesa->verbose) {
|
||||
fprintf(stderr, "Voodoo %s configuration:",
|
||||
fprintf(stderr, "Voodoo %s configuration:\n",
|
||||
(tmu == FX_TMU0) ? "TMU0" : "TMU1");
|
||||
fprintf(stderr, "Voodoo Lower texture memory address (%u)\n",
|
||||
(unsigned int) start);
|
||||
@ -308,7 +310,7 @@ static MemRange *
|
||||
fxTMAddObj(fxMesaContext fxMesa,
|
||||
struct gl_texture_object *tObj, GLint tmu, int texmemsize)
|
||||
{
|
||||
FxU32 startAddr;
|
||||
FxI32 startAddr;
|
||||
MemRange *range;
|
||||
|
||||
startAddr = fxTMFindStartAddr(fxMesa, tmu, texmemsize);
|
||||
@ -363,16 +365,14 @@ fxTMMoveInTM_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj,
|
||||
switch (where) {
|
||||
case FX_TMU0:
|
||||
case FX_TMU1:
|
||||
texmemsize =
|
||||
(int) FX_grTexTextureMemRequired_NoLock(GR_MIPMAPLEVELMASK_BOTH,
|
||||
&(ti->info));
|
||||
texmemsize = (int)grTexTextureMemRequired(GR_MIPMAPLEVELMASK_BOTH, &(ti->info));
|
||||
ti->tm[where] = fxTMAddObj(fxMesa, tObj, where, texmemsize);
|
||||
fxMesa->stats.memTexUpload += texmemsize;
|
||||
|
||||
for (i = FX_largeLodValue(ti->info), l = ti->minLevel;
|
||||
i <= FX_smallLodValue(ti->info); i++, l++) {
|
||||
struct gl_texture_image *texImage = tObj->Image[l];
|
||||
FX_grTexDownloadMipMapLevel_NoLock(where,
|
||||
grTexDownloadMipMapLevel(where,
|
||||
ti->tm[where]->startAddr,
|
||||
FX_valueToLod(i),
|
||||
FX_largeLodLog2(ti->info),
|
||||
@ -383,15 +383,11 @@ fxTMMoveInTM_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj,
|
||||
}
|
||||
break;
|
||||
case FX_TMU_SPLIT:
|
||||
texmemsize =
|
||||
(int) FX_grTexTextureMemRequired_NoLock(GR_MIPMAPLEVELMASK_ODD,
|
||||
&(ti->info));
|
||||
texmemsize = (int)grTexTextureMemRequired(GR_MIPMAPLEVELMASK_ODD, &(ti->info));
|
||||
ti->tm[FX_TMU0] = fxTMAddObj(fxMesa, tObj, FX_TMU0, texmemsize);
|
||||
fxMesa->stats.memTexUpload += texmemsize;
|
||||
|
||||
texmemsize =
|
||||
(int) FX_grTexTextureMemRequired_NoLock(GR_MIPMAPLEVELMASK_EVEN,
|
||||
&(ti->info));
|
||||
texmemsize = (int)grTexTextureMemRequired(GR_MIPMAPLEVELMASK_EVEN, &(ti->info));
|
||||
ti->tm[FX_TMU1] = fxTMAddObj(fxMesa, tObj, FX_TMU1, texmemsize);
|
||||
fxMesa->stats.memTexUpload += texmemsize;
|
||||
|
||||
@ -399,7 +395,7 @@ fxTMMoveInTM_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj,
|
||||
i <= FX_smallLodValue(ti->info); i++, l++) {
|
||||
struct gl_texture_image *texImage = tObj->Image[l];
|
||||
|
||||
FX_grTexDownloadMipMapLevel_NoLock(GR_TMU0,
|
||||
grTexDownloadMipMapLevel(GR_TMU0,
|
||||
ti->tm[FX_TMU0]->startAddr,
|
||||
FX_valueToLod(i),
|
||||
FX_largeLodLog2(ti->info),
|
||||
@ -408,7 +404,7 @@ fxTMMoveInTM_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj,
|
||||
GR_MIPMAPLEVELMASK_ODD,
|
||||
texImage->Data);
|
||||
|
||||
FX_grTexDownloadMipMapLevel_NoLock(GR_TMU1,
|
||||
grTexDownloadMipMapLevel(GR_TMU1,
|
||||
ti->tm[FX_TMU1]->startAddr,
|
||||
FX_valueToLod(i),
|
||||
FX_largeLodLog2(ti->info),
|
||||
@ -419,22 +415,18 @@ fxTMMoveInTM_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj,
|
||||
}
|
||||
break;
|
||||
case FX_TMU_BOTH:
|
||||
texmemsize =
|
||||
(int) FX_grTexTextureMemRequired_NoLock(GR_MIPMAPLEVELMASK_BOTH,
|
||||
&(ti->info));
|
||||
texmemsize = (int)grTexTextureMemRequired(GR_MIPMAPLEVELMASK_BOTH, &(ti->info));
|
||||
ti->tm[FX_TMU0] = fxTMAddObj(fxMesa, tObj, FX_TMU0, texmemsize);
|
||||
fxMesa->stats.memTexUpload += texmemsize;
|
||||
|
||||
texmemsize =
|
||||
(int) FX_grTexTextureMemRequired_NoLock(GR_MIPMAPLEVELMASK_BOTH,
|
||||
&(ti->info));
|
||||
texmemsize = (int)grTexTextureMemRequired(GR_MIPMAPLEVELMASK_BOTH, &(ti->info));
|
||||
ti->tm[FX_TMU1] = fxTMAddObj(fxMesa, tObj, FX_TMU1, texmemsize);
|
||||
fxMesa->stats.memTexUpload += texmemsize;
|
||||
|
||||
for (i = FX_largeLodValue(ti->info), l = ti->minLevel;
|
||||
i <= FX_smallLodValue(ti->info); i++, l++) {
|
||||
struct gl_texture_image *texImage = tObj->Image[l];
|
||||
FX_grTexDownloadMipMapLevel_NoLock(GR_TMU0,
|
||||
grTexDownloadMipMapLevel(GR_TMU0,
|
||||
ti->tm[FX_TMU0]->startAddr,
|
||||
FX_valueToLod(i),
|
||||
FX_largeLodLog2(ti->info),
|
||||
@ -443,7 +435,7 @@ fxTMMoveInTM_NoLock(fxMesaContext fxMesa, struct gl_texture_object *tObj,
|
||||
GR_MIPMAPLEVELMASK_BOTH,
|
||||
texImage->Data);
|
||||
|
||||
FX_grTexDownloadMipMapLevel_NoLock(GR_TMU1,
|
||||
grTexDownloadMipMapLevel(GR_TMU1,
|
||||
ti->tm[FX_TMU1]->startAddr,
|
||||
FX_valueToLod(i),
|
||||
FX_largeLodLog2(ti->info),
|
||||
@ -505,15 +497,11 @@ fxTMReloadMipMapLevel(fxMesaContext fxMesa, struct gl_texture_object *tObj,
|
||||
fxTexGetInfo(mml->width, mml->height,
|
||||
&lodlevel, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
|
||||
#ifdef FX_GLIDE3
|
||||
lodlevel -= level;
|
||||
#else
|
||||
lodlevel += level;
|
||||
#endif
|
||||
switch (tmu) {
|
||||
case FX_TMU0:
|
||||
case FX_TMU1:
|
||||
FX_grTexDownloadMipMapLevel(tmu,
|
||||
grTexDownloadMipMapLevel(tmu,
|
||||
ti->tm[tmu]->startAddr,
|
||||
FX_valueToLod(FX_lodToValue(lodlevel)),
|
||||
FX_largeLodLog2(ti->info),
|
||||
@ -522,7 +510,7 @@ fxTMReloadMipMapLevel(fxMesaContext fxMesa, struct gl_texture_object *tObj,
|
||||
GR_MIPMAPLEVELMASK_BOTH, texImage->Data);
|
||||
break;
|
||||
case FX_TMU_SPLIT:
|
||||
FX_grTexDownloadMipMapLevel(GR_TMU0,
|
||||
grTexDownloadMipMapLevel(GR_TMU0,
|
||||
ti->tm[GR_TMU0]->startAddr,
|
||||
FX_valueToLod(FX_lodToValue(lodlevel)),
|
||||
FX_largeLodLog2(ti->info),
|
||||
@ -530,7 +518,7 @@ fxTMReloadMipMapLevel(fxMesaContext fxMesa, struct gl_texture_object *tObj,
|
||||
ti->info.format,
|
||||
GR_MIPMAPLEVELMASK_ODD, texImage->Data);
|
||||
|
||||
FX_grTexDownloadMipMapLevel(GR_TMU1,
|
||||
grTexDownloadMipMapLevel(GR_TMU1,
|
||||
ti->tm[GR_TMU1]->startAddr,
|
||||
FX_valueToLod(FX_lodToValue(lodlevel)),
|
||||
FX_largeLodLog2(ti->info),
|
||||
@ -539,7 +527,7 @@ fxTMReloadMipMapLevel(fxMesaContext fxMesa, struct gl_texture_object *tObj,
|
||||
GR_MIPMAPLEVELMASK_EVEN, texImage->Data);
|
||||
break;
|
||||
case FX_TMU_BOTH:
|
||||
FX_grTexDownloadMipMapLevel(GR_TMU0,
|
||||
grTexDownloadMipMapLevel(GR_TMU0,
|
||||
ti->tm[GR_TMU0]->startAddr,
|
||||
FX_valueToLod(FX_lodToValue(lodlevel)),
|
||||
FX_largeLodLog2(ti->info),
|
||||
@ -547,7 +535,7 @@ fxTMReloadMipMapLevel(fxMesaContext fxMesa, struct gl_texture_object *tObj,
|
||||
ti->info.format,
|
||||
GR_MIPMAPLEVELMASK_BOTH, texImage->Data);
|
||||
|
||||
FX_grTexDownloadMipMapLevel(GR_TMU1,
|
||||
grTexDownloadMipMapLevel(GR_TMU1,
|
||||
ti->tm[GR_TMU1]->startAddr,
|
||||
FX_valueToLod(FX_lodToValue(lodlevel)),
|
||||
FX_largeLodLog2(ti->info),
|
||||
@ -602,7 +590,7 @@ fxTMReloadSubMipMapLevel(fxMesaContext fxMesa,
|
||||
switch (tmu) {
|
||||
case FX_TMU0:
|
||||
case FX_TMU1:
|
||||
FX_grTexDownloadMipMapLevelPartial(tmu,
|
||||
grTexDownloadMipMapLevelPartial(tmu,
|
||||
ti->tm[tmu]->startAddr,
|
||||
FX_valueToLod(FX_lodToValue(lodlevel)
|
||||
+ level),
|
||||
@ -613,7 +601,7 @@ fxTMReloadSubMipMapLevel(fxMesaContext fxMesa,
|
||||
yoffset, yoffset + height - 1);
|
||||
break;
|
||||
case FX_TMU_SPLIT:
|
||||
FX_grTexDownloadMipMapLevelPartial(GR_TMU0,
|
||||
grTexDownloadMipMapLevelPartial(GR_TMU0,
|
||||
ti->tm[FX_TMU0]->startAddr,
|
||||
FX_valueToLod(FX_lodToValue(lodlevel)
|
||||
+ level),
|
||||
@ -623,7 +611,7 @@ fxTMReloadSubMipMapLevel(fxMesaContext fxMesa,
|
||||
GR_MIPMAPLEVELMASK_ODD, data,
|
||||
yoffset, yoffset + height - 1);
|
||||
|
||||
FX_grTexDownloadMipMapLevelPartial(GR_TMU1,
|
||||
grTexDownloadMipMapLevelPartial(GR_TMU1,
|
||||
ti->tm[FX_TMU1]->startAddr,
|
||||
FX_valueToLod(FX_lodToValue(lodlevel)
|
||||
+ level),
|
||||
@ -634,7 +622,7 @@ fxTMReloadSubMipMapLevel(fxMesaContext fxMesa,
|
||||
yoffset, yoffset + height - 1);
|
||||
break;
|
||||
case FX_TMU_BOTH:
|
||||
FX_grTexDownloadMipMapLevelPartial(GR_TMU0,
|
||||
grTexDownloadMipMapLevelPartial(GR_TMU0,
|
||||
ti->tm[FX_TMU0]->startAddr,
|
||||
FX_valueToLod(FX_lodToValue(lodlevel)
|
||||
+ level),
|
||||
@ -644,7 +632,7 @@ fxTMReloadSubMipMapLevel(fxMesaContext fxMesa,
|
||||
GR_MIPMAPLEVELMASK_BOTH, data,
|
||||
yoffset, yoffset + height - 1);
|
||||
|
||||
FX_grTexDownloadMipMapLevelPartial(GR_TMU1,
|
||||
grTexDownloadMipMapLevelPartial(GR_TMU1,
|
||||
ti->tm[FX_TMU1]->startAddr,
|
||||
FX_valueToLod(FX_lodToValue(lodlevel)
|
||||
+ level),
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: fxwgl.c,v 1.16 2002/10/24 23:57:23 brianp Exp $ */
|
||||
/* $Id: fxwgl.c,v 1.17 2003/08/19 15:52:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@ -43,9 +43,9 @@ extern "C"
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
#include "glheader.h"
|
||||
#include "fxdrv.h"
|
||||
#include "glapi.h"
|
||||
#define GL_GLEXT_PROTOTYPES
|
||||
#include "GL/gl.h"
|
||||
#include "GL/glext.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
@ -53,6 +53,9 @@ extern "C"
|
||||
|
||||
#include <stdio.h>
|
||||
#include "GL/fxmesa.h"
|
||||
#include "glheader.h"
|
||||
#include "fxdrv.h"
|
||||
#include "glapi.h"
|
||||
|
||||
#define MAX_MESA_ATTRS 20
|
||||
|
||||
@ -71,6 +74,7 @@ struct __pixelformat__
|
||||
WINGDIAPI void GLAPIENTRY gl3DfxSetPaletteEXT(GLuint *);
|
||||
|
||||
struct __pixelformat__ pix[] = {
|
||||
#if 0
|
||||
/* None */
|
||||
{
|
||||
{
|
||||
@ -78,8 +82,8 @@ struct __pixelformat__ pix[] = {
|
||||
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
|
||||
PFD_DOUBLEBUFFER | PFD_SWAP_COPY,
|
||||
PFD_TYPE_RGBA,
|
||||
32,
|
||||
8, 0, 8, 8, 8, 16, 0, 24,
|
||||
16,
|
||||
5, 11, 6, 5, 5, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
0,
|
||||
0,
|
||||
@ -88,6 +92,88 @@ struct __pixelformat__ pix[] = {
|
||||
0, 0, 0, 0}
|
||||
,
|
||||
{
|
||||
FXMESA_COLORDEPTH, 16,
|
||||
FXMESA_DOUBLEBUFFER,
|
||||
FXMESA_ALPHA_SIZE, 0,
|
||||
FXMESA_DEPTH_SIZE, 0,
|
||||
FXMESA_STENCIL_SIZE, 0,
|
||||
FXMESA_ACCUM_SIZE, 0,
|
||||
FXMESA_NONE}
|
||||
}
|
||||
,
|
||||
|
||||
/* Alpha */
|
||||
{
|
||||
{
|
||||
sizeof(PIXELFORMATDESCRIPTOR), 1,
|
||||
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
|
||||
PFD_DOUBLEBUFFER | PFD_SWAP_COPY,
|
||||
PFD_TYPE_RGBA,
|
||||
16,
|
||||
5, 10, 5, 5, 5, 0, 1, 15,
|
||||
0, 0, 0, 0, 0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
PFD_MAIN_PLANE,
|
||||
0, 0, 0, 0}
|
||||
,
|
||||
{
|
||||
FXMESA_COLORDEPTH, 15,
|
||||
FXMESA_DOUBLEBUFFER,
|
||||
FXMESA_ALPHA_SIZE, 1,
|
||||
FXMESA_DEPTH_SIZE, 0,
|
||||
FXMESA_STENCIL_SIZE, 0,
|
||||
FXMESA_ACCUM_SIZE, 0,
|
||||
FXMESA_NONE}
|
||||
}
|
||||
,
|
||||
|
||||
/* Depth */
|
||||
{
|
||||
{
|
||||
sizeof(PIXELFORMATDESCRIPTOR), 1,
|
||||
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
|
||||
PFD_DOUBLEBUFFER | PFD_SWAP_COPY,
|
||||
PFD_TYPE_RGBA,
|
||||
16,
|
||||
5, 11, 6, 5, 5, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
16,
|
||||
0,
|
||||
0,
|
||||
PFD_MAIN_PLANE,
|
||||
0, 0, 0, 0}
|
||||
,
|
||||
{
|
||||
FXMESA_COLORDEPTH, 16,
|
||||
FXMESA_DOUBLEBUFFER,
|
||||
FXMESA_ALPHA_SIZE, 0,
|
||||
FXMESA_DEPTH_SIZE, 16,
|
||||
FXMESA_STENCIL_SIZE, 0,
|
||||
FXMESA_ACCUM_SIZE, 0,
|
||||
FXMESA_NONE}
|
||||
}
|
||||
,
|
||||
|
||||
/* None */
|
||||
{
|
||||
{
|
||||
sizeof(PIXELFORMATDESCRIPTOR), 1,
|
||||
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
|
||||
PFD_DOUBLEBUFFER | PFD_SWAP_COPY,
|
||||
PFD_TYPE_RGBA,
|
||||
32,
|
||||
8, 16, 8, 8, 8, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
PFD_MAIN_PLANE,
|
||||
0, 0, 0, 0}
|
||||
,
|
||||
{
|
||||
FXMESA_COLORDEPTH, 32,
|
||||
FXMESA_DOUBLEBUFFER,
|
||||
FXMESA_ALPHA_SIZE, 0,
|
||||
FXMESA_DEPTH_SIZE, 0,
|
||||
@ -105,7 +191,7 @@ struct __pixelformat__ pix[] = {
|
||||
PFD_DOUBLEBUFFER | PFD_SWAP_COPY,
|
||||
PFD_TYPE_RGBA,
|
||||
32,
|
||||
8, 0, 8, 8, 8, 16, 8, 24,
|
||||
8, 16, 8, 8, 8, 0, 8, 24,
|
||||
0, 0, 0, 0, 0,
|
||||
0,
|
||||
0,
|
||||
@ -114,6 +200,7 @@ struct __pixelformat__ pix[] = {
|
||||
0, 0, 0, 0}
|
||||
,
|
||||
{
|
||||
FXMESA_COLORDEPTH, 32,
|
||||
FXMESA_DOUBLEBUFFER,
|
||||
FXMESA_ALPHA_SIZE, 8,
|
||||
FXMESA_DEPTH_SIZE, 0,
|
||||
@ -131,7 +218,7 @@ struct __pixelformat__ pix[] = {
|
||||
PFD_DOUBLEBUFFER | PFD_SWAP_COPY,
|
||||
PFD_TYPE_RGBA,
|
||||
32,
|
||||
8, 0, 8, 8, 8, 16, 0, 24,
|
||||
8, 16, 8, 8, 8, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
16,
|
||||
0,
|
||||
@ -140,6 +227,7 @@ struct __pixelformat__ pix[] = {
|
||||
0, 0, 0, 0}
|
||||
,
|
||||
{
|
||||
FXMESA_COLORDEPTH, 32,
|
||||
FXMESA_DOUBLEBUFFER,
|
||||
FXMESA_ALPHA_SIZE, 0,
|
||||
FXMESA_DEPTH_SIZE, 16,
|
||||
@ -147,6 +235,78 @@ struct __pixelformat__ pix[] = {
|
||||
FXMESA_ACCUM_SIZE, 0,
|
||||
FXMESA_NONE}
|
||||
}
|
||||
#endif
|
||||
/* 16bit RGB565 */
|
||||
{
|
||||
{sizeof(PIXELFORMATDESCRIPTOR), 1,
|
||||
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
|
||||
PFD_DOUBLEBUFFER | PFD_SWAP_COPY,
|
||||
PFD_TYPE_RGBA,
|
||||
16,
|
||||
5, 11, 6, 5, 5, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
16,
|
||||
0,
|
||||
0,
|
||||
PFD_MAIN_PLANE,
|
||||
0, 0, 0, 0}
|
||||
,
|
||||
{FXMESA_COLORDEPTH, 16,
|
||||
FXMESA_DOUBLEBUFFER,
|
||||
FXMESA_ALPHA_SIZE, 0,
|
||||
FXMESA_DEPTH_SIZE, 16,
|
||||
FXMESA_STENCIL_SIZE, 0,
|
||||
FXMESA_ACCUM_SIZE, 0,
|
||||
FXMESA_NONE}
|
||||
}
|
||||
,
|
||||
/* 16bit ARGB1555 */
|
||||
{
|
||||
{sizeof(PIXELFORMATDESCRIPTOR), 1,
|
||||
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
|
||||
PFD_DOUBLEBUFFER | PFD_SWAP_COPY,
|
||||
PFD_TYPE_RGBA,
|
||||
16,
|
||||
5, 10, 5, 5, 5, 0, 1, 15,
|
||||
0, 0, 0, 0, 0,
|
||||
16,
|
||||
0,
|
||||
0,
|
||||
PFD_MAIN_PLANE,
|
||||
0, 0, 0, 0}
|
||||
,
|
||||
{FXMESA_COLORDEPTH, 15,
|
||||
FXMESA_DOUBLEBUFFER,
|
||||
FXMESA_ALPHA_SIZE, 1,
|
||||
FXMESA_DEPTH_SIZE, 16,
|
||||
FXMESA_STENCIL_SIZE, 0,
|
||||
FXMESA_ACCUM_SIZE, 0,
|
||||
FXMESA_NONE}
|
||||
}
|
||||
,
|
||||
/* 32bit ARGB8888 */
|
||||
{
|
||||
{sizeof(PIXELFORMATDESCRIPTOR), 1,
|
||||
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
|
||||
PFD_DOUBLEBUFFER | PFD_SWAP_COPY,
|
||||
PFD_TYPE_RGBA,
|
||||
32,
|
||||
8, 16, 8, 8, 8, 0, 8, 24,
|
||||
0, 0, 0, 0, 0,
|
||||
24,
|
||||
0,
|
||||
0,
|
||||
PFD_MAIN_PLANE,
|
||||
0, 0, 0, 0}
|
||||
,
|
||||
{FXMESA_COLORDEPTH, 32,
|
||||
FXMESA_DOUBLEBUFFER,
|
||||
FXMESA_ALPHA_SIZE, 8,
|
||||
FXMESA_DEPTH_SIZE, 24,
|
||||
FXMESA_STENCIL_SIZE, 0,
|
||||
FXMESA_ACCUM_SIZE, 0,
|
||||
FXMESA_NONE}
|
||||
}
|
||||
};
|
||||
static int qt_pix = sizeof(pix) / sizeof(pix[0]);
|
||||
|
||||
@ -160,8 +320,12 @@ static GLboolean haveDualHead;
|
||||
|
||||
/* For the in-window-rendering hack */
|
||||
|
||||
#ifndef GR_CONTROL_RESIZE
|
||||
/* Apparently GR_CONTROL_RESIZE can be ignored. OK? */
|
||||
#define GR_CONTROL_RESIZE -1
|
||||
#endif
|
||||
|
||||
static GLboolean gdiWindowHack;
|
||||
static GLboolean gdiWindowHackEna;
|
||||
static void *dibSurfacePtr;
|
||||
static BITMAPINFO *dibBMI;
|
||||
static HBITMAP dibHBM;
|
||||
@ -173,64 +337,39 @@ __wglMonitor(HWND hwnd, UINT message, UINT wParam, LONG lParam)
|
||||
long ret; /* Now gives the resized window at the end to hWNDOldProc */
|
||||
|
||||
if (ctx && hwnd == hWND) {
|
||||
switch (message) {
|
||||
case WM_PAINT:
|
||||
case WM_MOVE:
|
||||
break;
|
||||
case WM_DISPLAYCHANGE:
|
||||
case WM_SIZE:
|
||||
if (wParam != SIZE_MINIMIZED) {
|
||||
static int moving = 0;
|
||||
if (!moving) {
|
||||
if (fxQueryHardware() != GR_SSTTYPE_VOODOO) {
|
||||
if (!FX_grSstControl(GR_CONTROL_RESIZE)) {
|
||||
moving = 1;
|
||||
SetWindowPos(hwnd, 0, 0, 0, 300, 300,
|
||||
SWP_NOMOVE | SWP_NOZORDER);
|
||||
moving = 0;
|
||||
if (!FX_grSstControl(GR_CONTROL_RESIZE)) {
|
||||
/*MessageBox(0,_T("Error changing windowsize"),_T("fxMESA"),MB_OK); */
|
||||
PostMessage(hWND, WM_CLOSE, 0, 0);
|
||||
switch (message) {
|
||||
case WM_PAINT:
|
||||
case WM_MOVE:
|
||||
break;
|
||||
case WM_DISPLAYCHANGE:
|
||||
case WM_SIZE:
|
||||
if (wParam != SIZE_MINIMIZED) {
|
||||
static int moving = 0;
|
||||
if (!moving) {
|
||||
if (!FX_grSstControl(GR_CONTROL_RESIZE)) {
|
||||
moving = 1;
|
||||
SetWindowPos(hwnd, 0, 0, 0, 300, 300, SWP_NOMOVE | SWP_NOZORDER);
|
||||
moving = 0;
|
||||
if (!FX_grSstControl(GR_CONTROL_RESIZE)) {
|
||||
/*MessageBox(0,_T("Error changing windowsize"),_T("fxMESA"),MB_OK); */
|
||||
PostMessage(hWND, WM_CLOSE, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/* Do the clipping in the glide library */
|
||||
FX_grClipWindow(0, 0, FX_grSstScreenWidth(),
|
||||
FX_grSstScreenHeight());
|
||||
/* And let the new size set in the context */
|
||||
fxMesaUpdateScreenSize(ctx);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_ACTIVATE:
|
||||
if ((fxQueryHardware() == GR_SSTTYPE_VOODOO) &&
|
||||
(!gdiWindowHack) && (!haveDualHead)) {
|
||||
WORD fActive = LOWORD(wParam);
|
||||
BOOL fMinimized = (BOOL) HIWORD(wParam);
|
||||
|
||||
if ((fActive == WA_INACTIVE) || fMinimized)
|
||||
FX_grSstControl(GR_CONTROL_DEACTIVATE);
|
||||
else
|
||||
FX_grSstControl(GR_CONTROL_ACTIVATE);
|
||||
}
|
||||
break;
|
||||
case WM_SHOWWINDOW:
|
||||
break;
|
||||
case WM_SYSKEYDOWN:
|
||||
case WM_SYSCHAR:
|
||||
if (gdiWindowHackEna && (VK_RETURN == wParam)) {
|
||||
if (gdiWindowHack) {
|
||||
gdiWindowHack = GL_FALSE;
|
||||
FX_grSstControl(GR_CONTROL_ACTIVATE);
|
||||
}
|
||||
else {
|
||||
gdiWindowHack = GL_TRUE;
|
||||
FX_grSstControl(GR_CONTROL_DEACTIVATE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
grClipWindow(0, 0, FX_grSstScreenWidth(), FX_grSstScreenHeight());
|
||||
/* And let the new size set in the context */
|
||||
fxMesaUpdateScreenSize(ctx);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_ACTIVATE:
|
||||
break;
|
||||
case WM_SHOWWINDOW:
|
||||
break;
|
||||
case WM_SYSKEYDOWN:
|
||||
case WM_SYSCHAR:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Finaly call the hWNDOldProc, which handles the resize witch the
|
||||
@ -277,85 +416,13 @@ wglCreateContext(HDC hdc)
|
||||
freopen("MESA.LOG", "w", stderr);
|
||||
#endif
|
||||
|
||||
ShowWindow(hWnd, SW_SHOWNORMAL);
|
||||
SetForegroundWindow(hWnd);
|
||||
Sleep(100); /* an hack for win95 */
|
||||
|
||||
if (fxQueryHardware() == GR_SSTTYPE_VOODOO) {
|
||||
RECT cliRect;
|
||||
|
||||
GetClientRect(hWnd, &cliRect);
|
||||
error = !(ctx =
|
||||
fxMesaCreateBestContext((GLuint) hWnd, cliRect.right,
|
||||
cliRect.bottom,
|
||||
pix[curPFD - 1].mesaAttr));
|
||||
|
||||
if (!error) {
|
||||
/* create the DIB section for windowed rendering */
|
||||
DWORD *p;
|
||||
|
||||
dibWnd = hWnd;
|
||||
|
||||
hDC = GetDC(dibWnd);
|
||||
|
||||
dibBMI =
|
||||
(BITMAPINFO *) MALLOC(sizeof(BITMAPINFO) +
|
||||
(256 * sizeof(RGBQUAD)));
|
||||
|
||||
memset(dibBMI, 0, sizeof(BITMAPINFO) + (256 * sizeof(RGBQUAD)));
|
||||
|
||||
dibBMI->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||
dibBMI->bmiHeader.biWidth = ctx->width;
|
||||
dibBMI->bmiHeader.biHeight = -ctx->height;
|
||||
dibBMI->bmiHeader.biPlanes = (short) 1;
|
||||
dibBMI->bmiHeader.biBitCount = (short) 16;
|
||||
dibBMI->bmiHeader.biCompression = BI_BITFIELDS;
|
||||
dibBMI->bmiHeader.biSizeImage = 0;
|
||||
dibBMI->bmiHeader.biXPelsPerMeter = 0;
|
||||
dibBMI->bmiHeader.biYPelsPerMeter = 0;
|
||||
dibBMI->bmiHeader.biClrUsed = 3;
|
||||
dibBMI->bmiHeader.biClrImportant = 3;
|
||||
|
||||
p = (DWORD *) dibBMI->bmiColors;
|
||||
p[0] = 0xF800;
|
||||
p[1] = 0x07E0;
|
||||
p[2] = 0x001F;
|
||||
|
||||
dibHBM =
|
||||
CreateDIBSection(hDC, dibBMI, DIB_RGB_COLORS, &dibSurfacePtr,
|
||||
NULL, 0);
|
||||
|
||||
ReleaseDC(dibWnd, hDC);
|
||||
|
||||
gdiWindowHackEna = (dibHBM != NULL ? GL_TRUE : GL_FALSE);
|
||||
|
||||
if (!getenv("MESA_WGL_FX")
|
||||
|| !strcmp(getenv("MESA_WGL_FX"), "fullscreen"))
|
||||
gdiWindowHack = GL_FALSE;
|
||||
else {
|
||||
gdiWindowHack = GL_TRUE;
|
||||
FX_grSstControl(GR_CONTROL_DEACTIVATE);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* For the Voodoo Rush */
|
||||
|
||||
if (getenv("MESA_WGL_FX")
|
||||
&& !strcmp(getenv("MESA_WGL_FX"), "fullscreen")) {
|
||||
RECT cliRect;
|
||||
|
||||
GetClientRect(hWnd, &cliRect);
|
||||
error = !(ctx =
|
||||
fxMesaCreateBestContext((GLuint) hWnd, cliRect.right,
|
||||
cliRect.bottom,
|
||||
pix[curPFD - 1].mesaAttr));
|
||||
}
|
||||
else
|
||||
error = !(ctx =
|
||||
fxMesaCreateContext((GLuint) hWnd, GR_RESOLUTION_NONE,
|
||||
GR_REFRESH_75Hz,
|
||||
pix[curPFD - 1].mesaAttr));
|
||||
{
|
||||
RECT cliRect;
|
||||
ShowWindow(hWnd, SW_SHOWNORMAL);
|
||||
SetForegroundWindow(hWnd);
|
||||
Sleep(100); /* a hack for win95 */
|
||||
GetClientRect(hWnd, &cliRect);
|
||||
error = !(ctx = fxMesaCreateBestContext((GLuint) hWnd, cliRect.right, cliRect.bottom, pix[curPFD - 1].mesaAttr));
|
||||
}
|
||||
|
||||
if (getenv("SST_DUALHEAD"))
|
||||
@ -389,15 +456,6 @@ BOOL GLAPIENTRY
|
||||
wglDeleteContext(HGLRC hglrc)
|
||||
{
|
||||
if (ctx && hglrc == (HGLRC) 1) {
|
||||
if (gdiWindowHackEna) {
|
||||
DeleteObject(dibHBM);
|
||||
FREE(dibBMI);
|
||||
|
||||
dibSurfacePtr = NULL;
|
||||
dibBMI = NULL;
|
||||
dibHBM = NULL;
|
||||
dibWnd = NULL;
|
||||
}
|
||||
|
||||
fxMesaDestroyContext(ctx);
|
||||
|
||||
@ -505,7 +563,7 @@ wglUseFontBitmaps(HDC fontDevice, DWORD firstChar, DWORD numChars,
|
||||
// Place chars based on base line
|
||||
VERIFY(SetTextAlign(bitDevice, TA_BASELINE) >= 0 ? 1 : 0);
|
||||
|
||||
for (i = 0; i < numChars; i++) {
|
||||
for (i = 0; i < (int)numChars; i++) {
|
||||
SIZE size;
|
||||
char curChar;
|
||||
int charWidth, charHeight, bmapWidth, bmapHeight, numBytes, res;
|
||||
@ -513,7 +571,7 @@ wglUseFontBitmaps(HDC fontDevice, DWORD firstChar, DWORD numChars,
|
||||
HGDIOBJ origBmap;
|
||||
unsigned char *bmap;
|
||||
|
||||
curChar = i + firstChar;
|
||||
curChar = (char)(i + firstChar); // [koolsmoky] explicit cast
|
||||
|
||||
// Find how high/wide this character is
|
||||
VERIFY(GetTextExtentPoint32(bitDevice, &curChar, 1, &size));
|
||||
@ -624,6 +682,9 @@ wglChoosePixelFormat(HDC hdc, CONST PIXELFORMATDESCRIPTOR * ppfd)
|
||||
}
|
||||
|
||||
for (i = 0; i < qt_valid_pix; i++) {
|
||||
if (ppfd->cColorBits > 0 && pix[i].pfd.cColorBits != ppfd->cColorBits)
|
||||
continue;
|
||||
|
||||
if ((ppfd->dwFlags & PFD_DRAW_TO_WINDOW)
|
||||
&& !(pix[i].pfd.dwFlags & PFD_DRAW_TO_WINDOW)) continue;
|
||||
if ((ppfd->dwFlags & PFD_DRAW_TO_BITMAP)
|
||||
@ -737,53 +798,6 @@ wglSwapBuffers(HDC hdc)
|
||||
|
||||
fxMesaSwapBuffers();
|
||||
|
||||
if (gdiWindowHack) {
|
||||
GLuint width = ctx->width;
|
||||
GLuint height = ctx->height;
|
||||
|
||||
HDC hdcScreen = GetDC(dibWnd);
|
||||
HDC hdcDIBSection = CreateCompatibleDC(hdcScreen);
|
||||
HBITMAP holdBitmap = (HBITMAP) SelectObject(hdcDIBSection, dibHBM);
|
||||
|
||||
FX_grLfbReadRegion(GR_BUFFER_FRONTBUFFER, 0, 0,
|
||||
width, height, width * 2, dibSurfacePtr);
|
||||
|
||||
/* Since the hardware is configured for GR_COLORFORMAT_ABGR the pixel data is
|
||||
* going to come out as BGR 565, which is reverse of what we need for blitting
|
||||
* to screen, so we need to convert it here pixel-by-pixel (ick). This loop would NOT
|
||||
* be required if the color format was changed to GR_COLORFORMAT_ARGB, but I do
|
||||
* not know the ramifications of that, so this will work until that is resolved.
|
||||
*
|
||||
* This routine CRIES out for MMX implementation, however since that's not
|
||||
* guaranteed to be running on MMX enabled hardware so I'm not going to do
|
||||
* that. I'm just going to try to make a reasonably efficient C
|
||||
* version. -TAJ
|
||||
*
|
||||
* This routine drops frame rate by <1 fps on a 200Mhz MMX processor with a 640x480
|
||||
* display. Obviously, it's performance hit will be higher on larger displays and
|
||||
* less on smaller displays. To support the window-hack display this is probably fine.
|
||||
*/
|
||||
#if FXMESA_USE_ARGB
|
||||
{
|
||||
unsigned long *pixel = dibSurfacePtr;
|
||||
unsigned long count = (width * height) / 2;
|
||||
|
||||
while (count--) {
|
||||
*pixel++ = (*pixel & 0x07e007e0) /* greens */
|
||||
|((*pixel & 0xf800f800) >> 11) /* swap blues */
|
||||
|((*pixel & 0x001f001f) << 11) /* swap reds */
|
||||
;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
BitBlt(hdcScreen, 0, 0, width, height, hdcDIBSection, 0, 0, SRCCOPY);
|
||||
|
||||
ReleaseDC(dibWnd, hdcScreen);
|
||||
SelectObject(hdcDIBSection, holdBitmap);
|
||||
DeleteDC(hdcDIBSection);
|
||||
}
|
||||
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user