getting closer to building the vid libs.

in_common.c is the main input interface. in_x11 has been modified suitably
This commit is contained in:
Bill Currie 2001-04-15 07:18:04 +00:00
parent a4db2f0e5b
commit 7e67fd56f3
16 changed files with 462 additions and 207 deletions

View file

@ -36,7 +36,7 @@ struct {
vec3_t position;
} viewdelta;
#define freelook (in_mlook.state&1 || cl_freelook->int_val)
#define freelook (in_mlook.state&1 || in_freelook->int_val)
void IN_Init (void);
void IN_Init_Cvars (void);
@ -59,4 +59,14 @@ void IN_HandlePause (qboolean paused);
extern cvar_t *_windowed_mouse;
extern qboolean in_mouse_avail;
extern float in_mouse_x, in_mouse_y;
void IN_LL_Init_Cvars ();
void IN_LL_Init ();
void IN_LL_Shutdown ();
void IN_LL_Commands ();
void IN_LL_SendKeyEvents ();
#endif // _INPUT_H

View file

@ -160,6 +160,13 @@ typedef enum {
K_MWHEELDOWN
} keynum_t;
typedef struct
{
int down[2]; // key nums holding it down
int state; // low bit is down state
} kbutton_t;
// key_none should, preferably, be last
typedef enum {key_game, key_console, key_message, key_menu, key_none} keydest_t;
@ -179,4 +186,7 @@ void Key_WriteBindings (QFile *f);
void Key_SetBinding (int keynum, char *binding);
void Key_ClearStates (void);
float Key_KeyState (kbutton_t *key);
char *Key_KeynumToString (int keynum);
#endif // _KEYS_H

View file

@ -99,6 +99,7 @@ void VID_Update (vrect_t *rects);
// called only on Win32, when pause happens, so the mouse can be released
void VID_HandlePause (qboolean pause);
void VID_InitBuffers (void);
void VID_LockBuffer (void);
void VID_UnlockBuffer (void);

View file

@ -39,12 +39,10 @@
#include <GL/gl.h>
#include "client.h"
#include "QF/cvar.h"
#include "QF/model.h"
#include "render.h"
#include "QF/qfgl_ext.h"
#include "wad.h"
#include "QF/wad.h"
void GL_BeginRendering (int *x, int *y, int *width, int *height);
void GL_EndRendering (void);
@ -106,7 +104,7 @@ typedef struct surfcache_s {
byte data[4]; // width*height elements
} surfcache_t;
#if 0
//====================================================
@ -135,7 +133,7 @@ extern refdef_t r_refdef;
extern mleaf_t *r_viewleaf, *r_oldviewleaf;
extern texture_t *r_notexture_mip;
extern int d_lightstylevalue[256]; // 8.8 fraction of base light value
#endif
extern qboolean envmap;
extern int currenttexture;
extern int cnttextures[2];

View file

@ -5,3 +5,5 @@
.vimrc
Makefile
Makefile.in
fbset_modes_y.[ch]
fbset_modes_l.c

View file

@ -20,7 +20,7 @@ libQFjs_la_CFLAGS= $(JOY_CFLAGS)
YFLAGS = -d
libQFfbdev_la_LDFLAGS= -version-info 1:0:0
libQFfbdev_la_SOURCES= fbset.c fbset_modes_y.y fbset_modes_l.l \
in_fbdev.c vid.c vid_fbdev.c
in_common.c in_fbdev.c vid.c vid_fbdev.c
YACCLEX_CLEANFILES= fbset_modes_y.c fbset_modes_y.h \
fbset_modes_y.tab.h fbset_modes_l.c
EXTRA_libQFfbdev_la_SOURCES=fbset_modes_y.h
@ -31,31 +31,31 @@ fbset_modes_l.lo: $(srcdir)/fbset_modes_l.c
$(COMPILE) -Wno-error -c $<
libQFmgl_la_LDFLAGS= -version-info 1:0:0
libQFmgl_la_SOURCES= in_win.c vid.c vid_common_sw.c vid_mgl.c
libQFmgl_la_SOURCES= in_common.c in_win.c vid.c vid_common_sw.c vid_mgl.c
libQFsdl_la_LDFLAGS= -version-info 1:0:0
libQFsdl_la_SOURCES= in_sdl.c vid.c vid_common_sw.c vid_sdl.c
libQFsdl_la_SOURCES= in_common.c in_sdl.c vid.c vid_common_sw.c vid_sdl.c
libQFsvga_la_LDFLAGS= -version-info 1:0:0
libQFsvga_la_SOURCES= d_copy.S in_svgalib.c vid.c vid_common_sw.c \
libQFsvga_la_SOURCES= d_copy.S in_common.c in_svgalib.c vid.c vid_common_sw.c \
vid_svgalib.c
libQFx11_la_LDFLAGS= -version-info 1:0:0
libQFx11_la_SOURCES= in_x11.c vid.c context_x11.c dga_check.c \
libQFx11_la_SOURCES= in_common.c in_x11.c vid.c context_x11.c dga_check.c \
vid_common_sw.c vid_x11.c
libQFglx_la_LDFLAGS= -version-info 1:0:0
libQFglx_la_SOURCES= in_x11.c vid.c context_x11.c dga_check.c \
libQFglx_la_SOURCES= in_common.c in_x11.c vid.c context_x11.c dga_check.c \
vid_common_gl.c vid_glx.c
libQFsgl_la_LDFLAGS= -version-info 1:0:0
libQFsgl_la_SOURCES= in_sdl.c vid.c vid_common_gl.c vid_sgl.c
libQFsgl_la_SOURCES= in_common.c in_sdl.c vid.c vid_common_gl.c vid_sgl.c
libQFtdfx_la_LDFLAGS= -version-info 1:0:0
libQFtdfx_la_SOURCES= in_svgalib.c vid.c vid_common_gl.c vid_3dfxsvga.c
libQFtdfx_la_SOURCES= in_common.c in_svgalib.c vid.c vid_common_gl.c vid_3dfxsvga.c
libQFwgl_la_LDFLAGS= -version-info 1:0:0
libQFwgl_la_SOURCES= in_win.c vid.c vid_wgl.c
libQFwgl_la_SOURCES= in_common.c in_win.c vid.c vid_wgl.c
LIBLIST = $(lib_LTLIBRARIES) @LIBRARY_SEARCH_PATH@

176
libs/video/targets/d_copy.S Normal file
View file

@ -0,0 +1,176 @@
/*
d_copy.S
x86 assembly-language screen copying code.
Copyright (C) 1996-1997 Id Software, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA
$Id$
*/
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include "QF/asm_i386.h"
#include "quakeasm.h"
#include "asm_draw.h"
#ifdef USE_INTEL_ASM
.data
LCopyWidth: .long 0
LBlockSrcStep: .long 0
LBlockDestStep: .long 0
LSrcDelta: .long 0
LDestDelta: .long 0
#define bufptr 4+16
// copies 16 rows per plane at a pop; idea is that 16*512 = 8k, and since
// no Mode X mode is wider than 360, all the data should fit in the cache for
// the passes for the next 3 planes
.text
.globl C(VGA_UpdatePlanarScreen)
C(VGA_UpdatePlanarScreen):
pushl %ebp // preserve caller's stack frame
pushl %edi
pushl %esi // preserve register variables
pushl %ebx
movl C(VGA_bufferrowbytes),%eax
shll $1,%eax
movl %eax,LBlockSrcStep
movl C(VGA_rowbytes),%eax
shll $1,%eax
movl %eax,LBlockDestStep
movl $0x3C4,%edx
movb $2,%al
outb %al,%dx // point the SC to the Map Mask
incl %edx
movl bufptr(%esp),%esi
movl C(VGA_pagebase),%edi
movl C(VGA_height),%ebp
shrl $1,%ebp
movl C(VGA_width),%ecx
movl C(VGA_bufferrowbytes),%eax
subl %ecx,%eax
movl %eax,LSrcDelta
movl C(VGA_rowbytes),%eax
shll $2,%eax
subl %ecx,%eax
movl %eax,LDestDelta
shrl $4,%ecx
movl %ecx,LCopyWidth
LRowLoop:
movb $1,%al
LPlaneLoop:
outb %al,%dx
movb $2,%ah
pushl %esi
pushl %edi
LRowSetLoop:
movl LCopyWidth,%ecx
LColumnLoop:
movb 12(%esi),%bh
movb 8(%esi),%bl
shll $16,%ebx
movb 4(%esi),%bh
movb (%esi),%bl
movl %ebx,(%edi)
addl $16,%esi
addl $4,%edi
decl %ecx
jnz LColumnLoop
addl LDestDelta,%edi
addl LSrcDelta,%esi
decb %ah
jnz LRowSetLoop
popl %edi
popl %esi
incl %esi
shlb $1,%al
cmpb $16,%al
jnz LPlaneLoop
subl $4,%esi
addl LBlockSrcStep,%esi
addl LBlockDestStep,%edi
decl %ebp
jnz LRowLoop
popl %ebx // restore register variables
popl %esi
popl %edi
popl %ebp // restore the caller's stack frame
ret
#define srcptr 4+16
#define destptr 8+16
#define width 12+16
#define height 16+16
#define srcrowbytes 20+16
#define destrowbytes 24+16
.globl C(VGA_UpdateLinearScreen)
C(VGA_UpdateLinearScreen):
pushl %ebp // preserve caller's stack frame
pushl %edi
pushl %esi // preserve register variables
pushl %ebx
cld
movl srcptr(%esp),%esi
movl destptr(%esp),%edi
movl width(%esp),%ebx
movl srcrowbytes(%esp),%eax
subl %ebx,%eax
movl destrowbytes(%esp),%edx
subl %ebx,%edx
shrl $2,%ebx
movl height(%esp),%ebp
LLRowLoop:
movl %ebx,%ecx
rep/movsl (%esi),(%edi)
addl %eax,%esi
addl %edx,%edi
decl %ebp
jnz LLRowLoop
popl %ebx // restore register variables
popl %esi
popl %edi
popl %ebp // restore the caller's stack frame
ret
#endif /* USE_INTEL_ASM */

View file

@ -0,0 +1,155 @@
/*
in_common.c
general input driver
Copyright (C) 1996-1997 Id Software, Inc.
Copyright (C) 2000 Marcus Sundberg [mackan@stacken.kth.se]
Copyright (C) 1999,2000 contributors of the QuakeForge project
Please see the file "AUTHORS" for a list of contributors
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA
$Id$
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#ifdef HAVE_STRING_H
# include <string.h>
#endif
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#define _BSD
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
#include "QF/console.h"
#include "QF/cvar.h"
#include "QF/input.h"
#include "QF/joystick.h"
#include "QF/keys.h"
#include "QF/mathlib.h"
cvar_t *_windowed_mouse;
cvar_t *m_filter;
cvar_t *sensitivity;
cvar_t *lookstrafe;
cvar_t *in_freelook;
kbutton_t in_mlook, in_klook;
kbutton_t in_strafe;
kbutton_t in_speed;
qboolean in_mouse_avail;
float in_mouse_x, in_mouse_y;
static float in_old_mouse_x, in_old_mouse_y;
void
IN_Commands (void)
{
JOY_Command ();
IN_LL_Commands ();
}
void
IN_SendKeyEvents (void)
{
/* Get events from X server. */
IN_LL_SendKeyEvents ();
}
void
IN_Move (void)
{
JOY_Move ();
if (!in_mouse_avail)
return;
if (m_filter->int_val) {
in_mouse_x = (in_mouse_x + in_old_mouse_x) * 0.5;
in_mouse_y = (in_mouse_y + in_old_mouse_y) * 0.5;
}
in_old_mouse_x = in_mouse_x;
in_old_mouse_y = in_mouse_y;
in_mouse_x *= sensitivity->value;
in_mouse_y *= sensitivity->value;
if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook))
viewdelta.position[0] += in_mouse_x;
else
viewdelta.angles[YAW] -= in_mouse_x;
if (freelook && !(in_strafe.state & 1)) {
viewdelta.angles[PITCH] += in_mouse_y;
} else {
viewdelta.position[2] -= in_mouse_y;
}
in_mouse_x = in_mouse_y = 0.0;
}
/*
Called at shutdown
*/
void
IN_Shutdown (void)
{
JOY_Shutdown ();
Con_Printf ("IN_Shutdown\n");
IN_LL_Shutdown ();
}
void
IN_Init (void)
{
IN_LL_Init ();
JOY_Init ();
in_mouse_x = in_mouse_y = 0.0;
}
void
IN_Init_Cvars (void)
{
JOY_Init_Cvars ();
_windowed_mouse = Cvar_Get ("_windowed_mouse", "0", CVAR_ARCHIVE, NULL,
"With this set to 1, quake will grab the mouse from X");
m_filter = Cvar_Get ("m_filter", "0", CVAR_ARCHIVE, NULL,
"Toggle mouse input filtering.");
lookstrafe = Cvar_Get ("lookstrafe", "0", CVAR_ARCHIVE, NULL,
"when mlook/klook on player will strafe");
sensitivity = Cvar_Get ("sensitivity", "3", CVAR_ARCHIVE, NULL,
"mouse sensitivity multiplier");
IN_LL_Init_Cvars ();
}

View file

@ -42,8 +42,6 @@
#include <vgakeyboard.h>
#include <vgamouse.h>
#include "cl_input.h"
#include "client.h"
#include "QF/cmd.h"
#include "QF/compat.h"
#include "QF/console.h"
@ -51,9 +49,9 @@
#include "QF/input.h"
#include "QF/joystick.h"
#include "QF/keys.h"
#include "QF/mathlib.h"
#include "QF/qargs.h"
#include "QF/sys.h"
#include "view.h"
static int UseKeyboard = 1;
static int UseMouse = 1;
@ -72,6 +70,8 @@ static void IN_InitMouse (void);
cvar_t *_windowed_mouse;
cvar_t *m_filter;
cvar_t *sensitivity;
cvar_t *lookstrafe;
static void
keyhandler (int scancode, int state)
@ -103,13 +103,6 @@ mousehandler (int buttonstate, int dx, int dy, int dz, int drx, int dry, int drz
}
void
Force_CenterView_f (void)
{
cl.viewangles[PITCH] = 0;
}
void
IN_Init (void)
{
@ -135,6 +128,10 @@ IN_Init_Cvars (void)
JOY_Init_Cvars ();
m_filter = Cvar_Get ("m_filter", "0", CVAR_ARCHIVE, NULL,
"Toggle mouse input filtering.");
lookstrafe = Cvar_Get ("lookstrafe", "0", CVAR_ARCHIVE, NULL,
"when mlook/klook on player will strafe");
sensitivity = Cvar_Get ("sensitivity", "3", CVAR_ARCHIVE, NULL,
"mouse sensitivity multiplier");
}
static void
@ -265,8 +262,6 @@ IN_InitMouse (void)
char *mousedev;
int mouserate = MOUSE_DEFAULTSAMPLERATE;
Cmd_AddCommand ("force_centerview", Force_CenterView_f, "Force viewpoint of player to center");
mouse_buttons = 3;
mtype = vga_getmousetype ();

View file

@ -55,23 +55,20 @@
# include <X11/extensions/xf86dga.h>
#endif
#include "cl_input.h"
#include "client.h"
#include "QF/compat.h"
#include "QF/console.h"
#include "context_x11.h"
#include "QF/cmd.h"
#include "QF/cvar.h"
#include "dga_check.h"
#include "QF/input.h"
#include "QF/joystick.h"
#include "QF/keys.h"
#include "QF/mathlib.h"
#include "QF/qargs.h"
#include "QF/sys.h"
#include "view.h"
#include "QF/vid.h"
cvar_t *_windowed_mouse;
cvar_t *m_filter;
#include "context_x11.h"
#include "dga_check.h"
cvar_t *in_dga;
cvar_t *in_dga_mouseaccel;
@ -81,9 +78,6 @@ static qboolean dga_active;
static keydest_t old_key_dest = key_none;
static qboolean mouse_avail;
static float mouse_x, mouse_y;
static float old_mouse_x, old_mouse_y;
static int p_mouse_x, p_mouse_y;
#define KEY_MASK (KeyPressMask | KeyReleaseMask)
@ -364,21 +358,21 @@ static void
event_motion (XEvent * event)
{
if (dga_active) {
mouse_x += event->xmotion.x_root * in_dga_mouseaccel->value;
mouse_y += event->xmotion.y_root * in_dga_mouseaccel->value;
in_mouse_x += event->xmotion.x_root * in_dga_mouseaccel->value;
in_mouse_y += event->xmotion.y_root * in_dga_mouseaccel->value;
} else {
if (vid_fullscreen->int_val || _windowed_mouse->int_val) {
if (!event->xmotion.send_event) {
mouse_x += (event->xmotion.x - p_mouse_x);
mouse_y += (event->xmotion.y - p_mouse_y);
in_mouse_x += (event->xmotion.x - p_mouse_x);
in_mouse_y += (event->xmotion.y - p_mouse_y);
if (abs (vid.width / 2 - event->xmotion.x) > vid.width / 4
|| abs (vid.height / 2 - event->xmotion.y) > vid.height / 4) {
center_pointer ();
}
}
} else {
mouse_x += (event->xmotion.x - p_mouse_x);
mouse_y += (event->xmotion.y - p_mouse_y);
in_mouse_x += (event->xmotion.x - p_mouse_x);
in_mouse_y += (event->xmotion.y - p_mouse_y);
}
p_mouse_x = event->xmotion.x;
p_mouse_y = event->xmotion.y;
@ -387,13 +381,11 @@ event_motion (XEvent * event)
void
IN_Commands (void)
IN_LL_Commands (void)
{
static int old_windowed_mouse;
static int old_in_dga;
JOY_Command ();
if ((old_windowed_mouse != _windowed_mouse->int_val)
|| (old_in_dga != in_dga->int_val)) {
old_windowed_mouse = _windowed_mouse->int_val;
@ -423,57 +415,20 @@ IN_Commands (void)
void
IN_SendKeyEvents (void)
IN_LL_SendKeyEvents (void)
{
/* Get events from X server. */
X11_ProcessEvents ();
}
void
IN_Move (void)
{
JOY_Move ();
if (!mouse_avail)
return;
if (m_filter->int_val) {
mouse_x = (mouse_x + old_mouse_x) * 0.5;
mouse_y = (mouse_y + old_mouse_y) * 0.5;
}
old_mouse_x = mouse_x;
old_mouse_y = mouse_y;
mouse_x *= sensitivity->value;
mouse_y *= sensitivity->value;
if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook))
viewdelta.position[0] += mouse_x;
else
viewdelta.angles[YAW] -= mouse_x;
if (freelook && !(in_strafe.state & 1)) {
viewdelta.angles[PITCH] += mouse_y;
} else {
if ((in_strafe.state & 1) && noclip_anglehack)
viewdelta.position[1] -= mouse_y;
else
viewdelta.position[2] -= mouse_y;
}
mouse_x = mouse_y = 0.0;
}
/*
Called at shutdown
*/
void
IN_Shutdown (void)
IN_LL_Shutdown (void)
{
JOY_Shutdown ();
Con_Printf ("IN_Shutdown\n");
mouse_avail = 0;
Con_Printf ("IN_LL_Shutdown\n");
in_mouse_avail = 0;
if (x_disp) {
XAutoRepeatOn (x_disp);
@ -486,13 +441,7 @@ IN_Shutdown (void)
}
void
Force_CenterView_f (void)
{
cl.viewangles[PITCH] = 0;
}
void
IN_Init (void)
IN_LL_Init (void)
{
// open the display
if (!x_disp)
@ -515,8 +464,6 @@ IN_Init (void)
XChangeWindowAttributes (x_disp, x_win, attribmask, &attribs_2);
}
JOY_Init ();
XAutoRepeatOff (x_disp);
if (COM_CheckParm ("-nomouse"))
@ -528,26 +475,18 @@ IN_Init (void)
_windowed_mouse->flags |= CVAR_ROM;
}
mouse_x = mouse_y = 0.0;
mouse_avail = 1;
in_mouse_avail = 1;
X11_AddEvent (KeyPress, &event_key);
X11_AddEvent (KeyRelease, &event_key);
X11_AddEvent (ButtonPress, &event_button);
X11_AddEvent (ButtonRelease, &event_button);
X11_AddEvent (MotionNotify, &event_motion);
Cmd_AddCommand ("force_centerview", Force_CenterView_f, "Force view of player to center");
}
void
IN_Init_Cvars (void)
IN_LL_Init_Cvars (void)
{
JOY_Init_Cvars ();
_windowed_mouse = Cvar_Get ("_windowed_mouse", "0", CVAR_ARCHIVE, NULL,
"With this set to 1, quake will grab the mouse from X");
m_filter = Cvar_Get ("m_filter", "0", CVAR_ARCHIVE, NULL,
"Toggle mouse input filtering.");
in_dga = Cvar_Get ("in_dga", "1", CVAR_ARCHIVE, NULL,
"DGA Input support");
in_dga_mouseaccel = Cvar_Get ("in_dga_mouseaccel", "1", CVAR_ARCHIVE, NULL,

View file

@ -36,4 +36,57 @@
#include "QF/compat.h"
#include "QF/qargs.h"
#include "QF/vid.h"
#include "view.h"
void
VID_InitBuffers (void)
{
int buffersize, zbuffersize, cachesize;
void *vid_surfcache;
// Calculate the sizes we want first
buffersize = vid.rowbytes * vid.height;
zbuffersize = vid.width * vid.height * sizeof (*d_pzbuffer);
cachesize = D_SurfaceCacheForRes (vid.width, vid.height);
// Free the old screen buffer
if (vid.buffer) {
free (vid.buffer);
vid.conbuffer = vid.buffer = NULL;
}
// Free the old z-buffer
if (d_pzbuffer) {
free (d_pzbuffer);
d_pzbuffer = NULL;
}
// Free the old surface cache
vid_surfcache = D_SurfaceCacheAddress ();
if (vid_surfcache) {
D_FlushCaches ();
free (vid_surfcache);
vid_surfcache = NULL;
}
// Allocate the new screen buffer
vid.conbuffer = vid.buffer = calloc (buffersize, 1);
if (!vid.conbuffer) {
Sys_Error ("Not enough memory for video mode\n");
}
// Allocate the new z-buffer
d_pzbuffer = calloc (zbuffersize, 1);
if (!d_pzbuffer) {
free (vid.buffer);
vid.conbuffer = vid.buffer = NULL;
Sys_Error ("Not enough memory for video mode\n");
}
// Allocate the new surface cache; free the z-buffer if we fail
vid_surfcache = calloc (cachesize, 1);
if (!vid_surfcache) {
free (vid.buffer);
free (d_pzbuffer);
vid.conbuffer = vid.buffer = NULL;
d_pzbuffer = NULL;
Sys_Error ("Not enough memory for video mode\n");
}
D_InitCaches (vid_surfcache, cachesize);
}

View file

@ -298,59 +298,6 @@ get_mode (char *name, int width, int height, int depth)
}
void
VID_InitBuffers (void)
{
int buffersize, zbuffersize, cachesize;
void *vid_surfcache;
// Calculate the sizes we want first
buffersize = vid.rowbytes * vid.height;
zbuffersize = vid.width * vid.height * sizeof (*d_pzbuffer);
cachesize = D_SurfaceCacheForRes (vid.width, vid.height);
// Free the old screen buffer
if (vid.buffer) {
free (vid.buffer);
vid.conbuffer = vid.buffer = NULL;
}
// Free the old z-buffer
if (d_pzbuffer) {
free (d_pzbuffer);
d_pzbuffer = NULL;
}
// Free the old surface cache
vid_surfcache = D_SurfaceCacheAddress ();
if (vid_surfcache) {
D_FlushCaches ();
free (vid_surfcache);
vid_surfcache = NULL;
}
// Allocate the new screen buffer
vid.conbuffer = vid.buffer = calloc (buffersize, 1);
if (!vid.conbuffer) {
Sys_Error ("Not enough memory for video mode\n");
}
// Allocate the new z-buffer
d_pzbuffer = calloc (zbuffersize, 1);
if (!d_pzbuffer) {
free (vid.buffer);
vid.conbuffer = vid.buffer = NULL;
Sys_Error ("Not enough memory for video mode\n");
}
// Allocate the new surface cache; free the z-buffer if we fail
vid_surfcache = calloc (cachesize, 1);
if (!vid_surfcache) {
free (vid.buffer);
free (d_pzbuffer);
vid.conbuffer = vid.buffer = NULL;
d_pzbuffer = NULL;
Sys_Error ("Not enough memory for video mode\n");
}
D_InitCaches (vid_surfcache, cachesize);
}
static unsigned char *fb_map_addr = 0;
static unsigned long fb_map_length = 0;
@ -461,9 +408,6 @@ VID_SetMode (char *name, unsigned char *palette)
vid.conheight = vid.height;
vid.numpages = 1;
vid.maxwarpwidth = WARP_WIDTH;
vid.maxwarpheight = WARP_HEIGHT;
if (fb_map_addr) {
if (munmap(fb_map_addr, fb_map_length) == -1) {
Sys_Printf("could not unmap framebuffer at %p: %s\n",

View file

@ -344,15 +344,6 @@ extern entity_t *cl_visedicts[MAX_VISEDICTS];
//
// cl_input
//
typedef struct
{
int down[2]; // key nums holding it down
int state; // low bit is down state
} kbutton_t;
extern kbutton_t in_mlook, in_klook;
extern kbutton_t in_strafe;
extern kbutton_t in_speed;
void CL_InitInput (void);
void CL_SendCmd (void);
@ -368,10 +359,6 @@ int CL_ReadFromServer (void);
void CL_WriteToServer (usercmd_t *cmd);
void CL_BaseMove (usercmd_t *cmd);
float CL_KeyState (kbutton_t *key);
char *Key_KeynumToString (int keynum);
//
// cl_demo.c
//

View file

@ -457,8 +457,8 @@ R_SetupFrame (void)
if ((r_dowarp != r_dowarpold) || r_viewchanged) {
if (r_dowarp) {
if ((vid.width <= vid.maxwarpwidth)
&& (vid.height <= vid.maxwarpheight)) {
if ((vid.width <= WARP_WIDTH)
&& (vid.height <= WARP_HEIGHT)) {
vrect.x = 0;
vrect.y = 0;
vrect.width = vid.width;
@ -469,14 +469,14 @@ R_SetupFrame (void)
w = vid.width;
h = vid.height;
if (w > vid.maxwarpwidth) {
h *= (float) vid.maxwarpwidth / w;
w = vid.maxwarpwidth;
if (w > WARP_WIDTH) {
h *= (float) WARP_WIDTH / w;
w = WARP_WIDTH;
}
if (h > vid.maxwarpheight) {
h = vid.maxwarpheight;
w *= (float) vid.maxwarpheight / h;
if (h > WARP_HEIGHT) {
h = WARP_HEIGHT;
w *= (float) WARP_HEIGHT / h;
}
vrect.x = 0;

View file

@ -31,16 +31,6 @@
#include "protocol.h"
typedef struct
{
int down[2]; // key nums holding it down
int state; // low bit is down state
} kbutton_t;
extern kbutton_t in_mlook, in_klook;
extern kbutton_t in_strafe;
extern kbutton_t in_speed;
void CL_Input_Init (void);
void CL_Input_Init_Cvars (void);
void CL_ClearStates (void);
@ -55,9 +45,4 @@ int CL_ReadFromServer (void);
void CL_WriteToServer (usercmd_t *cmd);
void CL_BaseMove (usercmd_t *cmd);
float CL_KeyState (kbutton_t *key);
char *Key_KeynumToString (int keynum);
#endif

View file

@ -512,8 +512,8 @@ R_SetupFrame (void)
if ((r_dowarp != r_dowarpold) || r_viewchanged) {
if (r_dowarp) {
if ((vid.width <= vid.maxwarpwidth) &&
(vid.height <= vid.maxwarpheight)) {
if ((vid.width <= WARP_WIDTH) &&
(vid.height <= WARP_HEIGHT)) {
vrect.x = 0;
vrect.y = 0;
vrect.width = vid.width;
@ -524,14 +524,14 @@ R_SetupFrame (void)
w = vid.width;
h = vid.height;
if (w > vid.maxwarpwidth) {
h *= (float) vid.maxwarpwidth / w;
w = vid.maxwarpwidth;
if (w > WARP_WIDTH) {
h *= (float) WARP_WIDTH / w;
w = WARP_WIDTH;
}
if (h > vid.maxwarpheight) {
h = vid.maxwarpheight;
w *= (float) vid.maxwarpheight / h;
if (h > WARP_HEIGHT) {
h = WARP_HEIGHT;
w *= (float) WARP_HEIGHT / h;
}
vrect.x = 0;