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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vid_next.m

?? 著名游戲quake2原代碼最新版本(vc6.0可以編譯的)
?? M
?? 第 1 頁 / 共 3 頁
字號:
// vid_next.m -- NEXTSTEP video driver

#define	INTERCEPTOR

#import <appkit/appkit.h>
#import <string.h>
#import "intercep.h"
#include "quakedef.h"
#include "d_local.h"

int	BASEWIDTH = 320;
int BASEHEIGHT = 200;

void SetupBitmap (void);
void SetupFramebuffer (void);
void UpdateBitmap (void);
void UpdateFramebuffer (vrect_t *vrect);
void SetVideoEncoding (char *encoding);
void Update8_1 (pixel_t *src, byte *dest, int width,
		int height, int destrowbytes);
void Update16_1 (pixel_t *src, unsigned short *dest, int width,
		int height, int destrowbytes);
void Update32_1 (pixel_t *src, unsigned *dest, int width,
		int height, int destrowbytes);


@interface QuakeView : View
@end

@interface FrameWindow:Window
@end

unsigned short	d_8to16table[256];	// not used in 8 bpp mode
unsigned	d_8to24table[256];	// not used in 8 bpp mode


/*
==========================================================================

						API FUNCTIONS

==========================================================================
*/

typedef enum {disp_bitmap, disp_framebuffer}	display_t;

pixel_t		*vid_buffer;
pixel_t		*buffernative;
unsigned	pcolormap[4][256];	// map from quake pixels to native pixels
unsigned	pixbytesnative;
unsigned	rowbytesnative;
int			dither;

int			drawdirect = 0;

int			d_con_indirect = 0;

display_t		vid_display;

byte			vid_palette[768];	// saved for restarting vid system

id				vid_window_i;
id				vid_view_i;
#ifdef INTERCEPTOR
NXDirectBitmap	*vid_dbitmap_i;
NXFramebuffer	*vid_framebuffer_i;
#endif

NXRect   		screenBounds;		// only valid in framebuffer mode

int				vid_scale;

char			*vid_encodingstring;

int				vid_fullscreen;
int				vid_screen;

int				vid_high_hunk_mark;

typedef enum
{
	enc_24_rgba,
	enc_24_0rgb,
	enc_24_rgb0,
	enc_12_rgba,
	enc_12_rgb0,
	enc_15_0rgb,
	enc_564,
	enc_8_gray,
	enc_8_rgb
} vid_encoding_t;

typedef struct
{
	char			*string;
	int				pixelbytes;
	void			(*colormap) (void);
	vid_encoding_t	name;
} vidtype_t;

vid_encoding_t	vid_encoding;
 
void	Table8 (void);
void	Table15 (void);
void	Table12 (void);
void	Table12Swap (void);
void	Table24 (void);
void	Table24Swap (void);

vidtype_t vid_encodingtable[]=
{
{"RRRRRRRRGGGGGGGGBBBBBBBBAAAAAAAA",4, Table24Swap, enc_24_rgba},
{"--------RRRRRRRRGGGGGGGGBBBBBBBB",4, Table24, enc_24_0rgb},
{"RRRRRRRRGGGGGGGGBBBBBBBB--------",4, Table24Swap, enc_24_rgb0},
{"RRRRGGGGBBBBAAAA",2, Table12Swap, enc_12_rgba},
{"RRRRGGGGBBBB----",2, Table12, enc_12_rgb0},
{"-RRRRRGGGGGBBBBB",2, Table15, enc_15_0rgb},
{"WWWWWWWW",1, Table8, enc_8_gray},
{"PPPPPPPP",1, Table8, enc_8_rgb},
{NULL,0, 0, 0}
};

vidtype_t	*vid_type;
void	InitNS8Bit (void);

/*
================
D_BeginDirectRect
================
*/
void D_BeginDirectRect (int x, int y, byte *pbitmap, int width, int height)
{
// direct drawing of the "accessing disk" icon isn't supported under Nextstep
}


/*
================
D_EndDirectRect
================
*/
void D_EndDirectRect (int x, int y, int width, int height)
{
// direct drawing of the "accessing disk" icon isn't supported under Nextstep
}


/*
==============
VID_Restart

internal call only
===============
*/
void VID_Restart (display_t mode, int scale)
{
	vid_display = mode;
	vid_scale = scale;

	[NXApp activateSelf:YES];

	if (vid_display == disp_framebuffer)
		SetupFramebuffer ();
	else
		SetupBitmap ();

	vid.recalc_refdef = 1;
}


/*
=================
VID_Scale_f

Keybinding command
=================
*/
void VID_Scale_f (void)
{
	int		scale;
	
	if (Cmd_Argc () != 2)
		return;
		
	scale = atoi (Cmd_Argv(1));
	if (scale != 1 && scale != 2)
	{
		Con_Printf ("scale must be 1 or 2\n");
		return;
	}
	VID_Shutdown ();
	VID_Restart (vid_display, scale);
}

/*
=================
VID_Mode_f

Keybinding command
=================
*/
void VID_Mode_f (void)
{
	int		mode;

	if (Cmd_Argc () != 2)
		return;

	mode = atoi (Cmd_Argv(1));

	VID_Shutdown ();
	if (mode == 0)
	{
		drawdirect = 0;
		VID_Restart (disp_bitmap, vid_scale);
	}
	else if (mode == 1)
	{
		drawdirect = 0;
		VID_Restart (disp_framebuffer, vid_scale);
	}
	else
	{
		drawdirect = 1;
		VID_Restart (disp_framebuffer, vid_scale);
	}
}

/*
=================
VID_Size_f

Keybinding command
=================
*/
void VID_Size_f (void)
{	
	if (Cmd_Argc () != 3)
		return;

	VID_Shutdown ();

	BASEWIDTH = atoi (Cmd_Argv(1));
	BASEHEIGHT = atoi (Cmd_Argv(2));

	VID_Restart (vid_display, vid_scale);
}

/*
================
VID_Init
================
*/
void	VID_Init (unsigned char *palette)
{
	InitNS8Bit ();			// fixed palette lookups
	
	Q_memcpy (vid_palette, palette, sizeof(vid_palette));

	if (COM_CheckParm ("-bitmap"))
		vid_display = disp_bitmap;
	else
		vid_display = disp_framebuffer;

	if (COM_CheckParm ("-screen2"))
		vid_screen = 1;
	else
		vid_screen = 0;

	if (COM_CheckParm ("-direct"))
		drawdirect = 1;
	
	Cmd_AddCommand ("vid_scale", VID_Scale_f);
	Cmd_AddCommand ("vid_mode", VID_Mode_f);
	Cmd_AddCommand ("vid_size", VID_Size_f);

	vid.width = BASEWIDTH;
	vid.height = BASEHEIGHT;
	vid.aspect = 1.0;
	vid.numpages = 1;
	vid.colormap = host_colormap;
	vid.fullbright = 256 - LittleLong (*((int *)vid.colormap + 2048));
	vid.maxwarpwidth = WARP_WIDTH;
	vid.maxwarpheight = WARP_HEIGHT;

	if (COM_CheckParm ("-scale2"))
		vid_scale = 2;
	else
		vid_scale = 1;
		
    [Application new];

	VID_Restart (vid_display, vid_scale);
}


/*
================
VID_Shutdown
================
*/
void VID_Shutdown (void)
{
#ifdef INTERCEPTOR
	if (vid_dbitmap_i)
	{
		[vid_dbitmap_i free];
		vid_dbitmap_i = 0;
	}
	if (vid_framebuffer_i)
	{
		[vid_framebuffer_i free];
		vid_framebuffer_i = 0;
	}
#endif
	[vid_window_i close];
	[vid_window_i free];
}


/*
================
VID_Update
================
*/
void	VID_Update (vrect_t *rects)
{
	if (drawdirect)
		return;

	while (rects)
	{
		UpdateFramebuffer (rects);
		rects = rects->pnext;
	}

	if (vid_display == disp_bitmap)
		UpdateBitmap ();
}


/*
================
VID_SetPalette
================
*/
void	VID_SetPalette (unsigned char *palette)
{
	Q_memcpy (vid_palette, palette, sizeof(vid_palette));
	vid_type->colormap ();
}


/*
================
VID_ShiftPalette
================
*/
void    VID_ShiftPalette (unsigned char *palette)
{

	VID_SetPalette (palette);
}


/*
==========================================================================

						NS STUFF

==========================================================================
*/


/*
=================
SetVideoEncoding
=================
*/
void SetVideoEncoding (char *encoding)
{
	vidtype_t			*type;

	Sys_Printf ("SetVideoEncoding: %s\n",encoding);
	vid_encodingstring = encoding;
	
	for (type = vid_encodingtable ; type->string ; type++)
	{
		if (strcmp(type->string, encoding) == 0)
		{
			pixbytesnative = type->pixelbytes;
			vid_encoding = type->name;
			type->colormap ();
			vid_type = type;
			return;
		}
	}
	
	Sys_Error ("Unsupported video encoding: %s\n",encoding);
}

/*
=================
AllocBuffers
=================
*/
void AllocBuffers (qboolean withnative)
{
	int		surfcachesize;
	void	*surfcache;
	int		pixels;
	int		pixbytes;
	int		vid_buffersize;

	if (vid_buffer)
	{
		D_FlushCaches ();
		Hunk_FreeToHighMark (vid_high_hunk_mark);
		vid_high_hunk_mark = 0;
		vid_buffer = NULL;
	}

	pixels = vid.width * vid.height;

	pixbytes = 1 +sizeof (*d_pzbuffer);
	if (withnative)
		pixbytes += pixbytesnative;
		
	surfcachesize = D_SurfaceCacheForRes (vid.width, vid.height);
	vid_buffersize = pixels * pixbytes + surfcachesize;

	vid_high_hunk_mark = Hunk_HighMark ();
	vid_buffer = Hunk_HighAllocName (vid_buffersize, "video");
	if (!vid_buffer)
		Sys_Error ("Couldn't alloc video buffers");

	vid.buffer = vid_buffer;

	d_pzbuffer = (unsigned short *)((byte *)vid_buffer + pixels);
	surfcache = (byte *)d_pzbuffer + pixels * sizeof (*d_pzbuffer);
	if (withnative)
		buffernative = (byte *)surfcache + surfcachesize;

	D_InitCaches (surfcache, surfcachesize);
}

/*
=================
SetupFramebuffer
=================
*/
void SetupFramebuffer (void)
{
#ifdef INTERCEPTOR
    int			windowNum;
	NXRect		cont;
	NXScreen	const *screens;
	int			screencount;

//
// get the screen list
//
	[NXApp getScreens:&screens count:&screencount];

//
// create vid_framebuffer_i
//
    vid_framebuffer_i = [[NXFramebuffer alloc]
		   initFromScreen:screens[vid_screen].screenNumber andMapIfPossible:YES];
    [vid_framebuffer_i screenBounds:&screenBounds];

	SetVideoEncoding ([vid_framebuffer_i pixelEncoding]);

	buffernative = [vid_framebuffer_i data];
	rowbytesnative = [vid_framebuffer_i bytesPerRow];

//
// create window
//
	if (vid_fullscreen)
	{
		vid.height = screenBounds.size.height / vid_scale;
		vid.width = screenBounds.size.width / vid_scale;
		cont.origin.x = 0;
		cont.origin.y = 0;
		cont.size.width = screenBounds.size.width;
		cont.size.height = screenBounds.size.height;
	}
	else
	{
		buffernative = (unsigned char *)buffernative + 8 * rowbytesnative +
				8 * pixbytesnative;
		vid.width = BASEWIDTH;
		vid.height = BASEHEIGHT;
		cont.origin.x = 8;
		cont.origin.y = screenBounds.size.height - (vid.height*vid_scale) - 8;
		cont.size.width = vid.width * vid_scale;
		cont.size.height = vid.height * vid_scale;
	}

    vid_window_i = [[FrameWindow alloc]
		 initContent:		&cont
		 style:				NX_PLAINSTYLE
		 backing:			NX_NONRETAINED
		 buttonMask:		0
		 defer:				NO
		 screen:			screens+vid_screen];
    windowNum = [vid_window_i windowNum];
    PSsetwindowlevel(40, windowNum);
    PSsetautofill(YES, windowNum);
    PSgsave();
    PSwindowdeviceround(windowNum);
    PSsetgray(NX_BLACK);
    PSsetexposurecolor();
    PSgrestore();

//
// create view
//
	vid_view_i = [[QuakeView alloc] initFrame: &screenBounds];
	[[vid_window_i setContentView: vid_view_i] free];
	[vid_window_i makeFirstResponder: vid_view_i];
	[vid_window_i setDelegate: vid_view_i];	
	[vid_window_i display];
	[vid_window_i makeKeyAndOrderFront: nil];
	NXPing ();

	AllocBuffers (false);	// no native buffer

	if (drawdirect)
	{	// the direct drawing mode to NeXT colorspace
		vid.buffer = buffernative;
		vid.rowbytes = rowbytesnative;
	}
	else
		vid.rowbytes = vid.width;

	vid.conbuffer = vid.buffer;
	vid.conrowbytes = vid.rowbytes;
	vid.conwidth = vid.width;
	vid.conheight = vid.height;
#endif
}

/*
=================
SetupBitmap
=================
*/
void SetupBitmap (void)
{
	int		depth;
	NXRect	content;

//
// open a window
//
	NXSetRect (&content, 8,136, vid.width*vid_scale, vid.height*vid_scale);
	vid_window_i = [[Window alloc]
			initContent:	&content
			style:			NX_RESIZEBARSTYLE
			backing:		NX_RETAINED
			buttonMask:		0
			defer:			NO
		];
	[vid_window_i display];
	[vid_window_i makeKeyAndOrderFront: nil];

	NXPing ();

	content.origin.x = content.origin.y = 0;
	vid_view_i = [[QuakeView alloc] initFrame: &content];
	[[vid_window_i setContentView: vid_view_i] free];
	[vid_window_i makeFirstResponder: vid_view_i];
	[vid_window_i setDelegate: vid_view_i];

	[vid_window_i addToEventMask: NX_FLAGSCHANGEDMASK];

//
// find video info
//
    depth = [Window defaultDepthLimit];
    switch (depth) {
	case NX_EightBitGrayDepth:
		SetVideoEncoding ("WWWWWWWW");
	    break;
	case NX_TwelveBitRGBDepth:
		SetVideoEncoding ("RRRRGGGGBBBBAAAA");
	    break;
	default:
	case NX_TwentyFourBitRGBDepth:
		SetVideoEncoding ("RRRRRRRRGGGGGGGGBBBBBBBBAAAAAAAA");
	    break;
//	default:	// 8 bit color shows up as an unknown...
		Sys_Error ("Unsupported window depth");
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线精品国自产拍免费| 精品国产亚洲在线| 91美女福利视频| 在线视频你懂得一区| 欧美高清视频不卡网| 久久久.com| 一区二区三区在线免费播放| 一区二区三区四区中文字幕| 舔着乳尖日韩一区| va亚洲va日韩不卡在线观看| 欧美精品精品一区| 18成人在线观看| 国产一区三区三区| 91国偷自产一区二区三区观看| 欧美一区二区三区思思人| 国产情人综合久久777777| 亚洲国产va精品久久久不卡综合| 九一久久久久久| 欧美电影在哪看比较好| 亚洲乱码日产精品bd| 久草热8精品视频在线观看| 欧美亚洲综合网| 亚洲欧洲无码一区二区三区| 国产寡妇亲子伦一区二区| 欧美系列一区二区| 亚洲va中文字幕| 欧美日本在线观看| 精品亚洲porn| 久久久亚洲精华液精华液精华液 | 久久久www免费人成精品| 免费看欧美美女黄的网站| 91精品国产综合久久久久久久 | 激情深爱一区二区| 中文字幕av一区二区三区免费看| www.亚洲色图.com| 日日夜夜免费精品| 久久在线观看免费| 色哟哟国产精品免费观看| 中文字幕av一区二区三区免费看| 成人激情免费视频| 国产99久久久久久免费看农村| 久久久精品一品道一区| eeuss影院一区二区三区| 亚洲综合精品自拍| 久久久精品tv| 日韩视频免费直播| 91免费精品国自产拍在线不卡| 丁香激情综合国产| av不卡免费在线观看| 欧美mv日韩mv| 日韩精品一区二区三区蜜臀| 2017欧美狠狠色| 国产精品污网站| 欧美人与z0zoxxxx视频| 黄色日韩三级电影| 亚洲成人7777| 久久久久97国产精华液好用吗| 色婷婷狠狠综合| 日本欧美一区二区三区乱码 | 麻豆91精品视频| 国产精品毛片大码女人| 91精品欧美综合在线观看最新 | 粉嫩嫩av羞羞动漫久久久| 亚洲色图清纯唯美| 亚洲三级在线播放| 午夜精品爽啪视频| 日韩高清国产一区在线| 亚洲va国产天堂va久久en| 亚洲专区一二三| 一区二区欧美国产| 久久国产精品99精品国产| 天天免费综合色| 精品无人码麻豆乱码1区2区 | 日日摸夜夜添夜夜添亚洲女人| 一区二区欧美国产| 日产国产欧美视频一区精品| 久久久不卡网国产精品一区| 国产精品欧美久久久久一区二区| 午夜免费欧美电影| 91网站黄www| 国产精品情趣视频| 国内外精品视频| 久久综合av免费| 亚洲国产精品欧美一二99| 精久久久久久久久久久| 91黄视频在线| 欧美国产精品v| 日本午夜精品一区二区三区电影| 国产乱人伦偷精品视频免下载| 日本电影亚洲天堂一区| 中文在线一区二区| 久久99精品视频| 欧美精品久久一区| 亚洲一区影音先锋| 色女孩综合影院| 亚洲精品一二三| 99久久国产综合精品女不卡| 久久综合九色综合欧美就去吻| 亚洲123区在线观看| 在线观看一区日韩| 亚洲激情综合网| 欧美综合一区二区三区| 亚洲乱码中文字幕综合| 色哟哟在线观看一区二区三区| 国产精品乱人伦一区二区| 国产精品一级片| 最近日韩中文字幕| 一本大道久久a久久综合 | 欧美一区日本一区韩国一区| 一区二区三区不卡在线观看| 91成人在线观看喷潮| 亚洲成av人片| 国产三级精品视频| 色偷偷久久一区二区三区| 日本中文字幕不卡| 久久久精品中文字幕麻豆发布| 91亚洲精品乱码久久久久久蜜桃| 国产精品久99| 精品欧美一区二区在线观看| 国产伦精一区二区三区| 亚洲日本一区二区| 日韩欧美色综合网站| 91欧美激情一区二区三区成人| 日日骚欧美日韩| 亚洲天堂久久久久久久| 欧美成人精品3d动漫h| 色999日韩国产欧美一区二区| 日日噜噜夜夜狠狠视频欧美人| 国产精品理论片在线观看| 日韩一区二区免费在线电影| 99re成人在线| 国产精品一区二区黑丝| 精品一区二区三区免费观看| 亚洲自拍与偷拍| 一个色在线综合| 亚洲欧美一区二区三区国产精品| 国产亚洲精久久久久久| 日韩三级视频中文字幕| 欧美精品第1页| 欧美日韩高清一区二区不卡| av不卡在线观看| 91丨porny丨蝌蚪视频| zzijzzij亚洲日本少妇熟睡| 国产成人在线视频免费播放| 国产激情一区二区三区四区| 麻豆成人av在线| 福利91精品一区二区三区| 国产在线精品一区在线观看麻豆| 美女网站色91| av午夜一区麻豆| 欧美色视频一区| 欧美不卡在线视频| 国产精品久久影院| 视频一区中文字幕| 国产美女精品人人做人人爽| av电影在线观看完整版一区二区| 日本韩国欧美在线| 2023国产一二三区日本精品2022| 2021国产精品久久精品| 亚洲人成小说网站色在线 | 26uuu亚洲综合色| 亚洲乱码国产乱码精品精可以看| 日韩不卡一区二区三区| 国产盗摄精品一区二区三区在线| 在线免费不卡视频| 久久先锋资源网| 亚洲第一主播视频| 99这里只有久久精品视频| 26uuu精品一区二区在线观看| 一区二区三区在线视频免费| 国产在线精品一区在线观看麻豆| 欧美日韩一级二级三级| 亚洲视频电影在线| 91免费版在线看| 中文字幕+乱码+中文字幕一区| 免费在线观看精品| 欧美色区777第一页| 亚洲欧美另类小说| 夜夜嗨av一区二区三区中文字幕 | 国产成人精品亚洲日本在线桃色 | 欧美日韩日本视频| 午夜a成v人精品| 国产三级三级三级精品8ⅰ区| 国产一区二区91| 中文字幕欧美一区| 精品视频一区三区九区| 日韩不卡在线观看日韩不卡视频| 日韩视频免费观看高清完整版在线观看| 免费在线视频一区| 亚洲人成小说网站色在线| 日韩免费电影一区| av爱爱亚洲一区| 久久99久久久欧美国产| 国产欧美一区二区精品性色超碰| 91丨九色丨蝌蚪富婆spa| 国产主播一区二区| 性做久久久久久| 午夜婷婷国产麻豆精品| 亚洲免费观看高清完整版在线观看 | 欧美日韩一区精品|