aboutsummaryrefslogtreecommitdiffstats
path: root/demos/3rdparty/doom/i_video.c
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2013-12-24 01:00:14 +1000
committerinmarket <andrewh@inmarket.com.au>2013-12-24 01:00:14 +1000
commit39adfff2a9f73919dd09593efc38884dc2a05f40 (patch)
treef0fdf8c70ce4a1396e33927f9033049de370c56a /demos/3rdparty/doom/i_video.c
parent57d9c4854beefd22aa367f6a44b5da4a586632b1 (diff)
downloaduGFX-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.c210
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);
+}