Бинарный файл glqwcl.glx доступен по адресу: www.quakeworld.net
в пакете qwcl-2.30-glibc-i386-unknown-linux2.0.tar.gz. Он не откомпилирован должным образом и при запуске ищет библиотеку libglide2x.so.
Клиенты QuakeWorld доступны в нескольких разновидностях:
OpenGL:
glqwcl (только для 3dfx?)
glqwcl.glx (MesaGL/XFree4)
Только с использованием программного ускорения:
qwcl (svgalib)
qwcl.xl1 (x11/svgalib)
Повторю, что этот miniHOWTO описывает процесс получения файла glqwcl.glx, для работы с XFree86 4.x DRI.
Загрузите исходные тексты Quake, q1source.zip, с FTP ftp://ftp.idsoftware.com/idstuff/source/q1source.zip. Этот архив содержит все версии Quake1/QuakeWorld.
После компиляции, вы должны получить версию:
LinuxGL (0.98) QuakeWorld 2.40 (Aug 19, 2000) |
Вам также необходимо загрузить исходные тексты библиотеки Mesa 3D с узла http://mesa3d.sourceforge.net/. Подойдет файл MesaLib-3.3.tar.gz.
cd /usr/src tar -xvzf MesaLib-3.3.tar.gz Этим самым вы распакуете исходные тексты в каталог /usr/src/Mesa-3.3 |
Сборка библиотеки mesa:
cd /usr/src/Mesa-3.3 ./configure --prefix=/usr make |
В зависимости от вашей установки, Mesa может быть не установлена. Если вы собираетесь установить Mesa, знайте, что Mesa будет установлена поверх файлов libGL.*, которые уже есть в каталоге /usr/lib. Те файлы libGL.* вероятно, были версиями, поддерживающие аппаратное ускорение. Установка Mesa перепишет подключаемые файлы glx в каталоге /usr/X11R6/include/GL. Однако, до того, как вы установите Mesa, сделайте резервную копию файлов /usr/lib/libGL.* и /usr/X11R6/include/GL/glx*.h.
Чтобы установить библиотеку:
make install |
После того, как вы установите полный пакет Mesa, вам может понадобиться переустановить файлы libGL для аппаратного ускорения или восстановить их из резервной копии (как было предложено выше). Вам также может понадобится восстановить подключаемые файлы glx. Либо восстановите подключаемые файлы glx, либо восстановите их из резервной копии (как было предложено выше), либо, если у вас есть исходные тексты X, скопируйте эти файлы из каталога исходных текстов: cp xc/include/GL/*.h /usr/X11R6/include/GL.
Устанавливая библиотеки Mesa, вы получите файлы libGLU* и подключаемые файлы установленные на вашей системе.
mkdir q1src cd q1src unzip ../q1source.zip cd QW cp Makefile.Linux Makefile |
-O6 -ffast-math -funroll-loops -fomit-frame-pointer -fexpensive-optimizations -malign-loops=2 -malign-jumps=2 -malign-functions=2 |
-ffast-math -fexpensive-optimizations |
cd /usr ln -s X11R6 X11 |
cd q1src/QW/client отредактируйте файл: gl_vidlinuxglx.c |
static void install_grabs(void) { /* переменные для создания пустого курсора */ Pixmap blank; XColor dummy; char data[1] = {0}; Cursor cursor; /* делаем пустой курсор */ blank = XCreateBitmapFromData (dpy, win, data, 1, 1); if(blank == None) fprintf(stderr, "error: out of memory.\n"); cursor = XCreatePixmapCursor(dpy, blank, blank, &dummy, &dummy, 0, 0); XFreePixmap (dpy, blank); Con_Printf("Cursor blanked.\n"); |
XGrabPointer(dpy, win, True, 0, GrabModeAsync, GrabModeAsync, win, cursor, CurrentTime); |
patch gl_vidlinuxglx.c patchfile |
*************************** начало patchfile ************************************ *** q1src-p/QW/client/gl_vidlinuxglx.c Tue Dec 21 18:45:54 1999 --- gl_vidlinuxglx.c Sat Aug 19 20:47:42 2000 *************** *** 1,22 **** ! /* ! Copyright (C) 1996-1997 Id Software, Inc. ! ! This program is free software; you can redistribute it and/or ! modify it under the terms of the GNU General Public License ! as published by the Free Software Foundation; either version 2 ! of the License, or (at your option) any later version. ! ! This program is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU General Public License ! along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ! ! */ #include #include #include --- 1,22 ---- ! /* ! Copyright (C) 1996-1997 Id Software, Inc. ! ! This program is free software; you can redistribute it and/or ! modify it under the terms of the GNU General Public License ! as published by the Free Software Foundation; either version 2 ! of the License, or (at your option) any later version. ! ! This program is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU General Public License ! along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ! ! */ #include #include #include *************** *** 66,71 **** --- 66,74 ---- static int scr_width, scr_height; + /* blank cursor - gets initialized in VID_Init, freed in VID_Shutdown */ + Cursor cursor; + /*-----------------------------------------------------------------------*/ //int texture_mode = GL_NEAREST; *************** *** 236,243 **** 0, GrabModeAsync, GrabModeAsync, win, ! None, CurrentTime); #ifdef USE_DGA XF86DGADirectVideo(dpy, DefaultScreen(dpy), XF86DGADirectMouse); --- 239,247 ---- 0, GrabModeAsync, GrabModeAsync, win, ! cursor, CurrentTime); + Con_Printf("Cursor blanked.\n"); #ifdef USE_DGA XF86DGADirectVideo(dpy, DefaultScreen(dpy), XF86DGADirectMouse); *************** *** 350,355 **** --- 354,360 ---- if (!ctx) return; + XFreeCursor(dpy, cursor); glXDestroyContext(dpy, ctx); } *************** *** 602,608 **** unsigned long mask; Window root; XVisualInfo *visinfo; ! S_Init(); Cvar_RegisterVariable (&vid_mode); --- 607,617 ---- unsigned long mask; Window root; XVisualInfo *visinfo; ! /* vars to make blank cursor */ ! Pixmap blank; ! XColor dummy; ! char data[1] = {0}; ! S_Init(); Cvar_RegisterVariable (&vid_mode); *************** *** 701,706 **** --- 710,720 ---- Con_SafePrintf ("Video mode %dx%d initialized.\n", width, height); vid.recalc_refdef = 1; // force a surface cache flush + + blank = XCreateBitmapFromData(dpy, win, data, 1, 1); + if(blank == None) fprintf(stderr, "error: out of memory.\n"); + cursor = XCreatePixmapCursor(dpy, blank, blank, &dummy, &dummy, 0, 0); + XFreePixmap(dpy, blank); } void Sys_SendKeyEvents(void) *************************** конец patchfile ************************************ |
bind q "_windowed_mouse 0" bind w "_windowed_mouse 1" |
cd q1src/QW make build_release |
gl_flashblend 0 gl_flashblend 1 |