[iortcw] 289/497: SP: Fix Raspberry Pi build to work with SDL2
Simon McVittie
smcv at debian.org
Fri Sep 8 10:37:09 UTC 2017
This is an automated email from the git hooks/post-receive script.
smcv pushed a commit to annotated tag 1.42d
in repository iortcw.
commit 89db06edf2b628edf17e0e5a4968bb744c9e280c
Author: M4N4T4RMS at gmail.com <M4N4T4RMS at gmail.com@e65d2741-a53d-b2dc-ae96-bb75fa5e4c4a>
Date: Wed Feb 11 23:29:42 2015 +0000
SP: Fix Raspberry Pi build to work with SDL2
---
SP/Makefile | 31 +-
SP/README_RASPBERRYPI | 33 +
SP/README_VC | 14 -
SP/code/client/cl_cin.c | 11 +
SP/code/es/es_gamma.c | 34 -
SP/code/es/es_glimp.c | 547 ---------------
SP/code/es/es_input.c | 346 ----------
SP/code/es/es_snd.c | 76 ---
SP/code/es/etc1encode.c | 1129 ------------------------------
SP/code/game/g_main.c | 6 +-
SP/code/qcommon/q_shared.h | 5 -
SP/code/renderer/qgl.h | 1404 +++++++++++++++++++-------------------
SP/code/renderer/tr_animation.c | 6 +-
SP/code/renderer/tr_backend.c | 153 ++---
SP/code/renderer/tr_bloom.c | 26 +
SP/code/renderer/tr_cmds.c | 14 +-
SP/code/renderer/tr_image.c | 275 ++++++--
SP/code/renderer/tr_init.c | 34 +-
SP/code/renderer/tr_local.h | 9 +-
SP/code/renderer/tr_main.c | 25 +-
SP/code/renderer/tr_shade.c | 97 +--
SP/code/renderer/tr_shadows.c | 89 ++-
SP/code/renderer/tr_sky.c | 123 ++--
SP/code/renderer/tr_surface.c | 84 ++-
SP/code/sdl/sdl_glimp.c | 49 ++
SP/code/splines/q_splineshared.h | 5 -
SP/code/sys/sys_loadlib.h | 16 -
SP/code/sys/sys_main.c | 18 -
SP/make-raspberrypi.sh | 8 +-
29 files changed, 1412 insertions(+), 3255 deletions(-)
diff --git a/SP/Makefile b/SP/Makefile
index f3c99fd..50a17f6 100644
--- a/SP/Makefile
+++ b/SP/Makefile
@@ -36,7 +36,7 @@ ifndef BUILD_BASEGAME
BUILD_BASEGAME =
endif
ifndef BUILD_RENDERER_REND2
- BUILD_RENDERER_REND2 =
+ BUILD_RENDERER_REND2 =
endif
ifndef BUILD_ARCHIVE
BUILD_ARCHIVE = 0
@@ -259,6 +259,10 @@ ifndef USE_OPENGLES
USE_OPENGLES=0
endif
+ifndef RASPBERRY_PI
+RASPBERRY_PI=0
+endif
+
#############################################################################
@@ -415,13 +419,22 @@ ifneq (,$(findstring "$(PLATFORM)", "linux" "gnu_kfreebsd" "kfreebsd-gnu"))
LIBS=-ldl -lm
ifeq ($(USE_OPENGLES),1)
- CLIENT_LIBS=-lSDL2
- RENDERER_LIBS =-lSDL2 -lvchostif -lvcfiled_check -lbcm_host -lkhrn_static -lvchiq_arm -lopenmaxil -lEGL -lGLESv2 -lvcos
- SERVER_LIBS=-lbcm_host -lvchiq_arm -lvcos
+ ifeq ($(RASPBERRY_PI),1)
+ BASE_CFLAGS += -DUSE_OPENGLES
+ LDFLAGS += -L/opt/vc/lib
+ CLIENT_LIBS = $(SDL_LIBS) -lbcm_host
+ RENDERER_LIBS = $(SDL_LIBS) -lEGL -lGLESv1_CM -lbcm_host
+ SERVER_LIBS= -lbcm_host
+ else
+ BASE_CFLAGS += -DUSE_OPENGLES
+ CLIENT_LIBS = $(SDL_LIBS)
+ RENDERER_LIBS = $(SDL_LIBS) -lEGL -lGLESv1_CM
+ SERVER_LIBS =
+ endif
else
- CLIENT_LIBS=$(SDL_LIBS)
+ CLIENT_LIBS = $(SDL_LIBS)
RENDERER_LIBS = $(SDL_LIBS) -lGL
- SERVER_LIBS=
+ SERVER_LIBS =
endif
ifeq ($(USE_OPENAL),1)
@@ -1783,14 +1796,8 @@ ifeq ($(USE_BLOOM),1)
Q3ROBJ += $(B)/renderer/tr_bloom.o
endif
-ifeq ($(USE_OPENGLES),1)
- Q3ROBJ += $(B)/renderer/es_gamma.o
- Q3ROBJ += $(B)/renderer/es_glimp.o
- Q3ROBJ += $(B)/renderer/etc1encode.o
-else
Q3ROBJ += $(B)/renderer/sdl_gamma.o
Q3ROBJ += $(B)/renderer/sdl_glimp.o
-endif
ifneq ($(USE_RENDERER_DLOPEN), 0)
Q3ROBJ += \
diff --git a/SP/README_RASPBERRYPI b/SP/README_RASPBERRYPI
new file mode 100644
index 0000000..e599716
--- /dev/null
+++ b/SP/README_RASPBERRYPI
@@ -0,0 +1,33 @@
+To run iortcw on the Raspberry Pi requires SDL2.
+
+SDL2 will need to be built in a particular way to have hardware accelerated
+graphics.
+
+Download the SDL2 source code (2.0.3 at the time of this writing) from:
+
+http://libsdl.org/release/SDL2-2.0.3.tar.gz
+
+You will need to install the libudev development files for mouse support.
+On the Raspbian distro, this is done by running the command:
+
+sudo apt-get install libudev-dev
+
+You will also need to disable x11 (software rendering) and opengl (not supported
+on the Raspberry Pi.)
+
+Unpack the SDL source and go into the source tree and issue the command:
+
+./configure --disable-video-x11 --disable-video-opengl
+
+After that has completed, type:
+make
+
+If build completes successfully, type:
+sudo make install
+
+
+At this point you can go into the iortcw source tree and type:
+./make-raspberry-pi.sh
+
+Output binaries will be located in the 'build' directory, which you can copy
+into your RTCW install directory.
diff --git a/SP/README_VC b/SP/README_VC
deleted file mode 100644
index 825bb13..0000000
--- a/SP/README_VC
+++ /dev/null
@@ -1,14 +0,0 @@
-All BCM2835-specific modifications are enclosed by one of
-
-VCMODS_MISC - small miscellaneous changes
-VCMODS_OPENGLES - remove desktop GL dependencies
-VCMODS_DEPTH - remove depth buffer clears
-VCMODS_REPLACETRIG - replace sin with sinf etc
-VCMODS_NOSDL - remove SDL dependencies
-
-Build-Depends:
- libcurl4-gnutls-dev libjpeg8-dev libopenal-dev libsdl1.2-dev libspeexdsp-dev libvorbis-dev
-
-Run:
-./make-raspberrypi.sh
-
diff --git a/SP/code/client/cl_cin.c b/SP/code/client/cl_cin.c
index f4a985e..653f1f9 100644
--- a/SP/code/client/cl_cin.c
+++ b/SP/code/client/cl_cin.c
@@ -611,11 +611,18 @@ static unsigned short yuv_to_rgb( long y, long u, long v ) {
*
******************************************************************************/
static unsigned int yuv_to_rgb24( long y, long u, long v ) {
+#ifdef USE_OPENGLES
+ long a,r,g,b,YY = (long)( ROQ_YY_tab[( y )]);
+#else
long r,g,b,YY = (long)( ROQ_YY_tab[( y )] );
+#endif
r = ( YY + ROQ_VR_tab[v] ) >> 6;
g = ( YY + ROQ_UG_tab[u] + ROQ_VG_tab[v] ) >> 6;
b = ( YY + ROQ_UB_tab[u] ) >> 6;
+#ifdef USE_OPENGLES
+ a = 255;
+#endif
if ( r < 0 ) {
r = 0;
@@ -636,7 +643,11 @@ static unsigned int yuv_to_rgb24( long y, long u, long v ) {
b = 255;
}
+#ifdef USE_OPENGLES
+ return LittleLong( ( r ) | ( g << 8 ) | ( b << 16 ) | ( 255 << 24 ) | ( a << 24 ) );
+#else
return LittleLong( ( r ) | ( g << 8 ) | ( b << 16 ) | ( 255 << 24 ) );
+#endif
}
/******************************************************************************
diff --git a/SP/code/es/es_gamma.c b/SP/code/es/es_gamma.c
deleted file mode 100644
index a5b86f5..0000000
--- a/SP/code/es/es_gamma.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-===========================================================================
-Copyright (C) 1999-2005 Id Software, Inc.
-
-This file is part of Quake III Arena source code.
-
-Quake III Arena source code 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.
-
-Quake III Arena source code 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 Quake III Arena source code; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-===========================================================================
-*/
-
-#include "../renderer/tr_local.h"
-#include "../qcommon/qcommon.h"
-
-/*
-=================
-GLimp_SetGamma
-=================
-*/
-void GLimp_SetGamma( unsigned char red[256], unsigned char green[256], unsigned char blue[256] )
-{
-}
-
diff --git a/SP/code/es/es_glimp.c b/SP/code/es/es_glimp.c
deleted file mode 100644
index 87b164b..0000000
--- a/SP/code/es/es_glimp.c
+++ /dev/null
@@ -1,547 +0,0 @@
-/*
-===========================================================================
-Copyright (C) 1999-2005 Id Software, Inc.
-
-This file is part of Quake III Arena source code.
-
-Quake III Arena source code 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.
-
-Quake III Arena source code 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 Quake III Arena source code; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-===========================================================================
-*/
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-
-#ifndef VCMODS_NOSDL
-#ifdef USE_LOCAL_HEADERS
-# include "SDL.h"
-#else
-# include <SDL.h>
-#endif
-#endif
-
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-
-#include "../renderer/tr_local.h"
-#include "../client/client.h"
-#include "../sys/sys_local.h"
-
-typedef enum
-{
- RSERR_OK,
-
- RSERR_INVALID_FULLSCREEN,
- RSERR_INVALID_MODE,
-
- RSERR_UNKNOWN
-} rserr_t;
-
-SDL_Window *SDL_window = NULL;
-static SDL_GLContext *SDL_glContext = NULL;
-
-void (* qglLockArraysEXT) (GLint first, GLsizei count) = NULL;
-void (* qglUnlockArraysEXT) (void) = NULL;
-
-extern void etc1_compress_tex_image(
- GLenum target,
- GLint level,
- GLenum internalformat,
- GLsizei width,
- GLsizei height,
- GLint border,
- GLenum format,
- GLenum type,
- const GLvoid *pixels);
-
-static int isopaque(GLint width, GLint height, const GLvoid *pixels)
-{
- unsigned char const *cpixels = (unsigned char const *)pixels;
-
- int i;
-
- for (i = 0; i < width * height; i++) {
- if (cpixels[i*4+3] != 0xff)
- return 0;
- }
-
- return 1;
-}
-
-void rgba4444_convert_tex_image(
- GLenum target,
- GLint level,
- GLenum internalformat,
- GLsizei width,
- GLsizei height,
- GLint border,
- GLenum format,
- GLenum type,
- const GLvoid *pixels)
-{
- unsigned char const *cpixels = (unsigned char const *)pixels;
-
- unsigned short *rgba4444data = malloc(2 * width * height);
-
- int i;
-
- for (i = 0; i < width * height; i++) {
- unsigned char r,g,b,a;
-
- r = cpixels[4*i]>>4;
- g = cpixels[4*i+1]>>4;
- b = cpixels[4*i+2]>>4;
- a = cpixels[4*i+3]>>4;
-
- rgba4444data[i] = r << 12 | g << 8 | b << 4 | a;
- }
-
- glTexImage2D(target, level, format, width, height,border,format,GL_UNSIGNED_SHORT_4_4_4_4,rgba4444data);
-
- free(rgba4444data);
-}
-
-void myglTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
-{
- static int opaque = 0;
-
- if (format == GL_RGB && type == GL_UNSIGNED_BYTE) {
- assert(level == 0);
- opaque = 1;
-
- etc1_compress_tex_image(target, level, format, width, height, border, format, type, pixels);
- } else if (format == GL_RGBA && type == GL_UNSIGNED_BYTE) {
- if (level == 0)
- opaque = isopaque(width, height, pixels);
-
- if (opaque)
- etc1_compress_tex_image(target, level, format, width, height, border, format, type, pixels);
- else
- rgba4444_convert_tex_image(target, level, format, width, height, border, format, type, pixels);
- } else
- assert(0);
-}
-
-static int firstclear = 1;
-
-void myglClear(GLbitfield mask)
-{
- if (firstclear) {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- firstclear = 0;
- }
-}
-
-/* TODO any other functions that need modifying for stereo? eg glReadPixels? */
-
-static GLenum draw_buffer = GL_BACK;
-static struct rect_t {
- GLint x, y;
- GLsizei w, h;
-} viewport = {0, 0, -1, -1}, scissor = {0, 0, -1, -1};
-
-static void fix_rect(struct rect_t *r)
-{
- if (r->w == -1) { r->w = glConfig.vidWidth; }
- if (r->h == -1) { r->h = glConfig.vidHeight; }
-}
-
-static void fudge_rect(struct rect_t *out, const struct rect_t *in,
- int xshift, int xoffset)
-{
- out->x = xoffset + (in->x >> xshift);
- out->y = in->y;
- out->w = (xoffset + ((in->x + in->w) >> xshift)) - out->x;
- out->h = in->h;
-}
-
-static void update_viewport_and_scissor(void)
-{
- int xshift = 0, xoffset = 0;
- struct rect_t r;
-
- switch (draw_buffer) {
- case GL_BACK_LEFT:
- xshift = 1;
- break;
- case GL_BACK_RIGHT:
- xshift = 1;
- xoffset = glConfig.vidWidth >> 1;
- break;
- }
-
- fix_rect(&viewport);
- fudge_rect(&r, &viewport, xshift, xoffset);
- glViewport(r.x, r.y, r.w, r.h);
-
- fix_rect(&scissor);
- fudge_rect(&r, &scissor, xshift, xoffset);
- glScissor(r.x, r.y, r.w, r.h);
-}
-
-void myglDrawBuffer(GLenum mode)
-{
- draw_buffer = mode;
- update_viewport_and_scissor();
-}
-
-void myglViewport(GLint x, GLint y, GLsizei width, GLsizei height)
-{
- viewport.x = x;
- viewport.y = y;
- viewport.w = width;
- viewport.h = height;
- update_viewport_and_scissor();
-}
-
-void myglScissor(GLint x, GLint y, GLsizei width, GLsizei height)
-{
- scissor.x = x;
- scissor.y = y;
- scissor.w = width;
- scissor.h = height;
- update_viewport_and_scissor();
-}
-
-/*
-===============
-GLimp_Shutdown
-===============
-*/
-void GLimp_Shutdown( void )
-{
-}
-
-/*
-===============
-GLimp_LogComment
-===============
-*/
-void GLimp_LogComment( char *comment )
-{
-}
-
-/*
-===============
-GLimp_Minimize
-
-Minimize the game so that user is back at the desktop
-===============
-*/
-void GLimp_Minimize(void)
-{
-}
-
-/*
-===============
-GLimp_StartDriverAndSetMode
-===============
-*/
-
-static EGLDisplay g_EGLDisplay;
-static EGLConfig g_EGLConfig;
-static EGLContext g_EGLContext;
-static EGLSurface g_EGLWindowSurface;
-
-static qboolean GLimp_StartDriverAndSetMode( int mode, qboolean fullscreen, NativeWindowType hWnd )
-{
- /* TODO cleanup on failure... */
-
- /* EGL Setup */
- const EGLint s_configAttribs[] =
- {
- EGL_RED_SIZE, 5,
- EGL_GREEN_SIZE, 6,
- EGL_BLUE_SIZE, 5,
- EGL_ALPHA_SIZE, 0,
- EGL_DEPTH_SIZE, 16,
- EGL_STENCIL_SIZE, 0,
- EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
- EGL_SAMPLE_BUFFERS, 1,
- EGL_NONE
- };
-
- EGLint numConfigs;
- EGLint majorVersion;
- EGLint minorVersion;
-
-#ifndef VCMODS_NOSDL
- if (!SDL_WasInit(SDL_INIT_VIDEO))
- {
- const char *driverName;
-
- if (SDL_Init(SDL_INIT_VIDEO) == -1)
- {
- ri.Printf( PRINT_ALL, "SDL_Init( SDL_INIT_VIDEO ) FAILED (%s)\n",
- SDL_GetError());
- return qfalse;
- }
-
- driverName = SDL_GetCurrentVideoDriver( );
- ri.Printf( PRINT_ALL, "SDL using driver \"%s\"\n", driverName );
- Cvar_Set( "r_sdlDriver", driverName );
-
- if( SDL_GL_MakeCurrent( SDL_window, SDL_glContext ) < 0 ) {
- ri.Printf( PRINT_DEVELOPER, "SDL_GL_MakeCurrent failed: %s\n", SDL_GetError( ) );
- return qfalse;
- }
- }
-#endif
-
- g_EGLDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- if (g_EGLDisplay == EGL_NO_DISPLAY) {
- ri.Printf(PRINT_ALL, "eglGetDisplay() failed\n");
- return qfalse;
- }
-
- if (!eglInitialize(g_EGLDisplay, &majorVersion, &minorVersion)) {
- ri.Printf(PRINT_ALL, "eglInitialize() failed\n");
- return qfalse;
- }
- if (!eglSaneChooseConfigBRCM(g_EGLDisplay, s_configAttribs, &g_EGLConfig, 1, &numConfigs)) {
- ri.Printf(PRINT_ALL, "eglSaneChooseConfigBRCM() failed\n");
- return qfalse;
- }
- if (numConfigs == 0) {
- ri.Printf(PRINT_ALL, "Couldn't find suitable config!\n");
- return qfalse;
- }
-
- {
- EGLint r, g, b, a, depth, stencil, samples, sample_buffers;
- eglGetConfigAttrib(g_EGLDisplay, g_EGLConfig, EGL_RED_SIZE, &r);
- eglGetConfigAttrib(g_EGLDisplay, g_EGLConfig, EGL_GREEN_SIZE, &g);
- eglGetConfigAttrib(g_EGLDisplay, g_EGLConfig, EGL_BLUE_SIZE, &b);
- eglGetConfigAttrib(g_EGLDisplay, g_EGLConfig, EGL_ALPHA_SIZE, &a);
- eglGetConfigAttrib(g_EGLDisplay, g_EGLConfig, EGL_DEPTH_SIZE, &depth);
- eglGetConfigAttrib(g_EGLDisplay, g_EGLConfig, EGL_STENCIL_SIZE, &stencil);
- eglGetConfigAttrib(g_EGLDisplay, g_EGLConfig, EGL_SAMPLES, &samples);
- eglGetConfigAttrib(g_EGLDisplay, g_EGLConfig, EGL_SAMPLE_BUFFERS, &sample_buffers);
- ri.Printf(PRINT_ALL, "Chose EGL config %d: r=%d,g=%d,b=%d,a=%d, "
- "depth=%d,stencil=%d, samples=%d,sample_buffers=%d\n",
- (int)g_EGLConfig, r, g, b, a, depth, stencil, samples, sample_buffers);
- }
-
- g_EGLContext = eglCreateContext(g_EGLDisplay, g_EGLConfig, NULL, NULL);
- if (g_EGLContext == EGL_NO_CONTEXT) {
- ri.Printf(PRINT_ALL, "eglCreateContext() failed\n");
- return qfalse;
- }
-
- ri.Printf(PRINT_ALL, "Using native window %d\n", (int)hWnd);
-
- g_EGLWindowSurface = eglCreateWindowSurface(g_EGLDisplay, g_EGLConfig, hWnd, NULL);
- if (g_EGLWindowSurface == EGL_NO_SURFACE) {
- ri.Printf(PRINT_ALL, "eglCreateWindowSurface() failed\n");
- return qfalse;
- }
-
- eglMakeCurrent(g_EGLDisplay, g_EGLWindowSurface, g_EGLWindowSurface, g_EGLContext);
-
- {
- EGLint width, height, color, depth, stencil;
- eglQuerySurface(g_EGLDisplay, g_EGLWindowSurface, EGL_WIDTH, &width);
- eglQuerySurface(g_EGLDisplay, g_EGLWindowSurface, EGL_HEIGHT, &height);
- ri.Printf(PRINT_ALL, "Window size: %dx%d\n", width, height);
- eglGetConfigAttrib(g_EGLDisplay, g_EGLConfig, EGL_BUFFER_SIZE, &color);
- eglGetConfigAttrib(g_EGLDisplay, g_EGLConfig, EGL_DEPTH_SIZE, &depth);
- eglGetConfigAttrib(g_EGLDisplay, g_EGLConfig, EGL_STENCIL_SIZE, &stencil);
- glConfig.vidWidth = width;
- glConfig.vidHeight = height;
- glConfig.colorBits = color;
- glConfig.depthBits = depth;
- glConfig.stencilBits = stencil;
- }
-
- if(r_stereoEnabled->integer)
- glConfig.stereoEnabled = qtrue;
- else
- glConfig.stereoEnabled = qfalse;
-
- return qtrue;
-}
-
-static qboolean GLimp_HaveExtension(const char *ext)
-{
- return qfalse;
-}
-
-
-/*
-===============
-GLimp_InitExtensions
-===============
-*/
-static void GLimp_InitExtensions( void )
-{
- if ( !r_allowExtensions->integer )
- {
- ri.Printf( PRINT_ALL, "* IGNORING OPENGL EXTENSIONS *\n" );
- return;
- }
-
- ri.Printf( PRINT_ALL, "Initializing OpenGL extensions\n" );
-
- glConfig.textureCompression = TC_NONE;
-
- // GL_EXT_texture_compression_s3tc
- if ( GLimp_HaveExtension( "GL_ARB_texture_compression" ) &&
- GLimp_HaveExtension( "GL_EXT_texture_compression_s3tc" ) )
- {
- if ( r_ext_compressed_textures->value )
- {
- glConfig.textureCompression = TC_S3TC_ARB;
- ri.Printf( PRINT_ALL, "...using GL_EXT_texture_compression_s3tc\n" );
- }
- else
- {
- ri.Printf( PRINT_ALL, "...ignoring GL_EXT_texture_compression_s3tc\n" );
- }
- }
- else
- {
- ri.Printf( PRINT_ALL, "...GL_EXT_texture_compression_s3tc not found\n" );
- }
-
- // GL_S3_s3tc ... legacy extension before GL_EXT_texture_compression_s3tc.
- if (glConfig.textureCompression == TC_NONE)
- {
- if ( GLimp_HaveExtension( "GL_S3_s3tc" ) )
- {
- if ( r_ext_compressed_textures->value )
- {
- glConfig.textureCompression = TC_S3TC;
- ri.Printf( PRINT_ALL, "...using GL_S3_s3tc\n" );
- }
- else
- {
- ri.Printf( PRINT_ALL, "...ignoring GL_S3_s3tc\n" );
- }
- }
- else
- {
- ri.Printf( PRINT_ALL, "...GL_S3_s3tc not found\n" );
- }
- }
-
-
- // GL_EXT_texture_env_add
- glConfig.textureEnvAddAvailable = qtrue;
-
- textureFilterAnisotropic = qfalse;
-}
-
-/*
-===============
-GLimp_Init
-
-This routine is responsible for initializing the OS specific portions
-of OpenGL
-===============
-*/
-void GLimp_Init( void )
-{
- qboolean success = qtrue;
-
- Sys_GLimpInit( );
-
- // create the window and set up the context
- if( !GLimp_StartDriverAndSetMode( r_mode->integer, r_fullscreen->integer,
- (NativeWindowType)ri.Cvar_Get("vc_wnd", "0", CVAR_LATCH)->integer))
- {
- success = qfalse;
- }
-
- if( !success )
- ri.Error( ERR_FATAL, "GLimp_Init() - could not load OpenGL subsystem\n" );
-
- // This values force the UI to disable driver selection
- glConfig.driverType = GLDRV_ICD;
- glConfig.hardwareType = GLHW_GENERIC;
- glConfig.deviceSupportsGamma = qfalse;
-
- // get our config strings
- Q_strncpyz( glConfig.vendor_string, (char *) qglGetString (GL_VENDOR), sizeof( glConfig.vendor_string ) );
- Q_strncpyz( glConfig.renderer_string, (char *) qglGetString (GL_RENDERER), sizeof( glConfig.renderer_string ) );
- if (*glConfig.renderer_string && glConfig.renderer_string[strlen(glConfig.renderer_string) - 1] == '\n')
- glConfig.renderer_string[strlen(glConfig.renderer_string) - 1] = 0;
- Q_strncpyz( glConfig.version_string, (char *) qglGetString (GL_VERSION), sizeof( glConfig.version_string ) );
- Q_strncpyz( glConfig.extensions_string, (char *) qglGetString (GL_EXTENSIONS), sizeof( glConfig.extensions_string ) );
-
- // initialize extensions
- GLimp_InitExtensions( );
-
- ri.Cvar_Get( "r_availableModes", "", CVAR_ROM );
-
- // This depends on SDL_INIT_VIDEO, hence having it here
- IN_Init( SDL_window );
-}
-
-
-/*
-===============
-GLimp_EndFrame
-
-Responsible for doing a swapbuffers
-===============
-*/
-
-int last = 0;
-int mod = 0;
-
-void GLimp_EndFrame( void )
-{
- eglSwapBuffers(g_EGLDisplay, g_EGLWindowSurface);
- firstclear = 1;
-/*
- if ((++mod & 31) == 0) {
- DWORD time = GetCurrentTime();
- char buf[64];
-
- sprintf(buf, "%d\n", (time-last) / 32);
- OutputDebugString(buf);
-
- last = time;
- }
-*/
-}
-
-
-
-// No SMP - stubs
-void GLimp_RenderThreadWrapper( void *arg )
-{
-}
-
-qboolean GLimp_SpawnRenderThread( void (*function)( void ) )
-{
- ri.Printf( PRINT_WARNING, "ERROR: SMP support was disabled at compile time\n");
- return qfalse;
-}
-
-void *GLimp_RendererSleep( void )
-{
- return NULL;
-}
-
-void GLimp_FrontEndSleep( void )
-{
-}
-
-void GLimp_WakeRenderer( void *data )
-{
-}
-
diff --git a/SP/code/es/es_input.c b/SP/code/es/es_input.c
deleted file mode 100644
index 5b729b7..0000000
--- a/SP/code/es/es_input.c
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
-===========================================================================
-Copyright (C) 1999-2005 Id Software, Inc.
-
-This file is part of Quake III Arena source code.
-
-Quake III Arena source code 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.
-
-Quake III Arena source code 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 Quake III Arena source code; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-===========================================================================
-*/
-
-#include "../renderer/tr_local.h"
-#include "../client/client.h"
-#include "../sys/sys_local.h"
-
-// q3rev.cpp : Defines the entry point for the application.
-//
-
-#ifdef _WIN32
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-/*
-===============
-IN_TranslateSDLToQ3Key
-===============
-*/
-static keyNum_t IN_TranslateWinToQ3Key( int vk )
-{
- switch( vk )
- {
- case VK_LEFT: return K_LEFTARROW;
- case VK_RIGHT: return K_RIGHTARROW;
- case VK_DOWN: return K_DOWNARROW;
- case VK_UP: return K_UPARROW;
- case VK_RETURN: return K_ENTER;
- case VK_CONTROL:
- return K_CTRL;
- case VK_SHIFT:
- return K_SHIFT;
- case VK_ESCAPE:
- return K_ESCAPE;
- }
-
- if (vk >= 'A' && vk <= 'Z' || vk >= '0' && vk <= '9')
- return vk;
-
- return 0;
-}
-
-// Forward declarations of functions included in this code module:
-ATOM MyRegisterClass(HINSTANCE hInstance);
-BOOL InitInstance(HINSTANCE, int);
-
-LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
-
-
-//
-// FUNCTION: MyRegisterClass()
-//
-// PURPOSE: Registers the window class.
-//
-// COMMENTS:
-//
-// This function and its usage are only necessary if you want this code
-// to be compatible with Win32 systems prior to the 'RegisterClassEx'
-// function that was added to Windows 95. It is important to call this function
-// so that the application will get 'well formed' small icons associated
-// with it.
-//
-ATOM MyRegisterClass(HINSTANCE hInstance)
-{
- WNDCLASSEX wcex;
-
- wcex.cbSize = sizeof(WNDCLASSEX);
-
- wcex.style = CS_HREDRAW | CS_VREDRAW;
- wcex.lpfnWndProc = WndProc;
- wcex.cbClsExtra = 0;
- wcex.cbWndExtra = 0;
- wcex.hInstance = hInstance;
- wcex.hIcon = NULL;
- wcex.hCursor = NULL;
- wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
- wcex.lpszMenuName = NULL;
- wcex.lpszClassName = "Q3CLS";
- wcex.hIconSm = NULL;
-
- return RegisterClassEx(&wcex);
-}
-
-//
-// FUNCTION: InitInstance(HINSTANCE, int)
-//
-// PURPOSE: Saves instance handle and creates main window
-//
-// COMMENTS:
-//
-// In this function, we save the instance handle in a global variable and
-// create and display the main program window.
-//
-
-extern HINSTANCE g_hInstance;
-
-BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
-{
- HWND hWnd;
-
- hWnd = CreateWindow("Q3CLS", "Quake 3", WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
-
- if (!hWnd)
- {
- return FALSE;
- }
-
- ShowWindow(hWnd, nCmdShow);
- UpdateWindow(hWnd);
-
- return TRUE;
-}
-
-//
-// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
-//
-// PURPOSE: Processes messages for the main window.
-//
-// WM_COMMAND - process the application menu
-// WM_PAINT - Paint the main window
-// WM_DESTROY - post a quit message and return
-//
-//
-LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- int wmId, wmEvent;
- PAINTSTRUCT ps;
- HDC hdc;
- const char *character = NULL;
- keyNum_t key = 0;
-
- switch (message)
- {
- case WM_COMMAND:
- wmId = LOWORD(wParam);
- wmEvent = HIWORD(wParam);
- // Parse the menu selections:
- switch (wmId)
- {
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- break;
- case WM_KEYDOWN:
- key = IN_TranslateWinToQ3Key( wParam );
-
- if( key )
- Com_QueueEvent( 0, SE_KEY, key, qtrue, 0, NULL );
- break;
- case WM_KEYUP:
- key = IN_TranslateWinToQ3Key( wParam );
-
- if( key )
- Com_QueueEvent( 0, SE_KEY, key, qfalse, 0, NULL );
- break;
- case WM_CHAR:
- Com_QueueEvent( 0, SE_CHAR, wParam, 0, 0, NULL );
- break;
- case WM_PAINT:
- hdc = BeginPaint(hWnd, &ps);
- // TODO: Add any drawing code here...
- EndPaint(hWnd, &ps);
- break;
- case WM_DESTROY:
- PostQuitMessage(0);
- break;
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- return 0;
-}
-
-/*
-===============
-IN_ProcessEvents
-===============
-*/
-static void IN_ProcessEvents( void )
-{
- MSG msg;
-
- if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {
- if (!GetMessage(&msg, NULL, 0, 0))
- Sys_Quit();
-
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
-}
-
-/*
-===============
-IN_Init
-===============
-*/
-void IN_Init( void )
-{
- MyRegisterClass(g_hInstance);
- InitInstance (g_hInstance, SW_SHOW);
-}
-
-#else
-
-#include <unistd.h>
-#include <termios.h>
-#include <stdio.h>
-#include <sys/select.h>
-
-#define NB_DISABLE 0
-#define NB_ENABLE 1
-
-int kbhit( void )
-{
- struct timeval tv;
- fd_set fds;
- tv.tv_sec = 0;
- tv.tv_usec = 0;
- FD_ZERO(&fds);
- FD_SET(STDIN_FILENO, &fds); //STDIN_FILENO is 0
- select(STDIN_FILENO+1, &fds, NULL, NULL, &tv);
- return FD_ISSET(STDIN_FILENO, &fds);
-}
-
-void nonblock(int state)
-{
- struct termios ttystate;
-
- //get the terminal state
- tcgetattr(STDIN_FILENO, &ttystate);
-
- if (state==NB_ENABLE)
- {
- //turn off canonical mode
- ttystate.c_lflag &= ~ICANON;
- //minimum of number input read.
- ttystate.c_cc[VMIN] = 1;
- }
- else if (state==NB_DISABLE)
- {
- //turn on canonical mode
- ttystate.c_lflag |= ICANON;
- }
- //set the terminal attributes.
- tcsetattr(STDIN_FILENO, TCSANOW, &ttystate);
-}
-
-/*
-===============
-IN_TranslateSDLToQ3Key
-===============
-*/
-static keyNum_t IN_TranslateCharToQ3Key( char c )
-{
- switch (c) {
- case ';': return K_LEFTARROW;
- case '#': return K_RIGHTARROW;
- case '\'': return K_DOWNARROW;
- case '[': return K_UPARROW;
- case ']': return K_CONSOLE;
- case 10: return K_ENTER;
- }
-
- return c;
-}
-
-/*
-===============
-IN_ProcessEvents
-===============
-*/
-static void IN_ProcessEvents( void )
-{
- while (kbhit()) {
- char c = fgetc(stdin);
-
- int key = IN_TranslateCharToQ3Key(c);
-
- Com_QueueEvent( 0, SE_CHAR, c, 0, 0, NULL );
-
- if( key ) {
- Com_QueueEvent( 0, SE_KEY, key, qtrue, 0, NULL );
- Com_QueueEvent( 0, SE_KEY, key, qfalse, 0, NULL );
- }
- }
-}
-
-/*
-===============
-IN_Init
-===============
-*/
-void IN_Init( void )
-{
- nonblock(NB_ENABLE);
-}
-
-#endif
-
-/*
-===============
-IN_Frame
-===============
-*/
-void IN_Frame( void )
-{
- IN_ProcessEvents( );
-}
-
-/*
-===============
-IN_Shutdown
-===============
-*/
-void IN_Shutdown( void )
-{
-}
-
-/*
-===============
-IN_Restart
-===============
-*/
-void IN_Restart( void )
-{
-}
diff --git a/SP/code/es/es_snd.c b/SP/code/es/es_snd.c
deleted file mode 100644
index f22ef87..0000000
--- a/SP/code/es/es_snd.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
-===========================================================================
-Copyright (C) 1999-2005 Id Software, Inc.
-
-This file is part of Quake III Arena source code.
-
-Quake III Arena source code 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.
-
-Quake III Arena source code 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 Quake III Arena source code; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-===========================================================================
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "../qcommon/q_shared.h"
-#include "../client/snd_local.h"
-
-/*
-===============
-SNDDMA_Init
-===============
-*/
-qboolean SNDDMA_Init(void)
-{
- return qtrue;
-}
-
-/*
-===============
-SNDDMA_GetDMAPos
-===============
-*/
-int SNDDMA_GetDMAPos(void)
-{
- return 0;
-}
-
-/*
-===============
-SNDDMA_Shutdown
-===============
-*/
-void SNDDMA_Shutdown(void)
-{
-}
-
-/*
-===============
-SNDDMA_Submit
-
-Send sound to device if buffer isn't really the dma buffer
-===============
-*/
-void SNDDMA_Submit(void)
-{
-}
-
-/*
-===============
-SNDDMA_BeginPainting
-===============
-*/
-void SNDDMA_BeginPainting (void)
-{
-}
diff --git a/SP/code/es/etc1encode.c b/SP/code/es/etc1encode.c
deleted file mode 100644
index d645d0d..0000000
--- a/SP/code/es/etc1encode.c
+++ /dev/null
@@ -1,1129 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-#include <math.h>
-#include <float.h>
-#include <assert.h>
-#include "GLES/gl.h"
-#include "GLES/glext.h"
-
-#if !defined(max)
-#define max(a, b) ((a) < (b) ? (b) : (a))
-#define min(a, b) ((a) > (b) ? (b) : (a))
-#endif
-
-#define RED_TO_Y 0.299
-#define GREEN_TO_Y 0.587
-#define BLUE_TO_Y 0.114
-
-#define GREY_TO_Y (RED_TO_Y + GREEN_TO_Y + BLUE_TO_Y)
-
-#define RED_VALUE 0.299
-#define GREEN_VALUE 0.587
-#define BLUE_VALUE 0.114
-
-#define SEARCH_RANGE 0
-#define Y_SEARCH_RANGE 0
-#define FULL_Y_SEARCH 0
-#define COMPARE_WITH_CLIPPING 0
-
-typedef struct
-{
- float r, g, b, y;
-} fcolour_t;
-
-typedef struct
-{
- int red, green, blue, table;
-} base_t;
-
-typedef struct
-{
- union
- {
- struct
- {
- int red1, red2, green1, green2, blue1, blue2;
- } norm;
- struct
- {
- int red1, d_red, green1, d_green, blue1, d_blue;
- } diff;
- } colour;
- int table1, table2;
- short luma[16];
- int diffbit, flipbit;
-} etc_block_t;
-
-typedef struct
-{
- fcolour_t colour[2][4];
- int red_av, green_av, blue_av;
-} block_detail_t;
-
-
-static fcolour_t adjtab[8][4];
-
-static int dsize;
-
-
-static int dropped, tested;
-static long long ldropped, ltested;
-
-typedef struct
-{
- int r, g, b, grey;
-} rgbg_t;
-
-typedef struct
-{
- rgbg_t base[2];
- int table[2];
- int flip, diff;
- int score;
-} candidate_t;
-
-
-#define R_WEIGHT 19
-#define G_WEIGHT 37
-#define B_WEIGHT 7
-#define TOTAL_WEIGHT (R_WEIGHT + G_WEIGHT + B_WEIGHT)
-#define MAX_LUMA (TOTAL_WEIGHT * 255)
-
-static int bencn_diffable(rgbg_t const *c1, rgbg_t const *c2)
-{
- int r1 = (c1->r * 31 + 128 * 8) / (255 * 8);
- int g1 = (c1->g * 31 + 128 * 8) / (255 * 8);
- int b1 = (c1->b * 31 + 128 * 8) / (255 * 8);
- int r2 = (c2->r * 31 + 128 * 8) / (255 * 8);
- int g2 = (c2->g * 31 + 128 * 8) / (255 * 8);
- int b2 = (c2->b * 31 + 128 * 8) / (255 * 8);
-
- return ((unsigned)((r2 - r1 + 4) | (g2 - g1 + 4) | (b2 - b1 + 4)) <= 7);
-}
-
-
-static void bencn_quantise(candidate_t *cand)
-{
- int i;
-
- if (cand->diff == 0)
- {
- for (i = 0; i < 2; i++)
- {
- cand->base[i].r = (cand->base[i].r * 15 + 128 * 8) / (255 * 8);
- cand->base[i].g = (cand->base[i].g * 15 + 128 * 8) / (255 * 8);
- cand->base[i].b = (cand->base[i].b * 15 + 128 * 8) / (255 * 8);
-
- assert((unsigned)cand->base[i].r < 16);
- assert((unsigned)cand->base[i].g < 16);
- assert((unsigned)cand->base[i].b < 16);
-
- cand->base[i].r = cand->base[i].r << 4 | cand->base[i].r >> 0;
- cand->base[i].g = cand->base[i].g << 4 | cand->base[i].g >> 0;
- cand->base[i].b = cand->base[i].b << 4 | cand->base[i].b >> 0;
- }
- }
- else
- {
- for (i = 0; i < 2; i++)
- {
- cand->base[i].r = (cand->base[i].r * 31 + 128 * 8) / (255 * 8);
- cand->base[i].g = (cand->base[i].g * 31 + 128 * 8) / (255 * 8);
- cand->base[i].b = (cand->base[i].b * 31 + 128 * 8) / (255 * 8);
-
- assert((unsigned)cand->base[i].r < 32);
- assert((unsigned)cand->base[i].g < 32);
- assert((unsigned)cand->base[i].b < 32);
-
- cand->base[i].r = cand->base[i].r << 3 | cand->base[i].r >> 2;
- cand->base[i].g = cand->base[i].g << 3 | cand->base[i].g >> 2;
- cand->base[i].b = cand->base[i].b << 3 | cand->base[i].b >> 2;
- }
- }
-
- for (i = 0; i < 2; i++)
- {
- assert((unsigned)cand->base[i].r < 256);
- assert((unsigned)cand->base[i].g < 256);
- assert((unsigned)cand->base[i].b < 256);
- cand->base[i].grey = R_WEIGHT * cand->base[i].r + G_WEIGHT * cand->base[i].g + B_WEIGHT * cand->base[i].b;
- }
-}
-
-static int bencn_score(int greymap[2][8], int tabs[2])
-{
- static const int table[8][2] = { { 2, 8 }, { 5, 17 }, { 9, 29 }, { 13, 42 }, { 18, 60 }, { 24, 80 }, { 33, 106 }, { 47, 183 } };
- int total = 0;
- int i, j;
-
- for (i = 0; i < 2; i++)
- {
- int bestfit = -1;
- int bestscore = 1 << 30;
-
- for (j = 0; j < 8; j++)
- {
- int little = table[j][0] * TOTAL_WEIGHT, big = table[j][1] * TOTAL_WEIGHT;
- int score = 0;
- int k;
-
- for (k = 0; k < 8; k++)
- {
- int e1, e2, emin;
-
- e1 = abs(greymap[i][k] - big);
- e2 = abs(greymap[i][k] - little);
- emin = min(e1, e2);
- score += emin * emin >> 2;
- if (score >= bestscore)
- break;
- }
-
- if (score < bestscore)
- {
- bestfit = j;
- bestscore = score;
- }
- }
-
- assert(bestfit != -1);
- tabs[i] = bestfit;
- total += bestscore;
- }
-
- return total;
-}
-
-static int bencn_vertical_score(int greymap[4][4], int tabs[2], int left_luma, int right_luma)
-{
- int newmap[2][8];
- int i;
-
- for (i = 0; i < 8; i++)
- {
- newmap[0][i] = abs(greymap[i >> 1][(i & 1) + 0] - left_luma);
- newmap[1][i] = abs(greymap[i >> 1][(i & 1) + 2] - right_luma);
- }
-
- return bencn_score(newmap, tabs);
-}
-
-static int bencn_horizontal_score(int greymap[4][4], int tabs[2], int top_luma, int bottom_luma)
-{
- int newmap[2][8];
- int i;
-
- for (i = 0; i < 8; i++)
- {
- newmap[0][i] = abs(greymap[(i & 1) + 0][i >> 1] - top_luma);
- newmap[1][i] = abs(greymap[(i & 1) + 2][i >> 1] - bottom_luma);
- }
-
- return bencn_score(newmap, tabs);
-}
-
-
-static unsigned long long block_encode_new(unsigned char src[][3], int pitch)
-{
- unsigned long low, high;
- candidate_t horiz, vert, *winner;
- int greymap[4][4];
- int x, y;
-
- {
- rgbg_t totals[2][2] = { { { 0 } } };
-
- for (y = 0; y < 4; y++)
- for (x = 0; x < 4; x++)
- {
- unsigned char (*ptr)[3] = src + x + (y ^ 3) * pitch;
- rgbg_t *tptr = &totals[y >> 1][x >> 1];
- int r = ptr[0][0], g = ptr[0][1], b = ptr[0][2];
- int grey = R_WEIGHT * r + G_WEIGHT * g + B_WEIGHT * b;
-
- greymap[y][x] = grey;
-
- tptr->r += r;
- tptr->g += g;
- tptr->b += b;
- tptr->grey += grey;
- }
-
- vert.flip = 0;
- for (x = 0; x < 2; x++)
- {
- vert.base[x].r = totals[0][x].r + totals[1][x].r;
- vert.base[x].g = totals[0][x].g + totals[1][x].g;
- vert.base[x].b = totals[0][x].b + totals[1][x].b;
- vert.base[x].grey = totals[0][x].grey + totals[1][x].grey;
- }
- vert.diff = bencn_diffable(&vert.base[0], &vert.base[1]);
- bencn_quantise(&vert);
-
- horiz.flip = 1;
- for (y = 0; y < 2; y++)
- {
- horiz.base[y].r = totals[y][0].r + totals[y][1].r;
- horiz.base[y].g = totals[y][0].g + totals[y][1].g;
- horiz.base[y].b = totals[y][0].b + totals[y][1].b;
- horiz.base[y].grey = totals[y][0].grey + totals[y][1].grey;
- }
- horiz.diff = bencn_diffable(&horiz.base[0], &horiz.base[1]);
- bencn_quantise(&horiz);
-
- vert.score = bencn_vertical_score(greymap, vert.table, vert.base[0].grey, vert.base[1].grey);
- horiz.score = bencn_horizontal_score(greymap, horiz.table, horiz.base[0].grey, horiz.base[1].grey);
- }
-
- winner = horiz.score < vert.score ? &horiz : |
-
- low = 0;
- high = 0;
-
- {
- static const int threshold[8] = { 5, 11, 19, 22, 39, 52, 69, 115 };
- int base_grey[2][2];
- int quadthresh[2][2];
-
- if (winner->flip == 0)
- for (x = 0; x < 2; x++)
- {
- base_grey [0][x] = base_grey[1][x] = winner->base[x].grey;
- quadthresh[0][x] = quadthresh[1][x] = threshold[winner->table[x]] * TOTAL_WEIGHT;
- }
- else
- for (y = 0; y < 2; y++)
- {
- base_grey [y][0] = base_grey[y][1] = winner->base[y].grey;
- quadthresh[y][0] = quadthresh[y][1] = threshold[winner->table[y]] * TOTAL_WEIGHT;
- }
-
- for (y = 0; y < 4; y++)
- for (x = 0; x < 4; x++)
- {
- int v = greymap[y][x] - base_grey[y >> 1][x >> 1];
- int t = quadthresh[y >> 1][x >> 1];
- int shift = x * 4 + y;
-
- if (v < 0)
- low |= 0x10000 << shift;
- if (abs(v) > t)
- low |= 0x1 << shift;
- }
- }
-
- assert((unsigned)(winner->base[0].r | winner->base[0].g | winner->base[0].b) < 256);
- assert((unsigned)(winner->base[1].r | winner->base[1].g | winner->base[1].b) < 256);
-
- if (winner->diff)
- {
- int dr, dg, db;
- dr = (winner->base[1].r >> 3) - (winner->base[0].r >> 3);
- dg = (winner->base[1].g >> 3) - (winner->base[0].g >> 3);
- db = (winner->base[1].b >> 3) - (winner->base[0].b >> 3);
-
- assert((unsigned)(dr + 4) < 8);
- assert((unsigned)(dg + 4) < 8);
- assert((unsigned)(db + 4) < 8);
-
- high |= (winner->base[0].r >> 3) << 27;
- high |= (dr & 7) << 24;
- high |= (winner->base[0].g >> 3) << 19;
- high |= (dg & 7) << 16;
- high |= (winner->base[0].b >> 3) << 11;
- high |= (db & 7) << 8;
- }
- else
- {
- high |= (winner->base[0].r >> 4) << 28;
- high |= (winner->base[1].r >> 4) << 24;
- high |= (winner->base[0].g >> 4) << 20;
- high |= (winner->base[1].g >> 4) << 16;
- high |= (winner->base[0].b >> 4) << 12;
- high |= (winner->base[1].b >> 4) << 8;
- }
-
- assert((unsigned)winner->table[0] < 8);
- assert((unsigned)winner->table[1] < 8);
-
- high |= winner->table[0] << 5;
- high |= winner->table[1] << 2;
-
- high |= winner->diff << 1;
- high |= winner->flip << 0;
-
- return (unsigned long long)high << 32 | low;
-}
-
-
-
-static unsigned long long pack_block(etc_block_t const *block)
-{
- unsigned long low, high;
- int x,y;
-
- low = 0;
- for (y = 0; y < 4; y++)
- for (x = 0; x < 4; x++)
- {
- int shift = x * 4 + y;
- int idx = x + y * 4;
-
- assert((unsigned)block->luma[x + y * 4] < 4);
- low |= (block->luma[idx] & 1) << (shift + 0);
- low |= (block->luma[idx] >> 1) << (shift + 16);
- }
-
- if (block->diffbit)
- {
- assert((unsigned)block->colour.diff.red1 < 256);
- assert((unsigned)block->colour.diff.green1 < 256);
- assert((unsigned)block->colour.diff.blue1 < 256);
- assert((unsigned)(block->colour.diff.d_red + 32) < 64);
- assert((unsigned)(block->colour.diff.d_green + 32) < 64);
- assert((unsigned)(block->colour.diff.d_blue + 32) < 64);
-
- high = (block->colour.diff.red1 >> 3) << 27;
- high |= ((block->colour.diff.d_red >> 3) & 7) << 24;
- high |= (block->colour.diff.green1 >> 3) << 19;
- high |= ((block->colour.diff.d_green >> 3) & 7) << 16;
- high |= (block->colour.diff.blue1 >> 3) << 11;
- high |= ((block->colour.diff.d_blue >> 3) & 7) << 8;
- }
- else
- {
- assert((unsigned)block->colour.norm.red1 < 256);
- assert((unsigned)block->colour.norm.green1 < 256);
- assert((unsigned)block->colour.norm.blue1 < 256);
- assert((unsigned)block->colour.norm.red2 < 256);
- assert((unsigned)block->colour.norm.green2 < 256);
- assert((unsigned)block->colour.norm.blue2 < 256);
- high = (block->colour.norm.red1 >> 4) << 28;
- high |= (block->colour.norm.red2 >> 4) << 24;
- high |= (block->colour.norm.green1 >> 4) << 20;
- high |= (block->colour.norm.green2 >> 4) << 16;
- high |= (block->colour.norm.blue1 >> 4) << 12;
- high |= (block->colour.norm.blue2 >> 4) << 8;
- }
-
- high |= block->flipbit << 0;
- high |= block->diffbit << 1;
- high |= block->table1 << 5;
- high |= block->table2 << 2;
-
- /* Note that this code doesn't bother about endian, and a PPM-like file
- * should be big endian rather than intel-native. */
- return (unsigned long long)high << 32 | low;
-}
-
-
-
-#if 0
-#define sqdiff(a, b) (((a) - (b)) * ((a) - (b)))
-#define pixdiff(x, z) (sqdiff((x).r, (z).r) + sqdiff((x).g, (z).g) + sqdiff((x).b, (z).b))
-#define difftosum(x) (x)
-#else
-#define pixdiff(x, z) fabs((x).y - (z).y)
-#define difftosum(x) ((x) * (x))
-#endif
-
-#if COMPARE_WITH_CLIPPING
-static float inline evaluate(fcolour_t const colour[8], fcolour_t const *base, fcolour_t const table[4], float limit)
-{
- int i, x;
- float error = 0.0;
-
- tested += 8;
-
- for (x = 0; x < 8; x++)
- {
- fcolour_t pixel;
- float delta, d2;
-
- pixel.r = base->r + table[0].r;
- pixel.g = base->g + table[0].g;
- pixel.b = base->b + table[0].b;
- pixel.y = base->y + table[0].y;
- if (pixel.r < 0.0) pixel.r = 0.0;
- else if (pixel.r > 255 * RED_VALUE) pixel.r = 255 * RED_VALUE;
- if (pixel.g < 0.0) pixel.g = 0.0;
- else if (pixel.g > 255 * GREEN_VALUE) pixel.g = 255 * GREEN_VALUE;
- if (pixel.b < 0.0) pixel.b = 0.0;
- else if (pixel.b > 255 * BLUE_VALUE) pixel.b = 255 * BLUE_VALUE;
-
- delta = pixdiff(pixel, colour[x]);
- for (i = 1; i < 4; i++)
- {
- pixel.r = base->r + table[i].r;
- pixel.g = base->g + table[i].g;
- pixel.b = base->b + table[i].b;
- pixel.y = base->y + table[i].y;
- if (pixel.r < 0.0) pixel.r = 0.0;
- else if (pixel.r > 255 * RED_VALUE) pixel.r = 255 * RED_VALUE;
- if (pixel.g < 0.0) pixel.g = 0.0;
- else if (pixel.g > 255 * GREEN_VALUE) pixel.g = 255 * GREEN_VALUE;
- if (pixel.b < 0.0) pixel.b = 0.0;
- else if (pixel.b > 255 * BLUE_VALUE) pixel.b = 255 * BLUE_VALUE;
-
- if ((d2 = pixdiff(pixel, colour[x])) < delta)
- delta = d2;
- }
- error += difftosum(delta);
-
- if (error >= limit)
- {
- dropped += 7 - x;
- return error;
- }
- }
-
- return error;
-}
-#else
-static float __inline evaluate(fcolour_t const colour[8], fcolour_t const *base, fcolour_t const table[4], float limit)
-{
- int i, x;
- float error = 0.0;
-
- /* TODO: consider the benefits of clipping */
-
- tested += 8;
-
- for (x = 0; x < 8; x++)
- {
- fcolour_t pixel;
- float delta, d2;
-
- pixel.r = colour[x].r - base->r;
- pixel.g = colour[x].g - base->g;
- pixel.b = colour[x].b - base->b;
- pixel.y = colour[x].y - base->y;
-
- delta = pixdiff(pixel, table[0]);
- for (i = 1; i < 4; i++)
- if ((d2 = pixdiff(pixel, table[i])) < delta)
- delta = d2;
- error += difftosum(delta);
-
- if (error >= limit)
- {
- dropped += 7 - x;
- return error;
- }
- }
-
- return error;
-}
-#endif
-
-static void produce(short out[8], fcolour_t const colour[8], base_t const *base)
-{
- int i, x;
- fcolour_t test;
- fcolour_t const *table;
-
- assert((unsigned)base->table < 8);
- assert((base->red & (~255 | 7)) == 0);
- assert((base->green & (~255 | 7)) == 0);
- assert((base->blue & (~255 | 7)) == 0);
-
- test.r = base->red * RED_VALUE;
- test.g = base->green * GREEN_VALUE;
- test.b = base->blue * BLUE_VALUE;
- test.y = base->red * RED_TO_Y + base->green * GREEN_TO_Y + base->blue * BLUE_TO_Y;
- table = adjtab[base->table];
-
- for (x = 0; x < 8; x++)
- {
- fcolour_t pixel;
- float delta, d2;
-
- pixel.r = colour[x].r - test.r;
- pixel.g = colour[x].g - test.g;
- pixel.b = colour[x].b - test.b;
- pixel.y = colour[x].y - test.y;
-
- delta = pixdiff(pixel, table[0]);
- out[x] = 0;
- for (i = 1; i < 4; i++)
- if ((d2 = pixdiff(pixel, table[i])) < delta)
- {
- delta = d2;
- out[x] = i;
- }
- }
-}
-
-static float __inline evaluate_all(int *index, fcolour_t const colour[8], fcolour_t const *base, float limit)
-{
- int i;
- float error;
-
- for (i = 0; i < 8; i++)
- {
- if ((error = evaluate(colour, base, adjtab[i], limit)) < limit)
- {
- limit = error;
- *index = i;
- }
- }
-
- return limit;
-}
-
-static float search_yrb(base_t *base, float limit, fcolour_t const colour[8], int step, int ymin, int ymax, int rmin, int rmax, int bmin, int bmax)
-{
- int ro, bo, y;
-
- rmin = rmin & ~(step - 1);
- rmax = (rmax + step - 1) & ~(step - 1);
- bmin = bmin & ~(step - 1);
- bmax = (bmax + step - 1) & ~(step - 1);
- ymin = ymin & ~(step - 1);
- ymax = (ymax + step - 1) & ~(step - 1);
-
- for (ro = rmin; ro <= rmax; ro += step)
- {
- for (bo = bmin; bo <= bmax; bo += step)
- {
- for (y = ymin; y <= ymax; y += step)
- {
- int r = y + ro, g = y, b = y + bo;
- fcolour_t test;
- float error;
-
- if ((unsigned)r > 255 || (unsigned)g > 255 || (unsigned)b > 255)
- continue;
-
- test.r = r * RED_VALUE;
- test.g = g * GREEN_VALUE;
- test.b = b * BLUE_VALUE;
- test.y = r * RED_TO_Y + g * GREEN_TO_Y + b * BLUE_TO_Y;
-
- if ((error = evaluate_all(&base->table, colour, &test, limit)) < limit)
- {
- base->red = r;
- base->green = g;
- base->blue = b;
- limit = error;
- }
- }
- }
- }
- return limit;
-}
-
-static float full_y_search(base_t *base, block_detail_t const *detail, int step, float limit)
-{
- int red_off, blue_off;
-
- red_off = detail->red_av - detail->green_av;
- blue_off = detail->blue_av - detail->green_av;
-
- /* initial guess to set a reasonable limit */
- limit = search_yrb(base, limit, &detail->colour[0][0], step,
- detail->green_av, detail->green_av,
- red_off, red_off,
- blue_off, blue_off);
-
-#if FULL_Y_SEARCH
- limit = search_yrb(base, limit, &detail->colour[0][0], step,
- 0, 255,
- red_off - SEARCH_RANGE * step, red_off + SEARCH_RANGE * step,
- blue_off - SEARCH_RANGE * step, blue_off + SEARCH_RANGE * step);
-#else
- limit = search_yrb(base, limit, &detail->colour[0][0], step,
- detail->green_av - Y_SEARCH_RANGE * step, detail->green_av + Y_SEARCH_RANGE * step,
- red_off - SEARCH_RANGE * step, red_off + SEARCH_RANGE * step,
- blue_off - SEARCH_RANGE * step, blue_off + SEARCH_RANGE * step);
-#endif
-
- return limit;
-}
-
-static float block_encode_abs(etc_block_t *block, block_detail_t const *detail, float limit)
-{
- base_t base[2];
- float error1, error2;
-
- memset(block, 0, sizeof(*block));
-
- error1 = full_y_search(&base[0], &detail[0], 16, limit);
- error2 = full_y_search(&base[1], &detail[1], 16, limit);
-
- if (error1 + error2 >= limit)
- return error1 + error2;
-
- block->flipbit = 1;
- block->diffbit = 0;
- block->colour.norm.red1 = base[0].red &= 0xF0;
- block->colour.norm.red2 = base[1].red &= 0xF0;
- block->colour.norm.green1 = base[0].green &= 0xF0;
- block->colour.norm.green2 = base[1].green &= 0xF0;
- block->colour.norm.blue1 = base[0].blue &= 0xF0;
- block->colour.norm.blue2 = base[1].blue &= 0xF0;
-
- block->table1 = base[0].table;
- block->table2 = base[1].table;
- produce(&block->luma[0], &detail[0].colour[0][0], &base[0]);
- produce(&block->luma[8], &detail[1].colour[0][0], &base[1]);
-
- return error1 + error2;
-}
-
-static float block_encode(etc_block_t *block, const block_detail_t detail[2], float limit)
-{
- base_t base[2];
- float error1, error2;
-
- memset(block, 0, sizeof(*block));
-
- error1 = full_y_search(&base[0], &detail[0], 8, limit);
- error2 = full_y_search(&base[1], &detail[1], 8, limit);
-
- if ((unsigned)((base[1].red - base[0].red + 32)
- | (base[1].green - base[0].green + 32)
- | (base[1].blue - base[0].blue + 32))
- >= 64)
- {
- int red_av, green_av, blue_av;
- int red_off, blue_off;
-
- /* TODO: think harder about this case. This is just some random guess at
- * something that might come out reasonable, but it's certainly not a
- * comprehensive search of all the good places to look. It's also
- * limited by the fact that it's using search_yrb() which has an
- * inappropriate shape at the ends, and so the search space in the second
- * call has unfortunate dead zones.
- */
-
- red_av = (detail[0].red_av + detail[1].red_av) >> 1;
- green_av = (detail[0].green_av + detail[1].green_av) >> 1;
- blue_av = (detail[0].blue_av + detail[1].blue_av) >> 1;
-
- red_off = red_av - green_av;
- blue_off = blue_av - green_av;
-
- error1 = search_yrb(&base[0], limit, &detail[0].colour[0][0], 8,
- green_av - 3*8, green_av + 3*8,
- red_off - 8, red_off + 8,
- blue_off - 8, blue_off + 8);
-
- red_off = base[0].red - base[0].green;
- blue_off = base[0].blue - base[0].green;
-
- error2 = search_yrb(&base[1], limit, &detail[1].colour[0][0], 8,
- base[0].green - 3*8, base[0].green + 2*8,
- red_off - 8, red_off + 8,
- blue_off - 8, blue_off + 8);
-
- /* Having made our best guess, we try it out against absolute encoding.. */
-
- if (error1 + error2 >= limit)
- return block_encode_abs(block, detail, limit);
- else
- {
- float error3;
-
- if ((error3 = block_encode_abs(block, detail, error1 + error2)) < error1 + error2)
- return error3;
- }
- }
-
- if (error1 + error2 >= limit)
- return error1 + error2; /* don't even bother with the answer */
-
- if ((unsigned)((base[1].red - base[0].red + 32)
- | (base[1].green - base[0].green + 32)
- | (base[1].blue - base[0].blue + 32))
- >= 64)
- {
- assert(!"Failed to find approximate delta.");
- return FLT_MAX;
- }
-
- block->flipbit = 1;
- block->diffbit = 1;
- block->table1 = base[0].table;
- block->table2 = base[1].table;
- block->colour.diff.red1 = base[0].red;
- block->colour.diff.d_red = base[1].red - base[0].red;
- block->colour.diff.green1 = base[0].green;
- block->colour.diff.d_green = base[1].green - base[0].green;
- block->colour.diff.blue1 = base[0].blue;
- block->colour.diff.d_blue = base[1].blue - base[0].blue;
-
- produce(&block->luma[0], &detail[0].colour[0][0], &base[0]);
- produce(&block->luma[8], &detail[1].colour[0][0], &base[1]);
-
- return error1 + error2;
-}
-
-static unsigned long long block_encode_search(etc_block_t *block, unsigned char src[][3], int pitch)
-{
- etc_block_t tmp;
- block_detail_t detail[2];
- float tmp_score, block_score = FLT_MAX;
- int x, y;
-
- for (y = 0; y < 2; y++)
- detail[y].red_av = detail[y].green_av = detail[y].blue_av = 0;
- for (y = 3; y >= 0; y--)
- {
- for (x = 0; x < 4; x++)
- {
- int red = src[x][0], green = src[x][1], blue = src[x][2];
- detail[y >> 1].colour[y & 1][x].r = red * RED_VALUE;
- detail[y >> 1].colour[y & 1][x].g = green * GREEN_VALUE;
- detail[y >> 1].colour[y & 1][x].b = blue * BLUE_VALUE;
- detail[y >> 1].colour[y & 1][x].y = red * RED_TO_Y + green * GREEN_TO_Y + blue * BLUE_TO_Y;
-
- detail[y >> 1].red_av += red;
- detail[y >> 1].green_av += green;
- detail[y >> 1].blue_av += blue;
- }
- src += pitch;
- }
- src -= 4 * pitch;
- for (y = 0; y < 2; y++)
- {
- detail[y].red_av = ((detail[y].red_av >> 3) + 4) & ~7;
- detail[y].green_av = ((detail[y].green_av >> 3) + 4) & ~7;
- detail[y].blue_av = ((detail[y].blue_av >> 3) + 4) & ~7;
- if (detail[y].red_av > (255 & ~7)) detail[y].red_av = (255 & ~7);
- if (detail[y].green_av > (255 & ~7)) detail[y].green_av = (255 & ~7);
- if (detail[y].blue_av > (255 & ~7)) detail[y].blue_av = (255 & ~7);
- }
-
- block_score = block_encode(block, detail, block_score);
-
- /* transpose the data so we can re-use the same code to try a vertical block */
- for (y = 0; y < 2; y++)
- detail[y].red_av = detail[y].green_av = detail[y].blue_av = 0;
- for (y = 0; y < 4; y++)
- {
- for (x = 0; x < 4; x++)
- {
- int red = src[x][0], green = src[x][1], blue = src[x][2];
- detail[x >> 1].colour[x & 1][y].r = red * RED_VALUE;
- detail[x >> 1].colour[x & 1][y].g = green * GREEN_VALUE;
- detail[x >> 1].colour[x & 1][y].b = blue * BLUE_VALUE;
- detail[x >> 1].colour[x & 1][y].y = red * RED_TO_Y + green * GREEN_TO_Y + blue * BLUE_TO_Y;
-
- detail[x >> 1].red_av += red;
- detail[x >> 1].green_av += green;
- detail[x >> 1].blue_av += blue;
- }
- src += pitch;
- }
- for (y = 0; y < 2; y++)
- {
- detail[y].red_av = ((detail[y].red_av >> 3) + 4) & ~7;
- detail[y].green_av = ((detail[y].green_av >> 3) + 4) & ~7;
- detail[y].blue_av = ((detail[y].blue_av >> 3) + 4) & ~7;
- if (detail[y].red_av > (255 & ~7)) detail[y].red_av = (255 & ~7);
- if (detail[y].green_av > (255 & ~7)) detail[y].green_av = (255 & ~7);
- if (detail[y].blue_av > (255 & ~7)) detail[y].blue_av = (255 & ~7);
- }
-
- tmp_score = block_encode(&tmp, detail, block_score);
- tmp.flipbit = 0;
- if (tmp_score < block_score)
- {
- *block = tmp;
- block_score = tmp_score;
- }
-
- /* un-transpose the data if we transposed it above */
- if (block->flipbit == 0)
- {
- for (y = 0; y < 4; y++)
- for (x = y + 1; x < 4; x++)
- {
- int tmp;
-
- tmp = block->luma[x + y * 4];
- block->luma[x + y * 4] = block->luma[y + x * 4];
- block->luma[y + x * 4] = tmp;
- }
- /* and un-vflip it, too... */
- for (y = 0; y < 2; y++)
- {
- for (x = 0; x < 4; x++)
- {
- int tmp = block->luma[y * 4 + x];
- block->luma[y * 4 + x] = block->luma[(y ^ 3) * 4 + x];
- block->luma[(y ^ 3) * 4 + x] = tmp;
- }
- }
- }
-
- return pack_block(block);
-}
-
-
-#if 0
-static int get_block_offset(int x, int y, int pitch)
-{
- int offset_row, offset_col, offset_min, offset;
-
- /* re-hash things to match 32-bit t-format coordinates */
- x >>= 2;
- y >>= 2;
- x <<= 1;
- pitch <<= 1;
-
- offset_row = ((y + 32) & ~63) * pitch;
-
- offset_col = (x >> 4) * 512
- + ((y >> 4) & 1) * 256;
- offset_col ^= (y & 32) ? -512 : 0;
- offset_col ^= (x << 4) & 256;
-
- offset_min = ((y >> 2) & 3) * 64
- + ((x >> 2) & 3) * 16
- + (y & 3) * 4
- + (x & 3) * 1;
-
- offset = offset_row + offset_col + offset_min;
-
- /* de-hash things back to 64-bit */
- offset >>= 1;
-
- if ((unsigned)offset >= dsize)
- {
- fprintf(stderr, "calculation went wrong: coord: (%d,%d), pitch: %d offset: %d\n", x, y, pitch, offset);
- return 0;
- }
-
- return offset;
-}
-
-
-static void STC_encode(unsigned long long *dest, int dpitch, unsigned char src[][3], int s_width, int s_height)
-{
- int pitch = s_width;
- etc_block_t tmp;
- int x, y;
-
- src += s_height * pitch;
- pitch = -pitch;
- src += pitch;
-
- s_width &= ~3;
- s_height &= ~3;
-
- for (y = 0; y < s_height; y += 4)
- {
- for (x = 0; x < s_width; x += 4)
- {
- unsigned long long result = (x + x >= 0 * s_width) ? block_encode_new(src + x + y * pitch, pitch) : block_encode_search(&tmp, src + x + y * pitch, pitch);
-
-#if 0
- if ((result & 0x0000000200000000ull) == 0)
- {
- result = 0;
- }
-#endif
-
- /* TODO: write this out in big-endian format. */
- dest[get_block_offset(x, y, dpitch)] = result;
- }
-
- ldropped += dropped;
- dropped = 0;
- ltested += tested;
- tested = 0;
-#if 0
- if ((y & 15) == 12)
- {
- fprintf(stderr, "%d%% complete early-out speedup: %.3f%%\r", 100 * y / s_height, 100.0 * ldropped / ltested);
- fflush(stderr);
- }
-#endif
- }
- fprintf(stderr, "100%% complete early-out speedup: %.6f%%\n\n", 100.0 * ldropped / ltested);
-}
-#endif
-
-static void setup_adjtab(void)
-{
- static const int tabvalues[8][2] =
- {
- { 2, 8 },
- { 5, 17 },
- { 9, 29 },
- { 13, 42 },
- { 18, 60 },
- { 24, 80 },
- { 33, 106 },
- { 47, 183 }
- };
- int i;
-
- for (i = 0; i < 8; i++)
- {
- int l = tabvalues[i][0], h = tabvalues[i][1];
-
- adjtab[i][0].r = l * RED_VALUE;
- adjtab[i][0].g = l * GREEN_VALUE;
- adjtab[i][0].b = l * BLUE_VALUE;
- adjtab[i][0].y = l * GREY_TO_Y;
- adjtab[i][1].r = h * RED_VALUE;
- adjtab[i][1].g = h * GREEN_VALUE;
- adjtab[i][1].b = h * BLUE_VALUE;
- adjtab[i][1].y = h * GREY_TO_Y;
- adjtab[i][2].r = l * -RED_VALUE;
- adjtab[i][2].g = l * -GREEN_VALUE;
- adjtab[i][2].b = l * -BLUE_VALUE;
- adjtab[i][2].y = l * -GREY_TO_Y;
- adjtab[i][3].r = h * -RED_VALUE;
- adjtab[i][3].g = h * -GREEN_VALUE;
- adjtab[i][3].b = h * -BLUE_VALUE;
- adjtab[i][3].y = h * -GREY_TO_Y;
- }
-}
-
-#if 0
-int main(int argc, char *argv[])
-{
- FILE *infile, *outfile;
- unsigned char (*sbuf)[3];
- unsigned long long *dbuf;
- int version, width, height, maxval;
- int dpitch, hpad;
- int count;
-
- setup_adjtab();
-
- if ((infile = fopen(argv[1], "rb")) == NULL || fscanf(infile, "P%d %d %d %d", &version, &width, &height, &maxval) != 4 || fgetc(infile) != '\n')
- {
- fprintf(stderr, "Problem with input file '%s': %s\n", argv[1], strerror(errno));
- exit(1);
- }
- if ((outfile = fopen(argv[2], "wb")) == NULL)
- {
- fprintf(stderr, "Problem with output file '%s': %s\n", argv[2], strerror(errno));
- exit(1);
- }
-
- dpitch = ((width >> 2) + 15) & ~15;
- hpad = ((height >> 2) + 31) & ~31;
- dsize = dpitch * hpad;
-
- if ((sbuf = malloc(width * height * sizeof(*sbuf))) == NULL || (dbuf = calloc(dpitch * hpad, sizeof(*dbuf))) == NULL)
- {
- fprintf(stderr, "allocation problem: %s\n", strerror(errno));
- exit(1);
- }
-
- fprintf(outfile, "ETC1\n %4d %4d\n", width & ~3, height & ~3);
-
- if ((count = fread(sbuf, sizeof(*sbuf), width * height, infile)) != width * height)
- {
- fprintf(stderr, "Problem reading input file: %s (got %d pixels, not %d)\n", strerror(errno), count, width * height);
- exit(1);
- }
-
- fclose(infile);
-
- STC_encode(dbuf, dpitch, sbuf, width, height);
-
- if ((count = fwrite(dbuf, sizeof(*dbuf), dpitch * hpad, outfile)) != dpitch * hpad)
- {
- fprintf(stderr, "Problem writing output file: %s (wrote %d blocks, not %d)\n", strerror(errno), count, dpitch * hpad);
- exit(1);
- }
-
- fclose(outfile);
-
- return 0;
-}
-#endif
-
-void etc1_compress_tex_image(
- GLenum target,
- GLint level,
- GLenum internalformat,
- GLsizei width,
- GLsizei height,
- GLint border,
- GLenum format,
- GLenum type,
- const GLvoid *pixels)
-{
- int x0,x1,y0,y1;
- int w0,h0;
- unsigned char const *cpixels = (unsigned char const *)pixels;
- unsigned char src[16][3];
- size_t etc1size;
- unsigned long long *etc1data;
-
- w0 = (width + 3)/4;
- h0 = (height + 3)/4;
-
- etc1size = 8*w0*h0;
- etc1data = malloc(etc1size);
- assert(etc1data);
-
- setup_adjtab();
-
- for (y0 = 0; y0 < h0; y0++)
- {
- for (x0 = 0; x0 < w0; x0++)
- {
- unsigned long long etc1block;
- int i;
-
- /* Load 4x4 block */
- for (y1 = 0; y1 < 4; y1++)
- {
- for (x1 = 0; x1 < 4; x1++)
- {
- unsigned char r,g,b;
- int x = 4*x0+x1;
- int y = 4*y0+y1;
-
- if (format == GL_RGBA && type == GL_UNSIGNED_BYTE)
- {
- r = cpixels[4*(width*y+x)];
- g = cpixels[4*(width*y+x)+1];
- b = cpixels[4*(width*y+x)+2];
- }
- else if (format == GL_RGB && type == GL_UNSIGNED_BYTE)
- {
- r = cpixels[3*(width*y+x)];
- g = cpixels[3*(width*y+x)+1];
- b = cpixels[3*(width*y+x)+2];
- }
- else
- {
- assert(0); /* Cannot currently handle this texture format */
- }
- src[4*(3-y1)+x1][0] = r;
- src[4*(3-y1)+x1][1] = g;
- src[4*(3-y1)+x1][2] = b;
- }
- }
- etc1block = block_encode_new(src/*((x0^y0)&1)?src3:src2*/, 4);
- for (i = 0; i < 8; i++)
- {
- ((char*)etc1data)[8*(w0*y0 + x0) + i] = ((char*)&etc1block)[i^7];
- }
- }
- }
-
- glCompressedTexImage2D(
- target,
- level,
- GL_ETC1_RGB8_OES,
- width,
- height,
- 0,
- etc1size,
- etc1data);
-
- free(etc1data);
-}
diff --git a/SP/code/game/g_main.c b/SP/code/game/g_main.c
index 4e4c811..558bafb 100644
--- a/SP/code/game/g_main.c
+++ b/SP/code/game/g_main.c
@@ -169,10 +169,10 @@ cvarTable_t gameCvarTable[] = {
{ &g_soldierChargeTime, "g_soldierChargeTime", "20000", CVAR_SERVERINFO | CVAR_LATCH, 0, qfalse },
// jpw
-#ifndef VCMODS_OPENGLES
- { &g_skipcutscenes, "g_skipcutscenes", "0", CVAR_ARCHIVE, 0, qtrue },
-#else
+#ifdef USE_OPENGLES
{ &g_skipcutscenes, "g_skipcutscenes", "1", CVAR_ARCHIVE, 0, qtrue },
+#else
+ { &g_skipcutscenes, "g_skipcutscenes", "0", CVAR_ARCHIVE, 0, qtrue },
#endif
{ &g_playerStart, "g_playerStart", "0", CVAR_ROM, 0, qfalse },
diff --git a/SP/code/qcommon/q_shared.h b/SP/code/qcommon/q_shared.h
index 6f20164..fd377a3 100644
--- a/SP/code/qcommon/q_shared.h
+++ b/SP/code/qcommon/q_shared.h
@@ -169,11 +169,6 @@ typedef int intptr_t;
#include <ctype.h>
#include <limits.h>
-#ifdef VCMODS_REPLACETRIG
-#define sin(f) sinf(f)
-#define cos(f) cosf(f)
-#endif
-
#ifdef _MSC_VER
#include <io.h>
diff --git a/SP/code/renderer/qgl.h b/SP/code/renderer/qgl.h
index cae6282..1f253ee 100644
--- a/SP/code/renderer/qgl.h
+++ b/SP/code/renderer/qgl.h
@@ -26,31 +26,46 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#ifndef __QGL_H__
#define __QGL_H__
-#ifdef VCMODS_OPENGLES
-#include <GLES/gl.h>
-
-
-#define qglActiveTextureARB glActiveTexture
-#define qglClientActiveTextureARB glClientActiveTexture
-#define qglMultiTexCoord2fARB glMultiTexCoord2f
-
-extern void (* qglLockArraysEXT) (GLint first, GLsizei count);
-extern void (* qglUnlockArraysEXT) (void);
-
-extern void myglClear(GLbitfield mask);
-extern void myglTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
-extern void myglDrawBuffer(GLenum mode);
-extern void myglViewport(GLint x, GLint y, GLsizei width, GLsizei height);
-extern void myglScissor(GLint x, GLint y, GLsizei width, GLsizei height);
+#ifdef USE_OPENGLES
+#ifdef USE_LOCAL_HEADERS
+# include "SDL_opengles.h"
+# include "EGL/egl.h"
+#else
+# include <SDL_opengles.h>
+# include <EGL/egl.h>
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
#else
#ifdef USE_LOCAL_HEADERS
# include "SDL_opengl.h"
#else
# include <SDL_opengl.h>
#endif
+#endif
+
+extern void ( APIENTRY * qglActiveTextureARB )( GLenum texture );
+extern void ( APIENTRY * qglClientActiveTextureARB )( GLenum texture );
+extern void ( APIENTRY * qglMultiTexCoord2fARB )( GLenum texture, GLfloat s, GLfloat t );
+
+extern void ( APIENTRY * qglLockArraysEXT )( GLint, GLint );
+extern void ( APIENTRY * qglUnlockArraysEXT )( void );
+
+#ifdef USE_OPENGLES
+#define GLdouble GLfloat
+extern void myglMultiTexCoord2f( GLenum texture, GLfloat s, GLfloat t );
+#define GL_CLAMP GL_CLAMP_TO_EDGE
+#define GL_TEXTURE0_ARB GL_TEXTURE0
+#define GL_TEXTURE1_ARB GL_TEXTURE1
+#define GL_TEXTURE2_ARB GL_TEXTURE2
+#define GL_TEXTURE3_ARB GL_TEXTURE3
+#endif
//===========================================================================
+#ifndef USE_OPENGLES
+
/*
** multitexture extension definitions
*/
@@ -95,6 +110,11 @@ typedef void ( APIENTRY * PFNGLPNTRIANGLESIATIPROC )( GLenum pname, GLint param
typedef void ( APIENTRY * PFNGLPNTRIANGLESFATIPROC )( GLenum pname, GLfloat param );
#endif
+//----(SA) added
+extern void ( APIENTRY * qglPNTrianglesiATI )( GLenum pname, GLint param );
+extern void ( APIENTRY * qglPNTrianglesfATI )( GLenum pname, GLfloat param );
+//----(SA) end
+
// for NV fog distance
#ifndef GL_NV_fog_distance
#define GL_FOG_DISTANCE_MODE_NV 0x855A
@@ -119,172 +139,531 @@ typedef void ( APIENTRY * PFNGLPNTRIANGLESFATIPROC )( GLenum pname, GLfloat para
#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
#endif
-// extensions will be function pointers on all platforms
-
-extern void ( APIENTRY * qglMultiTexCoord2fARB )( GLenum texture, GLfloat s, GLfloat t );
-extern void ( APIENTRY * qglActiveTextureARB )( GLenum texture );
-extern void ( APIENTRY * qglClientActiveTextureARB )( GLenum texture );
-
-extern void ( APIENTRY * qglLockArraysEXT )( GLint, GLint );
-extern void ( APIENTRY * qglUnlockArraysEXT )( void );
-
-//----(SA) added
-extern void ( APIENTRY * qglPNTrianglesiATI )( GLenum pname, GLint param );
-extern void ( APIENTRY * qglPNTrianglesfATI )( GLenum pname, GLfloat param );
-//----(SA) end
-
-// GL_EXT_draw_range_elements
-extern void (APIENTRY * qglDrawRangeElementsEXT) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
-
-// rend2
+#endif // USE_OPENGLES
-// GL_EXT_multi_draw_arrays
-extern void (APIENTRY * qglMultiDrawArraysEXT) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
-extern void (APIENTRY * qglMultiDrawElementsEXT) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
+// extensions will be function pointers on all platforms
+//===========================================================================
-// GL_ARB_shading_language_100
-#ifndef GL_ARB_shading_language_100
-#define GL_ARB_shading_language_100
-#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C
+#define qglAccum glAccum
+#define qglAlphaFunc glAlphaFunc
+#define qglAreTexturesResident glAreTexturesResident
+#define qglArrayElement glArrayElement
+#define qglBegin glBegin
+#define qglBindTexture glBindTexture
+#define qglBitmap glBitmap
+#define qglBlendFunc glBlendFunc
+#define qglCallList glCallList
+#define qglCallLists glCallLists
+#define qglClear glClear
+#define qglClearAccum glClearAccum
+#define qglClearColor glClearColor
+#ifdef USE_OPENGLES
+#define qglClearDepth glClearDepthf
+#else
+#define qglClearDepth glClearDepth
#endif
-
-// GL_ARB_vertex_program
-extern void (APIENTRY * qglVertexAttrib4fARB) (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
-extern void (APIENTRY * qglVertexAttrib4fvARB) (GLuint, const GLfloat *);
-extern void (APIENTRY * qglVertexAttribPointerARB) (GLuint index, GLint size, GLenum type, GLboolean normalized,
- GLsizei stride, const GLvoid * pointer);
-extern void (APIENTRY * qglEnableVertexAttribArrayARB) (GLuint index);
-extern void (APIENTRY * qglDisableVertexAttribArrayARB) (GLuint index);
-
-// GL_ARB_vertex_buffer_object
-extern void (APIENTRY * qglBindBufferARB) (GLenum target, GLuint buffer);
-extern void (APIENTRY * qglDeleteBuffersARB) (GLsizei n, const GLuint * buffers);
-extern void (APIENTRY * qglGenBuffersARB) (GLsizei n, GLuint * buffers);
-extern GLboolean(APIENTRY * qglIsBufferARB) (GLuint buffer);
-extern void (APIENTRY * qglBufferDataARB) (GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage);
-extern void (APIENTRY * qglBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data);
-extern void (APIENTRY * qglGetBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data);
-extern void (APIENTRY * qglGetBufferParameterivARB) (GLenum target, GLenum pname, GLint * params);
-extern void (APIENTRY * qglGetBufferPointervARB) (GLenum target, GLenum pname, GLvoid * *params);
-
-// GL_ARB_shader_objects
-extern void (APIENTRY * qglDeleteObjectARB) (GLhandleARB obj);
-extern GLhandleARB(APIENTRY * qglGetHandleARB) (GLenum pname);
-extern void (APIENTRY * qglDetachObjectARB) (GLhandleARB containerObj, GLhandleARB attachedObj);
-extern GLhandleARB(APIENTRY * qglCreateShaderObjectARB) (GLenum shaderType);
-extern void (APIENTRY * qglShaderSourceARB) (GLhandleARB shaderObj, GLsizei count, const GLcharARB * *string,
- const GLint * length);
-extern void (APIENTRY * qglCompileShaderARB) (GLhandleARB shaderObj);
-extern GLhandleARB(APIENTRY * qglCreateProgramObjectARB) (void);
-extern void (APIENTRY * qglAttachObjectARB) (GLhandleARB containerObj, GLhandleARB obj);
-extern void (APIENTRY * qglLinkProgramARB) (GLhandleARB programObj);
-extern void (APIENTRY * qglUseProgramObjectARB) (GLhandleARB programObj);
-extern void (APIENTRY * qglValidateProgramARB) (GLhandleARB programObj);
-extern void (APIENTRY * qglUniform1fARB) (GLint location, GLfloat v0);
-extern void (APIENTRY * qglUniform2fARB) (GLint location, GLfloat v0, GLfloat v1);
-extern void (APIENTRY * qglUniform3fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
-extern void (APIENTRY * qglUniform4fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
-extern void (APIENTRY * qglUniform1iARB) (GLint location, GLint v0);
-extern void (APIENTRY * qglUniform2iARB) (GLint location, GLint v0, GLint v1);
-extern void (APIENTRY * qglUniform3iARB) (GLint location, GLint v0, GLint v1, GLint v2);
-extern void (APIENTRY * qglUniform4iARB) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
-extern void (APIENTRY * qglUniform1fvARB) (GLint location, GLsizei count, const GLfloat * value);
-extern void (APIENTRY * qglUniform2fvARB) (GLint location, GLsizei count, const GLfloat * value);
-extern void (APIENTRY * qglUniform3fvARB) (GLint location, GLsizei count, const GLfloat * value);
-extern void (APIENTRY * qglUniform4fvARB) (GLint location, GLsizei count, const GLfloat * value);
-extern void (APIENTRY * qglUniform2ivARB) (GLint location, GLsizei count, const GLint * value);
-extern void (APIENTRY * qglUniform3ivARB) (GLint location, GLsizei count, const GLint * value);
-extern void (APIENTRY * qglUniform4ivARB) (GLint location, GLsizei count, const GLint * value);
-extern void (APIENTRY * qglUniformMatrix2fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-extern void (APIENTRY * qglUniformMatrix3fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-extern void (APIENTRY * qglUniformMatrix4fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-extern void (APIENTRY * qglGetObjectParameterfvARB) (GLhandleARB obj, GLenum pname, GLfloat * params);
-extern void (APIENTRY * qglGetObjectParameterivARB) (GLhandleARB obj, GLenum pname, GLint * params);
-extern void (APIENTRY * qglGetInfoLogARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog);
-extern void (APIENTRY * qglGetAttachedObjectsARB) (GLhandleARB containerObj, GLsizei maxCount, GLsizei * count,
- GLhandleARB * obj);
-extern GLint(APIENTRY * qglGetUniformLocationARB) (GLhandleARB programObj, const GLcharARB * name);
-extern void (APIENTRY * qglGetActiveUniformARB) (GLhandleARB programObj, GLuint index, GLsizei maxIndex, GLsizei * length,
- GLint * size, GLenum * type, GLcharARB * name);
-extern void (APIENTRY * qglGetUniformfvARB) (GLhandleARB programObj, GLint location, GLfloat * params);
-extern void (APIENTRY * qglGetUniformivARB) (GLhandleARB programObj, GLint location, GLint * params);
-extern void (APIENTRY * qglGetShaderSourceARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source);
-
-// GL_ARB_vertex_shader
-extern void (APIENTRY * qglBindAttribLocationARB) (GLhandleARB programObj, GLuint index, const GLcharARB * name);
-extern void (APIENTRY * qglGetActiveAttribARB) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length,
- GLint * size, GLenum * type, GLcharARB * name);
-extern GLint(APIENTRY * qglGetAttribLocationARB) (GLhandleARB programObj, const GLcharARB * name);
-
-// GL_ARB_texture_compression
-extern void (APIENTRY * qglCompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
- GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
- GLint border, GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border,
- GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
- GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglCompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format,
- GLsizei imageSize, const GLvoid *data);
-extern void (APIENTRY * qglGetCompressedTexImageARB)(GLenum target, GLint lod,
- GLvoid *img);
-
-// GL_NVX_gpu_memory_info
-#ifndef GL_NVX_gpu_memory_info
-#define GL_NVX_gpu_memory_info
-#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047
-#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048
-#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049
-#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A
-#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B
+#define qglClearIndex glClearIndex
+#define qglClearStencil glClearStencil
+#ifdef USE_OPENGLES
+#define qglClipPlane glClipPlanef
+#else
+#define qglClipPlane glClipPlane
#endif
-
-// GL_ATI_meminfo
-#ifndef GL_ATI_meminfo
-#define GL_ATI_meminfo
-#define GL_VBO_FREE_MEMORY_ATI 0x87FB
-#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC
-#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD
+#define qglColor3b glColor3b
+#define qglColor3bv glColor3bv
+#define qglColor3d glColor3d
+#define qglColor3dv glColor3dv
+#ifdef USE_OPENGLES
+#define qglColor3f(r, g, b) glColor4f(r, g, b, 1.0f)
+#else
+#define qglColor3f glColor3f
#endif
-
-// GL_ARB_texture_float
-#ifndef GL_ARB_texture_float
-#define GL_ARB_texture_float
-#define GL_TEXTURE_RED_TYPE_ARB 0x8C10
-#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11
-#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12
-#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13
-#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14
-#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15
-#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16
-#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17
-#define GL_RGBA32F_ARB 0x8814
-#define GL_RGB32F_ARB 0x8815
-#define GL_ALPHA32F_ARB 0x8816
-#define GL_INTENSITY32F_ARB 0x8817
-#define GL_LUMINANCE32F_ARB 0x8818
-#define GL_LUMINANCE_ALPHA32F_ARB 0x8819
-#define GL_RGBA16F_ARB 0x881A
-#define GL_RGB16F_ARB 0x881B
-#define GL_ALPHA16F_ARB 0x881C
-#define GL_INTENSITY16F_ARB 0x881D
-#define GL_LUMINANCE16F_ARB 0x881E
-#define GL_LUMINANCE_ALPHA16F_ARB 0x881F
+#define qglColor3fv glColor3fv
+#define qglColor3i glColor3i
+#define qglColor3iv glColor3iv
+#define qglColor3s glColor3s
+#define qglColor3sv glColor3sv
+#define qglColor3ub glColor3ub
+#define qglColor3ubv glColor3ubv
+#define qglColor3ui glColor3ui
+#define qglColor3uiv glColor3uiv
+#define qglColor3us glColor3us
+#define qglColor3usv glColor3usv
+#define qglColor4b glColor4b
+#define qglColor4bv glColor4bv
+#define qglColor4d glColor4d
+#define qglColor4dv glColor4dv
+#define qglColor4f glColor4f
+#define qglColor4fv glColor4fv
+#define qglColor4i glColor4i
+#define qglColor4iv glColor4iv
+#define qglColor4s glColor4s
+#define qglColor4sv glColor4sv
+#define qglColor4ub glColor4ub
+#ifdef USE_OPENGLES
+#define qglColor4ubv(a) glColor4ub((a)[0], (a)[1], (a)[2], (a)[3])
+#else
+#define qglColor4ubv glColor4ubv
#endif
-
-#ifndef GL_ARB_half_float_pixel
-#define GL_ARB_half_float_pixel
-#define GL_HALF_FLOAT_ARB 0x140B
+#define qglColor4ui glColor4ui
+#define qglColor4uiv glColor4uiv
+#define qglColor4us glColor4us
+#define qglColor4usv glColor4usv
+#define qglColorMask glColorMask
+#define qglColorMaterial glColorMaterial
+#define qglColorPointer glColorPointer
+#define qglCopyPixels glCopyPixels
+#define qglCopyTexImage1D glCopyTexImage1D
+#define qglCopyTexImage2D glCopyTexImage2D
+#define qglCopyTexSubImage1D glCopyTexSubImage1D
+#define qglCopyTexSubImage2D glCopyTexSubImage2D
+#define qglCullFace glCullFace
+#define qglDeleteLists glDeleteLists
+#define qglDeleteTextures glDeleteTextures
+#define qglDepthFunc glDepthFunc
+#define qglDepthMask glDepthMask
+#ifdef USE_OPENGLES
+#define qglDepthRange glDepthRangef
+#else
+#define qglDepthRange glDepthRange
#endif
-
-// GL_EXT_framebuffer_object
-extern GLboolean (APIENTRY * qglIsRenderbufferEXT)(GLuint renderbuffer);
-extern void (APIENTRY * qglBindRenderbufferEXT)(GLenum target, GLuint renderbuffer);
-extern void (APIENTRY * qglDeleteRenderbuffersEXT)(GLsizei n, const GLuint *renderbuffers);
-extern void (APIENTRY * qglGenRenderbuffersEXT)(GLsizei n, GLuint *renderbuffers);
+#define qglDisable glDisable
+#define qglDisableClientState glDisableClientState
+#define qglDrawArrays glDrawArrays
+#define qglDrawBuffer glDrawBuffer
+#define qglDrawElements glDrawElements
+#define qglDrawPixels glDrawPixels
+#define qglEdgeFlag glEdgeFlag
+#define qglEdgeFlagPointer glEdgeFlagPointer
+#define qglEdgeFlagv glEdgeFlagv
+#define qglEnable glEnable
+#define qglEnableClientState glEnableClientState
+#define qglEnd glEnd
+#define qglEndList glEndList
+#define qglEvalCoord1d glEvalCoord1d
+#define qglEvalCoord1dv glEvalCoord1dv
+#define qglEvalCoord1f glEvalCoord1f
+#define qglEvalCoord1fv glEvalCoord1fv
+#define qglEvalCoord2d glEvalCoord2d
+#define qglEvalCoord2dv glEvalCoord2dv
+#define qglEvalCoord2f glEvalCoord2f
+#define qglEvalCoord2fv glEvalCoord2fv
+#define qglEvalMesh1 glEvalMesh1
+#define qglEvalMesh2 glEvalMesh2
+#define qglEvalPoint1 glEvalPoint1
+#define qglEvalPoint2 glEvalPoint2
+#define qglFeedbackBuffer glFeedbackBuffer
+#define qglFinish glFinish
+#define qglFlush glFlush
+#define qglFogf glFogf
+#define qglFogfv glFogfv
+#ifdef USE_OPENGLES
+#define qglFogi glFogf
+#else
+#define qglFogi glFogi
+#endif
+#define qglFogiv glFogiv
+#define qglFrontFace glFrontFace
+#ifdef USE_OPENGLES
+#define qglFrustum glFrustumf
+#else
+#define qglFrustum glFrustum
+#endif
+#define qglGenLists glGenLists
+#define qglGenTextures glGenTextures
+#define qglGetBooleanv glGetBooleanv
+#define qglGetClipPlane glGetClipPlane
+#define qglGetDoublev glGetDoublev
+#define qglGetError glGetError
+#define qglGetFloatv glGetFloatv
+#define qglGetIntegerv glGetIntegerv
+#define qglGetLightfv glGetLightfv
+#define qglGetLightiv glGetLightiv
+#define qglGetMapdv glGetMapdv
+#define qglGetMapfv glGetMapfv
+#define qglGetMapiv glGetMapiv
+#define qglGetMaterialfv glGetMaterialfv
+#define qglGetMaterialiv glGetMaterialiv
+#define qglGetPixelMapfv glGetPixelMapfv
+#define qglGetPixelMapuiv glGetPixelMapuiv
+#define qglGetPixelMapusv glGetPixelMapusv
+#define qglGetPointerv glGetPointerv
+#define qglGetPolygonStipple glGetPolygonStipple
+#define qglGetString glGetString
+#define qglGetTexGendv glGetTexGendv
+#define qglGetTexGenfv glGetTexGenfv
+#define qglGetTexGeniv glGetTexGeniv
+#define qglGetTexImage glGetTexImage
+#define qglGetTexLevelParameterfv glGetTexLevelParameterfv
+#define qglGetTexLevelParameteriv glGetTexLevelParameteriv
+#define qglGetTexParameterfv glGetTexParameterfv
+#define qglGetTexParameteriv glGetTexParameteriv
+#define qglHint glHint
+#define qglIndexMask glIndexMask
+#define qglIndexPointer glIndexPointer
+#define qglIndexd glIndexd
+#define qglIndexdv glIndexdv
+#define qglIndexf glIndexf
+#define qglIndexfv glIndexfv
+#define qglIndexi glIndexi
+#define qglIndexiv glIndexiv
+#define qglIndexs glIndexs
+#define qglIndexsv glIndexsv
+#define qglIndexub glIndexub
+#define qglIndexubv glIndexubv
+#define qglInitNames glInitNames
+#define qglInterleavedArrays glInterleavedArrays
+#define qglIsEnabled glIsEnabled
+#define qglIsList glIsList
+#define qglIsTexture glIsTexture
+#define qglLightModelf glLightModelf
+#define qglLightModelfv glLightModelfv
+#define qglLightModeli glLightModeli
+#define qglLightModeliv glLightModeliv
+#define qglLightf glLightf
+#define qglLightfv glLightfv
+#define qglLighti glLighti
+#define qglLightiv glLightiv
+#define qglLineStipple glLineStipple
+#define qglLineWidth glLineWidth
+#define qglListBase glListBase
+#define qglLoadIdentity glLoadIdentity
+#define qglLoadMatrixd glLoadMatrixd
+#define qglLoadMatrixf glLoadMatrixf
+#define qglLoadName glLoadName
+#define qglLogicOp glLogicOp
+#define qglMap1d glMap1d
+#define qglMap1f glMap1f
+#define qglMap2d glMap2d
+#define qglMap2f glMap2f
+#define qglMapGrid1d glMapGrid1d
+#define qglMapGrid1f glMapGrid1f
+#define qglMapGrid2d glMapGrid2d
+#define qglMapGrid2f glMapGrid2f
+#define qglMaterialf glMaterialf
+#define qglMaterialfv glMaterialfv
+#define qglMateriali glMateriali
+#define qglMaterialiv glMaterialiv
+#define qglMatrixMode glMatrixMode
+#define qglMultMatrixd glMultMatrixd
+#define qglMultMatrixf glMultMatrixf
+#define qglNewList glNewList
+#define qglNormal3b glNormal3b
+#define qglNormal3bv glNormal3bv
+#define qglNormal3d glNormal3d
+#define qglNormal3dv glNormal3dv
+#define qglNormal3f glNormal3f
+#define qglNormal3fv glNormal3fv
+#define qglNormal3i glNormal3i
+#define qglNormal3iv glNormal3iv
+#define qglNormal3s glNormal3s
+#define qglNormal3sv glNormal3sv
+#define qglNormalPointer glNormalPointer
+#ifdef USE_OPENGLES
+#define qglOrtho glOrthof
+#else
+#define qglOrtho glOrtho
+#endif
+#define qglPassThrough glPassThrough
+#define qglPixelMapfv glPixelMapfv
+#define qglPixelMapuiv glPixelMapuiv
+#define qglPixelMapusv glPixelMapusv
+#define qglPixelStoref glPixelStoref
+#define qglPixelStorei glPixelStorei
+#define qglPixelTransferf glPixelTransferf
+#define qglPixelTransferi glPixelTransferi
+#define qglPixelZoom glPixelZoom
+#define qglPointSize glPointSize
+#define qglPolygonMode glPolygonMode
+#define qglPolygonOffset glPolygonOffset
+#define qglPolygonStipple glPolygonStipple
+#define qglPopAttrib glPopAttrib
+#define qglPopClientAttrib glPopClientAttrib
+#define qglPopMatrix glPopMatrix
+#define qglPopName glPopName
+#define qglPrioritizeTextures glPrioritizeTextures
+#define qglPushAttrib glPushAttrib
+#define qglPushClientAttrib glPushClientAttrib
+#define qglPushMatrix glPushMatrix
+#define qglPushName glPushName
+#define qglRasterPos2d glRasterPos2d
+#define qglRasterPos2dv glRasterPos2dv
+#define qglRasterPos2f glRasterPos2f
+#define qglRasterPos2fv glRasterPos2fv
+#define qglRasterPos2i glRasterPos2i
+#define qglRasterPos2iv glRasterPos2iv
+#define qglRasterPos2s glRasterPos2s
+#define qglRasterPos2sv glRasterPos2sv
+#define qglRasterPos3d glRasterPos3d
+#define qglRasterPos3dv glRasterPos3dv
+#define qglRasterPos3f glRasterPos3f
+#define qglRasterPos3fv glRasterPos3fv
+#define qglRasterPos3i glRasterPos3i
+#define qglRasterPos3iv glRasterPos3iv
+#define qglRasterPos3s glRasterPos3s
+#define qglRasterPos3sv glRasterPos3sv
+#define qglRasterPos4d glRasterPos4d
+#define qglRasterPos4dv glRasterPos4dv
+#define qglRasterPos4f glRasterPos4f
+#define qglRasterPos4fv glRasterPos4fv
+#define qglRasterPos4i glRasterPos4i
+#define qglRasterPos4iv glRasterPos4iv
+#define qglRasterPos4s glRasterPos4s
+#define qglRasterPos4sv glRasterPos4sv
+#define qglReadBuffer glReadBuffer
+#define qglReadPixels glReadPixels
+#define qglRectd glRectd
+#define qglRectdv glRectdv
+#define qglRectf glRectf
+#define qglRectfv glRectfv
+#define qglRecti glRecti
+#define qglRectiv glRectiv
+#define qglRects glRects
+#define qglRectsv glRectsv
+#define qglRenderMode glRenderMode
+#define qglRotated glRotated
+#define qglRotatef glRotatef
+#define qglScaled glScaled
+#define qglScalef glScalef
+#define qglScissor glScissor
+#define qglSelectBuffer glSelectBuffer
+#define qglShadeModel glShadeModel
+#define qglStencilFunc glStencilFunc
+#define qglStencilMask glStencilMask
+#define qglStencilOp glStencilOp
+#define qglTexCoord1d glTexCoord1d
+#define qglTexCoord1dv glTexCoord1dv
+#define qglTexCoord1f glTexCoord1f
+#define qglTexCoord1fv glTexCoord1fv
+#define qglTexCoord1i glTexCoord1i
+#define qglTexCoord1iv glTexCoord1iv
+#define qglTexCoord1s glTexCoord1s
+#define qglTexCoord1sv glTexCoord1sv
+#define qglTexCoord2d glTexCoord2d
+#define qglTexCoord2dv glTexCoord2dv
+#define qglTexCoord2f glTexCoord2f
+#define qglTexCoord2fv glTexCoord2fv
+#define qglTexCoord2i glTexCoord2i
+#define qglTexCoord2iv glTexCoord2iv
+#define qglTexCoord2s glTexCoord2s
+#define qglTexCoord2sv glTexCoord2sv
+#define qglTexCoord3d glTexCoord3d
+#define qglTexCoord3dv glTexCoord3dv
+#define qglTexCoord3f glTexCoord3f
+#define qglTexCoord3fv glTexCoord3fv
+#define qglTexCoord3i glTexCoord3i
+#define qglTexCoord3iv glTexCoord3iv
+#define qglTexCoord3s glTexCoord3s
+#define qglTexCoord3sv glTexCoord3sv
+#define qglTexCoord4d glTexCoord4d
+#define qglTexCoord4dv glTexCoord4dv
+#define qglTexCoord4f glTexCoord4f
+#define qglTexCoord4fv glTexCoord4fv
+#define qglTexCoord4i glTexCoord4i
+#define qglTexCoord4iv glTexCoord4iv
+#define qglTexCoord4s glTexCoord4s
+#define qglTexCoord4sv glTexCoord4sv
+#define qglTexCoordPointer glTexCoordPointer
+#define qglTexEnvf glTexEnvf
+#define qglTexEnvfv glTexEnvfv
+#define qglTexEnvi glTexEnvi
+#define qglTexEnviv glTexEnviv
+#define qglTexGend glTexGend
+#define qglTexGendv glTexGendv
+#define qglTexGenf glTexGenf
+#define qglTexGenfv glTexGenfv
+#define qglTexGeni glTexGeni
+#define qglTexGeniv glTexGeniv
+#define qglTexImage1D glTexImage1D
+#define qglTexImage2D glTexImage2D
+#define qglTexParameterf glTexParameterf
+#define qglTexParameterfv glTexParameterfv
+#define qglTexParameteri glTexParameteri
+#define qglTexParameteriv glTexParameteriv
+#define qglTexSubImage1D glTexSubImage1D
+#define qglTexSubImage2D glTexSubImage2D
+#define qglTranslated glTranslated
+#define qglTranslatef glTranslatef
+#define qglVertex2d glVertex2d
+#define qglVertex2dv glVertex2dv
+#define qglVertex2f glVertex2f
+#define qglVertex2fv glVertex2fv
+#define qglVertex2i glVertex2i
+#define qglVertex2iv glVertex2iv
+#define qglVertex2s glVertex2s
+#define qglVertex2sv glVertex2sv
+#define qglVertex3d glVertex3d
+#define qglVertex3dv glVertex3dv
+#define qglVertex3f glVertex3f
+#define qglVertex3fv glVertex3fv
+#define qglVertex3i glVertex3i
+#define qglVertex3iv glVertex3iv
+#define qglVertex3s glVertex3s
+#define qglVertex3sv glVertex3sv
+#define qglVertex4d glVertex4d
+#define qglVertex4dv glVertex4dv
+#define qglVertex4f glVertex4f
+#define qglVertex4fv glVertex4fv
+#define qglVertex4i glVertex4i
+#define qglVertex4iv glVertex4iv
+#define qglVertex4s glVertex4s
+#define qglVertex4sv glVertex4sv
+#define qglVertexPointer glVertexPointer
+#define qglViewport glViewport
+
+// GL_EXT_draw_range_elements
+extern void (APIENTRY * qglDrawRangeElementsEXT) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+
+// GL_EXT_multi_draw_arrays
+extern void (APIENTRY * qglMultiDrawArraysEXT) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+extern void (APIENTRY * qglMultiDrawElementsEXT) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
+
+#ifndef USE_OPENGLES
+// rend2
+
+// GL_ARB_shading_language_100
+#ifndef GL_ARB_shading_language_100
+#define GL_ARB_shading_language_100
+#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C
+#endif
+
+// GL_ARB_vertex_program
+extern void (APIENTRY * qglVertexAttrib4fARB) (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+extern void (APIENTRY * qglVertexAttrib4fvARB) (GLuint, const GLfloat *);
+extern void (APIENTRY * qglVertexAttribPointerARB) (GLuint index, GLint size, GLenum type, GLboolean normalized,
+ GLsizei stride, const GLvoid * pointer);
+extern void (APIENTRY * qglEnableVertexAttribArrayARB) (GLuint index);
+extern void (APIENTRY * qglDisableVertexAttribArrayARB) (GLuint index);
+
+// GL_ARB_vertex_buffer_object
+extern void (APIENTRY * qglBindBufferARB) (GLenum target, GLuint buffer);
+extern void (APIENTRY * qglDeleteBuffersARB) (GLsizei n, const GLuint * buffers);
+extern void (APIENTRY * qglGenBuffersARB) (GLsizei n, GLuint * buffers);
+extern GLboolean(APIENTRY * qglIsBufferARB) (GLuint buffer);
+extern void (APIENTRY * qglBufferDataARB) (GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage);
+extern void (APIENTRY * qglBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data);
+extern void (APIENTRY * qglGetBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data);
+extern void (APIENTRY * qglGetBufferParameterivARB) (GLenum target, GLenum pname, GLint * params);
+extern void (APIENTRY * qglGetBufferPointervARB) (GLenum target, GLenum pname, GLvoid * *params);
+
+// GL_ARB_shader_objects
+extern void (APIENTRY * qglDeleteObjectARB) (GLhandleARB obj);
+extern GLhandleARB(APIENTRY * qglGetHandleARB) (GLenum pname);
+extern void (APIENTRY * qglDetachObjectARB) (GLhandleARB containerObj, GLhandleARB attachedObj);
+extern GLhandleARB(APIENTRY * qglCreateShaderObjectARB) (GLenum shaderType);
+extern void (APIENTRY * qglShaderSourceARB) (GLhandleARB shaderObj, GLsizei count, const GLcharARB * *string,
+ const GLint * length);
+extern void (APIENTRY * qglCompileShaderARB) (GLhandleARB shaderObj);
+extern GLhandleARB(APIENTRY * qglCreateProgramObjectARB) (void);
+extern void (APIENTRY * qglAttachObjectARB) (GLhandleARB containerObj, GLhandleARB obj);
+extern void (APIENTRY * qglLinkProgramARB) (GLhandleARB programObj);
+extern void (APIENTRY * qglUseProgramObjectARB) (GLhandleARB programObj);
+extern void (APIENTRY * qglValidateProgramARB) (GLhandleARB programObj);
+extern void (APIENTRY * qglUniform1fARB) (GLint location, GLfloat v0);
+extern void (APIENTRY * qglUniform2fARB) (GLint location, GLfloat v0, GLfloat v1);
+extern void (APIENTRY * qglUniform3fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+extern void (APIENTRY * qglUniform4fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+extern void (APIENTRY * qglUniform1iARB) (GLint location, GLint v0);
+extern void (APIENTRY * qglUniform2iARB) (GLint location, GLint v0, GLint v1);
+extern void (APIENTRY * qglUniform3iARB) (GLint location, GLint v0, GLint v1, GLint v2);
+extern void (APIENTRY * qglUniform4iARB) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+extern void (APIENTRY * qglUniform1fvARB) (GLint location, GLsizei count, const GLfloat * value);
+extern void (APIENTRY * qglUniform2fvARB) (GLint location, GLsizei count, const GLfloat * value);
+extern void (APIENTRY * qglUniform3fvARB) (GLint location, GLsizei count, const GLfloat * value);
+extern void (APIENTRY * qglUniform4fvARB) (GLint location, GLsizei count, const GLfloat * value);
+extern void (APIENTRY * qglUniform2ivARB) (GLint location, GLsizei count, const GLint * value);
+extern void (APIENTRY * qglUniform3ivARB) (GLint location, GLsizei count, const GLint * value);
+extern void (APIENTRY * qglUniform4ivARB) (GLint location, GLsizei count, const GLint * value);
+extern void (APIENTRY * qglUniformMatrix2fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
+extern void (APIENTRY * qglUniformMatrix3fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
+extern void (APIENTRY * qglUniformMatrix4fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
+extern void (APIENTRY * qglGetObjectParameterfvARB) (GLhandleARB obj, GLenum pname, GLfloat * params);
+extern void (APIENTRY * qglGetObjectParameterivARB) (GLhandleARB obj, GLenum pname, GLint * params);
+extern void (APIENTRY * qglGetInfoLogARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog);
+extern void (APIENTRY * qglGetAttachedObjectsARB) (GLhandleARB containerObj, GLsizei maxCount, GLsizei * count,
+ GLhandleARB * obj);
+extern GLint(APIENTRY * qglGetUniformLocationARB) (GLhandleARB programObj, const GLcharARB * name);
+extern void (APIENTRY * qglGetActiveUniformARB) (GLhandleARB programObj, GLuint index, GLsizei maxIndex, GLsizei * length,
+ GLint * size, GLenum * type, GLcharARB * name);
+extern void (APIENTRY * qglGetUniformfvARB) (GLhandleARB programObj, GLint location, GLfloat * params);
+extern void (APIENTRY * qglGetUniformivARB) (GLhandleARB programObj, GLint location, GLint * params);
+extern void (APIENTRY * qglGetShaderSourceARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source);
+
+// GL_ARB_vertex_shader
+extern void (APIENTRY * qglBindAttribLocationARB) (GLhandleARB programObj, GLuint index, const GLcharARB * name);
+extern void (APIENTRY * qglGetActiveAttribARB) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length,
+ GLint * size, GLenum * type, GLcharARB * name);
+extern GLint(APIENTRY * qglGetAttribLocationARB) (GLhandleARB programObj, const GLcharARB * name);
+
+// GL_ARB_texture_compression
+extern void (APIENTRY * qglCompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
+ GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+extern void (APIENTRY * qglCompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
+ GLint border, GLsizei imageSize, const GLvoid *data);
+extern void (APIENTRY * qglCompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border,
+ GLsizei imageSize, const GLvoid *data);
+extern void (APIENTRY * qglCompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
+ GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+extern void (APIENTRY * qglCompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
+ GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+extern void (APIENTRY * qglCompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format,
+ GLsizei imageSize, const GLvoid *data);
+extern void (APIENTRY * qglGetCompressedTexImageARB)(GLenum target, GLint lod,
+ GLvoid *img);
+
+// GL_NVX_gpu_memory_info
+#ifndef GL_NVX_gpu_memory_info
+#define GL_NVX_gpu_memory_info
+#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047
+#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048
+#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049
+#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A
+#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B
+#endif
+
+// GL_ATI_meminfo
+#ifndef GL_ATI_meminfo
+#define GL_ATI_meminfo
+#define GL_VBO_FREE_MEMORY_ATI 0x87FB
+#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC
+#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD
+#endif
+
+// GL_ARB_texture_float
+#ifndef GL_ARB_texture_float
+#define GL_ARB_texture_float
+#define GL_TEXTURE_RED_TYPE_ARB 0x8C10
+#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11
+#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12
+#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13
+#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15
+#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16
+#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17
+#define GL_RGBA32F_ARB 0x8814
+#define GL_RGB32F_ARB 0x8815
+#define GL_ALPHA32F_ARB 0x8816
+#define GL_INTENSITY32F_ARB 0x8817
+#define GL_LUMINANCE32F_ARB 0x8818
+#define GL_LUMINANCE_ALPHA32F_ARB 0x8819
+#define GL_RGBA16F_ARB 0x881A
+#define GL_RGB16F_ARB 0x881B
+#define GL_ALPHA16F_ARB 0x881C
+#define GL_INTENSITY16F_ARB 0x881D
+#define GL_LUMINANCE16F_ARB 0x881E
+#define GL_LUMINANCE_ALPHA16F_ARB 0x881F
+#endif
+
+#ifndef GL_ARB_half_float_pixel
+#define GL_ARB_half_float_pixel
+#define GL_HALF_FLOAT_ARB 0x140B
+#endif
+
+// GL_EXT_framebuffer_object
+extern GLboolean (APIENTRY * qglIsRenderbufferEXT)(GLuint renderbuffer);
+extern void (APIENTRY * qglBindRenderbufferEXT)(GLenum target, GLuint renderbuffer);
+extern void (APIENTRY * qglDeleteRenderbuffersEXT)(GLsizei n, const GLuint *renderbuffers);
+extern void (APIENTRY * qglGenRenderbuffersEXT)(GLsizei n, GLuint *renderbuffers);
extern void (APIENTRY * qglRenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
extern void (APIENTRY * qglGetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint *params);
extern GLboolean (APIENTRY * qglIsFramebufferEXT)(GLuint framebuffer);
@@ -360,543 +739,172 @@ extern void (APIENTRY * qglGenerateMipmapEXT)(GLenum target);
// GL_EXT_packed_depth_stencil
#ifndef GL_EXT_packed_depth_stencil
-#define GL_EXT_packed_depth_stencil
-#define GL_DEPTH_STENCIL_EXT 0x84F9
-#define GL_UNSIGNED_INT_24_8_EXT 0x84FA
-#define GL_DEPTH24_STENCIL8_EXT 0x88F0
-#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1
-#endif
-
-// GL_ARB_occlusion_query
-extern void (APIENTRY * qglGenQueriesARB)(GLsizei n, GLuint *ids);
-extern void (APIENTRY * qglDeleteQueriesARB)(GLsizei n, const GLuint *ids);
-extern GLboolean (APIENTRY * qglIsQueryARB)(GLuint id);
-extern void (APIENTRY * qglBeginQueryARB)(GLenum target, GLuint id);
-extern void (APIENTRY * qglEndQueryARB)(GLenum target);
-extern void (APIENTRY * qglGetQueryivARB)(GLenum target, GLenum pname, GLint *params);
-extern void (APIENTRY * qglGetQueryObjectivARB)(GLuint id, GLenum pname, GLint *params);
-extern void (APIENTRY * qglGetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint *params);
-
-#ifndef GL_ARB_occlusion_query
-#define GL_ARB_occlusion_query
-#define GL_SAMPLES_PASSED_ARB 0x8914
-#define GL_QUERY_COUNTER_BITS_ARB 0x8864
-#define GL_CURRENT_QUERY_ARB 0x8865
-#define GL_QUERY_RESULT_ARB 0x8866
-#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867
-#endif
-
-// GL_EXT_framebuffer_blit
-extern void (APIENTRY * qglBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
- GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
- GLbitfield mask, GLenum filter);
-
-#ifndef GL_EXT_framebuffer_blit
-#define GL_EXT_framebuffer_blit
-#define GL_READ_FRAMEBUFFER_EXT 0x8CA8
-#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9
-#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6
-#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA
-#endif
-
-// GL_EXT_framebuffer_multisample
-extern void (APIENTRY * qglRenderbufferStorageMultisampleEXT)(GLenum target, GLsizei samples,
- GLenum internalformat, GLsizei width, GLsizei height);
-
-#ifndef GL_EXT_framebuffer_multisample
-#define GL_EXT_framebuffer_multisample
-#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB
-#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56
-#define GL_MAX_SAMPLES_EXT 0x8D57
-#endif
-
-#ifndef GL_EXT_texture_sRGB
-#define GL_EXT_texture_sRGB
-#define GL_SRGB_EXT 0x8C40
-#define GL_SRGB8_EXT 0x8C41
-#define GL_SRGB_ALPHA_EXT 0x8C42
-#define GL_SRGB8_ALPHA8_EXT 0x8C43
-#define GL_SLUMINANCE_ALPHA_EXT 0x8C44
-#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45
-#define GL_SLUMINANCE_EXT 0x8C46
-#define GL_SLUMINANCE8_EXT 0x8C47
-#define GL_COMPRESSED_SRGB_EXT 0x8C48
-#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49
-#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A
-#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B
-#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C
-#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D
-#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E
-#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F
-#endif
-
-#ifndef GL_EXT_framebuffer_sRGB
-#define GL_EXT_framebuffer_sRGB
-#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
-#endif
-
-#ifndef GL_EXT_texture_compression_latc
-#define GL_EXT_texture_compression_latc
-#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70
-#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71
-#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72
-#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73
-#endif
-
-#ifndef GL_ARB_texture_compression_bptc
-#define GL_ARB_texture_compression_bptc
-#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C
-#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D
-#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E
-#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F
-#endif
-
-// GL_ARB_draw_buffers
-extern void (APIENTRY * qglDrawBuffersARB)(GLsizei n, const GLenum *bufs);
-#ifndef GL_ARB_draw_buffers
-#define GL_ARB_draw_buffers
-#define GL_MAX_DRAW_BUFFERS_ARB 0x8824
-#define GL_DRAW_BUFFER0_ARB 0x8825
-#define GL_DRAW_BUFFER1_ARB 0x8826
-#define GL_DRAW_BUFFER2_ARB 0x8827
-#define GL_DRAW_BUFFER3_ARB 0x8828
-#define GL_DRAW_BUFFER4_ARB 0x8829
-#define GL_DRAW_BUFFER5_ARB 0x882A
-#define GL_DRAW_BUFFER6_ARB 0x882B
-#define GL_DRAW_BUFFER7_ARB 0x882C
-#define GL_DRAW_BUFFER8_ARB 0x882D
-#define GL_DRAW_BUFFER9_ARB 0x882E
-#define GL_DRAW_BUFFER10_ARB 0x882F
-#define GL_DRAW_BUFFER11_ARB 0x8830
-#define GL_DRAW_BUFFER12_ARB 0x8831
-#define GL_DRAW_BUFFER13_ARB 0x8832
-#define GL_DRAW_BUFFER14_ARB 0x8833
-#define GL_DRAW_BUFFER15_ARB 0x8834
-#endif
-
-#ifndef GL_ARB_depth_clamp
-#define GL_ARB_depth_clamp
-#define GL_DEPTH_CLAMP 0x864F
-#endif
-
-#ifndef GL_ARB_seamless_cube_map
-#define GL_ARB_seamless_cube_map
-#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F
-#endif
-
-// GL_ARB_vertex_array_object
-extern void (APIENTRY * qglBindVertexArrayARB)(GLuint array);
-extern void (APIENTRY * qglDeleteVertexArraysARB)(GLsizei n, const GLuint *arrays);
-extern void (APIENTRY * qglGenVertexArraysARB)(GLsizei n, GLuint *arrays);
-extern GLboolean (APIENTRY * qglIsVertexArrayARB)(GLuint array);
-#ifndef GL_ARB_vertex_array_object
-#define GL_ARB_vertex_array_object
-#define GL_VERTEX_ARRAY_BINDING_ARB 0x85B5
-#endif
-
-#if defined(WIN32)
-// WGL_ARB_create_context
-#ifndef WGL_ARB_create_context
-#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
-#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092
-#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093
-#define WGL_CONTEXT_FLAGS_ARB 0x2094
-#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126
-#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001
-#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002
-#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
-#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
-#define ERROR_INVALID_VERSION_ARB 0x2095
-#define ERROR_INVALID_PROFILE_ARB 0x2096
+#define GL_EXT_packed_depth_stencil
+#define GL_DEPTH_STENCIL_EXT 0x84F9
+#define GL_UNSIGNED_INT_24_8_EXT 0x84FA
+#define GL_DEPTH24_STENCIL8_EXT 0x88F0
+#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1
#endif
-extern HGLRC(APIENTRY * qwglCreateContextAttribsARB) (HDC hdC, HGLRC hShareContext, const int *attribList);
-#endif
+// GL_ARB_occlusion_query
+extern void (APIENTRY * qglGenQueriesARB)(GLsizei n, GLuint *ids);
+extern void (APIENTRY * qglDeleteQueriesARB)(GLsizei n, const GLuint *ids);
+extern GLboolean (APIENTRY * qglIsQueryARB)(GLuint id);
+extern void (APIENTRY * qglBeginQueryARB)(GLenum target, GLuint id);
+extern void (APIENTRY * qglEndQueryARB)(GLenum target);
+extern void (APIENTRY * qglGetQueryivARB)(GLenum target, GLenum pname, GLint *params);
+extern void (APIENTRY * qglGetQueryObjectivARB)(GLuint id, GLenum pname, GLint *params);
+extern void (APIENTRY * qglGetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint *params);
-#if 0 //defined(__linux__)
-// GLX_ARB_create_context
-#ifndef GLX_ARB_create_context
-#define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001
-#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
-#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
-#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
-#define GLX_CONTEXT_FLAGS_ARB 0x2094
+#ifndef GL_ARB_occlusion_query
+#define GL_ARB_occlusion_query
+#define GL_SAMPLES_PASSED_ARB 0x8914
+#define GL_QUERY_COUNTER_BITS_ARB 0x8864
+#define GL_CURRENT_QUERY_ARB 0x8865
+#define GL_QUERY_RESULT_ARB 0x8866
+#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867
#endif
-extern GLXContext (APIENTRY * qglXCreateContextAttribsARB) (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
-#endif
+// GL_EXT_framebuffer_blit
+extern void (APIENTRY * qglBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
+ GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
+ GLbitfield mask, GLenum filter);
+#ifndef GL_EXT_framebuffer_blit
+#define GL_EXT_framebuffer_blit
+#define GL_READ_FRAMEBUFFER_EXT 0x8CA8
+#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9
+#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6
+#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA
#endif
-//===========================================================================
+// GL_EXT_framebuffer_multisample
+extern void (APIENTRY * qglRenderbufferStorageMultisampleEXT)(GLenum target, GLsizei samples,
+ GLenum internalformat, GLsizei width, GLsizei height);
-#define qglAccum glAccum
-#define qglAlphaFunc glAlphaFunc
-#define qglAreTexturesResident glAreTexturesResident
-#define qglArrayElement glArrayElement
-#define qglBegin glBegin
-#define qglBindTexture glBindTexture
-#define qglBitmap glBitmap
-#define qglBlendFunc glBlendFunc
-#define qglCallList glCallList
-#define qglCallLists glCallLists
-#ifdef VCMODS_DEPTH
-#define qglClear myglClear
-#else
-#define qglClear glClear
-#endif
-#define qglClearAccum glClearAccum
-#define qglClearColor glClearColor
-#ifdef VCMODS_OPENGLES
-#define qglClearDepth glClearDepthf
-#else
-#define qglClearDepth glClearDepth
-#endif
-#define qglClearIndex glClearIndex
-#define qglClearStencil glClearStencil
-#ifdef VCMODS_OPENGLES
-#define qglClipPlane glClipPlanef
-#else
-#define qglClipPlane glClipPlane
-#endif
-#define qglColor3b glColor3b
-#define qglColor3bv glColor3bv
-#define qglColor3d glColor3d
-#define qglColor3dv glColor3dv
-#define qglColor3f glColor3f
-#define qglColor3fv glColor3fv
-#define qglColor3i glColor3i
-#define qglColor3iv glColor3iv
-#define qglColor3s glColor3s
-#define qglColor3sv glColor3sv
-#define qglColor3ub glColor3ub
-#define qglColor3ubv glColor3ubv
-#define qglColor3ui glColor3ui
-#define qglColor3uiv glColor3uiv
-#define qglColor3us glColor3us
-#define qglColor3usv glColor3usv
-#define qglColor4b glColor4b
-#define qglColor4bv glColor4bv
-#define qglColor4d glColor4d
-#define qglColor4dv glColor4dv
-#define qglColor4f glColor4f
-#define qglColor4fv glColor4fv
-#define qglColor4i glColor4i
-#define qglColor4iv glColor4iv
-#define qglColor4s glColor4s
-#define qglColor4sv glColor4sv
-#define qglColor4ub glColor4ub
-#define qglColor4ubv glColor4ubv
-#define qglColor4ui glColor4ui
-#define qglColor4uiv glColor4uiv
-#define qglColor4us glColor4us
-#define qglColor4usv glColor4usv
-#define qglColorMask glColorMask
-#define qglColorMaterial glColorMaterial
-#define qglColorPointer glColorPointer
-#define qglCopyPixels glCopyPixels
-#define qglCopyTexImage1D glCopyTexImage1D
-#define qglCopyTexImage2D glCopyTexImage2D
-#define qglCopyTexSubImage1D glCopyTexSubImage1D
-#define qglCopyTexSubImage2D glCopyTexSubImage2D
-#define qglCullFace glCullFace
-#define qglDeleteLists glDeleteLists
-#define qglDeleteTextures glDeleteTextures
-#define qglDepthFunc glDepthFunc
-#define qglDepthMask glDepthMask
-#ifdef VCMODS_OPENGLES
-#define qglDepthRange glDepthRangef
-#else
-#define qglDepthRange glDepthRange
-#endif
-#define qglDisable glDisable
-#define qglDisableClientState glDisableClientState
-#define qglDrawArrays glDrawArrays
-#ifdef VCMODS_OPENGLES
-#define qglDrawBuffer myglDrawBuffer
-#else
-#define qglDrawBuffer glDrawBuffer
+#ifndef GL_EXT_framebuffer_multisample
+#define GL_EXT_framebuffer_multisample
+#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56
+#define GL_MAX_SAMPLES_EXT 0x8D57
#endif
-#define qglDrawElements glDrawElements
-#define qglDrawPixels glDrawPixels
-#define qglEdgeFlag glEdgeFlag
-#define qglEdgeFlagPointer glEdgeFlagPointer
-#define qglEdgeFlagv glEdgeFlagv
-#define qglEnable glEnable
-#define qglEnableClientState glEnableClientState
-#define qglEnd glEnd
-#define qglEndList glEndList
-#define qglEvalCoord1d glEvalCoord1d
-#define qglEvalCoord1dv glEvalCoord1dv
-#define qglEvalCoord1f glEvalCoord1f
-#define qglEvalCoord1fv glEvalCoord1fv
-#define qglEvalCoord2d glEvalCoord2d
-#define qglEvalCoord2dv glEvalCoord2dv
-#define qglEvalCoord2f glEvalCoord2f
-#define qglEvalCoord2fv glEvalCoord2fv
-#define qglEvalMesh1 glEvalMesh1
-#define qglEvalMesh2 glEvalMesh2
-#define qglEvalPoint1 glEvalPoint1
-#define qglEvalPoint2 glEvalPoint2
-#define qglFeedbackBuffer glFeedbackBuffer
-#define qglFinish glFinish
-#define qglFlush glFlush
-#define qglFogf glFogf
-#define qglFogfv glFogfv
-#define qglFogi glFogi
-#define qglFogiv glFogiv
-#define qglFrontFace glFrontFace
-#define qglFrustum glFrustum
-#define qglGenLists glGenLists
-#define qglGenTextures glGenTextures
-#define qglGetBooleanv glGetBooleanv
-#define qglGetClipPlane glGetClipPlane
-#define qglGetDoublev glGetDoublev
-#define qglGetError glGetError
-#define qglGetFloatv glGetFloatv
-#define qglGetIntegerv glGetIntegerv
-#define qglGetLightfv glGetLightfv
-#define qglGetLightiv glGetLightiv
-#define qglGetMapdv glGetMapdv
-#define qglGetMapfv glGetMapfv
-#define qglGetMapiv glGetMapiv
-#define qglGetMaterialfv glGetMaterialfv
-#define qglGetMaterialiv glGetMaterialiv
-#define qglGetPixelMapfv glGetPixelMapfv
-#define qglGetPixelMapuiv glGetPixelMapuiv
-#define qglGetPixelMapusv glGetPixelMapusv
-#define qglGetPointerv glGetPointerv
-#define qglGetPolygonStipple glGetPolygonStipple
-#define qglGetString glGetString
-#define qglGetTexGendv glGetTexGendv
-#define qglGetTexGenfv glGetTexGenfv
-#define qglGetTexGeniv glGetTexGeniv
-#define qglGetTexImage glGetTexImage
-#define qglGetTexLevelParameterfv glGetTexLevelParameterfv
-#define qglGetTexLevelParameteriv glGetTexLevelParameteriv
-#define qglGetTexParameterfv glGetTexParameterfv
-#define qglGetTexParameteriv glGetTexParameteriv
-#define qglHint glHint
-#define qglIndexMask glIndexMask
-#define qglIndexPointer glIndexPointer
-#define qglIndexd glIndexd
-#define qglIndexdv glIndexdv
-#define qglIndexf glIndexf
-#define qglIndexfv glIndexfv
-#define qglIndexi glIndexi
-#define qglIndexiv glIndexiv
-#define qglIndexs glIndexs
-#define qglIndexsv glIndexsv
-#define qglIndexub glIndexub
-#define qglIndexubv glIndexubv
-#define qglInitNames glInitNames
-#define qglInterleavedArrays glInterleavedArrays
-#define qglIsEnabled glIsEnabled
-#define qglIsList glIsList
-#define qglIsTexture glIsTexture
-#define qglLightModelf glLightModelf
-#define qglLightModelfv glLightModelfv
-#define qglLightModeli glLightModeli
-#define qglLightModeliv glLightModeliv
-#define qglLightf glLightf
-#define qglLightfv glLightfv
-#define qglLighti glLighti
-#define qglLightiv glLightiv
-#define qglLineStipple glLineStipple
-#define qglLineWidth glLineWidth
-#define qglListBase glListBase
-#define qglLoadIdentity glLoadIdentity
-#define qglLoadMatrixd glLoadMatrixd
-#define qglLoadMatrixf glLoadMatrixf
-#define qglLoadName glLoadName
-#define qglLogicOp glLogicOp
-#define qglMap1d glMap1d
-#define qglMap1f glMap1f
-#define qglMap2d glMap2d
-#define qglMap2f glMap2f
-#define qglMapGrid1d glMapGrid1d
-#define qglMapGrid1f glMapGrid1f
-#define qglMapGrid2d glMapGrid2d
-#define qglMapGrid2f glMapGrid2f
-#define qglMaterialf glMaterialf
-#define qglMaterialfv glMaterialfv
-#define qglMateriali glMateriali
-#define qglMaterialiv glMaterialiv
-#define qglMatrixMode glMatrixMode
-#define qglMultMatrixd glMultMatrixd
-#define qglMultMatrixf glMultMatrixf
-#define qglNewList glNewList
-#define qglNormal3b glNormal3b
-#define qglNormal3bv glNormal3bv
-#define qglNormal3d glNormal3d
-#define qglNormal3dv glNormal3dv
-#define qglNormal3f glNormal3f
-#define qglNormal3fv glNormal3fv
-#define qglNormal3i glNormal3i
-#define qglNormal3iv glNormal3iv
-#define qglNormal3s glNormal3s
-#define qglNormal3sv glNormal3sv
-#define qglNormalPointer glNormalPointer
-#ifdef VCMODS_OPENGLES
-#define qglOrtho glOrthof
-#else
-#define qglOrtho glOrtho
+
+#ifndef GL_EXT_texture_sRGB
+#define GL_EXT_texture_sRGB
+#define GL_SRGB_EXT 0x8C40
+#define GL_SRGB8_EXT 0x8C41
+#define GL_SRGB_ALPHA_EXT 0x8C42
+#define GL_SRGB8_ALPHA8_EXT 0x8C43
+#define GL_SLUMINANCE_ALPHA_EXT 0x8C44
+#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45
+#define GL_SLUMINANCE_EXT 0x8C46
+#define GL_SLUMINANCE8_EXT 0x8C47
+#define GL_COMPRESSED_SRGB_EXT 0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49
+#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F
#endif
-#define qglPassThrough glPassThrough
-#define qglPixelMapfv glPixelMapfv
-#define qglPixelMapuiv glPixelMapuiv
-#define qglPixelMapusv glPixelMapusv
-#define qglPixelStoref glPixelStoref
-#define qglPixelStorei glPixelStorei
-#define qglPixelTransferf glPixelTransferf
-#define qglPixelTransferi glPixelTransferi
-#define qglPixelZoom glPixelZoom
-#define qglPointSize glPointSize
-#define qglPolygonMode glPolygonMode
-#define qglPolygonOffset glPolygonOffset
-#define qglPolygonStipple glPolygonStipple
-#define qglPopAttrib glPopAttrib
-#define qglPopClientAttrib glPopClientAttrib
-#define qglPopMatrix glPopMatrix
-#define qglPopName glPopName
-#define qglPrioritizeTextures glPrioritizeTextures
-#define qglPushAttrib glPushAttrib
-#define qglPushClientAttrib glPushClientAttrib
-#define qglPushMatrix glPushMatrix
-#define qglPushName glPushName
-#define qglRasterPos2d glRasterPos2d
-#define qglRasterPos2dv glRasterPos2dv
-#define qglRasterPos2f glRasterPos2f
-#define qglRasterPos2fv glRasterPos2fv
-#define qglRasterPos2i glRasterPos2i
-#define qglRasterPos2iv glRasterPos2iv
-#define qglRasterPos2s glRasterPos2s
-#define qglRasterPos2sv glRasterPos2sv
-#define qglRasterPos3d glRasterPos3d
-#define qglRasterPos3dv glRasterPos3dv
-#define qglRasterPos3f glRasterPos3f
-#define qglRasterPos3fv glRasterPos3fv
-#define qglRasterPos3i glRasterPos3i
-#define qglRasterPos3iv glRasterPos3iv
-#define qglRasterPos3s glRasterPos3s
-#define qglRasterPos3sv glRasterPos3sv
-#define qglRasterPos4d glRasterPos4d
-#define qglRasterPos4dv glRasterPos4dv
-#define qglRasterPos4f glRasterPos4f
-#define qglRasterPos4fv glRasterPos4fv
-#define qglRasterPos4i glRasterPos4i
-#define qglRasterPos4iv glRasterPos4iv
-#define qglRasterPos4s glRasterPos4s
-#define qglRasterPos4sv glRasterPos4sv
-#define qglReadBuffer glReadBuffer
-#define qglReadPixels glReadPixels
-#define qglRectd glRectd
-#define qglRectdv glRectdv
-#define qglRectf glRectf
-#define qglRectfv glRectfv
-#define qglRecti glRecti
-#define qglRectiv glRectiv
-#define qglRects glRects
-#define qglRectsv glRectsv
-#define qglRenderMode glRenderMode
-#define qglRotated glRotated
-#define qglRotatef glRotatef
-#define qglScaled glScaled
-#define qglScalef glScalef
-#define qglScissor glScissor
-#define qglSelectBuffer glSelectBuffer
-#define qglShadeModel glShadeModel
-#define qglStencilFunc glStencilFunc
-#define qglStencilMask glStencilMask
-#define qglStencilOp glStencilOp
-#define qglTexCoord1d glTexCoord1d
-#define qglTexCoord1dv glTexCoord1dv
-#define qglTexCoord1f glTexCoord1f
-#define qglTexCoord1fv glTexCoord1fv
-#define qglTexCoord1i glTexCoord1i
-#define qglTexCoord1iv glTexCoord1iv
-#define qglTexCoord1s glTexCoord1s
-#define qglTexCoord1sv glTexCoord1sv
-#define qglTexCoord2d glTexCoord2d
-#define qglTexCoord2dv glTexCoord2dv
-#define qglTexCoord2f glTexCoord2f
-#define qglTexCoord2fv glTexCoord2fv
-#define qglTexCoord2i glTexCoord2i
-#define qglTexCoord2iv glTexCoord2iv
-#define qglTexCoord2s glTexCoord2s
-#define qglTexCoord2sv glTexCoord2sv
-#define qglTexCoord3d glTexCoord3d
-#define qglTexCoord3dv glTexCoord3dv
-#define qglTexCoord3f glTexCoord3f
-#define qglTexCoord3fv glTexCoord3fv
-#define qglTexCoord3i glTexCoord3i
-#define qglTexCoord3iv glTexCoord3iv
-#define qglTexCoord3s glTexCoord3s
-#define qglTexCoord3sv glTexCoord3sv
-#define qglTexCoord4d glTexCoord4d
-#define qglTexCoord4dv glTexCoord4dv
-#define qglTexCoord4f glTexCoord4f
-#define qglTexCoord4fv glTexCoord4fv
-#define qglTexCoord4i glTexCoord4i
-#define qglTexCoord4iv glTexCoord4iv
-#define qglTexCoord4s glTexCoord4s
-#define qglTexCoord4sv glTexCoord4sv
-#define qglTexCoordPointer glTexCoordPointer
-#define qglTexEnvf glTexEnvf
-#define qglTexEnvfv glTexEnvfv
-#define qglTexEnvi glTexEnvi
-#define qglTexEnviv glTexEnviv
-#define qglTexGend glTexGend
-#define qglTexGendv glTexGendv
-#define qglTexGenf glTexGenf
-#define qglTexGenfv glTexGenfv
-#define qglTexGeni glTexGeni
-#define qglTexGeniv glTexGeniv
-#define qglTexImage1D glTexImage1D
-#ifdef VCMODS_OPENGLES
-#define qglTexImage2D myglTexImage2D
-#else
-#define qglTexImage2D glTexImage2D
+
+#ifndef GL_EXT_framebuffer_sRGB
+#define GL_EXT_framebuffer_sRGB
+#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
+#endif
+
+#ifndef GL_EXT_texture_compression_latc
+#define GL_EXT_texture_compression_latc
+#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70
+#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71
+#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72
+#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73
+#endif
+
+#ifndef GL_ARB_texture_compression_bptc
+#define GL_ARB_texture_compression_bptc
+#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C
+#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D
+#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E
+#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F
+#endif
+
+// GL_ARB_draw_buffers
+extern void (APIENTRY * qglDrawBuffersARB)(GLsizei n, const GLenum *bufs);
+#ifndef GL_ARB_draw_buffers
+#define GL_ARB_draw_buffers
+#define GL_MAX_DRAW_BUFFERS_ARB 0x8824
+#define GL_DRAW_BUFFER0_ARB 0x8825
+#define GL_DRAW_BUFFER1_ARB 0x8826
+#define GL_DRAW_BUFFER2_ARB 0x8827
+#define GL_DRAW_BUFFER3_ARB 0x8828
+#define GL_DRAW_BUFFER4_ARB 0x8829
+#define GL_DRAW_BUFFER5_ARB 0x882A
+#define GL_DRAW_BUFFER6_ARB 0x882B
+#define GL_DRAW_BUFFER7_ARB 0x882C
+#define GL_DRAW_BUFFER8_ARB 0x882D
+#define GL_DRAW_BUFFER9_ARB 0x882E
+#define GL_DRAW_BUFFER10_ARB 0x882F
+#define GL_DRAW_BUFFER11_ARB 0x8830
+#define GL_DRAW_BUFFER12_ARB 0x8831
+#define GL_DRAW_BUFFER13_ARB 0x8832
+#define GL_DRAW_BUFFER14_ARB 0x8833
+#define GL_DRAW_BUFFER15_ARB 0x8834
+#endif
+
+#ifndef GL_ARB_depth_clamp
+#define GL_ARB_depth_clamp
+#define GL_DEPTH_CLAMP 0x864F
+#endif
+
+#ifndef GL_ARB_seamless_cube_map
+#define GL_ARB_seamless_cube_map
+#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F
+#endif
+
+// GL_ARB_vertex_array_object
+extern void (APIENTRY * qglBindVertexArrayARB)(GLuint array);
+extern void (APIENTRY * qglDeleteVertexArraysARB)(GLsizei n, const GLuint *arrays);
+extern void (APIENTRY * qglGenVertexArraysARB)(GLsizei n, GLuint *arrays);
+extern GLboolean (APIENTRY * qglIsVertexArrayARB)(GLuint array);
+#ifndef GL_ARB_vertex_array_object
+#define GL_ARB_vertex_array_object
+#define GL_VERTEX_ARRAY_BINDING_ARB 0x85B5
+#endif
+
+#if defined(WIN32)
+// WGL_ARB_create_context
+#ifndef WGL_ARB_create_context
+#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
+#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092
+#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093
+#define WGL_CONTEXT_FLAGS_ARB 0x2094
+#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126
+#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001
+#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002
+#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
+#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
+#define ERROR_INVALID_VERSION_ARB 0x2095
+#define ERROR_INVALID_PROFILE_ARB 0x2096
+#endif
+
+extern HGLRC(APIENTRY * qwglCreateContextAttribsARB) (HDC hdC, HGLRC hShareContext, const int *attribList);
#endif
-#define qglTexParameterf glTexParameterf
-#define qglTexParameterfv glTexParameterfv
-#define qglTexParameteri glTexParameteri
-#define qglTexParameteriv glTexParameteriv
-#define qglTexSubImage1D glTexSubImage1D
-#define qglTexSubImage2D glTexSubImage2D
-#define qglTranslated glTranslated
-#define qglTranslatef glTranslatef
-#define qglVertex2d glVertex2d
-#define qglVertex2dv glVertex2dv
-#define qglVertex2f glVertex2f
-#define qglVertex2fv glVertex2fv
-#define qglVertex2i glVertex2i
-#define qglVertex2iv glVertex2iv
-#define qglVertex2s glVertex2s
-#define qglVertex2sv glVertex2sv
-#define qglVertex3d glVertex3d
-#define qglVertex3dv glVertex3dv
-#define qglVertex3f glVertex3f
-#define qglVertex3fv glVertex3fv
-#define qglVertex3i glVertex3i
-#define qglVertex3iv glVertex3iv
-#define qglVertex3s glVertex3s
-#define qglVertex3sv glVertex3sv
-#define qglVertex4d glVertex4d
-#define qglVertex4dv glVertex4dv
-#define qglVertex4f glVertex4f
-#define qglVertex4fv glVertex4fv
-#define qglVertex4i glVertex4i
-#define qglVertex4iv glVertex4iv
-#define qglVertex4s glVertex4s
-#define qglVertex4sv glVertex4sv
-#define qglVertexPointer glVertexPointer
-#define qglViewport glViewport
+#if 0 //defined(__linux__)
+// GLX_ARB_create_context
+#ifndef GLX_ARB_create_context
+#define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001
+#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
+#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
+#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
+#define GLX_CONTEXT_FLAGS_ARB 0x2094
#endif
-#ifdef VCMODS_OPENGLES
-#define GL_BACK_LEFT 0x402
-#define GL_BACK_RIGHT 0x403
+extern GLXContext (APIENTRY * qglXCreateContextAttribsARB) (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
#endif
+#endif // USE_OPENGLES
+
+#endif // __QGL_H__
diff --git a/SP/code/renderer/tr_animation.c b/SP/code/renderer/tr_animation.c
index 91c3cd9..d1c2ef8 100644
--- a/SP/code/renderer/tr_animation.c
+++ b/SP/code/renderer/tr_animation.c
@@ -50,7 +50,7 @@ frame.
static float frontlerp, backlerp;
static float torsoFrontlerp, torsoBacklerp;
static int *triangles, *pIndexes;
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
static int *boneRefs;
#endif
static int indexes;
@@ -1049,7 +1049,7 @@ RB_SurfaceAnim
==============
*/
void RB_SurfaceAnim( mdsSurface_t *surface ) {
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
int i;
#endif
int j, k;
@@ -1206,7 +1206,7 @@ void RB_SurfaceAnim( mdsSurface_t *surface ) {
DBG_SHOWTIME
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
if ( r_bonesDebug->integer ) {
if ( r_bonesDebug->integer < 3 ) {
// DEBUG: show the bones as a stick figure with axis at each bone
diff --git a/SP/code/renderer/tr_backend.c b/SP/code/renderer/tr_backend.c
index a9ecbf2..0acb453 100644
--- a/SP/code/renderer/tr_backend.c
+++ b/SP/code/renderer/tr_backend.c
@@ -78,30 +78,14 @@ void GL_SelectTexture( int unit ) {
}
if ( unit == 0 ) {
-#ifdef VCMODS_OPENGLES
- qglActiveTextureARB( GL_TEXTURE0);
-#else
qglActiveTextureARB( GL_TEXTURE0_ARB );
-#endif
GLimp_LogComment( "glActiveTextureARB( GL_TEXTURE0_ARB )\n" );
-#ifdef VCMODS_OPENGLES
- qglClientActiveTextureARB( GL_TEXTURE0 );
-#else
qglClientActiveTextureARB( GL_TEXTURE0_ARB );
-#endif
GLimp_LogComment( "glClientActiveTextureARB( GL_TEXTURE0_ARB )\n" );
} else if ( unit == 1 ) {
-#ifdef VCMODS_OPENGLES
- qglActiveTextureARB( GL_TEXTURE1);
-#else
qglActiveTextureARB( GL_TEXTURE1_ARB );
-#endif
GLimp_LogComment( "glActiveTextureARB( GL_TEXTURE1_ARB )\n" );
-#ifdef VCMODS_OPENGLES
- qglClientActiveTextureARB( GL_TEXTURE1);
-#else
qglClientActiveTextureARB( GL_TEXTURE1_ARB );
-#endif
GLimp_LogComment( "glClientActiveTextureARB( GL_TEXTURE1_ARB )\n" );
} else {
ri.Error( ERR_DROP, "GL_SelectTexture: unit = %i", unit );
@@ -320,7 +304,7 @@ void GL_State( unsigned long stateBits ) {
// fill/line mode
//
if ( diff & GLS_POLYMODE_LINE ) {
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
if ( stateBits & GLS_POLYMODE_LINE ) {
qglPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
} else
@@ -534,11 +518,7 @@ void RB_BeginDrawingView( void ) {
if ( clearBits ) {
-#ifdef VCMODS_DEPTH
- qglClear( clearBits | GL_COLOR_BUFFER_BIT);
-#else
qglClear( clearBits );
-#endif
}
//----(SA) done
@@ -559,11 +539,7 @@ void RB_BeginDrawingView( void ) {
// clip to the plane of the portal
if ( backEnd.viewParms.isPortal ) {
float plane[4];
-#ifdef VCMODS_OPENGLES
- float plane2[4];
-#else
GLdouble plane2[4];
-#endif
plane[0] = backEnd.viewParms.portalPlane.normal[0];
plane[1] = backEnd.viewParms.portalPlane.normal[1];
@@ -1042,11 +1018,7 @@ void RB_RenderDrawSurfList( drawSurf_t *drawSurfs, int numDrawSurfs ) {
}
if(!oldDepthRange)
-#ifdef VCMODS_OPENGLES
- qglDepthRange (0, 0.3f);
-#else
qglDepthRange (0, 0.3);
-#endif
}
else
{
@@ -1056,11 +1028,7 @@ void RB_RenderDrawSurfList( drawSurf_t *drawSurfs, int numDrawSurfs ) {
qglLoadMatrixf(backEnd.viewParms.projectionMatrix);
qglMatrixMode(GL_MODELVIEW);
}
-#ifdef VCMODS_OPENGLES
- qglDepthRange (0, 1.0f);
-#else
qglDepthRange( 0, 1 );
-#endif
}
oldDepthRange = depthRange;
@@ -1103,11 +1071,7 @@ void RB_RenderDrawSurfList( drawSurf_t *drawSurfs, int numDrawSurfs ) {
qglLoadMatrixf( backEnd.viewParms.world.modelMatrix );
if ( depthRange ) {
-#ifdef VCMODS_OPENGLES
- qglDepthRange (0, 1.0f);
-#else
qglDepthRange( 0, 1 );
-#endif
}
if (r_drawSun->integer) {
@@ -1144,11 +1108,7 @@ void RB_SetGL2D( void ) {
qglScissor( 0, 0, glConfig.vidWidth, glConfig.vidHeight );
qglMatrixMode( GL_PROJECTION );
qglLoadIdentity();
-#ifdef VCMODS_OPENGLES
- qglOrtho (0.0f, glConfig.vidWidth, glConfig.vidHeight, 0.0f, 0.0f, 1.0f);
-#else
qglOrtho( 0, glConfig.vidWidth, glConfig.vidHeight, 0, 0, 1 );
-#endif
qglMatrixMode( GL_MODELVIEW );
qglLoadIdentity();
@@ -1179,11 +1139,6 @@ Used for cinematics.
void RE_StretchRaw( int x, int y, int w, int h, int cols, int rows, const byte *data, int client, qboolean dirty ) {
int i, j;
int start, end;
-#ifdef VCMODS_OPENGLES
- vec2_t texcoords[4];
- vec2_t verts[4];
- glIndex_t indicies[6] = {0, 1, 2, 0, 3, 2};
-#endif
if ( !tr.registered ) {
return;
@@ -1217,10 +1172,8 @@ void RE_StretchRaw( int x, int y, int w, int h, int cols, int rows, const byte *
if ( cols != tr.scratchImage[client]->width || rows != tr.scratchImage[client]->height ) {
tr.scratchImage[client]->width = tr.scratchImage[client]->uploadWidth = cols;
tr.scratchImage[client]->height = tr.scratchImage[client]->uploadHeight = rows;
-#ifdef VCMODS_OPENGLES
- //don't do qglTexImage2D as this may end up doing a compressed image
- //on which we are not allowed to do further sub images
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data );
+#ifdef USE_OPENGLES
+ qglTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data );
#else
qglTexImage2D( GL_TEXTURE_2D, 0, 3, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data );
#endif
@@ -1243,27 +1196,33 @@ void RE_StretchRaw( int x, int y, int w, int h, int cols, int rows, const byte *
RB_SetGL2D();
-#ifdef VCMODS_OPENGLES
- qglColor4f( tr.identityLight, tr.identityLight, tr.identityLight, 1.0f );
-
- verts[0][0] = x; verts[0][1] = y;
- verts[1][0] = x+w; verts[1][1] = y;
- verts[2][0] = x+w; verts[2][1] = y+h;
- verts[3][0] = x; verts[3][1] = y+h;
-
- texcoords[0][0] = 0.5f/cols; texcoords[0][1] = 0.5f/rows;
- texcoords[1][0] = (cols-0.5f)/cols; texcoords[1][1] = 0.5f/rows;
- texcoords[2][0] = (cols-0.5f)/cols; texcoords[2][1] = (rows-0.5f)/rows;
- texcoords[3][0] = 0.5f/cols; texcoords[3][1] = (rows-0.5f)/rows;
-
- qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
- qglTexCoordPointer( 2, GL_FLOAT, 0, texcoords );
- qglVertexPointer ( 2, GL_FLOAT, 0, verts );
- qglDrawElements( GL_TRIANGLE_STRIP, 6, GL_INDEX_TYPE, indicies );
- qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
-#else
qglColor3f( tr.identityLight, tr.identityLight, tr.identityLight );
+#ifdef USE_OPENGLES
+ GLfloat tex[] = {
+ 0.5f / cols, 0.5f / rows,
+ ( cols - 0.5f ) / cols , 0.5f / rows,
+ ( cols - 0.5f ) / cols, ( rows - 0.5f ) / rows,
+ 0.5f / cols, ( rows - 0.5f ) / rows };
+ GLfloat vtx[] = {
+ x, y,
+ x+w, y,
+ x+w, y+h,
+ x, y+h };
+ GLboolean text = qglIsEnabled(GL_TEXTURE_COORD_ARRAY);
+ GLboolean glcol = qglIsEnabled(GL_COLOR_ARRAY);
+ if (glcol)
+ qglDisableClientState(GL_COLOR_ARRAY);
+ if (!text)
+ qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
+ qglTexCoordPointer( 2, GL_FLOAT, 0, tex );
+ qglVertexPointer ( 2, GL_FLOAT, 0, vtx );
+ qglDrawArrays( GL_TRIANGLE_FAN, 0, 4 );
+ if (!text)
+ qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
+ if (glcol)
+ qglEnableClientState(GL_COLOR_ARRAY);
+#else
qglBegin( GL_QUADS );
qglTexCoord2f( 0.5f / cols, 0.5f / rows );
qglVertex2f( x, y );
@@ -1286,7 +1245,7 @@ void RE_UploadCinematic( int w, int h, int cols, int rows, const byte *data, int
if ( cols != tr.scratchImage[client]->width || rows != tr.scratchImage[client]->height ) {
tr.scratchImage[client]->width = tr.scratchImage[client]->uploadWidth = cols;
tr.scratchImage[client]->height = tr.scratchImage[client]->uploadHeight = rows;
-#ifdef VCMODS_OPENGLES
+#ifdef USE_OPENGLES
qglTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data );
#else
qglTexImage2D( GL_TEXTURE_2D, 0, 3, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data );
@@ -1521,7 +1480,9 @@ const void *RB_DrawBuffer( const void *data ) {
cmd = (const drawBufferCommand_t *)data;
+#ifndef USE_OPENGLES
qglDrawBuffer( cmd->buffer );
+#endif
// clear screen for debugging
if ( r_clear->integer ) {
@@ -1547,11 +1508,6 @@ void RB_ShowImages( void ) {
image_t *image;
float x, y, w, h;
int start, end;
-#ifdef VCMODS_OPENGLES
- vec2_t texcoords[4] = { {0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, 1.0f}, {0.0f, 1.0f} };
- vec2_t verts[4];
- glIndex_t indicies[6] = { 0, 1, 2, 0, 3, 2};
-#endif
if ( !backEnd.projection2D ) {
RB_SetGL2D();
@@ -1564,10 +1520,6 @@ void RB_ShowImages( void ) {
start = ri.Milliseconds();
-#ifdef VCMODS_OPENGLES
- qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
-#endif
-
for ( i = 0 ; i < tr.numImages ; i++ ) {
image = tr.images[i];
@@ -1583,15 +1535,30 @@ void RB_ShowImages( void ) {
h *= image->uploadHeight / 512.0f;
}
-#ifdef VCMODS_OPENGLES
- verts[0][0] = x; verts[0][1] = y;
- verts[1][0] = x+w; verts[1][1] = y;
- verts[2][0] = x+w; verts[2][1] = y+h;
- verts[3][0] = x; verts[3][1] = y+h;
-
- qglTexCoordPointer( 2, GL_FLOAT, 0, texcoords );
- qglVertexPointer ( 2, GL_FLOAT, 0, verts );
- qglDrawElements( GL_TRIANGLE_STRIP, 6, GL_INDEX_TYPE, indicies );
+#ifdef USE_OPENGLES
+ GLfloat tex[] = {
+ 0, 0,
+ 1, 0,
+ 1, 1,
+ 0, 1 };
+ GLfloat vtx[] = {
+ x, y,
+ x + w, y,
+ x + w, y + h,
+ x, y + h };
+ GLboolean text = qglIsEnabled(GL_TEXTURE_COORD_ARRAY);
+ GLboolean glcol = qglIsEnabled(GL_COLOR_ARRAY);
+ if (glcol)
+ qglDisableClientState(GL_COLOR_ARRAY);
+ if (!text)
+ qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
+ qglTexCoordPointer( 2, GL_FLOAT, 0, tex );
+ qglVertexPointer ( 2, GL_FLOAT, 0, vtx );
+ qglDrawArrays( GL_TRIANGLE_FAN, 0, 4 );
+ if (glcol)
+ qglEnableClientState(GL_COLOR_ARRAY);
+ if (!text)
+ qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
#else
GL_Bind( image );
qglBegin( GL_QUADS );
@@ -1607,10 +1574,6 @@ void RB_ShowImages( void ) {
#endif
}
-#ifdef VCMODS_OPENGLES
- qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
-#endif
-
qglFinish();
end = ri.Milliseconds();
@@ -1678,15 +1641,14 @@ const void *RB_SwapBuffers( const void *data ) {
// we measure overdraw by reading back the stencil buffer and
// counting up the number of increments that have happened
+#ifndef USE_OPENGLES
if ( r_measureOverdraw->integer ) {
int i;
long sum = 0;
unsigned char *stencilReadback;
stencilReadback = ri.Hunk_AllocateTempMemory( glConfig.vidWidth * glConfig.vidHeight );
-#ifndef VCMODS_OPENGLES
qglReadPixels( 0, 0, glConfig.vidWidth, glConfig.vidHeight, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, stencilReadback );
-#endif
for ( i = 0; i < glConfig.vidWidth * glConfig.vidHeight; i++ ) {
sum += stencilReadback[i];
@@ -1695,12 +1657,11 @@ const void *RB_SwapBuffers( const void *data ) {
backEnd.pc.c_overDraw += sum;
ri.Hunk_FreeTempMemory( stencilReadback );
}
+#endif
if ( !glState.finishCalled ) {
-#ifndef VCMODS_OPENGLES
qglFinish();
-#endif
}
GLimp_LogComment( "***************** RB_SwapBuffers *****************\n\n\n" );
diff --git a/SP/code/renderer/tr_bloom.c b/SP/code/renderer/tr_bloom.c
index a924f42..b285c78 100644
--- a/SP/code/renderer/tr_bloom.c
+++ b/SP/code/renderer/tr_bloom.c
@@ -99,6 +99,31 @@ static void ID_INLINE R_Bloom_Quad( int width, int height, float texX, float tex
texWidth += texX;
texHeight += texY;
+#ifdef USE_OPENGLES
+ GLfloat tex[] = {
+ texX, texHeight,
+ texX, texY,
+ texWidth, texY,
+ texWidth, texHeight };
+ GLfloat vtx[] = {
+ x, y,
+ x, height,
+ width, height,
+ width, y };
+ GLboolean text = qglIsEnabled(GL_TEXTURE_COORD_ARRAY);
+ GLboolean glcol = qglIsEnabled(GL_COLOR_ARRAY);
+ if (glcol)
+ qglDisableClientState(GL_COLOR_ARRAY);
+ if (!text)
+ qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
+ qglTexCoordPointer( 2, GL_FLOAT, 0, tex );
+ qglVertexPointer ( 2, GL_FLOAT, 0, vtx );
+ qglDrawArrays( GL_TRIANGLE_FAN, 0, 4 );
+ if (!text)
+ qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
+ if (glcol)
+ qglEnableClientState(GL_COLOR_ARRAY);
+#else
qglBegin( GL_QUADS );
qglTexCoord2f( texX, texHeight );
qglVertex2f( x, y );
@@ -112,6 +137,7 @@ static void ID_INLINE R_Bloom_Quad( int width, int height, float texX, float tex
qglTexCoord2f( texWidth, texHeight );
qglVertex2f( width, y );
qglEnd ();
+#endif
}
diff --git a/SP/code/renderer/tr_cmds.c b/SP/code/renderer/tr_cmds.c
index bcbcdf3..9b65950 100644
--- a/SP/code/renderer/tr_cmds.c
+++ b/SP/code/renderer/tr_cmds.c
@@ -316,7 +316,9 @@ for each RE_EndFrame
*/
void RE_BeginFrame( stereoFrame_t stereoFrame ) {
drawBufferCommand_t *cmd = NULL;
+#ifndef USE_OPENGLES
colorMaskCommand_t *colcmd = NULL;
+#endif
if ( !tr.registered ) {
return;
@@ -329,6 +331,7 @@ void RE_BeginFrame( stereoFrame_t stereoFrame ) {
//
// do overdraw measurement
//
+#ifndef USE_OPENGLES
if ( r_measureOverdraw->integer ) {
if ( glConfig.stencilBits < 4 ) {
ri.Printf( PRINT_ALL, "Warning: not enough stencil bits to measure overdraw: %d\n", glConfig.stencilBits );
@@ -357,6 +360,7 @@ void RE_BeginFrame( stereoFrame_t stereoFrame ) {
}
r_measureOverdraw->modified = qfalse;
}
+#endif
//
// texturemode stuff
@@ -371,7 +375,7 @@ void RE_BeginFrame( stereoFrame_t stereoFrame ) {
// ATI stuff
//
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
// TRUFORM
if ( qglPNTrianglesiATI ) {
@@ -420,13 +424,11 @@ void RE_BeginFrame( stereoFrame_t stereoFrame ) {
qglPNTrianglesiATI( GL_PN_TRIANGLES_NORMAL_MODE_ATI, glConfig.ATINormalMode );
}
}
-#endif
//
// NVidia stuff
//
-#ifndef VCMODS_OPENGLES
// fog control
if ( glConfig.NVFogAvailable && r_nv_fogdist_mode->modified ) {
r_nv_fogdist_mode->modified = qfalse;
@@ -464,6 +466,7 @@ void RE_BeginFrame( stereoFrame_t stereoFrame ) {
}
}
+#ifndef USE_OPENGLES
if (glConfig.stereoEnabled) {
if( !(cmd = R_GetCommandBuffer(sizeof(*cmd))) )
return;
@@ -522,6 +525,7 @@ void RE_BeginFrame( stereoFrame_t stereoFrame ) {
colcmd->commandId = RC_COLORMASK;
}
else
+#endif
{
if(stereoFrame != STEREO_CENTER)
ri.Error( ERR_FATAL, "RE_BeginFrame: Stereo is disabled, but stereoFrame was %i", stereoFrame );
@@ -534,6 +538,7 @@ void RE_BeginFrame( stereoFrame_t stereoFrame ) {
{
cmd->commandId = RC_DRAW_BUFFER;
+#ifndef USE_OPENGLES
if(r_anaglyphMode->modified)
{
qglColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
@@ -543,9 +548,12 @@ void RE_BeginFrame( stereoFrame_t stereoFrame ) {
if (!Q_stricmp(r_drawBuffer->string, "GL_FRONT"))
cmd->buffer = (int)GL_FRONT;
else
+#endif
cmd->buffer = (int)GL_BACK;
}
+#ifndef USE_OPENGLES
}
+#endif
tr.refdef.stereoFrame = stereoFrame;
}
diff --git a/SP/code/renderer/tr_image.c b/SP/code/renderer/tr_image.c
index e7ca321..707c688 100644
--- a/SP/code/renderer/tr_image.c
+++ b/SP/code/renderer/tr_image.c
@@ -181,26 +181,7 @@ void R_ImageList_f( void ) {
switch(image->internalFormat)
{
-#ifdef VCMODS_OPENGLES
- case 1:
- ri.Printf( PRINT_ALL, "I " );
- break;
- case 2:
- ri.Printf( PRINT_ALL, "IA " );
- break;
- case 3:
- ri.Printf( PRINT_ALL, "RGB " );
- // 3 bytes per pixel?
- estSize *= 3;
- break;
- case 4:
- ri.Printf( PRINT_ALL, "RGBA " );
- // 4 bytes per pixel
- estSize *= 4;
- break;
- default:
- ri.Printf( PRINT_ALL, "???? " );
-#else
+#ifndef USE_OPENGLES
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
format = "sDXT1";
// 64 bits per 16 pixels, so 4 bits per pixel
@@ -236,33 +217,43 @@ void R_ImageList_f( void ) {
// same as DXT1?
estSize /= 2;
break;
+#endif
case GL_RGBA4:
+#ifndef USE_OPENGLES
case GL_RGBA8:
+#endif
case GL_RGBA:
format = "RGBA ";
// 4 bytes per pixel
estSize *= 4;
break;
+#ifndef USE_OPENGLES
case GL_LUMINANCE8:
case GL_LUMINANCE16:
+#endif
case GL_LUMINANCE:
format = "L ";
// 1 byte per pixel?
break;
case GL_RGB5:
+#ifndef USE_OPENGLES
case GL_RGB8:
+#endif
case GL_RGB:
format = "RGB ";
// 3 bytes per pixel?
estSize *= 3;
break;
+#ifndef USE_OPENGLES
case GL_LUMINANCE8_ALPHA8:
case GL_LUMINANCE16_ALPHA16:
+#endif
case GL_LUMINANCE_ALPHA:
format = "LA ";
// 2 bytes per pixel?
estSize *= 2;
break;
+#ifndef USE_OPENGLES
case GL_SRGB_EXT:
case GL_SRGB8_EXT:
format = "sRGB ";
@@ -586,6 +577,7 @@ R_BlendOverTexture
Apply a color blend over a set of pixels
==================
*/
+#ifndef USE_OPENGLES
static void R_BlendOverTexture( byte *data, int pixelCount, byte blend[4] ) {
int i;
int inverseAlpha;
@@ -602,6 +594,7 @@ static void R_BlendOverTexture( byte *data, int pixelCount, byte blend[4] ) {
data[2] = ( data[2] * inverseAlpha + premult[2] ) >> 9;
}
}
+#endif
byte mipBlendColors[16][4] = {
{0,0,0,0},
@@ -623,6 +616,109 @@ byte mipBlendColors[16][4] = {
};
+#ifdef USE_OPENGLES
+// helper function for GLES format conversions
+byte * gles_convertRGB(byte * data, int width, int height)
+{
+ byte * temp = (byte *) ri.Z_Malloc (width*height*3);
+ byte *src = data;
+ byte *dst = temp;
+ int i,j;
+
+ for (i=0; i<width*height; i++) {
+ for (j=0; j<3; j++)
+ *(dst++) = *(src++);
+ src++;
+ }
+
+ return temp;
+}
+byte * gles_convertRGBA4(byte * data, int width, int height)
+{
+ byte * temp = (byte *) ri.Z_Malloc (width*height*2);
+ int i;
+
+ unsigned int * input = ( unsigned int *)(data);
+ unsigned short* output = (unsigned short*)(temp);
+
+ for (i = 0; i < width*height; i++) {
+ unsigned int pixel = input[i];
+
+ // Unpack the source data as 8 bit values
+ unsigned int r = pixel & 0xff;
+ unsigned int g = (pixel >> 8) & 0xff;
+ unsigned int b = (pixel >> 16) & 0xff;
+ unsigned int a = (pixel >> 24) & 0xff;
+
+ // Convert to 4 bit vales
+ r >>= 4; g >>= 4; b >>= 4; a >>= 4;
+ output[i] = r << 12 | g << 8 | b << 4 | a;
+ }
+
+ return temp;
+}
+byte * gles_convertRGB5(byte * data, int width, int height)
+{
+ byte * temp = (byte *) ri.Z_Malloc (width*height*2);
+ int i;
+
+ unsigned int * input = ( unsigned int *)(data);
+ unsigned short* output = (unsigned short*)(temp);
+
+ for (i = 0; i < width*height; i++) {
+ unsigned int pixel = input[i];
+
+ // Unpack the source data as 8 bit values
+ unsigned int r = pixel & 0xff;
+ unsigned int g = (pixel >> 8) & 0xff;
+ unsigned int b = (pixel >> 16) & 0xff;
+
+ // Convert to 4 bit vales
+ r >>= 3; g >>= 2; b >>= 3;
+ output[i] = r << 11 | g << 5 | b;
+ }
+
+ return temp;
+}
+byte * gles_convertLuminance(byte * data, int width, int height)
+{
+ byte * temp = (byte *) ri.Z_Malloc (width*height);
+ int i;
+
+ unsigned int * input = ( unsigned int *)(data);
+ byte* output = (byte*)(temp);
+
+ for (i = 0; i < width*height; i++) {
+ unsigned int pixel = input[i];
+
+ // Unpack the source data as 8 bit values
+ unsigned int r = pixel & 0xff;
+ output[i] = r;
+ }
+
+ return temp;
+}
+byte * gles_convertLuminanceAlpha(byte * data, int width, int height)
+{
+ byte * temp = (byte *) ri.Z_Malloc (width*height*2);
+ int i;
+
+ unsigned int * input = ( unsigned int *)(data);
+ unsigned short* output = (unsigned short*)(temp);
+
+ for (i = 0; i < width*height; i++) {
+ unsigned int pixel = input[i];
+
+ // Unpack the source data as 8 bit values
+ unsigned int r = pixel & 0xff;
+ unsigned int a = (pixel >> 24) & 0xff;
+ output[i] = r | a<<8;
+ }
+
+ return temp;
+}
+#endif
+
/*
===============
Upload32
@@ -820,9 +916,7 @@ static void Upload32( unsigned *data,
if(r_greyscale->integer)
{
-#ifdef VCMODS_OPENGLES
- assert(r_texturebits->integer != 16 && r_texturebits->integer != 32);
-#else
+#ifndef USE_OPENGLES
if(r_texturebits->integer == 16)
internalFormat = GL_LUMINANCE8;
else if(r_texturebits->integer == 32)
@@ -833,32 +927,28 @@ static void Upload32( unsigned *data,
}
else
{
- if ( !noCompress && glConfig.textureCompression == TC_EXT_COMP_S3TC ) {
-#ifdef VCMODS_OPENGLES
- assert(0);
-#else
+#ifndef USE_OPENGLES
+ if ( !noCompress && glConfig.textureCompression == TC_EXT_COMP_S3TC )
+ {
// TODO: which format is best for which textures?
internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
-#endif
- } else if ( !noCompress && glConfig.textureCompression == TC_S3TC ) {
-#ifdef VCMODS_OPENGLES
- assert(0);
-#else
+ }
+ else if ( !noCompress && glConfig.textureCompression == TC_S3TC )
+ {
internalFormat = GL_RGB4_S3TC;
+ }
+ else
#endif
- } else if ( r_texturebits->integer == 16 ) {
-#ifdef VCMODS_OPENGLES
- assert(0);
-#else
+ if ( r_texturebits->integer == 16 )
+ {
internalFormat = GL_RGB5;
-#endif
- } else if ( r_texturebits->integer == 32 ) {
-#ifdef VCMODS_OPENGLES
- assert(0);
-#else
+ }
+#ifndef USE_OPENGLES
+ else if ( r_texturebits->integer == 32 )
+ {
internalFormat = GL_RGB8;
-#endif
}
+#endif
else
{
internalFormat = GL_RGB;
@@ -870,9 +960,7 @@ static void Upload32( unsigned *data,
if(r_greyscale->integer)
{
-#ifdef VCMODS_OPENGLES
- assert(r_texturebits->integer != 16 && r_texturebits->integer != 32);
-#else
+#ifndef USE_OPENGLES
if(r_texturebits->integer == 16)
internalFormat = GL_LUMINANCE8_ALPHA8;
else if(r_texturebits->integer == 32)
@@ -883,26 +971,24 @@ static void Upload32( unsigned *data,
}
else
{
- if ( !noCompress && glConfig.textureCompression == TC_EXT_COMP_S3TC ) {
-#ifdef VCMODS_OPENGLES
- assert(0);
-#else
+#ifndef USE_OPENGLES
+ if ( !noCompress && glConfig.textureCompression == TC_EXT_COMP_S3TC )
+ {
// TODO: which format is best for which textures?
internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
+ }
+ else
#endif
- } else if ( r_texturebits->integer == 16 ) {
-#ifdef VCMODS_OPENGLES
- assert(0);
-#else
+ if ( r_texturebits->integer == 16 )
+ {
internalFormat = GL_RGBA4;
-#endif
- } else if ( r_texturebits->integer == 32 ) {
-#ifdef VCMODS_OPENGLES
- internalFormat = GL_RGBA;
-#else
+ }
+#ifndef USE_OPENGLES
+ else if ( r_texturebits->integer == 32 )
+ {
internalFormat = GL_RGBA8;
-#endif
}
+#endif
else
{
internalFormat = GL_RGBA;
@@ -912,6 +998,72 @@ static void Upload32( unsigned *data,
}
// copy or resample data as appropriate for first MIP level
+#ifdef USE_OPENGLES
+ if ( ( scaled_width == width ) &&
+ ( scaled_height == height ) ) {
+ Com_Memcpy (scaledBuffer, data, width*height*4);
+ }
+ else
+ {
+ // use the normal mip-mapping function to go down from here
+ while ( width > scaled_width || height > scaled_height ) {
+ R_MipMap( (byte *)data, width, height );
+ width >>= 1;
+ height >>= 1;
+ if ( width < 1 ) {
+ width = 1;
+ }
+ if ( height < 1 ) {
+ height = 1;
+ }
+ }
+ Com_Memcpy( scaledBuffer, data, width * height * 4 );
+ }
+ R_LightScaleTexture (scaledBuffer, scaled_width, scaled_height, !mipmap );
+
+ glTexParameteri( GL_TEXTURE_2D, GL_GENERATE_MIPMAP, (mipmap)?GL_TRUE:GL_FALSE );
+
+ // and now, convert if needed and upload
+ // GLES doesn't do convertion itself, so we have to handle that
+ byte *temp;
+ switch ( internalFormat ) {
+ case GL_RGB5:
+ temp = gles_convertRGB5((byte*)scaledBuffer, scaled_width, scaled_height);
+ qglTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, scaled_width, scaled_height, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, temp);
+ ri.Free(temp);
+ break;
+ case GL_RGBA4:
+ temp = gles_convertRGBA4((byte*)scaledBuffer, width, height);
+ qglTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, scaled_width, scaled_height, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, temp);
+ ri.Free(temp);
+ break;
+ case GL_RGB:
+ temp = gles_convertRGB((byte*)scaledBuffer, width, height);
+ qglTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, scaled_width, scaled_height, 0, GL_RGB, GL_UNSIGNED_BYTE, temp);
+ ri.Free(temp);
+ break;
+ case GL_LUMINANCE:
+ temp = gles_convertLuminance((byte*)scaledBuffer, width, height);
+ qglTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE, scaled_width, scaled_height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, temp);
+ ri.Free(temp);
+ break;
+ case GL_LUMINANCE_ALPHA:
+ temp = gles_convertLuminanceAlpha((byte*)scaledBuffer, width, height);
+ qglTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, scaled_width, scaled_height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, temp);
+ ri.Free(temp);
+ break;
+ default:
+ internalFormat = GL_RGBA;
+ qglTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, scaled_width, scaled_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, scaledBuffer);
+ }
+
+ *pUploadWidth = scaled_width;
+ *pUploadHeight = scaled_height;
+ *format = internalFormat;
+
+ // qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
+ // qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
+#else
if ( ( scaled_width == width ) &&
( scaled_height == height ) ) {
if ( !mipmap ) {
@@ -974,22 +1126,19 @@ static void Upload32( unsigned *data,
}
}
done:
+#endif
if ( mipmap ) {
-#ifndef VCMODS_OPENGLES
if ( textureFilterAnisotropic )
qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT,
(GLint)Com_Clamp( 1, maxAnisotropy, r_ext_max_anisotropy->integer ) );
-#endif
qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min );
qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
}
else
{
-#ifndef VCMODS_OPENGLES
if ( textureFilterAnisotropic )
qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 );
-#endif
qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
}
diff --git a/SP/code/renderer/tr_init.c b/SP/code/renderer/tr_init.c
index 6f34ff6..e140796 100644
--- a/SP/code/renderer/tr_init.c
+++ b/SP/code/renderer/tr_init.c
@@ -213,11 +213,9 @@ int max_polys;
cvar_t *r_maxpolyverts;
int max_polyverts;
-#ifndef VCMODS_OPENGLES
//----(SA) added
void ( APIENTRY * qglPNTrianglesiATI )( GLenum pname, GLint param );
void ( APIENTRY * qglPNTrianglesfATI )( GLenum pname, GLfloat param );
-#endif
/*
The tessellation level and normal generation mode are specified with:
@@ -465,9 +463,25 @@ byte *RB_ReadPixels(int x, int y, int width, int height, size_t *offset, int *pa
// Allocate a few more bytes so that we can choose an alignment we like
buffer = ri.Hunk_AllocateTempMemory(padwidth * height + *offset + packAlign - 1);
+#ifdef USE_OPENGLES
+ bufstart=buffer;
+ padwidth=linelen;
+ int p2width=1, p2height=1;
+ int xx, yy, aa;
+ while (p2width<glConfig.vidWidth) p2width*=2;
+ while (p2height<glConfig.vidHeight) p2height*=2;
+ byte *source = (byte*) ri.Z_Malloc( p2width * p2height * 4 );
+ qglReadPixels( 0, 0, p2width, p2height, GL_RGBA, GL_UNSIGNED_BYTE, source );
+ for (yy=y; yy<height; yy++)
+ for (xx=x; xx<width; xx++)
+ for (aa=0; aa<3; aa++)
+ buffer[yy*width*3+xx*3+aa]=source[(yy+y)*p2width*4+(xx+x)*4+aa];
+ ri.Free(source);
+#else
bufstart = PADP((intptr_t) buffer + *offset, packAlign);
qglReadPixels(x, y, width, height, GL_RGB, GL_UNSIGNED_BYTE, bufstart);
-
+#endif
+
*offset = bufstart - buffer;
*padlen = padwidth - linelen;
@@ -949,7 +963,10 @@ void GL_SetDefaultState( void ) {
//
glState.glStateBits = GLS_DEPTHTEST_DISABLE | GLS_DEPTHMASK_TRUE;
-#ifndef VCMODS_OPENGLES
+#ifdef USE_OPENGLES
+ glPixelStorei(GL_PACK_ALIGNMENT, 1);
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+#else
qglPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
#endif
qglDepthMask( GL_TRUE );
@@ -958,7 +975,7 @@ void GL_SetDefaultState( void ) {
qglDisable( GL_CULL_FACE );
qglDisable( GL_BLEND );
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
//----(SA) added.
// ATI pn_triangles
if ( qglPNTrianglesiATI ) {
@@ -984,7 +1001,6 @@ void GL_SetDefaultState( void ) {
// set when rendering
// qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, glConfig.maxAnisotropy);
}
-
//----(SA) end
#endif
}
@@ -1085,7 +1101,6 @@ void GfxInfo_f( void ) {
ri.Printf( PRINT_ALL, "texenv add: %s\n", enablestrings[glConfig.textureEnvAddAvailable != 0] );
ri.Printf( PRINT_ALL, "compressed textures: %s\n", enablestrings[glConfig.textureCompression != TC_NONE] );
-#ifndef VCMODS_OPENGLES
ri.Printf( PRINT_ALL, "ATI truform: %s\n", enablestrings[qglPNTrianglesiATI != 0] );
if ( qglPNTrianglesiATI ) {
//DAJ bogus at this point ri.Printf( PRINT_ALL, "MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI: %d\n", glConfig.ATIMaxTruformTess );
@@ -1093,7 +1108,6 @@ void GfxInfo_f( void ) {
ri.Printf( PRINT_ALL, "Truform Point Mode: %s\n", r_ati_truform_pointmode->string );
ri.Printf( PRINT_ALL, "Truform Normal Mode: %s\n", r_ati_truform_normalmode->string );
}
-#endif
ri.Printf( PRINT_ALL, "NV distance fog: %s\n", enablestrings[glConfig.NVFogAvailable != 0] );
if ( glConfig.NVFogAvailable ) {
@@ -1262,11 +1276,7 @@ void R_Register( void ) {
r_bonesDebug = ri.Cvar_Get( "r_bonesDebug", "0", CVAR_CHEAT );
// Rafael - wolf fog
-#ifdef VCMODS_OPENGLES
- r_wolffog = ri.Cvar_Get( "r_wolffog", "0", CVAR_CHEAT ); // JPW NERVE cheat protected per id request
-#else
r_wolffog = ri.Cvar_Get( "r_wolffog", "1", 0 );
-#endif
// done
r_nocurves = ri.Cvar_Get( "r_nocurves", "0", CVAR_CHEAT );
diff --git a/SP/code/renderer/tr_local.h b/SP/code/renderer/tr_local.h
index c263f44..1e8c068 100644
--- a/SP/code/renderer/tr_local.h
+++ b/SP/code/renderer/tr_local.h
@@ -38,7 +38,14 @@ If you have questions concerning this license or the applicable additional terms
#include "qgl.h"
#include "iqm.h"
-#ifdef VCMODS_OPENGLES
+#ifdef USE_OPENGLES
+#ifdef USE_LOCAL_HEADERS
+# include "GLES/glext.h"
+#else
+# include <GLES/glext.h>
+#endif
+#define GL_RGBA4 0x8056
+#define GL_RGB5 0x8050
#define GL_INDEX_TYPE GL_UNSIGNED_SHORT
typedef unsigned short glIndex_t;
#else
diff --git a/SP/code/renderer/tr_main.c b/SP/code/renderer/tr_main.c
index 09ca893..6548c7a 100644
--- a/SP/code/renderer/tr_main.c
+++ b/SP/code/renderer/tr_main.c
@@ -93,11 +93,7 @@ void R_Fog( glfog_t *curfog ) {
R_FogOn();
-#ifdef VCMODS_OPENGLES
- qglFogf( GL_FOG_MODE, curfog->mode );
-#else
qglFogi( GL_FOG_MODE, curfog->mode );
-#endif
qglFogfv( GL_FOG_COLOR, curfog->color );
qglFogf( GL_FOG_DENSITY, curfog->density );
qglHint( GL_FOG_HINT, curfog->hint );
@@ -119,8 +115,7 @@ void R_Fog( glfog_t *curfog ) {
}
}
-
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
//----(SA) added
// NV fog mode
if ( glConfig.NVFogAvailable ) {
@@ -1663,31 +1658,45 @@ R_DebugPolygon
================
*/
void R_DebugPolygon( int color, int numPoints, float *points ) {
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
int i;
+#endif
GL_State( GLS_DEPTHMASK_TRUE | GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE );
// draw solid shade
+#ifdef USE_OPENGLES
+ qglColor4f( color&1, (color>>1)&1, (color>>2)&1, 1.0f );
+ qglVertexPointer ( 3, GL_FLOAT, 0, points );
+ qglDrawArrays( GL_TRIANGLE_FAN, 0, numPoints );
+#else
qglColor3f( color & 1, ( color >> 1 ) & 1, ( color >> 2 ) & 1 );
qglBegin( GL_POLYGON );
for ( i = 0 ; i < numPoints ; i++ ) {
qglVertex3fv( points + i * 3 );
}
qglEnd();
+#endif
// draw wireframe outline
+#ifndef USE_OPENGLES
GL_State( GLS_POLYMODE_LINE | GLS_DEPTHMASK_TRUE | GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE );
+#endif
qglDepthRange( 0, 0 );
+#ifdef USE_OPENGLES
+ qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
+ qglVertexPointer ( 3, GL_FLOAT, 0, points );
+ qglDrawArrays( GL_LINES, 0, numPoints );
+#else
qglColor3f( 1, 1, 1 );
qglBegin( GL_POLYGON );
for ( i = 0 ; i < numPoints ; i++ ) {
qglVertex3fv( points + i * 3 );
}
qglEnd();
- qglDepthRange( 0, 1 );
#endif
+ qglDepthRange( 0, 1 );
}
/*
diff --git a/SP/code/renderer/tr_shade.c b/SP/code/renderer/tr_shade.c
index 37de148..65afdba 100644
--- a/SP/code/renderer/tr_shade.c
+++ b/SP/code/renderer/tr_shade.c
@@ -47,7 +47,7 @@ R_ArrayElementDiscrete
This is just for OpenGL conformance testing, it should never be the fastest
================
*/
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
static void APIENTRY R_ArrayElementDiscrete( GLint index ) {
qglColor4ubv( tess.svars.colors[ index ] );
if ( glState.currenttmu ) {
@@ -66,9 +66,19 @@ R_DrawStripElements
===================
*/
+#ifdef USE_OPENGLES
+#define MAX_INDEX 4096
+glIndex_t sindexes[MAX_INDEX];
+int num_sindexed;
+
+void AddIndexe(GLint idx) {
+ sindexes[num_sindexed++]=idx;
+}
+#endif
+
+#ifndef USE_OPENGLES
static int c_vertexes; // for seeing how long our average strips are
static int c_begins;
-#ifndef VCMODS_OPENGLES
static void R_DrawStripElements( int numIndexes, const glIndex_t *indexes, void ( APIENTRY *element )( GLint ) ) {
int i;
int last[3] = { -1, -1, -1 };
@@ -157,7 +167,7 @@ static void R_DrawStripElements( int numIndexes, const glIndex_t *indexes, void
qglEnd();
}
-#endif
+#endif // USE_OPENGLES
/*
@@ -170,11 +180,17 @@ without compiled vertex arrays.
==================
*/
static void R_DrawElements( int numIndexes, const glIndex_t *indexes ) {
+#ifdef USE_OPENGLES
+ qglDrawElements( GL_TRIANGLES,
+ numIndexes,
+ GL_INDEX_TYPE,
+ indexes );
+ return;
+#else
int primitives;
primitives = r_primitives->integer;
-#ifndef VCMODS_OPENGLES
// default is to use triangles if compiled vertex arrays are present
if ( primitives == 0 ) {
if ( qglLockArraysEXT ) {
@@ -184,14 +200,11 @@ static void R_DrawElements( int numIndexes, const glIndex_t *indexes ) {
}
}
-
if ( primitives == 2 ) {
-#endif
qglDrawElements( GL_TRIANGLES,
numIndexes,
GL_INDEX_TYPE,
indexes );
-#ifndef VCMODS_OPENGLES
return;
}
@@ -271,11 +284,7 @@ Draws triangle outlines for debugging
*/
static void DrawTris( shaderCommands_t *input ) {
GL_Bind( tr.whiteImage );
-#ifdef VCMODS_OPENGLES
- qglColor4f (1.0f,1.0f,1.0f,1.0f);
-#else
qglColor3f( 1,1,1 );
-#endif
GL_State( GLS_POLYMODE_LINE | GLS_DEPTHMASK_TRUE );
@@ -293,7 +302,14 @@ static void DrawTris( shaderCommands_t *input ) {
GLimp_LogComment( "glLockArraysEXT\n" );
}
+#ifdef USE_OPENGLES
+ qglDrawElements( GL_LINE_STRIP,
+ input->numIndexes,
+ GL_INDEX_TYPE,
+ input->indexes );
+#else
R_DrawElements( input->numIndexes, input->indexes );
+#endif
if ( qglUnlockArraysEXT ) {
qglUnlockArraysEXT();
@@ -313,43 +329,41 @@ Draws vertex normals for debugging
static void DrawNormals( shaderCommands_t *input ) {
int i;
vec3_t temp;
-#ifdef VCMODS_OPENGLES
- vec3_t verts[2*SHADER_MAX_VERTEXES];
- glIndex_t indicies[2*SHADER_MAX_VERTEXES];
-
- for (i = 0 ; i < input->numVertexes ; i++) {
- VectorCopy(input->xyz[i], verts[i*2]);
- VectorMA (input->xyz[i], 2, input->normal[i], temp);
- VectorCopy(temp, verts[(i*2)+1]);
- indicies[(i*2)] = i*2;
- indicies[(i*2)+1] = (i*2)+1;
- }
-#endif
GL_Bind( tr.whiteImage );
-#ifdef VCMODS_OPENGLES
- qglColor4f (1.0f,1.0f,1.0f,1.0f);
-#else
qglColor3f( 1,1,1 );
-#endif
if ( r_shownormals->integer == 1 ) {
qglDepthRange( 0, 0 ); // never occluded
}
GL_State( GLS_POLYMODE_LINE | GLS_DEPTHMASK_TRUE );
-#ifdef VCMODS_OPENGLES
- qglVertexPointer(3, GL_FLOAT, 0, verts);
- qglDrawElements( GL_LINES, i, GL_INDEX_TYPE, indicies );
+#ifdef USE_OPENGLES
+ vec3_t vtx[2];
+ //*TODO* save states for texture & color array
#else
qglBegin( GL_LINES );
+#endif
for ( i = 0 ; i < input->numVertexes ; i++ ) {
+#ifndef USE_OPENGLES
qglVertex3fv( input->xyz[i] );
+#endif
VectorMA( input->xyz[i], 2, input->normal[i], temp );
+#ifdef USE_OPENGLES
+ memcpy(vtx, input->xyz[i], sizeof(GLfloat)*3);
+ memcpy(vtx+1, temp, sizeof(GLfloat)*3);
+ qglVertexPointer (3, GL_FLOAT, 16, vtx);
+ qglDrawArrays(GL_LINES, 0, 2);
+#else
qglVertex3fv( temp );
+#endif
}
+#ifdef USE_OPENGLES
+ //*TODO* restaure state for texture & color
+#else
qglEnd();
#endif
+
qglDepthRange( 0, 1 );
}
@@ -412,7 +426,7 @@ static void DrawMultitextured( shaderCommands_t *input, int stage ) {
// this is an ugly hack to work around a GeForce driver
// bug with multitexture and clip planes
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
if ( backEnd.viewParms.isPortal ) {
qglPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
}
@@ -1449,12 +1463,6 @@ void RB_StageIteratorGeneric( void ) {
input = &tess;
shader = input->shader;
-#ifdef VCMODS_OPENGLES
- // if ignoreglerrors is off, qglLockArraysEXT generates a GL error when you
- // pass it 0 verts
- if (input->numVertexes == 0 ) return;
-#endif
-
RB_DeformTessGeometry();
//
@@ -1469,7 +1477,7 @@ void RB_StageIteratorGeneric( void ) {
// set GL fog
SetIteratorFog();
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
if ( qglPNTrianglesiATI && tess.ATI_tess ) {
// RF< so we can send the normals as an array
qglEnableClientState( GL_NORMAL_ARRAY );
@@ -1512,7 +1520,7 @@ void RB_StageIteratorGeneric( void ) {
// RF, send normals only if required
// This must be done first, since we can't change the arrays once they have been
// locked
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
if ( qglPNTrianglesiATI && tess.ATI_tess ) {
qglNormalPointer( GL_FLOAT, 16, input->normal );
}
@@ -1571,13 +1579,12 @@ void RB_StageIteratorGeneric( void ) {
}
// turn truform back off
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
if ( qglPNTrianglesiATI && tess.ATI_tess ) {
qglDisable( GL_PN_TRIANGLES_ATI ); // ATI PN-Triangles extension
qglDisableClientState( GL_NORMAL_ARRAY );
}
#endif
-
}
@@ -1621,7 +1628,7 @@ void RB_StageIteratorVertexLitTexture( void ) {
qglEnableClientState( GL_COLOR_ARRAY );
qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
if ( qglPNTrianglesiATI && tess.ATI_tess ) {
qglEnable( GL_PN_TRIANGLES_ATI ); // ATI PN-Triangles extension
qglEnableClientState( GL_NORMAL_ARRAY ); // RF< so we can send the normals as an array
@@ -1668,7 +1675,7 @@ void RB_StageIteratorVertexLitTexture( void ) {
GLimp_LogComment( "glUnlockArraysEXT\n" );
}
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
if ( qglPNTrianglesiATI && tess.ATI_tess ) {
qglDisable( GL_PN_TRIANGLES_ATI ); // ATI PN-Triangles extension
}
@@ -1707,7 +1714,7 @@ void RB_StageIteratorLightmappedMultitexture( void ) {
GL_State( GLS_DEFAULT );
qglVertexPointer( 3, GL_FLOAT, 16, input->xyz );
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
if ( qglPNTrianglesiATI && tess.ATI_tess ) {
qglEnable( GL_PN_TRIANGLES_ATI ); // ATI PN-Triangles extension
qglNormalPointer( GL_FLOAT, 16, input->normal );
@@ -1797,7 +1804,7 @@ void RB_StageIteratorLightmappedMultitexture( void ) {
GLimp_LogComment( "glUnlockArraysEXT\n" );
}
-#ifndef VCMODS_OPENGLES
+#ifndef USE_OPENGLES
if ( qglPNTrianglesiATI && tess.ATI_tess ) {
qglDisable( GL_PN_TRIANGLES_ATI ); // ATI PN-Triangles extension
}
diff --git a/SP/code/renderer/tr_shadows.c b/SP/code/renderer/tr_shadows.c
index 43bf487..ef98933 100644
--- a/SP/code/renderer/tr_shadows.c
+++ b/SP/code/renderer/tr_shadows.c
@@ -53,6 +53,11 @@ static int numEdgeDefs[SHADER_MAX_VERTEXES];
static int facing[SHADER_MAX_INDEXES / 3];
static vec3_t shadowXyz[SHADER_MAX_VERTEXES];
+#ifdef USE_OPENGLES
+static unsigned short indexes[6*MAX_EDGE_DEFS*SHADER_MAX_VERTEXES];
+static int idx = 0;
+#endif
+
void R_AddEdgeDef( int i1, int i2, int facing ) {
int c;
@@ -103,6 +108,9 @@ void R_RenderShadowEdges( void ) {
int i2;
int c_edges, c_rejected;
int hit[2];
+#ifdef USE_OPENGLES
+ idx = 0;
+#endif
// an edge is NOT a silhouette edge if its face doesn't face the light,
// or if it has a reverse paired edge that also faces the light.
@@ -132,15 +140,15 @@ void R_RenderShadowEdges( void ) {
// if it doesn't share the edge with another front facing
// triangle, it is a sil edge
if ( hit[ 1 ] == 0 ) {
-#ifdef VCMODS_OPENGLES
- glIndex_t indicies[4];
- indicies[0] = i;
- indicies[1] = i+tess.numVertexes;
- indicies[2] = i2;
- indicies[3] = i2+tess.numVertexes;
-
- qglVertexPointer( 3, GL_FLOAT, 16, tess.xyz );
- qglDrawElements( GL_TRIANGLE_STRIP, 4, GL_INDEX_TYPE, indicies );
+#ifdef USE_OPENGLES
+ // A single drawing call is better than many. So I prefer a singe TRIANGLES call than many TRAINGLE_STRIP call
+ // even if it seems less efficiant, it's faster on the PANDORA
+ indexes[idx++] = i;
+ indexes[idx++] = i + tess.numVertexes;
+ indexes[idx++] = i2;
+ indexes[idx++] = i2;
+ indexes[idx++] = i + tess.numVertexes;
+ indexes[idx++] = i2 + tess.numVertexes;
#else
qglBegin( GL_TRIANGLE_STRIP );
qglVertex3fv( tess.xyz[ i ] );
@@ -155,6 +163,10 @@ void R_RenderShadowEdges( void ) {
}
}
}
+#ifdef USE_OPENGLES
+ qglDrawElements(GL_TRIANGLES, idx, GL_UNSIGNED_SHORT, indexes);
+#endif
+
#endif
}
@@ -226,11 +238,7 @@ void RB_ShadowTessEnd( void ) {
GL_Bind( tr.whiteImage );
GL_State( GLS_SRCBLEND_ONE | GLS_DSTBLEND_ZERO );
-#ifdef VCMODS_OPENGLES
- qglColor4f( 0.2f, 0.2f, 0.2f, 1.0f );
-#else
qglColor3f( 0.2f, 0.2f, 0.2f );
-#endif
// don't write to the color buffer
qglGetBooleanv(GL_COLOR_WRITEMASK, rgba);
@@ -239,6 +247,16 @@ void RB_ShadowTessEnd( void ) {
qglEnable( GL_STENCIL_TEST );
qglStencilFunc( GL_ALWAYS, 1, 255 );
+#ifdef USE_OPENGLES
+ qglVertexPointer (3, GL_FLOAT, 16, tess.xyz);
+ GLboolean text = qglIsEnabled(GL_TEXTURE_COORD_ARRAY);
+ GLboolean glcol = qglIsEnabled(GL_COLOR_ARRAY);
+ if (text)
+ qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
+ if (glcol)
+ qglDisableClientState( GL_COLOR_ARRAY );
+#endif
+
GL_Cull( CT_BACK_SIDED );
qglStencilOp( GL_KEEP, GL_KEEP, GL_INCR );
@@ -247,8 +265,18 @@ void RB_ShadowTessEnd( void ) {
GL_Cull( CT_FRONT_SIDED );
qglStencilOp( GL_KEEP, GL_KEEP, GL_DECR );
+#ifdef USE_OPENGLES
+ qglDrawElements(GL_TRIANGLES, idx, GL_UNSIGNED_SHORT, indexes);
+#else
R_RenderShadowEdges();
+#endif
+#ifdef USE_OPENGLES
+ if (text)
+ qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
+ if (glcol)
+ qglEnableClientState( GL_COLOR_ARRAY );
+#endif
// reenable writing to the color buffer
qglColorMask(rgba[0], rgba[1], rgba[2], rgba[3]);
}
@@ -265,15 +293,6 @@ overlap and double darken.
=================
*/
void RB_ShadowFinish( void ) {
-#ifdef VCMODS_OPENGLES
- vec3_t quad[4] = {
- {-100.0f, 100.0f, -10.0},
- {100.0f, 100.0f, -10.0f},
- {100.0f, -100.0f, -10.0f},
- {-100.0f, -100.0f, -10.0f}
- };
- glIndex_t indicies[6] = { 0, 1, 2, 0, 3, 2};
-#endif
if ( r_shadows->integer != 2 ) {
return;
}
@@ -290,19 +309,31 @@ void RB_ShadowFinish( void ) {
qglLoadIdentity();
-#ifdef VCMODS_OPENGLES
- qglColor4f( 0.6f, 0.6f, 0.6f, 1.0f );
-#else
qglColor3f( 0.6f, 0.6f, 0.6f );
-#endif
GL_State( GLS_DEPTHMASK_TRUE | GLS_SRCBLEND_DST_COLOR | GLS_DSTBLEND_ZERO );
// qglColor3f( 1, 0, 0 );
// GL_State( GLS_DEPTHMASK_TRUE | GLS_SRCBLEND_ONE | GLS_DSTBLEND_ZERO );
-#ifdef VCMODS_OPENGLES
- qglVertexPointer ( 3, GL_FLOAT, 0, quad );
- qglDrawElements ( GL_TRIANGLE_STRIP, 6, GL_INDEX_TYPE, indicies );
+#ifdef USE_OPENGLES
+ GLboolean text = qglIsEnabled(GL_TEXTURE_COORD_ARRAY);
+ GLboolean glcol = qglIsEnabled(GL_COLOR_ARRAY);
+ if (text)
+ qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
+ if (glcol)
+ qglDisableClientState( GL_COLOR_ARRAY );
+ GLfloat vtx[] = {
+ -100, 100, -10,
+ 100, 100, -10,
+ 100, -100, -10,
+ -100, -100, -10
+ };
+ qglVertexPointer ( 3, GL_FLOAT, 0, vtx );
+ qglDrawArrays( GL_TRIANGLE_FAN, 0, 4 );
+ if (text)
+ qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
+ if (glcol)
+ qglEnableClientState( GL_COLOR_ARRAY );
#else
qglBegin( GL_QUADS );
qglVertex3f( -100, 100, -10 );
diff --git a/SP/code/renderer/tr_sky.c b/SP/code/renderer/tr_sky.c
index d3c2b78..186b6c0 100644
--- a/SP/code/renderer/tr_sky.c
+++ b/SP/code/renderer/tr_sky.c
@@ -373,30 +373,40 @@ static vec3_t s_skyPoints[SKY_SUBDIVISIONS + 1][SKY_SUBDIVISIONS + 1];
static float s_skyTexCoords[SKY_SUBDIVISIONS + 1][SKY_SUBDIVISIONS + 1][2];
static void DrawSkySide( struct image_s *image, const int mins[2], const int maxs[2] ) {
-#ifdef VCMODS_OPENGLES
- int s, t, i=0;
- int size;
- glIndex_t *indicies;
-
- size = (maxs[1]-mins[1]) * (maxs[0] - mins[0] + 1);
- indicies = ri.Hunk_AllocateTempMemory( sizeof(glIndex_t) * size );
-#else
int s, t;
-#endif
GL_Bind( image );
+#ifdef USE_OPENGLES
+ GLfloat vtx[3*1024]; // arbitrary sized
+ GLfloat tex[2*1024];
+ int idx;
+
+ GLboolean text = qglIsEnabled(GL_TEXTURE_COORD_ARRAY);
+ GLboolean glcol = qglIsEnabled(GL_COLOR_ARRAY);
+ if (glcol)
+ qglDisableClientState(GL_COLOR_ARRAY);
+ if (!text)
+ qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
+#endif
+
for ( t = mins[1] + HALF_SKY_SUBDIVISIONS; t < maxs[1] + HALF_SKY_SUBDIVISIONS; t++ )
{
-#ifndef VCMODS_OPENGLES
+#ifdef USE_OPENGLES
+ idx=0;
+#else
qglBegin( GL_TRIANGLE_STRIP );
#endif
for ( s = mins[0] + HALF_SKY_SUBDIVISIONS; s <= maxs[0] + HALF_SKY_SUBDIVISIONS; s++ )
{
-#ifdef VCMODS_OPENGLES
- indicies[i++] = t*(SKY_SUBDIVISIONS+1) + s;
- indicies[i++] = (t+1)*(SKY_SUBDIVISIONS+1) + s;
+#ifdef USE_OPENGLES
+ memcpy(tex+idx*2, s_skyTexCoords[t][s], sizeof(GLfloat)*2);
+ memcpy(vtx+idx*3, s_skyPoints[t][s], sizeof(GLfloat)*3);
+ idx++;
+ memcpy(tex+idx*2, s_skyTexCoords[t+1][s], sizeof(GLfloat)*2);
+ memcpy(vtx+idx*3, s_skyPoints[t+1][s], sizeof(GLfloat)*3);
+ idx++;
#else
qglTexCoord2fv( s_skyTexCoords[t][s] );
qglVertex3fv( s_skyPoints[t][s] );
@@ -406,34 +416,42 @@ static void DrawSkySide( struct image_s *image, const int mins[2], const int max
#endif
}
-#ifndef VCMODS_OPENGLES
+#ifdef USE_OPENGLES
+ //*TODO* Try to switch from many DrawArrays of GL_TRIANGLE_STRIP to a single DrawArrays of TRIANGLES to see if it perform better
+ qglVertexPointer (3, GL_FLOAT, 0, vtx);
+ qglTexCoordPointer(2, GL_FLOAT, 0, tex);
+ qglDrawArrays(GL_TRIANGLE_STRIP, 0, idx);
+#else
qglEnd();
#endif
}
-#ifdef VCMODS_OPENGLES
- qglDisableClientState( GL_COLOR_ARRAY);
- qglEnableClientState( GL_TEXTURE_COORD_ARRAY);
- qglTexCoordPointer( 2, GL_FLOAT, 0, s_skyTexCoords );
- qglVertexPointer ( 3, GL_FLOAT, 0, s_skyPoints );
- qglDrawElements( GL_TRIANGLE_STRIP, i, GL_INDEX_TYPE, indicies );
- Hunk_FreeTempMemory(indicies);
+
+#ifdef USE_OPENGLES
+ if (glcol)
+ qglEnableClientState(GL_COLOR_ARRAY);
+ if (!text)
+ qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
#endif
}
static void DrawSkySideInner( struct image_s *image, const int mins[2], const int maxs[2] ) {
-#ifdef VCMODS_OPENGLES
- int s, t, i=0;
- int size;
- glIndex_t *indicies;
-
- size = (maxs[1]-mins[1]) * (maxs[0] - mins[0] + 1);
- indicies = ri.Hunk_AllocateTempMemory( sizeof(glIndex_t) * size );
-#else
int s, t;
-#endif
GL_Bind( image );
+#ifdef USE_OPENGLES
+ GLfloat vtx[3*1024]; // arbitrary sized
+ GLfloat tex[2*1024];
+ int idx;
+
+ GLboolean text = qglIsEnabled(GL_TEXTURE_COORD_ARRAY);
+ GLboolean glcol = qglIsEnabled(GL_COLOR_ARRAY);
+ if (glcol)
+ qglDisableClientState(GL_COLOR_ARRAY);
+ if (!text)
+ qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
+#endif
+
//qglDisable (GL_BLEND);
qglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
qglEnable( GL_BLEND );
@@ -441,15 +459,21 @@ static void DrawSkySideInner( struct image_s *image, const int mins[2], const in
for ( t = mins[1] + HALF_SKY_SUBDIVISIONS; t < maxs[1] + HALF_SKY_SUBDIVISIONS; t++ )
{
-#ifndef VCMODS_OPENGLES
+#ifdef USE_OPENGLES
+ idx=0;
+#else
qglBegin( GL_TRIANGLE_STRIP );
#endif
for ( s = mins[0] + HALF_SKY_SUBDIVISIONS; s <= maxs[0] + HALF_SKY_SUBDIVISIONS; s++ )
{
-#ifdef VCMODS_OPENGLES
- indicies[i++] = t*(SKY_SUBDIVISIONS+1) + s;
- indicies[i++] = (t+1)*(SKY_SUBDIVISIONS+1) + s;
+#ifdef USE_OPENGLES
+ memcpy(tex+idx*2, s_skyTexCoords[t][s], sizeof(GLfloat)*2);
+ memcpy(vtx+idx*3, s_skyPoints[t][s], sizeof(GLfloat)*3);
+ idx++;
+ memcpy(tex+idx*2, s_skyTexCoords[t+1][s], sizeof(GLfloat)*2);
+ memcpy(vtx+idx*3, s_skyPoints[t+1][s], sizeof(GLfloat)*3);
+ idx++;
#else
qglTexCoord2fv( s_skyTexCoords[t][s] );
qglVertex3fv( s_skyPoints[t][s] );
@@ -459,21 +483,24 @@ static void DrawSkySideInner( struct image_s *image, const int mins[2], const in
#endif
}
-#ifndef VCMODS_OPENGLES
+#ifdef USE_OPENGLES
+ //*TODO* Try to switch from many DrawArrays of GL_TRIANGLE_STRIP to a single DrawArrays of TRIANGLES to see if it perform better
+ qglVertexPointer (3, GL_FLOAT, 0, vtx);
+ qglTexCoordPointer(2, GL_FLOAT, 0, tex);
+ qglDrawArrays(GL_TRIANGLE_STRIP, 0, idx);
+#else
qglEnd();
#endif
}
-#ifdef VCMODS_OPENGLES
- qglDisableClientState( GL_COLOR_ARRAY);
- qglEnableClientState( GL_TEXTURE_COORD_ARRAY);
- qglTexCoordPointer( 2, GL_FLOAT, 0, s_skyTexCoords );
- qglVertexPointer ( 3, GL_FLOAT, 0, s_skyPoints );
- qglDrawElements( GL_TRIANGLE_STRIP, i, GL_INDEX_TYPE, indicies );
- Hunk_FreeTempMemory(indicies);
-#endif
-
qglDisable( GL_BLEND );
+
+#ifdef USE_OPENGLES
+ if (glcol)
+ qglEnableClientState(GL_COLOR_ARRAY);
+ if (!text)
+ qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
+#endif
}
static void DrawSkyBox( shader_t *shader ) {
@@ -984,11 +1011,7 @@ void RB_StageIteratorSky( void ) {
// draw the outer skybox
if ( tess.shader->sky.outerbox[0] && tess.shader->sky.outerbox[0] != tr.defaultImage ) {
-#ifdef VCMODS_OPENGLES
- qglColor4f( tr.identityLight, tr.identityLight, tr.identityLight, 1.0f );
-#else
qglColor3f( tr.identityLight, tr.identityLight, tr.identityLight );
-#endif
qglPushMatrix();
GL_State( 0 );
@@ -1008,11 +1031,7 @@ void RB_StageIteratorSky( void ) {
// draw the inner skybox
// Rafael - drawing inner skybox
if ( tess.shader->sky.innerbox[0] && tess.shader->sky.innerbox[0] != tr.defaultImage ) {
-#ifdef VCMODS_OPENGLES
- qglColor4f( tr.identityLight, tr.identityLight, tr.identityLight, 1.0f );
-#else
qglColor3f( tr.identityLight, tr.identityLight, tr.identityLight );
-#endif
qglPushMatrix();
GL_State( 0 );
diff --git a/SP/code/renderer/tr_surface.c b/SP/code/renderer/tr_surface.c
index 1a23b87..2cb026f 100644
--- a/SP/code/renderer/tr_surface.c
+++ b/SP/code/renderer/tr_surface.c
@@ -317,11 +317,7 @@ static void RB_SurfaceBeam( void ) {
int i;
vec3_t perpvec;
vec3_t direction, normalized_direction;
-#ifdef VCMODS_OPENGLES
- vec3_t points[NUM_BEAM_SEGS*2];
-#else
vec3_t start_points[NUM_BEAM_SEGS], end_points[NUM_BEAM_SEGS];
-#endif
vec3_t oldorigin, origin;
e = &backEnd.currentEntity->e;
@@ -348,29 +344,36 @@ static void RB_SurfaceBeam( void ) {
for ( i = 0; i < NUM_BEAM_SEGS ; i++ )
{
-#ifdef VCMODS_OPENGLES
- RotatePointAroundVector( points[i*2], normalized_direction, perpvec, (360.0/NUM_BEAM_SEGS)*i );
-// VectorAdd( start_points[i], origin, start_points[i] );
- VectorAdd( points[i*2], direction, points[i*2+1] );
-#else
RotatePointAroundVector( start_points[i], normalized_direction, perpvec, ( 360.0 / NUM_BEAM_SEGS ) * i );
// VectorAdd( start_points[i], origin, start_points[i] );
VectorAdd( start_points[i], direction, end_points[i] );
-#endif
}
GL_Bind( tr.whiteImage );
GL_State( GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE );
-#ifdef VCMODS_OPENGLES
- qglColor4f( 1.0f, 0.0f, 0.0f, 1.0f );
-
- qglVertexPointer( 3, GL_FLOAT, 0, points );
- qglDrawArrays( GL_TRIANGLE_STRIP, 0, NUM_BEAM_SEGS*2);
-#else
qglColor3f( 1, 0, 0 );
+#ifdef USE_OPENGLES
+ GLboolean text = qglIsEnabled(GL_TEXTURE_COORD_ARRAY);
+ GLboolean glcol = qglIsEnabled(GL_COLOR_ARRAY);
+ if (glcol)
+ qglDisableClientState(GL_COLOR_ARRAY);
+ if (text)
+ qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
+ GLfloat vtx[NUM_BEAM_SEGS*6+6];
+ for ( i = 0; i <= NUM_BEAM_SEGS; i++ ) {
+ memcpy(vtx+i*6, start_points[ i % NUM_BEAM_SEGS], sizeof(GLfloat)*3);
+ memcpy(vtx+i*6+3, end_points[ i % NUM_BEAM_SEGS], sizeof(GLfloat)*3);
+ }
+ qglVertexPointer (3, GL_FLOAT, 0, vtx);
+ qglDrawArrays(GL_TRIANGLE_STRIP, 0, NUM_BEAM_SEGS*2+2);
+ if (glcol)
+ qglEnableClientState(GL_COLOR_ARRAY);
+ if (text)
+ qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
+#else
qglBegin( GL_TRIANGLE_STRIP );
for ( i = 0; i <= NUM_BEAM_SEGS; i++ ) {
qglVertex3fv( start_points[ i % NUM_BEAM_SEGS] );
@@ -1170,11 +1173,7 @@ RB_SurfaceFace
*/
void RB_SurfaceFace( srfSurfaceFace_t *surf ) {
int i;
-#ifdef VCMODS_OPENGLES
- unsigned int *indices;
-#else
unsigned *indices;
-#endif
glIndex_t *tessIndexes;
float *v;
float *normal;
@@ -1426,24 +1425,39 @@ Draws x/y/z lines from the origin for orientation debugging
===================
*/
static void RB_SurfaceAxis( void ) {
-#ifdef VCMODS_OPENGLES
- byte colors[3][4] = { {255,0,0,255},{0,255,0,255},{0,0,255,255}};
- vec3_t verts[6] = {
- {0.0f, 0.0f, 0.0f}, {16.0f, 0.0f, 0.0f},
- {0.0f, 0.0f, 0.0f}, {0.0f, 16.0f, 0.0f},
- {0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 16.0f}
- };
- glIndex_t indicies[6] = {0, 1, 0, 2, 0, 3};
-#endif
GL_Bind( tr.whiteImage );
GL_State( GLS_DEFAULT );
qglLineWidth( 3 );
-#ifdef VCMODS_OPENGLES
- qglEnableClientState( GL_COLOR_ARRAY );
- qglColorPointer( 4, GL_UNSIGNED_BYTE, 0, colors );
- qglVertexPointer( 3, GL_FLOAT, 0, verts );
-
- qglDrawElements( GL_LINES, 6, GL_INDEX_TYPE, indicies );
+#ifdef USE_OPENGLES
+ GLfloat col[] = {
+ 1,0,0, 1,
+ 1,0,0, 1,
+ 0,1,0, 1,
+ 0,1,0, 1,
+ 0,0,1, 1,
+ 0,0,1, 1
+ };
+ GLfloat vtx[] = {
+ 0,0,0,
+ 16,0,0,
+ 0,0,0,
+ 0,16,0,
+ 0,0,0,
+ 0,0,16
+ };
+ GLboolean text = qglIsEnabled(GL_TEXTURE_COORD_ARRAY);
+ GLboolean glcol = qglIsEnabled(GL_COLOR_ARRAY);
+ if (text)
+ qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
+ if (!glcol)
+ qglEnableClientState( GL_COLOR_ARRAY);
+ qglColorPointer( 4, GL_UNSIGNED_BYTE, 0, col );
+ qglVertexPointer (3, GL_FLOAT, 0, vtx);
+ qglDrawArrays(GL_LINES, 0, 6);
+ if (text)
+ qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
+ if (!glcol)
+ qglDisableClientState( GL_COLOR_ARRAY);
#else
qglBegin( GL_LINES );
qglColor3f( 1,0,0 );
diff --git a/SP/code/sdl/sdl_glimp.c b/SP/code/sdl/sdl_glimp.c
index 85d1f22..b6df7b8 100644
--- a/SP/code/sdl/sdl_glimp.c
+++ b/SP/code/sdl/sdl_glimp.c
@@ -35,6 +35,18 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "../sys/sys_local.h"
#include "sdl_icon.h"
+#ifdef USE_OPENGLES
+#ifdef USE_LOCAL_HEADERS
+# include "EGL/egl.h"
+#else
+# include <EGL/egl.h>
+#endif
+void myglMultiTexCoord2f( GLenum texture, GLfloat s, GLfloat t )
+{
+ glMultiTexCoord4f(texture, s, t, 0, 1);
+}
+#endif
+
typedef enum
{
RSERR_OK,
@@ -226,6 +238,7 @@ static int GLimp_SetMode(int mode, qboolean fullscreen, qboolean noborder)
Uint32 flags = SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL;
SDL_DisplayMode desktopMode;
int display = 0;
+ int x = SDL_WINDOWPOS_UNDEFINED, y = SDL_WINDOWPOS_UNDEFINED;
ri.Printf( PRINT_ALL, "Initializing OpenGL display\n");
@@ -397,6 +410,7 @@ static int GLimp_SetMode(int mode, qboolean fullscreen, qboolean noborder)
else
perChannelColorBits = 4;
+#ifndef USE_OPENGLES
#ifdef __sgi /* Fix for SGIs grabbing too many bits of color */
if (perChannelColorBits == 4)
perChannelColorBits = 0; /* Use minimum size for 16-bit color */
@@ -489,6 +503,16 @@ static int GLimp_SetMode(int mode, qboolean fullscreen, qboolean noborder)
continue;
}
}
+#else
+ SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1);
+
+ if( ( SDL_window = SDL_CreateWindow( CLIENT_WINDOW_TITLE, x, y,
+ glConfig.vidWidth, glConfig.vidHeight, flags ) ) == 0 )
+ {
+ ri.Printf( PRINT_DEVELOPER, "SDL_CreateWindow failed: %s\n", SDL_GetError( ) );
+ continue;
+ }
+#endif // USE_OPENGLES
SDL_SetWindowIcon( SDL_window, icon );
@@ -647,6 +671,10 @@ static void GLimp_InitExtensions( void )
// GL_EXT_texture_env_add
+#ifdef USE_OPENGLES
+ glConfig.textureEnvAddAvailable = qtrue;
+ ri.Printf( PRINT_ALL, "...using GL_EXT_texture_env_add\n" );
+#else
glConfig.textureEnvAddAvailable = qfalse;
if ( GLimp_HaveExtension( "EXT_texture_env_add" ) )
{
@@ -665,11 +693,31 @@ static void GLimp_InitExtensions( void )
{
ri.Printf( PRINT_ALL, "...GL_EXT_texture_env_add not found\n" );
}
+#endif
// GL_ARB_multitexture
qglMultiTexCoord2fARB = NULL;
qglActiveTextureARB = NULL;
qglClientActiveTextureARB = NULL;
+#ifdef USE_OPENGLES
+ qglGetIntegerv( GL_MAX_TEXTURE_UNITS, &glConfig.numTextureUnits );
+ //ri.Printf( PRINT_ALL, "...not using GL_ARB_multitexture, %i texture units\n", glConfig.maxActiveTextures );
+ //glConfig.maxActiveTextures=4;
+ qglMultiTexCoord2fARB = myglMultiTexCoord2f;
+ qglActiveTextureARB = glActiveTexture;
+ qglClientActiveTextureARB = glClientActiveTexture;
+ if ( glConfig.numTextureUnits > 1 )
+ {
+ ri.Printf( PRINT_ALL, "...using GL_ARB_multitexture (%i texture units)\n", glConfig.numTextureUnits );
+ }
+ else
+ {
+ qglMultiTexCoord2fARB = NULL;
+ qglActiveTextureARB = NULL;
+ qglClientActiveTextureARB = NULL;
+ ri.Printf( PRINT_ALL, "...not using GL_ARB_multitexture, < 2 texture units\n" );
+ }
+#else
if ( GLimp_HaveExtension( "GL_ARB_multitexture" ) )
{
if ( r_ext_multitexture->value )
@@ -705,6 +753,7 @@ static void GLimp_InitExtensions( void )
{
ri.Printf( PRINT_ALL, "...GL_ARB_multitexture not found\n" );
}
+#endif
// GL_EXT_compiled_vertex_array
if ( GLimp_HaveExtension( "GL_EXT_compiled_vertex_array" ) )
diff --git a/SP/code/splines/q_splineshared.h b/SP/code/splines/q_splineshared.h
index 0d386b2..17addf5 100644
--- a/SP/code/splines/q_splineshared.h
+++ b/SP/code/splines/q_splineshared.h
@@ -169,11 +169,6 @@ typedef int intptr_t;
#include <ctype.h>
#include <limits.h>
-#ifdef VCMODS_REPLACETRIG
-#define sin(f) sinf(f)
-#define cos(f) cosf(f)
-#endif
-
#ifdef _MSC_VER
#include <io.h>
diff --git a/SP/code/sys/sys_loadlib.h b/SP/code/sys/sys_loadlib.h
index 90dad18..0b1eac3 100644
--- a/SP/code/sys/sys_loadlib.h
+++ b/SP/code/sys/sys_loadlib.h
@@ -20,21 +20,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
===========================================================================
*/
-#ifdef VCMODS_NOSDL
-# ifdef _WIN32
-# include <windows.h>
-# define Sys_LoadLibrary(f) (void*)LoadLibrary(f)
-# define Sys_UnloadLibrary(h) FreeLibrary((HMODULE)h)
-# define Sys_LoadFunction(h,fn) (void*)GetProcAddress((HMODULE)h,fn)
-# define Sys_LibraryError() "unknown"
-# else
-# include <dlfcn.h>
-# define Sys_LoadLibrary(f) dlopen(f,RTLD_NOW)
-# define Sys_UnloadLibrary(h) dlclose(h)
-# define Sys_LoadFunction(h,fn) dlsym(h,fn)
-# define Sys_LibraryError() dlerror()
-# endif
-#else
#ifdef DEDICATED
# ifdef _WIN32
# include <windows.h>
@@ -62,6 +47,5 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# define Sys_LoadFunction(h,fn) SDL_LoadFunction(h,fn)
# define Sys_LibraryError() SDL_GetError()
#endif
-#endif
void * QDECL Sys_LoadDll(const char *name, qboolean useSystemLib);
diff --git a/SP/code/sys/sys_main.c b/SP/code/sys/sys_main.c
index 794ef8d..f665b0d 100644
--- a/SP/code/sys/sys_main.c
+++ b/SP/code/sys/sys_main.c
@@ -31,11 +31,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include <ctype.h>
#include <errno.h>
-#ifdef VCMODS_MISC
-#include "bcm_host.h"
-#endif
-
-#ifndef VCMODS_NOSDL
#ifndef DEDICATED
#ifdef USE_LOCAL_HEADERS
# include "SDL.h"
@@ -45,7 +40,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# include <SDL_cpuinfo.h>
#endif
#endif
-#endif
#include "sys_local.h"
#include "sys_loadlib.h"
@@ -241,10 +235,8 @@ static __attribute__ ((noreturn)) void Sys_Exit( int exitCode )
CON_Shutdown( );
#ifndef DEDICATED
-#ifndef VCMODS_NOSDL
SDL_Quit( );
#endif
-#endif
if( exitCode < 2 )
{
@@ -281,14 +273,12 @@ cpuFeatures_t Sys_GetProcessorFeatures( void )
{
cpuFeatures_t features = 0;
-#ifndef VCMODS_NOSDL
#ifndef DEDICATED
if( SDL_HasRDTSC( ) ) features |= CF_RDTSC;
if( SDL_HasMMX( ) ) features |= CF_MMX;
if( SDL_HasSSE( ) ) features |= CF_SSE;
if( SDL_HasSSE2( ) ) features |= CF_SSE2;
#endif
-#endif
return features;
}
@@ -381,9 +371,6 @@ Sys_Print
*/
void Sys_Print( const char *msg )
{
-#if defined(VCMODS_MISC)&&defined(_WIN32)
- OutputDebugString(msg);
-#endif
CON_LogWrite( msg );
CON_Print( msg );
}
@@ -621,14 +608,10 @@ main
*/
int main( int argc, char **argv )
{
-#ifdef VCMODS_MISC
- bcm_host_init();
-#endif
int i;
char commandLine[ MAX_STRING_CHARS ] = { 0 };
#ifndef DEDICATED
-#ifndef VCMODS_NOSDL
// SDL version check
// Compile time
@@ -655,7 +638,6 @@ int main( int argc, char **argv )
Sys_Exit( 1 );
}
#endif
-#endif
Sys_PlatformInit( );
diff --git a/SP/make-raspberrypi.sh b/SP/make-raspberrypi.sh
index 2451bd2..c86d607 100755
--- a/SP/make-raspberrypi.sh
+++ b/SP/make-raspberrypi.sh
@@ -4,8 +4,8 @@
USE_CODEC_OPUS=0 \
USE_CURL=0 \
USE_CURL_DLOPEN=0 \
- USE_OPENAL=0 \
- USE_OPENAL_DLOPEN=0 \
+ USE_OPENAL=1 \
+ USE_OPENAL_DLOPEN=1 \
USE_RENDERER_DLOPEN=0 \
USE_VOIP=0 \
USE_LOCAL_HEADERS=1 \
@@ -13,7 +13,7 @@
USE_INTERNAL_OPUS=1 \
USE_INTERNAL_ZLIB=1 \
USE_OPENGLES=1 \
- USE_BLOOM=0 \
+ RASPBERRY_PI=1 \
USE_MUMBLE=0 \
BUILD_GAME_SO=1 \
BUILD_GAME_QVM=0 \
@@ -22,7 +22,5 @@
PLATFORM=linux \
COMPILE_ARCH=arm \
COMPILE_PLATFORM=linux \
- CFLAGS="-DVCMODS_MISC -DVCMODS_OPENGLES -DVCMODS_DEPTH -DVCMODS_REPLACETRIG -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" \
- LDFLAGS="-L/opt/vc/lib -lbcm_host" \
make $*
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/iortcw.git
More information about the Pkg-games-commits
mailing list