📄 i_video_3dfx.c
字号:
i = I_GetTime(); tics = i - lasttic; lasttic = i; if (tics > 20) tics = 20; for (i=0 ; i<tics*2 ; i+=2) screens[0][ (SCREENHEIGHT-2)*SCREENWIDTH + i + 3] = 0xff; for ( ; i<20*2 ; i+=2) screens[0][ (SCREENHEIGHT-2)*SCREENWIDTH + i + 3] = 0x0; }#ifdef RENDER_LFB /* convert the engine rendered image to RGB image, double size */ y = SCREENHEIGHT-1; do { x = SCREENWIDTH-1; do { pixel = colors[*src++]; *dst1++ = pixel; *dst1++ = pixel; *dst2++ = pixel; *dst2++ = pixel; } while (x--); dst1 += step; dst2 += step; } while (y--); /* write image into back buffer */ grLfbWriteRegion(GR_BUFFER_BACKBUFFER, 0, 0, FRAMEBUFFER_FORMAT, DFX_WIDTH, DFX_HEIGHT, DFX_WIDTH*BPP, &image[0]);#else /* convert every pixel to a vertex and draw anti-aliased vertices */ grBufferClear(0, 0, GR_ZDEPTHVALUE_FARTHEST); for (y=0; y<SCREENHEIGHT; y++) { for (x=0; x<SCREENWIDTH; x++) { vertex.x = (float)(x*2+1); vertex.y = (float)(y*2+1); vertex.r = colors[0][*src]; vertex.g = colors[1][*src]; vertex.b = colors[2][*src]; grAADrawPoint(&vertex); src++; } }#endif /* swap buffers and make new frame visible */ grBufferSwap(1);}void I_UpdateNoBlit(void){ /* empty */}void I_ReadScreen(byte *scr){ memcpy (scr, screens[0], SCREENWIDTH*SCREENHEIGHT);}void I_SetPalette(RGBA_t *palette){ register int i;#ifdef RENDER_LFB /* build LUT with 16 or 32bit RGB colors for palette */ for (i=0; i<256; i++,palette++) {#if (FRAMEBUFFER_FORMAT == GR_LFB_SRC_FMT_888) colors[i] = (palette->s.red<<16) | (palette->s.green<<8) | (palette->s.blue);#else colors[i] = ((palette->s.red>>3)<<10) | ((palette->s.green>>3)<<5) | (palette->s.blue>>3);#endif }#else /* built color table for vertices */ for (i=0; i<256; i++,palette++) { colors[0][i] = (float) palette->s.red; colors[1][i] = (float) palette->s.green; colors[2][i] = (float) palette->s.blue; }#endif}void I_OsPolling (void){ keyboard_events();}void I_StartFrame(void){ /* frame syncronous IO operations not needed for 3DFX */}/* ------------------------------------------------------------------------ *//* keyboard event handling *//* ------------------------------------------------------------------------ */static void keyboard_events(void){ unsigned char c; event_t event; if (read(fileno(stdin), &c, 1) == 1) { event.type = (c & 0x80) ? ev_keyup : ev_keydown; event.data1 = xlatekey((int)(c & 0x7F)); D_PostEvent(&event); }}static int xlatekey(int c){ int rc; switch (c) { case 1: rc = KEY_ESCAPE; break; case 2: rc = '1'; break; case 3: rc = '2'; break; case 4: rc = '3'; break; case 5: rc = '4'; break; case 6: rc = '5'; break; case 7: rc = '6'; break; case 8: rc = '7'; break; case 9: rc = '8'; break; case 10: rc = '9'; break; case 11: rc = '0'; break; case 12: rc = KEY_MINUS; break; case 13: rc = KEY_EQUALS; break; case 14: rc = KEY_BACKSPACE; break; case 15: rc = KEY_TAB; break; case 16: rc = 'q'; break; case 17: rc = 'w'; break; case 18: rc = 'e'; break; case 19: rc = 'r'; break; case 20: rc = 't'; break; case 21: rc = 'y'; break; case 22: rc = 'u'; break; case 23: rc = 'i'; break; case 24: rc = 'o'; break; case 25: rc = 'p'; break; case 28: rc = KEY_ENTER; break; case 29: rc = KEY_RCTRL; break; case 30: rc = 'a'; break; case 31: rc = 's'; break; case 32: rc = 'd'; break; case 33: rc = 'f'; break; case 34: rc = 'g'; break; case 35: rc = 'h'; break; case 36: rc = 'j'; break; case 37: rc = 'k'; break; case 38: rc = 'l'; break; case 41: rc = '`'; break; case 42: rc = KEY_RSHIFT; break; case 44: rc = 'z'; break; case 45: rc = 'x'; break; case 46: rc = 'c'; break; case 47: rc = 'v'; break; case 48: rc = 'b'; break; case 49: rc = 'n'; break; case 50: rc = 'm'; break; case 54: rc = KEY_RSHIFT; break; case 56: rc = KEY_RALT; break; case 57: rc = ' '; break; case 58: rc = KEY_CAPSLOCK; break; case 59: rc = KEY_F1; break; case 60: rc = KEY_F2; break; case 61: rc = KEY_F3; break; case 62: rc = KEY_F4; break; case 63: rc = KEY_F5; break; case 64: rc = KEY_F6; break; case 65: rc = KEY_F7; break; case 66: rc = KEY_F8; break; case 67: rc = KEY_F9; break; case 68: rc = KEY_F10; break; case 74: rc = KEY_MINUS; break; case 78: rc = KEY_EQUALS; break; case 86: rc = '<'; break; case 87: rc = KEY_F11; break; case 88: rc = KEY_F12; break; case 97: rc = KEY_RCTRL; break; case 100: rc = KEY_RALT; break; case 72: case 103: rc = KEY_UPARROW; break; case 75: case 105: rc = KEY_LEFTARROW; break; case 77: case 106: rc = KEY_RIGHTARROW; break; case 80: case 108: rc = KEY_DOWNARROW; break; case 111: rc = KEY_BACKSPACE; break; case 119: rc = KEY_PAUSE; break; default: rc = 0; break; } return rc;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -