亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rw_x11.c

?? 著名游戲quake2原代碼最新版本(vc6.0可以編譯的)
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/*
Copyright (C) 1997-2001 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.

*/
/*
** RW_X11.C
**
** This file contains ALL Linux specific stuff having to do with the
** software refresh.  When a port is being made the following functions
** must be implemented by the port:
**
** SWimp_EndFrame
** SWimp_Init
** SWimp_InitGraphics
** SWimp_SetPalette
** SWimp_Shutdown
** SWimp_SwitchFullscreen
*/

#include <ctype.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
#include <X11/keysym.h>
#include <X11/extensions/XShm.h>
#include <X11/extensions/xf86dga.h>

#include "../ref_soft/r_local.h"
#include "../client/keys.h"
#include "../linux/rw_linux.h"

/*****************************************************************************/

static qboolean			doShm;
static Display			*dpy;
static Colormap			x_cmap;
static Window			win;
static GC				x_gc;
static Visual			*x_vis;
static XVisualInfo		*x_visinfo;
static int win_x, win_y;

#define KEY_MASK (KeyPressMask | KeyReleaseMask)
#define MOUSE_MASK (ButtonPressMask | ButtonReleaseMask | \
		    PointerMotionMask | ButtonMotionMask )
#define X_MASK (KEY_MASK | MOUSE_MASK | VisibilityChangeMask | StructureNotifyMask | ExposureMask )

static int				x_shmeventtype;
//static XShmSegmentInfo	x_shminfo;

static qboolean			oktodraw = false;
static qboolean			ignorefirst = false;
static qboolean			exposureflag = false;
static qboolean			X11_active = false;

int XShmQueryExtension(Display *);
int XShmGetEventBase(Display *);

int current_framebuffer;
static XImage			*x_framebuffer[2] = { 0, 0 };
static XShmSegmentInfo	x_shminfo[2];

int config_notify=0;
int config_notify_width;
int config_notify_height;
						      
typedef unsigned short PIXEL16;
typedef unsigned long PIXEL24;
static PIXEL16 st2d_8to16table[256];
static PIXEL24 st2d_8to24table[256];
static int shiftmask_fl=0;
static long r_shift,g_shift,b_shift;
static unsigned long r_mask,g_mask,b_mask;

void shiftmask_init(void)
{
    unsigned int x;
    r_mask=x_vis->red_mask;
    g_mask=x_vis->green_mask;
    b_mask=x_vis->blue_mask;
    for(r_shift=-8,x=1;x<r_mask;x=x<<1)r_shift++;
    for(g_shift=-8,x=1;x<g_mask;x=x<<1)g_shift++;
    for(b_shift=-8,x=1;x<b_mask;x=x<<1)b_shift++;
    shiftmask_fl=1;
}

PIXEL16 xlib_rgb16(int r,int g,int b)
{
    PIXEL16 p;
    if(shiftmask_fl==0) shiftmask_init();
    p=0;

    if(r_shift>0) {
        p=(r<<(r_shift))&r_mask;
    } else if(r_shift<0) {
        p=(r>>(-r_shift))&r_mask;
    } else p|=(r&r_mask);

    if(g_shift>0) {
        p|=(g<<(g_shift))&g_mask;
    } else if(g_shift<0) {
        p|=(g>>(-g_shift))&g_mask;
    } else p|=(g&g_mask);

    if(b_shift>0) {
        p|=(b<<(b_shift))&b_mask;
    } else if(b_shift<0) {
        p|=(b>>(-b_shift))&b_mask;
    } else p|=(b&b_mask);

    return p;
}

PIXEL24 xlib_rgb24(int r,int g,int b)
{
    PIXEL24 p;
    if(shiftmask_fl==0) shiftmask_init();
    p=0;

    if(r_shift>0) {
        p=(r<<(r_shift))&r_mask;
    } else if(r_shift<0) {
        p=(r>>(-r_shift))&r_mask;
    } else p|=(r&r_mask);

    if(g_shift>0) {
        p|=(g<<(g_shift))&g_mask;
    } else if(g_shift<0) {
        p|=(g>>(-g_shift))&g_mask;
    } else p|=(g&g_mask);

    if(b_shift>0) {
        p|=(b<<(b_shift))&b_mask;
    } else if(b_shift<0) {
        p|=(b>>(-b_shift))&b_mask;
    } else p|=(b&b_mask);

    return p;
}


void st2_fixup( XImage *framebuf, int x, int y, int width, int height)
{
	int xi,yi;
	unsigned char *src;
	PIXEL16 *dest;
	register int count, n;

	if( (x<0)||(y<0) )return;

	for (yi = y; yi < (y+height); yi++) {
		src = &framebuf->data [yi * framebuf->bytes_per_line];

		// Duff's Device
		count = width;
		n = (count + 7) / 8;
		dest = ((PIXEL16 *)src) + x+width - 1;
		src += x+width - 1;

		switch (count % 8) {
		case 0:	do {	*dest-- = st2d_8to16table[*src--];
		case 7:			*dest-- = st2d_8to16table[*src--];
		case 6:			*dest-- = st2d_8to16table[*src--];
		case 5:			*dest-- = st2d_8to16table[*src--];
		case 4:			*dest-- = st2d_8to16table[*src--];
		case 3:			*dest-- = st2d_8to16table[*src--];
		case 2:			*dest-- = st2d_8to16table[*src--];
		case 1:			*dest-- = st2d_8to16table[*src--];
				} while (--n > 0);
		}

//		for(xi = (x+width-1); xi >= x; xi--) {
//			dest[xi] = st2d_8to16table[src[xi]];
//		}
	}
}

void st3_fixup( XImage *framebuf, int x, int y, int width, int height)
{
	int xi,yi;
	unsigned char *src;
	PIXEL24 *dest;
	register int count, n;

	if( (x<0)||(y<0) )return;

	for (yi = y; yi < (y+height); yi++) {
		src = &framebuf->data [yi * framebuf->bytes_per_line];

		// Duff's Device
		count = width;
		n = (count + 7) / 8;
		dest = ((PIXEL24 *)src) + x+width - 1;
		src += x+width - 1;

		switch (count % 8) {
		case 0:	do {	*dest-- = st2d_8to24table[*src--];
		case 7:			*dest-- = st2d_8to24table[*src--];
		case 6:			*dest-- = st2d_8to24table[*src--];
		case 5:			*dest-- = st2d_8to24table[*src--];
		case 4:			*dest-- = st2d_8to24table[*src--];
		case 3:			*dest-- = st2d_8to24table[*src--];
		case 2:			*dest-- = st2d_8to24table[*src--];
		case 1:			*dest-- = st2d_8to24table[*src--];
				} while (--n > 0);
		}

//		for(xi = (x+width-1); xi >= x; xi--) {
//			dest[xi] = st2d_8to16table[src[xi]];
//		}
	}
}



// Console variables that we need to access from this module

/*****************************************************************************/
/* MOUSE                                                                     */
/*****************************************************************************/

// this is inside the renderer shared lib, so these are called from vid_so

static qboolean	mouse_avail;
static int		mouse_buttonstate;
static int		mouse_oldbuttonstate;
static int		old_mouse_x, old_mouse_y;
static int		mx, my;

static qboolean mouse_active = false;
static qboolean dgamouse = false;

static cvar_t	*m_filter;
static cvar_t	*in_mouse;
static cvar_t	*in_dgamouse;

static cvar_t	*vid_xpos;			// X coordinate of window position
static cvar_t	*vid_ypos;			// Y coordinate of window position

static qboolean	mlooking;

// state struct passed in Init
static in_state_t	*in_state;

static cvar_t *sensitivity;
static cvar_t *lookstrafe;
static cvar_t *m_side;
static cvar_t *m_yaw;
static cvar_t *m_pitch;
static cvar_t *m_forward;
static cvar_t *freelook;

static void Force_CenterView_f (void)
{
	in_state->viewangles[PITCH] = 0;
}

static void RW_IN_MLookDown (void) 
{ 
	mlooking = true; 
}

static void RW_IN_MLookUp (void) 
{
	mlooking = false;
	in_state->IN_CenterView_fp ();
}

void RW_IN_Init(in_state_t *in_state_p)
{
	int mtype;
	int i;

	in_state = in_state_p;

	// mouse variables
	m_filter = ri.Cvar_Get ("m_filter", "0", 0);
    in_mouse = ri.Cvar_Get ("in_mouse", "0", CVAR_ARCHIVE);
    in_dgamouse = ri.Cvar_Get ("in_dgamouse", "1", CVAR_ARCHIVE);
	freelook = ri.Cvar_Get( "freelook", "0", 0 );
	lookstrafe = ri.Cvar_Get ("lookstrafe", "0", 0);
	sensitivity = ri.Cvar_Get ("sensitivity", "3", 0);
	m_pitch = ri.Cvar_Get ("m_pitch", "0.022", 0);
	m_yaw = ri.Cvar_Get ("m_yaw", "0.022", 0);
	m_forward = ri.Cvar_Get ("m_forward", "1", 0);
	m_side = ri.Cvar_Get ("m_side", "0.8", 0);

	ri.Cmd_AddCommand ("+mlook", RW_IN_MLookDown);
	ri.Cmd_AddCommand ("-mlook", RW_IN_MLookUp);

	ri.Cmd_AddCommand ("force_centerview", Force_CenterView_f);

	mouse_avail = true;
}

void RW_IN_Shutdown(void)
{
	mouse_avail = false;
}

/*
===========
IN_Commands
===========
*/
void RW_IN_Commands (void)
{
	int i;
   
	if (!mouse_avail) 
		return;
   
	for (i=0 ; i<3 ; i++) {
		if ( (mouse_buttonstate & (1<<i)) && !(mouse_oldbuttonstate & (1<<i)) )
			in_state->Key_Event_fp (K_MOUSE1 + i, true);

		if ( !(mouse_buttonstate & (1<<i)) && (mouse_oldbuttonstate & (1<<i)) )
			in_state->Key_Event_fp (K_MOUSE1 + i, false);
	}
	mouse_oldbuttonstate = mouse_buttonstate;
}

/*
===========
IN_Move
===========
*/
void RW_IN_Move (usercmd_t *cmd)
{
	if (!mouse_avail)
		return;
   
	if (m_filter->value)
	{
		mx = (mx + old_mouse_x) * 0.5;
		my = (my + old_mouse_y) * 0.5;
	}

	old_mouse_x = mx;
	old_mouse_y = my;

	mx *= sensitivity->value;
	my *= sensitivity->value;

// add mouse X/Y movement to cmd
	if ( (*in_state->in_strafe_state & 1) || 
		(lookstrafe->value && mlooking ))
		cmd->sidemove += m_side->value * mx;
	else
		in_state->viewangles[YAW] -= m_yaw->value * mx;

	if ( (mlooking || freelook->value) && 
		!(*in_state->in_strafe_state & 1))
	{
		in_state->viewangles[PITCH] += m_pitch->value * my;
	}
	else
	{
		cmd->forwardmove -= m_forward->value * my;
	}
	mx = my = 0;
}

// ========================================================================
// makes a null cursor
// ========================================================================

static Cursor CreateNullCursor(Display *display, Window root)
{
    Pixmap cursormask; 
    XGCValues xgc;
    GC gc;
    XColor dummycolour;
    Cursor cursor;

    cursormask = XCreatePixmap(display, root, 1, 1, 1/*depth*/);
    xgc.function = GXclear;
    gc =  XCreateGC(display, cursormask, GCFunction, &xgc);
    XFillRectangle(display, cursormask, gc, 0, 0, 1, 1);
    dummycolour.pixel = 0;
    dummycolour.red = 0;
    dummycolour.flags = 04;
    cursor = XCreatePixmapCursor(display, cursormask, cursormask,
          &dummycolour,&dummycolour, 0,0);
    XFreePixmap(display,cursormask);
    XFreeGC(display,gc);
    return cursor;
}

static void install_grabs(void)
{

// inviso cursor
	XDefineCursor(dpy, win, CreateNullCursor(dpy, win));

	XGrabPointer(dpy, win,
				 True,
				 0,
				 GrabModeAsync, GrabModeAsync,
				 win,

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲电影激情视频网站| 欧美日韩国产天堂| 国产精品一区久久久久| 久久国产日韩欧美精品| 青青草原综合久久大伊人精品优势| 亚洲国产婷婷综合在线精品| 亚洲福利视频一区二区| 香蕉影视欧美成人| 热久久国产精品| 蜜臀av性久久久久蜜臀aⅴ四虎 | 中文字幕不卡的av| 国产日韩欧美a| 中文字幕精品在线不卡| 成人免费在线播放视频| 亚洲美女电影在线| 一区二区三区在线视频播放| 一区二区三区在线观看动漫| 亚洲一区二区三区在线| 水野朝阳av一区二区三区| 日本在线不卡视频一二三区| 久草中文综合在线| 国产91丝袜在线观看| 成人av网址在线| 在线看日本不卡| 日韩一级二级三级| 国产欧美一区二区三区鸳鸯浴| 国产精品电影一区二区| 亚洲黄色av一区| 调教+趴+乳夹+国产+精品| 久久精品国产秦先生| 成人美女视频在线观看18| 91久久国产综合久久| 91精品国产手机| 久久综合久久综合久久| 中文字幕一区视频| 日韩av在线免费观看不卡| 久久草av在线| 91在线观看地址| 91精品国产高清一区二区三区 | 99久久婷婷国产精品综合| 欧美最猛黑人xxxxx猛交| 91精品国产综合久久蜜臀| 国产欧美在线观看一区| 一级精品视频在线观看宜春院| 日韩精品91亚洲二区在线观看| 激情五月婷婷综合| 一本色道综合亚洲| 精品国产一区二区在线观看| 中文字幕一区二区三区精华液| 日韩精品电影在线| 播五月开心婷婷综合| 在线播放亚洲一区| 国产精品每日更新| 日本大胆欧美人术艺术动态 | 欧美人妇做爰xxxⅹ性高电影| 精品国产伦理网| 亚洲日本一区二区| 久久99精品国产.久久久久久| 不卡视频一二三| 欧美电影免费观看高清完整版在线观看| 亚洲欧美中日韩| 久久精品99久久久| 91成人免费电影| 国产亚洲视频系列| 午夜精品一区二区三区免费视频| 国产91精品在线观看| 3d动漫精品啪啪一区二区竹菊 | 国产一区二区三区免费在线观看| 日本电影亚洲天堂一区| 精品福利一区二区三区免费视频| 亚洲高清不卡在线观看| 成人精品小蝌蚪| 26uuu国产在线精品一区二区| 一区二区在线电影| 不卡欧美aaaaa| 2024国产精品| 日本成人超碰在线观看| 日本道精品一区二区三区| 国产视频一区二区三区在线观看| 天天综合色天天综合色h| 94-欧美-setu| 国产欧美日韩不卡免费| 精品在线一区二区三区| 91精品国产一区二区三区香蕉| 亚洲日本在线看| av动漫一区二区| 欧美激情自拍偷拍| 久久精品国产免费看久久精品| 欧美日韩高清在线播放| 亚洲理论在线观看| kk眼镜猥琐国模调教系列一区二区| 久久这里只有精品首页| 久久99这里只有精品| 欧美精选午夜久久久乱码6080| 亚洲综合在线第一页| 99re视频这里只有精品| 日本一区二区动态图| 国产精品一线二线三线| 久久综合色婷婷| 国产毛片一区二区| 国产午夜亚洲精品理论片色戒| 久久精品二区亚洲w码| 欧美tk—视频vk| 麻豆久久久久久| 精品国产乱码久久久久久闺蜜 | 欧美美女黄视频| 午夜久久电影网| 欧美精品tushy高清| 午夜精品福利久久久| 在线不卡免费欧美| 日韩国产高清影视| 日韩欧美一区二区免费| 麻豆精品一区二区综合av| 日韩欧美一区二区视频| 精品一区二区免费| 国产日韩精品视频一区| 成人在线综合网| 亚洲欧洲av另类| 91电影在线观看| 午夜在线电影亚洲一区| 制服丝袜亚洲播放| 久久爱www久久做| 久久久国产综合精品女国产盗摄| 国产成人亚洲精品狼色在线| 国产精品视频九色porn| 97成人超碰视| 性欧美大战久久久久久久久| 欧美一区二区三区爱爱| 国内偷窥港台综合视频在线播放| 国产欧美精品一区二区色综合| 99精品欧美一区| 亚洲一区二区三区影院| 日韩精品最新网址| 国产成人自拍在线| 一区二区欧美精品| 欧美高清视频不卡网| 国产精品99精品久久免费| 1024精品合集| 91精品国产欧美一区二区| 国产一区二区三区美女| 亚洲免费看黄网站| 日韩欧美在线不卡| www.欧美.com| 日韩高清中文字幕一区| 国产日本欧美一区二区| 欧美艳星brazzers| 精品亚洲porn| 亚洲免费观看高清完整版在线 | 久久久久高清精品| 91久久精品网| 国产一区在线视频| 亚洲精品国产a| 久久这里只有精品视频网| 色婷婷激情一区二区三区| 九色综合国产一区二区三区| 亚洲欧洲在线观看av| 欧美一级xxx| 91麻豆精品在线观看| 美洲天堂一区二卡三卡四卡视频| 中文字幕在线免费不卡| 日韩欧美中文字幕制服| 91精品福利在线| 国产精品一区二区不卡| 日韩精品色哟哟| 亚洲女女做受ⅹxx高潮| 久久天天做天天爱综合色| 欧美视频日韩视频在线观看| 国产精品自产自拍| 午夜视黄欧洲亚洲| 亚洲欧美在线另类| 精品美女被调教视频大全网站| 色婷婷av一区二区三区大白胸| 国产原创一区二区三区| 天涯成人国产亚洲精品一区av| 成人欧美一区二区三区1314| 精品999在线播放| 欧美日韩激情一区二区| jlzzjlzz亚洲日本少妇| 国产一区二区精品在线观看| 日韩电影在线一区| 亚洲一区欧美一区| 亚洲欧美综合网| 中文字幕免费不卡| 日韩午夜三级在线| 欧美色精品在线视频| 91首页免费视频| 豆国产96在线|亚洲| 国内精品久久久久影院薰衣草| 日韩福利电影在线观看| 亚洲国产成人av网| 亚洲一区自拍偷拍| 一区二区在线观看免费 | 成人免费va视频| 国产精品正在播放| 狂野欧美性猛交blacked| 日韩精品电影在线观看| 爽爽淫人综合网网站| 亚洲一区二区三区四区在线观看 | 一区二区三区四区视频精品免费 | 在线精品视频免费播放|