summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Angus <tim@ngus.net>2007-09-13 14:05:34 +0000
committerTim Angus <tim@ngus.net>2007-09-13 14:05:34 +0000
commit9b6e4553e45720183eee347fe0a8d03770ff4e6d (patch)
treed7e1ab66271aed70034cc21f3ee5b58515a0cee9
parentdf02ea4c36c45ef40e7b94a15f01c9af33da6b92 (diff)
* Merge of ioq3-r1178
-rw-r--r--Makefile232
-rw-r--r--src/renderer/qgl.h11
-rw-r--r--src/renderer/tr_init.c8
-rw-r--r--src/renderer/tr_local.h2
-rw-r--r--src/renderer/tr_types.h2
-rw-r--r--src/sdl/sdl_glimp.c20
-rw-r--r--src/sys/con_win32.c216
-rw-r--r--src/tools/asm/Makefile43
-rw-r--r--src/tools/lcc/Makefile163
9 files changed, 413 insertions, 284 deletions
diff --git a/Makefile b/Makefile
index e8eec16b..5dddf4aa 100644
--- a/Makefile
+++ b/Makefile
@@ -74,11 +74,6 @@ ifndef GENERATE_DEPENDENCIES
GENERATE_DEPENDENCIES=1
endif
-ifndef USE_CCACHE
-USE_CCACHE=0
-endif
-export USE_CCACHE
-
ifndef USE_OPENAL
USE_OPENAL=1
endif
@@ -127,10 +122,15 @@ CGDIR=$(MOUNT_DIR)/cgame
NDIR=$(MOUNT_DIR)/null
UIDIR=$(MOUNT_DIR)/ui
JPDIR=$(MOUNT_DIR)/jpeg-6
-TOOLSDIR=$(MOUNT_DIR)/tools
+Q3ASMDIR=$(MOUNT_DIR)/tools/asm
+LBURGDIR=$(MOUNT_DIR)/tools/lcc/lburg
+Q3CPPDIR=$(MOUNT_DIR)/tools/lcc/cpp
+Q3LCCETCDIR=$(MOUNT_DIR)/tools/lcc/etc
+Q3LCCSRCDIR=$(MOUNT_DIR)/tools/lcc/src
SDLHDIR=$(MOUNT_DIR)/SDL12
LIBSDIR=$(MOUNT_DIR)/libs
MASTERDIR=$(MOUNT_DIR)/master
+TEMPDIR=/tmp
# extract version info
VERSION=$(shell grep "\#define *PRODUCT_VERSION" $(CMDIR)/q_shared.h | \
@@ -380,6 +380,8 @@ ifeq ($(PLATFORM),darwin)
NOTSHLIBCFLAGS=-mdynamic-no-pic
+ TOOLS_CFLAGS += -DMACOS_X
+
else # ifeq darwin
@@ -425,8 +427,8 @@ endif
BINEXT=.exe
- LDFLAGS= -mwindows -lwsock32 -lwinmm
- CLIENT_LDFLAGS = -lgdi32 -lole32 -lopengl32
+ LDFLAGS= -lwsock32 -lwinmm
+ CLIENT_LDFLAGS = -mwindows -lgdi32 -lole32 -lopengl32
ifeq ($(USE_CURL),1)
ifneq ($(USE_CURL_DLOPEN),1)
@@ -692,10 +694,6 @@ ifneq ($(BUILD_GAME_QVM),0)
endif
endif
-ifeq ($(USE_CCACHE),1)
- CC := ccache $(CC)
-endif
-
ifdef DEFAULT_BASEDIR
BASE_CFLAGS += -DDEFAULT_BASEDIR=\\\"$(DEFAULT_BASEDIR)\\\"
endif
@@ -780,9 +778,9 @@ ifeq ($(BUILD_MASTER_SERVER),1)
$(MAKE) -C $(MASTERDIR) release
endif
-# Create the build directories and tools, print out
+# Create the build directories, check libraries and print out
# an informational message, then start building
-targets: makedirs tools libversioncheck
+targets: makedirs libversioncheck
@echo ""
@echo "Building Tremulous in $(B):"
@echo " PLATFORM: $(PLATFORM)"
@@ -817,22 +815,125 @@ makedirs:
@if [ ! -d $(B)/base/ui ];then $(MKDIR) $(B)/base/ui;fi
@if [ ! -d $(B)/base/qcommon ];then $(MKDIR) $(B)/base/qcommon;fi
@if [ ! -d $(B)/base/vm ];then $(MKDIR) $(B)/base/vm;fi
+ @if [ ! -d $(B)/tools ];then $(MKDIR) $(B)/tools;fi
+ @if [ ! -d $(B)/tools/asm ];then $(MKDIR) $(B)/tools/asm;fi
+ @if [ ! -d $(B)/tools/etc ];then $(MKDIR) $(B)/tools/etc;fi
+ @if [ ! -d $(B)/tools/rcc ];then $(MKDIR) $(B)/tools/rcc;fi
+ @if [ ! -d $(B)/tools/cpp ];then $(MKDIR) $(B)/tools/cpp;fi
+ @if [ ! -d $(B)/tools/lburg ];then $(MKDIR) $(B)/tools/lburg;fi
#############################################################################
# QVM BUILD TOOLS
#############################################################################
-Q3LCC=$(TOOLSDIR)/q3lcc$(BINEXT)
-Q3ASM=$(TOOLSDIR)/q3asm$(BINEXT)
+TOOLS_CFLAGS = -O2 -Wall -Werror -fno-strict-aliasing -MMD \
+ -DTEMPDIR=\"$(TEMPDIR)\" -DSYSTEM=\"\" \
+ -I$(Q3LCCSRCDIR) \
+ -I$(LBURGDIR)
+TOOLS_LDFLAGS =
-ifeq ($(CROSS_COMPILING),1)
-tools:
- @echo QVM tools not built when cross-compiling
-else
-tools:
- $(MAKE) -C $(TOOLSDIR)/lcc install
- $(MAKE) -C $(TOOLSDIR)/asm install
-endif
+define DO_TOOLS_CC
+$(echo_cmd) "TOOLS_CC $<"
+$(Q)$(CC) $(TOOLS_CFLAGS) -o $@ -c $<
+endef
+
+define DO_TOOLS_CC_DAGCHECK
+$(echo_cmd) "TOOLS_CC_DAGCHECK $<"
+$(Q)$(CC) $(TOOLS_CFLAGS) -Wno-unused -o $@ -c $<
+endef
+
+LBURG = $(B)/tools/lburg/lburg$(BINEXT)
+DAGCHECK_C = $(B)/tools/rcc/dagcheck.c
+Q3RCC = $(B)/tools/q3rcc$(BINEXT)
+Q3CPP = $(B)/tools/q3cpp$(BINEXT)
+Q3LCC = $(B)/tools/q3lcc$(BINEXT)
+Q3ASM = $(B)/tools/q3asm$(BINEXT)
+
+LBURGOBJ= \
+ $(B)/tools/lburg/lburg.o \
+ $(B)/tools/lburg/gram.o
+
+$(B)/tools/lburg/%.o: $(LBURGDIR)/%.c
+ $(DO_TOOLS_CC)
+
+$(LBURG): $(LBURGOBJ)
+ $(echo_cmd) "LD $@"
+ $(Q)$(CC) $(TOOLS_LDFLAGS) -o $@ $^
+
+Q3RCCOBJ = \
+ $(B)/tools/rcc/alloc.o \
+ $(B)/tools/rcc/bind.o \
+ $(B)/tools/rcc/bytecode.o \
+ $(B)/tools/rcc/dag.o \
+ $(B)/tools/rcc/dagcheck.o \
+ $(B)/tools/rcc/decl.o \
+ $(B)/tools/rcc/enode.o \
+ $(B)/tools/rcc/error.o \
+ $(B)/tools/rcc/event.o \
+ $(B)/tools/rcc/expr.o \
+ $(B)/tools/rcc/gen.o \
+ $(B)/tools/rcc/init.o \
+ $(B)/tools/rcc/inits.o \
+ $(B)/tools/rcc/input.o \
+ $(B)/tools/rcc/lex.o \
+ $(B)/tools/rcc/list.o \
+ $(B)/tools/rcc/main.o \
+ $(B)/tools/rcc/null.o \
+ $(B)/tools/rcc/output.o \
+ $(B)/tools/rcc/prof.o \
+ $(B)/tools/rcc/profio.o \
+ $(B)/tools/rcc/simp.o \
+ $(B)/tools/rcc/stmt.o \
+ $(B)/tools/rcc/string.o \
+ $(B)/tools/rcc/sym.o \
+ $(B)/tools/rcc/symbolic.o \
+ $(B)/tools/rcc/trace.o \
+ $(B)/tools/rcc/tree.o \
+ $(B)/tools/rcc/types.o
+
+$(DAGCHECK_C): $(LBURG) $(Q3LCCSRCDIR)/dagcheck.md
+ $(echo_cmd) "LBURG $(Q3LCCSRCDIR)/dagcheck.md"
+ $(Q)$(LBURG) $(Q3LCCSRCDIR)/dagcheck.md $@
+
+$(B)/tools/rcc/dagcheck.o: $(DAGCHECK_C)
+ $(DO_TOOLS_CC_DAGCHECK)
+
+$(B)/tools/rcc/%.o: $(Q3LCCSRCDIR)/%.c
+ $(DO_TOOLS_CC)
+
+$(Q3RCC): $(Q3RCCOBJ)
+ $(echo_cmd) "LD $@"
+ $(Q)$(CC) $(TOOLS_LDFLAGS) -o $@ $^
+
+Q3CPPOBJ = \
+ $(B)/tools/cpp/cpp.o \
+ $(B)/tools/cpp/lex.o \
+ $(B)/tools/cpp/nlist.o \
+ $(B)/tools/cpp/tokens.o \
+ $(B)/tools/cpp/macro.o \
+ $(B)/tools/cpp/eval.o \
+ $(B)/tools/cpp/include.o \
+ $(B)/tools/cpp/hideset.o \
+ $(B)/tools/cpp/getopt.o \
+ $(B)/tools/cpp/unix.o
+
+$(B)/tools/cpp/%.o: $(Q3CPPDIR)/%.c
+ $(DO_TOOLS_CC)
+
+$(Q3CPP): $(Q3CPPOBJ)
+ $(echo_cmd) "LD $@"
+ $(Q)$(CC) $(TOOLS_LDFLAGS) -o $@ $^
+
+Q3LCCOBJ = \
+ $(B)/tools/etc/lcc.o \
+ $(B)/tools/etc/bytecode.o
+
+$(B)/tools/etc/%.o: $(Q3LCCETCDIR)/%.c
+ $(DO_TOOLS_CC)
+
+$(Q3LCC): $(Q3LCCOBJ) $(Q3RCC) $(Q3CPP)
+ $(echo_cmd) "LD $@"
+ $(Q)$(CC) $(TOOLS_LDFLAGS) -o $@ $(Q3LCCOBJ)
define DO_Q3LCC
$(echo_cmd) "Q3LCC $<"
@@ -840,6 +941,18 @@ $(Q)$(Q3LCC) -o $@ $<
endef
+Q3ASMOBJ = \
+ $(B)/tools/asm/q3asm.o \
+ $(B)/tools/asm/cmdlib.o
+
+$(B)/tools/asm/%.o: $(Q3ASMDIR)/%.c
+ $(DO_TOOLS_CC)
+
+$(Q3ASM): $(Q3ASMOBJ)
+ $(echo_cmd) "LD $@"
+ $(Q)$(CC) $(TOOLS_LDFLAGS) -o $@ $^
+
+
#############################################################################
# LIBRARY VERSION CHECKS
#############################################################################
@@ -1170,11 +1283,11 @@ CGOBJ_ = \
CGOBJ = $(CGOBJ_) $(B)/base/cgame/cg_syscalls.o
CGVMOBJ = $(CGOBJ_:%.o=%.asm) $(B)/base/game/bg_lib.asm
-$(B)/base/cgame$(ARCH).$(SHLIBEXT) : $(CGOBJ)
+$(B)/base/cgame$(ARCH).$(SHLIBEXT): $(CGOBJ)
$(echo_cmd) "LD $@"
$(Q)$(CC) $(SHLIBLDFLAGS) -o $@ $(CGOBJ)
-$(B)/base/vm/cgame.qvm: $(CGVMOBJ) $(CGDIR)/cg_syscalls.asm
+$(B)/base/vm/cgame.qvm: $(CGVMOBJ) $(CGDIR)/cg_syscalls.asm $(Q3ASM)
$(echo_cmd) "Q3ASM $@"
$(Q)$(Q3ASM) -o $@ $(CGVMOBJ) $(CGDIR)/cg_syscalls.asm
@@ -1217,11 +1330,11 @@ GOBJ_ = \
GOBJ = $(GOBJ_) $(B)/base/game/g_syscalls.o
GVMOBJ = $(GOBJ_:%.o=%.asm) $(B)/base/game/bg_lib.asm
-$(B)/base/game$(ARCH).$(SHLIBEXT) : $(GOBJ)
+$(B)/base/game$(ARCH).$(SHLIBEXT): $(GOBJ)
$(echo_cmd) "LD $@"
$(Q)$(CC) $(SHLIBLDFLAGS) -o $@ $(GOBJ)
-$(B)/base/vm/game.qvm: $(GVMOBJ) $(GDIR)/g_syscalls.asm
+$(B)/base/vm/game.qvm: $(GVMOBJ) $(GDIR)/g_syscalls.asm $(Q3ASM)
$(echo_cmd) "Q3ASM $@"
$(Q)$(Q3ASM) -o $@ $(GVMOBJ) $(GDIR)/g_syscalls.asm
@@ -1245,11 +1358,11 @@ UIOBJ_ = \
UIOBJ = $(UIOBJ_) $(B)/base/ui/ui_syscalls.o
UIVMOBJ = $(UIOBJ_:%.o=%.asm) $(B)/base/game/bg_lib.asm
-$(B)/base/ui$(ARCH).$(SHLIBEXT) : $(UIOBJ)
+$(B)/base/ui$(ARCH).$(SHLIBEXT): $(UIOBJ)
$(echo_cmd) "LD $@"
$(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(UIOBJ)
-$(B)/base/vm/ui.qvm: $(UIVMOBJ) $(UIDIR)/ui_syscalls.asm
+$(B)/base/vm/ui.qvm: $(UIVMOBJ) $(UIDIR)/ui_syscalls.asm $(Q3ASM)
$(echo_cmd) "Q3ASM $@"
$(Q)$(Q3ASM) -o $@ $(UIVMOBJ) $(UIDIR)/ui_syscalls.asm
@@ -1329,28 +1442,28 @@ endif
$(B)/base/cgame/%.o: $(CGDIR)/%.c
$(DO_SHLIB_CC)
-$(B)/base/cgame/%.asm: $(CGDIR)/%.c
+$(B)/base/cgame/%.asm: $(CGDIR)/%.c $(Q3LCC)
$(DO_Q3LCC)
$(B)/base/game/%.o: $(GDIR)/%.c
$(DO_SHLIB_CC)
-$(B)/base/game/%.asm: $(GDIR)/%.c
+$(B)/base/game/%.asm: $(GDIR)/%.c $(Q3LCC)
$(DO_Q3LCC)
$(B)/base/ui/%.o: $(UIDIR)/%.c
$(DO_SHLIB_CC)
-$(B)/base/ui/%.asm: $(UIDIR)/%.c
+$(B)/base/ui/%.asm: $(UIDIR)/%.c $(Q3LCC)
$(DO_Q3LCC)
$(B)/base/qcommon/%.o: $(CMDIR)/%.c
$(DO_SHLIB_CC)
-$(B)/base/qcommon/%.asm: $(CMDIR)/%.c
+$(B)/base/qcommon/%.asm: $(CMDIR)/%.c $(Q3LCC)
$(DO_Q3LCC)
@@ -1358,26 +1471,40 @@ $(B)/base/qcommon/%.asm: $(CMDIR)/%.c
# MISC
#############################################################################
+OBJ = $(Q3OBJ) $(Q3POBJ) $(Q3POBJ_SMP) $(Q3DOBJ) \
+ $(GOBJ) $(CGOBJ) $(UIOBJ) \
+ $(GVMOBJ) $(CGVMOBJ) $(UIVMOBJ)
+TOOLSOBJ = $(LBURGOBJ) $(Q3CPPOBJ) $(Q3RCCOBJ) $(Q3LCCOBJ) $(Q3ASMOBJ)
+
+
clean: clean-debug clean-release
@$(MAKE) -C $(MASTERDIR) clean
-clean2:
- @echo "CLEAN $(B)"
- @if [ -d $(B) ];then (find $(B) -name '*.d' -exec rm {} \;)fi
- @rm -f $(Q3OBJ) $(Q3POBJ) $(Q3POBJ_SMP) $(Q3DOBJ) \
- $(GOBJ) $(CGOBJ) $(UIOBJ) \
- $(GVMOBJ) $(CGVMOBJ) $(UIVMOBJ)
- @rm -f $(TARGETS)
-
clean-debug:
@$(MAKE) clean2 B=$(BD)
clean-release:
@$(MAKE) clean2 B=$(BR)
-toolsclean:
- @$(MAKE) -C $(TOOLSDIR)/asm clean uninstall
- @$(MAKE) -C $(TOOLSDIR)/lcc clean uninstall
+clean2:
+ @echo "CLEAN $(B)"
+ @rm -f $(OBJ)
+ @rm -f $(OBJ_D_FILES)
+ @rm -f $(TARGETS)
+
+toolsclean: toolsclean-debug toolsclean-release
+
+toolsclean-debug:
+ @$(MAKE) toolsclean2 B=$(BD)
+
+toolsclean-release:
+ @$(MAKE) toolsclean2 B=$(BR)
+
+toolsclean2:
+ @echo "TOOLS_CLEAN $(B)"
+ @rm -f $(TOOLSOBJ)
+ @rm -f $(TOOLSOBJ_D_FILES)
+ @rm -f $(LBURG) $(DAGCHECK_C) $(Q3RCC) $(Q3CPP) $(Q3LCC) $(Q3ASM)
distclean: clean toolsclean
@rm -rf $(BUILD_DIR)
@@ -1392,12 +1519,11 @@ dist:
# DEPENDENCIES
#############################################################################
-D_FILES=$(shell find . -name '*.d')
-
-ifneq ($(strip $(D_FILES)),)
- include $(D_FILES)
-endif
+OBJ_D_FILES=$(filter %.d,$(OBJ:%.o=%.d))
+TOOLSOBJ_D_FILES=$(filter %.d,$(TOOLSOBJ:%.o=%.d))
+-include $(OBJ_D_FILES) $(TOOLSOBJ_D_FILES)
-.PHONY: all clean clean2 clean-debug clean-release \
- debug default dist distclean libversioncheck makedirs release \
- targets tools toolsclean
+.PHONY: all clean clean2 clean-debug clean-release copyfiles \
+ debug default dist distclean libversioncheck makedirs \
+ release targets \
+ toolsclean toolsclean2 toolsclean-debug toolsclean-release
diff --git a/src/renderer/qgl.h b/src/renderer/qgl.h
index 8c92eb36..f83eaf31 100644
--- a/src/renderer/qgl.h
+++ b/src/renderer/qgl.h
@@ -29,12 +29,13 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "SDL_opengl.h"
-extern PFNGLMULTITEXCOORD2FARBPROC qglMultiTexCoord2fARB;
-extern PFNGLACTIVETEXTUREARBPROC qglActiveTextureARB;
-extern PFNGLCLIENTACTIVETEXTUREARBPROC qglClientActiveTextureARB;
+extern void (APIENTRYP qglActiveTextureARB) (GLenum texture);
+extern void (APIENTRYP qglClientActiveTextureARB) (GLenum texture);
+extern void (APIENTRYP qglMultiTexCoord2fARB) (GLenum target, GLfloat s, GLfloat t);
+
+extern void (APIENTRYP qglLockArraysEXT) (GLint first, GLsizei count);
+extern void (APIENTRYP qglUnlockArraysEXT) (void);
-extern PFNGLLOCKARRAYSEXTPROC qglLockArraysEXT;
-extern PFNGLUNLOCKARRAYSEXTPROC qglUnlockArraysEXT;
//===========================================================================
diff --git a/src/renderer/tr_init.c b/src/renderer/tr_init.c
index d8e35ff7..1f3d19dc 100644
--- a/src/renderer/tr_init.c
+++ b/src/renderer/tr_init.c
@@ -81,7 +81,6 @@ cvar_t *r_nocurves;
cvar_t *r_allowExtensions;
cvar_t *r_ext_compressed_textures;
-cvar_t *r_ext_gamma_control;
cvar_t *r_ext_multitexture;
cvar_t *r_ext_compiled_vertex_array;
cvar_t *r_ext_texture_env_add;
@@ -889,7 +888,6 @@ GfxInfo_f
*/
void GfxInfo_f( void )
{
- cvar_t *sys_cpustring = ri.Cvar_Get( "sys_cpustring", "", 0 );
const char *enablestrings[] =
{
"disabled",
@@ -906,7 +904,7 @@ void GfxInfo_f( void )
ri.Printf( PRINT_ALL, "GL_VERSION: %s\n", glConfig.version_string );
ri.Printf( PRINT_ALL, "GL_EXTENSIONS: %s\n", glConfig.extensions_string );
ri.Printf( PRINT_ALL, "GL_MAX_TEXTURE_SIZE: %d\n", glConfig.maxTextureSize );
- ri.Printf( PRINT_ALL, "GL_MAX_ACTIVE_TEXTURES_ARB: %d\n", glConfig.maxActiveTextures );
+ ri.Printf( PRINT_ALL, "GL_MAX_TEXTURE_UNITS_ARB: %d\n", glConfig.numTextureUnits );
ri.Printf( PRINT_ALL, "\nPIXELFORMAT: color(%d-bits) Z(%d-bit) stencil(%d-bits)\n", glConfig.colorBits, glConfig.depthBits, glConfig.stencilBits );
ri.Printf( PRINT_ALL, "MODE: %d, %d x %d %s hz:", r_mode->integer, glConfig.vidWidth, glConfig.vidHeight, fsstrings[r_fullscreen->integer == 1] );
if ( glConfig.displayFrequency )
@@ -925,7 +923,6 @@ void GfxInfo_f( void )
{
ri.Printf( PRINT_ALL, "GAMMA: software w/ %d overbright bits\n", tr.overbrightBits );
}
- ri.Printf( PRINT_ALL, "CPU: %s\n", sys_cpustring->string );
// rendering primitives
{
@@ -991,10 +988,9 @@ void R_Register( void )
//
r_allowExtensions = ri.Cvar_Get( "r_allowExtensions", "1", CVAR_ARCHIVE | CVAR_LATCH );
r_ext_compressed_textures = ri.Cvar_Get( "r_ext_compressed_textures", "0", CVAR_ARCHIVE | CVAR_LATCH );
- r_ext_gamma_control = ri.Cvar_Get( "r_ext_gamma_control", "1", CVAR_ARCHIVE | CVAR_LATCH );
r_ext_multitexture = ri.Cvar_Get( "r_ext_multitexture", "1", CVAR_ARCHIVE | CVAR_LATCH );
r_ext_compiled_vertex_array = ri.Cvar_Get( "r_ext_compiled_vertex_array", "1", CVAR_ARCHIVE | CVAR_LATCH);
- r_ext_texture_env_add = ri.Cvar_Get( "r_ext_texture_env_add", "0", CVAR_ARCHIVE | CVAR_LATCH);
+ r_ext_texture_env_add = ri.Cvar_Get( "r_ext_texture_env_add", "1", CVAR_ARCHIVE | CVAR_LATCH);
r_picmip = ri.Cvar_Get ("r_picmip", GENERIC_HW_R_PICMIP_DEFAULT,
CVAR_ARCHIVE | CVAR_LATCH );
diff --git a/src/renderer/tr_local.h b/src/renderer/tr_local.h
index 7c694759..a507e8a7 100644
--- a/src/renderer/tr_local.h
+++ b/src/renderer/tr_local.h
@@ -1035,8 +1035,6 @@ extern cvar_t *r_ignorehwgamma; // overrides hardware gamma capabilities
extern cvar_t *r_allowExtensions; // global enable/disable of OpenGL extensions
extern cvar_t *r_ext_compressed_textures; // these control use of specific extensions
-extern cvar_t *r_ext_gamma_control;
-extern cvar_t *r_ext_texenv_op;
extern cvar_t *r_ext_multitexture;
extern cvar_t *r_ext_compiled_vertex_array;
extern cvar_t *r_ext_texture_env_add;
diff --git a/src/renderer/tr_types.h b/src/renderer/tr_types.h
index 3922f8ff..2d7c66d3 100644
--- a/src/renderer/tr_types.h
+++ b/src/renderer/tr_types.h
@@ -176,7 +176,7 @@ typedef struct {
char extensions_string[BIG_INFO_STRING];
int maxTextureSize; // queried from GL
- int maxActiveTextures; // multitexture ability
+ int numTextureUnits; // multitexture ability
int colorBits, depthBits, stencilBits;
diff --git a/src/sdl/sdl_glimp.c b/src/sdl/sdl_glimp.c
index 07b80a81..a980b0ed 100644
--- a/src/sdl/sdl_glimp.c
+++ b/src/sdl/sdl_glimp.c
@@ -70,12 +70,12 @@ static SDL_Surface *screen = NULL;
cvar_t *r_allowSoftwareGL; // Don't abort out if a hardware visual can't be obtained
-PFNGLMULTITEXCOORD2FARBPROC qglMultiTexCoord2fARB;
-PFNGLACTIVETEXTUREARBPROC qglActiveTextureARB;
-PFNGLCLIENTACTIVETEXTUREARBPROC qglClientActiveTextureARB;
+void (APIENTRYP qglActiveTextureARB) (GLenum texture);
+void (APIENTRYP qglClientActiveTextureARB) (GLenum texture);
+void (APIENTRYP qglMultiTexCoord2fARB) (GLenum target, GLfloat s, GLfloat t);
-PFNGLLOCKARRAYSEXTPROC qglLockArraysEXT;
-PFNGLUNLOCKARRAYSEXTPROC qglUnlockArraysEXT;
+void (APIENTRYP qglLockArraysEXT) (GLint first, GLsizei count);
+void (APIENTRYP qglUnlockArraysEXT) (void);
/*
===============
@@ -89,8 +89,8 @@ void GLimp_Shutdown( void )
SDL_QuitSubSystem( SDL_INIT_VIDEO );
screen = NULL;
- memset( &glConfig, 0, sizeof( glConfig ) );
- memset( &glState, 0, sizeof( glState ) );
+ Com_Memset( &glConfig, 0, sizeof( glConfig ) );
+ Com_Memset( &glState, 0, sizeof( glState ) );
}
/*
@@ -396,8 +396,8 @@ static void GLimp_InitExtensions( void )
{
GLint glint = 0;
qglGetIntegerv( GL_MAX_TEXTURE_UNITS_ARB, &glint );
- glConfig.maxActiveTextures = (int) glint;
- if ( glConfig.maxActiveTextures > 1 )
+ glConfig.numTextureUnits = (int) glint;
+ if ( glConfig.numTextureUnits > 1 )
{
ri.Printf( PRINT_ALL, "...using GL_ARB_multitexture\n" );
}
@@ -490,7 +490,7 @@ void GLimp_Init( void )
{
if( r_mode->integer != R_MODE_FALLBACK )
{
- ri.Printf( PRINT_ALL, "Setting r_mode %d failed, falling back on r_mode %d",
+ ri.Printf( PRINT_ALL, "Setting r_mode %d failed, falling back on r_mode %d\n",
r_mode->integer, R_MODE_FALLBACK );
if( !GLimp_StartDriverAndSetMode( R_MODE_FALLBACK, r_fullscreen->integer ) )
success = qfalse;
diff --git a/src/sys/con_win32.c b/src/sys/con_win32.c
index ea3cfb7c..55020e26 100644
--- a/src/sys/con_win32.c
+++ b/src/sys/con_win32.c
@@ -22,6 +22,21 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "../qcommon/q_shared.h"
#include "../qcommon/qcommon.h"
+#include "windows.h"
+
+
+#define QCONSOLE_THEME FOREGROUND_RED | \
+ BACKGROUND_RED | \
+ BACKGROUND_GREEN | \
+ BACKGROUND_BLUE
+
+#define QCONSOLE_INPUT_RECORDS 1024
+
+// used to track key input
+static int qconsole_chars = 0;
+
+// used to restore original color theme
+static int qconsole_orig_attrib;
/*
==================
@@ -48,6 +63,15 @@ CON_Shutdown
*/
void CON_Shutdown( void )
{
+ HANDLE hout;
+ COORD screen = { 0, 0 };
+ DWORD written;
+
+ hout = GetStdHandle( STD_OUTPUT_HANDLE );
+
+ SetConsoleTextAttribute( hout, qconsole_orig_attrib );
+ FillConsoleOutputAttribute( hout, qconsole_orig_attrib, 63999,
+ screen, &written );
}
/*
@@ -57,6 +81,34 @@ CON_Init
*/
void CON_Init( void )
{
+ HANDLE hout;
+ COORD screen = { 0, 0 };
+ DWORD written, read;
+ CONSOLE_SCREEN_BUFFER_INFO binfo;
+ SMALL_RECT rect;
+ WORD oldattrib;
+
+ hout = GetStdHandle( STD_OUTPUT_HANDLE );
+
+ // remember original color theme
+ ReadConsoleOutputAttribute( hout, &oldattrib, 1, screen, &read );
+ qconsole_orig_attrib = oldattrib;
+
+ SetConsoleTitle("ioquake3 Dedicated Server Console");
+
+ SetConsoleTextAttribute( hout, QCONSOLE_THEME );
+ FillConsoleOutputAttribute( hout, QCONSOLE_THEME, 63999, screen, &written );
+
+ // adjust console scroll to match up with cursor position
+ GetConsoleScreenBufferInfo( hout, &binfo );
+ rect.Top = binfo.srWindow.Top;
+ rect.Left = binfo.srWindow.Left;
+ rect.Bottom = binfo.srWindow.Bottom;
+ rect.Right = binfo.srWindow.Right;
+ rect.Top += ( binfo.dwCursorPosition.Y - binfo.srWindow.Bottom );
+ rect.Bottom = binfo.dwCursorPosition.Y;
+ SetConsoleWindowInfo( hout, TRUE, &rect );
+
}
/*
@@ -66,5 +118,167 @@ CON_ConsoleInput
*/
char *CON_ConsoleInput( void )
{
- return NULL;
+ HANDLE hin, hout;
+ INPUT_RECORD buff[ QCONSOLE_INPUT_RECORDS ];
+ DWORD count = 0;
+ int i;
+ static char input[ 1024 ] = { "" };
+ int inputlen;
+ int newlinepos = -1;
+ CHAR_INFO line[ QCONSOLE_INPUT_RECORDS ];
+ int linelen = 0;
+
+ inputlen = 0;
+ input[ 0 ] = '\0';
+
+ hin = GetStdHandle( STD_INPUT_HANDLE );
+ if( hin == INVALID_HANDLE_VALUE )
+ return NULL;
+ hout = GetStdHandle( STD_OUTPUT_HANDLE );
+ if( hout == INVALID_HANDLE_VALUE )
+ return NULL;
+
+ if( !PeekConsoleInput( hin, buff, QCONSOLE_INPUT_RECORDS, &count ) )
+ return NULL;
+
+ // if we have overflowed, start dropping oldest input events
+ if( count == QCONSOLE_INPUT_RECORDS )
+ {
+ ReadConsoleInput( hin, buff, 1, &count );
+ return NULL;
+ }
+
+ for( i = 0; i < count; i++ )
+ {
+ if( buff[ i ].EventType == KEY_EVENT && buff[ i ].Event.KeyEvent.bKeyDown )
+ {
+ if( buff[ i ].Event.KeyEvent.wVirtualKeyCode == VK_RETURN )
+ {
+ newlinepos = i;
+ break;
+ }
+
+ if( linelen < QCONSOLE_INPUT_RECORDS &&
+ buff[ i ].Event.KeyEvent.uChar.AsciiChar )
+ {
+ if( buff[ i ].Event.KeyEvent.wVirtualKeyCode == VK_BACK )
+ {
+ if( linelen > 0 )
+ linelen--;
+
+ }
+ else
+ {
+ line[ linelen ].Attributes = QCONSOLE_THEME;
+ line[ linelen++ ].Char.AsciiChar =
+ buff[ i ].Event.KeyEvent.uChar.AsciiChar;
+ }
+ }
+ }
+ }
+
+ // provide visual feedback for incomplete commands
+ if( linelen != qconsole_chars )
+ {
+ CONSOLE_SCREEN_BUFFER_INFO binfo;
+ COORD writeSize = { QCONSOLE_INPUT_RECORDS, 1 };
+ COORD writePos = { 0, 0 };
+ SMALL_RECT writeArea = { 0, 0, 0, 0 };
+ int i;
+
+ // keep track of this so we don't need to re-write to console every frame
+ qconsole_chars = linelen;
+
+ GetConsoleScreenBufferInfo( hout, &binfo );
+
+ // adjust scrolling to cursor when typing
+ if( binfo.dwCursorPosition.Y > binfo.srWindow.Bottom )
+ {
+ SMALL_RECT rect;
+
+ rect.Top = binfo.srWindow.Top;
+ rect.Left = binfo.srWindow.Left;
+ rect.Bottom = binfo.srWindow.Bottom;
+ rect.Right = binfo.srWindow.Right;
+
+ rect.Top += ( binfo.dwCursorPosition.Y - binfo.srWindow.Bottom );
+ rect.Bottom = binfo.dwCursorPosition.Y;
+
+ SetConsoleWindowInfo( hout, TRUE, &rect );
+ GetConsoleScreenBufferInfo( hout, &binfo );
+ }
+
+ writeArea.Left = 0;
+ writeArea.Top = binfo.srWindow.Bottom;
+ writeArea.Bottom = binfo.srWindow.Bottom;
+ writeArea.Right = QCONSOLE_INPUT_RECORDS;
+
+ // pad line with ' ' to handle VK_BACK
+ for( i = linelen; i < QCONSOLE_INPUT_RECORDS; i++ )
+ {
+ line[ i ].Char.AsciiChar = ' ';
+ line[ i ].Attributes = QCONSOLE_THEME;
+ }
+
+ if( linelen > binfo.srWindow.Right )
+ {
+ WriteConsoleOutput( hout, line + (linelen - binfo.srWindow.Right ),
+ writeSize, writePos, &writeArea );
+ }
+ else
+ {
+ WriteConsoleOutput( hout, line, writeSize, writePos, &writeArea );
+ }
+
+ if( binfo.dwCursorPosition.X != linelen )
+ {
+ COORD cursorPos = { 0, 0 };
+
+ cursorPos.X = linelen;
+ cursorPos.Y = binfo.srWindow.Bottom;
+ SetConsoleCursorPosition( hout, cursorPos );
+ }
+ }
+
+ // don't touch the input buffer if this is an incomplete command
+ if( newlinepos < 0)
+ {
+ return NULL;
+ }
+ else
+ {
+ // add a newline
+ COORD cursorPos = { 0, 0 };
+ CONSOLE_SCREEN_BUFFER_INFO binfo;
+
+ GetConsoleScreenBufferInfo( hout, &binfo );
+ cursorPos.Y = binfo.srWindow.Bottom + 1;
+ SetConsoleCursorPosition( hout, cursorPos );
+ }
+
+
+ if( !ReadConsoleInput( hin, buff, newlinepos+1, &count ) )
+ return NULL;
+
+ for( i = 0; i < count; i++ )
+ {
+ if( buff[ i ].EventType == KEY_EVENT && buff[ i ].Event.KeyEvent.bKeyDown )
+ {
+ if( buff[ i ].Event.KeyEvent.wVirtualKeyCode == VK_BACK )
+ {
+ if( inputlen > 0 )
+ input[ --inputlen ] = '\0';
+ continue;
+ }
+ if( inputlen < ( sizeof( input ) - 1 ) &&
+ buff[ i ].Event.KeyEvent.uChar.AsciiChar )
+ {
+ input[ inputlen++ ] = buff[ i ].Event.KeyEvent.uChar.AsciiChar;
+ input[ inputlen ] = '\0';
+ }
+ }
+ }
+ if( !inputlen )
+ return NULL;
+ return input;
}
diff --git a/src/tools/asm/Makefile b/src/tools/asm/Makefile
deleted file mode 100644
index 52f1060d..00000000
--- a/src/tools/asm/Makefile
+++ /dev/null
@@ -1,43 +0,0 @@
-# yeah, couldn't do more simple really
-
-ifeq ($(PLATFORM),mingw32)
- BINEXT=.exe
-else
- BINEXT=
-endif
-
-ifeq ($(PLATFORM),sunos)
- INSTALL=ginstall
-else
- INSTALL=install
-endif
-
-CC=gcc
-Q3ASM_CFLAGS=-O2 -Wall -Werror -fno-strict-aliasing
-
-ifeq ($(PLATFORM),darwin)
- LCC_CFLAGS += -DMACOS_X=1
-endif
-
-ifndef USE_CCACHE
- USE_CCACHE=0
-endif
-
-ifeq ($(USE_CCACHE),1)
- CC := ccache $(CC)
- CXX := ccache $(CXX)
-endif
-
-default: q3asm
-
-q3asm: q3asm.c cmdlib.c
- $(CC) $(Q3ASM_CFLAGS) -o $@ $^
-
-clean:
- rm -f q3asm *~ *.o
-
-install: default
- $(INSTALL) -s -m 0755 q3asm$(BINEXT) ../
-
-uninstall:
- rm -f ../q3asm$(BINEXT)
diff --git a/src/tools/lcc/Makefile b/src/tools/lcc/Makefile
deleted file mode 100644
index 8dd5fb2b..00000000
--- a/src/tools/lcc/Makefile
+++ /dev/null
@@ -1,163 +0,0 @@
-TEMPDIR=/tmp
-A=.a
-O=.o
-
-ifeq ($(PLATFORM),mingw32)
- E=.exe
-else
- E=
-endif
-
-CC=gcc
-LCC_CFLAGS=-O2 -Wall -fno-strict-aliasing -MMD
-LDFLAGS=
-LD=gcc
-AR=ar
-ARFLAGS=cru
-RANLIB=ranlib
-DIFF=diff
-RM=rm -f
-RMDIR=rmdir
-BUILDDIR=build-$(PLATFORM)-$(ARCH)
-BD=$(BUILDDIR)/
-
-ifeq ($(USE_CCACHE),1)
- CC := ccache $(CC)
-endif
-
-# Need MACOS_X defined or this won't build.
-ifeq ($(PLATFORM),darwin)
- LCC_CFLAGS += -DMACOS_X
-endif
-
-ifeq ($(PLATFORM),sunos)
- INSTALL=ginstall
-else
- INSTALL=install
-endif
-
-all: q3rcc lburg q3cpp q3lcc
-
-q3rcc: makedirs $(BD)q3rcc$(E)
-lburg: makedirs $(BD)lburg$(E)
-q3cpp: makedirs $(BD)q3cpp$(E)
-q3lcc: makedirs $(BD)q3lcc$(E)
-
-makedirs:
- @if [ ! -d $(BD) ];then mkdir $(BD);fi
- @if [ ! -d $(BD)/etc ];then mkdir $(BD)/etc;fi
- @if [ ! -d $(BD)/rcc ];then mkdir $(BD)/rcc;fi
- @if [ ! -d $(BD)/cpp ];then mkdir $(BD)/cpp;fi
- @if [ ! -d $(BD)/lburg ];then mkdir $(BD)/lburg;fi
-
-# ===== RCC =====
-RCCOBJS= \
- $(BD)rcc/alloc$(O) \
- $(BD)rcc/bind$(O) \
- $(BD)rcc/bytecode$(O) \
- $(BD)rcc/dag$(O) \
- $(BD)rcc/dagcheck$(O) \
- $(BD)rcc/decl$(O) \
- $(BD)rcc/enode$(O) \
- $(BD)rcc/error$(O) \
- $(BD)rcc/event$(O) \
- $(BD)rcc/expr$(O) \
- $(BD)rcc/gen$(O) \
- $(BD)rcc/init$(O) \
- $(BD)rcc/inits$(O) \
- $(BD)rcc/input$(O) \
- $(BD)rcc/lex$(O) \
- $(BD)rcc/list$(O) \
- $(BD)rcc/main$(O) \
- $(BD)rcc/null$(O) \
- $(BD)rcc/output$(O) \
- $(BD)rcc/prof$(O) \
- $(BD)rcc/profio$(O) \
- $(BD)rcc/simp$(O) \
- $(BD)rcc/stmt$(O) \
- $(BD)rcc/string$(O) \
- $(BD)rcc/sym$(O) \
- $(BD)rcc/symbolic$(O) \
- $(BD)rcc/trace$(O) \
- $(BD)rcc/tree$(O) \
- $(BD)rcc/types$(O)
-
-$(BD)q3rcc$(E): $(RCCOBJS)
- $(LD) $(LDFLAGS) -o $@ $(RCCOBJS)
-
-$(BD)rcc/%$(O): src/%.c
- $(CC) $(LCC_CFLAGS) -c -Isrc -o $@ $<
-
-$(BD)rcc/dagcheck$(O): $(BD)rcc/dagcheck.c
- $(CC) $(LCC_CFLAGS) -Wno-unused -c -Isrc -o $@ $<
-
-$(BD)rcc/dagcheck.c: $(BD)lburg/lburg$(E) src/dagcheck.md
- $(BD)lburg/lburg$(E) src/dagcheck.md $@
-
-
-# ===== LBURG =====
-LBURGOBJS= \
- $(BD)lburg/lburg$(O) \
- $(BD)lburg/gram$(O)
-
-$(BD)lburg/lburg$(E): $(LBURGOBJS)
- $(LD) $(LDFLAGS) -o $@ $(LBURGOBJS)
-
-$(BD)lburg/%$(O): lburg/%.c
- $(CC) $(LCC_CFLAGS) -c -Ilburg -o $@ $<
-
-
-# ===== CPP =====
-CPPOBJS= \
- $(BD)cpp/cpp$(O) \
- $(BD)cpp/lex$(O) \
- $(BD)cpp/nlist$(O) \
- $(BD)cpp/tokens$(O) \
- $(BD)cpp/macro$(O) \
- $(BD)cpp/eval$(O) \
- $(BD)cpp/include$(O) \
- $(BD)cpp/hideset$(O) \
- $(BD)cpp/getopt$(O) \
- $(BD)cpp/unix$(O)
-
-$(BD)q3cpp$(E): $(CPPOBJS)
- $(LD) $(LDFLAGS) -o $@ $(CPPOBJS)
-
-$(BD)cpp/%$(O): cpp/%.c
- $(CC) $(LCC_CFLAGS) -c -Icpp -o $@ $<
-
-
-# ===== LCC =====
-LCCOBJS= \
- $(BD)etc/lcc$(O) \
- $(BD)etc/bytecode$(O)
-
-$(BD)q3lcc$(E): $(LCCOBJS)
- $(LD) $(LDFLAGS) -o $@ $(LCCOBJS)
-
-$(BD)etc/%$(O): etc/%.c
- $(CC) $(LCC_CFLAGS) -DTEMPDIR=\"$(TEMPDIR)\" -DSYSTEM=\"\" -c -Isrc -o $@ $<
-
-
-install: q3lcc q3cpp q3rcc
- $(INSTALL) -s -m 0755 $(BD)q3lcc$(E) ../
- $(INSTALL) -s -m 0755 $(BD)q3cpp$(E) ../
- $(INSTALL) -s -m 0755 $(BD)q3rcc$(E) ../
-
-uninstall:
- -$(RM) ../q3lcc$(E)
- -$(RM) ../q3cpp$(E)
- -$(RM) ../q3rcc$(E)
-
-clean:
- if [ -d $(BD) ];then (find $(BD) -name '*.d' -exec rm {} \;)fi
- $(RM) $(RCCOBJS) $(LBURGOBJS) $(CPPOBJS) $(LCCOBJS)
- $(RM) $(BD)rcc/dagcheck.c $(BD)lburg/lburg$(E)
- $(RM) $(BD)q3lcc$(E) $(BD)q3cpp$(E) $(BD)q3rcc$(E)
- $(RM) -r $(BD)
-
-D_FILES=$(shell find . -name '*.d')
-
-ifneq ($(strip $(D_FILES)),)
- include $(D_FILES)
-endif