亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
一本大道av一区二区在线播放 | 一区二区三区在线观看视频| 黄色资源网久久资源365| 5月丁香婷婷综合| 国产精品婷婷午夜在线观看| 久久精品99国产国产精| 91精品国产综合久久久蜜臀图片| 亚洲国产视频一区二区| 日本道免费精品一区二区三区| 国产精品美女久久久久aⅴ国产馆| 国产精品亚洲а∨天堂免在线| 日韩欧美综合一区| 亚洲黄色av一区| 久久精品日产第一区二区三区高清版| 在线观看免费亚洲| 91香蕉视频污| 97se狠狠狠综合亚洲狠狠| 蜜臀av亚洲一区中文字幕| 欧美日韩亚洲高清一区二区| 国产精品资源在线看| 欧美高清在线视频| 91精品在线麻豆| 91女人视频在线观看| 成人黄色小视频| 亚洲福中文字幕伊人影院| 国产女人18毛片水真多成人如厕| 欧美图区在线视频| 国产精品免费丝袜| 肉色丝袜一区二区| 99久久99久久久精品齐齐| 日韩免费一区二区| 久久久亚洲精品一区二区三区 | 国产午夜亚洲精品不卡| 97精品国产露脸对白| 亚洲欧洲日韩av| 国产精品麻豆99久久久久久| www一区二区| 欧美日韩亚洲丝袜制服| 欧美亚洲国产bt| 色婷婷综合久久久| 亚洲欧美国产三级| 国产精品久久三| 欧美人与性动xxxx| 国产成人鲁色资源国产91色综| 色综合天天综合网国产成人综合天| 国产成人av影院| 成人黄动漫网站免费app| 久久不见久久见免费视频1| 国产精品18久久久| 国产精品毛片无遮挡高清| 亚洲欧洲日本在线| 国产中文字幕精品| 欧美一区二区三区日韩视频| 国产精品日韩精品欧美在线 | 国产一区不卡在线| 国产成人精品免费一区二区| 精品福利在线导航| 亚洲女同ⅹxx女同tv| 国产精品夜夜嗨| 国产精品三级av| 国产成人午夜视频| 亚洲色图清纯唯美| 舔着乳尖日韩一区| 亚洲另类色综合网站| 7777精品伊人久久久大香线蕉超级流畅 | 午夜不卡在线视频| 欧美一区二区女人| 国产色婷婷亚洲99精品小说| 亚洲欧洲另类国产综合| 九九热在线视频观看这里只有精品| 国产日韩欧美a| 亚洲天堂中文字幕| 91精品国产一区二区人妖| 国产在线播放一区二区三区| 欧美一区二区在线免费观看| 久久久噜噜噜久久人人看| 国产美女视频91| 亚洲国产成人精品视频| 欧美午夜一区二区三区| 精品亚洲国产成人av制服丝袜| 国产日产欧美一区二区三区| 在线观看亚洲a| 欧美亚洲日本一区| 亚洲激情中文1区| 日韩欧美一区二区三区在线| 国产电影精品久久禁18| 在线免费av一区| 久久精品国产成人一区二区三区 | 欧美一区二区视频网站| 岛国一区二区在线观看| 久久er99热精品一区二区| 午夜电影网一区| 蜜桃精品视频在线| 麻豆91免费观看| 高清av一区二区| 99国产精品一区| 粉嫩嫩av羞羞动漫久久久 | 欧美电视剧免费全集观看| 日韩一区二区在线观看视频| 91精品国产综合久久精品图片 | 日本一区二区三级电影在线观看| 2020国产精品自拍| 国产精品免费网站在线观看| 亚洲日本在线看| 三级欧美在线一区| 麻豆精品视频在线观看免费| 国产福利一区二区| 欧美午夜一区二区三区| 久久婷婷国产综合精品青草| 国产三级精品三级| 无码av免费一区二区三区试看| 蜜桃精品视频在线| 99视频热这里只有精品免费| 欧美日韩视频不卡| 国产精品三级电影| 看片的网站亚洲| 色老汉一区二区三区| 精品国产精品网麻豆系列| 亚洲国产精品一区二区www在线| 美女看a上一区| 色噜噜狠狠一区二区三区果冻| 亚洲综合久久久| 日韩欧美一级精品久久| 国产精品原创巨作av| 亚洲美女视频在线| 4438成人网| 久久99久久精品欧美| 国产女同互慰高潮91漫画| 色美美综合视频| 国产精品一区一区三区| 亚洲区小说区图片区qvod| 成人永久免费视频| 欧美日韩日日骚| 丝袜美腿亚洲色图| 精品国精品自拍自在线| 久久99日本精品| 国产三级精品视频| 色综合久久中文综合久久牛| 国产精品久久久久桃色tv| heyzo一本久久综合| 亚洲自拍与偷拍| 日韩欧美国产小视频| 久久国产精品区| ㊣最新国产の精品bt伙计久久| 色综合 综合色| 精一区二区三区| 成人免费视频在线观看| 欧美高清激情brazzers| 国产麻豆视频一区| 亚洲愉拍自拍另类高清精品| 日韩午夜在线影院| 一本大道久久a久久精品综合| 日本不卡高清视频| 中文字幕av在线一区二区三区| 欧美成人一区二区三区片免费| 国产一区二区三区视频在线播放| 欧美军同video69gay| 美女网站一区二区| 欧美va亚洲va香蕉在线| 免费不卡在线视频| 欧美午夜精品免费| 亚洲一区二区三区在线看| 精品视频全国免费看| 日韩二区三区四区| 国产精品卡一卡二| 精品国产网站在线观看| 欧亚洲嫩模精品一区三区| 国产剧情一区在线| 久久精品国产亚洲高清剧情介绍 | 亚洲一区二区视频在线观看| 欧美不卡激情三级在线观看| 色欧美片视频在线观看| www.在线成人| 国产精品亚洲综合一区在线观看| 日韩电影在线一区| 亚洲不卡一区二区三区| 亚洲三级在线观看| 中文字幕一区二区三区精华液 | 日本最新不卡在线| 五月天亚洲精品| 日本伊人精品一区二区三区观看方式| 一区二区三区中文免费| 国产精品福利一区二区| 中文字幕一区二区三区在线不卡| 国产精品欧美综合在线| 国产精品家庭影院| 夜夜夜精品看看| 性欧美疯狂xxxxbbbb| 视频一区二区国产| 狠狠色2019综合网| 99久久精品免费精品国产| 日本高清不卡视频| 欧美第一区第二区| 国产精品免费观看视频| 午夜不卡在线视频| 美腿丝袜亚洲色图| 91免费在线视频观看| 欧美丰满少妇xxxxx高潮对白| 欧美精品一区二区高清在线观看| 国产精品久久午夜夜伦鲁鲁|