mirror of
https://git.code.sf.net/p/quake/newtree
synced 2025-03-13 03:33:28 +00:00
Use QFGL on 3Dfx.
This commit is contained in:
parent
a356859bb2
commit
ebc281c279
1 changed files with 35 additions and 65 deletions
|
@ -41,17 +41,6 @@
|
||||||
#include <glide/sst1vid.h>
|
#include <glide/sst1vid.h>
|
||||||
#include <sys/signal.h>
|
#include <sys/signal.h>
|
||||||
|
|
||||||
#ifdef HAVE_DLFCN_H
|
|
||||||
# include <dlfcn.h>
|
|
||||||
#endif
|
|
||||||
#ifndef RTLD_LAZY
|
|
||||||
# ifdef DL_LAZY
|
|
||||||
# define RTLD_LAZY DL_LAZY
|
|
||||||
# else
|
|
||||||
# define RTLD_LAZY 0
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "console.h"
|
#include "console.h"
|
||||||
#include "glquake.h"
|
#include "glquake.h"
|
||||||
#include "qargs.h"
|
#include "qargs.h"
|
||||||
|
@ -65,14 +54,15 @@
|
||||||
#define WARP_WIDTH 320
|
#define WARP_WIDTH 320
|
||||||
#define WARP_HEIGHT 200
|
#define WARP_HEIGHT 200
|
||||||
|
|
||||||
static fxMesaContext fc = NULL;
|
// FIXME!!!!! This belongs in include/qfgl_ext.h -- deek
|
||||||
|
typedef void (GLAPIENTRY *QF_3DfxSetDitherModeEXT) (GrDitherMode_t mode);
|
||||||
|
|
||||||
static void *dlhand;
|
static fxMesaContext fc = NULL;
|
||||||
|
|
||||||
int VID_options_items = 0;
|
int VID_options_items = 0;
|
||||||
|
|
||||||
extern void GL_Init_Common(void);
|
extern void GL_Init_Common (void);
|
||||||
extern void VID_Init8bitPalette(void);
|
extern void VID_Init8bitPalette (void);
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -95,7 +85,7 @@ signal_handler(int sig)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
InitSig(void)
|
InitSig (void)
|
||||||
{
|
{
|
||||||
signal(SIGHUP, signal_handler);
|
signal(SIGHUP, signal_handler);
|
||||||
signal(SIGINT, signal_handler);
|
signal(SIGINT, signal_handler);
|
||||||
|
@ -109,8 +99,6 @@ InitSig(void)
|
||||||
signal(SIGTERM, signal_handler);
|
signal(SIGTERM, signal_handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef void (GLAPIENTRY *gl3DfxSetDitherModeEXT_FUNC) (GrDitherMode_t mode);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===============
|
===============
|
||||||
GL_Init
|
GL_Init
|
||||||
|
@ -123,17 +111,10 @@ GL_Init (void)
|
||||||
|
|
||||||
Con_Printf ("Dithering: ");
|
Con_Printf ("Dithering: ");
|
||||||
|
|
||||||
dlhand = dlopen (NULL, RTLD_LAZY);
|
if (QFGL_ExtensionPresent ("3DFX_set_dither_mode")) {
|
||||||
|
QF_gl3DfxSetDitherModeEXT dither_select = NULL;
|
||||||
|
|
||||||
if (dlhand == NULL) {
|
dither_select = QFGL_ExtensionAddress ("gl3DfxSetDitherModeEXT");
|
||||||
Con_Printf ("unable to set.\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strstr(gl_extensions, "3DFX_set_dither_mode")) {
|
|
||||||
gl3DfxSetDitherModeEXT_FUNC dither_select = NULL;
|
|
||||||
|
|
||||||
dither_select = (void *) dlsym(dlhand, "gl3DfxSetDitherModeEXT");
|
|
||||||
|
|
||||||
if (COM_CheckParm ("-dither_2x2")) {
|
if (COM_CheckParm ("-dither_2x2")) {
|
||||||
dither_select(GR_DITHER_2x2);
|
dither_select(GR_DITHER_2x2);
|
||||||
|
@ -146,19 +127,17 @@ GL_Init (void)
|
||||||
Con_Printf ("disabled.\n");
|
Con_Printf ("disabled.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dlclose(dlhand);
|
|
||||||
dlhand = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
GL_EndRendering (void)
|
GL_EndRendering (void)
|
||||||
{
|
{
|
||||||
glFlush();
|
glFlush ();
|
||||||
fxMesaSwapBuffers();
|
fxMesaSwapBuffers ();
|
||||||
Sbar_Changed ();
|
Sbar_Changed ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int resolutions[][3]={
|
static int resolutions[][3] = {
|
||||||
{ 320, 200, GR_RESOLUTION_320x200 },
|
{ 320, 200, GR_RESOLUTION_320x200 },
|
||||||
{ 320, 240, GR_RESOLUTION_320x240 },
|
{ 320, 240, GR_RESOLUTION_320x240 },
|
||||||
{ 400, 256, GR_RESOLUTION_400x256 },
|
{ 400, 256, GR_RESOLUTION_400x256 },
|
||||||
|
@ -211,7 +190,7 @@ static int resolutions[][3]={
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
findres(int *width, int *height)
|
findres (int *width, int *height)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -229,12 +208,8 @@ findres(int *width, int *height)
|
||||||
return GR_RESOLUTION_640x480;
|
return GR_RESOLUTION_640x480;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef void (GLAPIENTRY *glColorTableEXT_FUNC) (GLenum, GLenum, GLsizei,
|
|
||||||
GLenum, GLenum, const GLvoid *);
|
|
||||||
typedef void (GLAPIENTRY *gl3DfxSetPaletteEXT_FUNC) (GLuint *pal);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
VID_Init(unsigned char *palette)
|
VID_Init (unsigned char *palette)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
GLint attribs[32];
|
GLint attribs[32];
|
||||||
|
@ -244,11 +219,11 @@ VID_Init(unsigned char *palette)
|
||||||
vid.maxwarpwidth = WARP_WIDTH;
|
vid.maxwarpwidth = WARP_WIDTH;
|
||||||
vid.maxwarpheight = WARP_HEIGHT;
|
vid.maxwarpheight = WARP_HEIGHT;
|
||||||
vid.colormap = host_colormap;
|
vid.colormap = host_colormap;
|
||||||
vid.fullbright = 256 - LittleLong (*((int *)vid.colormap + 2048));
|
vid.fullbright = 256 - LittleLong (*((int *) vid.colormap + 2048));
|
||||||
|
|
||||||
// interpret command-line params
|
// interpret command-line params
|
||||||
|
|
||||||
// set vid parameters
|
// set vid parameters
|
||||||
attribs[0] = FXMESA_DOUBLEBUFFER;
|
attribs[0] = FXMESA_DOUBLEBUFFER;
|
||||||
attribs[1] = FXMESA_ALPHA_SIZE;
|
attribs[1] = FXMESA_ALPHA_SIZE;
|
||||||
attribs[2] = 1;
|
attribs[2] = 1;
|
||||||
|
@ -256,49 +231,44 @@ VID_Init(unsigned char *palette)
|
||||||
attribs[4] = 1;
|
attribs[4] = 1;
|
||||||
attribs[5] = FXMESA_NONE;
|
attribs[5] = FXMESA_NONE;
|
||||||
|
|
||||||
if ((i = COM_CheckParm("-conwidth")) != 0)
|
if ((i = COM_CheckParm ("-conwidth")))
|
||||||
vid.conwidth = atoi(com_argv[i+1]);
|
vid.conwidth = atoi(com_argv[i+1]);
|
||||||
else
|
else
|
||||||
vid.conwidth = 640;
|
vid.conwidth = 640;
|
||||||
|
|
||||||
vid.conwidth &= 0xfff8; // make it a multiple of eight
|
vid.conwidth &= 0xfff8; // make it a multiple of eight
|
||||||
|
|
||||||
if (vid.conwidth < 320)
|
vid.conwidth = max (vid.conwidth, 320);
|
||||||
vid.conwidth = 320;
|
|
||||||
|
|
||||||
// pick a conheight that matches with correct aspect
|
// pick a conheight that matches with correct aspect
|
||||||
vid.conheight = vid.conwidth*3 / 4;
|
vid.conheight = vid.conwidth * 3 / 4;
|
||||||
|
|
||||||
if ((i = COM_CheckParm("-conheight")) != 0)
|
if ((i = COM_CheckParm("-conheight")) != 0)
|
||||||
vid.conheight = atoi(com_argv[i+1]);
|
vid.conheight = atoi(com_argv[i+1]);
|
||||||
if (vid.conheight < 200)
|
|
||||||
vid.conheight = 200;
|
|
||||||
|
|
||||||
fc = fxMesaCreateContext(0, findres(&scr_width, &scr_height),
|
vid.conheight = max (vid.conheight, 200);
|
||||||
|
|
||||||
|
fc = fxMesaCreateContext (0, findres (&scr_width, &scr_height),
|
||||||
GR_REFRESH_75Hz, attribs);
|
GR_REFRESH_75Hz, attribs);
|
||||||
if (!fc)
|
if (!fc)
|
||||||
Sys_Error("Unable to create 3DFX context.\n");
|
Sys_Error ("Unable to create 3DFX context.\n");
|
||||||
|
|
||||||
fxMesaMakeCurrent(fc);
|
fxMesaMakeCurrent (fc);
|
||||||
|
|
||||||
if (vid.conheight > scr_height)
|
vid.width = vid.conwidth = min (vid.conwidth, scr_width);
|
||||||
vid.conheight = scr_height;
|
vid.height = vid.conheight = min (vid.conheight, scr_height);
|
||||||
if (vid.conwidth > scr_width)
|
|
||||||
vid.conwidth = scr_width;
|
|
||||||
vid.width = vid.conwidth;
|
|
||||||
vid.height = vid.conheight;
|
|
||||||
|
|
||||||
vid.aspect = ((float)vid.height / (float)vid.width) * (320.0 / 240.0);
|
vid.aspect = ((float) vid.height / (float) vid.width) * (320.0 / 240.0);
|
||||||
vid.numpages = 2;
|
vid.numpages = 2;
|
||||||
|
|
||||||
InitSig(); // trap evil signals
|
InitSig (); // trap evil signals
|
||||||
|
|
||||||
GL_Init();
|
GL_Init ();
|
||||||
|
|
||||||
VID_SetPalette(palette);
|
VID_SetPalette (palette);
|
||||||
|
|
||||||
// Check for 3DFX Extensions and initialize them.
|
// Check for 3DFX Extensions and initialize them.
|
||||||
VID_Init8bitPalette();
|
VID_Init8bitPalette ();
|
||||||
|
|
||||||
Con_Printf ("Video mode %dx%d initialized.\n", scr_width, scr_height);
|
Con_Printf ("Video mode %dx%d initialized.\n", scr_width, scr_height);
|
||||||
|
|
||||||
|
@ -306,18 +276,18 @@ VID_Init(unsigned char *palette)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
VID_Init_Cvars()
|
VID_Init_Cvars (void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
VID_ExtraOptionDraw(unsigned int options_draw_cursor)
|
VID_ExtraOptionDraw (unsigned int options_draw_cursor)
|
||||||
{
|
{
|
||||||
/* Port specific Options menu entrys */
|
/* Port specific Options menu entrys */
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
VID_ExtraOptionCmd(int option_cursor)
|
VID_ExtraOptionCmd (int option_cursor)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
switch(option_cursor)
|
switch(option_cursor)
|
||||||
|
|
Loading…
Reference in a new issue