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

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

?? sdl_driver.c

?? 小型游戲引擎
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* * An SDL replacement for BUILD's VESA code. * *  Written by Ryan C. Gordon. (icculus@clutteredmind.org) * * Please do NOT harrass Ken Silverman about any code modifications *  (including this file) to BUILD. *//* * "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman * Ken Silverman's official web site: "http://www.advsys.net/ken" * See the included license file "BUILDLIC.TXT" for license info. * This file IS NOT A PART OF Ken Silverman's original release */#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include <assert.h>#include <string.h>#include "platform.h"#if (!defined PLATFORM_SUPPORTS_SDL)#error This platform apparently does not use SDL. Do not compile this.#endif#include "SDL.h"#include "build.h"#include "display.h"#include "pragmas.h"#include "engine.h"#if (defined USE_OPENGL)#include "buildgl.h"#endiftypedef enum{    RENDERER_SOFTWARE,    RENDERER_OPENGL3D,    RENDERER_TOTAL} sdl_renderer_type;const char *renderer_name[RENDERER_TOTAL];#define ENVRSTR_RENDERER_SOFTWARE  "software"#define ENVRSTR_RENDERER_OPENGL3D  "opengl3d"static sdl_renderer_type renderer = RENDERER_SOFTWARE;/* !!! ugh. Clean this up. */#if (defined USE_I386_ASM)#if (!defined __WATCOMC__)#include "a.h"#elseextern long setvlinebpl(long);#pragma aux setvlinebpl parm [eax];#endif  /* __WATCOMC__ */#endif  /* USE_I386_ASM */#include "cache1d.h"/* * !!! I'd like this to be temporary. --ryan. * !!!  That is, the self-modifying part, so I can ditch the mprotect() stuff. */#if ((defined PLATFORM_UNIX) && (defined USE_I386_ASM))#include <sys/mman.h>#include <limits.h>#ifndef PAGESIZE#define PAGESIZE 4096#endif#endif/* * !!! remove the surface_end checks, for speed's sake. They are a * !!!  needed safety right now. --ryan. */#define DEFAULT_MAXRESWIDTH  1600#define DEFAULT_MAXRESHEIGHT 1200#define UNLOCK_SURFACE_AND_RETURN  if (SDL_MUSTLOCK(surface)) SDL_UnlockSurface(surface); return;int _argc = 0;char **_argv = NULL;    /* !!! move these elsewhere? */long xres, yres, bytesperline, frameplace, imageSize, maxpages;char *screen, vesachecked;long buffermode, origbuffermode, linearmode;char permanentupdate = 0, vgacompatible;SDL_Surface *surface = NULL; /* This isn't static so that we can use it elsewhere AH */static int debug_hall_of_mirrors = 0;static Uint32 sdl_flags = SDL_HWPALETTE;static long mouse_x = 0;static long mouse_y = 0;static long mouse_relative_x = 0;static long mouse_relative_y = 0;static short mouse_buttons = 0;static int mouse_grabbed = 0;static unsigned int lastkey = 0;static SDL_TimerID primary_timer = NULL;/* so we can make use of setcolor16()... - DDOI */static unsigned char drawpixel_color=0;/* These hold the colors for the 256 color palette when in 16-color mode - DDOI */static char backup_palette[48];static int in_egapalette = 0;/* The standard EGA palette in BUILD format - DDOI */static char egapalette[] = { 0, 0, 0,			    0, 0, 42,			    0, 42, 0,			    0, 42, 42,			    42, 0, 0,			    42, 0, 42,			    42, 21, 0,			    42, 42, 42,			    21, 21, 21,			    21, 21, 63,			    21, 63, 21,			    21, 63, 63,			    63, 21, 21,			    63, 21, 63,			    63, 63, 21,			    63, 63, 63			   };static unsigned int scancodes[SDLK_LAST];static long last_render_ticks = 0;long total_render_time = 1;long total_rendered_frames = 0;static char *titlelong = NULL;static char *titleshort = NULL;void restore256_palette (void);void set16color_palette (void);static FILE *_sdl_debug_file = NULL;static inline void __out_sdldebug(const char *subsystem,                                  const char *fmt, va_list ap){    fprintf(_sdl_debug_file, "%s: ", subsystem);    vfprintf(_sdl_debug_file, fmt, ap);    fprintf(_sdl_debug_file, "\n");    fflush(_sdl_debug_file);} /* __out_sdldebug */static void sdldebug(const char *fmt, ...){    va_list ap;    if (_sdl_debug_file)    {        va_start(ap, fmt);        __out_sdldebug("BUILDSDL", fmt, ap);        va_end(ap);    } /* if */} /* sdldebug */#if (defined USE_OPENGL)void sgldebug(const char *fmt, ...){    va_list ap;    if (_sdl_debug_file)    {        va_start(ap, fmt);        __out_sdldebug("BUILDSDL/GL", fmt, ap);        va_end(ap);    } /* if */} /* sgldebug */#endifstatic void __append_sdl_surface_flag(SDL_Surface *_surface, char *str,                                      size_t strsize, Uint32 flag,                                      const char *flagstr){    if (_surface->flags & flag)    {        if ( (strlen(str) + strlen(flagstr)) >= (strsize - 1) )            strcpy(str + (strsize - 5), " ...");        else            strcat(str, flagstr);    } /* if */} /* append_sdl_surface_flag */#define append_sdl_surface_flag(a, b, c, fl) __append_sdl_surface_flag(a, b, c, fl, " " #fl)#define print_tf_state(str, val) sdldebug("%s: {%s}", str, (val) ? "true" : "false" )static void output_surface_info(SDL_Surface *_surface){    const SDL_VideoInfo *info;    char f[256];    if (!_sdl_debug_file)        return;    if (_surface == NULL)    {        sdldebug("-WARNING- You've got a NULL screen surface!");    }    else    {        f[0] = '\0';        sdldebug("screen surface is (%dx%dx%dbpp).",                _surface->w, _surface->h, _surface->format->BitsPerPixel);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_SWSURFACE);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_HWSURFACE);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_ASYNCBLIT);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_ANYFORMAT);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_HWPALETTE);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_DOUBLEBUF);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_FULLSCREEN);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_OPENGL);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_OPENGLBLIT);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_RESIZABLE);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_NOFRAME);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_HWACCEL);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_SRCCOLORKEY);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_RLEACCELOK);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_RLEACCEL);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_SRCALPHA);        append_sdl_surface_flag(_surface, f, sizeof (f), SDL_PREALLOC);        if (f[0] == '\0')            strcpy(f, " (none)");        sdldebug("New vidmode flags:%s", f);        info = SDL_GetVideoInfo();        assert(info != NULL);        print_tf_state("hardware surface available", info->hw_available);        print_tf_state("window manager available", info->wm_available);        print_tf_state("accelerated hardware->hardware blits", info->blit_hw);        print_tf_state("accelerated hardware->hardware colorkey blits", info->blit_hw_CC);        print_tf_state("accelerated hardware->hardware alpha blits", info->blit_hw_A);        print_tf_state("accelerated software->hardware blits", info->blit_sw);        print_tf_state("accelerated software->hardware colorkey blits", info->blit_sw_CC);        print_tf_state("accelerated software->hardware alpha blits", info->blit_sw_A);        print_tf_state("accelerated color fills", info->blit_fill);        sdldebug("video memory: (%d)", info->video_mem);    } /* else */} /* output_surface_info */static void output_driver_info(void){    char buffer[256];    if (!_sdl_debug_file)        return;    sdldebug("Using BUILD renderer \"%s\".", renderer_name[renderer]);    if (SDL_VideoDriverName(buffer, sizeof (buffer)) == NULL)    {        sdldebug("-WARNING- SDL_VideoDriverName() returned NULL!");    } /* if */    else    {        sdldebug("Using SDL video driver \"%s\".", buffer);    } /* else */} /* output_driver_info */static Uint8 *get_framebuffer(void){    assert(renderer != RENDERER_OPENGL3D);    if (renderer == RENDERER_SOFTWARE)        return((Uint8 *) surface->pixels);    else if (renderer == RENDERER_OPENGL3D)        return((Uint8 *) frameplace);    return(NULL);} /* get_framebuffer */int using_opengl(void){    return(renderer == RENDERER_OPENGL3D);} /* using_opengl *//* * !!! This is almost an entire copy of the original setgamemode(). * !!!  Figure out what is needed for just 2D mode, and separate that * !!!  out. Then, place the original setgamemode() back into engine.c, * !!!  and remove our simple implementation (and this function.) * !!!  Just be sure to keep the non-DOS things, like the window's * !!!  titlebar caption.   --ryan. */static char screenalloctype = 255;static void init_new_res_vars(int davidoption){    int i = 0;    int j = 0;    setupmouse();    SDL_WM_SetCaption(titlelong, titleshort);    xdim = xres = surface->w;    ydim = yres = surface->h;    bytesperline = surface->w;    vesachecked = 1;    vgacompatible = 1;    linearmode = 1;	qsetmode = surface->h;	activepage = visualpage = 0;    horizlookup = horizlookup2 = NULL;    if (renderer == RENDERER_OPENGL3D)        frameplace = (long) NULL;    else        frameplace = (long) ( ((Uint8 *) surface->pixels) );  	if (screen != NULL)   	{       	if (screenalloctype == 0) kkfree((void *)screen);   	    if (screenalloctype == 1) suckcache((long *)screen);   		screen = NULL;   	} /* if */    if (davidoption != -1)    {    	switch(vidoption)    	{    		case 1:i = xdim*ydim; break;    		case 2: xdim = 320; ydim = 200; i = xdim*ydim; break;    		case 6: xdim = 320; ydim = 200; i = 131072; break;    		default: assert(0);    	}    	j = ydim*4*sizeof(long);  /* Leave room for horizlookup&horizlookup2 */    	screenalloctype = 0;	    if ((screen = (char *)kkmalloc(i+(j<<1))) == NULL)    	{	    	 allocache((long *)&screen,i+(j<<1),&permanentlock);    		 screenalloctype = 1;    	}        /* !!! FIXME: Should screen get allocated above if in opengl3d mode? */        if (renderer == RENDERER_OPENGL3D)            frameplace = (long) NULL;        else        {            frameplace = FP_OFF(screen);          	horizlookup = (long *)(frameplace+i);           	horizlookup2 = (long *)(frameplace+i+j);        } /* else */    } /* if */    j = 0;  	for(i = 0; i <= ydim; i++)    {        ylookup[i] = j;        j += bytesperline;    } /* for */   	horizycent = ((ydim*4)>>1);		/* Force drawrooms to call dosetaspect & recalculate stuff */	oxyaspect = oxdimen = oviewingrange = -1;	setvlinebpl(bytesperline);    if (davidoption != -1)    {    	setview(0L,0L,xdim-1,ydim-1);    	clearallviews(0L);    } /* if */	setbrightness((char) curbrightness, (unsigned char *) &palette[0]);	if (searchx < 0) { searchx = halfxdimen; searchy = (ydimen>>1); }} /* init_new_res_vars */static void go_to_new_vid_mode(int vidoption, int w, int h){    getvalidvesamodes();    SDL_ClearError();    surface = SDL_SetVideoMode(w, h, 8, sdl_flags);    if (surface == NULL)    {        fprintf(stderr, "BUILDSDL: Failed to set %dx%d video mode!\n"                        "BUILDSDL: SDL_Error() says [%s].\n",                        w, h, SDL_GetError());        SDL_Quit();        exit(13);    } /* if */    output_surface_info(surface);    init_new_res_vars(vidoption);} /* go_to_new_vid_mode */static int sdl_mouse_button_filter(SDL_Event const *event){        /*         * What BUILD expects:         *  0	left button pressed if 1         *  1	right button pressed if 1         *  2	middle button pressed if 1         *         *   (That is, this is what Int 33h (AX=0x05) returns...)         */    Uint8 bmask = SDL_GetMouseState(NULL, NULL);    mouse_buttons = 0;    if (bmask & SDL_BUTTON_LMASK) mouse_buttons |= 1;    if (bmask & SDL_BUTTON_RMASK) mouse_buttons |= 2;    if (bmask & SDL_BUTTON_MMASK) mouse_buttons |= 4;    return(0);} /* sdl_mouse_up_filter */static int sdl_mouse_motion_filter(SDL_Event const *event){    if (surface == NULL)        return(0);    if (event->type == SDL_JOYBALLMOTION)    {        mouse_relative_x = event->jball.xrel/100;        mouse_relative_y = event->jball.yrel/100;       	mouse_x += mouse_relative_x;       	mouse_y += mouse_relative_y;    } /* if */    else    {        if (mouse_grabbed)        {          	mouse_relative_x = event->motion.xrel;       	    mouse_relative_y = event->motion.yrel;           	mouse_x += mouse_relative_x;           	mouse_y += mouse_relative_y;        } /* if */        else        {          	mouse_relative_x = event->motion.x - mouse_x;           	mouse_relative_y = event->motion.y - mouse_y;           	mouse_x = event->motion.x;           	mouse_y = event->motion.y;        } /* else */    } /* else */   	if (mouse_x < 0) mouse_x = 0;   	if (mouse_x > surface->w) mouse_x = surface->w;   	if (mouse_y < 0) mouse_y = 0;   	if (mouse_y > surface->h) mouse_y = surface->h;    return(0);} /* sdl_mouse_motion_filter *//** * Attempt to flip the video surface to fullscreen or windowed mode. *  Attempts to maintain the surface's state, but makes no guarantee *  that pointers (i.e., the surface's pixels field) will be the same *  after this call. * * Caveats: Your surface pointers will be changing; if you have any other *           copies laying about, they are invalidated. * *          Do NOT call this from an SDL event filter on Windows. You can *           call it based on the return values from SDL_PollEvent, etc, just *           not during the function you passed to SDL_SetEventFilter(). * *          Thread safe? Likely not. * *   @param surface pointer to surface ptr to toggle. May be different *                  pointer on return. MAY BE NULL ON RETURN IF FAILURE! *   @param flags   pointer to flags to set on surface. The value pointed *                  to will be XOR'd with SDL_FULLSCREEN before use. Actual *                  flags set will be filled into pointer. Contents are *                  undefined on failure. Can be NULL, in which case the *                  surface's current flags are used. *  @return non-zero on success, zero on failure. */static int attempt_fullscreen_toggle(SDL_Surface **surface, Uint32 *flags){    long framesize = 0;    void *pixels = NULL;    SDL_Rect clip;    Uint32 tmpflags = 0;    int w = 0;    int h = 0;    int bpp = 0;    int grabmouse = (SDL_WM_GrabInput(SDL_GRAB_QUERY) == SDL_GRAB_ON);    int showmouse = SDL_ShowCursor(-1);#if 0    SDL_Color *palette = NULL;    int ncolors = 0;#endif    sdldebug("attempting to toggle fullscreen flag...");    if ( (!surface) || (!(*surface)) )  /* don't try if there's no surface. */    {        sdldebug("Null surface (?!). Not toggling fullscreen flag.");        return(0);    } /* if */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91美女精品福利| 91影院在线观看| 亚洲在线观看免费| 日韩三级在线免费观看| 99国产精品久久久久| 精品在线观看视频| 一区二区三区av电影| 亚洲国产精品ⅴa在线观看| 欧美色综合网站| 成人免费毛片片v| 狠狠狠色丁香婷婷综合激情| 欧美aaaaaa午夜精品| 亚洲激情av在线| 欧美激情一区二区三区全黄| 国产精品自拍av| 一区二区三区电影在线播| 国产欧美一区二区精品性色| 91麻豆精品国产91久久久使用方法| 丰满亚洲少妇av| 国产激情视频一区二区三区欧美 | 国产91精品免费| 国产综合久久久久影院| 日本女人一区二区三区| 亚洲国产综合视频在线观看| 亚洲桃色在线一区| 国产精品免费网站在线观看| 精品三级在线观看| 日韩精品一区在线观看| 日韩一区二区三区av| 欧美日韩一区三区| 色伊人久久综合中文字幕| 欧美日韩国产首页在线观看| 91最新地址在线播放| av在线综合网| 在线看不卡av| 91麻豆精品国产自产在线观看一区| 欧美日韩成人一区二区| 制服丝袜中文字幕亚洲| 日韩欧美中文一区| 久久蜜桃香蕉精品一区二区三区| 精品国产一区二区三区忘忧草 | 日韩你懂的在线播放| 日韩欧美国产一区二区在线播放 | gogo大胆日本视频一区| 色综合视频一区二区三区高清| 在线这里只有精品| 3d成人h动漫网站入口| 精品国产91乱码一区二区三区| 欧美激情一区三区| 日本一区二区三区四区在线视频 | 久久久精品天堂| 国产精品日韩成人| 亚洲综合色婷婷| 中文字幕av一区二区三区免费看 | 91在线视频观看| 91精品一区二区三区久久久久久 | 99久久国产综合精品麻豆| 欧美系列在线观看| 国产偷国产偷亚洲高清人白洁| 亚洲人妖av一区二区| 免费观看成人鲁鲁鲁鲁鲁视频| 成人午夜又粗又硬又大| 欧美午夜电影网| 日本不卡免费在线视频| 成人性生交大片| 欧美视频一区二| 欧美激情在线观看视频免费| 日韩和的一区二区| 成人av在线网| 日韩精品专区在线| 精品国产一区二区三区久久久蜜月| 国产精品麻豆久久久| 久久99精品久久久久久动态图| 色94色欧美sute亚洲线路二| 久久久五月婷婷| 蜜臀av性久久久久蜜臀aⅴ| 99re在线视频这里只有精品| 精品欧美一区二区三区精品久久| 亚洲一区二区三区四区不卡| 国产盗摄一区二区| 日韩欧美色综合| 亚洲h在线观看| 91国产福利在线| 亚洲视频免费看| 成人av免费网站| 在线视频国产一区| 亚洲日本欧美天堂| 不卡的av电影| 中文字幕在线视频一区| 蜜臀av性久久久久蜜臀av麻豆| 欧美亚洲日本一区| 夜夜嗨av一区二区三区| 97se亚洲国产综合自在线不卡| 亚洲国产电影在线观看| 久久成人麻豆午夜电影| 欧美成人猛片aaaaaaa| 蜜臀久久99精品久久久画质超高清| 欧美日韩大陆一区二区| 日韩精品午夜视频| 91精品国产综合久久精品麻豆| 26uuu欧美| 久久精品国产秦先生| 久久久久国产一区二区三区四区 | 亚洲成人先锋电影| 91丝袜呻吟高潮美腿白嫩在线观看| 久久久久久久久久久黄色| 国产aⅴ综合色| 国产精品白丝在线| 在线观看国产日韩| 亚洲欧美韩国综合色| 91小视频免费观看| 亚洲国产精品人人做人人爽| 9l国产精品久久久久麻豆| 亚洲欧美日韩国产综合| 免费欧美高清视频| 国产农村妇女精品| 91免费小视频| 亚洲国产精品自拍| 久久综合狠狠综合久久综合88| 国内成人精品2018免费看| 国产精品三级久久久久三级| 91国产成人在线| 天堂午夜影视日韩欧美一区二区| 欧美一级xxx| 不卡av电影在线播放| 亚洲天堂免费看| 91精品国产欧美一区二区| 国产69精品久久久久毛片| 亚洲高清在线精品| 精品美女被调教视频大全网站| 日韩精品亚洲一区二区三区免费| 国产清纯在线一区二区www| 欧美视频一区二区三区在线观看| 精品一区二区三区蜜桃| 欧美激情在线免费观看| 欧美日韩中文字幕一区| 成人午夜在线免费| 国内成+人亚洲+欧美+综合在线| 一区二区三区在线视频观看58| 久久亚洲一级片| 日韩欧美一区电影| 91亚洲男人天堂| 韩国欧美国产1区| 天天av天天翘天天综合网色鬼国产 | 欧美日韩免费观看一区三区| 99精品久久久久久| youjizz国产精品| 国产成人精品免费| 高清国产午夜精品久久久久久| 麻豆视频一区二区| 精品一区二区日韩| 久草热8精品视频在线观看| 日韩**一区毛片| 91香蕉视频污| 欧洲精品中文字幕| 欧美日韩中文字幕一区| 欧美中文字幕不卡| 欧美日韩中字一区| 91精品一区二区三区久久久久久| 日韩西西人体444www| 精品国产百合女同互慰| 91蜜桃传媒精品久久久一区二区| 91福利视频在线| 欧美精品乱人伦久久久久久| 日韩午夜精品电影| 久久久久久久久久看片| 国产精品色在线| 亚洲一区中文在线| 久久精品国产99国产| 国产成人综合亚洲网站| 99精品热视频| 91精品国产综合久久久久久| 久久久久久日产精品| 亚洲视频免费在线观看| 日韩激情在线观看| 国产成人福利片| 欧美日韩中文国产| 精品国产乱码久久久久久蜜臀| 国产精品久久久久久久久晋中| 亚洲一级二级三级在线免费观看| 免费成人你懂的| 色美美综合视频| 亚洲精品在线免费播放| 亚洲午夜在线视频| 国产精品亚洲成人| 欧美日韩成人在线一区| 国产欧美日韩另类一区| 天堂一区二区在线| 成人h版在线观看| 日韩视频免费观看高清完整版 | 日韩视频免费观看高清完整版| 国产精品久久久久久久久免费桃花 | 久久久久免费观看| 香蕉久久一区二区不卡无毒影院| 亚洲精品久久久蜜桃| 狠狠色丁香九九婷婷综合五月| 欧美日韩国产经典色站一区二区三区 | 五月天亚洲精品| 色综合久久88色综合天天6| 一本一本大道香蕉久在线精品|