diff options
author | inmarket <andrewh@inmarket.com.au> | 2013-12-24 01:00:14 +1000 |
---|---|---|
committer | inmarket <andrewh@inmarket.com.au> | 2013-12-24 01:00:14 +1000 |
commit | 39adfff2a9f73919dd09593efc38884dc2a05f40 (patch) | |
tree | f0fdf8c70ce4a1396e33927f9033049de370c56a /demos/3rdparty/doom/i_video.c | |
parent | 57d9c4854beefd22aa367f6a44b5da4a586632b1 (diff) | |
download | uGFX-39adfff2a9f73919dd09593efc38884dc2a05f40.tar.gz uGFX-39adfff2a9f73919dd09593efc38884dc2a05f40.tar.bz2 uGFX-39adfff2a9f73919dd09593efc38884dc2a05f40.zip |
demo - DOOM the game.
Runs but not quite functional yet (requires user input to be completed).
Shareware WAD file. Please read README.txt and DOOMLIC.txt
Diffstat (limited to 'demos/3rdparty/doom/i_video.c')
-rw-r--r-- | demos/3rdparty/doom/i_video.c | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/demos/3rdparty/doom/i_video.c b/demos/3rdparty/doom/i_video.c new file mode 100644 index 00000000..98167534 --- /dev/null +++ b/demos/3rdparty/doom/i_video.c @@ -0,0 +1,210 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// $Id:$ +// +// Copyright (C) 1993-1996 by id Software, Inc. +// +// This source is available for distribution and/or modification +// only under the terms of the DOOM Source Code License as +// published by id Software. All rights reserved. +// +// The source is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License +// for more details. +// +// $Log:$ +// +// DESCRIPTION: +// DOOM graphics stuff for X11, UNIX. +// +//----------------------------------------------------------------------------- + +#include "gfx.h" + +#include "doomstat.h" +#include "i_system.h" +#include "v_video.h" +#include "m_argv.h" +#include "d_main.h" + +#include "doomdef.h" + +// +// Palette stuff. +// +static color_t colors[256]; +//static int lastmousex = 0; +//static int lastmousey = 0; + + +void I_ShutdownGraphics(void) +{ +} + +// +// I_StartFrame +// +void I_StartFrame (void) +{ +} + +void I_GetEvent(void) +{ +#if 0 + event_t event; + + // put event-grabbing stuff in here + XNextEvent(X_display, &X_event); + switch (X_event.type) + { + case KeyPress: + event.type = ev_keydown; + event.data1 = xlatekey(); + D_PostEvent(&event); + // fprintf(stderr, "k"); + break; + case KeyRelease: + event.type = ev_keyup; + event.data1 = xlatekey(); + D_PostEvent(&event); + // fprintf(stderr, "ku"); + break; + case ButtonPress: + event.type = ev_mouse; + event.data1 = + (X_event.xbutton.state & Button1Mask) + | (X_event.xbutton.state & Button2Mask ? 2 : 0) + | (X_event.xbutton.state & Button3Mask ? 4 : 0) + | (X_event.xbutton.button == Button1) + | (X_event.xbutton.button == Button2 ? 2 : 0) + | (X_event.xbutton.button == Button3 ? 4 : 0); + event.data2 = event.data3 = 0; + D_PostEvent(&event); + // fprintf(stderr, "b"); + break; + case ButtonRelease: + event.type = ev_mouse; + event.data1 = + (X_event.xbutton.state & Button1Mask) + | (X_event.xbutton.state & Button2Mask ? 2 : 0) + | (X_event.xbutton.state & Button3Mask ? 4 : 0); + // suggest parentheses around arithmetic in operand of | + event.data1 = + event.data1 + ^ (X_event.xbutton.button == Button1 ? 1 : 0) + ^ (X_event.xbutton.button == Button2 ? 2 : 0) + ^ (X_event.xbutton.button == Button3 ? 4 : 0); + event.data2 = event.data3 = 0; + D_PostEvent(&event); + // fprintf(stderr, "bu"); + break; + case MotionNotify: + event.type = ev_mouse; + event.data1 = + (X_event.xmotion.state & Button1Mask) + | (X_event.xmotion.state & Button2Mask ? 2 : 0) + | (X_event.xmotion.state & Button3Mask ? 4 : 0); + event.data2 = (X_event.xmotion.x - lastmousex) << 2; + event.data3 = (lastmousey - X_event.xmotion.y) << 2; + + if (event.data2 || event.data3) + { + lastmousex = X_event.xmotion.x; + lastmousey = X_event.xmotion.y; + if (X_event.xmotion.x != X_width/2 && + X_event.xmotion.y != X_height/2) + { + D_PostEvent(&event); + // fprintf(stderr, "m"); + mousemoved = false; + } else + { + mousemoved = true; + } + } + break; + + case Expose: + case ConfigureNotify: + break; + + default: + if (doShm && X_event.type == X_shmeventtype) shmFinished = true; + break; + } +#endif +} + +// +// I_StartTic +// +void I_StartTic (void) +{ +} + + +// +// I_UpdateNoBlit +// +void I_UpdateNoBlit (void) +{ +} + +// +// I_FinishUpdate +// +void I_FinishUpdate (void) +{ + register byte *p; + register coord_t x, y; + coord_t w, h; + size_t ldiff; + + w = gdispGetWidth(); + if (w > SCREENWIDTH) w = SCREENWIDTH; + ldiff = SCREENWIDTH - w; + + h = gdispGetHeight(); + if (h > SCREENHEIGHT) h = SCREENHEIGHT; + + gdispStreamStart(0, 0, w, h); + + for(p = screens[0], y=0; y < h; y++, p+=ldiff) { + for(x = 0; x < w; x++, p++) + gdispStreamColor(colors[*p]); + } + gdispStreamStop(); + + // Force a display update if the controller supports it + gdispFlush(); +} + + +// +// I_ReadScreen +// +void I_ReadScreen (byte* scr) +{ + memcpy (scr, screens[0], SCREENWIDTH*SCREENHEIGHT); +} + + +// +// I_SetPalette +// +void I_SetPalette (byte* palette) +{ + int i; + + for (i=0 ; i<256 ; i++, palette+=3) { + colors[i] = RGB(gammatable[usegamma][palette[0]], gammatable[usegamma][palette[1]], gammatable[usegamma][palette[2]]); + } +} + + +void I_InitGraphics(void) +{ + screens[0] = gfxAlloc(SCREENWIDTH*SCREENHEIGHT); +} |