diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 7ee5e45c4..b08648705 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,12 +1,16 @@ D2X-Rebirth Changelog +20080129 +-------- +SConstruct, arch/include/mouse.h, arch/ogl/gr.c, arch/ogl/ogl.c, arch/ogl/sdlgl.c, arch/sdl/mouse.c, include/internal.h, main/kconfig.c: Cleanung up arch/ a little bit; Added mouse delta time interval for more more accurate reading at high FPS + 20080125 -------- arch/sdl/digi_mixer_music.c: allow custom MIDI in add-on hogs to be used without caching everything -20080114 +20080124 -------- -INSTALL.txt, main/gamerend.c, main/network.c, main/udp.c: Updated Docs - Data files mus bt lowercase; Fixed small Multiplayer issues +INSTALL.txt, main/gamerend.c, main/network.c, main/udp.c: Updated Docs - Data files must be lowercase; Fixed small Multiplayer issues 20080123 -------- diff --git a/SConstruct b/SConstruct index 19118e052..ad7a667f5 100644 --- a/SConstruct +++ b/SConstruct @@ -394,13 +394,11 @@ if (sdl_only == 1): print "building with SDL" target = 'd2x-rebirth-sdl' env.Append(CPPDEFINES = ['SDL_VIDEO']) - env.Append(CPPPATH = ['arch/sdl/include']) common_sources += arch_sdl_sources else: print "building with OpenGL" target = 'd2x-rebirth-gl' env.Append(CPPDEFINES = ogldefines) - env.Append(CPPPATH = ['arch/ogl/include']) common_sources += arch_ogl_sources libs += ogllibs diff --git a/arch/include/mouse.h b/arch/include/mouse.h index 461cbd274..d5595e122 100644 --- a/arch/include/mouse.h +++ b/arch/include/mouse.h @@ -1,19 +1,6 @@ -/* -THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX -SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO -END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A -ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS -IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS -SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE -FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE -CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS -AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. -COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. -*/ - /* * - * Header for mouse functions + * SDL mouse driver header * */ @@ -23,14 +10,12 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "pstypes.h" #include "fix.h" -#ifdef MBTN_RIGHT -#undef MBTN_RIGHT -#endif - -#define MBTN_LEFT 0 +#define MOUSE_MAX_BUTTONS 8 +#define Z_SENSITIVITY 100 +#define MBTN_LEFT 0 #define MBTN_RIGHT 1 #define MBTN_MIDDLE 2 -#define MBTN_Z_UP 3 +#define MBTN_Z_UP 3 #define MBTN_Z_DOWN 4 #define MBTN_PITCH_BACKWARD 5 #define MBTN_PITCH_FORWARD 6 @@ -38,47 +23,18 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #define MBTN_BANK_RIGHT 8 #define MBTN_HEAD_LEFT 9 #define MBTN_HEAD_RIGHT 10 +#define MOUSE_LBTN 1 +#define MOUSE_RBTN 2 +#define MOUSE_MBTN 4 -#define MOUSE_LBTN 1 -#define MOUSE_RBTN 2 -#define MOUSE_MBTN 4 - -//======================================================================== -// Check for mouse driver, reset driver if installed. returns number of -// buttons if driver is present. - -#ifdef SVGALIB_INPUT -extern int d_mouse_init(int enable_cyberman); /* conflict with */ -#else -extern int mouse_init(int enable_cyberman); -#endif -/* changed from int to void */ -extern void mouse_set_limits( int x1, int y1, int x2, int y2 ); extern void mouse_flush(); // clears all mice events... - -//======================================================================== -// Shutdowns mouse system. -#ifdef SVGALIB_INPUT -extern void d_mouse_close(); /* conflict with */ -#else extern void mouse_close(); -#endif - -//======================================================================== extern void mouse_get_pos( int *x, int *y, int *z ); extern void mouse_get_delta( int *dx, int *dy, int *dz ); extern int mouse_get_btns(); extern void mouse_set_pos( int x, int y); -extern void mouse_get_cyberman_pos( int *x, int *y ); - -// Returns how long this button has been down since last call. extern fix mouse_button_down_time(int button); - -// Returns how many times this button has went down since last call. extern int mouse_button_down_count(int button); - -// Returns 1 if this button is currently down extern int mouse_button_state(int button); - #endif diff --git a/arch/linux/include/joystick.h b/arch/linux/include/joystick.h deleted file mode 100644 index 0f7406020..000000000 --- a/arch/linux/include/joystick.h +++ /dev/null @@ -1,267 +0,0 @@ -#ifndef _LINUX_JOYSTICK_H -#define _LINUX_JOYSTICK_H - -/* - * /usr/include/linux/joystick.h Version 1.2 - * - * Copyright (C) 1996-1998 Vojtech Pavlik - */ - -#include -#include -#include - -/* - * Version - */ - -#define JS_VERSION 0x01020a - -/* - * Types and constants for reading from /dev/js - */ - -#define JS_EVENT_BUTTON 0x01 /* button pressed/released */ -#define JS_EVENT_AXIS 0x02 /* joystick moved */ -#define JS_EVENT_INIT 0x80 /* initial state of device */ - -struct js_event { - __u32 time; /* event timestamp in miliseconds */ - __s16 value; /* value */ - __u8 type; /* event type */ - __u8 number; /* axis/button number */ -}; - -/* - * IOCTL commands for joystick driver - */ - -#define JSIOCGVERSION _IOR('j', 0x01, __u32) /* get driver version */ - -#define JSIOCGAXES _IOR('j', 0x11, __u8) /* get number of axes */ -#define JSIOCGBUTTONS _IOR('j', 0x12, __u8) /* get number of buttons */ -#define JSIOCGNAME(len) _IOC(_IOC_READ, 'j', 0x13, len) /* get identifier string */ - -#define JSIOCSCORR _IOW('j', 0x21, struct js_corr) /* set correction values */ -#define JSIOCGCORR _IOR('j', 0x22, struct js_corr) /* get correction values */ - -/* - * Types and constants for get/set correction - */ - -#define JS_CORR_NONE 0x00 /* returns raw values */ -#define JS_CORR_BROKEN 0x01 /* broken line */ - -struct js_corr { - __s32 coef[8]; - __s16 prec; - __u16 type; -}; - -/* - * v0.x compatibility definitions - */ - -#define JS_RETURN sizeof(struct JS_DATA_TYPE) -#define JS_TRUE 1 -#define JS_FALSE 0 -#define JS_X_0 0x01 -#define JS_Y_0 0x02 -#define JS_X_1 0x04 -#define JS_Y_1 0x08 -#define JS_MAX 2 - -#define JS_DEF_TIMEOUT 0x1300 -#define JS_DEF_CORR 0 -#define JS_DEF_TIMELIMIT 10L - -#define JS_SET_CAL 1 -#define JS_GET_CAL 2 -#define JS_SET_TIMEOUT 3 -#define JS_GET_TIMEOUT 4 -#define JS_SET_TIMELIMIT 5 -#define JS_GET_TIMELIMIT 6 -#define JS_GET_ALL 7 -#define JS_SET_ALL 8 - -struct JS_DATA_TYPE { - int buttons; - int x; - int y; -}; - -struct JS_DATA_SAVE_TYPE { - int JS_TIMEOUT; - int BUSY; - long JS_EXPIRETIME; - long JS_TIMELIMIT; - struct JS_DATA_TYPE JS_SAVE; - struct JS_DATA_TYPE JS_CORR; -}; - -/* - * Internal definitions - */ - -#ifdef __KERNEL__ - -#define JS_BUFF_SIZE 64 /* output buffer size */ - -#include - -#ifndef KERNEL_VERSION -#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) -#endif - -#ifndef LINUX_VERSION_CODE -#error "You need to use at least 2.0 Linux kernel." -#endif - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,0,0) -#error "You need to use at least 2.0 Linux kernel." -#endif - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) -#define JS_HAS_RDTSC (current_cpu_data.x86_capability & 0x10) -#include -#else -#ifdef MODULE -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,35) -#define JS_HAS_RDTSC (x86_capability & 0x10) -#else -#define JS_HAS_RDTSC 0 -#endif -#else -#define JS_HAS_RDTSC (x86_capability & 0x10) -#endif -#define __initdata -#define __init -#define MODULE_AUTHOR(x) -#define MODULE_PARM(x,y) -#define MODULE_SUPPORTED_DEVICE(x) -#define signal_pending(x) (((x)->signal) & ~((x)->blocked)) -#endif - -/* - * Parport stuff - */ - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) -#define USE_PARPORT -#endif - -#ifdef USE_PARPORT -#include -#define JS_PAR_STATUS(y) parport_read_status(y->port) -#define JS_PAR_DATA_IN(y) parport_read_data(y->port) -#define JS_PAR_DATA_OUT(x,y) parport_write_data(y->port, x) -#define JS_PAR_CTRL_OUT(x,y) parport_write_control(y->port, x) -#else -#define JS_PAR_STATUS(y) inb(y+1) -#define JS_PAR_DATA_IN(y) inb(y) -#define JS_PAR_DATA_OUT(x,y) outb(x,y) -#define JS_PAR_CTRL_OUT(x,y) outb(x,y+2) -#endif - -#define JS_PAR_STATUS_INVERT (0x80) - -/* - * Internal types - */ - -struct js_dev; - -typedef int (*js_read_func)(void *info, int **axes, int **buttons); -typedef unsigned int (*js_time_func)(void); -typedef int (*js_delta_func)(unsigned int x, unsigned int y); -typedef int (*js_ops_func)(struct js_dev *dev); - -struct js_data { - int *axes; - int *buttons; -}; - -struct js_dev { - struct js_dev *next; - struct js_list *list; - struct js_port *port; - struct wait_queue *wait; - struct js_data cur; - struct js_data new; - struct js_corr *corr; - struct js_event buff[JS_BUFF_SIZE]; - js_ops_func open; - js_ops_func close; - int ahead; - int bhead; - int tail; - int num_axes; - int num_buttons; - char *name; -}; - -struct js_list { - struct js_list *next; - struct js_dev *dev; - int tail; - int startup; -}; - -struct js_port { - struct js_port *next; - struct js_port *prev; - js_read_func read; - struct js_dev **devs; - int **axes; - int **buttons; - struct js_corr **corr; - void *info; - int ndevs; -}; - -/* - * Sub-module interface - */ - -extern unsigned int js_time_speed; -extern js_time_func js_get_time; -extern js_delta_func js_delta; - -extern unsigned int js_time_speed_a; -extern js_time_func js_get_time_a; -extern js_delta_func js_delta_a; - -extern struct js_port *js_register_port(struct js_port *port, void *info, - int devs, int infos, js_read_func read); -extern struct js_port *js_unregister_port(struct js_port *port); - -extern int js_register_device(struct js_port *port, int number, int axes, - int buttons, char *name, js_ops_func open, js_ops_func close); -extern void js_unregister_device(struct js_dev *dev); - -/* - * Kernel interface - */ - -extern int js_init(void); -extern int js_am_init(void); -extern int js_an_init(void); -extern int js_as_init(void); -extern int js_console_init(void); -extern int js_db9_init(void); -extern int js_gr_init(void); -extern int js_l4_init(void); -extern int js_lt_init(void); -extern int js_sw_init(void); -extern int js_tm_init(void); - -extern void js_am_setup(char *str, int *ints); -extern void js_an_setup(char *str, int *ints); -extern void js_as_setup(char *str, int *ints); -extern void js_console_setup(char *str, int *ints); -extern void js_db9_setup(char *str, int *ints); -extern void js_l4_setup(char *str, int *ints); - -#endif /* __KERNEL__ */ - -#endif /* _LINUX_JOYSTICK_H */ diff --git a/arch/linux/timer.c b/arch/linux/timer.c deleted file mode 100644 index 3e62162f1..000000000 --- a/arch/linux/timer.c +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include -#include -#include "maths.h" - -static struct timeval tv_old; - -fix timer_get_fixed_seconds(void) -{ - fix x; - struct timeval tv_now; - gettimeofday(&tv_now, NULL); - x=i2f(tv_now.tv_sec - tv_old.tv_sec) + fixdiv(i2f((tv_now.tv_usec - tv_old.tv_usec)/1000), i2f(1000)); - return x; -} - -void timer_init(void) -{ - gettimeofday(&tv_old, NULL); -} diff --git a/arch/ogl/gr.c b/arch/ogl/gr.c index 446ec3980..27886d8da 100644 --- a/arch/ogl/gr.c +++ b/arch/ogl/gr.c @@ -1,9 +1,7 @@ -/* $Id: gr.c,v 1.1.1.1 2006/03/17 19:53:31 zicodxx Exp $ */ /* * * OGL video functions. - Added 9/15/99 Matthew Mueller * - * */ #ifdef HAVE_CONFIG_H diff --git a/arch/ogl/ogl.c b/arch/ogl/ogl.c index c44510a80..7d331f0a6 100644 --- a/arch/ogl/ogl.c +++ b/arch/ogl/ogl.c @@ -1,9 +1,7 @@ -/* $Id: ogl.c,v 1.1.1.1 2006/03/17 19:53:36 zicodxx Exp $ */ /* * * Graphics support functions for OpenGL. * - * */ #ifdef HAVE_CONFIG_H diff --git a/arch/ogl/sdlgl.c b/arch/ogl/sdlgl.c index 11b5be7ba..ff74b24d7 100644 --- a/arch/ogl/sdlgl.c +++ b/arch/ogl/sdlgl.c @@ -1,9 +1,7 @@ -/* $Id: sdlgl.c,v 1.1.1.1 2006/03/17 19:53:36 zicodxx Exp $ */ /* * * Graphics functions for SDL-GL. * - * */ #ifdef HAVE_CONFIG_H @@ -11,10 +9,6 @@ #endif #include -#ifdef SDL_IMAGE -#include -#endif - #include "internal.h" #include "vers_id.h" #include "error.h" @@ -23,7 +17,8 @@ static int curx=-1,cury=-1,curfull=0; -void ogl_do_fullscreen_internal(void){ +void ogl_do_fullscreen_internal(void) +{ ogl_init_window(curx,cury); } @@ -43,20 +38,13 @@ int ogl_init_window(int x, int y) if (gl_initialized){ if (x==curx && y==cury && curfull==ogl_fullscreen) return 0; -#ifdef __linux__ // Windows, at least, seems to need to reload every time. +#ifdef __LINUX__ // Windows, at least, seems to need to reload every time. if (ogl_fullscreen || curfull) #endif ogl_smash_texture_list_internal();//if we are or were fullscreen, changing vid mode will invalidate current textures } SDL_WM_SetCaption(DESCENT_VERSION, "Descent II"); -#ifdef SDL_IMAGE - { -#include "descent.xpm" - SDL_WM_SetIcon(IMG_ReadXPMFromArray(pixmap), NULL); - } -#endif - if (!SDL_SetVideoMode(x, y, GameArg.DbgGlBpp, SDL_OPENGL | (ogl_fullscreen ? SDL_FULLSCREEN : 0))) { Error("Could not set %dx%dx%d opengl video mode: %s\n", x, y, GameArg.DbgGlBpp, SDL_GetError()); @@ -69,17 +57,18 @@ int ogl_init_window(int x, int y) return 0; } -void ogl_destroy_window(void){ - if (gl_initialized){ +void ogl_destroy_window(void) +{ + if (gl_initialized) + { ogl_smash_texture_list_internal(); SDL_ShowCursor(1); - //gl_initialized=0; - //well..SDL doesn't really let you kill the window.. so we just need to wait for sdl_quit } return; } -void ogl_init(void){ +void ogl_init(void) +{ SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE,0); SDL_GL_SetAttribute(SDL_GL_ACCUM_RED_SIZE,0); @@ -89,6 +78,7 @@ void ogl_init(void){ SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1); } -void ogl_close(void){ +void ogl_close(void) +{ ogl_destroy_window(); } diff --git a/arch/sdl/mouse.c b/arch/sdl/mouse.c index 8ba9cd507..5d10cff7a 100644 --- a/arch/sdl/mouse.c +++ b/arch/sdl/mouse.c @@ -1,7 +1,6 @@ -/* $Id: mouse.c,v 1.1.1.1 2006/03/17 19:53:41 zicodxx Exp $ */ /* * - * SDL mouse driver. + * SDL mouse driver * */ @@ -10,7 +9,6 @@ #endif #include - #include #include "fix.h" @@ -18,13 +16,7 @@ #include "event.h" #include "mouse.h" -#ifdef _WIN32_WCE -# define LANDSCAPE -#endif - -#define MOUSE_MAX_BUTTONS 8 - -#define Z_SENSITIVITY 100 +extern fix FrameTime; struct mousebutton { ubyte pressed; @@ -37,6 +29,7 @@ struct mousebutton { static struct mouseinfo { struct mousebutton buttons[MOUSE_MAX_BUTTONS]; int delta_x, delta_y, delta_z; + int delta_time; int x,y,z; } Mouse; @@ -86,17 +79,10 @@ void mouse_button_handler(SDL_MouseButtonEvent *mbe) void mouse_motion_handler(SDL_MouseMotionEvent *mme) { -#ifdef LANDSCAPE - Mouse.delta_y += mme->xrel; - Mouse.delta_x += mme->yrel; - Mouse.y += mme->xrel; - Mouse.x += mme->yrel; -#else Mouse.delta_x += mme->xrel; Mouse.delta_y += mme->yrel; Mouse.x += mme->xrel; Mouse.y += mme->yrel; -#endif } void mouse_flush() // clears all mice events... @@ -134,13 +120,19 @@ void mouse_get_pos( int *x, int *y, int *z ) void mouse_get_delta( int *dx, int *dy, int *dz ) { + Mouse.delta_time += FrameTime; event_poll(); *dx = Mouse.delta_x; *dy = Mouse.delta_y; *dz = Mouse.delta_z; - Mouse.delta_x = 0; - Mouse.delta_y = 0; - Mouse.delta_z = 0; + // reset all ~33ms + if (Mouse.delta_time >= F1_0/30) + { + Mouse.delta_x = 0; + Mouse.delta_y = 0; + Mouse.delta_z = 0; + Mouse.delta_time = 0; + } } int mouse_get_btns() diff --git a/arch/win32/d1x.ico b/arch/win32/d1x.ico deleted file mode 100755 index f9394c489..000000000 Binary files a/arch/win32/d1x.ico and /dev/null differ diff --git a/arch/win32/d1x.rc b/arch/win32/d1x.rc deleted file mode 100755 index 3695fe47c..000000000 --- a/arch/win32/d1x.rc +++ /dev/null @@ -1,220 +0,0 @@ -//Microsoft Developer Studio generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE DISCARDABLE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE DISCARDABLE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE DISCARDABLE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Accelerator -// - -IDR_MAIN_ACCEL ACCELERATORS DISCARDABLE -BEGIN - VK_F1, IDM_HELP, VIRTKEY, SHIFT, NOINVERT - VK_F2, IDM_CHANGEDEVICE, VIRTKEY, SHIFT, NOINVERT - VK_F4, IDM_EXIT, VIRTKEY, ALT, NOINVERT - VK_RETURN, IDM_TOGGLESTART, VIRTKEY, NOINVERT - VK_RETURN, IDM_TOGGLEFULLSCREEN, VIRTKEY, ALT, NOINVERT - VK_SPACE, IDM_SINGLESTEP, VIRTKEY, SHIFT, NOINVERT -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO DISCARDABLE -BEGIN - IDD_ABOUT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 236 - VERTGUIDE, 28 - VERTGUIDE, 215 - TOPMARGIN, 7 - BOTTOMMARGIN, 99 - HORZGUIDE, 27 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_ABOUT DIALOG DISCARDABLE 0, 0, 243, 106 -STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_VISIBLE | - WS_CAPTION | WS_SYSMENU -CAPTION "About Direct3D Descent" -FONT 8, "MS Sans Serif" -BEGIN - DEFPUSHBUTTON "OK",IDOK,201,85,35,14 - CTEXT "Based on original code by Parallax Software",IDC_STATIC, - 7,46,229,14 - CTEXT "Only for use with full version of Descent from Interplay Productions", - IDC_STATIC,7,65,229,14 - ICON IDI_MAIN_ICON,IDC_STATIC,7,7,21,20 - CTEXT "DOS/VGA to Win32/Direct3D conversion by Piers Haken", - IDC_STATIC,28,27,187,14 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Menu -// - -IDR_MENU MENU DISCARDABLE -BEGIN - POPUP "&File" - BEGIN - MENUITEM "&Go/stop\tEnter", IDM_TOGGLESTART - MENUITEM "&Single step\tSpace", IDM_SINGLESTEP - MENUITEM SEPARATOR - MENUITEM "&About...\tF1", IDM_HELP - MENUITEM "&Change device...\tF2", IDM_CHANGEDEVICE - MENUITEM SEPARATOR - MENUITEM "E&xit\tESC", IDM_EXIT - END -END - -IDR_POPUP MENU DISCARDABLE -BEGIN - POPUP "Popup" - BEGIN - MENUITEM "&Go/stop", IDM_TOGGLESTART - MENUITEM "&Single step", IDM_SINGLESTEP - MENUITEM SEPARATOR - MENUITEM "&About...", IDM_HELP - MENUITEM "&Change device...", IDM_CHANGEDEVICE - MENUITEM SEPARATOR - MENUITEM "E&xit", IDM_EXIT - END -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_MAIN_ICON ICON DISCARDABLE "d1x.ico" -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - -///////////////////////////////////////////////////////////////////////////// -// English (U.K.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK -#pragma code_page(1252) -#endif //_WIN32 - -#ifndef _MAC -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,0,0,1 - PRODUCTVERSION 0,0,0,1 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "080904b0" - BEGIN - VALUE "Comments", "Doesn't work very well\0" - VALUE "CompanyName", "Spong Technologies\0" - VALUE "FileDescription", "d1xd3d\0" - VALUE "FileVersion", "0, 0, 0, 1\0" - VALUE "InternalName", "d1xd3d\0" - VALUE "OriginalFilename", "d1xd3d.exe\0" - VALUE "ProductName", "Direct3D Descent\0" - VALUE "ProductVersion", "0, 0, 0, 1\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x809, 1200 - END -END - -#endif // !_MAC - -#endif // English (U.K.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/arch/win32/d3d.ico b/arch/win32/d3d.ico deleted file mode 100755 index aa7361f6d..000000000 Binary files a/arch/win32/d3d.ico and /dev/null differ diff --git a/arch/win32/d3dframe/d3denum.cpp b/arch/win32/d3dframe/d3denum.cpp deleted file mode 100755 index a2730e24c..000000000 --- a/arch/win32/d3dframe/d3denum.cpp +++ /dev/null @@ -1,641 +0,0 @@ -//----------------------------------------------------------------------------- -// File: D3DEnum.cpp -// -// Desc: Class enumerate through the DirectDraw drivers, Direct3D devices, -// and the display modes available to each device. -// -// -// Copyright (c) 1997-1998 Microsoft Corporation. All rights reserved -//----------------------------------------------------------------------------- - -#include - -// HACK!!!!! -#include -#ifndef SM_CMONITORS -#define SM_CMONITORS -DECLARE_HANDLE(HMONITOR); -#endif - -#include "D3DEnum.h" -#include "D3DUtil.h" - - - - -//----------------------------------------------------------------------------- -// Constants and function prototypes for the user select driver dialog -//----------------------------------------------------------------------------- -DLGTEMPLATE* _BuildDriverSelectTemplate(); -BOOL CALLBACK _DriverSelectProc( HWND, UINT, WPARAM, LPARAM ); - - - - -//----------------------------------------------------------------------------- -// Global data for the enumerator functions -//----------------------------------------------------------------------------- -static LPDIRECTDRAW4 g_pDD = NULL; // Used for callbacks -static BOOL g_bRefRastEnumerated = FALSE; // For the reference rast -static BOOL g_bDevicesEnumerated = FALSE; // Used during enumeration - -D3DEnum_DriverInfo* g_pFirstDriver = NULL; // List of DD drivers -D3DEnum_DriverInfo* g_pDefaultDriver = NULL; // Default driver -D3DEnum_DriverInfo* g_pCurrentDriver = NULL; // The selected DD driver - -static HRESULT (*g_fnAppConfirmFn)(DDCAPS*, D3DDEVICEDESC*) = NULL; - - - - -//----------------------------------------------------------------------------- -// Local callback functions used during enumeration -//----------------------------------------------------------------------------- - - -//----------------------------------------------------------------------------- -// Name: EnumDisplayModesCallback() -// Desc: Callback function called for each display mode. Each available -// display mode is added to a list for further choosing from the app. -//----------------------------------------------------------------------------- -static HRESULT WINAPI EnumDisplayModesCallback( DDSURFACEDESC2* pddsd, - VOID* pvContext ) -{ - // Check parameters - if( NULL==pddsd || NULL==pvContext ) - return DDENUMRET_CANCEL; - - D3DEnum_DeviceInfo* pDevice = (D3DEnum_DeviceInfo*)pvContext; - D3DEnum_ModeInfo* pNewMode; - DWORD dwBitDepth = pDevice->ddDesc.dwDeviceRenderBitDepth; - DWORD dwModeDepth = pddsd->ddpfPixelFormat.dwRGBBitCount; - - // Check mode for compatability with device. Skip 8-bit modes. - if( (32==dwModeDepth) && (0==(dwBitDepth&DDBD_32)) ) return DDENUMRET_OK; - if( (24==dwModeDepth) && (0==(dwBitDepth&DDBD_24)) ) return DDENUMRET_OK; - if( (16==dwModeDepth) && (0==(dwBitDepth&DDBD_16)) ) return DDENUMRET_OK; - if( ( 8==dwModeDepth) ) return DDENUMRET_OK; - - // Create a new mode structure - if( NULL == ( pNewMode = new D3DEnum_ModeInfo ) ) - return DDENUMRET_CANCEL; - - // Initialize the new mode structure - ZeroMemory( pNewMode, sizeof(D3DEnum_ModeInfo) ); - memcpy( &pNewMode->ddsd, pddsd, sizeof(DDSURFACEDESC2) ); - sprintf( pNewMode->strDesc, TEXT("%ld x %ld x %ld"), pddsd->dwWidth, - pddsd->dwHeight, dwModeDepth ); - - // Link the new mode struct in the list of other display modes - D3DEnum_ModeInfo** pMode = &pDevice->pFirstMode; - while( *pMode ) - pMode = &((*pMode)->pNext); - (*pMode) = pNewMode; - - // If this is a 640x480x16 mode, save it as the default mode - if( ( 640 == pddsd->dwWidth ) && ( 480 == pddsd->dwHeight ) && - ( 16 == pddsd->ddpfPixelFormat.dwRGBBitCount ) ) - pDevice->pCurrentMode = pNewMode; - - if( NULL == pDevice->pCurrentMode ) - pDevice->pCurrentMode = pNewMode; - - return DDENUMRET_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: Enum3DDevicesCallback() -// Desc: Callback function called for each DirectX 3D device. The driver's -// attributes are added to the list of available drivers. -//----------------------------------------------------------------------------- -static HRESULT WINAPI Enum3DDevicesCallback( GUID* pGUID, LPSTR strDesc, - LPSTR strName, LPD3DDEVICEDESC pHALDesc, - LPD3DDEVICEDESC pHELDesc, LPVOID pvContext ) -{ - D3DEnum_DriverInfo* pDriver = (D3DEnum_DriverInfo*)pvContext; - D3DEnum_DeviceInfo* pNewDevice; - - // Check params - if( NULL==pGUID || NULL==pHALDesc || NULL==pHELDesc || NULL==pDriver ) - return D3DENUMRET_CANCEL; - - // Handle specific device GUIDs. NullDevice renders nothing - if( IsEqualGUID( *pGUID, IID_IDirect3DNullDevice ) ) - return D3DENUMRET_OK; - - // Set a flag so we know enumeration is working. This is just a feature to - // help return more informative return codes later on. - g_bDevicesEnumerated = TRUE; - - // Get info about this device. - BOOL bIsHardware = ( 0 != pHALDesc->dwFlags ); - D3DDEVICEDESC* pDesc = bIsHardware ? pHALDesc : pHELDesc; - - // Only enumerate software rasterizers for the primary device (which has - // a NULL GUID). This is to avoid duplicates - if( pDriver->pGUID != NULL ) - if( FALSE == bIsHardware ) - return D3DENUMRET_OK; - - - // Give the app a chance to accept or reject this device, based on - // what feature set it supports - if( g_fnAppConfirmFn ) - if( FAILED( g_fnAppConfirmFn( &pDriver->ddDriverCaps, pDesc ) ) ) - return D3DENUMRET_OK; - - // Create a new D3D Driver struct - if( NULL == ( pNewDevice = new D3DEnum_DeviceInfo ) ) - return D3DENUMRET_CANCEL; - ZeroMemory( pNewDevice, sizeof(D3DEnum_DeviceInfo) ); - - // Copy remaining device attributes - memcpy( &pNewDevice->guid, pGUID, sizeof(GUID) ); - pNewDevice->pGUID = &pNewDevice->guid; - strncpy( pNewDevice->strName, strName, 39 ); - memcpy( &pNewDevice->ddDesc, pDesc, sizeof(D3DDEVICEDESC) ); - pNewDevice->bIsHardware = bIsHardware; - - if( pNewDevice->bIsHardware ) - pDriver->pCurrentDevice = pNewDevice; - else - { - if( NULL == pDriver->pCurrentDevice ) - if( D3DCOLOR_RGB & pHELDesc->dcmColorModel ) - pDriver->pCurrentDevice = pNewDevice; - } - - // Enumerate the display modes - g_pDD->EnumDisplayModes( 0, NULL, pNewDevice, EnumDisplayModesCallback ); - - // Get the display mode's depth - DDSURFACEDESC2 ddsd; - ddsd.dwSize = sizeof(DDSURFACEDESC2); - g_pDD->GetDisplayMode( &ddsd ); - DWORD dwDisplayBPP = ddsd.ddpfPixelFormat.dwRGBBitCount; - - // Set the initial bWindowed flag if the device can render in a window and - // supports the current display mode - if( pDriver->ddDriverCaps.dwCaps2 & DDCAPS2_CANRENDERWINDOWED ) - { - for( D3DEnum_ModeInfo* pMode=pNewDevice->pFirstMode; pMode; - pMode = pMode->pNext ) - { - if( pMode->ddsd.ddpfPixelFormat.dwRGBBitCount == dwDisplayBPP ) - { - pNewDevice->bCompatbileWithDesktop = TRUE; - if( NULL == pDriver->pGUID ) - pNewDevice->bWindowed = TRUE; - } - } - } - - if( pNewDevice->pFirstMode ) - { - // Link it with the other D3D drivers in the DD Driver struct - D3DEnum_DeviceInfo** pDevice = &pDriver->pFirstDevice; - while( *pDevice ) - pDevice = &((*pDevice)->pNext); - (*pDevice) = pNewDevice; - } - else - // Device has no modes, so delete it - delete pNewDevice; - - if( IsEqualGUID( *pGUID, IID_IDirect3DRefDevice ) ) - g_bRefRastEnumerated = TRUE; - - return D3DENUMRET_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: DirectDrawEnumCallbackEx() -// Desc: Callback function called for each DirectDraw driver. Unless we have -// multimon or a type of card which uses a separate 2D card in -// conjunction with the 3D card, this is only done once. -//----------------------------------------------------------------------------- -static BOOL WINAPI DirectDrawEnumCallbackEx( GUID FAR* pGUID, LPSTR strDesc, - LPSTR strName, VOID*, - HMONITOR hMonitor ) -{ - // Use the GUID to create the DirectDraw object, so that information - // can be extracted from it. - LPDIRECTDRAW pDD; - if( FAILED( DirectDrawCreate( pGUID, &pDD, 0L ) ) ) - { - DEBUG_MSG( TEXT("Can't create DDraw during enumeration!") ); - return D3DENUMRET_OK; - } - - // Query the DirectDraw driver for access to Direct3D. - if( FAILED( pDD->QueryInterface( IID_IDirectDraw4, (VOID**)&g_pDD ) ) ) - { - DEBUG_MSG( TEXT("Can't query IDirectDraw4 during enumeration!") ); - pDD->Release(); - return D3DENUMRET_OK; - } - pDD->Release(); - - // Query the DirectDraw driver for access to Direct3D. - LPDIRECT3D3 pD3D; - if( FAILED( g_pDD->QueryInterface( IID_IDirect3D3, (VOID**)&pD3D ) ) ) - { - DEBUG_MSG( TEXT("Can't query IDirect3D3 during enumeration!") ); - g_pDD->Release(); - return D3DENUMRET_OK; - } - - // Copy the DDDriver info into a new DriverInfo struct - D3DEnum_DriverInfo* pNewDriver = new D3DEnum_DriverInfo; - if( NULL == pNewDriver ) - return D3DENUMRET_CANCEL; - - ZeroMemory( pNewDriver, sizeof(D3DEnum_DriverInfo) ); - - // Copy the GUID (if specified) and the driver name - if( NULL != pGUID ) - { - memcpy( &pNewDriver->guid, pGUID, sizeof(GUID) ); - pNewDriver->pGUID = &pNewDriver->guid; - } - strncpy( pNewDriver->strDesc, strDesc, 39 ); - strncpy( pNewDriver->strName, strName, 39 ); - pNewDriver->hMonitor = hMonitor; - - // Get the caps bits for the driver - pNewDriver->ddDriverCaps.dwSize = sizeof(DDCAPS); - pNewDriver->ddHELCaps.dwSize = sizeof(DDCAPS); - g_pDD->GetCaps( &pNewDriver->ddDriverCaps, &pNewDriver->ddHELCaps ); - - // Now, enumerate all the 3D devices - pD3D->EnumDevices( Enum3DDevicesCallback, pNewDriver ); - - if( pNewDriver->pFirstDevice ) - { - // Link the new DDDriver with the global list - D3DEnum_DriverInfo** pDriver = &g_pFirstDriver; - while( *pDriver ) - pDriver = &((*pDriver)->pNext); - (*pDriver) = pNewDriver; - - // Decide if this is a good default driver - if( NULL == pGUID ) - g_pCurrentDriver = pNewDriver; - } - else - // Driver has no devices, so delete it - delete pNewDriver; - - pD3D->Release(); - g_pDD->Release(); - return DDENUMRET_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: DirectDrawEnumCallback() -// Desc: Non-mulitmon version of the ddraw enumeration callback -//----------------------------------------------------------------------------- -static BOOL WINAPI DirectDrawEnumCallback( GUID FAR* pGUID, LPSTR strDesc, - LPSTR strName, VOID* ) -{ - return DirectDrawEnumCallbackEx( pGUID, strDesc, strName, NULL, NULL ); -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_FreeResources() -// Desc: Frees all resources used for driver enumeration -//----------------------------------------------------------------------------- -VOID D3DEnum_FreeResources() -{ - // Loop through each driver, and delete everything - while( g_pFirstDriver ) - { - D3DEnum_DriverInfo* pDriverVictim = g_pFirstDriver; - g_pFirstDriver = g_pFirstDriver->pNext; - - while( pDriverVictim->pFirstDevice ) - { - D3DEnum_DeviceInfo* pDeviceVictim = pDriverVictim->pFirstDevice; - pDriverVictim->pFirstDevice = pDeviceVictim->pNext; - - while( pDeviceVictim->pFirstMode ) - { - D3DEnum_ModeInfo* pModeVictim = pDeviceVictim->pFirstMode; - pDeviceVictim->pFirstMode = pModeVictim->pNext; - delete pModeVictim; - } - delete pDeviceVictim; - } - delete pDriverVictim; - } -} - - - - -//----------------------------------------------------------------------------- -// Name: RefreshListForDesktopCompatibility() -// Desc: Loops through list of devices, and marks a flag for whether the device -// is compatible with the desktop bit depth. -//----------------------------------------------------------------------------- -static VOID RefreshListForDesktopCompatibility() -{ - // Get the currect display mode description - LPDIRECTDRAW pDD; - DDSURFACEDESC ddsd; - if( FAILED( DirectDrawCreate( NULL, &pDD, NULL ) ) ) - return; - ddsd.dwSize = sizeof(DDSURFACEDESC); - pDD->GetDisplayMode( &ddsd ); - pDD->Release(); - - // Get the display mode's depth - DWORD dwDisplayBPP = ddsd.ddpfPixelFormat.dwRGBBitCount; - - // Loop through the devices, and check if any modes works with the current - // display setting - for( D3DEnum_DriverInfo* pDriver = g_pFirstDriver; pDriver; - pDriver = pDriver->pNext ) - { - for( D3DEnum_DeviceInfo* pDevice=pDriver->pFirstDevice; pDevice; - pDevice = pDevice->pNext ) - { - pDevice->bCompatbileWithDesktop = FALSE; - - for( D3DEnum_ModeInfo* pMode=pDevice->pFirstMode; pMode; - pMode = pMode->pNext ) - { - if( pMode->ddsd.ddpfPixelFormat.dwRGBBitCount == dwDisplayBPP ) - pDevice->bCompatbileWithDesktop = TRUE; - } - } - } -} - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_EnumerateDevices() -// Desc: Enumerates all drivers, devices, and modes. The optional app-supplied -// callback is called for each enumerated device, to confirm that the -// device supports the feature set required by the app. -//----------------------------------------------------------------------------- -HRESULT D3DEnum_EnumerateDevices( - HRESULT (*AppConfirmFn)(DDCAPS*, D3DDEVICEDESC*) ) -{ - g_fnAppConfirmFn = AppConfirmFn; - g_bRefRastEnumerated = FALSE; - - // We need to manually get the procedure address for the DDrawEnumEx() - // function. - HMODULE hDDrawDLL = GetModuleHandle("DDRAW.DLL"); - if( NULL == hDDrawDLL ) - { - DEBUG_MSG( TEXT("Can't load DDRAW.DLL!") ); - return D3DENUMERR_NODIRECTDRAW; - } - - // Find the DDraw enumeration function, and call it - LPDIRECTDRAWENUMERATEEX pDDrawEnumFn = (LPDIRECTDRAWENUMERATEEX) - GetProcAddress( hDDrawDLL, "DirectDrawEnumerateExA" ); - - if( pDDrawEnumFn ) - pDDrawEnumFn( DirectDrawEnumCallbackEx, NULL, - DDENUM_ATTACHEDSECONDARYDEVICES | - DDENUM_DETACHEDSECONDARYDEVICES | - DDENUM_NONDISPLAYDEVICES ); - else - DirectDrawEnumerate( DirectDrawEnumCallback, NULL ); - - // Select a driver. Ask for a hardware device that renders in a window - return D3DEnum_SelectDefaultDriver( NULL ); -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_SelectDefaultDriver() -// Desc: Picks a default driver according to the passed in flags. -//----------------------------------------------------------------------------- -HRESULT D3DEnum_SelectDefaultDriver( DWORD dwFlags ) -{ - // Refresh the list of devices to mark which devices (if any) are - // compatible with the current desktop (ie. can render in a window). - RefreshListForDesktopCompatibility(); - - // If a specific driver was requested, perform that search here - if( dwFlags & 0x0000003c ) - { - for( D3DEnum_DriverInfo* pDriver = g_pFirstDriver; pDriver; - pDriver = pDriver->pNext ) - { - for( D3DEnum_DeviceInfo* pDevice = pDriver->pFirstDevice; pDevice; - pDevice = pDevice->pNext ) - { - BOOL bFound = FALSE; - - if( IsEqualGUID( *pDevice->pGUID, IID_IDirect3DRGBDevice ) ) - { - if( dwFlags & D3DENUM_RGBEMULATION ) - bFound = TRUE; - } - else if( IsEqualGUID( *pDevice->pGUID, IID_IDirect3DRefDevice ) ) - { - if( dwFlags & D3DENUM_REFERENCERAST ) - bFound = TRUE; - } - else - { - if( dwFlags & D3DENUM_PRIMARYHAL ) - if( pDriver == g_pFirstDriver ) - bFound = TRUE; - if( dwFlags & D3DENUM_SECONDARYHAL ) - if( pDriver != g_pFirstDriver ) - bFound = TRUE; - } - - if( bFound ) - { - g_pCurrentDriver = pDriver; - g_pCurrentDriver->pCurrentDevice = pDevice; - return S_OK; - } - } - } - return D3DENUMERR_NOTFOUND; - } - - // Do 4 passes, looping through drivers, devices and modes. The 1st pass - // searches for hardware. The 2nd pass looks for software devices. The - // final two passes allow fullscreen modes. - for( WORD pass=0; pass<4; pass++ ) - { - BOOL bSeekHardware = ( pass & 0x1 ) ? FALSE : TRUE; - BOOL bSeekWindowed = ( pass & 0x2 ) ? FALSE : TRUE; - - // Skip the passes we aren't allowing - if( (TRUE==bSeekHardware) && (dwFlags&D3DENUM_SOFTWAREONLY) ) - continue; - if( (TRUE==bSeekWindowed) && (dwFlags&D3DENUM_FULLSCREENONLY) ) - continue; - - for( D3DEnum_DriverInfo* pDriver = g_pFirstDriver; pDriver; - pDriver = pDriver->pNext ) - { - DDCAPS* pCaps = &pDriver->ddDriverCaps; - - if( bSeekWindowed ) - if( 0 == ( pCaps->dwCaps2 & DDCAPS2_CANRENDERWINDOWED ) ) - continue; - - for( D3DEnum_DeviceInfo* pDevice = pDriver->pFirstDevice; pDevice; - pDevice = pDevice->pNext ) - { - if( bSeekHardware != pDevice->bIsHardware ) - continue; - if( bSeekWindowed && FALSE == pDevice->bCompatbileWithDesktop ) - continue; - - pDevice->bWindowed = bSeekWindowed; - g_pCurrentDriver = pDriver; - g_pCurrentDriver->pCurrentDevice = pDevice; - - return S_OK; - } - } - } - - // No compatible devices were found. Return an error code - if( FALSE == g_bDevicesEnumerated ) - return D3DENUMERR_ENUMERATIONFAILED; // Enumeration really did fail - if( FALSE == g_bRefRastEnumerated ) - return D3DENUMERR_SUGGESTREFRAST; // Suggest enabling the RefRast - - return D3DENUMERR_NOCOMPATIBLEDEVICES; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_UserDlgSelectDriver() -// Desc: Displays a dialog box for the user to select a driver/device/mode. -// The return values are akin to the Windows DialogBox() function. -//----------------------------------------------------------------------------- -INT D3DEnum_UserDlgSelectDriver( HWND hwndParent, BOOL bCurrentlyWindowed ) -{ - INT nResult = -1; - - // Check in case drivers weren't properly enumerated beforehand. - if( NULL == g_pCurrentDriver ) - return -1; - - // Refresh the list of devices to mark which devices (if any) are - // compatible with the current desktop (ie. can render in a window). - RefreshListForDesktopCompatibility(); - - // Match the current windowed-vs-fullscreen state - g_pCurrentDriver->pCurrentDevice->bWindowed = bCurrentlyWindowed; - - // Pop up a dialog box for the user's choice of driver/device/mode - HINSTANCE hInstance = (HINSTANCE)GetWindowLong( hwndParent, - GWL_HINSTANCE ); - - // Create dynamic dialog template - DLGTEMPLATE* pDlgSelect = _BuildDriverSelectTemplate(); - if( pDlgSelect ) - { - // Create dialog box from template - nResult = DialogBoxIndirectParam( hInstance, pDlgSelect, hwndParent, - (DLGPROC)_DriverSelectProc, 0L ); - delete pDlgSelect; - } - - return nResult; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_GetSelectedDriver() -// Desc: Returns the currently selected driver, device, and display mode -//----------------------------------------------------------------------------- -HRESULT D3DEnum_GetSelectedDriver( LPGUID* ppDriverGUID, LPGUID* ppDeviceGUID, - LPDDSURFACEDESC2* ppddsd, BOOL* pbWindowed, - BOOL* pbIsHardware ) - -{ - // Check parans - if( (!ppDriverGUID) || (!ppDeviceGUID) ) - return E_INVALIDARG; - - // Abort if things weren't setup correctly - if( NULL == g_pCurrentDriver ) - return D3DENUMERR_ENUMERATIONFAILED; - - // Copy the driver and device GUID ptrs - (*ppDriverGUID) = g_pCurrentDriver->pGUID; - (*ppDeviceGUID) = g_pCurrentDriver->pCurrentDevice->pGUID; - - if( ppddsd ) - (*ppddsd) = &g_pCurrentDriver->pCurrentDevice->pCurrentMode->ddsd; - if( pbWindowed ) - (*pbWindowed) = g_pCurrentDriver->pCurrentDevice->bWindowed; - if( pbIsHardware ) - (*pbIsHardware) = g_pCurrentDriver->pCurrentDevice->bIsHardware; - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_GetSelectedDriver() -// Desc: Returns the currently selected driver, device, and display mode -//----------------------------------------------------------------------------- -HRESULT D3DEnum_GetSelectedDriver( D3DEnum_DriverInfo** ppDriverInfo, - D3DEnum_DeviceInfo** ppDeviceInfo ) - -{ - // Abort if things weren't setup correctly - if( NULL == g_pCurrentDriver ) - return D3DENUMERR_ENUMERATIONFAILED; - - // Copy the driver and device info ptrs - if( ppDriverInfo ) *ppDriverInfo = g_pCurrentDriver; - if( ppDeviceInfo ) *ppDeviceInfo = g_pCurrentDriver->pCurrentDevice; - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_GetFirstDriver() -// Desc: Returns a ptr to the first DriverInfo structure in the list. -//----------------------------------------------------------------------------- -D3DEnum_DriverInfo* D3DEnum_GetFirstDriver() -{ - return g_pFirstDriver; -} - - - - - diff --git a/arch/win32/d3dframe/d3denum.h b/arch/win32/d3dframe/d3denum.h deleted file mode 100644 index 63b71a747..000000000 --- a/arch/win32/d3dframe/d3denum.h +++ /dev/null @@ -1,180 +0,0 @@ -//----------------------------------------------------------------------------- -// File: D3DEnum.h -// -// Desc: Functions which enumerate through the DirectDraw drivers, Direct3D -// devices, and the display modes available to each device. -// -// -// Copyright (C) 1997 Microsoft Corporation. All rights reserved -//----------------------------------------------------------------------------- - - -#ifndef D3DENUM_H -#define D3DENUM_H - -#include -#include - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_ModeInfo -// Desc: Linked-list structure to hold information about a display mode. This -// info is stored as a width, height, bpp, and pixelformat within a -// DDSURFACEDESC2. -//----------------------------------------------------------------------------- -struct D3DEnum_ModeInfo -{ - DDSURFACEDESC2 ddsd; - CHAR strDesc[40]; - D3DEnum_ModeInfo* pNext; -}; - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_DeviceInfo -// Desc: Linked-list structure to hold information about a Direct3D device. The -// primary information recorded here is the D3DDEVICEDESC and a ptr to a -// linked-list of valid display modes. -//----------------------------------------------------------------------------- -struct D3DEnum_DeviceInfo -{ - GUID guid; - GUID* pGUID; - CHAR strName[40]; - D3DDEVICEDESC ddDesc; - BOOL bIsHardware; - BOOL bCompatbileWithDesktop; - BOOL bWindowed; - - D3DEnum_ModeInfo* pCurrentMode; - D3DEnum_ModeInfo* pFirstMode; - D3DEnum_DeviceInfo* pNext; -}; - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_DriverInfo -// Desc: Linked-list structure to hold information about a DirectX driver. The -// info stored is the capability bits for the driver plus a linked-list -// of valid Direct3D devices for the driver. Note: most systems will only -// have one driver. The exception are multi-monitor systems, and systems -// with non-GDI 3D video cards. -//----------------------------------------------------------------------------- -struct D3DEnum_DriverInfo -{ - GUID guid; - GUID* pGUID; - CHAR strDesc[40]; - CHAR strName[40]; - DDCAPS ddDriverCaps; - DDCAPS ddHELCaps; - HANDLE hMonitor; - - D3DEnum_DeviceInfo* pCurrentDevice; - D3DEnum_DeviceInfo* pFirstDevice; - D3DEnum_DriverInfo* pNext; -}; - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_EnumerateDevices() -// Desc: Enumerates all drivers, devices, and modes. The optional app-supplied -// callback is called for each enumerated device, to confirm that the -// device supports the feature set required by the app. -//----------------------------------------------------------------------------- -HRESULT D3DEnum_EnumerateDevices( - HRESULT (*AppConfirmFn)(DDCAPS*, D3DDEVICEDESC*) ); - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_FreeResources() -// Desc: Frees all resources used for driver enumeration -//----------------------------------------------------------------------------- -VOID D3DEnum_FreeResources(); - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_SelectDefaultDriver() -// Desc: Picks a driver based on a set of passed in criteria. -//----------------------------------------------------------------------------- -HRESULT D3DEnum_SelectDefaultDriver( DWORD dwFlags ); - -#define D3DENUM_SOFTWAREONLY 0x00000001 -#define D3DENUM_FULLSCREENONLY 0x00000002 -#define D3DENUM_RGBEMULATION 0x00000004 -#define D3DENUM_REFERENCERAST 0x00000008 -#define D3DENUM_PRIMARYHAL 0x00000010 -#define D3DENUM_SECONDARYHAL 0x00000020 - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_UserDlgSelectDriver() -// Desc: Prompts the user with a dialog box, from which to choose a DD driver, -// D3D device, and compatible display mode. The function will return -// IDOK if a new driver/device/mode was selected, or IDCANCEL if not. -// Any error will result in a -1 for a return code. -//----------------------------------------------------------------------------- -INT D3DEnum_UserDlgSelectDriver( HWND hwndParent, BOOL bCurrentlyWindowed ); - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_GetSelectedDriver() -// Desc: Returns the currently selected driver, device, and display mode. -//----------------------------------------------------------------------------- -HRESULT D3DEnum_GetSelectedDriver( LPGUID* ppDriverGUID, LPGUID* ppDeviceGuid, - LPDDSURFACEDESC2* pddsdDisplayMode = NULL, - BOOL* pbWindowed = NULL, - BOOL* pbIsHardware = NULL ); - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_GetSelectedDriver() -// Desc: Returns the currently selected driver, device, and display mode. -//----------------------------------------------------------------------------- -HRESULT D3DEnum_GetSelectedDriver( D3DEnum_DriverInfo** ppDriverInfo, - D3DEnum_DeviceInfo** ppDeviceInfo ); - - - - -//----------------------------------------------------------------------------- -// Name: D3DEnum_GetFirstDriver() -// Desc: Returns a ptr to the first DriverInfo structure in the tree holding -// the device/driver/mode enumeration information. -//----------------------------------------------------------------------------- -D3DEnum_DriverInfo* D3DEnum_GetFirstDriver(); - - - - -//----------------------------------------------------------------------------- -// Error codes -//----------------------------------------------------------------------------- -#define D3DENUMERR_ENUMERATIONFAILED 0x81000001 // Enumeration failed -#define D3DENUMERR_SUGGESTREFRAST 0x81000002 // Suggest using the RefRast -#define D3DENUMERR_NOCOMPATIBLEDEVICES 0x81000003 // No devices were found that - // meet the app's desired - // capabilities -#define D3DENUMERR_NODIRECTDRAW 0x81000004 // DDraw couldn't initialize -#define D3DENUMERR_NOTFOUND 0x81000005 // Requested device not found - -#endif // D3DENUM_H - diff --git a/arch/win32/d3dframe/d3dframe.cpp b/arch/win32/d3dframe/d3dframe.cpp deleted file mode 100755 index c0cba618c..000000000 --- a/arch/win32/d3dframe/d3dframe.cpp +++ /dev/null @@ -1,754 +0,0 @@ -//----------------------------------------------------------------------------- -// File: D3DFrame.cpp -// -// Desc: Class to manage the Direct3D environment objects such as buffers, -// viewports, and 3D devices. -// -// The class is initialized with the Initialize() function, after which -// the Get????() functions can be used to access the objects needed for -// rendering. If the device or display needs to be changed, the -// ChangeDevice() function can be called. If the display window is moved -// the changes need to be reported with the Move() function. -// -// After rendering a frame, the ShowFrame() function filps or blits the -// backbuffer contents to the primary. If surfaces are lost, they can be -// restored with the RestoreSurfaces() function. Finally, if normal -// Windows output is needed, the FlipToGDISurface() provides a GDI -// surface to draw on. -// -// -// Copyright (c) 1995-1998 by Microsoft, all rights reserved -//----------------------------------------------------------------------------- - -#include -#include "D3DFrame.h" -#include "D3DUtil.h" - - - - -//----------------------------------------------------------------------------- -// Name: EnumZBufferFormatsCallback() -// Desc: Enumeration function to report valid pixel formats for z-buffers. -//----------------------------------------------------------------------------- -static HRESULT WINAPI EnumZBufferFormatsCallback( DDPIXELFORMAT* pddpf, - VOID* pddpfDesired ) -{ - if( NULL==pddpf || NULL==pddpfDesired ) - return D3DENUMRET_CANCEL; - - // If the current pixel format's match the desired ones (DDPF_ZBUFFER and - // possibly DDPF_STENCILBUFFER), lets copy it and return. This function is - // not choosy...it accepts the first valid format that comes along. - if( pddpf->dwFlags == ((DDPIXELFORMAT*)pddpfDesired)->dwFlags ) - { - memcpy( pddpfDesired, pddpf, sizeof(DDPIXELFORMAT) ); - - // We're happy with a 16-bit z-buffer. Otherwise, keep looking. - if( pddpf->dwZBufferBitDepth == 16 ) - return D3DENUMRET_CANCEL; - } - - return D3DENUMRET_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: CD3DFramework() -// Desc: The constructor. Clears static variables -//----------------------------------------------------------------------------- -CD3DFramework::CD3DFramework() -{ - m_hWnd = NULL; - m_bIsFullscreen = FALSE; - m_dwRenderWidth = 0L; - m_dwRenderHeight = 0L; - m_pddsFrontBuffer = NULL; - m_pddsBackBuffer = NULL; - m_pddsRenderTarget = NULL; - m_pddsZBuffer = NULL; - m_pd3dDevice = NULL; - m_pvViewport = NULL; - m_pDD = NULL; - m_pD3D = NULL; - m_dwDeviceMemType = NULL; -} - - - - -//----------------------------------------------------------------------------- -// Name: ~CD3DFramework() -// Desc: The destructor. Deletes all objects -//----------------------------------------------------------------------------- -CD3DFramework::~CD3DFramework() -{ - DestroyObjects(); -} - - - - -//----------------------------------------------------------------------------- -// Name: DestroyObjects() -// Desc: Cleans everything up upon deletion. This code returns an error -// if any of the objects have remaining reference counts. -//----------------------------------------------------------------------------- -HRESULT CD3DFramework::DestroyObjects() -{ - LONG nDD = 0L; // Number of outstanding DDraw references - LONG nD3D = 0L; // Number of outstanding D3DDevice references - - SAFE_RELEASE( m_pvViewport ); - - // Do a safe check for releasing the D3DDEVICE. RefCount must be zero. - if( m_pd3dDevice ) - if( 0 < ( nD3D = m_pd3dDevice->Release() ) ) - DEBUG_MSG( TEXT("Error: D3DDevice object is still referenced!") ); - m_pd3dDevice = NULL; - - // In windowed mode, release the explicity created backbuffer. - if( FALSE == m_bIsFullscreen ) - SAFE_RELEASE( m_pddsBackBuffer ); - SAFE_RELEASE( m_pddsRenderTarget ); //Note: release before frontbuffer - SAFE_RELEASE( m_pddsZBuffer ); - SAFE_RELEASE( m_pddsFrontBuffer ); - SAFE_RELEASE( m_pD3D ); - - // Do a safe check for releasing DDRAW. RefCount must be zero. - if( m_pDD ) - { - m_pDD->SetCooperativeLevel( m_hWnd, DDSCL_NORMAL ); - - if( 0 < ( nDD = m_pDD->Release() ) ) - DEBUG_MSG( TEXT("Error: DDraw object is still referenced!") ); - } - m_pDD = NULL; - - // Return successful, unless there are outstanding DD or D3DDevice refs. - return ( nDD==0 && nD3D==0 ) ? S_OK : D3DFWERR_NONZEROREFCOUNT; -} - - - - -//----------------------------------------------------------------------------- -// Name: Initialize() -// Desc: Creates the internal objects for the framework -//----------------------------------------------------------------------------- -HRESULT CD3DFramework::Initialize( HWND hWnd, GUID* pDriverGUID, - GUID* pDeviceGUID, DDSURFACEDESC2* pMode, - DWORD dwFlags ) -{ - HRESULT hr; - - // Check params. A NULL mode is valid for windowed modes only. A NULL - // device GUID is legal for apps that only want 2D support. - if( NULL==hWnd || ( NULL==pMode && (dwFlags&D3DFW_FULLSCREEN) ) ) - return E_INVALIDARG; - - // Setup state for windowed/fullscreen mode - m_hWnd = hWnd; - m_bIsFullscreen = ( dwFlags & D3DFW_FULLSCREEN ) ? TRUE : FALSE; - - // Create the D3D rendering environment (surfaces, device, viewport, etc.) - if( FAILED( hr = CreateEnvironment( pDriverGUID, pDeviceGUID, pMode, - dwFlags ) ) ) - { - DestroyObjects(); - if( E_FAIL == hr ) - hr = D3DFWERR_INITIALIZATIONFAILED; - } - return hr; -} - - - - -//----------------------------------------------------------------------------- -// Name: CreateEnvironment() -// Desc: Creates the internal objects for the framework -//----------------------------------------------------------------------------- -HRESULT CD3DFramework::CreateEnvironment( GUID* pDriverGUID, GUID* pDeviceGUID, - DDSURFACEDESC2* pMode, DWORD dwFlags ) -{ - HRESULT hr; - - // Create the DDraw object - if( FAILED( hr = CreateDirectDraw( pDriverGUID, dwFlags ) ) ) - return hr; - - // Create the Direct3D object - if( pDeviceGUID ) - if( FAILED( hr = CreateDirect3D( pDeviceGUID, dwFlags ) ) ) - return hr; - - // Create the front and back buffers, and attach a clipper - if( FAILED( hr = CreateBuffers( pMode, dwFlags ) ) ) - return hr; - - // If there is no device GUID, then the app only wants 2D, so we're done - if( NULL == pDeviceGUID ) - return S_OK; - - // Create and attach the zbuffer - if( dwFlags & D3DFW_ZBUFFER ) - if( FAILED( hr = CreateZBuffer() ) ) - return hr; - - // Query the render buffer for the 3ddevice - if( FAILED( hr = Create3DDevice( pDeviceGUID ) ) ) - return hr; - - // Create and set the viewport - if( FAILED( hr = CreateViewport() ) ) - return hr; - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: CreateDirectDraw() -// Desc: Create the DirectDraw interface -//----------------------------------------------------------------------------- -HRESULT CD3DFramework::CreateDirectDraw( GUID* pDriverGUID, DWORD dwFlags ) -{ - // Create the DirectDraw interface, and query for the DD4 interface - LPDIRECTDRAW pDD; - if( FAILED( DirectDrawCreate( pDriverGUID, &pDD, NULL ) ) ) - { - DEBUG_MSG( TEXT("Could not create DirectDraw") ); - return D3DFWERR_NODIRECTDRAW; - } - - if( FAILED( pDD->QueryInterface( IID_IDirectDraw4, (VOID**)&m_pDD ) ) ) - { - pDD->Release(); - DEBUG_MSG( TEXT("Couldn't query for DirectDraw4") ); - return D3DFWERR_NODIRECTDRAW; - } - pDD->Release(); - - // Set the Windows cooperative level - DWORD dwCoopFlags = DDSCL_NORMAL; - if( m_bIsFullscreen ) - dwCoopFlags = DDSCL_ALLOWREBOOT|DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN; - - // By defualt, set the flag to allow D3D to optimize floating point calcs - if( 0L == ( dwFlags & D3DFW_NO_FPUSETUP ) ) - dwCoopFlags |= DDSCL_FPUSETUP; - - if( FAILED( m_pDD->SetCooperativeLevel( m_hWnd, dwCoopFlags ) ) ) - { - DEBUG_MSG( TEXT("Couldn't set coop level") ); - return D3DFWERR_COULDNTSETCOOPLEVEL; - } - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: CreateDirect3D() -// Desc: Create the Direct3D interface -//----------------------------------------------------------------------------- -HRESULT CD3DFramework::CreateDirect3D( GUID* pDeviceGUID, DWORD dwFlags ) -{ - // Query DirectDraw for access to Direct3D - if( FAILED( m_pDD->QueryInterface( IID_IDirect3D3, (VOID**)&m_pD3D ) ) ) - { - DEBUG_MSG( TEXT("Couldn't query the Direct3D interface") ); - return D3DFWERR_NODIRECT3D; - } - - // Use the FindDevice() method to test if the requested device - // exists, and if so, take note of what memory type it takes. - D3DFINDDEVICERESULT devResult; - D3DFINDDEVICESEARCH devSearch; - ZeroMemory( &devResult, sizeof(D3DFINDDEVICERESULT) ); - ZeroMemory( &devSearch, sizeof(D3DFINDDEVICESEARCH) ); - devResult.dwSize = sizeof(D3DFINDDEVICERESULT); - devSearch.dwSize = sizeof(D3DFINDDEVICESEARCH); - devSearch.dwFlags = D3DFDS_GUID; - CopyMemory( &devSearch.guid, pDeviceGUID, sizeof(GUID) ); - - if( FAILED( m_pD3D->FindDevice( &devSearch, &devResult ) ) ) - { - DEBUG_MSG( TEXT("Couldn't find the specified device") ); - return D3DFWERR_NODIRECT3D; - } - - // Whether device is SW or HW, get the devicedesc, and the defualt memtype - if( 0L == devResult.ddHwDesc.dwFlags ) - { - m_dwDeviceMemType = DDSCAPS_SYSTEMMEMORY; - memcpy( &m_ddDeviceDesc, &devResult.ddSwDesc, sizeof(D3DDEVICEDESC) ); - } - else - { - m_dwDeviceMemType = DDSCAPS_VIDEOMEMORY; - memcpy( &m_ddDeviceDesc, &devResult.ddHwDesc, sizeof(D3DDEVICEDESC) ); - } - - // Using the device GUID, let's enumerate a format for our z-buffer, in - // case we later decide to create one. - ZeroMemory( &m_ddpfZBuffer, sizeof(DDPIXELFORMAT) ); - - if( dwFlags & D3DFW_STENCILBUFFER ) - m_ddpfZBuffer.dwFlags = DDPF_ZBUFFER | DDPF_STENCILBUFFER; - else - m_ddpfZBuffer.dwFlags = DDPF_ZBUFFER; - - // Get an appropiate pixel format from enumeration of the formats. - m_pD3D->EnumZBufferFormats( *pDeviceGUID, EnumZBufferFormatsCallback, - (VOID*)&m_ddpfZBuffer ); - - if( sizeof(DDPIXELFORMAT) != m_ddpfZBuffer.dwSize ) - { - DEBUG_MSG( TEXT("Device doesn't support requested zbuffer format") ); - return D3DFWERR_NOZBUFFER; - } - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: CreateBuffers() -// Desc: Creates the primary and (optional) backbuffer for rendering. -// Windowed mode and fullscreen mode are handled differently. -//----------------------------------------------------------------------------- -HRESULT CD3DFramework::CreateBuffers( DDSURFACEDESC2* pddsd, DWORD dwFlags ) -{ - HRESULT hr; - - if( dwFlags & D3DFW_FULLSCREEN ) - { - // Get the dimensions of the viewport and screen bounds - // Store the rectangle which contains the renderer - SetRect( &m_rcViewportRect, 0, 0, pddsd->dwWidth, pddsd->dwHeight ); - memcpy( &m_rcScreenRect, &m_rcViewportRect, sizeof(RECT) ); - m_dwRenderWidth = m_rcViewportRect.right; - m_dwRenderHeight = m_rcViewportRect.bottom; - - // Set the display mode to the requested dimensions. Check for - // 320x200x8 modes, and set flag to avoid using ModeX - DWORD dwModeFlags = 0; - - if( (320==m_dwRenderWidth) && (200==m_dwRenderHeight) && - (8==pddsd->ddpfPixelFormat.dwRGBBitCount) ) - dwModeFlags |= DDSDM_STANDARDVGAMODE; - - if( FAILED( m_pDD->SetDisplayMode( m_dwRenderWidth, m_dwRenderHeight, - pddsd->ddpfPixelFormat.dwRGBBitCount, - pddsd->dwRefreshRate, dwModeFlags ) ) ) - { - DEBUG_MSG( TEXT("Can't set display mode") ); - return D3DFWERR_BADDISPLAYMODE; - } - - // Create the primary surface - DDSURFACEDESC2 ddsd; - D3DUtil_InitSurfaceDesc( ddsd, DDSD_CAPS ); - ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_3DDEVICE; - - // With no backbuffer, the primary becomes the render target - if( dwFlags & D3DFW_BACKBUFFER ) - { - ddsd.dwFlags |= DDSD_BACKBUFFERCOUNT; - ddsd.ddsCaps.dwCaps |= DDSCAPS_FLIP | DDSCAPS_COMPLEX; - ddsd.dwBackBufferCount = 1; - } - - if( FAILED( hr = m_pDD->CreateSurface( &ddsd, &m_pddsFrontBuffer, NULL ) ) ) - { - DEBUG_MSG( TEXT("Error: Can't create primary surface") ); - if( hr != DDERR_OUTOFVIDEOMEMORY ) - return D3DFWERR_NOPRIMARY; - DEBUG_MSG( TEXT("Error: Out of video memory") ); - return DDERR_OUTOFVIDEOMEMORY; - } - - // Get the backbuffer. For fullscreen mode, the backbuffer was created - // along with the primary, but windowed mode still needs to create one. - if( dwFlags & D3DFW_BACKBUFFER ) - { - // Get a ptr to the back buffer, which will be our render target - DDSCAPS2 ddscaps; - ddscaps.dwCaps = DDSCAPS_BACKBUFFER; - if( FAILED( hr = m_pddsFrontBuffer->GetAttachedSurface( &ddscaps, - &m_pddsBackBuffer ) ) ) - { - DEBUG_MSG( TEXT("Error: Can't get/create the backbuffer") ); - if( hr != DDERR_OUTOFVIDEOMEMORY ) - return D3DFWERR_NOBACKBUFFER; - DEBUG_MSG( TEXT("Error: Out of video memory") ); - return DDERR_OUTOFVIDEOMEMORY; - } - } - } - else // Set up buffers for windowed rendering - { - // Get the dimensions of the viewport and screen bounds - GetClientRect( m_hWnd, &m_rcViewportRect ); - GetClientRect( m_hWnd, &m_rcScreenRect ); - ClientToScreen( m_hWnd, (POINT*)&m_rcScreenRect.left ); - ClientToScreen( m_hWnd, (POINT*)&m_rcScreenRect.right ); - m_dwRenderWidth = m_rcViewportRect.right; - m_dwRenderHeight = m_rcViewportRect.bottom; - - // Create the primary surface - DDSURFACEDESC2 ddsd; - D3DUtil_InitSurfaceDesc( ddsd, DDSD_CAPS ); - ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; - - // With no backbuffer, the primary becomes the render target - if( 0L == ( dwFlags & D3DFW_BACKBUFFER ) ) - ddsd.ddsCaps.dwCaps |= DDSCAPS_3DDEVICE; - - if( FAILED( hr = m_pDD->CreateSurface( &ddsd, &m_pddsFrontBuffer, NULL ) ) ) - { - DEBUG_MSG( TEXT("Error: Can't create primary surface") ); - if( hr != DDERR_OUTOFVIDEOMEMORY ) - return D3DFWERR_NOPRIMARY; - DEBUG_MSG( TEXT("Error: Out of video memory") ); - return DDERR_OUTOFVIDEOMEMORY; - } - - // If in windowed-mode, create a clipper object - LPDIRECTDRAWCLIPPER pcClipper; - if( FAILED( hr = m_pDD->CreateClipper( 0, &pcClipper, NULL ) ) ) - { - DEBUG_MSG( TEXT("Error: Couldn't create clipper") ); - return D3DFWERR_NOCLIPPER; - } - - // Associate the clipper with the window - pcClipper->SetHWnd( 0, m_hWnd ); - m_pddsFrontBuffer->SetClipper( pcClipper ); - SAFE_RELEASE( pcClipper ); - - // Get the backbuffer. For fullscreen mode, the backbuffer was created - // along with the primary, but windowed mode still needs to create one. - if( dwFlags & D3DFW_BACKBUFFER ) - { - // Create the back buffer (the render target) - ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS; - ddsd.dwWidth = m_dwRenderWidth; - ddsd.dwHeight = m_dwRenderHeight; - ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE; - - if( FAILED( hr = m_pDD->CreateSurface( &ddsd, &m_pddsBackBuffer, NULL ) ) ) - { - DEBUG_MSG( TEXT("Error: Couldn't create the backbuffer") ); - if( hr != DDERR_OUTOFVIDEOMEMORY ) - return D3DFWERR_NOBACKBUFFER; - DEBUG_MSG( TEXT("Error: Out of video memory") ); - return DDERR_OUTOFVIDEOMEMORY; - } - } - else // For rendering without a backbuffer - { - ClientToScreen( m_hWnd, (POINT*)&m_rcViewportRect.left ); - ClientToScreen( m_hWnd, (POINT*)&m_rcViewportRect.right ); - } - } - - // Set up backbuffer ptr and ref counts - if( dwFlags & D3DFW_BACKBUFFER ) - m_pddsRenderTarget = m_pddsBackBuffer; - else - m_pddsRenderTarget = m_pddsFrontBuffer; - m_pddsRenderTarget->AddRef(); - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: CreateZBuffer() -// Desc: Internal function called by Create() to make and attach a zbuffer -// to the renderer -//----------------------------------------------------------------------------- -HRESULT CD3DFramework::CreateZBuffer() -{ - HRESULT hr; - - // Check if the device supports z-bufferless hidden surface removal. If so, - // we don't really need a z-buffer - DWORD dwRasterCaps = m_ddDeviceDesc.dpcTriCaps.dwRasterCaps; - if( dwRasterCaps & D3DPRASTERCAPS_ZBUFFERLESSHSR ) - return S_OK; - - // Get z-buffer dimensions from the render target - // Setup the surface desc for the z-buffer. - DDSURFACEDESC2 ddsd; - D3DUtil_InitSurfaceDesc( ddsd, DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS | - DDSD_PIXELFORMAT ); - ddsd.ddsCaps.dwCaps = DDSCAPS_ZBUFFER | m_dwDeviceMemType; - ddsd.dwWidth = m_dwRenderWidth; - ddsd.dwHeight = m_dwRenderHeight; - memcpy( &ddsd.ddpfPixelFormat, &m_ddpfZBuffer, sizeof(DDPIXELFORMAT) ); - - // Create and attach a z-buffer - if( FAILED( hr = m_pDD->CreateSurface( &ddsd, &m_pddsZBuffer, NULL ) ) ) - { - DEBUG_MSG( TEXT("Error: Couldn't create a ZBuffer surface") ); - if( hr != DDERR_OUTOFVIDEOMEMORY ) - return D3DFWERR_NOZBUFFER; - DEBUG_MSG( TEXT("Error: Out of video memory") ); - return DDERR_OUTOFVIDEOMEMORY; - } - - if( FAILED( m_pddsRenderTarget->AddAttachedSurface( m_pddsZBuffer ) ) ) - { - DEBUG_MSG( TEXT("Error: Couldn't attach zbuffer to render surface") ); - return D3DFWERR_NOZBUFFER; - } - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: Create3DDevice() -// Desc: Creates the 3D device for the render target -//----------------------------------------------------------------------------- -HRESULT CD3DFramework::Create3DDevice( GUID* pDeviceGUID ) -{ - // Check that we are NOT in a palettized display. That case will fail, - // since the framework doesn't use palettes. - DDSURFACEDESC2 ddsd; - ddsd.dwSize = sizeof(DDSURFACEDESC2); - m_pDD->GetDisplayMode( &ddsd ); - if( ddsd.ddpfPixelFormat.dwRGBBitCount <= 8 ) - return D3DFWERR_INVALIDMODE; - - // Create the device - if( FAILED( m_pD3D->CreateDevice( *pDeviceGUID, m_pddsRenderTarget, - &m_pd3dDevice, NULL ) ) ) - { - DEBUG_MSG( TEXT("Couldn't create the D3DDevice") ); - return D3DFWERR_NO3DDEVICE; - } - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: CreateViewport() -// Desc: Create the D3D viewport used by the renderer. -//----------------------------------------------------------------------------- -HRESULT CD3DFramework::CreateViewport() -{ - // Set up the viewport data parameters - HRESULT hr; - D3DVIEWPORT2 vdData; - D3DUtil_InitViewport( vdData, m_dwRenderWidth, m_dwRenderHeight ); - - // Create the viewport - if( FAILED( m_pD3D->CreateViewport( &m_pvViewport, NULL ) ) ) - { - DEBUG_MSG( TEXT("Error: Couldn't create a viewport") ); - return D3DFWERR_NOVIEWPORT; - } - - // Associate the viewport with the D3DDEVICE object - if( FAILED( hr = m_pd3dDevice->AddViewport( m_pvViewport ) ) ) - { - DEBUG_MSG( TEXT("Error: Couldn't add the viewport") ); - return D3DFWERR_NOVIEWPORT; - } - - // Set the parameters to the new viewport - if( FAILED( m_pvViewport->SetViewport2( &vdData ) ) ) - { - DEBUG_MSG( TEXT("Error: Couldn't set the viewport data") ); - return D3DFWERR_NOVIEWPORT; - } - - // Finally, set the current viewport for the current device - if( FAILED( m_pd3dDevice->SetCurrentViewport( m_pvViewport ) ) ) - { - DEBUG_MSG( TEXT("Error: Couldn't set current viewport to device") ); - return D3DFWERR_NOVIEWPORT; - } - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: ShowFrame() -// Desc: Show the frame on the primary surface, via a blt or a flip. -//----------------------------------------------------------------------------- -HRESULT CD3DFramework::ShowFrame() -{ - if( NULL == m_pddsFrontBuffer ) - return D3DFWERR_NOTINITIALIZED; - - // Check for a backbuffer. If no backbuffer exists, then we have nothing to - // do. However, to be consistent let's check for lost surfaces - if( NULL == m_pddsBackBuffer ) - return m_pddsFrontBuffer->IsLost(); - - // If we are in fullscreen mode perform a flip. - if( m_bIsFullscreen ) - return m_pddsFrontBuffer->Flip( NULL, DDFLIP_WAIT ); - - // Else, we are in windowed mode, so perform a blit. - return m_pddsFrontBuffer->Blt( &m_rcScreenRect, m_pddsBackBuffer, - &m_rcViewportRect, DDBLT_WAIT, NULL ); -} - - - - -//----------------------------------------------------------------------------- -// Name: FlipToGDISurface() -// Desc: Puts the GDI surface in front of the primary, so that dialog -// boxes and other windows drawing funcs may happen. -//----------------------------------------------------------------------------- -HRESULT CD3DFramework::FlipToGDISurface( BOOL bDrawFrame ) -{ - if( m_pDD && m_bIsFullscreen ) - { - m_pDD->FlipToGDISurface(); - - if( bDrawFrame ) - { - DrawMenuBar( m_hWnd ); - RedrawWindow( m_hWnd, NULL, NULL, RDW_FRAME ); - } - } - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: RestoreSurfaces() -// Desc: Checks for lost surfaces and restores them if lost. Note: Don't -// restore render surface, since it's just a duplicate ptr. -//----------------------------------------------------------------------------- -HRESULT CD3DFramework::RestoreSurfaces() -{ - // Check/restore the primary surface - if( m_pddsFrontBuffer ) - if( m_pddsFrontBuffer->IsLost() ) - m_pddsFrontBuffer->Restore(); - - // Check/restore the back buffer - if( m_pddsBackBuffer ) - if( m_pddsBackBuffer->IsLost() ) - m_pddsBackBuffer->Restore(); - - // Check/restore the z-buffer surface - if( m_pddsZBuffer ) - if( m_pddsZBuffer->IsLost() ) - m_pddsZBuffer->Restore(); - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: Move() -// Desc: Moves the screen rect for windowed renderers -//----------------------------------------------------------------------------- -VOID CD3DFramework::Move( INT x, INT y ) -{ - if( FALSE == m_bIsFullscreen ) - { - SetRect( &m_rcScreenRect, x, y, - x + m_dwRenderWidth, y + m_dwRenderHeight ); - - // If we have no backbuffer, then update viewport rect as well - if( NULL == m_pddsBackBuffer ) - CopyMemory( &m_rcViewportRect, &m_rcScreenRect, sizeof(RECT) ); - } -} - - - - -//----------------------------------------------------------------------------- -// Name: ChangeRenderTarget() -// Desc: Wrapper for the IDirect3DDevice::SetRenderTarget() function, which -// adds functionality to handle an attached z-buffer. Note that this -// function does NOT alter the current viewport -//----------------------------------------------------------------------------- -HRESULT CD3DFramework::ChangeRenderTarget( LPDIRECTDRAWSURFACE4 pddsNewTarget ) -{ - if( NULL == pddsNewTarget ) - return E_INVALIDARG; - - // Get the new render target dimensions - DDSURFACEDESC2 ddsd; - D3DUtil_InitSurfaceDesc( ddsd ); - pddsNewTarget->GetSurfaceDesc( &ddsd ); - m_dwRenderWidth = ddsd.dwWidth; - m_dwRenderHeight = ddsd.dwHeight; - - // If a z-buffer is attached, delete and recreate it - if( NULL != m_pddsZBuffer ) - { - // Remove the old z-buffer - m_pddsRenderTarget->DeleteAttachedSurface( 0, m_pddsZBuffer ); - SAFE_RELEASE( m_pddsZBuffer ); - - // Keep track of reference counts - SAFE_RELEASE( m_pddsRenderTarget ); - m_pddsRenderTarget = pddsNewTarget; - m_pddsRenderTarget->AddRef(); - - // Create the new z-buffer - if( FAILED( CreateZBuffer() ) ) - { - DEBUG_MSG( TEXT("ChangeRenderTarget() - zbuffer create failed") ); - return D3DFWERR_NOZBUFFER; - } - } - else - { - // With no z-buffer, we just do accounting on the reference counts - SAFE_RELEASE( m_pddsRenderTarget ); - m_pddsRenderTarget = pddsNewTarget; - m_pddsRenderTarget->AddRef(); - } - - // Finally, perform the set render target call - if( FAILED( m_pd3dDevice->SetRenderTarget( m_pddsRenderTarget, 0 ) ) ) - { - return D3DFWERR_NORENDERTARGET; - } - - return S_OK; -} - - - - - diff --git a/arch/win32/d3dframe/d3dframe.h b/arch/win32/d3dframe/d3dframe.h deleted file mode 100644 index ec41be5c9..000000000 --- a/arch/win32/d3dframe/d3dframe.h +++ /dev/null @@ -1,136 +0,0 @@ -//----------------------------------------------------------------------------- -// File: D3DFrame.h -// -// Desc: Class to manage the Direct3D environment objects such as buffers, -// viewports, and 3D devices. -// -// The class is initialized with the Initialize() function, after which -// the Get????() functions can be used to access the objects needed for -// rendering. If the device or display needs to be changed, the -// ChangeDevice() function can be called. If the display window is moved -// the changes need to be reported with the Move() function. -// -// After rendering a frame, the ShowFrame() function filps or blits the -// backbuffer contents to the primary. If surfaces are lost, they can be -// restored with the RestoreSurfaces() function. Finally, if normal -// Windows output is needed, the FlipToGDISurface() provides a GDI -// surface to draw on. -// -// -// Copyright (C) 1997 Microsoft Corporation. All rights reserved -//----------------------------------------------------------------------------- - - -#ifndef D3DFRAME_H -#define D3DFRAME_H - -#include -#include - - - - -//----------------------------------------------------------------------------- -// Name: CD3DFramework -// Desc: The Direct3D sample framework class. Maintains the D3D surfaces, -// device, and viewport used for 3D rendering. -//----------------------------------------------------------------------------- -class CD3DFramework -{ - // Internal variables for the framework class - HWND m_hWnd; // The window object - BOOL m_bIsFullscreen; // Fullscreen vs. windowed - RECT m_rcViewportRect; // Offscreen rect for VPort - LPDIRECTDRAWSURFACE4 m_pddsFrontBuffer; // The primary surface - LPDIRECTDRAWSURFACE4 m_pddsBackBuffer; // The backbuffer surface - LPDIRECTDRAWSURFACE4 m_pddsRenderTarget; // The render target surface - LPDIRECTDRAWSURFACE4 m_pddsZBuffer; // The zbuffer surface - LPDIRECT3DDEVICE3 m_pd3dDevice; // The D3D device - LPDIRECT3DVIEWPORT3 m_pvViewport; // The D3D viewport - LPDIRECTDRAW4 m_pDD; // The DirectDraw object - LPDIRECT3D3 m_pD3D; // The Direct3D object - D3DDEVICEDESC m_ddDeviceDesc; - DWORD m_dwDeviceMemType; - DDPIXELFORMAT m_ddpfZBuffer; // Enumerated zbuffer format - - // Internal functions for the framework class - HRESULT CreateViewport(); - HRESULT Create3DDevice( GUID* ); - HRESULT CreateZBuffer(); - HRESULT CreateBuffers( DDSURFACEDESC2*, DWORD ); - HRESULT CreateDirectDraw( GUID*, DWORD ); - HRESULT CreateDirect3D( GUID*, DWORD ); - HRESULT CreateEnvironment( GUID*, GUID*, DDSURFACEDESC2*, DWORD ); - -public: - DWORD m_dwRenderWidth; // Dimensions of the render target - DWORD m_dwRenderHeight; - RECT m_rcScreenRect; // Screen rect for window - - // Access functions for DirectX objects - LPDIRECTDRAW4 GetDirectDraw() { return m_pDD; } - LPDIRECT3D3 GetDirect3D() { return m_pD3D; } - LPDIRECT3DDEVICE3 GetD3DDevice() { return m_pd3dDevice; } - LPDIRECT3DVIEWPORT3 GetViewport() { return m_pvViewport; } - LPDIRECTDRAWSURFACE4 GetFrontBuffer() { return m_pddsFrontBuffer; } - LPDIRECTDRAWSURFACE4 GetBackBuffer() { return m_pddsBackBuffer; } - LPDIRECTDRAWSURFACE4 GetRenderSurface() { return m_pddsRenderTarget; } - - // Functions to aid rendering - HRESULT RestoreSurfaces(); - HRESULT ShowFrame(); - HRESULT FlipToGDISurface( BOOL bDrawFrame ); - - // Functions for managing screen and viewport bounds - BOOL IsFullscreen() { return m_bIsFullscreen; } - RECT* GetViewportRect() { return &m_rcViewportRect; } - VOID Move( INT x, INT y ); - - // Functions to support sprite-based rendering - HRESULT ChangeRenderTarget( LPDIRECTDRAWSURFACE4 pddsNewTarget ); - - // Creates the Framework - HRESULT Initialize( HWND hWnd, GUID* pDriverGUID, GUID* pDeviceGUID, - DDSURFACEDESC2* pddsd, DWORD dwFlags ); - HRESULT DestroyObjects(); - - CD3DFramework(); - ~CD3DFramework(); -}; - - - - -//----------------------------------------------------------------------------- -// Flags used for the Initialize() method of a CD3DFramework object -//----------------------------------------------------------------------------- -#define D3DFW_FULLSCREEN 0x00000001 // Use fullscreen mode -#define D3DFW_BACKBUFFER 0x00000002 // Create and use a backbuffer -#define D3DFW_ZBUFFER 0x00000004 // Create and use a zbuffer -#define D3DFW_STENCILBUFFER 0x00000008 // Use a z-buffer w/stenciling -#define D3DFW_NO_FPUSETUP 0x00000010 // Don't use default DDSCL_FPUSETUP flag - - - -//----------------------------------------------------------------------------- -// Errors that the Initialize() and ChangeDriver() calls may return -//----------------------------------------------------------------------------- -#define D3DFWERR_INITIALIZATIONFAILED 0x82000000 -#define D3DFWERR_NODIRECTDRAW 0x82000001 -#define D3DFWERR_COULDNTSETCOOPLEVEL 0x82000002 -#define D3DFWERR_NODIRECT3D 0x82000003 -#define D3DFWERR_NO3DDEVICE 0x82000004 -#define D3DFWERR_NOZBUFFER 0x82000005 -#define D3DFWERR_NOVIEWPORT 0x82000006 -#define D3DFWERR_NOPRIMARY 0x82000007 -#define D3DFWERR_NOCLIPPER 0x82000008 -#define D3DFWERR_BADDISPLAYMODE 0x82000009 -#define D3DFWERR_NOBACKBUFFER 0x8200000a -#define D3DFWERR_NONZEROREFCOUNT 0x8200000b -#define D3DFWERR_NORENDERTARGET 0x8200000c -#define D3DFWERR_INVALIDMODE 0x8200000d -#define D3DFWERR_NOTINITIALIZED 0x8200000e - - -#endif // D3DFRAME_H - diff --git a/arch/win32/d3dframe/d3dmath.cpp b/arch/win32/d3dframe/d3dmath.cpp deleted file mode 100755 index 4d2d50ebf..000000000 --- a/arch/win32/d3dframe/d3dmath.cpp +++ /dev/null @@ -1,341 +0,0 @@ -//----------------------------------------------------------------------------- -// File: D3DMath.cpp -// -// Desc: Shortcut macros and functions for using DX objects -// -// -// Copyright (c) 1997-1998 Microsoft Corporation. All rights reserved -//----------------------------------------------------------------------------- - -#define D3D_OVERLOADS -#include -#include -#include "D3DMath.h" - - - - -//----------------------------------------------------------------------------- -// Name: D3DMath_MatrixMultiply() -// Desc: Does the matrix operation: [Q] = [A] * [B]. -//----------------------------------------------------------------------------- -VOID D3DMath_MatrixMultiply( D3DMATRIX& q, D3DMATRIX& a, D3DMATRIX& b ) -{ - FLOAT* pA = (FLOAT*)&a; - FLOAT* pB = (FLOAT*)&b; - FLOAT pM[16]; - - ZeroMemory( pM, sizeof(D3DMATRIX) ); - - for( WORD i=0; i<4; i++ ) - for( WORD j=0; j<4; j++ ) - for( WORD k=0; k<4; k++ ) - pM[4*i+j] += pA[4*k+j] * pB[4*i+k]; - - memcpy( &q, pM, sizeof(D3DMATRIX) ); -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DMath_MatrixInvert() -// Desc: Does the matrix operation: [Q] = inv[A]. Note: this function only -// works for matrices with [0 0 0 1] for the 4th column. -//----------------------------------------------------------------------------- -HRESULT D3DMath_MatrixInvert( D3DMATRIX& q, D3DMATRIX& a ) -{ - if( fabs(a._44 - 1.0f) > .001f) - return E_INVALIDARG; - if( fabs(a._14) > .001f || fabs(a._24) > .001f || fabs(a._34) > .001f ) - return E_INVALIDARG; - - FLOAT fDetInv = 1.0f / ( a._11 * ( a._22 * a._33 - a._23 * a._32 ) - - a._12 * ( a._21 * a._33 - a._23 * a._31 ) + - a._13 * ( a._21 * a._32 - a._22 * a._31 ) ); - - q._11 = fDetInv * ( a._22 * a._33 - a._23 * a._32 ); - q._12 = -fDetInv * ( a._12 * a._33 - a._13 * a._32 ); - q._13 = fDetInv * ( a._12 * a._23 - a._13 * a._22 ); - q._14 = 0.0f; - - q._21 = -fDetInv * ( a._21 * a._33 - a._23 * a._31 ); - q._22 = fDetInv * ( a._11 * a._33 - a._13 * a._31 ); - q._23 = -fDetInv * ( a._11 * a._23 - a._13 * a._21 ); - q._24 = 0.0f; - - q._31 = fDetInv * ( a._21 * a._32 - a._22 * a._31 ); - q._32 = -fDetInv * ( a._11 * a._32 - a._12 * a._31 ); - q._33 = fDetInv * ( a._11 * a._22 - a._12 * a._21 ); - q._34 = 0.0f; - - q._41 = -( a._41 * q._11 + a._42 * q._21 + a._43 * q._31 ); - q._42 = -( a._41 * q._12 + a._42 * q._22 + a._43 * q._32 ); - q._43 = -( a._41 * q._13 + a._42 * q._23 + a._43 * q._33 ); - q._44 = 1.0f; - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DMath_VectorMatrixMultiply() -// Desc: Multiplies a vector by a matrix -//----------------------------------------------------------------------------- -HRESULT D3DMath_VectorMatrixMultiply( D3DVECTOR& vDest, D3DVECTOR& vSrc, - D3DMATRIX& mat) -{ - FLOAT x = vSrc.x*mat._11 + vSrc.y*mat._21 + vSrc.z* mat._31 + mat._41; - FLOAT y = vSrc.x*mat._12 + vSrc.y*mat._22 + vSrc.z* mat._32 + mat._42; - FLOAT z = vSrc.x*mat._13 + vSrc.y*mat._23 + vSrc.z* mat._33 + mat._43; - FLOAT w = vSrc.x*mat._14 + vSrc.y*mat._24 + vSrc.z* mat._34 + mat._44; - - if( fabs( w ) < g_EPSILON ) - return E_INVALIDARG; - - vDest.x = x/w; - vDest.y = y/w; - vDest.z = z/w; - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DMath_VertexMatrixMultiply() -// Desc: Multiplies a vertex by a matrix -//----------------------------------------------------------------------------- -HRESULT D3DMath_VertexMatrixMultiply( D3DVERTEX& vDest, D3DVERTEX& vSrc, - D3DMATRIX& mat ) -{ - HRESULT hr; - D3DVECTOR* pSrcVec = (D3DVECTOR*)&vSrc.x; - D3DVECTOR* pDestVec = (D3DVECTOR*)&vDest.x; - - if( SUCCEEDED( hr = D3DMath_VectorMatrixMultiply( *pDestVec, *pSrcVec, - mat ) ) ) - { - pSrcVec = (D3DVECTOR*)&vSrc.nx; - pDestVec = (D3DVECTOR*)&vDest.nx; - hr = D3DMath_VectorMatrixMultiply( *pDestVec, *pSrcVec, mat ); - } - return hr; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DMath_QuaternionFromRotation() -// Desc: Converts a normalized axis and angle to a unit quaternion. -//----------------------------------------------------------------------------- -VOID D3DMath_QuaternionFromRotation( FLOAT& x, FLOAT& y, FLOAT& z, FLOAT& w, - D3DVECTOR& v, FLOAT fTheta ) -{ - x = (FLOAT)sin(fTheta/2) * v.x; - y = (FLOAT)sin(fTheta/2) * v.y; - z = (FLOAT)sin(fTheta/2) * v.z; - w = (FLOAT)cos(fTheta/2); -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DMath_RotationFromQuaternion() -// Desc: Converts a normalized axis and angle to a unit quaternion. -//----------------------------------------------------------------------------- -VOID D3DMath_RotationFromQuaternion( D3DVECTOR& v, FLOAT& fTheta, - FLOAT x, FLOAT y, FLOAT z, FLOAT w ) - -{ - fTheta = (FLOAT)( acos(w) * 2 ); - v.x = (FLOAT)( x / sin(fTheta/2) ); - v.y = (FLOAT)( y / sin(fTheta/2) ); - v.z = (FLOAT)( z / sin(fTheta/2) ); -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DMath_QuaternionFromAngles() -// Desc: Converts euler angles to a unit quaternion. -//----------------------------------------------------------------------------- -VOID D3DMath_QuaternionFromAngles( FLOAT& x, FLOAT& y, FLOAT& z, FLOAT& w, - FLOAT fYaw, FLOAT fPitch, FLOAT fRoll ) - -{ - FLOAT fSinYaw = (FLOAT)sin(fYaw/2); - FLOAT fSinPitch = (FLOAT)sin(fPitch/2); - FLOAT fSinRoll = (FLOAT)sin(fRoll/2); - FLOAT fCosYaw = (FLOAT)cos(fYaw/2); - FLOAT fCosPitch = (FLOAT)cos(fPitch/2); - FLOAT fCosRoll = (FLOAT)cos(fRoll/2); - - x = fSinRoll * fCosPitch * fCosYaw - fCosRoll * fSinPitch * fSinYaw; - y = fCosRoll * fSinPitch * fCosYaw + fSinRoll * fCosPitch * fSinYaw; - z = fCosRoll * fCosPitch * fSinYaw - fSinRoll * fSinPitch * fCosYaw; - w = fCosRoll * fCosPitch * fCosYaw + fSinRoll * fSinPitch * fSinYaw; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DMath_MatrixFromQuaternion() -// Desc: Converts a unit quaternion into a rotation matrix. -//----------------------------------------------------------------------------- -VOID D3DMath_MatrixFromQuaternion( D3DMATRIX& mat, FLOAT x, FLOAT y, FLOAT z, - FLOAT w ) -{ - FLOAT xx = x*x; FLOAT yy = y*y; FLOAT zz = z*z; - FLOAT xy = x*y; FLOAT xz = x*z; FLOAT yz = y*z; - FLOAT wx = w*x; FLOAT wy = w*y; FLOAT wz = w*z; - - mat._11 = 1 - 2 * ( yy + zz ); - mat._12 = 2 * ( xy - wz ); - mat._13 = 2 * ( xz + wy ); - - mat._21 = 2 * ( xy + wz ); - mat._22 = 1 - 2 * ( xx + zz ); - mat._23 = 2 * ( yz - wx ); - - mat._31 = 2 * ( xz - wy ); - mat._32 = 2 * ( yz + wx ); - mat._33 = 1 - 2 * ( xx + yy ); - - mat._14 = mat._24 = mat._34 = 0.0f; - mat._41 = mat._42 = mat._43 = 0.0f; - mat._44 = 1.0f; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DMath_QuaternionFromMatrix() -// Desc: Converts a rotation matrix into a unit quaternion. -//----------------------------------------------------------------------------- -VOID D3DMath_QuaternionFromMatrix( FLOAT& x, FLOAT& y, FLOAT& z, FLOAT& w, - D3DMATRIX& mat ) -{ - if( mat._11 + mat._22 + mat._33 > 0.0f ) - { - FLOAT s = (FLOAT)sqrt( mat._11 + mat._22 + mat._33 + mat._44 ); - - x = (mat._23-mat._32) / (2*s); - y = (mat._31-mat._13) / (2*s); - z = (mat._12-mat._21) / (2*s); - w = 0.5f * s; - } - else - { - - - } - FLOAT xx = x*x; FLOAT yy = y*y; FLOAT zz = z*z; - FLOAT xy = x*y; FLOAT xz = x*z; FLOAT yz = y*z; - FLOAT wx = w*x; FLOAT wy = w*y; FLOAT wz = w*z; - - mat._11 = 1 - 2 * ( yy + zz ); - mat._12 = 2 * ( xy - wz ); - mat._13 = 2 * ( xz + wy ); - - mat._21 = 2 * ( xy + wz ); - mat._22 = 1 - 2 * ( xx + zz ); - mat._23 = 2 * ( yz - wx ); - - mat._31 = 2 * ( xz - wy ); - mat._32 = 2 * ( yz + wx ); - mat._33 = 1 - 2 * ( xx + yy ); - - mat._14 = mat._24 = mat._34 = 0.0f; - mat._41 = mat._42 = mat._43 = 0.0f; - mat._44 = 1.0f; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DMath_QuaternionMultiply() -// Desc: Mulitples two quaternions together as in {Q} = {A} * {B}. -//----------------------------------------------------------------------------- -VOID D3DMath_QuaternionMultiply( FLOAT& Qx, FLOAT& Qy, FLOAT& Qz, FLOAT& Qw, - FLOAT Ax, FLOAT Ay, FLOAT Az, FLOAT Aw, - FLOAT Bx, FLOAT By, FLOAT Bz, FLOAT Bw ) -{ - FLOAT Dx = Bw*Ax + Bx*Aw + By*Az + Bz*Ay; - FLOAT Dy = Bw*Ay + By*Aw + Bz*Ax + Bx*Az; - FLOAT Dz = Bw*Az + Bz*Aw + Bx*Ay + By*Ax; - FLOAT Dw = Bw*Aw + Bx*Ax + By*Ay + Bz*Az; - - Qx = Dx; Qy = Dy; Qz = Dz; Qw = Dw; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DMath_SlerpQuaternions() -// Desc: Compute a quaternion which is the spherical linear interpolation -// between two other quaternions by dvFraction. -//----------------------------------------------------------------------------- -VOID D3DMath_QuaternionSlerp( FLOAT& Qx, FLOAT& Qy, FLOAT& Qz, FLOAT& Qw, - FLOAT Ax, FLOAT Ay, FLOAT Az, FLOAT Aw, - FLOAT Bx, FLOAT By, FLOAT Bz, FLOAT Bw, - FLOAT fAlpha ) -{ - FLOAT fScale1; - FLOAT fScale2; - - // Compute dot product, aka cos(theta): - FLOAT fCosTheta = Ax*Bx + Ay*By + Az*Bz + Aw*Bw; - - if( fCosTheta < 0.0f ) - { - // Flip start quaternion - Ax = -Ax; Ay = -Ay; Ax = -Az; Aw = -Aw; - fCosTheta = -fCosTheta; - } - - if( fCosTheta + 1.0f > 0.05f ) - { - // If the quaternions are close, use linear interploation - if( 1.0f - fCosTheta < 0.05f ) - { - fScale1 = 1.0f - fAlpha; - fScale2 = fAlpha; - } - else // Otherwise, do spherical interpolation - { - FLOAT fTheta = (FLOAT)acos( fCosTheta ); - FLOAT fSinTheta = (FLOAT)sin( fTheta ); - - fScale1 = (FLOAT)sin( fTheta * (1.0f-fAlpha) ) / fSinTheta; - fScale2 = (FLOAT)sin( fTheta * fAlpha ) / fSinTheta; - } - } - else - { - Bx = -Ay; - By = Ax; - Bz = -Aw; - Bw = Az; - fScale1 = (FLOAT)sin( g_PI * (0.5f - fAlpha) ); - fScale2 = (FLOAT)sin( g_PI * fAlpha ); - } - - Qx = fScale1 * Ax + fScale2 * Bx; - Qy = fScale1 * Ay + fScale2 * By; - Qz = fScale1 * Az + fScale2 * Bz; - Qw = fScale1 * Aw + fScale2 * Bw; -} - - - diff --git a/arch/win32/d3dframe/d3dmath.h b/arch/win32/d3dframe/d3dmath.h deleted file mode 100644 index 9532a47f7..000000000 --- a/arch/win32/d3dframe/d3dmath.h +++ /dev/null @@ -1,85 +0,0 @@ -//----------------------------------------------------------------------------- -// File: D3DMath.h -// -// Desc: Math functions and shortcuts for Direct3D programming. -// -// -// Copyright (C) 1997 Microsoft Corporation. All rights reserved -//----------------------------------------------------------------------------- - -#ifndef D3DMATH_H -#define D3DMATH_H - -#include -#include - - -//----------------------------------------------------------------------------- -// Useful Math constants -//----------------------------------------------------------------------------- -const FLOAT g_PI = 3.14159265358979323846f; // Pi -const FLOAT g_2_PI = 6.28318530717958623200f; // 2 * Pi -const FLOAT g_PI_DIV_2 = 1.57079632679489655800f; // Pi / 2 -const FLOAT g_PI_DIV_4 = 0.78539816339744827900f; // Pi / 4 -const FLOAT g_INV_PI = 0.31830988618379069122f; // 1 / Pi -const FLOAT g_DEGTORAD = 0.01745329251994329547f; // Degrees to Radians -const FLOAT g_RADTODEG = 57.29577951308232286465f; // Radians to Degrees -const FLOAT g_HUGE = 1.0e+38f; // Huge number for FLOAT -const FLOAT g_EPSILON = 1.0e-5f; // Tolerance for FLOATs - - - - -//----------------------------------------------------------------------------- -// Fuzzy compares (within tolerance) -//----------------------------------------------------------------------------- -inline BOOL D3DMath_IsZero( FLOAT a, FLOAT fTol = g_EPSILON ) -{ return ( a <= 0.0f ) ? ( a >= -fTol ) : ( a <= fTol ); } - - - - -//----------------------------------------------------------------------------- -// Matrix functions -//----------------------------------------------------------------------------- -VOID D3DMath_MatrixMultiply( D3DMATRIX& q, D3DMATRIX& a, D3DMATRIX& b ); -HRESULT D3DMath_MatrixInvert( D3DMATRIX& q, D3DMATRIX& a ); - - - - -//----------------------------------------------------------------------------- -// Vector functions -//----------------------------------------------------------------------------- -HRESULT D3DMath_VectorMatrixMultiply( D3DVECTOR& vDest, D3DVECTOR& vSrc, - D3DMATRIX& mat); -HRESULT D3DMath_VertexMatrixMultiply( D3DVERTEX& vDest, D3DVERTEX& vSrc, - D3DMATRIX& mat ); - - - - -//----------------------------------------------------------------------------- -// Quaternion functions -//----------------------------------------------------------------------------- -VOID D3DMath_QuaternionFromRotation( FLOAT& x, FLOAT& y, FLOAT& z, FLOAT& w, - D3DVECTOR& v, FLOAT fTheta ); -VOID D3DMath_RotationFromQuaternion( D3DVECTOR& v, FLOAT& fTheta, - FLOAT x, FLOAT y, FLOAT z, FLOAT w ); -VOID D3DMath_QuaternionFromAngles( FLOAT& x, FLOAT& y, FLOAT& z, FLOAT& w, - FLOAT fYaw, FLOAT fPitch, FLOAT fRoll ); -VOID D3DMath_MatrixFromQuaternion( D3DMATRIX& mat, FLOAT x, FLOAT y, FLOAT z, - FLOAT w ); -VOID D3DMath_QuaternionFromMatrix( FLOAT &x, FLOAT &y, FLOAT &z, FLOAT &w, - D3DMATRIX& mat ); -VOID D3DMath_QuaternionMultiply( FLOAT& Qx, FLOAT& Qy, FLOAT& Qz, FLOAT& Qw, - FLOAT Ax, FLOAT Ay, FLOAT Az, FLOAT Aw, - FLOAT Bx, FLOAT By, FLOAT Bz, FLOAT Bw ); -VOID D3DMath_QuaternionSlerp( FLOAT& Qx, FLOAT& Qy, FLOAT& Qz, FLOAT& Qw, - FLOAT Ax, FLOAT Ay, FLOAT Az, FLOAT Aw, - FLOAT Bx, FLOAT By, FLOAT Bz, FLOAT Bw, - FLOAT fAlpha ); - - -#endif // D3DMATH_H - diff --git a/arch/win32/d3dframe/d3dtextr.cpp b/arch/win32/d3dframe/d3dtextr.cpp deleted file mode 100755 index 901dae910..000000000 --- a/arch/win32/d3dframe/d3dtextr.cpp +++ /dev/null @@ -1,788 +0,0 @@ -//----------------------------------------------------------------------------- -// File: D3DTextr.cpp -// -// Desc: This file contains the member functions for the -// CD3DTextureEngine class. The class is responsible for loading and -// creating textures from files, as well as retrieving the -// corresponding ptrs and surfaces for the textures, given a -// texture's name. -// -// -// Copyright (c) 1996-1998 Microsoft Corporation. All rights reserved -//----------------------------------------------------------------------------- - -#include -#include -#include "D3DTextr.h" -#include "D3DUtil.h" - - - -//----------------------------------------------------------------------------- -// Name: TextureContainer -// Desc: Linked list tructure to hold info per texture -//----------------------------------------------------------------------------- -struct TextureContainer -{ - HBITMAP hbmBitmap; // Bitmap containing texture image - LPDIRECTDRAWSURFACE4 pddsSurface; // Surface of the texture - LPDIRECT3DTEXTURE2 ptexTexture; // Direct3D texture for the texture - DWORD dwStage; // Texture stage (for multi-textures) - TCHAR strName[80]; // Filename of assoc'd bitmap - BOOL bHasAlpha; - DWORD dwFlags; - - BYTE* pSurfaceBits[10]; - DDSURFACEDESC2 ddsd; - - TextureContainer *pPrev, *pNext; // Ptr to next texture in linked list - - ~TextureContainer(); -}; - - - - -//----------------------------------------------------------------------------- -// Macros, function prototypes and static variable -//----------------------------------------------------------------------------- -#define FOREACHTEXTURE(ptc) for( TextureContainer* ptc=g_ptcTextureList; \ - NULL!=ptc; ptc=ptc->pNext ) -inline BOOL FileExists( TCHAR* n ) -{ FILE* fp=_tfopen(n,TEXT("rb")); return fp?(0==fclose(fp)):FALSE; } - -static TextureContainer* g_ptcTextureList = NULL; // Textures list -static TCHAR g_strTexturePath[512] = TEXT("MEDIA\\"); // Path for files -static TCHAR* g_strRegValueName = TEXT("DX6SDK Samples Path"); - - - - -struct TEXTURESEARCHINFO -{ - DWORD dwDesiredBPP; // Input for texture format search - BOOL bUseAlpha; - BOOL bUsePalette; - BOOL bUseFourCC; - BOOL bFoundGoodFormat; - - DDPIXELFORMAT* pddpf; // Result of texture format search -}; - - - - -//----------------------------------------------------------------------------- -// Name: TextureSearchCallback() -// Desc: Enumeration callback routine to find a best-matching texture format. -// The param data is the DDPIXELFORMAT of the best-so-far matching -// texture. Note: the desired BPP is passed in the dwSize field, and the -// default BPP is passed in the dwFlags field. -//----------------------------------------------------------------------------- -static HRESULT CALLBACK TextureSearchCallback( DDPIXELFORMAT* pddpf, - VOID* param ) -{ - if( NULL==pddpf || NULL==param ) - return DDENUMRET_OK; - - TEXTURESEARCHINFO* ptsi = (TEXTURESEARCHINFO*)param; - - // Skip any funky modes - if( pddpf->dwFlags & (DDPF_LUMINANCE|DDPF_BUMPLUMINANCE|DDPF_BUMPDUDV) ) - return DDENUMRET_OK; - - // Check for palettized formats - if( ptsi->bUsePalette ) - { - if( !( pddpf->dwFlags & DDPF_PALETTEINDEXED8 ) ) - return DDENUMRET_OK; - - // Accept the first 8-bit palettized format we get - memcpy( ptsi->pddpf, pddpf, sizeof(DDPIXELFORMAT) ); - ptsi->bFoundGoodFormat = TRUE; - return DDENUMRET_CANCEL; - } - - // Else, skip any paletized formats (all modes under 16bpp) - if( pddpf->dwRGBBitCount < 16 ) - return DDENUMRET_OK; - - // Check for FourCC formats - if( ptsi->bUseFourCC ) - { - if( pddpf->dwFourCC == 0 ) - return DDENUMRET_OK; - - return DDENUMRET_CANCEL; - } - - // Else, skip any FourCC formats - if( pddpf->dwFourCC != 0 ) - return DDENUMRET_OK; - - // Make sure current alpha format agrees with requested format type - if( (ptsi->bUseAlpha==TRUE) && !(pddpf->dwFlags&DDPF_ALPHAPIXELS) ) - return DDENUMRET_OK; - if( (ptsi->bUseAlpha==FALSE) && (pddpf->dwFlags&DDPF_ALPHAPIXELS) ) - return DDENUMRET_OK; - - // Check if we found a good match - if( pddpf->dwRGBBitCount == ptsi->dwDesiredBPP ) - { - memcpy( ptsi->pddpf, pddpf, sizeof(DDPIXELFORMAT) ); - ptsi->bFoundGoodFormat = TRUE; - return DDENUMRET_CANCEL; - } - - return DDENUMRET_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: ~TextureContainer() -// Desc: Destructs the contents of the texture container -//----------------------------------------------------------------------------- -TextureContainer::~TextureContainer() -{ - SAFE_DELETE( pNext ); - SAFE_RELEASE( ptexTexture ); - SAFE_RELEASE( pddsSurface ); - DeleteObject( hbmBitmap ); -} - - - - -//----------------------------------------------------------------------------- -// Name: CD3DStaticTextureEngine -// Desc: Class used to automatically construct and destruct the static -// texture engine class. -//----------------------------------------------------------------------------- -class CD3DTextureEngine -{ -public: - CD3DTextureEngine(); - ~CD3DTextureEngine(); -} g_StaticTextureEngine; - - - - -//----------------------------------------------------------------------------- -// Name: CD3DTextureEngine() -// Desc: Constructs the texture engine. Creates a DDraw object -//----------------------------------------------------------------------------- -CD3DTextureEngine::CD3DTextureEngine() -{ -} - - - - -//----------------------------------------------------------------------------- -// Name: ~CD3DTextureEngine() -// Desc: Deletes the internal list of textures -//----------------------------------------------------------------------------- -CD3DTextureEngine::~CD3DTextureEngine() -{ - // Delete the list of textures - SAFE_DELETE( g_ptcTextureList ); -} - - - - -//----------------------------------------------------------------------------- -// Name: FindTexture() -// Desc: Searches the internal list of textures for a texture specified by -// its name. Returns the structure associated with that texture. -//----------------------------------------------------------------------------- -static TextureContainer* FindTexture( TCHAR* strTextureName ) -{ - FOREACHTEXTURE( ptcTexture ) - { - if( !lstrcmpi( strTextureName, ptcTexture->strName ) ) - return ptcTexture; - } - - return NULL; -} - - - - -//----------------------------------------------------------------------------- -// Name: FindTextureFile() -// Desc: Looks for the specified file in the current directory, in the path -// specified in the environment variables, or in the path specified in -// the registry. After finding it, the function returns the full path. -//----------------------------------------------------------------------------- -static HRESULT FindTextureFile( TCHAR* strFilename, TCHAR* strTexturePath, - TCHAR* strFullPath ) -{ - // First, check the current directory - _tcscpy( strFullPath, strFilename ); - if( FileExists( strFullPath ) ) - return DD_OK; - - // Next, check to see if an environment variable specifies the path - TCHAR* strPath = _tgetenv( TEXT("D3DPATH") ); - if( NULL != strPath ) - { - _stprintf( strFullPath, TEXT("%s\\%s"), strPath, strFilename ); - if( FileExists( strFullPath ) ) - return DD_OK; - } - - // Finally, check the system registry for a path - HKEY key; - LONG result = RegOpenKeyEx( HKEY_LOCAL_MACHINE, - TEXT("Software\\Microsoft\\DirectX"), - 0, KEY_READ, &key ); - if( ERROR_SUCCESS == result ) - { - TCHAR strPath[512]; - DWORD type, size = 512; - result = RegQueryValueEx( key, g_strRegValueName, NULL, &type, - (BYTE*)strPath, &size ); - - RegCloseKey( key ); - - if( ERROR_SUCCESS == result ) - { - _stprintf( strFullPath, TEXT("%s\\D3DIM\\Media\\%s"), strPath, - strFilename ); - if( FileExists( strFullPath ) ) - return DD_OK; - - _stprintf( strFullPath, TEXT("%s\\%s%s"), strPath, - strTexturePath, strFilename ); - if( FileExists( strFullPath ) ) - return DD_OK; - } - } - - return DDERR_NOTFOUND; -} - - - - -//----------------------------------------------------------------------------- -// Name: LoadTextureImage() -// Desc: Loads a texture map file into a BITMAP surface. -//----------------------------------------------------------------------------- -static HRESULT LoadTextureImage( TextureContainer* ptcTexture ) -{ - TCHAR* strFilename = ptcTexture->strName; - TCHAR* strExtension; - TCHAR strPathname[256]; - - // Get the filename extension - if( NULL == ( strExtension = _tcsrchr( strFilename, TEXT('.') ) ) ) - return DDERR_UNSUPPORTED; - - // Check the executable's resource. If it's there, we're done! - if( NULL != ( ptcTexture->hbmBitmap = (HBITMAP)LoadImage( - GetModuleHandle(NULL), - strFilename, IMAGE_BITMAP, - 0, 0, LR_CREATEDIBSECTION) ) ) - return S_OK; - - // Check the current path and system registry path for the file - if( FAILED( FindTextureFile( strFilename, g_strTexturePath, strPathname ) ) ) - return DDERR_NOTFOUND; - - if( !lstrcmpi( strExtension, ".bmp" ) ) - { - // Try to load the bitmap as a resource. - ptcTexture->hbmBitmap = (HBITMAP)LoadImage( GetModuleHandle(NULL), - strPathname, IMAGE_BITMAP, 0, 0, - LR_CREATEDIBSECTION ); - - // If the bitmap wasn't a resource, try it as a file. - if( NULL == ptcTexture->hbmBitmap ) - ptcTexture->hbmBitmap = (HBITMAP)LoadImage( NULL, strPathname, - IMAGE_BITMAP, 0, 0, - LR_LOADFROMFILE|LR_CREATEDIBSECTION ); - - return (ptcTexture->hbmBitmap) ? DD_OK : DDERR_NOTFOUND; - } - - // Can check for other file formats here - - return DDERR_UNSUPPORTED; -} - - - - -//----------------------------------------------------------------------------- -// Name: CopyBitmapToSurface() -// Desc: Copies the image of a bitmap into a surface -//----------------------------------------------------------------------------- -static HRESULT CopyBitmapToSurface( LPDIRECTDRAWSURFACE4 pddsTarget, - HBITMAP hbmBitmap, DWORD dwFlags ) -{ - // Get a DDraw object to create a temporary surface - LPDIRECTDRAW4 pDD; - pddsTarget->GetDDInterface( (VOID**)&pDD ); - pDD->Release(); - - // Get the bitmap structure (to extract width, height, and bpp) - BITMAP bm; - GetObject( hbmBitmap, sizeof(BITMAP), &bm ); - - // Setup the new surface desc - DDSURFACEDESC2 ddsd; - D3DUtil_InitSurfaceDesc( ddsd ); - pddsTarget->GetSurfaceDesc( &ddsd ); - ddsd.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT| - DDSD_TEXTURESTAGE; - ddsd.ddsCaps.dwCaps = DDSCAPS_TEXTURE|DDSCAPS_SYSTEMMEMORY; - ddsd.ddsCaps.dwCaps2 = 0L; - ddsd.dwWidth = bm.bmWidth; - ddsd.dwHeight = bm.bmHeight; - - // Create a new surface for the texture - LPDIRECTDRAWSURFACE4 pddsTempSurface; - HRESULT hr; - if( FAILED( hr = pDD->CreateSurface( &ddsd, &pddsTempSurface, NULL ) ) ) - return NULL; - - // Get a DC for the bitmap - HDC hdcBitmap = CreateCompatibleDC( NULL ); - if( NULL == hdcBitmap ) - { - pddsTempSurface->Release(); - return NULL; - } - SelectObject( hdcBitmap, hbmBitmap ); - - // Handle palettized textures. Need to attach a palette - if( ddsd.ddpfPixelFormat.dwRGBBitCount == 8 ) - { - // Create the color table and parse in the palette - DWORD pe[256]; - WORD wNumColors = GetDIBColorTable( hdcBitmap, 0, 256, - (RGBQUAD*)pe ); - for( WORD i=0; iCreatePalette( DDPCAPS_8BIT|DDPCAPS_ALPHA, (PALETTEENTRY*)pe, &pPalette, NULL ); - else - pDD->CreatePalette( DDPCAPS_8BIT, (PALETTEENTRY*)pe, &pPalette, NULL ); - pddsTempSurface->SetPalette( pPalette ); - pddsTarget->SetPalette( pPalette ); - SAFE_RELEASE( pPalette ); - } - - // Copy the bitmap image to the surface. - HDC hdcSurface; - if( SUCCEEDED( pddsTempSurface->GetDC( &hdcSurface ) ) ) - { - BitBlt( hdcSurface, 0, 0, bm.bmWidth, bm.bmHeight, hdcBitmap, 0, 0, - SRCCOPY ); - pddsTempSurface->ReleaseDC( hdcSurface ); - } - DeleteDC( hdcBitmap ); - - // Copy the temp surface to the real texture surface - pddsTarget->Blt( NULL, pddsTempSurface, NULL, DDBLT_WAIT, NULL ); - - if( ddsd.ddpfPixelFormat.dwRGBBitCount == 8 ) - { - LPDIRECTDRAWPALETTE pPalette; - DWORD pe[256]; - pddsTempSurface->GetPalette( &pPalette ); - pPalette->GetEntries( 0, 0, 256, (PALETTEENTRY*)&pe ); - pPalette->Release(); - - pddsTarget->GetPalette( &pPalette ); - pPalette->GetEntries( 0, 0, 256, (PALETTEENTRY*)&pe ); - pPalette->Release(); - } - - pddsTempSurface->Release(); - - // For textures with real alpha (not palettized), set transparent bits - if( ddsd.ddpfPixelFormat.dwRGBAlphaBitMask ) - { - if( dwFlags & (D3DTEXTR_TRANSPARENTWHITE|D3DTEXTR_TRANSPARENTBLACK) ) - { - // Lock the texture surface - DDSURFACEDESC2 ddsd; - D3DUtil_InitSurfaceDesc( ddsd ); - while( pddsTarget->Lock( NULL, &ddsd, 0, NULL ) == - DDERR_WASSTILLDRAWING ); - - DWORD dwAlphaMask = ddsd.ddpfPixelFormat.dwRGBAlphaBitMask; - DWORD dwRGBMask = ( ddsd.ddpfPixelFormat.dwRBitMask | - ddsd.ddpfPixelFormat.dwGBitMask | - ddsd.ddpfPixelFormat.dwBBitMask ); - DWORD dwColorkey = 0x00000000; // Colorkey on black - if( dwFlags & D3DTEXTR_TRANSPARENTWHITE ) - dwColorkey = dwRGBMask; // Colorkey on white - - // Add an opaque alpha value to each non-colorkeyed pixel - for( DWORD y=0; yUnlock( NULL ); - } - } - - return S_OK;; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DTextr_GetSurface() -// Desc: Returns a pointer to a d3dSurface from the name of the texture -//----------------------------------------------------------------------------- -LPDIRECTDRAWSURFACE4 D3DTextr_GetSurface( TCHAR* strName ) -{ - TextureContainer* ptcTexture = FindTexture( strName ); - - return ptcTexture ? ptcTexture->pddsSurface : NULL; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DTextr_GetTexture() -// Desc: Returns a pointer to a d3dTexture from the name of the texture -//----------------------------------------------------------------------------- -LPDIRECT3DTEXTURE2 D3DTextr_GetTexture( TCHAR* strName ) -{ - TextureContainer* ptcTexture = FindTexture( strName ); - - return ptcTexture ? ptcTexture->ptexTexture: NULL; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DTextr_SetTexturePath() -// Desc: Enumeration callback routine to find a best-matching texture format. -//----------------------------------------------------------------------------- -VOID D3DTextr_SetTexturePath( TCHAR* strTexturePath ) -{ - if( NULL==strTexturePath ) - strTexturePath = TEXT(""); - _tcscpy( g_strTexturePath, strTexturePath ); -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DTextr_CreateTexture() -// Desc: Is passed a filename and creates a local Bitmap from that file. -// The texture can not be used until it is restored, however. -//----------------------------------------------------------------------------- -HRESULT D3DTextr_CreateTexture( TCHAR* strName, DWORD dwStage, DWORD dwFlags ) -{ - // Check first to see if the texture is already loaded - if( NULL != FindTexture( strName ) ) - return S_OK; - - // Allocate and add the texture to the linked list of textures; - TextureContainer* ptcTexture = new TextureContainer(); - if( NULL == ptcTexture ) - return E_OUTOFMEMORY; - ZeroMemory( ptcTexture, sizeof(TextureContainer) ); - lstrcpy( ptcTexture->strName, strName ); - ptcTexture->dwStage = dwStage; - ptcTexture->dwFlags = dwFlags; - - // Create a bitmap and load the texture file into it, - if( FAILED( LoadTextureImage( ptcTexture ) ) ) - { - delete ptcTexture; - return E_FAIL; - } - - // Add the texture to the global linked list - if( g_ptcTextureList ) - g_ptcTextureList->pPrev = ptcTexture; - ptcTexture->pNext = g_ptcTextureList; - g_ptcTextureList = ptcTexture; - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: RestoreFromBitmap() -// Desc: Invalidates the current texture objects and rebuilds new ones -// using the new device. -//----------------------------------------------------------------------------- -static HRESULT RestoreFromBitmap( TextureContainer* ptcTexture, - LPDIRECT3DDEVICE3 pd3dDevice ) -{ - // Get the DirectDraw interface for creating surfaces - LPDIRECTDRAW4 pDD; - if( NULL == ( pDD = D3DUtil_GetDirectDrawFromDevice( pd3dDevice ) ) ) - return E_FAIL; - pDD->Release(); - - // Get the device caps - D3DDEVICEDESC ddHwDesc, ddSwDesc; - DWORD dwDeviceCaps; - ddHwDesc.dwSize = sizeof(D3DDEVICEDESC); - ddSwDesc.dwSize = sizeof(D3DDEVICEDESC); - if( FAILED( pd3dDevice->GetCaps( &ddHwDesc, &ddSwDesc ) ) ) - return E_FAIL; - if( ddHwDesc.dwFlags ) dwDeviceCaps = ddHwDesc.dpcTriCaps.dwTextureCaps; - else dwDeviceCaps = ddSwDesc.dpcTriCaps.dwTextureCaps; - - // Get the bitmap structure (to extract width, height, and bpp) - BITMAP bm; - HBITMAP hbmBitmap = ptcTexture->hbmBitmap; - GetObject( hbmBitmap, sizeof(BITMAP), &bm ); - DWORD dwWidth = (DWORD)bm.bmWidth; - DWORD dwHeight = (DWORD)bm.bmHeight; - - // Setup the new surface desc - DDSURFACEDESC2 ddsd; - D3DUtil_InitSurfaceDesc( ddsd ); - ddsd.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH| - DDSD_PIXELFORMAT|DDSD_TEXTURESTAGE; - ddsd.ddsCaps.dwCaps = DDSCAPS_TEXTURE; - ddsd.ddsCaps.dwCaps2 = DDSCAPS2_TEXTUREMANAGE; - ddsd.dwTextureStage = ptcTexture->dwStage; - ddsd.dwWidth = dwWidth; - ddsd.dwHeight = dwHeight; - - // Adjust width and height, if the driver requires it - if( dwDeviceCaps & D3DPTEXTURECAPS_POW2 ) - { - for( ddsd.dwWidth=1; dwWidth>ddsd.dwWidth; ddsd.dwWidth<<=1 ); - for( ddsd.dwHeight=1; dwHeight>ddsd.dwHeight; ddsd.dwHeight<<=1 ); - } - if( dwDeviceCaps & D3DPTEXTURECAPS_SQUAREONLY ) - { - if( ddsd.dwWidth > ddsd.dwHeight ) ddsd.dwHeight = ddsd.dwWidth; - else ddsd.dwWidth = ddsd.dwHeight; - } - - BOOL bUsePalette = ( bm.bmBitsPixel <= 8 ); - BOOL bUseAlpha = FALSE; - - if( ptcTexture->bHasAlpha ) - bUseAlpha = TRUE; - - if( ptcTexture->dwFlags & (D3DTEXTR_TRANSPARENTWHITE|D3DTEXTR_TRANSPARENTBLACK) ) - { - if( bUsePalette ) - { - if( dwDeviceCaps & D3DPTEXTURECAPS_ALPHAPALETTE ) - { - bUseAlpha = TRUE; - bUsePalette = TRUE; - } - else - { - bUseAlpha = TRUE; - bUsePalette = FALSE; - } - } - } - - // Setup the structure to be used for texture enumration. - TEXTURESEARCHINFO tsi; - tsi.pddpf = &ddsd.ddpfPixelFormat; - tsi.bUseAlpha = bUseAlpha; - tsi.bUsePalette = bUsePalette; - tsi.bUseFourCC = ( ddsd.ddpfPixelFormat.dwFlags & DDPF_FOURCC ); - tsi.dwDesiredBPP = 16; - tsi.bFoundGoodFormat = FALSE; - if( ptcTexture->dwFlags & D3DTEXTR_32BITSPERPIXEL ) - tsi.dwDesiredBPP = 32; - - // Enumerate the texture formats, and find the closest device-supported - // texture pixel format - pd3dDevice->EnumTextureFormats( TextureSearchCallback, &tsi ); - - // If a palettized format was requested, but not found, default to a - // 16-bit texture format - if( FALSE == tsi.bFoundGoodFormat && bUsePalette ) - { - tsi.bUsePalette = FALSE; - tsi.dwDesiredBPP = 16; - pd3dDevice->EnumTextureFormats( TextureSearchCallback, &tsi ); - if( FALSE == tsi.bFoundGoodFormat ) - return E_FAIL; - } - - // Create a new surface for the texture - HRESULT hr; - if( FAILED( hr = pDD->CreateSurface( &ddsd, &ptcTexture->pddsSurface, NULL ) ) ) - return E_FAIL; - - // Create the texture - if( FAILED( ptcTexture->pddsSurface->QueryInterface( IID_IDirect3DTexture2, - (VOID**)&ptcTexture->ptexTexture ) ) ) - return E_FAIL; - - - // Copy the bitmap to the texture surface - return CopyBitmapToSurface( ptcTexture->pddsSurface, hbmBitmap, - ptcTexture->dwFlags ); - -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DTextr_Restore() -// Desc: Invalidates the current texture objects and rebuilds new ones -// using the new device. -//----------------------------------------------------------------------------- -HRESULT D3DTextr_Restore( TCHAR* strName, LPDIRECT3DDEVICE3 pd3dDevice ) -{ - // Check params - if( NULL == pd3dDevice ) - return DDERR_INVALIDPARAMS; - - TextureContainer* ptcTexture = FindTexture( strName ); - if( NULL == ptcTexture ) - return DDERR_NOTFOUND; - - // Release any previously created objects - SAFE_RELEASE( ptcTexture->ptexTexture ); - SAFE_RELEASE( ptcTexture->pddsSurface ); - - // Restore the texture surface from the bitmap image. At this point, code - // can be added to handle other texture formats, such as those created from - // .dds files, .jpg files, or whatever else. - return RestoreFromBitmap( ptcTexture, pd3dDevice ); -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DTextr_RestoreAllTextures() -// Desc: This function is called when a mode is changed. It updates all -// texture objects to be valid with the new device. -//----------------------------------------------------------------------------- -HRESULT D3DTextr_RestoreAllTextures( LPDIRECT3DDEVICE3 pd3dDevice ) -{ - FOREACHTEXTURE( ptcTexture ) - { - D3DTextr_Restore( ptcTexture->strName, pd3dDevice ); - } - - return DD_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DTextr_Invalidate() -// Desc: Used to bump a texture out of (video) memory, this function -// actually destroys the d3dtexture and ddsurface of the texture -//----------------------------------------------------------------------------- -HRESULT D3DTextr_Invalidate( TCHAR* strName ) -{ - TextureContainer* ptcTexture = FindTexture( strName ); - if( NULL == ptcTexture ) - return DDERR_NOTFOUND; - - SAFE_RELEASE( ptcTexture->ptexTexture ); - SAFE_RELEASE( ptcTexture->pddsSurface ); - - return DD_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DTextr_InvalidateAllTextures() -// Desc: This function is called when a mode is changed. It invalidates -// all texture objects so their device can be safely released. -//----------------------------------------------------------------------------- -HRESULT D3DTextr_InvalidateAllTextures() -{ - FOREACHTEXTURE( ptcTexture ) - { - SAFE_RELEASE( ptcTexture->ptexTexture ); - SAFE_RELEASE( ptcTexture->pddsSurface ); - } - - return DD_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DTextr_DestroyTexture() -// Desc: Frees the resources for the specified texture container -//----------------------------------------------------------------------------- -HRESULT D3DTextr_DestroyTexture( TCHAR* strName ) -{ - TextureContainer* ptcTexture = FindTexture( strName ); - if( NULL == ptcTexture ) - return DDERR_NOTFOUND; - - // Remove the texture container from the global list - if( ptcTexture->pPrev ) - ptcTexture->pPrev->pNext = ptcTexture->pNext; - else - g_ptcTextureList = ptcTexture->pNext; - ptcTexture->pNext = NULL; - - SAFE_DELETE( ptcTexture ); - - return DD_OK; -} - diff --git a/arch/win32/d3dframe/d3dtextr.h b/arch/win32/d3dframe/d3dtextr.h deleted file mode 100644 index 2b7d681a9..000000000 --- a/arch/win32/d3dframe/d3dtextr.h +++ /dev/null @@ -1,62 +0,0 @@ -//----------------------------------------------------------------------------- -// File: D3DTextr.h -// -// Desc: Functions to manage textures, including creating (loading from a -// file), restoring lost surfaces, invalidating, and destroying. -// -// Note: the implementation of these fucntions maintain an internal list -// of loaded textures. After creation, individual textures are referenced -// via their ASCII names. -// -// -// Copyright (C) 1997 Microsoft Corporation. All rights reserved -//----------------------------------------------------------------------------- - -#ifndef D3DTEXTR_H -#define D3DTEXTR_H - -#include -#include - - - - -//----------------------------------------------------------------------------- -// Access functions for loaded textures. Note: these functions search -// an internal list of the textures, and use the texture associated with the -// ASCII name. -//----------------------------------------------------------------------------- -LPDIRECTDRAWSURFACE4 D3DTextr_GetSurface( TCHAR* strName ); -LPDIRECT3DTEXTURE2 D3DTextr_GetTexture( TCHAR* strName ); - - - - -//----------------------------------------------------------------------------- -// Texture invalidation and restoration functions -//----------------------------------------------------------------------------- -HRESULT D3DTextr_Invalidate( TCHAR* strName ); -HRESULT D3DTextr_Restore( TCHAR* strName, LPDIRECT3DDEVICE3 pd3dDevice ); -HRESULT D3DTextr_InvalidateAllTextures(); -HRESULT D3DTextr_RestoreAllTextures( LPDIRECT3DDEVICE3 pd3dDevice ); - - - - -//----------------------------------------------------------------------------- -// Texture creation and deletion functions -//----------------------------------------------------------------------------- -#define D3DTEXTR_TRANSPARENTWHITE 0x00000001 -#define D3DTEXTR_TRANSPARENTBLACK 0x00000002 -#define D3DTEXTR_32BITSPERPIXEL 0x00000004 - -HRESULT D3DTextr_CreateTexture( TCHAR* strName, DWORD dwStage=0L, - DWORD dwFlags=0L ); -HRESULT D3DTextr_DestroyTexture( TCHAR* strName ); -VOID D3DTextr_SetTexturePath( TCHAR* strTexturePath ); - - - - -#endif // D3DTEXTR_H - diff --git a/arch/win32/d3dframe/d3dutil.cpp b/arch/win32/d3dframe/d3dutil.cpp deleted file mode 100755 index 0f37d2f75..000000000 --- a/arch/win32/d3dframe/d3dutil.cpp +++ /dev/null @@ -1,390 +0,0 @@ -//----------------------------------------------------------------------------- -// File: D3DUtil.cpp -// -// Desc: Shortcut macros and functions for using DX objects -// -// -// Copyright (c) 1997-1998 Microsoft Corporation. All rights reserved -//----------------------------------------------------------------------------- - -#define D3D_OVERLOADS -#include -#include -#include "D3DUtil.h" - - - -//----------------------------------------------------------------------------- -// Name: D3DUtil_InitDeviceDesc() -// Desc: Helper function called to initialize a D3DDEVICEDESC structure, -//----------------------------------------------------------------------------- -VOID D3DUtil_InitDeviceDesc( D3DDEVICEDESC& ddDevDesc ) -{ - ZeroMemory( &ddDevDesc, sizeof(D3DDEVICEDESC) ); - ddDevDesc.dwSize = sizeof(D3DDEVICEDESC); - ddDevDesc.dtcTransformCaps.dwSize = sizeof(D3DTRANSFORMCAPS); - ddDevDesc.dlcLightingCaps.dwSize = sizeof(D3DLIGHTINGCAPS); - ddDevDesc.dpcLineCaps.dwSize = sizeof(D3DPRIMCAPS); - ddDevDesc.dpcTriCaps.dwSize = sizeof(D3DPRIMCAPS); -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DUtil_InitSurfaceDesc() -// Desc: Helper function called to build a DDSURFACEDESC2 structure, -// typically before calling CreateSurface() or GetSurfaceDesc() -//----------------------------------------------------------------------------- -VOID D3DUtil_InitSurfaceDesc( DDSURFACEDESC2& ddsd, DWORD dwFlags, - DWORD dwCaps ) -{ - ZeroMemory( &ddsd, sizeof(DDSURFACEDESC2) ); - ddsd.dwSize = sizeof(DDSURFACEDESC2); - ddsd.dwFlags = dwFlags; - ddsd.ddsCaps.dwCaps = dwCaps; - ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DUtil_InitViewport() -// Desc: Helper function called to build a D3DVIEWPORT3 structure -//----------------------------------------------------------------------------- -VOID D3DUtil_InitViewport( D3DVIEWPORT2& vp, DWORD dwWidth, DWORD dwHeight ) -{ - ZeroMemory( &vp, sizeof(D3DVIEWPORT2) ); - vp.dwSize = sizeof(D3DVIEWPORT2); - vp.dwWidth = dwWidth; - vp.dwHeight = dwHeight; - vp.dvMaxZ = 1.0f; - - vp.dvClipX = -1.0f; - vp.dvClipWidth = 2.0f; - vp.dvClipY = 1.0f; - vp.dvClipHeight = 2.0f; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DUtil_InitMaterial() -// Desc: Helper function called to build a D3DMATERIAL structure -//----------------------------------------------------------------------------- -VOID D3DUtil_InitMaterial( D3DMATERIAL& mtrl, FLOAT r, FLOAT g, FLOAT b ) -{ - ZeroMemory( &mtrl, sizeof(D3DMATERIAL) ); - mtrl.dwSize = sizeof(D3DMATERIAL); - mtrl.dcvDiffuse.r = mtrl.dcvAmbient.r = r; - mtrl.dcvDiffuse.g = mtrl.dcvAmbient.g = g; - mtrl.dcvDiffuse.b = mtrl.dcvAmbient.b = b; - mtrl.dwRampSize = 16L; // A default ramp size -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DUtil_InitLight() -// Desc: Initializes a D3DLIGHT structure -//----------------------------------------------------------------------------- -VOID D3DUtil_InitLight( D3DLIGHT& light, D3DLIGHTTYPE ltType, - FLOAT x, FLOAT y, FLOAT z ) -{ - ZeroMemory( &light, sizeof(D3DLIGHT) ); - light.dwSize = sizeof(D3DLIGHT); - light.dltType = ltType; - light.dcvColor.r = 1.0f; - light.dcvColor.g = 1.0f; - light.dcvColor.b = 1.0f; - light.dvPosition.x = light.dvDirection.x = x; - light.dvPosition.y = light.dvDirection.y = y; - light.dvPosition.z = light.dvDirection.z = z; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DUtil_GetDirectDrawFromDevice() -// Desc: Get the DDraw interface from a D3DDevice. -//----------------------------------------------------------------------------- -LPDIRECTDRAW4 D3DUtil_GetDirectDrawFromDevice( LPDIRECT3DDEVICE3 pd3dDevice ) -{ - LPDIRECTDRAW4 pDD = NULL; - LPDIRECTDRAWSURFACE4 pddsRender; - - if( pd3dDevice ) - { - // Get the current render target - if( SUCCEEDED( pd3dDevice->GetRenderTarget( &pddsRender ) ) ) - { - // Get the DDraw4 interface from the render target - pddsRender->GetDDInterface( (VOID**)&pDD ); - pddsRender->Release(); - } - } - return pDD; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DUtil_GetDeviceMemoryType() -// Desc: Retreives the default memory type used for the device. -//----------------------------------------------------------------------------- -DWORD D3DUtil_GetDeviceMemoryType( LPDIRECT3DDEVICE3 pd3dDevice ) -{ - D3DDEVICEDESC ddHwDesc, ddSwDesc; - ddHwDesc.dwSize = sizeof(D3DDEVICEDESC); - ddSwDesc.dwSize = sizeof(D3DDEVICEDESC); - if( FAILED( pd3dDevice->GetCaps( &ddHwDesc, &ddSwDesc ) ) ) - return 0L; - - if( ddHwDesc.dwFlags ) - return DDSCAPS_VIDEOMEMORY; - - return DDSCAPS_SYSTEMMEMORY; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DUtil_SetViewMatrix() -// Desc: Given an eye point, a lookat point, and an up vector, this -// function builds a 4x4 view matrix. -//----------------------------------------------------------------------------- -HRESULT D3DUtil_SetViewMatrix( D3DMATRIX& mat, D3DVECTOR& vFrom, - D3DVECTOR& vAt, D3DVECTOR& vWorldUp ) -{ - // Get the z basis vector, which points straight ahead. This is the - // difference from the eyepoint to the lookat point. - D3DVECTOR vView = vAt - vFrom; - - FLOAT fLength = Magnitude( vView ); - if( fLength < 1e-6f ) - return E_INVALIDARG; - - // Normalize the z basis vector - vView /= fLength; - - // Get the dot product, and calculate the projection of the z basis - // vector onto the up vector. The projection is the y basis vector. - FLOAT fDotProduct = DotProduct( vWorldUp, vView ); - - D3DVECTOR vUp = vWorldUp - fDotProduct * vView; - - // If this vector has near-zero length because the input specified a - // bogus up vector, let's try a default up vector - if( 1e-6f > ( fLength = Magnitude( vUp ) ) ) - { - vUp = D3DVECTOR( 0.0f, 1.0f, 0.0f ) - vView.y * vView; - - // If we still have near-zero length, resort to a different axis. - if( 1e-6f > ( fLength = Magnitude( vUp ) ) ) - { - vUp = D3DVECTOR( 0.0f, 0.0f, 1.0f ) - vView.z * vView; - - if( 1e-6f > ( fLength = Magnitude( vUp ) ) ) - return E_INVALIDARG; - } - } - - // Normalize the y basis vector - vUp /= fLength; - - // The x basis vector is found simply with the cross product of the y - // and z basis vectors - D3DVECTOR vRight = CrossProduct( vUp, vView ); - - // Start building the matrix. The first three rows contains the basis - // vectors used to rotate the view to point at the lookat point - D3DUtil_SetIdentityMatrix( mat ); - mat._11 = vRight.x; mat._12 = vUp.x; mat._13 = vView.x; - mat._21 = vRight.y; mat._22 = vUp.y; mat._23 = vView.y; - mat._31 = vRight.z; mat._32 = vUp.z; mat._33 = vView.z; - - // Do the translation values (rotations are still about the eyepoint) - mat._41 = - DotProduct( vFrom, vRight ); - mat._42 = - DotProduct( vFrom, vUp ); - mat._43 = - DotProduct( vFrom, vView ); - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DUtil_SetProjectionMatrix() -// Desc: Sets the passed in 4x4 matrix to a perpsective projection matrix built -// from the field-of-view (fov, in y), aspect ratio, near plane (D), -// and far plane (F). Note that the projection matrix is normalized for -// element [3][4] to be 1.0. This is performed so that W-based range fog -// will work correctly. -//----------------------------------------------------------------------------- -HRESULT D3DUtil_SetProjectionMatrix( D3DMATRIX& mat, FLOAT fFOV, FLOAT fAspect, - FLOAT fNearPlane, FLOAT fFarPlane ) -{ - if( fabs(fFarPlane-fNearPlane) < 0.01f ) - return E_INVALIDARG; - if( fabs(sin(fFOV/2)) < 0.01f ) - return E_INVALIDARG; - - FLOAT w = fAspect * (FLOAT)( cos(fFOV/2)/sin(fFOV/2) ); - FLOAT h = 1.0f * (FLOAT)( cos(fFOV/2)/sin(fFOV/2) ); - FLOAT Q = fFarPlane / ( fFarPlane - fNearPlane ); - - ZeroMemory( &mat, sizeof(D3DMATRIX) ); - mat._11 = w; - mat._22 = h; - mat._33 = Q; - mat._34 = 1.0f; - mat._43 = -Q*fNearPlane; - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DUtil_SetRotateXMatrix() -// Desc: Create Rotation matrix about X axis -//----------------------------------------------------------------------------- -VOID D3DUtil_SetRotateXMatrix( D3DMATRIX& mat, FLOAT fRads ) -{ - D3DUtil_SetIdentityMatrix( mat ); - mat._22 = (FLOAT)cos( fRads ); - mat._23 = (FLOAT)sin( fRads ); - mat._32 = -(FLOAT)sin( fRads ); - mat._33 = (FLOAT)cos( fRads ); -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DUtil_SetRotateYMatrix() -// Desc: Create Rotation matrix about Y axis -//----------------------------------------------------------------------------- -VOID D3DUtil_SetRotateYMatrix( D3DMATRIX& mat, FLOAT fRads ) -{ - D3DUtil_SetIdentityMatrix( mat ); - mat._11 = (FLOAT)cos( fRads ); - mat._13 = -(FLOAT)sin( fRads ); - mat._31 = (FLOAT)sin( fRads ); - mat._33 = (FLOAT)cos( fRads ); -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DUtil_SetRotateZMatrix() -// Desc: Create Rotation matrix about Z axis -//----------------------------------------------------------------------------- -VOID D3DUtil_SetRotateZMatrix( D3DMATRIX& mat, FLOAT fRads ) -{ - D3DUtil_SetIdentityMatrix( mat ); - mat._11 = (FLOAT)cos( fRads ); - mat._12 = (FLOAT)sin( fRads ); - mat._21 = -(FLOAT)sin( fRads ); - mat._22 = (FLOAT)cos( fRads ); -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DUtil_SetRotationMatrix -// Desc: Create a Rotation matrix about vector direction -//----------------------------------------------------------------------------- -VOID D3DUtil_SetRotationMatrix( D3DMATRIX& mat, D3DVECTOR& vDir, FLOAT fRads ) -{ - FLOAT fCos = (FLOAT)cos( fRads ); - FLOAT fSin = (FLOAT)sin( fRads ); - D3DVECTOR v = Normalize( vDir ); - - mat._11 = ( v.x * v.x ) * ( 1.0f - fCos ) + fCos; - mat._12 = ( v.x * v.y ) * ( 1.0f - fCos ) - (v.z * fSin); - mat._13 = ( v.x * v.z ) * ( 1.0f - fCos ) + (v.y * fSin); - - mat._21 = ( v.y * v.x ) * ( 1.0f - fCos ) + (v.z * fSin); - mat._22 = ( v.y * v.y ) * ( 1.0f - fCos ) + fCos ; - mat._23 = ( v.y * v.z ) * ( 1.0f - fCos ) - (v.x * fSin); - - mat._31 = ( v.z * v.x ) * ( 1.0f - fCos ) - (v.y * fSin); - mat._32 = ( v.z * v.y ) * ( 1.0f - fCos ) + (v.x * fSin); - mat._33 = ( v.z * v.z ) * ( 1.0f - fCos ) + fCos; - - mat._14 = mat._24 = mat._34 = 0.0f; - mat._41 = mat._42 = mat._43 = 0.0f; - mat._44 = 1.0f; -} - - - - -//----------------------------------------------------------------------------- -// Name: D3DUtil_GetDisplayDepth() -// Desc: Returns the depth of the current display mode. -//----------------------------------------------------------------------------- -DWORD D3DUtil_GetDisplayDepth( LPDIRECTDRAW4 pDD4 ) -{ - // If the caller did not supply a DDraw object, just create a temp one. - if( NULL == pDD4 ) - { - LPDIRECTDRAW pDD1; - if( FAILED( DirectDrawCreate( NULL, &pDD1, NULL ) ) ) - return 0L; - - HRESULT hr = pDD1->QueryInterface( IID_IDirectDraw4, (VOID**)&pDD4 ); - pDD1->Release(); - if( FAILED(hr) ) - return 0L; - } - else - pDD4->AddRef(); - - // Get the display mode description - DDSURFACEDESC2 ddsd; - ZeroMemory( &ddsd, sizeof(DDSURFACEDESC2) ); - ddsd.dwSize = sizeof(DDSURFACEDESC2); - pDD4->GetDisplayMode( &ddsd ); - pDD4->Release(); - - // Return the display mode's depth - return ddsd.ddpfPixelFormat.dwRGBBitCount; -} - - - - -//----------------------------------------------------------------------------- -// Name: _DbgOut() -// Desc: Outputs a message to the debug stream -//----------------------------------------------------------------------------- -HRESULT _DbgOut( TCHAR* strFile, DWORD dwLine, HRESULT hr, TCHAR* strMsg ) -{ - TCHAR buffer[256]; - sprintf( buffer, "%s(%ld): ", strFile, dwLine ); - OutputDebugString( buffer ); - OutputDebugString( strMsg ); - - if( hr ) - { - sprintf( buffer, "(hr=%08lx)\n", hr ); - OutputDebugString( buffer ); - } - - OutputDebugString( "\n" ); - - return hr; -} - diff --git a/arch/win32/d3dframe/d3dutil.h b/arch/win32/d3dframe/d3dutil.h deleted file mode 100644 index f26a6ced7..000000000 --- a/arch/win32/d3dframe/d3dutil.h +++ /dev/null @@ -1,110 +0,0 @@ -//----------------------------------------------------------------------------- -// File: D3DUtil.h -// -// Desc: Helper functions and typing shortcuts for Direct3D programming. -// -// -// Copyright (C) 1997 Microsoft Corporation. All rights reserved -//----------------------------------------------------------------------------- - -#ifndef D3DUTIL_H -#define D3DUTIL_H - -#include -#include - - -//----------------------------------------------------------------------------- -// Typing shortcuts for deleting and freeing objects. -//----------------------------------------------------------------------------- -#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } } -#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } } - - - - -//----------------------------------------------------------------------------- -// Short cut functions for creating and using DX structures -//----------------------------------------------------------------------------- -VOID D3DUtil_InitDeviceDesc( D3DDEVICEDESC& ddDevDesc ); -VOID D3DUtil_InitSurfaceDesc( DDSURFACEDESC2& ddsd, DWORD dwFlags=0, - DWORD dwCaps=0 ); -VOID D3DUtil_InitViewport( D3DVIEWPORT2& vdViewData, DWORD dwWidth=0, - DWORD dwHeight=0 ); -VOID D3DUtil_InitMaterial( D3DMATERIAL& mdMtrlData, FLOAT r=0.0f, FLOAT g=0.0f, - FLOAT b=0.0f ); -VOID D3DUtil_InitLight( D3DLIGHT& ldLightData, D3DLIGHTTYPE ltType, - FLOAT x=0.0f, FLOAT y=0.0f, FLOAT z=0.0f ); - - - - -//----------------------------------------------------------------------------- -// Miscellaneous helper functions -//----------------------------------------------------------------------------- -LPDIRECTDRAW4 D3DUtil_GetDirectDrawFromDevice( LPDIRECT3DDEVICE3 pd3dDevice ); -DWORD D3DUtil_GetDeviceMemoryType( LPDIRECT3DDEVICE3 pd3dDevice ); -DWORD D3DUtil_GetDisplayDepth( LPDIRECTDRAW4 pDD4=NULL ); - - - - -//----------------------------------------------------------------------------- -// D3D Matrix functions. For performance reasons, some functions are inline. -//----------------------------------------------------------------------------- -HRESULT D3DUtil_SetViewMatrix( D3DMATRIX& mat, D3DVECTOR& vFrom, - D3DVECTOR& vAt, D3DVECTOR& vUp ); -HRESULT D3DUtil_SetProjectionMatrix( D3DMATRIX& mat, FLOAT fFOV = 1.570795f, - FLOAT fAspect = 1.0f, - FLOAT fNearPlane = 1.0f, - FLOAT fFarPlane = 1000.0f ); - -inline VOID D3DUtil_SetIdentityMatrix( D3DMATRIX& m ) -{ - m._12 = m._13 = m._14 = m._21 = m._23 = m._24 = 0.0f; - m._31 = m._32 = m._34 = m._41 = m._42 = m._43 = 0.0f; - m._11 = m._22 = m._33 = m._44 = 1.0f; -} - -inline VOID D3DUtil_SetTranslateMatrix( D3DMATRIX& m, FLOAT tx, FLOAT ty, - FLOAT tz ) -{ D3DUtil_SetIdentityMatrix( m ); m._41 = tx; m._42 = ty; m._43 = tz; } - -inline VOID D3DUtil_SetTranslateMatrix( D3DMATRIX& m, D3DVECTOR& v ) -{ D3DUtil_SetTranslateMatrix( m, v.x, v.y, v.z ); } - -inline VOID D3DUtil_SetScaleMatrix( D3DMATRIX& m, FLOAT sx, FLOAT sy, - FLOAT sz ) -{ D3DUtil_SetIdentityMatrix( m ); m._11 = sx; m._22 = sy; m._33 = sz; } - -inline VOID SetScaleMatrix( D3DMATRIX& m, D3DVECTOR& v ) -{ D3DUtil_SetScaleMatrix( m, v.x, v.y, v.z ); } - -VOID D3DUtil_SetRotateXMatrix( D3DMATRIX& mat, FLOAT fRads ); -VOID D3DUtil_SetRotateYMatrix( D3DMATRIX& mat, FLOAT fRads ); -VOID D3DUtil_SetRotateZMatrix( D3DMATRIX& mat, FLOAT fRads ); -VOID D3DUtil_SetRotationMatrix( D3DMATRIX& mat, D3DVECTOR& vDir, - FLOAT fRads ); - - - - -//----------------------------------------------------------------------------- -// Debug printing support -//----------------------------------------------------------------------------- - -HRESULT _DbgOut( TCHAR*, DWORD, HRESULT, TCHAR* ); - -#if defined(DEBUG) | defined(_DEBUG) - #define DEBUG_MSG(str) _DbgOut( __FILE__, (DWORD)__LINE__, 0, str ) - #define DEBUG_ERR(hr,str) _DbgOut( __FILE__, (DWORD)__LINE__, hr, str ) -#else - #define DEBUG_MSG(str) (0L) - #define DEBUG_ERR(hr,str) (hr) -#endif - - - - -#endif // D3DUTIL_H - diff --git a/arch/win32/d3dframe/ddenum.cpp b/arch/win32/d3dframe/ddenum.cpp deleted file mode 100755 index a5ea67064..000000000 --- a/arch/win32/d3dframe/ddenum.cpp +++ /dev/null @@ -1,314 +0,0 @@ -//----------------------------------------------------------------------------- -// File: ddenum.cpp -// -// Desc: This sample demonstrates how to enumerate all of the devices and show -// the driver information about each. -// -// -// Copyright (c) 1998 Microsoft Corporation. All rights reserved. -//----------------------------------------------------------------------------- - -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -//----------------------------------------------------------------------------- -// Include files -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include "resource.h" - -//----------------------------------------------------------------------------- -// Local definitions -//----------------------------------------------------------------------------- -#define NAME "DDEnum" -#define TITLE "DirectDraw Enumeration Example" - -//----------------------------------------------------------------------------- -// Default settings -//----------------------------------------------------------------------------- -#define MAX_DEVICES 16 - -//----------------------------------------------------------------------------- -// Global Variables -//----------------------------------------------------------------------------- -int g_iMaxDevices = 0; -struct{ - DDDEVICEIDENTIFIER DeviceInfo; - DDDEVICEIDENTIFIER DeviceInfoHost; -} g_DeviceInfo[MAX_DEVICES]; - - - - -//----------------------------------------------------------------------------- -// Name: InitFail() -// Desc: This function is called if an initialization function fails -//----------------------------------------------------------------------------- -void -InitFail(LPCTSTR szError, ...) -{ - char szBuff[128]; - va_list vl; - - va_start(vl, szError); - vsprintf(szBuff, szError, vl); - MessageBox(NULL, szBuff, TITLE, MB_OK); - va_end(vl); -} - - - - -//----------------------------------------------------------------------------- -// Name: SetInfoDlgText() -// Desc: Update all of the text and buttons in the dialog -//----------------------------------------------------------------------------- -void -SetInfoDlgText(HWND hDlg, int iCurrent, DWORD dwHost) -{ - char szBuff[128]; - GUID *pGUID; - LPDDDEVICEIDENTIFIER pDI; - - if (dwHost == DDGDI_GETHOSTIDENTIFIER) - CheckRadioButton( hDlg, IDC_RADIO_DEVICE, IDC_RADIO_HOST, IDC_RADIO_HOST ); - else - CheckRadioButton( hDlg, IDC_RADIO_DEVICE, IDC_RADIO_DEVICE, IDC_RADIO_DEVICE ); - - pDI = &g_DeviceInfo[iCurrent].DeviceInfo; - if (dwHost == DDGDI_GETHOSTIDENTIFIER) - pDI = &g_DeviceInfo[iCurrent].DeviceInfoHost; - - wsprintf(szBuff, "Device information for device %d of %d",iCurrent + 1,g_iMaxDevices); - SetDlgItemText( hDlg, IDC_RADIO_DEVICE, szBuff); - - //Device ID stuff: - wsprintf(szBuff,"%08X",pDI->dwVendorId); - SetDlgItemText( hDlg, IDC_DWVENDORID, szBuff); - wsprintf(szBuff,"%08X",pDI->dwDeviceId); - SetDlgItemText( hDlg, IDC_DWDEVICEID, szBuff); - wsprintf(szBuff,"%08X",pDI->dwSubSysId); - SetDlgItemText( hDlg, IDC_DWSUBSYS, szBuff); - wsprintf(szBuff,"%08X",pDI->dwRevision); - SetDlgItemText( hDlg, IDC_DWREVISION, szBuff); - - //Driver version: - wsprintf(szBuff,"%d.%02d.%02d.%04d", - HIWORD(pDI->liDriverVersion.u.HighPart), - LOWORD(pDI->liDriverVersion.u.HighPart), - HIWORD(pDI->liDriverVersion.u.LowPart), - LOWORD(pDI->liDriverVersion.u.LowPart) ); - SetDlgItemText( hDlg, IDC_VERSION, szBuff); - - //Device description and HAL filename - SetDlgItemText( hDlg, IDC_DESCRIPTION, pDI->szDescription); - SetDlgItemText( hDlg, IDC_FILENAME, pDI->szDriver); - - //Unique driver/device identifier: - pGUID = &pDI->guidDeviceIdentifier; - wsprintf(szBuff, "%08X-%04X-%04X-%02X%02X%02X%02X%02X%02X%02X%02X", - pGUID->Data1, pGUID->Data2, pGUID->Data3, - pGUID->Data4[0], pGUID->Data4[1], pGUID->Data4[2], pGUID->Data4[3], - pGUID->Data4[4], pGUID->Data4[5], pGUID->Data4[6], pGUID->Data4[7]); - SetDlgItemText( hDlg, IDC_GUID, szBuff); - - // Change the state and style of the Prev and Next buttons if needed - if (0 == iCurrent) - { - // The Prev button should be disabled - SetFocus(GetDlgItem(hDlg, IDOK)); - SendDlgItemMessage( hDlg, IDC_PREV, BM_SETSTYLE, BS_PUSHBUTTON, TRUE); - SendMessage(hDlg, DM_SETDEFID, IDOK, 0); - EnableWindow(GetDlgItem(hDlg, IDC_PREV), FALSE); - } - else - if (IsWindowEnabled(GetDlgItem(hDlg, IDC_PREV)) == FALSE) - EnableWindow(GetDlgItem(hDlg, IDC_PREV), TRUE); - - if (iCurrent >= (g_iMaxDevices - 1)) - { - // The Next button should be disabled - SetFocus(GetDlgItem(hDlg, IDOK)); - SendDlgItemMessage( hDlg, IDC_NEXT, BM_SETSTYLE, BS_PUSHBUTTON, TRUE); - SendMessage(hDlg, DM_SETDEFID, IDOK, 0); - EnableWindow(GetDlgItem(hDlg, IDC_NEXT), FALSE); - } - else - if (IsWindowEnabled(GetDlgItem(hDlg, IDC_NEXT)) == FALSE) - EnableWindow(GetDlgItem(hDlg, IDC_NEXT), TRUE); -} - - - - -//----------------------------------------------------------------------------- -// Name: InfoDlgProc() -// Desc: The dialog window proc -//----------------------------------------------------------------------------- -LRESULT CALLBACK -InfoDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ -// RECT rc; - static int iCurrent = 0; - static DWORD dwHost = 0; - - switch (uMsg) - { - case WM_INITDIALOG: - // Setup the first devices text - SetInfoDlgText(hDlg, iCurrent, dwHost); - return TRUE; - case WM_COMMAND: - switch (HIWORD(wParam)) - { - case BN_CLICKED: - switch (LOWORD(wParam)) - { - case IDOK: - case IDCANCEL: - EndDialog(hDlg, TRUE); - return TRUE; - case IDC_PREV: - // Show the previous device - if (iCurrent) - iCurrent--; - SetInfoDlgText(hDlg, iCurrent, dwHost); - break; - case IDC_NEXT: - // Show the next device - if (iCurrent < g_iMaxDevices) - iCurrent++; - SetInfoDlgText(hDlg, iCurrent, dwHost); - break; - case IDC_RADIO_HOST: - case IDC_RADIO_DEVICE: - if (dwHost == DDGDI_GETHOSTIDENTIFIER ) - dwHost = 0; - else - dwHost = DDGDI_GETHOSTIDENTIFIER; - SetInfoDlgText(hDlg, iCurrent, dwHost); - break; - } - break; - } - break; - } - - return FALSE; -} - - - - -//----------------------------------------------------------------------------- -// Name: DDEnumCallbackEx() -// Desc: This callback gets the information for each device enumerated -//----------------------------------------------------------------------------- -BOOL WINAPI -DDEnumCallbackEx(GUID *pGUID, LPSTR pDescription, LPSTR pName, - LPVOID pContext, HMONITOR hm) -{ - LPDIRECTDRAW pDD; // DD1 interface, used to get DD4 interface - LPDIRECTDRAW4 pDD4 = NULL; // DirectDraw4 interface - HRESULT hRet; - - // Create the main DirectDraw object - hRet = DirectDrawCreate(pGUID, &pDD, NULL); - if (hRet != DD_OK) - { - InitFail("DirectDrawCreate FAILED"); - return DDENUMRET_CANCEL; - } - - // Fetch DirectDraw4 interface - hRet = pDD->QueryInterface(IID_IDirectDraw4, (LPVOID *)&pDD4); - if (hRet != DD_OK) - { - InitFail("QueryInterface FAILED"); - return DDENUMRET_CANCEL; - } - - // Get the device information and save it - hRet = pDD4->GetDeviceIdentifier(&g_DeviceInfo[g_iMaxDevices].DeviceInfo,0); - hRet = pDD4->GetDeviceIdentifier(&g_DeviceInfo[g_iMaxDevices].DeviceInfoHost,DDGDI_GETHOSTIDENTIFIER); - - // Finished with the DirectDraw object, so release it - if (pDD4) - pDD4->Release(); - - // Bump to the next open slot or finish the callbacks if full - if (g_iMaxDevices < MAX_DEVICES) - g_iMaxDevices++; - else - return DDENUMRET_CANCEL; - return DDENUMRET_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: DDEnumCallback() -// Desc: Old style callback retained for backwards compatibility -//----------------------------------------------------------------------------- -BOOL WINAPI -DDEnumCallback(GUID *pGUID, LPSTR pDescription, LPSTR pName, LPVOID context) -{ - return (DDEnumCallbackEx(pGUID, pDescription, pName, context, NULL)); -} - - - - -//----------------------------------------------------------------------------- -// Name: WinMain() -// Desc: Entry point to the program. Initializes everything and calls -// DirectDrawEnumerateEx() to get all of the device info. -//----------------------------------------------------------------------------- -int PASCAL -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - LPDIRECTDRAWENUMERATEEX pDirectDrawEnumerateEx; - HINSTANCE hDDrawDLL; - - // Do a GetModuleHandle and GetProcAddress in order to get the - // DirectDrawEnumerateEx function - hDDrawDLL = GetModuleHandle("DDRAW"); - if (!hDDrawDLL) - { - InitFail("LoadLibrary() FAILED"); - return -1; - } - pDirectDrawEnumerateEx = (LPDIRECTDRAWENUMERATEEX )GetProcAddress(hDDrawDLL,"DirectDrawEnumerateExA"); - if (pDirectDrawEnumerateEx) - { - pDirectDrawEnumerateEx(DDEnumCallbackEx, NULL, - DDENUM_ATTACHEDSECONDARYDEVICES | - DDENUM_DETACHEDSECONDARYDEVICES | - DDENUM_NONDISPLAYDEVICES); - } - else - { - // Old DirectDraw, so do it the old way - DirectDrawEnumerate(DDEnumCallback, NULL); - } - - if (0 == g_iMaxDevices) - { - InitFail("No devices to enumerate."); - return -1; - } - - // Bring up the dialog to show all the devices - DialogBox(hInstance, MAKEINTRESOURCE(IDD_DRIVERINFO), GetDesktopWindow(), (DLGPROC) InfoDlgProc); - - return 0; -} - - diff --git a/arch/win32/d3dframe/ddmm.h b/arch/win32/d3dframe/ddmm.h deleted file mode 100644 index c77dc9bda..000000000 --- a/arch/win32/d3dframe/ddmm.h +++ /dev/null @@ -1,21 +0,0 @@ -/*========================================================================== - * - * Copyright (C) 1995 Microsoft Corporation. All Rights Reserved. - * - * File: ddmm.cpp - * Content: Routines for using DirectDraw on a multimonitor system - * - ***************************************************************************/ - -#ifdef __cplusplus -extern "C" { /* Assume C declarations for C++ */ -#endif /* __cplusplus */ - -IDirectDraw * DirectDrawCreateFromDevice(LPSTR szDevice); -IDirectDraw * DirectDrawCreateFromWindow(HWND hwnd); -int DirectDrawDeviceFromWindow(HWND hwnd, LPSTR szDevice, RECT*prc); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - diff --git a/arch/win32/d3dframe/ddutil.h b/arch/win32/d3dframe/ddutil.h deleted file mode 100644 index 7be664611..000000000 --- a/arch/win32/d3dframe/ddutil.h +++ /dev/null @@ -1,24 +0,0 @@ -/*========================================================================== - * - * Copyright (C) 1998 Microsoft Corporation. All Rights Reserved. - * - * File: ddutil.cpp - * Content: Routines for loading bitmap and palettes from resources - * - ***************************************************************************/ - -#ifdef __cplusplus -extern "C" { /* Assume C declarations for C++ */ -#endif /* __cplusplus */ - -extern IDirectDrawPalette *DDLoadPalette(IDirectDraw4 *pdd, LPCSTR szBitmap); -extern IDirectDrawSurface4 *DDLoadBitmap(IDirectDraw4 *pdd, LPCSTR szBitmap, int dx, int dy); -extern HRESULT DDReLoadBitmap(IDirectDrawSurface4 *pdds, LPCSTR szBitmap); -extern HRESULT DDCopyBitmap(IDirectDrawSurface4 *pdds, HBITMAP hbm, int x, int y, int dx, int dy); -extern DWORD DDColorMatch(IDirectDrawSurface4 *pdds, COLORREF rgb); -extern HRESULT DDSetColorKey(IDirectDrawSurface4 *pdds, COLORREF rgb); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - diff --git a/arch/win32/d3dframe/ddutil2.h b/arch/win32/d3dframe/ddutil2.h deleted file mode 100644 index f826f2b28..000000000 --- a/arch/win32/d3dframe/ddutil2.h +++ /dev/null @@ -1,24 +0,0 @@ -/*========================================================================== - * - * Copyright (C) 1995 Microsoft Corporation. All Rights Reserved. - * - * File: ddutil.cpp - * Content: Routines for loading bitmap and palettes from resources - * - ***************************************************************************/ - -#ifdef __cplusplus -extern "C" { /* Assume C declarations for C++ */ -#endif /* __cplusplus */ - -extern IDirectDrawPalette * DDLoadPalette2(IDirectDraw2 *pdd, LPCSTR szBitmap); -extern IDirectDrawSurface3 * DDLoadBitmap2(IDirectDraw2 *pdd, LPCSTR szBitmap, int dx, int dy); -extern HRESULT DDReLoadBitmap2(IDirectDrawSurface3 *pdds, LPCSTR szBitmap); -extern HRESULT DDCopyBitmap2(IDirectDrawSurface3 *pdds, HBITMAP hbm, int x, int y, int dx, int dy); -extern DWORD DDColorMatch2(IDirectDrawSurface3 *pdds, COLORREF rgb); -extern HRESULT DDSetColorKey2(IDirectDrawSurface3 *pdds, COLORREF rgb); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - diff --git a/arch/win32/d3dframe/dsutil.h b/arch/win32/d3dframe/dsutil.h deleted file mode 100644 index 66d5363f6..000000000 --- a/arch/win32/d3dframe/dsutil.h +++ /dev/null @@ -1,216 +0,0 @@ -/*========================================================================== - * - * Copyright (C) 1995 Microsoft Corporation. All Rights Reserved. - * - * File: dsutil.cpp - * Content: Routines for dealing with sounds from resources - * - * - ***************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -/////////////////////////////////////////////////////////////////////////////// -// -// DSLoadSoundBuffer Loads an IDirectSoundBuffer from a Win32 resource in -// the current application. -// -// Params: -// pDS -- Pointer to an IDirectSound that will be used to create -// the buffer. -// -// lpName -- Name of WAV resource to load the data from. Can be a -// resource id specified using the MAKEINTRESOURCE macro. -// -// Returns an IDirectSoundBuffer containing the wave data or NULL on error. -// -// example: -// in the application's resource script (.RC file) -// Turtle WAV turtle.wav -// -// some code in the application: -// IDirectSoundBuffer *pDSB = DSLoadSoundBuffer(pDS, "Turtle"); -// -// if (pDSB) -// { -// IDirectSoundBuffer_Play(pDSB, 0, 0, DSBPLAY_TOEND); -// /* ... */ -// -/////////////////////////////////////////////////////////////////////////////// -IDirectSoundBuffer *DSLoadSoundBuffer(IDirectSound *pDS, LPCTSTR lpName); - -/////////////////////////////////////////////////////////////////////////////// -// -// DSReloadSoundBuffer Reloads an IDirectSoundBuffer from a Win32 resource in -// the current application. normally used to handle -// a DSERR_BUFFERLOST error. -// Params: -// pDSB -- Pointer to an IDirectSoundBuffer to be reloaded. -// -// lpName -- Name of WAV resource to load the data from. Can be a -// resource id specified using the MAKEINTRESOURCE macro. -// -// Returns a BOOL indicating whether the buffer was successfully reloaded. -// -// example: -// in the application's resource script (.RC file) -// Turtle WAV turtle.wav -// -// some code in the application: -// TryAgain: -// HRESULT hres = IDirectSoundBuffer_Play(pDSB, 0, 0, DSBPLAY_TOEND); -// -// if (FAILED(hres)) -// { -// if ((hres == DSERR_BUFFERLOST) && -// DSReloadSoundBuffer(pDSB, "Turtle")) -// { -// goto TryAgain; -// } -// /* deal with other errors... */ -// } -// -/////////////////////////////////////////////////////////////////////////////// -BOOL DSReloadSoundBuffer(IDirectSoundBuffer *pDSB, LPCTSTR lpName); - -/////////////////////////////////////////////////////////////////////////////// -// -// DSGetWaveResource Finds a WAV resource in a Win32 module. -// -// Params: -// hModule -- Win32 module handle of module containing WAV resource. -// Pass NULL to indicate current application. -// -// lpName -- Name of WAV resource to load the data from. Can be a -// resource id specified using the MAKEINTRESOURCE macro. -// -// ppWaveHeader-- Optional pointer to WAVEFORMATEX * to receive a pointer to -// the WAVEFORMATEX header in the specified WAV resource. -// Pass NULL if not required. -// -// ppbWaveData -- Optional pointer to BYTE * to receive a pointer to the -// waveform data in the specified WAV resource. Pass NULL if -// not required. -// -// pdwWaveSize -- Optional pointer to DWORD to receive the size of the -// waveform data in the specified WAV resource. Pass NULL if -// not required. -// -// Returns a BOOL indicating whether a valid WAV resource was found. -// -/////////////////////////////////////////////////////////////////////////////// -BOOL DSGetWaveResource(HMODULE hModule, LPCTSTR lpName, - WAVEFORMATEX **ppWaveHeader, BYTE **ppbWaveData, DWORD *pdwWaveSize); - -/////////////////////////////////////////////////////////////////////////////// -// -// HSNDOBJ Handle to a SNDOBJ object. -// -// SNDOBJs are implemented in dsutil as an example layer built on top -// of DirectSound. -// -// A SNDOBJ is generally used to manage individual -// sounds which need to be played multiple times concurrently. A -// SNDOBJ represents a queue of IDirectSoundBuffer objects which -// all refer to the same buffer memory. -// -// A SNDOBJ also automatically reloads the sound resource when -// DirectSound returns a DSERR_BUFFERLOST -// -/////////////////////////////////////////////////////////////////////////////// -#ifndef _HSNDOBJ_DEFINED -DECLARE_HANDLE32(HSNDOBJ); -#endif - -/////////////////////////////////////////////////////////////////////////////// -// -// SndObjCreate Loads a SNDOBJ from a Win32 resource in -// the current application. -// -// Params: -// pDS -- Pointer to an IDirectSound that will be used to create -// the SNDOBJ. -// -// lpName -- Name of WAV resource to load the data from. Can be a -// resource id specified using the MAKEINTRESOURCE macro. -// -// iConcurrent -- Integer representing the number of concurrent playbacks of -// to plan for. Attempts to play more than this number will -// succeed but will restart the least recently played buffer -// even if it is not finished playing yet. -// -// Returns an HSNDOBJ or NULL on error. -// -// NOTES: -// SNDOBJs automatically restore and reload themselves as required. -// -/////////////////////////////////////////////////////////////////////////////// -HSNDOBJ SndObjCreate(IDirectSound *pDS, LPCTSTR lpName, int iConcurrent); - -/////////////////////////////////////////////////////////////////////////////// -// -// SndObjDestroy Frees a SNDOBJ and releases all of its buffers. -// -// Params: -// hSO -- Handle to a SNDOBJ to free. -// -/////////////////////////////////////////////////////////////////////////////// -void SndObjDestroy(HSNDOBJ hSO); - -/////////////////////////////////////////////////////////////////////////////// -// -// SndObjPlay Plays a buffer in a SNDOBJ. -// -// Params: -// hSO -- Handle to a SNDOBJ to play a buffer from. -// -// dwPlayFlags -- Flags to pass to IDirectSoundBuffer::Play. It is not -// legal to play an SndObj which has more than one buffer -// with the DSBPLAY_LOOPING flag. Pass 0 to stop playback. -// -/////////////////////////////////////////////////////////////////////////////// -BOOL SndObjPlay(HSNDOBJ hSO, DWORD dwPlayFlags); - -/////////////////////////////////////////////////////////////////////////////// -// -// SndObjStop Stops one or more buffers in a SNDOBJ. -// -// Params: -// hSO -- Handle to a SNDOBJ to play a buffer from. -// -/////////////////////////////////////////////////////////////////////////////// -BOOL SndObjStop(HSNDOBJ hSO); - -/////////////////////////////////////////////////////////////////////////////// -// -// SndObjGetFreeBuffer returns one of the cloned buffers that is -// not currently playing -// -// Params: -// hSO -- Handle to a SNDOBJ -// -// NOTES: -// This function is provided so that callers can set things like pan etc -// before playing the buffer. -// -// EXAMPLE: -// ... -// -/////////////////////////////////////////////////////////////////////////////// -IDirectSoundBuffer *SndObjGetFreeBuffer(HSNDOBJ hSO); - -/////////////////////////////////////////////////////////////////////////////// -// -// helper routines -// -/////////////////////////////////////////////////////////////////////////////// - -BOOL DSFillSoundBuffer(IDirectSoundBuffer *pDSB, BYTE *pbWaveData, DWORD dwWaveSize); -BOOL DSParseWaveResource(void *pvRes, WAVEFORMATEX **ppWaveHeader, BYTE **ppbWaveData, DWORD *pdwWaveSize); - -#ifdef __cplusplus -} -#endif - diff --git a/arch/win32/d3dframe/lbprintf.h b/arch/win32/d3dframe/lbprintf.h deleted file mode 100644 index 63f1ad39e..000000000 --- a/arch/win32/d3dframe/lbprintf.h +++ /dev/null @@ -1,26 +0,0 @@ -/*========================================================================== - * - * Copyright (C) 1995 Microsoft Corporation. All Rights Reserved. - * - * File: lbprintf.h - * Content: list box printf header file - * - ***************************************************************************/ -#ifndef __LBPRINTF_INCLUDED__ - -#define __LBPRINTF_INCLUDED__ -#ifdef __cplusplus -extern "C" { -#endif -extern void LBCreate( HWND hWnd, DWORD pos ); -extern void LBSize( DWORD dwWidth, DWORD dwHeight ); -extern void LBClear( void ); -extern void __cdecl LBPrintf( LPSTR fmt, ... ); -extern void __cdecl LBPrintfDDRC( HRESULT rc, LPSTR fmt, ... ); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/arch/win32/d3dframe/resource.h b/arch/win32/d3dframe/resource.h deleted file mode 100644 index cd1a0cc38..000000000 --- a/arch/win32/d3dframe/resource.h +++ /dev/null @@ -1,32 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Developer Studio generated include file. -// Used by ddenum.rc -// -#define IDI_MAIN_ICON 101 -#define IDD_DRIVERINFO 102 -#define IDC_PREV 1001 -#define IDC_NEXT 1002 -#define IDC_DEVICEID 1003 -#define IDC_VERSION 1004 -#define IDC_DESCRIPTION 1005 -#define IDC_FILENAME 1006 -#define IDC_COUNT 1007 -#define IDC_GUID 1010 -#define IDC_DWVENDORID 1012 -#define IDC_DWDEVICEID 1014 -#define IDC_DWSUBSYS 1015 -#define IDC_DWREVISION 1016 -#define IDC_RADIO_DEVICE 1018 -#define IDC_RADIO_HOST 1019 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NO_MFC 1 -#define _APS_NEXT_RESOURCE_VALUE 103 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1020 -#define _APS_NEXT_SYMED_VALUE 103 -#endif -#endif diff --git a/arch/win32/d3dframe/userdlg.cpp b/arch/win32/d3dframe/userdlg.cpp deleted file mode 100755 index 5bf2bf840..000000000 --- a/arch/win32/d3dframe/userdlg.cpp +++ /dev/null @@ -1,383 +0,0 @@ -//----------------------------------------------------------------------------- -// File: UserDlg.cpp -// -// Desc: Support functions for the user select driver dialog. - -// Note: Since this code is destined for a static link library, the -// dialog dox is constructed manually. Otherwise, we would use a resource -// and save many lines of code. Manually constructing dialog boxes is not -// trivial and there are many issues (unicode, dword alignment, etc.) -// involved. -// -// -// Copyright (c) 1997-1998 Microsoft Corporation. All rights reserved. -//----------------------------------------------------------------------------- - -#include -#include "D3DEnum.h" -#include -#include "d3dutil.h" - - - -//----------------------------------------------------------------------------- -// Constants and function prototypes for the user select driver dialog -//----------------------------------------------------------------------------- -#define IDC_STATIC 0xffff -#define IDC_DRIVER_COMBO 1000 -#define IDC_DEVICE_COMBO 1001 -#define IDC_MODE_COMBO 1002 - - - - -//----------------------------------------------------------------------------- -// External variables (declared in the D3DEnum.cpp file) -//----------------------------------------------------------------------------- -extern D3DEnum_DriverInfo* g_pCurrentDriver; // The selected DD driver - - - - -//----------------------------------------------------------------------------- -// Name: CopyToWideChar -//----------------------------------------------------------------------------- -static VOID CopyToWideChar( WCHAR** pstrOut, LPTSTR strIn ) -{ - DWORD dwLen = lstrlen( strIn ); - WCHAR* strOut = *pstrOut; - -#ifdef UNICODE // Copy Unicode to Unicode - _wcsncpy( strOut, strIn, dwLen ); - strOut[dwLen] = L'\0'; -#else // Copy Ansi to Unicode - dwLen = MultiByteToWideChar( CP_ACP, 0, strIn, dwLen, strOut, dwLen ); - strOut[dwLen++] = L'\0'; // Add the null terminator -#endif - *pstrOut += dwLen; -} - - - - -//----------------------------------------------------------------------------- -// Name: AddDialogControl() -// Desc: Internal function to help build the user select dialog -//----------------------------------------------------------------------------- -static VOID AddDialogControl( WORD** pp, DWORD dwStyle, SHORT x, SHORT y, - SHORT cx, SHORT cy, WORD id, - LPTSTR strClassName, LPTSTR strTitle ) -{ - // DWORD align the current ptr - DLGITEMTEMPLATE* p = (DLGITEMTEMPLATE*)(((((ULONG)(*pp))+3)>>2)<<2); - - p->style = dwStyle | WS_CHILD | WS_VISIBLE; - p->dwExtendedStyle = 0L; - p->x = x; - p->y = y; - p->cx = cx; - p->cy = cy; - p->id = id; - - *pp = (WORD*)(++p); // Advance ptr - - CopyToWideChar( (WCHAR**)pp, strClassName ); // Set Class name - CopyToWideChar( (WCHAR**)pp, strTitle ); // Set Title - - (*pp)++; // Skip Extra Stuff -} - - - - -//----------------------------------------------------------------------------- -// Name: _BuildUserSelectDialog() -// Desc: Internal function to build the user select dialog -//----------------------------------------------------------------------------- -DLGTEMPLATE* _BuildDriverSelectTemplate() -{ - // Allocate ample memory for building the template - DLGTEMPLATE* pDlgTemplate = new DLGTEMPLATE[50]; - if( NULL == pDlgTemplate ) - return NULL; - ZeroMemory( pDlgTemplate, 50*sizeof(DLGTEMPLATE) ); - - // Fill in the DLGTEMPLATE info - DLGTEMPLATE* pdt = pDlgTemplate; - pdt->style = DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | - DS_3DLOOK | DS_CENTER | WS_POPUP | WS_VISIBLE | - WS_CAPTION | WS_SYSMENU | DS_SETFONT; - pdt->dwExtendedStyle = 0L; - pdt->cdit = 8; - pdt->x = 0; - pdt->y = 0; - pdt->cx = 179; - pdt->cy = 84; - - // Add menu array, class array, dlg title, font size and font name - WORD* pw = (WORD*)(++pdt); - *pw++ = L'\0'; // Set Menu array to nothing - *pw++ = L'\0'; // Set Class array to nothing - CopyToWideChar( (WCHAR**)&pw, TEXT( "Select New Direct3D Driver" ) ); // Dlg title - *pw++ = 8; // Font Size - CopyToWideChar( (WCHAR**)&pw, TEXT("Arial") ); // Font Name - - // Add the okay button - AddDialogControl( &pw, BS_PUSHBUTTON | WS_TABSTOP, 65, 65, 51, 14, - IDOK, TEXT("BUTTON"), TEXT("OK") ); - - // Add the cancel button - AddDialogControl( &pw, BS_PUSHBUTTON | WS_TABSTOP, 123, 65, 51, 14, - IDCANCEL, TEXT("BUTTON"), TEXT("Cancel") ); - - // Add the driver select combobox - AddDialogControl( &pw, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP, - 36, 5, 138, 45, - IDC_DRIVER_COMBO, TEXT("COMBOBOX"), TEXT("") ); - - // Add the device select combobox - AddDialogControl( &pw, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP, - 36, 24, 138, 45, - IDC_DEVICE_COMBO, TEXT("COMBOBOX"), TEXT("") ); - - // Add the mode select combobox - AddDialogControl( &pw, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP, - 36, 44, 138, 45, - IDC_MODE_COMBO, TEXT("COMBOBOX"), TEXT("") ); - - // Add the "Driver:" text - AddDialogControl( &pw, SS_LEFT, 5, 5, 22, 13, - IDC_STATIC, TEXT("STATIC"), TEXT("Driver:") ); - - // Add the "Device:" text - AddDialogControl( &pw, SS_LEFT, 5, 24, 25, 13, - IDC_STATIC, TEXT("STATIC"), TEXT("Device:") ); - - // Add the "Mode:" text - AddDialogControl( &pw, SS_LEFT, 5, 44, 22, 13, - IDC_STATIC, TEXT("STATIC"), TEXT("Mode:") ); - - return pDlgTemplate; -} - - - - -//----------------------------------------------------------------------------- -// Name: UpdateComboBoxesContent() -// Desc: Builds the list of drivers, devices and modes for the combo boxes -// in the driver select dialog box. -//----------------------------------------------------------------------------- -static VOID UpdateComboBoxesContent( HWND hDlg, - D3DEnum_DriverInfo** ppCurrentDriver, - D3DEnum_DeviceInfo** ppCurrentDevice, - D3DEnum_ModeInfo** ppCurrentMode, - BOOL bWindowed ) -{ - // Check the parameters - if( (NULL==ppCurrentDriver) || (NULL==ppCurrentDevice) || - (NULL==ppCurrentMode) ) - return; - - // If the specified driver is NULL, use the first one in the list - if( NULL == *ppCurrentDriver) - (*ppCurrentDriver) = D3DEnum_GetFirstDriver(); - - // If the specified device is NULL, use the first one in the list - if( NULL == *ppCurrentDevice) - (*ppCurrentDevice) = (*ppCurrentDriver)->pFirstDevice; - - // Reset the content in each of the combo boxes - SendDlgItemMessage( hDlg, IDC_DRIVER_COMBO, CB_RESETCONTENT, 0, 0 ); - SendDlgItemMessage( hDlg, IDC_DEVICE_COMBO, CB_RESETCONTENT, 0, 0 ); - SendDlgItemMessage( hDlg, IDC_MODE_COMBO, CB_RESETCONTENT, 0, 0 ); - - // Build the list of drivers for the combo box - for( D3DEnum_DriverInfo* pDriver = D3DEnum_GetFirstDriver(); pDriver; - pDriver = pDriver->pNext ) - { - // Add driver desc to the combo box - DWORD dwItem = SendDlgItemMessage( hDlg, IDC_DRIVER_COMBO, - CB_ADDSTRING, 0, (LPARAM)pDriver->strDesc ); - - // Associate DriverInfo ptr with the item in the combo box - SendDlgItemMessage( hDlg, IDC_DRIVER_COMBO, CB_SETITEMDATA, - (WPARAM)dwItem, (LPARAM)pDriver ); - - // If this is the current driver, set is as the current selection - if( pDriver == (*ppCurrentDriver) ) - SendDlgItemMessage( hDlg, IDC_DRIVER_COMBO, CB_SETCURSEL, - (WPARAM)dwItem, 0L ); - } - - // Build the list of devices for the combo box - for( D3DEnum_DeviceInfo* pDevice = (*ppCurrentDriver)->pFirstDevice; pDevice; - pDevice = pDevice->pNext ) - { - // Add device name to the combo box - DWORD dwItem = SendDlgItemMessage( hDlg, IDC_DEVICE_COMBO, - CB_ADDSTRING, 0, (LPARAM)pDevice->strName ); - - // Associate DeviceInfo ptr with the item in the combo box - SendDlgItemMessage( hDlg, IDC_DEVICE_COMBO, CB_SETITEMDATA, - (WPARAM)dwItem, (LPARAM)pDevice ); - - // If this is the current device, set this as the current selection - if( pDevice == (*ppCurrentDevice) ) - SendDlgItemMessage( hDlg, IDC_DEVICE_COMBO, CB_SETCURSEL, - (WPARAM)dwItem, 0L ); - } - - if( (*ppCurrentDriver)->ddDriverCaps.dwCaps2 & DDCAPS2_CANRENDERWINDOWED - && ( NULL == (*ppCurrentDriver)->pGUID ) - && (*ppCurrentDevice)->bCompatbileWithDesktop ) - { - // Add windowed mode to the combo box of available modes - DWORD dwItem = SendDlgItemMessage( hDlg, IDC_MODE_COMBO, - CB_ADDSTRING, 0, (LPARAM)TEXT("Windowed mode") ); - - // Associate ModeInfo ptr with the item in the combo box - SendDlgItemMessage( hDlg, IDC_MODE_COMBO, CB_SETITEMDATA, - (WPARAM)dwItem, (LPARAM)NULL ); - - // If the current device is windowed, set this as current - if( bWindowed ) - SendDlgItemMessage( hDlg, IDC_MODE_COMBO, CB_SETCURSEL, - (WPARAM)dwItem, 0L ); - } - - // Build the list of modes for the combo box - for( D3DEnum_ModeInfo* pMode = (*ppCurrentDevice)->pFirstMode; pMode; - pMode = pMode->pNext ) - { - // Add mode desc to the combo box - DWORD dwItem = SendDlgItemMessage( hDlg, IDC_MODE_COMBO, - CB_ADDSTRING, 0, - (LPARAM)pMode->strDesc ); - - // Associate ModeInfo ptr with the item in the combo box - SendDlgItemMessage( hDlg, IDC_MODE_COMBO, CB_SETITEMDATA, - (WPARAM)dwItem, (LPARAM)pMode ); - - // If this is the current mode, set is as the current selection - if( !bWindowed && ( pMode == (*ppCurrentMode) ) ) - SendDlgItemMessage( hDlg, IDC_MODE_COMBO, CB_SETCURSEL, - (WPARAM)dwItem, 0L ); - } -} - - - - -//----------------------------------------------------------------------------- -// Name: _DriverSelectProc() -// Desc: Windows message handling function for the driver select dialog -//----------------------------------------------------------------------------- -BOOL CALLBACK _DriverSelectProc( HWND hDlg, UINT uiMsg, WPARAM wParam, - LPARAM lParam ) -{ - static D3DEnum_DriverInfo *pOldDriver, *pNewDriver; - static D3DEnum_DeviceInfo *pOldDevice, *pNewDevice; - static D3DEnum_ModeInfo *pOldMode, *pNewMode; - static BOOL bOldWindowed, bNewWindowed; - - // Handle the initialization message - if( WM_INITDIALOG == uiMsg ) - { - // Setup temp storage pointers for dialog - pNewDriver = pOldDriver = g_pCurrentDriver; - pNewDevice = pOldDevice = pOldDriver->pCurrentDevice; - pNewMode = pOldMode = pOldDevice->pCurrentMode; - bNewWindowed = bOldWindowed = pOldDevice->bWindowed; - - UpdateComboBoxesContent( hDlg, &pOldDriver, &pOldDevice, - &pOldMode, bOldWindowed ); - return TRUE; - } - - if( WM_COMMAND == uiMsg ) - { - // Handle the case when the user hits the OK button - if( IDOK == LOWORD(wParam) ) - { - // Check if any of the options were changed - if( ( pOldDriver != pNewDriver ) || ( pOldDevice != pNewDevice ) || - ( pOldMode != pNewMode ) || ( bOldWindowed != bNewWindowed ) ) - { - // Set actual ptrs from the temp ptrs used for the dialog - g_pCurrentDriver = pNewDriver; - g_pCurrentDriver->pCurrentDevice = pNewDevice; - g_pCurrentDriver->pCurrentDevice->pCurrentMode = pNewMode; - g_pCurrentDriver->pCurrentDevice->bWindowed = bNewWindowed; - - EndDialog( hDlg, IDOK ); - return TRUE; - } - else - { - EndDialog( hDlg, IDCANCEL ); - return TRUE; - } - } - - // Handle the case when the user hits the Cancel button - else if( IDCANCEL == LOWORD(wParam) ) - { - EndDialog( hDlg, IDCANCEL ); - return TRUE; - } - - // Handle the case when the user chooses an item in the combo boxes. - else if( CBN_SELENDOK == HIWORD(wParam) ) - { - DWORD dwIndex = SendMessage( (HWND)lParam, CB_GETCURSEL, - 0, 0 ); - LONG pNewObject = SendMessage( (HWND)lParam, CB_GETITEMDATA, - dwIndex, 0 ); - - if( (CB_ERR==dwIndex) ) - return TRUE; - - // Handle the case where one of these may have changed. The - // combo boxes will need to be updated to reflect the changes. - switch( LOWORD( wParam ) ) - { - case IDC_DRIVER_COMBO: - if( pNewObject && pNewObject != (LONG)pNewDriver ) - { - pNewDriver = (D3DEnum_DriverInfo*)pNewObject; - pNewDevice = pNewDriver->pCurrentDevice;; - pNewMode = pNewDevice->pCurrentMode; - bNewWindowed = pNewDevice->bWindowed; - } - break; - case IDC_DEVICE_COMBO: - if( pNewObject && pNewObject != (LONG)pNewDevice ) - { - pNewDevice = (D3DEnum_DeviceInfo*)pNewObject; - pNewMode = pNewDevice->pCurrentMode; - bNewWindowed = pNewDevice->bWindowed; - } - break; - case IDC_MODE_COMBO: - if( pNewObject ) - { - pNewMode = (D3DEnum_ModeInfo*)pNewObject; - bNewWindowed = FALSE; - } - else - bNewWindowed = TRUE; - break; - } - - UpdateComboBoxesContent( hDlg, &pNewDriver, &pNewDevice, - &pNewMode, bNewWindowed ); - - return TRUE; - } - } - return FALSE; -} - - - diff --git a/arch/win32/debug.cpp b/arch/win32/debug.cpp deleted file mode 100755 index f823ced01..000000000 --- a/arch/win32/debug.cpp +++ /dev/null @@ -1,1168 +0,0 @@ -/* -**----------------------------------------------------------------------------- -** Name: Debug.cpp -** Purpose: Example debug code for D3D sample -** Notes: -** -** Copyright (C) 199 - 1997 Microsoft Corporation. All Rights Reserved. -**----------------------------------------------------------------------------- -*/ - -/* -**----------------------------------------------------------------------------- -** Includes -**----------------------------------------------------------------------------- -*/ - -#include "pch.h" -#include "Debug.h" -extern "C" { -#include "WinMain.h" -} - - -/* -**----------------------------------------------------------------------------- -** Global variables -**----------------------------------------------------------------------------- -*/ -#define MAX_STRING 256 - -#ifndef NDEBUG - DWORD g_dwDebugLevel = DEBUG_ALWAYS; - BOOL g_fDebug = TRUE; -#else - BOOL g_fDebug = FALSE; -#endif - - - -/* -**----------------------------------------------------------------------------- -** Local prototypes -**----------------------------------------------------------------------------- -*/ - -extern "C" -BOOL GetDDErrorString (HRESULT hResult, LPTSTR lpszError, DWORD cchError); - - - -/* -**----------------------------------------------------------------------------- -** Functions -**----------------------------------------------------------------------------- -*/ - - -/* -**----------------------------------------------------------------------------- -** Name: dprintf -** Purpose: Printf to debug output -**----------------------------------------------------------------------------- -*/ - -#ifndef NDEBUG -void __cdecl dprintf (DWORD dwDebugLevel, LPCTSTR szFormat, ...) -{ - TCHAR szBuffer[MAX_STRING]; - va_list va; - - // Check if current debug level - if (dwDebugLevel < g_dwDebugLevel) - return; - - lstrcpy (szBuffer, START_STR); - va_start(va, szFormat); - wvsprintf (szBuffer+lstrlen (szBuffer), szFormat, va); - va_end(va); - lstrcat (szBuffer, END_STR); - OutputDebugString (szBuffer); -} -#endif // NDEBUG - - - -/* -**----------------------------------------------------------------------------- -** Name: ReportDDError -** Purpose: -**----------------------------------------------------------------------------- -*/ - -void _cdecl ReportDDError (HRESULT hResult, LPCTSTR szFormat, ...) -{ - TCHAR szMsg[MAX_STRING]; - TCHAR szErr[MAX_STRING]; - TCHAR szUnknown[] = TEXT("Unknown"); - DWORD cchErr = sizeof(szErr)/sizeof(TCHAR); - va_list va; - - // Check for Success Error code - if (hResult == DD_OK) - return; - - va_start( va, szFormat ); - wvsprintf (szMsg, szFormat, va); - va_end( va ); - - // Get DD/D3D error string - szErr[0] = 0; - GetDDErrorString (hResult, szErr, cchErr); - wsprintf (szMsg + strlen (szMsg), TEXT(" : DD/D3D Error = %s\r\n"), szErr); - - - // Dump to debugger - DPF (DEBUG_ERROR, TEXT("%s"), szMsg); - - // - // Define the following if you want an in your face Messagebox on errors - // -//#define DEBUG_PROMPTME -#ifdef DEBUG_PROMPTME - HWND hWindow; - - // Pause App - if (g_hWnd) - OnPause (g_hWnd, TRUE); - - // Display Error Message to user - if (g_hWnd) - hWindow = g_hWnd; - else - hWindow = NULL; - - MessageBox (hWindow, szMsg, g_szMainTitle, MB_OK | MB_APPLMODAL); - - // Unpause app - if (g_hWnd) - OnPause (g_hWnd, FALSE); -#endif - -} // ReportDDError - - -#ifndef NDEBUG -ULONG CDebugTracker::s_cLevels = 0; -char CDebugTracker::szsp [80]; - -CDebugTracker::CDebugTracker (LPCSTR lpsz) -{ - m_psz = strdup (lpsz); - m_bReturned = FALSE; - - szsp [s_cLevels] = '/'; - szsp [s_cLevels + 1] = '\0'; - DPF (DEBUG_ALWAYS, "%s%s start", szsp, m_psz); - szsp [s_cLevels] = '|'; - s_cLevels++; -} - -CDebugTracker::~CDebugTracker () -{ - s_cLevels--; - if (!m_bReturned) - { - szsp [s_cLevels + 1] = '\0'; - szsp [s_cLevels] = '\\'; - DPF (DEBUG_ALWAYS, "%s%s end", szsp, m_psz); - } - free ((LPVOID) m_psz); -} - -void __cdecl Return (LPCSTR szFormat, ...) -{ -} -#endif - -/* -**----------------------------------------------------------------------------- -** Name: GetDDErrorString -** Purpose: outputs a debug string to debugger -**----------------------------------------------------------------------------- -*/ - -extern "C" -BOOL GetDDErrorString (HRESULT hResult, LPTSTR lpszErrorBuff, DWORD cchError) -{ - DWORD cLen; - LPTSTR lpszError; - TCHAR szMsg[MAX_STRING]; - - // Check parameters - if (!lpszErrorBuff || !cchError) - { - // Error, invalid parameters - return FALSE; - } - - switch (hResult) - { - case DD_OK: - // The request completed successfully. - lpszError = TEXT("DD_OK"); - break; - - case DDERR_ALREADYINITIALIZED: - // The object has already been initialized. - lpszError = TEXT("DDERR_ALREADYINITIALIZED"); - break; - - case DDERR_BLTFASTCANTCLIP: - // A DirectDrawClipper object is attached to a source surface - // that has passed into a call to the IDirectDrawSurface4::BltFast method. - lpszError = TEXT("DDERR_BLTFASTCANTCLIP"); - break; - - case DDERR_CANNOTATTACHSURFACE: - // A surface cannot be attached to another requested surface. - lpszError = TEXT("DDERR_CANNOTATTACHSURFACE"); - break; - - case DDERR_CANNOTDETACHSURFACE: - // A surface cannot be detached from another requested surface. - lpszError = TEXT("DDERR_CANNOTDETACHSURFACE"); - break; - - case DDERR_CANTCREATEDC: - // Windows cannot create any more device contexts (DCs). - lpszError = TEXT("DDERR_CANTCREATEDC"); - break; - - case DDERR_CANTDUPLICATE: - // Primary and 3D surfaces, or surfaces that are - // implicitly created, cannot be duplicated. - lpszError = TEXT("DDERR_CANTDUPLICATE"); - break; - - case DDERR_CANTLOCKSURFACE: - // Access to this surface is refused because an - // attempt was made to lock the primary surface without DCI support. - lpszError = TEXT("DDERR_CANTLOCKSURFACE"); - break; - - case DDERR_CANTPAGELOCK: - // An attempt to page lock a surface failed. - // Page lock will not work on a display-memory - // surface or an emulated primary surface. - lpszError = TEXT("DDERR_CANTPAGELOCK"); - break; - - case DDERR_CANTPAGEUNLOCK: - // An attempt to page unlock a surface failed. - // Page unlock will not work on a display-memory - // surface or an emulated primary surface. - lpszError = TEXT("DDERR_CANTPAGEUNLOCK"); - break; - - case DDERR_CLIPPERISUSINGHWND: - // An attempt was made to set a clip list for a DirectDrawClipper - // object that is already monitoring a window handle. - lpszError = TEXT("DDERR_CLIPPERISUSINGHWND"); - break; - - case DDERR_COLORKEYNOTSET: - // No source color key is specified for this operation - lpszError = TEXT("DDERR_COLORKEYNOTSET"); - break; - - case DDERR_CURRENTLYNOTAVAIL: - // No support is currently available. - lpszError = TEXT("DDERR_CURRENTLYNOTAVAIL"); - break; - - case DDERR_DCALREADYCREATED: - // A device context (DC) has already been returned for this surface. - // Only one DC can be retrieved for each surface. - lpszError = TEXT("DDERR_DCALREADYCREATED"); - break; - - case DDERR_DIRECTDRAWALREADYCREATED: - // A DirectDraw object representing this driver - // has already been created for this process. - lpszError = TEXT("DDERR_DIRECTDRAWALREADYCREATED"); - break; - - case DDERR_EXCEPTION: - // An exception was encountered while - // performing the requested operation. - lpszError = TEXT("DDERR_EXCEPTION"); - break; - - case DDERR_EXCLUSIVEMODEALREADYSET: - // An attempt was made to set the cooperative - // level when it was already set to exclusive. - lpszError = TEXT("DDERR_EXCLUSIVEMODEALREADYSET"); - break; - - case DDERR_GENERIC: - // There is an undefined error condition. - lpszError = TEXT("DDERR_GENERIC"); - break; - - case DDERR_HEIGHTALIGN: - // The height of the provided rectangle - // is not a multiple of the required alignment. - lpszError = TEXT("DDERR_HEIGHTALIGN"); - break; - - case DDERR_HWNDALREADYSET: - // The DirectDraw cooperative level window - // handle has already been set. It cannot - // be reset while the process has surfaces or palettes created. - lpszError = TEXT("DDERR_HWNDALREADYSET"); - break; - - case DDERR_HWNDSUBCLASSED: - // DirectDraw is prevented from restoring state because the - // DirectDraw cooperative level window handle has been subclassed. - lpszError = TEXT("DDERR_HWNDSUBCLASSED"); - break; - - case DDERR_IMPLICITLYCREATED: - // The surface cannot be restored because - // it is an implicitly created surface. - lpszError = TEXT("DDERR_IMPLICITLYCREATED"); - break; - - case DDERR_INCOMPATIBLEPRIMARY: - // The primary surface creation request - // does not match with the existing primary surface. - lpszError = TEXT("DDERR_INCOMPATIBLEPRIMARY"); - break; - - case DDERR_INVALIDCAPS: - // One or more of the capability bits - // passed to the callback function are incorrect. - lpszError = TEXT("DDERR_INVALIDCAPS"); - break; - - case DDERR_INVALIDCLIPLIST: - // DirectDraw does not support the provided clip list. - lpszError = TEXT("DDERR_INVALIDCLIPLIST"); - break; - - case DDERR_INVALIDDIRECTDRAWGUID: - // The globally unique identifier (GUID) passed to the - // DirectDrawCreate function is not a valid DirectDraw driver identifier. - lpszError = TEXT("DDERR_INVALIDDIRECTDRAWGUID"); - break; - - case DDERR_INVALIDMODE: - // DirectDraw does not support the requested mode. - lpszError = TEXT("DDERR_INVALIDMODE"); - break; - - case DDERR_INVALIDOBJECT: - // DirectDraw received a pointer that was an invalid DirectDraw object. - lpszError = TEXT("DDERR_INVALIDOBJECT"); - break; - - case DDERR_INVALIDPARAMS: - // One or more of the parameters passed to the method are incorrect. - lpszError = TEXT("DDERR_INVALIDPARAMS"); - break; - - case DDERR_INVALIDPIXELFORMAT: - // The pixel format was invalid as specified. - lpszError = TEXT("DDERR_INVALIDPIXELFORMAT"); - break; - - case DDERR_INVALIDPOSITION: - // The position of the overlay on the destination is no longer legal. - lpszError = TEXT("DDERR_INVALIDPOSITION"); - break; - - case DDERR_INVALIDRECT: - // The provided rectangle was invalid. - lpszError = TEXT("DDERR_INVALIDRECT"); - break; - - case DDERR_INVALIDSURFACETYPE: - // The requested operation could not be performed - // because the surface was of the wrong type. - lpszError = TEXT("DDERR_INVALIDSURFACETYPE"); - break; - - case DDERR_LOCKEDSURFACES: - // One or more surfaces are locked, - // causing the failure of the requested operation. - lpszError = TEXT("DDERR_LOCKEDSURFACES"); - break; - - case DDERR_MOREDATA: - // There is more data available than the specified - // buffer size could hold. - lpszError = TEXT("DDERR_MOREDATA"); - break; - - case DDERR_NO3D: - // No 3D hardware or emulation is present. - lpszError = TEXT("DDERR_NO3D"); - break; - - case DDERR_NOALPHAHW: - // No alpha acceleration hardware is present or available, - // causing the failure of the requested operation. - lpszError = TEXT("DDERR_NOALPHAHW"); - break; - - case DDERR_NOBLTHW: - // No blitter hardware is present. - lpszError = TEXT("DDERR_NOBLTHW"); - break; - - case DDERR_NOCLIPLIST: - // No clip list is available. - lpszError = TEXT("DDERR_NOCLIPLIST"); - break; - - case DDERR_NOCLIPPERATTACHED: - // No DirectDrawClipper object is attached to the surface object. - lpszError = TEXT("DDERR_NOCLIPPERATTACHED"); - break; - - case DDERR_NOCOLORCONVHW: - // The operation cannot be carried out because - // no color-conversion hardware is present or available. - lpszError = TEXT("DDERR_NOCOLORCONVHW"); - break; - - case DDERR_NOCOLORKEY: - // The surface does not currently have a color key. - lpszError = TEXT("DDERR_NOCOLORKEY"); - break; - - case DDERR_NOCOLORKEYHW: - // The operation cannot be carried out because there - // is no hardware support for the destination color key. - lpszError = TEXT("DDERR_NOCOLORKEYHW"); - break; - - case DDERR_NOCOOPERATIVELEVELSET: - // A create function is called without the - // IDirectDraw2::SetCooperativeLevel method being called. - lpszError = TEXT("DDERR_NOCOOPERATIVELEVELSET"); - break; - - case DDERR_NODC: - // No DC has ever been created for this surface. - lpszError = TEXT("DDERR_NODC"); - break; - - case DDERR_NODDROPSHW: - // No DirectDraw raster operation (ROP) hardware is available. - lpszError = TEXT("DDERR_NODDROPSHW"); - break; - - case DDERR_NODIRECTDRAWHW: - // Hardware-only DirectDraw object creation is not possible; - // the driver does not support any hardware. - lpszError = TEXT("DDERR_NODIRECTDRAWHW"); - break; - - case DDERR_NODIRECTDRAWSUPPORT: - // DirectDraw support is not possible with the current display driver. - lpszError = TEXT("DDERR_NODIRECTDRAWSUPPORT"); - break; - - case DDERR_NOEMULATION: - // Software emulation is not available. - lpszError = TEXT("DDERR_NOEMULATION"); - break; - - case DDERR_NOEXCLUSIVEMODE: - // The operation requires the application to have - // exclusive mode, but the application does not have exclusive mode. - lpszError = TEXT("DDERR_NOEXCLUSIVEMODE"); - break; - - case DDERR_NOFLIPHW: - // Flipping visible surfaces is not supported. - lpszError = TEXT("DDERR_NOFLIPHW"); - break; - - case DDERR_NOGDI: - // No GDI is present. - lpszError = TEXT("DDERR_NOGDI"); - break; - - case DDERR_NOHWND: - // Clipper notification requires a window handle, - // or no window handle has been previously set - // as the cooperative level window handle. - lpszError = TEXT("DDERR_NOHWND"); - break; - - case DDERR_NOMIPMAPHW: - // The operation cannot be carried out because no - // mipmap texture mapping hardware is present or available. - lpszError = TEXT("DDERR_NOMIPMAPHW"); - break; - - case DDERR_NOMIRRORHW: - // The operation cannot be carried out because - // no mirroring hardware is present or available. - lpszError = TEXT("DDERR_NOMIRRORHW"); - break; - - case DDERR_NONONLOCALVIDMEM: - // An attempt was made to allocate non-local video memory - // from a device that does not support non-local video memory. - lpszError = TEXT("DDERR_NONONLOCALVIDMEM"); - break; - - case DDERR_NOOVERLAYDEST: - // The IDirectDrawSurface4::GetOverlayPosition method - // is called on an overlay that the IDirectDrawSurface4::UpdateOverlay - // method has not been called on to establish a destination. - lpszError = TEXT("DDERR_NOOVERLAYDEST"); - break; - - case DDERR_NOOVERLAYHW: - // The operation cannot be carried out because - // no overlay hardware is present or available. - lpszError = TEXT("DDERR_NOOVERLAYHW"); - break; - - case DDERR_NOPALETTEATTACHED: - // No palette object is attached to this surface. - lpszError = TEXT("DDERR_NOPALETTEATTACHED"); - break; - - case DDERR_NOPALETTEHW: - // There is no hardware support for 16- or 256-color palettes. - lpszError = TEXT("DDERR_NOPALETTEHW"); - break; - - case DDERR_NORASTEROPHW: - // The operation cannot be carried out because - // no appropriate raster operation hardware is present or available. - lpszError = TEXT("DDERR_NORASTEROPHW"); - break; - - case DDERR_NOROTATIONHW: - // The operation cannot be carried out because - // no rotation hardware is present or available. - lpszError = TEXT("DDERR_NOROTATIONHW"); - break; - - case DDERR_NOSTRETCHHW: - // The operation cannot be carried out because - // there is no hardware support for stretching. - lpszError = TEXT("DDERR_NOSTRETCHHW"); - break; - - case DDERR_NOT4BITCOLOR: - // The DirectDrawSurface object is not using a - // 4-bit color palette and the requested operation - // requires a 4-bit color palette. - lpszError = TEXT("DDERR_NOT4BITCOLOR"); - break; - - case DDERR_NOT4BITCOLORINDEX: - // The DirectDrawSurface object is not using a 4-bit - // color index palette and the requested operation - // requires a 4-bit color index palette. - lpszError = TEXT("DDERR_NOT4BITCOLORINDEX"); - break; - - case DDERR_NOT8BITCOLOR: - // The DirectDrawSurface object is not using an 8-bit - // color palette and the requested operation requires - // an 8-bit color palette. - lpszError = TEXT("DDERR_NOT8BITCOLOR"); - break; - - case DDERR_NOTAOVERLAYSURFACE: - // An overlay component is called for a non-overlay surface. - lpszError = TEXT("DDERR_NOTAOVERLAYSURFACE"); - break; - - case DDERR_NOTEXTUREHW: - // The operation cannot be carried out because no - // texture-mapping hardware is present or available. - lpszError = TEXT("DDERR_NOTEXTUREHW"); - break; - - case DDERR_NOTFLIPPABLE: - // An attempt has been made to flip a surface that cannot be flipped. - lpszError = TEXT("DDERR_NOTFLIPPABLE"); - break; - - case DDERR_NOTFOUND: - // The requested item was not found. - lpszError = TEXT("DDERR_NOTFOUND"); - break; - - case DDERR_NOTINITIALIZED: - // An attempt was made to call an interface method of a DirectDraw object - // created by CoCreateInstance before the object was initialized. - lpszError = TEXT("DDERR_NOTINITIALIZED"); - break; - - case DDERR_NOTLOCKED: - // An attempt is made to unlock a surface that was not locked. - lpszError = TEXT("DDERR_NOTLOCKED"); - break; - - case DDERR_NOTPAGELOCKED: - // An attempt is made to page unlock a surface - // with no outstanding page locks. - lpszError = TEXT("DDERR_NOTPAGELOCKED"); - break; - - case DDERR_NOTPALETTIZED: - // The surface being used is not a palette-based surface. - lpszError = TEXT("DDERR_NOTPALETTIZED"); - break; - - case DDERR_NOVSYNCHW: - // The operation cannot be carried out because - // there is no hardware support for vertical blank synchronized operations. - lpszError = TEXT("DDERR_NOVSYNCHW"); - break; - - case DDERR_NOZBUFFERHW: - // The operation to create a z-buffer in display memory - // or to perform a blit using a z-buffer cannot be carried - // out because there is no hardware support for z-buffers. - lpszError = TEXT("DDERR_NOZBUFFERHW"); - break; - - case DDERR_NOZOVERLAYHW: - // The overlay surfaces cannot be z-layered based - // on the z-order because the hardware does not - // support z-ordering of overlays. - lpszError = TEXT("DDERR_NOZOVERLAYHW"); - break; - - case DDERR_OUTOFCAPS: - // The hardware needed for the requested operation has already been allocated. - lpszError = TEXT("DDERR_OUTOFCAPS"); - break; - - case DDERR_OUTOFMEMORY: - // DirectDraw does not have enough memory to perform the operation. - lpszError = TEXT("DDERR_OUTOFMEMORY"); - break; - - case DDERR_OUTOFVIDEOMEMORY: - // DirectDraw does not have enough display memory to perform the operation. - lpszError = TEXT("DDERR_OUTOFVIDEOMEMORY"); - break; - - case DDERR_OVERLAYCANTCLIP: - // The hardware does not support clipped overlays. - lpszError = TEXT("DDERR_OVERLAYCANTCLIP"); - break; - - case DDERR_OVERLAYCOLORKEYONLYONEACTIVE: - // An attempt was made to have more than one color key active on an overlay. - lpszError = TEXT("DDERR_OVERLAYCOLORKEYONLYONEACTIVE"); - break; - - case DDERR_OVERLAYNOTVISIBLE: - // The IDirectDrawSurface4::GetOverlayPosition method is called on a hidden overlay. - lpszError = TEXT("DDERR_OVERLAYNOTVISIBLE"); - break; - - case DDERR_PALETTEBUSY: - // Access to this palette is refused - // because the palette is locked by another thread. - lpszError = TEXT("DDERR_PALETTEBUSY"); - break; - - case DDERR_PRIMARYSURFACEALREADYEXISTS: - // This process has already created a primary surface. - lpszError = TEXT("DDERR_PRIMARYSURFACEALREADYEXISTS"); - break; - - case DDERR_REGIONTOOSMALL: - // The region passed to the - // IDirectDrawClipper::GetClipList method is too small. - lpszError = TEXT("DDERR_REGIONTOOSMALL"); - break; - - case DDERR_SURFACEALREADYATTACHED: - // An attempt was made to attach a surface to - // another surface to which it is already attached. - lpszError = TEXT("DDERR_SURFACEALREADYATTACHED"); - break; - - case DDERR_SURFACEALREADYDEPENDENT: - // An attempt was made to make a surface a dependency - // of another surface to which it is already dependent. - lpszError = TEXT("DDERR_SURFACEALREADYDEPENDENT"); - break; - - case DDERR_SURFACEBUSY: - // Access to the surface is refused because the - // surface is locked by another thread. - lpszError = TEXT("DDERR_SURFACEBUSY"); - break; - - case DDERR_SURFACEISOBSCURED: - // Access to the surface is refused - // because the surface is obscured. - lpszError = TEXT("DDERR_SURFACEISOBSCURED"); - break; - - case DDERR_SURFACELOST: - // Access to the surface is refused because the - // surface memory is gone. The DirectDrawSurface - // object representing this surface should have - // the IDirectDrawSurface4::Restore method called on it. - lpszError = TEXT("DDERR_SURFACELOST"); - break; - - case DDERR_SURFACENOTATTACHED: - // The requested surface is not attached. - lpszError = TEXT("DDERR_SURFACENOTATTACHED"); - break; - - case DDERR_TOOBIGHEIGHT: - // The height requested by DirectDraw is too large. - lpszError = TEXT("DDERR_TOOBIGHEIGHT"); - break; - - case DDERR_TOOBIGSIZE: - // The size requested by DirectDraw is too large. - // However, the individual height and width are OK. - lpszError = TEXT("DDERR_TOOBIGSIZE"); - break; - - case DDERR_TOOBIGWIDTH: - // The width requested by DirectDraw is too large. - lpszError = TEXT("DDERR_TOOBIGWIDTH"); - break; - - case DDERR_UNSUPPORTED: - // The operation is not supported. - lpszError = TEXT("DDERR_UNSUPPORTED"); - break; - - case DDERR_UNSUPPORTEDFORMAT: - // The FourCC format requested is not supported by DirectDraw. - lpszError = TEXT("DDERR_UNSUPPORTEDFORMAT"); - break; - - case DDERR_UNSUPPORTEDMASK: - // The bitmask in the pixel format requested is not supported by DirectDraw. - lpszError = TEXT("DDERR_UNSUPPORTEDMASK"); - break; - - case DDERR_UNSUPPORTEDMODE: - // The display is currently in an unsupported mode. - lpszError = TEXT("DDERR_UNSUPPORTEDMODE"); - break; - - case DDERR_VERTICALBLANKINPROGRESS: - // A vertical blank is in progress. - lpszError = TEXT("DDERR_VERTICALBLANKINPROGRESS"); - break; - - case DDERR_WASSTILLDRAWING: - // The previous blit operation that is transferring - // information to or from this surface is incomplete. - lpszError = TEXT("DDERR_WASSTILLDRAWING"); - break; - - case DDERR_WRONGMODE: - // This surface cannot be restored because it was created in a different mode. - lpszError = TEXT("DDERR_WRONGMODE"); - break; - - case DDERR_XALIGN: - // The provided rectangle was not horizontally aligned on a required boundary. - lpszError = TEXT("DDERR_XALIGN"); - break; - - case DDERR_VIDEONOTACTIVE: - // The video port is not active - lpszError = TEXT("DDERR_VIDEONOTACTIVE"); - break; - - - // - // D3D Immediate Mode Errors - // - - case D3DERR_BADMAJORVERSION: - // ??? - lpszError = TEXT("D3DERR_BADMAJORVERSION"); - break; - - case D3DERR_BADMINORVERSION: - // ??? - lpszError = TEXT("D3DERR_BADMINORVERSION"); - break; - - case D3DERR_INVALID_DEVICE: - // ??? - lpszError = TEXT("D3DERR_INVALID_DEVICE"); - break; - - case D3DERR_INITFAILED: - // ??? - lpszError = TEXT("D3DERR_INITFAILED"); - break; - - case D3DERR_EXECUTE_CREATE_FAILED: - // ??? - lpszError = TEXT("D3DERR_EXECUTE_CREATE_FAILED"); - break; - - case D3DERR_EXECUTE_DESTROY_FAILED: - // ??? - lpszError = TEXT("D3DERR_EXECUTE_DESTROY_FAILED"); - break; - - case D3DERR_EXECUTE_LOCK_FAILED: - // ??? - lpszError = TEXT("D3DERR_EXECUTE_LOCK_FAILED"); - break; - - case D3DERR_EXECUTE_UNLOCK_FAILED: - // ??? - lpszError = TEXT("D3DERR_EXECUTE_UNLOCK_FAILED"); - break; - - case D3DERR_EXECUTE_LOCKED: - // ??? - lpszError = TEXT("D3DERR_EXECUTE_LOCKED"); - break; - - case D3DERR_EXECUTE_NOT_LOCKED: - // ??? - lpszError = TEXT("D3DERR_EXECUTE_NOT_LOCKED"); - break; - - case D3DERR_EXECUTE_FAILED: - // ??? - lpszError = TEXT("D3DERR_EXECUTE_FAILED"); - break; - - case D3DERR_EXECUTE_CLIPPED_FAILED: - // ??? - lpszError = TEXT("D3DERR_CLIPPED_FAILED"); - break; - - case D3DERR_TEXTURE_NO_SUPPORT: - // ??? - lpszError = TEXT("D3DERR_TEXTURE_NO_SUPPORT"); - break; - - case D3DERR_TEXTURE_CREATE_FAILED: - // ??? - lpszError = TEXT("D3DERR_TEXTURE_CREATE_FAILED"); - break; - - case D3DERR_TEXTURE_DESTROY_FAILED: - // ??? - lpszError = TEXT("D3DERR_TEXTURE_DESTROY_FAILED"); - break; - - case D3DERR_TEXTURE_LOCK_FAILED: - // ??? - lpszError = TEXT("D3DERR_TEXTURE_LOCK_FAILED"); - break; - - case D3DERR_TEXTURE_UNLOCK_FAILED: - // ??? - lpszError = TEXT("D3DERR_TEXTURE_UNLOCK_FAILED"); - break; - - case D3DERR_TEXTURE_LOAD_FAILED: - // ??? - lpszError = TEXT("D3DERR_LOAD_FAILED"); - break; - - case D3DERR_TEXTURE_SWAP_FAILED: - // ??? - lpszError = TEXT("D3DERR_SWAP_FAILED"); - break; - - case D3DERR_TEXTURE_LOCKED: - // ??? - lpszError = TEXT("D3DERR_TEXTURE_LOCKED"); - break; - - case D3DERR_TEXTURE_NOT_LOCKED: - // ??? - lpszError = TEXT("D3DERR_TEXTURE_NOT_LOCKED"); - break; - - case D3DERR_TEXTURE_GETSURF_FAILED: - // ??? - lpszError = TEXT("D3DERR_TEXTURE_GETSURF_FAILED"); - break; - - case D3DERR_MATRIX_CREATE_FAILED: - // ??? - lpszError = TEXT("D3DERR_MATRIX_CREATE_FAILED"); - break; - - case D3DERR_MATRIX_DESTROY_FAILED: - // ??? - lpszError = TEXT("D3DERR_MATRIX_DESTROY_FAILED"); - break; - - case D3DERR_MATRIX_SETDATA_FAILED: - // ??? - lpszError = TEXT("D3DERR_MATRIX_SETDATA_FAILED"); - break; - - case D3DERR_MATRIX_GETDATA_FAILED: - // ??? - lpszError = TEXT("D3DERR_MAXTRIX_GETDATA_FAILED"); - break; - - case D3DERR_SETVIEWPORTDATA_FAILED: - // ??? - lpszError = TEXT("D3DERR_SETVIEWPORTDATA_FAILED"); - break; - - case D3DERR_INVALIDCURRENTVIEWPORT: - // ??? - lpszError = TEXT("D3DERR_INVALIDCURRENTVIEWPORT"); - break; - - case D3DERR_INVALIDPRIMITIVETYPE: - // ??? - lpszError = TEXT("D3DERR_INVALIDPRIMITIVETYPE"); - break; - - case D3DERR_INVALIDVERTEXTYPE: - // ??? - lpszError = TEXT("D3DERR_INVALIDVERTEXTYPE"); - break; - - case D3DERR_TEXTURE_BADSIZE: - // ??? - lpszError = TEXT("D3DERR_TEXTURE_BADSIZE"); - break; - - case D3DERR_MATERIAL_CREATE_FAILED: - // ??? - lpszError = TEXT("D3DERR_MATERIAL_CREATE_FAILED"); - break; - - case D3DERR_MATERIAL_DESTROY_FAILED: - // ??? - lpszError = TEXT("D3DERR_MATERIAL_DESTROY_FAILED"); - break; - - case D3DERR_MATERIAL_SETDATA_FAILED: - // ??? - lpszError = TEXT("D3DERR_MATERIAL_SETDATA_FAILED"); - break; - - case D3DERR_MATERIAL_GETDATA_FAILED: - // ??? - lpszError = TEXT("D3DERR_MATERIAL_GETDATA_FAILED"); - break; - - case D3DERR_INVALIDPALETTE: - // ??? - lpszError = TEXT("D3DERR_INVALIDPALETTE"); - break; - - case D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY: - // ??? - lpszError = TEXT("D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY"); - break; - - case D3DERR_ZBUFF_NEEDS_VIDEOMEMORY: - // ??? - lpszError = TEXT("D3DERR_ZBUFF_NEEDS_VIDEOMEMORY"); - break; - - case D3DERR_SURFACENOTINVIDMEM: - // ??? - lpszError = TEXT("D3DERR_SURFACENOTINVIDMEM"); - break; - - case D3DERR_LIGHT_SET_FAILED: - // ??? - lpszError = TEXT("D3DERR_LIGHT_SET_FAILED"); - break; - - case D3DERR_LIGHTHASVIEWPORT: - // ??? - lpszError = TEXT("D3DERR_LIGHTHASVIEWPORT"); - break; - - case D3DERR_LIGHTNOTINTHISVIEWPORT: - // ??? - lpszError = TEXT("D3DERR_LIGHTNOTINTHISVIEWPORT"); - break; - - case D3DERR_SCENE_IN_SCENE: - // ??? - lpszError = TEXT("D3DERR_SCENE_IN_SCENE"); - break; - - case D3DERR_SCENE_NOT_IN_SCENE: - // ??? - lpszError = TEXT("D3DERR_SCENE_NOT_IN_SCENE"); - break; - - case D3DERR_SCENE_BEGIN_FAILED: - // ??? - lpszError = TEXT("D3DERR_SCENE_BEGIN_FAILED"); - break; - - case D3DERR_SCENE_END_FAILED: - // ??? - lpszError = TEXT("D3DERR_SCENE_END_FAILED"); - break; - - case D3DERR_INBEGIN: - // ??? - lpszError = TEXT("D3DERR_INBEGIN"); - break; - - case D3DERR_NOTINBEGIN: - // ??? - lpszError = TEXT("D3DERR_NOTINBEGIN"); - break; - - case D3DERR_NOVIEWPORTS: - // ??? - lpszError = TEXT("D3DERR_NOVIEWPORTS"); - break; - - case D3DERR_VIEWPORTDATANOTSET: - // ??? - lpszError = TEXT("D3DERR_VIEWPORTDATANOTSET"); - break; - - case D3DERR_VIEWPORTHASNODEVICE: - // ??? - lpszError = TEXT("D3DERR_VIEWPORTHASNODEVICE"); - break; - - - // - // D3D Retained Mode Errors - // -#if 0 - case D3DRMERR_BADOBJECT: - // ??? - lpszError = TEXT("D3DRMERR_BADOBJECT"); - break; - - case D3DRMERR_BADTYPE: - // ??? - lpszError = TEXT("D3DRMERR_BADTYPE"); - break; - - case D3DRMERR_BADALLOC: - // ??? - lpszError = TEXT("D3DRMERR_BADALLOC"); - break; - - case D3DRMERR_FACEUSED: - // ??? - lpszError = TEXT("D3DRMERR_FACEUSED"); - break; - - case D3DRMERR_NOTFOUND: - // ??? - lpszError = TEXT("D3DRMERR_NOTFOUND"); - break; - - case D3DRMERR_NOTDONEYET: - // ??? - lpszError = TEXT("D3DRMERR_NOTDONEYET"); - break; - - case D3DRMERR_FILENOTFOUND: - // ??? - lpszError = TEXT("D3DRMERR_FILENOTFOUND"); - break; - - case D3DRMERR_BADFILE: - // ??? - lpszError = TEXT("D3DRMERR_BADFILE"); - break; - - case D3DRMERR_BADDEVICE: - // ??? - lpszError = TEXT("D3DRMERR_BADDEVICE"); - break; - - case D3DRMERR_BADVALUE: - // ??? - lpszError = TEXT("D3DRMERR_BADVALUE"); - break; - - case D3DRMERR_BADMAJORVERSION: - // ??? - lpszError = TEXT("D3DRMERR_BADMAJORVERSION"); - break; - - case D3DRMERR_BADMINORVERSION: - // ??? - lpszError = TEXT("D3DRMERR_BADMINORVERSION"); - break; - - case D3DRMERR_UNABLETOEXECUTE: - // ??? - lpszError = TEXT("D3DRMERR_BADMINORVERSION"); - break; -#endif // D3DRM_ERRORS - - - // - // Application defined errors - // - case APPERR_GENERIC: - // Generic Error - lpszError = TEXT("APPERR_GENERIC"); - break; - - case APPERR_INVALIDPARAMS: - // Invalid Parameters passed into function - lpszError = TEXT("APPERR_INVALIDPARAMS"); - break; - - case APPERR_NOTINITIALIZED: - // Programmer error, called function without proper initialization - lpszError = TEXT("APPERR_NOT_INITIALIZED"); - break; - - default: - // Unknown DD/D3D/App Error - wsprintf (szMsg, "Unknown Error #%ld", (DWORD)(hResult & 0x0000FFFFL)); - lpszError = szMsg; - break; - } - - // Copy DD/D3D Error string to buff - cLen = strlen (lpszError); - if (cLen >= cchError) - { - cLen = cchError - 1; - } - - if (cLen) - { - strncpy (lpszErrorBuff, lpszError, cLen); - lpszErrorBuff[cLen] = 0; - } - - return TRUE; -} // End GetDDErrorString - - - - -/* -**----------------------------------------------------------------------------- -** End of File -**----------------------------------------------------------------------------- -*/ - - diff --git a/arch/win32/descent.ico b/arch/win32/descent.ico deleted file mode 100755 index f9394c489..000000000 Binary files a/arch/win32/descent.ico and /dev/null differ diff --git a/arch/win32/include/joy.h b/arch/win32/include/joy.h deleted file mode 100644 index 3313eb2b0..000000000 --- a/arch/win32/include/joy.h +++ /dev/null @@ -1,121 +0,0 @@ -/* -THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX -SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO -END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A -ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS -IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS -SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE -FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE -CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS -AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. -COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. -*/ - -#ifndef _JOY_H -#define _JOY_H - -#include "types.h" -#include "fix.h" - -#define JOY_1_BUTTON_A 1 -#define JOY_1_BUTTON_B 2 -#define JOY_2_BUTTON_A 4 -#define JOY_2_BUTTON_B 8 -#define JOY_ALL_BUTTONS (1+2+4+8) - -#define JOY_1_X_AXIS 1 -#define JOY_1_Y_AXIS 2 -#define JOY_1_R_AXIS 4 -#define JOY_1_Z_AXIS 8 -#define JOY_1_U_AXIS 16 -#define JOY_1_V_AXIS 32 -#define JOY_ALL_AXIS (1+2+4+8+16+32) - -//#if 0 -//#define JOY_2_X_AXIS 4 -//#define JOY_2_Y_AXIS 8 -//#define JOY_ALL_AXIS (1+2+4+8) -//#endif - -#define JOY_POLL_RATE 0 // use minimum FIXME: is this what we want? - -#define JOY_NUM_AXES 6 - -#define JOY_MAX_BUTTONS 20 - -//========================================================================== -// This initializes the joy and does a "quick" calibration which -// assumes the stick is centered and sets the minimum value to 0 and -// the maximum value to 2 times the centered reading. Returns 0 if no -// joystick was detected, 1 if everything is ok. -// joy_init() is called. - -extern int joy_init(); -extern void joy_close(); - -extern char joy_installed; -extern char joy_present; - -//========================================================================== -// The following 3 routines can be used to zero in on better joy -// calibration factors. To use them, ask the user to hold the stick -// in either the upper left, lower right, or center and then have them -// press a key or button and then call the appropriate one of these -// routines, and it will read the stick and update the calibration factors. -// Usually, assuming that the stick was centered when joy_init was -// called, you really only need to call joy_set_lr, since the upper -// left position is usually always 0,0 on most joys. But, the safest -// bet is to do all three, or let the user choose which ones to set. - -extern void joy_set_ul(); -extern void joy_set_lr(); -extern void joy_set_cen(); - - -//========================================================================== -// This reads the joystick. X and Y will be between -128 and 127. -// Takes about 1 millisecond in the worst case when the stick -// is in the lower right hand corner. Always returns 0,0 if no stick -// is present. - -extern void joy_get_pos( int *x, int *y ); - -//========================================================================== -// This just reads the buttons and returns their status. When bit 0 -// is 1, button 1 is pressed, when bit 1 is 1, button 2 is pressed. -extern int joy_get_btns(); - -//========================================================================== -// This returns the number of times a button went either down or up since -// the last call to this function. -extern int joy_get_button_up_cnt( int btn ); -extern int joy_get_button_down_cnt( int btn ); - -//========================================================================== -// This returns how long (in approximate milliseconds) that each of the -// buttons has been held down since the last call to this function. -// It is the total time... say you pressed it down for 3 ticks, released -// it, and held it down for 6 more ticks. The time returned would be 9. -extern fix joy_get_button_down_time( int btn ); - -extern ubyte joy_read_raw_buttons(); -extern ubyte joystick_read_raw_axis( ubyte mask, int * axis ); -extern void joy_flush(); -extern ubyte joy_get_present_mask(); -extern void joy_set_timer_rate(int max_value ); -extern int joy_get_timer_rate(); - -extern int joy_get_button_state( int btn ); -extern void joy_set_cen_fake(int channel); -extern ubyte joy_read_stick( ubyte masks, int *axis ); -extern void joy_get_cal_vals(int *axis_min, int *axis_center, int *axis_max); -extern void joy_set_cal_vals(int *axis_min, int *axis_center, int *axis_max); -extern void joy_set_btn_values( int btn, int state, fix timedown, int downcount, int upcount ); -extern int joy_get_scaled_reading( int raw, int axn ); -extern void joy_set_slow_reading( int flag ); - - -extern int JOY_PORT; -extern int joy_deadzone; -#endif - diff --git a/arch/win32/include/key.h b/arch/win32/include/key.h deleted file mode 100644 index dd5de1b8f..000000000 --- a/arch/win32/include/key.h +++ /dev/null @@ -1,223 +0,0 @@ -/* -THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX -SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO -END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A -ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS -IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS -SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE -FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE -CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS -AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. -COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. -*/ -/* - * $Source: /cvsroot/dxx-rebirth/d2x-rebirth/arch/win32/include/key.h,v $ - * $Revision: 1.1.1.1 $ - * $Author: zicodxx $ - * $Date: 2006/03/17 19:54:27 $ - * - * Header for keyboard functions - * - * $Log: key.h,v $ - * Revision 1.1.1.1 2006/03/17 19:54:27 zicodxx - * initial import - * - * Revision 1.2 2004/08/28 23:17:45 schaffner - * move old per-file change logs into new file ChangeLog-old - * - * Revision 1.1.1.1 2001/01/19 03:30:15 bradleyb - * Import of d2x-0.0.8 - * - * Revision 1.1.1.1 1999/06/14 22:01:23 donut - * Import of d1x 1.37 source. - * - */ - -#ifndef _KEY_H -#define _KEY_H - -#include "fix.h" -#include "types.h" -#include // For 'toupper' - -//========================================================================== -// This installs the int9 vector and initializes the keyboard in buffered -// ASCII mode. key_close simply undoes that. -extern void key_init(); -extern void key_close(); - -//========================================================================== -// These are configuration parameters to setup how the buffer works. -// set keyd_buffer_type to 0 for no key buffering. -// set it to 1 and it will buffer scancodes. -extern unsigned char keyd_buffer_type; -extern unsigned char keyd_repeat; // 1=allow repeating, 0=dont allow repeat - -// keyd_editor_mode... 0=game mode, 1=editor mode. -// Editor mode makes key_down_time always return 0 if modifiers are down. -extern unsigned char keyd_editor_mode; - -// Time in seconds when last key was pressed... -extern volatile int keyd_time_when_last_pressed; - -//========================================================================== -// These are the "buffered" keypress routines. Use them by setting the -// "keyd_buffer_type" variable. - -extern void key_flush(); // Clears the 256 char buffer -extern int key_checkch(); // Returns 1 if a char is waiting -extern int key_getch(); // Gets key if one waiting other waits for one. -extern int key_inkey(); // Gets key if one, other returns 0. -extern int key_inkey_time(fix *time); // Same as inkey, but returns the time the key was pressed down. -extern int key_peekkey(); // Same as inkey, but doesn't remove key from buffer. - -extern unsigned char key_to_ascii(int keycode ); -extern char *key_name(int keycode); // Convert keycode to the name of the key - -extern void key_debug(); // Does an INT3 - -//========================================================================== -// These are the unbuffered routines. Index by the keyboard scancode. - -// Set to 1 if the key is currently down, else 0 -extern volatile unsigned char keyd_pressed[]; -extern volatile unsigned char keyd_last_pressed; -extern volatile unsigned char keyd_last_released; - -// Returns the seconds this key has been down since last call. -extern fix key_down_time(int scancode); - -// Returns number of times key has went from up to down since last call. -extern unsigned int key_down_count(int scancode); - -// Returns number of times key has went from down to up since last call. -extern unsigned int key_up_count(int scancode); - -// Clears the times & counts used by the above functions -// Took out... use key_flush(); -//void key_clear_times(); -//void key_clear_counts(); - -extern char * key_text[256]; - -#define KEY_SHIFTED 0x100 -#define KEY_ALTED 0x200 -#define KEY_CTRLED 0x400 -#define KEY_DEBUGGED 0x800 - -#define KEY_0 11 -#define KEY_1 2 -#define KEY_2 3 -#define KEY_3 4 -#define KEY_4 5 -#define KEY_5 6 -#define KEY_6 7 -#define KEY_7 8 -#define KEY_8 9 -#define KEY_9 10 - -#define KEY_A 30 -#define KEY_B 48 -#define KEY_C 46 -#define KEY_D 32 -#define KEY_E 18 -#define KEY_F 33 -#define KEY_G 34 -#define KEY_H 35 -#define KEY_I 23 -#define KEY_J 36 -#define KEY_K 37 -#define KEY_L 38 -#define KEY_M 50 -#define KEY_N 49 -#define KEY_O 24 -#define KEY_P 25 -#define KEY_Q 16 -#define KEY_R 19 -#define KEY_S 31 -#define KEY_T 20 -#define KEY_U 22 -#define KEY_V 47 -#define KEY_W 17 -#define KEY_X 45 -#define KEY_Y 21 -#define KEY_Z 44 - -#define KEY_MINUS 12 -#define KEY_EQUAL 13 -#define KEY_DIVIDE 43 -#define KEY_SLASH 28 -#define KEY_COMMA 51 -#define KEY_PERIOD 52 -#define KEY_SEMICOL 39 - -#define KEY_LBRACKET 26 -#define KEY_RBRACKET 27 - -#define KEY_RAPOSTRO 40 -#define KEY_LAPOSTRO 41 - -#define KEY_ESC 1 -#define KEY_ENTER 28 -#define KEY_BACKSP 14 -#define KEY_TAB 15 -#define KEY_SPACEBAR 57 - -#define KEY_NUMLOCK 69 -#define KEY_SCROLLOCK 70 -#define KEY_CAPSLOCK 58 - -#define KEY_LSHIFT 42 -#define KEY_RSHIFT 54 - -#define KEY_LALT 56 -#define KEY_RALT 194 - -#define KEY_LCTRL 29 -#define KEY_RCTRL 157 - -#define KEY_F1 59 -#define KEY_F2 60 -#define KEY_F3 61 -#define KEY_F4 62 -#define KEY_F5 63 -#define KEY_F6 64 -#define KEY_F7 65 -#define KEY_F8 66 -#define KEY_F9 67 -#define KEY_F10 68 -#define KEY_F11 87 -#define KEY_F12 88 - -#define KEY_PAD0 82 -#define KEY_PAD1 79 -#define KEY_PAD2 80 -#define KEY_PAD3 81 -#define KEY_PAD4 75 -#define KEY_PAD5 76 -#define KEY_PAD6 77 -#define KEY_PAD7 71 -#define KEY_PAD8 72 -#define KEY_PAD9 73 -#define KEY_PADMINUS 74 -#define KEY_PADPLUS 78 -#define KEY_PADPERIOD 83 -#define KEY_PADDIVIDE 81 -#define KEY_PADMULTIPLY 55 -#define KEY_PADENTER 156 - -#define KEY_INSERT 210 -#define KEY_HOME 209 -#define KEY_PAGEUP 221 -#define KEY_DELETE 211 -#define KEY_END 217 -#define KEY_PAGEDOWN 219 -#define KEY_UP 200 -#define KEY_DOWN 208 -#define KEY_LEFT 203 -#define KEY_RIGHT 205 - -#define KEY_PRINT_SCREEN 165 -#define KEY_PAUSE 143 - -#endif diff --git a/arch/win32/include/mouse.h b/arch/win32/include/mouse.h deleted file mode 100644 index 0b4a6ec97..000000000 --- a/arch/win32/include/mouse.h +++ /dev/null @@ -1,111 +0,0 @@ -/* -THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX -SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO -END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A -ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS -IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS -SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE -FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE -CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS -AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. -COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. -*/ -/* - * $Source: /cvsroot/dxx-rebirth/d2x-rebirth/arch/win32/include/mouse.h,v $ - * $Revision: 1.1.1.1 $ - * $Author: zicodxx $ - * $Date: 2006/03/17 19:54:27 $ - * - * Header for mouse functions - * - * $Log: mouse.h,v $ - * Revision 1.1.1.1 2006/03/17 19:54:27 zicodxx - * initial import - * - * Revision 1.2 2004/08/28 23:17:45 schaffner - * move old per-file change logs into new file ChangeLog-old - * - * Revision 1.1.1.1 2001/01/19 03:30:15 bradleyb - * Import of d2x-0.0.8 - * - * Revision 1.2 1999/10/09 05:04:34 donut - * added mouse_init and mouse_close declarations - * - * Revision 1.1.1.1 1999/06/14 22:01:24 donut - * Import of d1x 1.37 source. - * - */ - -#ifndef MOUSE_H -#define MOUSE_H - -#include "types.h" -#include "fix.h" - -#define MOUSE_MAX_BUTTONS 11 - -#define MBTN_LEFT 0 -#define MBTN_RIGHT 1 -#define MBTN_MIDDLE 2 -#define MBTN_Z_UP 3 -#define MBTN_Z_DOWN 4 -#define MBTN_PITCH_BACKWARD 5 -#define MBTN_PITCH_FORWARD 6 -#define MBTN_BANK_LEFT 7 -#define MBTN_BANK_RIGHT 8 -#define MBTN_HEAD_LEFT 9 -#define MBTN_HEAD_RIGHT 10 - -#define MOUSE_LBTN 1 -#define MOUSE_RBTN 2 -#define MOUSE_MBTN 4 - -#undef NOMOUSE -#ifndef NOMOUSE - -extern int mouse_init(int unused); -extern void mouse_close(void); - - -//======================================================================== -// Check for mouse driver, reset driver if installed. returns number of -// buttons if driver is present. - -extern int mouse_set_limits( int x1, int y1, int x2, int y2 ); -extern void mouse_flush(); // clears all mice events... - -//======================================================================== -extern void mouse_get_pos( int *x, int *y); -extern void mouse_get_delta( int *dx, int *dy ); -extern int mouse_get_btns(); -extern void mouse_set_pos( int x, int y); -extern void mouse_get_cyberman_pos( int *x, int *y ); - -// Returns how long this button has been down since last call. -extern fix mouse_button_down_time(int button); - -// Returns how many times this button has went down since last call. -extern int mouse_button_down_count(int button); - -// Returns 1 if this button is currently down -extern int mouse_button_state(int button); - -#else -// 'Neutered' functions... :-) -#define mouse_init(a) -1 -#define mouse_set_limits(a,b,c,d) -1 -#define mouse_flush() -#define mouse_close() -#define mouse_get_pos(a,b) -#define mouse_get_delta(a,b) -#define mouse_get_btns() 0 -#define mouse_set_pos(a,b) -#define mouse_get_cyberman_pos(a,b) -#define mouse_button_down_time(a) 0 -#define mouse_button_down_count(a) 0 -#define mouse_button_state(a) 0 - -#endif - -#endif - diff --git a/arch/win32/joydefs.c b/arch/win32/joydefs.c deleted file mode 100644 index eece039c5..000000000 --- a/arch/win32/joydefs.c +++ /dev/null @@ -1,145 +0,0 @@ -/* -THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX -SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO -END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A -ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS -IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS -SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE -FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE -CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS -AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. -COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. -*/ - -#include -#include -#include - -#include "mono.h" -#include "key.h" -#include "joy.h" -#include "timer.h" -#include "error.h" - -#include "inferno.h" -#include "game.h" -#include "object.h" -#include "player.h" - -#include "controls.h" -#include "joydefs.h" -#include "render.h" -#include "palette.h" -#include "newmenu.h" -#include "args.h" -#include "text.h" -#include "kconfig.h" -#include "digi.h" -#include "playsave.h" - -int joydefs_calibrate_flag=0; - -int Joy_is_Sidewinder=0; //not needed, but lots of main/* stuff use it - -void joy_delay() -{ - -} - -int joycal_message( char * title, char * text ) -{ - int i; - newmenu_item m[2]; - m[0].type = NM_TYPE_TEXT; m[0].text = text; - m[1].type = NM_TYPE_MENU; m[1].text = TXT_OK; - i = newmenu_do( title, NULL, 2, m, NULL ); - if ( i < 0 ) - return 1; - return 0; -} - -void joydefs_calibrate() -{ - joycal_message("No Calibration", "calibration should be performed\nthrough windows"); - return; -} - -void joydef_menuset_1(int nitems, newmenu_item * items, int *last_key, int citem ) -{ - int i; - int oc_type = Config_control_type; - - nitems = nitems; - last_key = last_key; - citem = citem; - - for (i=0; i<3; i++ ) - if (items[i].value) Config_control_type = i; - - if (Config_control_type == 2) Config_control_type = CONTROL_MOUSE; - - if ( (oc_type != Config_control_type) && (Config_control_type == CONTROL_THRUSTMASTER_FCS ) ) { - nm_messagebox( TXT_IMPORTANT_NOTE, 1, TXT_OK, TXT_FCS ); - } - - if (oc_type != Config_control_type) { - switch (Config_control_type) { - // case CONTROL_NONE: - case CONTROL_JOYSTICK: - case CONTROL_FLIGHTSTICK_PRO: - case CONTROL_THRUSTMASTER_FCS: - case CONTROL_GRAVIS_GAMEPAD: - // case CONTROL_MOUSE: - // case CONTROL_CYBERMAN: - joydefs_calibrate_flag = 1; - } - kc_set_controls(); - } - -} - -extern ubyte kc_use_external_control; -extern ubyte kc_enable_external_control; -extern ubyte *kc_external_name; - -void joydefs_config() -{ - newmenu_item m[13]; - int i, j, i1=0, nitems=7; - - m[0].type = NM_TYPE_RADIO; m[0].text = "KEYBOARD"; m[0].value = 0; m[0].group = 0; - m[1].type = NM_TYPE_RADIO; m[1].text = "JOYSTICK"; m[1].value = 0; m[1].group = 0; - m[2].type = NM_TYPE_RADIO; m[2].text = "MOUSE"; m[2].value = 0; m[2].group = 0; - m[3].type = NM_TYPE_TEXT; m[3].text=""; - m[4].type = NM_TYPE_MENU; m[4].text="CUSTOMIZE ABOVE"; - m[5].type = NM_TYPE_MENU; m[5].text="CUSTOMIZE KEYBOARD"; - m[6].type = NM_TYPE_MENU; m[6].text="CUSTOMIZE D1X KEYS"; - - do { - i = Config_control_type; - if(i==CONTROL_MOUSE) i = 2; - m[i].value=1; - i1 = newmenu_do1( NULL, TXT_CONTROLS, nitems, m, joydef_menuset_1, i1 ); - -//added 6-15-99 Owen Evans - for (j = 0; j <= 2; j++) - if (m[j].value) - Config_control_type = j; - i = Config_control_type; - if (Config_control_type == 2) - Config_control_type = CONTROL_MOUSE; -//end added - OE - - switch(i1) { - case 4: - kconfig (i, m[i].text); - break; - case 5: - kconfig(0, "KEYBOARD"); - break; - case 6: - kconfig(3, "D1X KEYS"); - break; - } - } while(i1>-1); -} diff --git a/arch/win32/key.c b/arch/win32/key.c deleted file mode 100644 index 7fbf16abd..000000000 --- a/arch/win32/key.c +++ /dev/null @@ -1,482 +0,0 @@ -/* $Id: key.c,v 1.1.1.1 2006/03/17 19:53:55 zicodxx Exp $ */ -#define WIN32_LEAN_AND_MEAN -#include -#include -#include -//#include "inferno.h" -#include "fix.h" -#include "timer.h" -#include "key.h" - -extern void PumpMessages(void); - -// These are to kludge up a bit my slightly broken GCC directx port. -#ifndef E_FAIL -#define E_FAIL (HRESULT)0x80004005L -#endif -#ifndef SUCCEEDED -#define SUCCEEDED(a) ((HRESULT)(a) >= 0) -#endif -#ifndef S_OK -#define S_OK 0 -#define S_FALSE 1 -#endif - -extern void PumpMessages(void); - -volatile int keyd_time_when_last_pressed; -volatile unsigned char keyd_last_pressed; -volatile unsigned char keyd_last_released; -volatile unsigned char keyd_pressed [256]; -unsigned char keyd_repeat; -unsigned char WMKey_Handler_Ready=0; - - -fix g_rgtimeDown [256]; -fix g_rgtimeElapsed [256]; -ULONG g_rgcDowns [256]; -ULONG g_rgcUps [256]; - -char ascii_table[256]; -char shifted_ascii_table[256]; - -LPDIRECTINPUT g_lpdi; -LPDIRECTINPUTDEVICE g_lpdidKeybd; -extern HWND g_hWnd; - -typedef int KEYCODE; - -#define KEY_BUFFER_SIZE 16 - -ULONG g_rgbKeyQueue [KEY_BUFFER_SIZE]; -fix g_rgtimeQueue [KEY_BUFFER_SIZE]; -ULONG g_rgbPressedQueue [KEY_BUFFER_SIZE]; - -ULONG iQueueStart = 0; -ULONG iQueueEnd = 0; - -KEYCODE ShiftKeyCode (KEYCODE kcKey) -{ - KEYCODE kcShifted; - - if (keyd_pressed [kcKey]) - { - kcShifted = kcKey; - - // the key is down - if (keyd_pressed [KEY_LSHIFT] || keyd_pressed [KEY_RSHIFT]) - { - kcShifted |= KEY_SHIFTED; - } - if (keyd_pressed [KEY_LCTRL] || keyd_pressed [KEY_RCTRL]) - { - kcShifted |= KEY_CTRLED; - } - if (keyd_pressed [KEY_LALT] || keyd_pressed [KEY_RALT]) - { - kcShifted |= KEY_ALTED; - } - } - else - { - // the key is UP! - kcShifted = 0; - } - return kcShifted; -} - -BOOL SpaceInBuffer () -{ - if (iQueueStart == 0) - { - return iQueueEnd != KEY_BUFFER_SIZE - 1; - } - else - { - return iQueueEnd != iQueueStart - 1; - } -} - -void FlushQueue (void) -{ - iQueueStart = iQueueEnd = 0; -} - -void PushKey (ULONG kcKey, fix timeDown) -{ - if (SpaceInBuffer ()) - { - g_rgbKeyQueue [iQueueEnd] = ShiftKeyCode(kcKey); - g_rgtimeQueue [iQueueEnd] = timeDown; - - if (iQueueEnd ++ == KEY_BUFFER_SIZE) - { - iQueueEnd = 0; - } - } -} - -BOOL PopKey (KEYCODE *piKey, fix *ptimeDown) -{ - if (iQueueEnd != iQueueStart) - { - // there are items in the queue - - if (piKey != NULL) - { - *piKey = g_rgbKeyQueue [iQueueStart]; - } - if (ptimeDown != NULL) - { - *ptimeDown = g_rgbPressedQueue [iQueueStart]; - } - - if (iQueueStart ++ == KEY_BUFFER_SIZE) - { - iQueueStart = 0; - } - - return TRUE; - } - else - { - return FALSE; - } -} - -static BOOL EnsureInit (void) -{ - if (g_lpdidKeybd == NULL) - { - key_init (); - } - - return g_lpdidKeybd != NULL; -} - -void key_close(void); - -void key_init() -{ - HRESULT hr; - // my kingdom, my kingdom for C++... - if (SUCCEEDED (hr = DirectInputCreate (GetModuleHandle (NULL), DIRECTINPUT_VERSION, &g_lpdi, NULL))) - { - if (SUCCEEDED (hr = IDirectInput_CreateDevice (g_lpdi, (void *)&GUID_SysKeyboard, &g_lpdidKeybd, NULL))) - { - DIPROPDWORD dipdw; - - dipdw.diph.dwSize = sizeof (DIPROPDWORD); - dipdw.diph.dwHeaderSize = sizeof (DIPROPHEADER); - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - dipdw.dwData = 40; - - if (SUCCEEDED (hr = IDirectInputDevice_SetDataFormat (g_lpdidKeybd, &c_dfDIKeyboard)) && - SUCCEEDED (hr = IDirectInputDevice_SetCooperativeLevel (g_lpdidKeybd, g_hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND)) && - SUCCEEDED (hr = IDirectInputDevice_SetProperty (g_lpdidKeybd, DIPROP_BUFFERSIZE, &dipdw.diph)) && - SUCCEEDED (hr = IDirectInputDevice_Acquire (g_lpdidKeybd))) - { - // fine - WMKey_Handler_Ready = 1; - - // Clear the keyboard array - key_flush(); - - atexit(key_close); - } - else - { - IDirectInputDevice_Release (g_lpdidKeybd); - g_lpdidKeybd = NULL; - } - } - } -} - -void key_close(void) -{ - WMKey_Handler_Ready = 0; - if (g_lpdidKeybd != NULL) - { - IDirectInputDevice_Unacquire (g_lpdidKeybd); - IDirectInputDevice_Release (g_lpdidKeybd); - g_lpdidKeybd = NULL; - } - if (g_lpdi != NULL) - { - IDirectInput_Release (g_lpdi); - g_lpdi = NULL; - } -} - -HRESULT ReadKey (DIDEVICEOBJECTDATA *pdidod) -{ - DWORD cElements = 1; - HRESULT hr; - if (g_lpdidKeybd == NULL) - return E_FAIL; - hr = IDirectInputDevice_Acquire (g_lpdidKeybd); - if (SUCCEEDED (hr)) - { - hr = IDirectInputDevice_GetDeviceData ( - g_lpdidKeybd, - sizeof (*pdidod), - pdidod, - &cElements, - 0); - if (SUCCEEDED (hr) && cElements != 1) - hr = E_FAIL; - } - - return hr; -} - -void UpdateState (DIDEVICEOBJECTDATA *pdidod) -{ - KEYCODE kcKey = pdidod->dwOfs; - - fix timeNow = timer_get_fixed_seconds (); - - if (pdidod->dwData & 0x80) - { - keyd_pressed [kcKey] = 1; - keyd_last_pressed = kcKey; - g_rgtimeDown [kcKey] = keyd_time_when_last_pressed = timeNow; - g_rgcDowns [kcKey] ++; - PushKey (kcKey, keyd_time_when_last_pressed); - } - else - { - keyd_pressed [kcKey] = 0; - keyd_last_released = kcKey; - g_rgcUps [kcKey] ++; - g_rgtimeElapsed [kcKey] = timeNow - g_rgtimeDown [kcKey]; - } -} - -void keyboard_handler() -{ -// static int peekmsgcount = 0; - DIDEVICEOBJECTDATA didod; - while (SUCCEEDED (ReadKey (&didod))) - { - UpdateState (&didod); - - //added 02/20/99 by adb to prevent message overflow - //(this should probably go somewhere else...) -// if (++peekmsgcount == 64) // 64 = wild guess... -// { -// peekmsgcount = 0; -// } - //end additions - } - PumpMessages(); -} - - - -void key_flush() -{ - if (EnsureInit ()) - { - DWORD cElements = INFINITE; - ULONG kcKey; -// HRESULT hr = - IDirectInputDevice_GetDeviceData( - g_lpdidKeybd, - sizeof (DIDEVICEOBJECTDATA), - NULL, - &cElements, - 0); - - for (kcKey = 0; kcKey < 256; kcKey ++) - { - g_rgtimeElapsed [kcKey] = 0; - g_rgcDowns [kcKey] = 0; - g_rgcUps [kcKey] = 0; - keyd_pressed [kcKey] = 0; - } - - FlushQueue (); - } -} - -int key_getch() -{ - KEYCODE kcKey; - keyboard_handler(); - while (!PopKey (&kcKey, NULL)) - { - keyboard_handler (); - } - - return kcKey; -} - -KEYCODE key_inkey_time(fix * pTime) -{ - KEYCODE kcKey = 0; - - keyboard_handler (); - - PopKey (&kcKey, pTime); - - return kcKey; -} - -KEYCODE key_inkey () -{ - return key_inkey_time (NULL); -} - -KEYCODE key_peekkey () -{ - keyboard_handler(); - return 0; -} - -int key_checkch() -{ - return 1; // FIXME -} - -unsigned char key_to_ascii(KEYCODE kcKey ) -{ - BOOL bShifted = kcKey & KEY_SHIFTED; - unsigned char ch; - - kcKey &= ~KEY_SHIFTED; - - if (kcKey <= 127) - { - if (bShifted) - { - ch = shifted_ascii_table [kcKey & 0xff]; - } - else - { - ch = ascii_table [kcKey & 0xff]; - } - } - else - { - ch = 255; - } - - return ch; -} - -// Returns the number of seconds this key has been down since last call. -fix key_down_time(KEYCODE kcKey) -{ - ULONG timeElapsed; - keyboard_handler(); - if ((kcKey<0) || (kcKey>127)) return 0; - - if (keyd_pressed [kcKey]) - { - fix timeNow = timer_get_fixed_seconds (); - timeElapsed = timeNow - g_rgtimeDown [kcKey]; - g_rgtimeDown [kcKey] = timeNow; - } - else - { - timeElapsed = g_rgtimeElapsed [kcKey]; - g_rgtimeElapsed [kcKey] = 0; - } - - return timeElapsed;; -} - - -unsigned int key_down_count(KEYCODE kcKey) -{ - int n; - keyboard_handler(); - if ((kcKey < 0) || (kcKey > 127)) - { - n = 0; - } - else - { - n = g_rgcDowns [kcKey]; - g_rgcDowns [kcKey] = 0; - } - - return n; -} - -unsigned int key_up_count(KEYCODE kcKey) -{ - int n; - - keyboard_handler(); - if ((kcKey < 0) || (kcKey > 127)) - { - n = 0; - } - else - { - n = g_rgcUps [kcKey]; - g_rgcUps [kcKey] = 0; - } - - return n; -} - - -#define ___ ((char) 255) -char ascii_table[256] = -{ -___, ___, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', ___, ___, -'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', ___, ___, 'a', 's', -'d', 'f', 'g', 'h', 'j', 'k', 'l', ';','\'', '`', ___,'\\', 'z', 'x', 'c', 'v', -'b', 'n', 'm', ',', '.', '/', ___, '*', ___, ' ', ___, ___, ___, ___, ___, ___, -___, ___, ___, ___, ___, ___, ___, '7', '8', '9', '-', '4', '5', '6', '+', '1', -'2', '3', '0', '.', ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, -___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, -___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, -}; - -char shifted_ascii_table[256] = -{ -___, ___, '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', ___, ___, -'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', ___, ___, 'A', 'S', -'D', 'F', 'G', 'H', 'J', 'K', 'L', ':','\"', '~', ___, '|', 'Z', 'X', 'C', 'V', -'B', 'N', 'M', '<', '>', '?', ___, '*', ___, ' ', ___, ___, ___, ___, ___, ___, -___, ___, ___, ___, ___, ___, ___, '&', '*', '(', '_', '$', '%', '^', '=', '!', -'@', '#', ')', '>', ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, -___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, -___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, -}; -#undef ___ - -char * key_text[256] = { -"","ESC","1","2","3","4","5","6","7","8","9","0","-", -"=","BSPC","TAB","Q","W","E","R","T","Y","U","I","O", -"P","[","]","ƒ","LCTRL","A","S","D","F", -"G","H","J","K","L",";","'","`", -"LSHFT","\\","Z","X","C","V","B","N","M",",", -".","/","RSHFT","PAD*","LALT","SPC", -"CPSLK","F1","F2","F3","F4","F5","F6","F7","F8","F9", -"F10","NMLCK","SCLK","PAD7","PAD8","PAD9","PAD-", -"PAD4","PAD5","PAD6","PAD+","PAD1","PAD2","PAD3","PAD0", -"PAD.","","","","F11","F12","","","","","","","","","", -"","","","","","","","","","","","","","","","","","","","", -"","","","","","","","","","","","","","","","","","","","", -"","","","","","","","","","","","","","","","","","", -"PADƒ","RCTRL","","","","","","","","","","","","","", -"","","","","","","","","","","PAD/","","","RALT","", -"","","","","","","","","","","","","","HOME","‚","PGUP", -"","","","","","END","€","PGDN","INS", -"DEL","","","","","","","","","","","","","","","","","", -"","","","","","","","","","","","","","","","","","","","", -"","","","","","","" }; -#if 0 // what was this? -- adb -"","","","HOME","UP","PGUP","","LEFT","","RGHT","","END","DOWN","PGDN","INS","DEL", -"","","","","","","?","","", -"","","","","","","","","","","","","","","","","","", -"","","","","","","","","","","","","","","","","","","","", -"","","","","","","" }; -#endif diff --git a/arch/win32/pch.cpp b/arch/win32/pch.cpp deleted file mode 100755 index 22810d406..000000000 --- a/arch/win32/pch.cpp +++ /dev/null @@ -1,4 +0,0 @@ -#include "pch.h" - -#include -CComModule _Module; diff --git a/arch/win32/scene.cpp b/arch/win32/scene.cpp deleted file mode 100755 index 8070f2e4e..000000000 --- a/arch/win32/scene.cpp +++ /dev/null @@ -1,810 +0,0 @@ -//----------------------------------------------------------------------------- -// File: VBuffer.cpp -// -// Desc: Example code showing how to use DirectX 6 vertex buffers. -// -// Note: This code uses the D3D Framework helper library. -// -// -// Copyright (c) 1997-1998 Microsoft Corporation. All rights reserved. -//----------------------------------------------------------------------------- - -#include "pch.h" -#include "scene.h" -#include - -#include "D3DTextr.h" -#include "D3DUtil.h" -#include "D3DMath.h" -#include "D3DFrame.h" - -#include "texture.h" - -extern CD3DFramework* g_pFramework; -extern BOOL g_bWindowed; - -extern "C" { -#include "d3dhelp.h" -} - -//----------------------------------------------------------------------------- -// Declare the application globals for use in WinMain.cpp -//----------------------------------------------------------------------------- -void Win32_SetupColor(void); -BOOL g_TrueColor; -int g_RShift, g_GShift, g_BShift; -int g_RBits6, g_GBits6, g_BBits6; - -TCHAR* g_strAppTitle = TEXT( "Direct3D Descent" ); -BOOL g_bAppUseZBuffer = FALSE; -BOOL g_bAppUseBackBuffer = TRUE; - -LPDIRECT3DTEXTURE2 g_pd3dtLast; -BOOL g_bTransparentLast; - -std::stack g_stkWorlds; - -float g_fPSURed = 0.0f; -float g_fPSUGreen = 0.0f; -float g_fPSUBlue = 0.0f; - -D3DLVERTEX g_rgVerts [16]; - -CTextureSet g_setTextures; - -//----------------------------------------------------------------------------- -// Defines, constants, and global variables -//----------------------------------------------------------------------------- - - -//----------------------------------------------------------------------------- -// Function prototypes and global (or static) variables -//----------------------------------------------------------------------------- -HRESULT App_InitDeviceObjects( LPDIRECT3DDEVICE3, LPDIRECT3DVIEWPORT3 ); -VOID App_DeleteDeviceObjects( LPDIRECT3DDEVICE3, LPDIRECT3DVIEWPORT3 ); - - - - -//----------------------------------------------------------------------------- -// Name: App_OneTimeSceneInit() -// Desc: Called during initial app startup, this function performs all the -// permanent initialization. -//----------------------------------------------------------------------------- -HRESULT App_OneTimeSceneInit( HWND hWnd ) -{ - // Create some textures - return S_OK; -} - - -//----------------------------------------------------------------------------- -// Name: App_InitDeviceObjects() -// Desc: Initialize scene objects. -//----------------------------------------------------------------------------- -HRESULT App_InitDeviceObjects( LPDIRECT3DDEVICE3 pd3dDevice, - LPDIRECT3DVIEWPORT3 pvViewport ) -{ - // Check parameters - if( NULL==pd3dDevice || NULL==pvViewport ) - return E_INVALIDARG; - - - D3DVIEWPORT2 vdData; - ZeroMemory( &vdData, sizeof(D3DVIEWPORT2) ); - vdData.dwSize = sizeof(vdData); - vdData.dwX = 0; - vdData.dwY = 0; - vdData.dwWidth = g_pFramework->m_dwRenderWidth; - vdData.dwHeight = 147 * g_pFramework->m_dwRenderHeight / 200; - vdData.dvMaxZ = 1.0f; - - vdData.dvClipX = -1.0f; - vdData.dvClipY = (FLOAT) g_pFramework->m_dwRenderHeight / (FLOAT) g_pFramework->m_dwRenderWidth; - vdData.dvClipWidth = 2.0f; - vdData.dvClipHeight = 2.0f * vdData.dvClipY; - vdData.dvMinZ = 0.0f; - vdData.dvMaxZ = 1.0f; - - // Set the parameters to the new viewport - if (FAILED (pvViewport->SetViewport2 (&vdData))) - { - DEBUG_MSG( TEXT("Error: Couldn't set the viewport data") ); - return D3DFWERR_NOVIEWPORT; - } - - - // Get a ptr to the ID3D object to create VB's, materials and/or lights. - // Note: the Release() call just serves to decrease the ref count. - LPDIRECT3D3 pD3D; - if( FAILED( pd3dDevice->GetDirect3D( &pD3D ) ) ) - return E_FAIL; - pD3D->Release(); - - // Get the device's caps bits - D3DDEVICEDESC ddHwDesc, ddSwDesc; - D3DUtil_InitDeviceDesc( ddHwDesc ); - D3DUtil_InitDeviceDesc( ddSwDesc ); - if( FAILED( pd3dDevice->GetCaps( &ddHwDesc, &ddSwDesc ) ) ) - return E_FAIL; - - D3DMATRIX matProj; - float fAspect = 1.0f; - D3DUtil_SetProjectionMatrix( matProj, g_PI/3, fAspect, 0.01f, 1000.0f ); - pd3dDevice->SetTransform( D3DTRANSFORMSTATE_PROJECTION, &matProj ); - - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); - pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); - //pd3dDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTFN_LINEAR ); - //pd3dDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTFG_LINEAR ); - - pd3dDevice->SetRenderState (D3DRENDERSTATE_SPECULARENABLE, FALSE); - pd3dDevice->SetRenderState (D3DRENDERSTATE_DITHERENABLE, TRUE); - pd3dDevice->SetRenderState (D3DRENDERSTATE_TEXTUREPERSPECTIVE, TRUE); - pd3dDevice->SetRenderState (D3DRENDERSTATE_FILLMODE, D3DFILL_SOLID); - pd3dDevice->SetRenderState (D3DRENDERSTATE_ZENABLE, 0); - pd3dDevice->SetRenderState (D3DRENDERSTATE_CULLMODE, D3DCULL_NONE); - pd3dDevice->SetRenderState (D3DRENDERSTATE_COLORKEYENABLE, FALSE); - - D3DMATRIX matID; - D3DUtil_SetIdentityMatrix (matID); - - while (!g_stkWorlds.empty ()) - g_stkWorlds.pop (); - - g_stkWorlds.push (matID); - pd3dDevice->SetTransform( D3DTRANSFORMSTATE_WORLD, &matID ); - - g_setTextures.Initialize (); - - g_bTransparentLast = FALSE; - g_pd3dtLast = NULL; - - Win32_SetupColor(); - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: App_FinalCleanup() -// Desc: Called before the app exits, this function gives the app the chance -// to cleanup after itself. -//----------------------------------------------------------------------------- -HRESULT App_FinalCleanup( LPDIRECT3DDEVICE3 pd3dDevice, - LPDIRECT3DVIEWPORT3 pvViewport) -{ - App_DeleteDeviceObjects( pd3dDevice, pvViewport ); - - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: App_DeleteDeviceObjects() -// Desc: Called when the app is exitting, or the device is being changed, -// this function deletes any device dependant objects. -//----------------------------------------------------------------------------- -VOID App_DeleteDeviceObjects( LPDIRECT3DDEVICE3 pd3dDevice, - LPDIRECT3DVIEWPORT3 pvViewport) -{ - D3DTextr_InvalidateAllTextures(); - - g_setTextures.Uninitialize (); - - Win32_InvalidatePages(); - - Win32_SetupColor(); -} - - - - -//---------------------------------------------------------------------------- -// Name: App_RestoreSurfaces -// Desc: Restores any previously lost surfaces. Must do this for all surfaces -// (including textures) that the app created. -//---------------------------------------------------------------------------- -HRESULT App_RestoreSurfaces() -{ - return S_OK; -} - - - - -//----------------------------------------------------------------------------- -// Name: App_ConfirmDevice() -// Desc: Called during device intialization, this code checks the device -// for some minimum set of capabilities -//----------------------------------------------------------------------------- -HRESULT App_ConfirmDevice( DDCAPS* pddDriverCaps, - D3DDEVICEDESC* pd3dDeviceDesc ) -{ - // Don't allow 3d Devices that don't support textures(Matrox Millenium) - if (!pd3dDeviceDesc->dwMaxTextureWidth) - return DDERR_INVALIDOBJECT; - - return S_OK; - -} - - - - -#define byte __BOGUS1 -#define bool __BOGUS2 - -extern "C" -{ -#include "types.h" -#include "grdef.h" -#include "..\main\segment.h" -#include "..\main\segpoint.h" -#include "..\main\object.h" -#include "..\3d\globvars.h" -#include "3d.h" -#include "palette.h" -} - -#undef __BOGUS1 -#undef __BOGUS2 - -LPDIRECT3DDEVICE3 g_pd3dDevice; - -HRESULT App_StartFrame( LPDIRECT3DDEVICE3 pd3dDevice, LPDIRECT3DVIEWPORT3 pvViewport, D3DRECT* prcViewRect ) -{ - g_pd3dDevice = pd3dDevice; - - HRESULT hResult; - - hResult = pvViewport->Clear2 (1UL, prcViewRect, D3DCLEAR_TARGET, 0, 1.0f, 0); - - // Begin the scene - hResult = pd3dDevice->BeginScene(); - - ASSERT (g_stkWorlds.size () == 1); - - return hResult; -} - -HRESULT App_EndFrame (void) -{ - HRESULT hResult; - - hResult = g_pd3dDevice->EndScene (); - - ASSERT (g_stkWorlds.size () == 1); - - return hResult; -} - -extern "C" RGBQUAD w32lastrgb[256]; - -extern "C" void Win32_DoSetPalette (PALETTEENTRY *rgpe) -{ - g_setTextures.SetPaletteEntries (rgpe); - for (int i = 0; i < 256; i++) { - w32lastrgb[i].rgbBlue = rgpe[i].peBlue; - w32lastrgb[i].rgbGreen = rgpe[i].peGreen; - w32lastrgb[i].rgbRed = rgpe[i].peRed; - } -} - -extern "C" void Win32_DoGetPalette (PALETTEENTRY *rgpe) -{ - g_setTextures.GetPaletteEntries (rgpe); -} - -extern "C" int Win32_PaletteStepUp (int r, int g, int b) -{ - if (g_setTextures.HasPalette ()) - { - g_fPSURed = g_fPSUGreen = g_fPSUBlue = 0.0f; - return FALSE; - } - else - { - g_fPSURed = (float) r / 32.0f; - g_fPSUGreen = (float) g / 32.0f; - g_fPSUBlue = (float) b / 32.0f; - return TRUE; - } -} - -D3DVECTOR g_vecRight, g_vecUp; - -extern "C" void Win32_set_view_matrix () -{ - vms_vector *pPos = &View_position; - vms_matrix *pOrient = &View_matrix; - - D3DVECTOR vecView; - vecView.x = (D3DVALUE) f2fl (pPos->x) / 10; - vecView.y = (D3DVALUE) f2fl (pPos->y) / 10; - vecView.z = (D3DVALUE) f2fl (pPos->z) / 10; - - D3DMATRIX matView; - D3DVECTOR vecDir; - matView(0, 0) = g_vecRight.x = (D3DVALUE) f2fl (pOrient->rvec.x) / 10; - matView(1, 0) = g_vecRight.y = (D3DVALUE) f2fl (pOrient->rvec.y) / 10; - matView(2, 0) = g_vecRight.z = (D3DVALUE) f2fl (pOrient->rvec.z) / 10; - - matView(0, 1) = g_vecUp.x = (D3DVALUE) f2fl (pOrient->uvec.x) / 10; - matView(1, 1) = g_vecUp.y = (D3DVALUE) f2fl (pOrient->uvec.y) / 10; - matView(2, 1) = g_vecUp.z = (D3DVALUE) f2fl (pOrient->uvec.z) / 10; - - matView(0, 2) = vecDir.x = (D3DVALUE) f2fl (pOrient->fvec.x) / 10; - matView(1, 2) = vecDir.y = (D3DVALUE) f2fl (pOrient->fvec.y) / 10; - matView(2, 2) = vecDir.z = (D3DVALUE) f2fl (pOrient->fvec.z) / 10; - - matView(3, 0) = -DotProduct (g_vecRight, vecView); - matView(3, 1) = -DotProduct (g_vecUp, vecView); - matView(3, 2) = -DotProduct (vecDir, vecView); - - matView(0, 3) = matView(1, 3) = matView(2, 3) = 0.0f; - matView(3, 3) = 1.0f; - - g_pd3dDevice->SetTransform( D3DTRANSFORMSTATE_VIEW, &matView ); -} - -HRESULT SetTexture (CTexture *pTexture) -{ - HRESULT hResult = S_OK; - LPDIRECT3DTEXTURE2 pd3dt; - BOOL bTransparent; - - if (pTexture != NULL) - { - pd3dt = pTexture->GetTexture (); - bTransparent = pTexture->IsTransparent (); - } - else - { - pd3dt = NULL; - bTransparent = FALSE; - } - - if (pd3dt != g_pd3dtLast) - { - g_pd3dtLast = pd3dt; - - hResult = g_pd3dDevice->SetTexture (0, pd3dt); - ASSERT (SUCCEEDED (hResult)); - } - - if (bTransparent != g_bTransparentLast) - { - g_bTransparentLast = bTransparent; - - hResult = g_pd3dDevice->SetRenderState (D3DRENDERSTATE_COLORKEYENABLE, bTransparent); - ASSERT (SUCCEEDED (hResult)); - } - return hResult; -} - -extern "C" bool g3_draw_tmap (int cPoints, g3s_point **rgpPoints, g3s_uvl *rgpUvls, grs_bitmap *pbm) -{ - ASSERT (cPoints <= sizeof (g_rgVerts) / sizeof (g_rgVerts[0])); - - for (ULONG iPoint = 0; iPoint < cPoints; iPoint ++) - { - D3DLVERTEX *pvert = &g_rgVerts [iPoint]; - const g3s_point *pPoint = rgpPoints [iPoint]; - const g3s_uvl *pUvl = &rgpUvls [iPoint]; - double dCol = f2fl (pUvl->l); - double dColR = min (1, max (0, dCol + g_fPSURed)); - double dColG = min (1, max (0, dCol + g_fPSUGreen)); - double dColB = min (1, max (0, dCol + g_fPSUBlue)); - - pvert->x = (D3DVALUE) f2fl (pPoint->p3_orig.x) / 10; - pvert->y = (D3DVALUE) f2fl (pPoint->p3_orig.y) / 10; - pvert->z = (D3DVALUE) f2fl (pPoint->p3_orig.z) / 10; - pvert->tu = (D3DVALUE) f2fl (pUvl->u); - pvert->tv = (D3DVALUE) f2fl (pUvl->v); - pvert->color = D3DRGBA (dColR, dColG, dColB, 0); - pvert->specular = 0; - } - - HRESULT hResult; - hResult = SetTexture ((CTexture *) pbm->pvSurface); - ASSERT (SUCCEEDED (hResult)); - - hResult = g_pd3dDevice->DrawPrimitive (D3DPT_TRIANGLEFAN, D3DFVF_LVERTEX, g_rgVerts, cPoints, D3DDP_WAIT); - ASSERT (SUCCEEDED (hResult)); - - return hResult == S_OK; -} - -extern "C" bool g3_draw_poly (int cPoints, g3s_point **rgpPoints) -{ - ASSERT (cPoints <= sizeof (g_rgVerts) / sizeof (g_rgVerts[0])); - PALETTEENTRY pe = g_setTextures.ReadPalette (grd_curcanv->cv_color); - BYTE bR = pe.peRed; - BYTE bG = pe.peGreen; - BYTE bB = pe.peBlue; - double dColR = min (1, max (0, (float) bR / 256 + g_fPSURed)); - double dColG = min (1, max (0, (float) bG / 256 + g_fPSUGreen)); - double dColB = min (1, max (0, (float) bB / 256 + g_fPSUBlue)); - - for (ULONG iPoint = 0; iPoint < cPoints; iPoint ++) - { - D3DLVERTEX *pvert = &g_rgVerts [iPoint]; - const g3s_point *pPoint = rgpPoints [iPoint]; - - pvert->x = (D3DVALUE) f2fl (pPoint->p3_orig.x) / 10; - pvert->y = (D3DVALUE) f2fl (pPoint->p3_orig.y) / 10; - pvert->z = (D3DVALUE) f2fl (pPoint->p3_orig.z) / 10; - pvert->tu = 0; - pvert->tv = 0; - pvert->color = D3DRGBA (dColR, dColG, dColB, 0); - pvert->specular = 0; - } - - HRESULT hResult; - hResult = SetTexture (NULL); - ASSERT (SUCCEEDED (hResult)); - - hResult = g_pd3dDevice->DrawPrimitive (D3DPT_TRIANGLEFAN, D3DFVF_LVERTEX, g_rgVerts, cPoints, D3DDP_WAIT); - ASSERT (SUCCEEDED (hResult)); - - return S_OK; -} - - - -extern "C" bool g3_draw_bitmap (vms_vector *pos, fix width, fix height,grs_bitmap *pbm) -{ - ULONG cPoints = 4; - - D3DVECTOR vecRight = g_vecRight * f2fl (width); - D3DVECTOR vecUp = g_vecUp * f2fl (height); - D3DVECTOR vecPos ( - (D3DVALUE) f2fl (pos->x) / 10, - (D3DVALUE) f2fl (pos->y) / 10, - (D3DVALUE) f2fl (pos->z) / 10); - - double dCol = 0.5; - double dColR = min (1, max (0, dCol + g_fPSURed)); - double dColG = min (1, max (0, dCol + g_fPSUGreen)); - double dColB = min (1, max (0, dCol + g_fPSUBlue)); - D3DCOLOR col = D3DRGBA (dColR, dColG, dColB, 0); - - D3DVALUE flAdjX, flAdjY; - CTexture *pTexture = (CTexture *) pbm->pvSurface; - pTexture->GetBitmapAdj (&flAdjX, &flAdjY); - - D3DLVERTEX rgVerts [4] = - { - D3DLVERTEX (vecPos - vecRight - vecUp, col, 0, 0, flAdjY), - D3DLVERTEX (vecPos - vecRight + vecUp, col, 0, 0, 0), - D3DLVERTEX (vecPos + vecRight + vecUp, col, 0, flAdjX, 0), - D3DLVERTEX (vecPos + vecRight - vecUp, col, 0, flAdjX, flAdjY), - }; - - HRESULT hResult; - hResult = SetTexture (pTexture); - ASSERT (SUCCEEDED (hResult)); - - hResult = g_pd3dDevice->DrawPrimitive (D3DPT_TRIANGLEFAN, D3DFVF_LVERTEX, rgVerts, cPoints, D3DDP_WAIT); - ASSERT (SUCCEEDED (hResult)); - - return S_OK; -} - -extern "C" void BlitToPrimary(HDC hSrcDC) -{ - RECT rectDest; - rectDest.left = 0; - rectDest.top = 0; - rectDest.right = g_pFramework->m_dwRenderWidth; - rectDest.bottom = g_pFramework->m_dwRenderHeight; - - if (g_bWindowed) - { - rectDest.left += g_pFramework->m_rcScreenRect.left; - rectDest.right += g_pFramework->m_rcScreenRect.left; - rectDest.top += g_pFramework->m_rcScreenRect.top; - rectDest.bottom += g_pFramework->m_rcScreenRect.top; - } - - HDC hDstDC; - if (g_pFramework->GetFrontBuffer()->GetDC(&hDstDC) == DD_OK) - { - StretchBlt(hDstDC, rectDest.left, rectDest.top, - rectDest.right - rectDest.left, rectDest.bottom - rectDest.top, - hSrcDC, 0, 0, 320, 200, SRCCOPY); - g_pFramework->GetFrontBuffer()->ReleaseDC(hDstDC); - } - return; -} - -extern "C" void BlitToPrimaryRect(HDC hSrcDC, int x, int y, int w, int h, - unsigned char *dst) -{ - RECT rectDest; - int destWidth = g_pFramework->m_dwRenderWidth; - int destHeight = g_pFramework->m_dwRenderHeight; - - rectDest.left = (x * destWidth) / 320; - rectDest.top = (y * destHeight) / 200; - rectDest.right = ((x + w) * destWidth) / 320; - rectDest.bottom = ((y + h) * destHeight) / 200; - - if (g_bWindowed && (int)dst == BM_D3D_DISPLAY) - { - rectDest.left += g_pFramework->m_rcScreenRect.left; - rectDest.right += g_pFramework->m_rcScreenRect.left; - rectDest.top += g_pFramework->m_rcScreenRect.top; - rectDest.bottom += g_pFramework->m_rcScreenRect.top; - } - - HDC hDstDC; - IDirectDrawSurface4 *pddsDest = ((int)dst == BM_D3D_DISPLAY) ? - g_pFramework->GetFrontBuffer() : - g_pFramework->GetRenderSurface(); - if (pddsDest->GetDC(&hDstDC) == DD_OK) - { - StretchBlt(hDstDC, rectDest.left, rectDest.top, - rectDest.right - rectDest.left, rectDest.bottom - rectDest.top, - hSrcDC, x, y, w, h, SRCCOPY); - pddsDest->ReleaseDC(hDstDC); - } - return; -} - -HRESULT Blit ( - RECT &rectDest, - LPDIRECTDRAWSURFACE4 pddsSrc, - RECT &rectSrc, - DWORD dwFlags, - DDBLTFX *pddbltfx, - BOOL bPrimary) -{ - rectDest.left = rectDest.left * g_pFramework->m_dwRenderWidth / 320; - rectDest.top = rectDest.top * g_pFramework->m_dwRenderHeight / 200; - rectDest.right = (rectDest.right + 1) * g_pFramework->m_dwRenderWidth / 320; - rectDest.bottom = (rectDest.bottom + 1) * g_pFramework->m_dwRenderHeight / 200; - - if (g_bWindowed && bPrimary) - { - rectDest.left += g_pFramework->m_rcScreenRect.left; - rectDest.right += g_pFramework->m_rcScreenRect.left; - rectDest.top += g_pFramework->m_rcScreenRect.top; - rectDest.bottom += g_pFramework->m_rcScreenRect.top; - } - - IDirectDrawSurface4 *pddsDest; - if (bPrimary) - { - pddsDest = g_pFramework->GetFrontBuffer (); - } - else - { - pddsDest = g_pFramework->GetRenderSurface(); - } - - return pddsDest->Blt ( - &rectDest, - pddsSrc, - &rectSrc, - dwFlags, - pddbltfx); -} - -static void findmask6(int in_mask, int *shift, int *bits6) -{ - int i; - - if (!in_mask) { - *shift = 0; - *bits6 = 6; - return; - } - i = 0; - while (!(in_mask & 1)) - { - in_mask >>= 1; - i++; - } - *shift = i; - i = 0; - while (in_mask & 1) - { - in_mask >>= 1; - i++; - } - *bits6 = 6 - i; -} - -void Win32_SetupColor(void) -{ - DDPIXELFORMAT pf; - pf.dwSize = sizeof(pf); - g_pFramework->GetFrontBuffer ()->GetPixelFormat(&pf); - g_TrueColor = pf.dwRGBBitCount == 24 || pf.dwRGBBitCount == 32; - if (!g_TrueColor) - { - findmask6(pf.dwRBitMask, &g_RShift, &g_RBits6); - findmask6(pf.dwGBitMask, &g_GShift, &g_GBits6); - findmask6(pf.dwBBitMask, &g_BShift, &g_BBits6); - } -} - -extern "C" void Win32_Rect ( - int left, int top, int right, int bot, - int iSurf, - int iCol) -{ - RECT rectDest = {left, top, right, bot}; - - DDBLTFX ddbltfx; - ddbltfx.dwSize = sizeof (ddbltfx); - - #if 0 - if (g_setTextures.HasPalette ()) - { - ddbltfx.dwFillColor = iCol; - } - else - { - PALETTEENTRY pe = g_setTextures.ReadPalette (iCol); - ddbltfx.dwFillColor = *(DWORD*) &pe; - } - #else - unsigned char *p = gr_current_pal + iCol * 3; - if (g_TrueColor) - ddbltfx.dwFillColor = (255 << 24) | (p[0] << 18) | - (p[1] << 10) | (p[2] << 2); - else - ddbltfx.dwFillColor = (p[0] >> g_RBits6) << g_RShift | - (p[1] >> g_GBits6) << g_GShift | - (p[2] >> g_BBits6) << g_BShift; - #endif - - HRESULT hr = Blit ( - rectDest, - NULL, - rectDest, - DDBLT_WAIT | DDBLT_COLORFILL, - &ddbltfx, - iSurf == BM_D3D_DISPLAY); -} - - -extern "C" void Win32_BlitLinearToDirectX ( - int w, int h, - int dx, int dy, - int sx, int sy, - void *pvSurface, - int iSurf, - BOOL bTransparent) -{ - CTexture *pTexture = (CTexture *) pvSurface; - - if (pTexture == NULL) - { - return; - } - - if (!(w <= pTexture->m_ulWidthSource && h <= pTexture->m_ulHeightSource)) - { - ASSERT (FALSE); - } - - if (pTexture->isDirtyMemory ()) - { - pTexture->CleanMemory (); - } - - RECT rectDest = {dx, dy, dx + w, dy + h}; - RECT rectSrc = {0, 0, w, h}; - - HRESULT hr = Blit ( - rectDest, - pTexture->GetSurface (), - rectSrc, - DDBLT_WAIT, - NULL, - iSurf == BM_D3D_DISPLAY); -} - -extern "C" void Win32_start_instance_matrix (vms_vector *pPos, vms_matrix *pOrient) -{ - D3DMATRIX matOrientInv; - if (pOrient != NULL) - { - D3DMATRIX matOrient; - - matOrient(0, 0) = (D3DVALUE) f2fl (pOrient->rvec.x); - matOrient(1, 0) = (D3DVALUE) f2fl (pOrient->rvec.y); - matOrient(2, 0) = (D3DVALUE) f2fl (pOrient->rvec.z); - matOrient(3, 0) = 0; - matOrient(0, 1) = (D3DVALUE) f2fl (pOrient->uvec.x); - matOrient(1, 1) = (D3DVALUE) f2fl (pOrient->uvec.y); - matOrient(2, 1) = (D3DVALUE) f2fl (pOrient->uvec.z); - matOrient(3, 1) = 0; - matOrient(0, 2) = (D3DVALUE) f2fl (pOrient->fvec.x); - matOrient(1, 2) = (D3DVALUE) f2fl (pOrient->fvec.y); - matOrient(2, 2) = (D3DVALUE) f2fl (pOrient->fvec.z); - matOrient(3, 2) = 0; - matOrient(0, 3) = 0; - matOrient(1, 3) = 0; - matOrient(2, 3) = 0; - matOrient(3, 3) = 1; - - D3DMath_MatrixInvert (matOrientInv, matOrient); - } - else - { - D3DUtil_SetIdentityMatrix (matOrientInv); - } - - D3DMATRIX matTranslate; - D3DUtil_SetTranslateMatrix ( - matTranslate, - (D3DVALUE) f2fl (pPos->x) / 10, - (D3DVALUE) f2fl (pPos->y) / 10, - (D3DVALUE) f2fl (pPos->z) / 10); - - D3DMATRIX matTmp; - D3DMath_MatrixMultiply (matTmp, g_stkWorlds.top (), matTranslate); - D3DMATRIX matWorld; - D3DMath_MatrixMultiply (matWorld, matTmp, matOrientInv); - - g_stkWorlds.push (matWorld); - - g_pd3dDevice->SetTransform( D3DTRANSFORMSTATE_WORLD, &matWorld ); -} - -extern "C" void Win32_done_instance (void) -{ - g_stkWorlds.pop (); - - D3DMATRIX matWorld = g_stkWorlds.top (); - g_pd3dDevice->SetTransform( D3DTRANSFORMSTATE_WORLD, &matWorld ); -} - - -extern "C" void Win32_SetTextureBits (grs_bitmap *bm, unsigned char *data, int bRle) -{ - CTexture *pTexture = (CTexture *) bm->pvSurface; - if (pTexture != NULL) - { - pTexture->SetBitmapData (data, bRle); - pTexture->SetTransparent (bm->bm_flags & BM_FLAG_TRANSPARENT); - } -} - -extern "C" void Win32_CreateTexture (grs_bitmap *bm) -{ - bm->pvSurface = (void *) g_setTextures.CreateTexture ( - bm->bm_data, - bm->bm_w, - bm->bm_h, - bm->bm_rowsize); -} - -extern "C" void Win32_FreeTexture (grs_bitmap *bm) -{ - CTexture *pTexture = (CTexture *) bm->pvSurface; - if (pTexture != NULL) - { - g_setTextures.FreeTexture (pTexture); - bm->pvSurface = NULL; - } -} - -extern "C" void Win32_SetTransparent (void *pvTexture, BOOL bTransparent) -{ - CTexture *pTexture = (CTexture *) pvTexture; - if (pTexture != NULL) - { - pTexture->SetTransparent (bTransparent); - } -} - diff --git a/arch/win32/texture.cpp b/arch/win32/texture.cpp deleted file mode 100755 index d94bd0145..000000000 --- a/arch/win32/texture.cpp +++ /dev/null @@ -1,533 +0,0 @@ -#include "pch.h" -#include "texture.h" - -#include "d3dframe.h" -extern CD3DFramework* g_pFramework; - -//////////////////////////////////////////////////////////////////////////// - -BOOL CTexture::s_bLocked = FALSE; -DDSURFACEDESC2 CTexture::s_ddsd; - - -HRESULT CTexture::Initialize (BYTE *rgbSource, ULONG ulWidth, ULONG ulHeight, ULONG ulPitch) -{ - m_rgbSource = rgbSource; - m_ulWidthSource = ulWidth; - m_ulHeightSource = ulHeight; - m_ulPitchSource = ulPitch; - - return S_OK; -} - -HRESULT CTexture::Allocate (CPaletteInfo *ppi) -{ - HRESULT hr; - - ASSERT (m_spddsMemory == NULL); - - if (ppi->IsPow2 ()) - { - m_ulWidth = 1; - while (m_ulWidth < m_ulWidthSource) - m_ulWidth *= 2; - - m_ulHeight = 1; - while (m_ulHeight < m_ulHeightSource) - m_ulHeight *= 2; - } - else - { - m_ulWidth = m_ulWidthSource; - m_ulHeight = m_ulHeightSource; - } - - if (ppi->IsSquare ()) - { - if (m_ulHeight > m_ulWidth) - { - m_ulWidth = m_ulHeight; - } - else - { - m_ulHeight = m_ulWidth; - } - } - - m_flAdjX = (D3DVALUE) m_ulWidthSource / (D3DVALUE) m_ulWidth; - m_flAdjY = (D3DVALUE) m_ulHeightSource / (D3DVALUE) m_ulHeight; - - DDSURFACEDESC2 ddsd; - ZeroMemory (&ddsd, sizeof (ddsd)); - ddsd.dwSize = sizeof (ddsd); - ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; - ddsd.dwWidth = m_ulWidth; - ddsd.dwHeight = m_ulHeight; - ddsd.ddsCaps.dwCaps = DDSCAPS_TEXTURE; - ddsd.ddsCaps.dwCaps2 = DDSCAPS2_TEXTUREMANAGE; - ppi->GetPixelFormat (&ddsd.ddpfPixelFormat); - - hr = g_pFramework->GetDirectDraw ()->CreateSurface(&ddsd, &m_spddsMemory, NULL); - ASSERT (SUCCEEDED (hr)); - if (FAILED (hr)) - return hr; - - ASSERT (m_spddsMemory != NULL); - - m_spddtMemory = m_spddsMemory; - - DirtyMemory (); - - DDCOLORKEY ddck; - if (ppi->IsIndexed ()) - { - ddck.dwColorSpaceLowValue = 255; - ddck.dwColorSpaceHighValue = 255; - } - else - { - ddck.dwColorSpaceLowValue = 0; - ddck.dwColorSpaceHighValue = 0; - } - hr = m_spddsMemory->SetColorKey (DDCKEY_SRCBLT, &ddck); - ASSERT (SUCCEEDED (hr)); - - if (ppi->GetPalette () != NULL) - { - hr = m_spddsMemory->SetPalette (ppi->GetPalette ()); - ASSERT (SUCCEEDED (hr)); - } - - return hr; -} - -HRESULT CTexture::Free (void) -{ - HRESULT hr = S_OK; - - m_spddtMemory = m_spddsMemory = NULL; - - m_ulWidth = 0; - m_ulHeight = 0; - - return hr; -} - -HRESULT CTexture::Lock (void) -{ - HRESULT hr; - if (!s_bLocked) - { - s_bLocked = TRUE; - - s_ddsd.dwSize = sizeof (s_ddsd); - hr = m_spddsMemory->Lock ( - NULL, - &s_ddsd, -#ifndef NDEBUG - DDLOCK_NOSYSLOCK | -#endif - DDLOCK_WAIT, - NULL); - ASSERT (SUCCEEDED (hr)); - } - else - { - // already locked - hr = E_FAIL; - ASSERT (FALSE); - } - return hr; -} - -HRESULT CTexture::Unlock (void) -{ - HRESULT hr; - if (s_bLocked) - { - hr = m_spddsMemory->Unlock (NULL); - ASSERT (SUCCEEDED (hr)); - - s_bLocked = FALSE; - } - else - { - // not locked - hr = E_FAIL; - ASSERT (FALSE); - } - return hr; -} - -void CTexture::PlotPixel (ULONG ulX, ULONG ulY, BYTE b) -{ - ASSERT (ulX <= m_ulWidth); - ASSERT (ulY <= m_ulHeight); - - ASSERT (s_bLocked); - ASSERT (s_ddsd.lpSurface != NULL); - - switch (s_ddsd.ddpfPixelFormat.dwRGBBitCount) - { - case 8: - { - * (((LPBYTE) s_ddsd.lpSurface) + ulX + ulY * s_ddsd.lPitch) = b; - - break; - } - case 16: - { - WORD w; - if (!(m_bTransparent && b == 255)) - { - w = m_ppi->Read16 (b); - } - else - { - w = 0; - } - * (WORD *) (((LPBYTE) s_ddsd.lpSurface) + ulX * 2 + ulY * s_ddsd.lPitch) = w; - break; - } - - default: - { - ASSERT (FALSE); - break; - } - } -} - -void CTexture::SetBitmapData (BYTE *rgb, BOOL bRle) -{ - m_rgbSource = rgb; - m_bRle = bRle; - DirtyMemory (); -} - -void CTexture::CopyFromSource (void) -{ - if (SUCCEEDED (Lock ())) - { - if (m_bRle) - { - PBYTE pbLine = m_rgbSource + m_ulHeightSource + 4;; - for (ULONG y = 0; y < m_ulHeightSource; y ++) - { - ULONG x = 0; - PBYTE pbSrc = pbLine; - - while (1) - { - const BYTE RLE_CODE = 0xE0; - BYTE b = *pbSrc++; - if ((b & RLE_CODE) != RLE_CODE) - { - PlotPixel (x++, y, b); - } - else - { - BYTE cb = b & (~RLE_CODE); - if (cb == 0) - break; - - b = *pbSrc++; - while (cb--) - PlotPixel (x++, y, b); - } - } - ASSERT (x <= m_ulWidthSource); - - pbLine += m_rgbSource [y + 4]; - } - } - else - { - LPBYTE lpbDest = (LPBYTE) s_ddsd.lpSurface; - LPBYTE lpbSrc = m_rgbSource; - - switch (s_ddsd.ddpfPixelFormat.dwRGBBitCount) - { - case 8: - { - for (ULONG y = m_ulHeightSource; y != 0; y--) - { - memcpy (lpbDest, lpbSrc, m_ulPitchSource); - lpbDest += s_ddsd.lPitch; - lpbSrc += m_ulPitchSource; - } - break; - } - case 16: - { - for (ULONG y = m_ulHeightSource; y != 0; y--) - { - LPBYTE lpbLineSrc = lpbSrc; - LPWORD lpwLineDest = (LPWORD) lpbDest; - - if (m_bTransparent) - { - for (ULONG x = m_ulWidthSource; x != 0; x--) - { - BYTE b = *lpbLineSrc++; - *lpwLineDest++ = (b == 255) ? 0 : m_ppi->Read16 (b); - } - } - else - { - for (ULONG x = m_ulWidthSource; x != 0; x--) - { - *lpwLineDest++ = m_ppi->Read16 (*lpbLineSrc++); - } - } - lpbDest += s_ddsd.lPitch; - lpbSrc += m_ulPitchSource; - } - break; - } - - default: - { - ASSERT (FALSE); - break; - } - } - } - Unlock (); - } - else - { - ASSERT (FALSE); - } -} - -HRESULT CTexture::CleanMemory (void) -{ - CopyFromSource (); - m_bDirtyMemory = FALSE; - return S_OK; -} - -IDirect3DTexture2 *CTexture::GetTexture () -{ - if (m_bDirtyMemory) - { - CleanMemory (); - } - - return m_spddtMemory; -} - -//////////////////////////////////////////////////////////////////////////// - -struct FindTextureData -{ - DWORD bpp; // we want a texture format of this bpp - DDPIXELFORMAT ddpf; // place the format here -}; - - -HRESULT CALLBACK FindTextureCallback(LPDDPIXELFORMAT pddpf, LPVOID lParam) -{ - FindTextureData * FindData = (FindTextureData *)lParam; - - // - // we use GetDC/BitBlt to init textures so we only - // want to use formats that GetDC will support. - // - if (pddpf->dwFlags & (DDPF_ALPHA|DDPF_ALPHAPIXELS)) - return DDENUMRET_OK; - -/* - if (pddpf->dwRGBBitCount == 16) - { - FindData->ddpf = ddpf; - } - - return DDENUMRET_OK; -*/ - - -// if (!(pddpf->dwFlags & DDPF_ALPHAPIXELS)) -// return DDENUMRET_OK; - - if (pddpf->dwRGBBitCount < 8) - return DDENUMRET_OK; - - if (pddpf->dwRGBBitCount == 8 && !(pddpf->dwFlags & DDPF_PALETTEINDEXED8)) - return DDENUMRET_OK; - - if (pddpf->dwRGBBitCount > 8 && !(pddpf->dwFlags & DDPF_RGB)) - return DDENUMRET_OK; - - // - // keep the texture format that is nearest to the bitmap we have - // - if (FindData->ddpf.dwRGBBitCount == 0 || - (pddpf->dwRGBBitCount >= FindData->bpp && pddpf->dwRGBBitCount <= FindData->ddpf.dwRGBBitCount) //&& - //(pddpf->dwAlphaBitDepth != 0 && pddpf->dwAlphaBitDepth > FindData->ddpf.dwAlphaBitDepth) // ALPHA BIT DEPTHS ARE REVERSED!!!! - ) - { - FindData->ddpf = *pddpf; - } - - return DDENUMRET_OK; -} - -void ChooseTextureFormat(LPDIRECT3DDEVICE3 Device, DWORD bpp, DDPIXELFORMAT *pddpf) -{ - HRESULT hr; - FindTextureData FindData; - ZeroMemory(&FindData, sizeof(FindData)); - FindData.bpp = bpp; - hr = Device->EnumTextureFormats(FindTextureCallback, (LPVOID)&FindData); - ASSERT(hr == S_OK); - *pddpf = FindData.ddpf; -} - -HRESULT CPaletteInfo::Initialize () -{ - m_spddpPalette = NULL; - - // - // find the best texture format to use. - // - ChooseTextureFormat (g_pFramework->GetD3DDevice (), 8, &m_ddpfPixelFormat); - - m_cshftR = GetShift (m_mskR = m_ddpfPixelFormat.dwRBitMask); - m_cshftG = GetShift (m_mskG = m_ddpfPixelFormat.dwGBitMask); - m_cshftB = GetShift (m_mskB = m_ddpfPixelFormat.dwBBitMask); - - HRESULT hr; - - D3DDEVICEDESC descHAL, descHEL; - descHAL.dwSize = descHEL.dwSize = sizeof (descHAL); - hr = g_pFramework->GetD3DDevice ()->GetCaps (&descHAL, &descHEL); - ASSERT (SUCCEEDED (hr)); - - if (!descHAL.dwFlags) { - m_bPow2 = (descHEL.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_POW2) != 0; - m_bSquare = (descHEL.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_SQUAREONLY) != 0; - } else { - m_bPow2 = (descHAL.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_POW2) != 0; - m_bSquare = (descHAL.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_SQUAREONLY) != 0; - } - - if (IsIndexed ()) - { - hr = g_pFramework->GetDirectDraw ()->CreatePalette (DDPCAPS_8BIT | DDPCAPS_ALLOW256, m_rgpe, &m_spddpPalette, NULL); - ASSERT (SUCCEEDED (hr)); - } - - return S_OK; -} - -HRESULT CPaletteInfo::Uninitialize () -{ - m_spddpPalette = NULL; // smart pointer release - - return S_OK; -} - -void CPaletteInfo::SetPaletteEntries (PALETTEENTRY rgpe [256]) -{ - // okay, we don't really need to cache the palette values - // we could implement ReadPalette by individual Getentries calls... - memcpy (m_rgpe, rgpe, sizeof (m_rgpe)); - - if (m_spddpPalette != NULL) - { - HRESULT hr = m_spddpPalette->SetEntries (0, 0, 256, m_rgpe); - ASSERT (SUCCEEDED (hr)); - } -} - -void CPaletteInfo::GetPaletteEntries (PALETTEENTRY rgpe [256]) -{ - if (m_spddpPalette != NULL) - { - HRESULT hr = m_spddpPalette->GetEntries (0, 0, 256, m_rgpe); - ASSERT (SUCCEEDED (hr)); - } -} - -//////////////////////////////////////////////////////////////// -CPaletteInfo *CTexture::m_ppi; - -HRESULT CTextureSet::Initialize () -{ - HRESULT hr; - - hr = m_pi.Initialize (); - ASSERT (SUCCEEDED (hr)); - - CTexture::m_ppi = &m_pi; - - for (TEXTURE_SET::iterator iter = m_setTextures.begin (); - iter != m_setTextures.end (); - iter ++) - { - (*iter)->Allocate (&m_pi); - } - - return hr; -} - -HRESULT CTextureSet::Uninitialize () -{ - for (TEXTURE_SET::iterator iter = m_setTextures.begin (); - iter != m_setTextures.end (); - iter ++) - { - (*iter)->Free (); - } - - m_pi.Uninitialize (); - - return S_OK; -} - -CTexture *CTextureSet::CreateTexture (BYTE *rgbSource, ULONG dx, ULONG dy, ULONG ulPitch) -{ - CTexture *pTexture = new CTexture; - - pTexture->Initialize (rgbSource, dx, dy, ulPitch); - pTexture->Allocate (&m_pi); - - m_setTextures.insert (pTexture); - - return pTexture; -} - -void CTextureSet::FreeTexture (CTexture *pTexture) -{ - m_setTextures.erase (pTexture); - - delete pTexture; -} - -void CTextureSet::DirtyTextures (void) -{ - for (TEXTURE_SET::iterator iter = m_setTextures.begin (); - iter != m_setTextures.end (); - iter ++) - { - (*iter)->DirtyMemory (); - } -} - - -void CTextureSet::SetPaletteEntries (PALETTEENTRY rgpe [256]) -{ - m_pi.SetPaletteEntries (rgpe); - - if (!m_pi.IsIndexed ()) - { - DirtyTextures (); - } -} - -void CTextureSet::GetPaletteEntries (PALETTEENTRY rgpe [256]) -{ - m_pi.GetPaletteEntries (rgpe); -} diff --git a/arch/win32/timer.c b/arch/win32/timer.c deleted file mode 100644 index 4b59a88df..000000000 --- a/arch/win32/timer.c +++ /dev/null @@ -1,71 +0,0 @@ -/* -THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX -SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO -END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A -ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS -IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS -SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE -FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE -CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS -AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. -COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. -*/ - -// File nearly completely rewritten by dph-man - -#include -#include // DPH: We use timeGetTime from here... - -#include "types.h" -#include "maths.h" -#include "timer.h" - -static int Installed = 0; - -static unsigned long old_tv; - -fix timer_get_fixed_seconds() -{ - fix x; - - //Ye good olde unix: - //Ye bad olde Windows DPH:-) -/* DPH: Using timeGetTime will fail approximately 47 days after Windows was - started as the timer wraps around to 0. Ever had Windows not crash for 47 - consecutive days? Thought not. */ - - unsigned long tv_now=timeGetTime()-old_tv; - x=i2f(tv_now/1000) | fixdiv(i2f(tv_now % 1000),i2f(1000)); - return x; -} - -void delay(int d_time) -{ - fix t, total; - - total = (F1_0 * d_time) / 1000; - t = timer_get_fixed_seconds(); - while (timer_get_fixed_seconds() - t < total) ; -} - -void timer_close() -{ - Installed = 0; -} - -void timer_init() -{ - - if (Installed) - return; - Installed = 1; - -/* DPH: Using timeGetTime will fail approximately 47 days after Windows was - started as the timer wraps around to 0. Ever had Windows not crash for 47 - consecutive days? Thought not. */ - old_tv=timeGetTime(); - -} - -// NOTE: This C file has been "neutered" by dph-man. If someone wants to work -// on this, feel free. I don't use joystick :-) diff --git a/arch/win32/winmain.cpp b/arch/win32/winmain.cpp deleted file mode 100755 index 46d4600f7..000000000 --- a/arch/win32/winmain.cpp +++ /dev/null @@ -1,690 +0,0 @@ -//----------------------------------------------------------------------------- -// File: WinMain.cpp -// -// Desc: Windows code for Direct3D samples -// -// This code uses the Direct3D sample framework. -// -// -// Copyright (c) 1996-1998 Microsoft Corporation. All rights reserved. -//----------------------------------------------------------------------------- - -#include "pch.h" -#include "WinMain.h" -#include "D3DFrame.h" -#include "D3DEnum.h" -#include "D3DUtil.h" -#include "resource.h" - -#include "scene.h" - - -//----------------------------------------------------------------------------- -// Global variables for using the D3D sample framework class -//----------------------------------------------------------------------------- -CD3DFramework* g_pFramework = NULL; -BOOL g_bActive = FALSE; -BOOL g_bReady = FALSE; -BOOL g_bFrameMoving = TRUE; -BOOL g_bSingleStep = FALSE; -BOOL g_bWindowed = TRUE; -BOOL g_bShowStats = TRUE; -RECT g_rcWindow; -HACCEL g_hAccel; -HWND g_hWnd; - -enum APPMSGTYPE { MSG_NONE, MSGERR_APPMUSTEXIT, MSGWARN_SWITCHTOSOFTWARE }; - - - - -//----------------------------------------------------------------------------- -// Local function-prototypes -//----------------------------------------------------------------------------- -INT CALLBACK AboutProc( HWND, UINT, WPARAM, LPARAM ); -LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); -HRESULT Initialize3DEnvironment( HWND ); -HRESULT Change3DEnvironment( HWND ); -HRESULT Render3DEnvironment(); -VOID Cleanup3DEnvironment(); -VOID DisplayFrameworkError( HRESULT, APPMSGTYPE ); -VOID AppShowStats(); -VOID AppOutputText( LPDIRECT3DDEVICE3, DWORD, DWORD, CHAR* ); -VOID AppPause( BOOL ); - - - - -//----------------------------------------------------------------------------- -// Name: WinMain() -// Desc: Entry point to the program. Initializes everything, and goes into a -// message-processing loop. Idle time is used to render the scene. -//----------------------------------------------------------------------------- -//INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT ) -extern "C" INT InitMain () -{ - HINSTANCE hInst = GetModuleHandle (NULL); - - // Register the window class - WNDCLASS wndClass = { CS_HREDRAW | CS_VREDRAW, WndProc, 0, 0, hInst, - LoadIcon( hInst, MAKEINTRESOURCE(IDI_MAIN_ICON)), - LoadCursor(NULL, IDC_ARROW), - (HBRUSH)GetStockObject(WHITE_BRUSH), - MAKEINTRESOURCE(IDR_MENU), - TEXT("Render Window") }; - RegisterClass( &wndClass ); - - // Create our main window - g_hWnd = CreateWindow( TEXT("Render Window"), g_strAppTitle, - WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, - CW_USEDEFAULT, 300, 300, 0L, 0L, hInst, 0L ); - - RECT rect; - if (GetClientRect (g_hWnd, &rect)) - { - int cx = 320 + (300 - rect.right); - int cy = 200 + (300 - rect.bottom); - - SetWindowPos (g_hWnd, NULL, 0, 0, cx, cy, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOREDRAW | SWP_NOZORDER); - } - - ShowWindow( g_hWnd, SW_SHOWNORMAL ); - UpdateWindow( g_hWnd ); - - // Save the window size/pos for switching modes - GetWindowRect( g_hWnd, &g_rcWindow ); - - // Load keyboard accelerators - g_hAccel = LoadAccelerators( hInst, MAKEINTRESOURCE(IDR_MAIN_ACCEL) ); - - // Enumerate available D3D devices, passing a callback that allows devices - // to be accepted/rejected based on what capabilities the app requires. - HRESULT hr; - if( FAILED( hr = D3DEnum_EnumerateDevices( App_ConfirmDevice ) ) ) - { - DisplayFrameworkError( hr, MSGERR_APPMUSTEXIT ); - return 0; - } - - // Check if we could not get a device that renders into a window, which - // means the display must be 16- or 256-color mode. If so, let's bail. - D3DEnum_DriverInfo* pDriverInfo; - D3DEnum_DeviceInfo* pDeviceInfo; - D3DEnum_GetSelectedDriver( &pDriverInfo, &pDeviceInfo ); - if( FALSE == pDeviceInfo->bWindowed ) - { - Cleanup3DEnvironment(); - DisplayFrameworkError( D3DFWERR_INVALIDMODE, MSGERR_APPMUSTEXIT ); - return 0; - } - - // Initialize the 3D environment for the app - if( FAILED( hr = Initialize3DEnvironment( g_hWnd ) ) ) - { - Cleanup3DEnvironment(); - DisplayFrameworkError( hr, MSGERR_APPMUSTEXIT ); - return 0; - } - - g_bReady = TRUE; - - return 1; -} - -void PumpMessages (void) -{ - MSG msg; - while (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) - { - // Exit App ?!? - if (msg.message == WM_QUIT) - { - return; - } - - if (!TranslateAccelerator (g_hWnd, g_hAccel, &msg)) - { - TranslateMessage (&msg); - DispatchMessage (&msg); - } - } -} - - - - -//----------------------------------------------------------------------------- -// Name: WndProc() -// Desc: This is the basic Windows-programming function that processes -// Windows messages. We need to handle window movement, painting, -// and destruction. -//----------------------------------------------------------------------------- -LRESULT CALLBACK WndProc( HWND g_hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - switch( uMsg ) - { - case WM_PAINT: - if( g_pFramework ) - { - // If we are paused, and in fullscreen mode, give the dialogs - // a GDI surface to draw on. - if( !g_bReady && !g_bWindowed) - g_pFramework->FlipToGDISurface( TRUE ); - else // Simply repaint the frame's contents - g_pFramework->ShowFrame(); - } - break; - - case WM_MOVE: - if( g_bActive && g_bReady && g_bWindowed ) - { - GetWindowRect( g_hWnd, &g_rcWindow ); - g_pFramework->Move( (SHORT)LOWORD(lParam), (SHORT)HIWORD(lParam) ); - } - break; - - case WM_SIZE: - // Check to see if we are losing our window... - if( SIZE_MAXHIDE==wParam || SIZE_MINIMIZED==wParam ) - g_bActive = FALSE; - else g_bActive = TRUE; - - // A new window size will require a new viewport and backbuffer - // size, so the 3D structures must be changed accordingly. - if( g_bActive && g_bReady && g_bWindowed ) - { - g_bReady = FALSE; - GetWindowRect( g_hWnd, &g_rcWindow ); - Change3DEnvironment( g_hWnd ); - g_bReady = TRUE; - } - break; - - case WM_GETMINMAXINFO: - ((MINMAXINFO*)lParam)->ptMinTrackSize.x = 100; - ((MINMAXINFO*)lParam)->ptMinTrackSize.y = 100; - break; - - case WM_SETCURSOR: - if( g_bActive && g_bReady && (!g_bWindowed) ) - { - SetCursor(NULL); - return TRUE; - } - break; - - case WM_CLOSE: - DestroyWindow( g_hWnd ); - return 0; - - case WM_DESTROY: - Cleanup3DEnvironment(); - PostQuitMessage(0); - return 0L; - - case WM_ENTERMENULOOP: - AppPause(TRUE); - break; - - case WM_EXITMENULOOP: - AppPause(FALSE); - break; - - case WM_CONTEXTMENU: - { - HMENU hMenu = LoadMenu( 0, MAKEINTRESOURCE(IDR_POPUP) ); - TrackPopupMenuEx( GetSubMenu( hMenu, 0 ), - TPM_VERTICAL, LOWORD(lParam), - HIWORD(lParam), g_hWnd, NULL ); - } - break; - - case WM_COMMAND: - switch( LOWORD(wParam) ) - { - case SC_MONITORPOWER: - // Prevent potential crashes when the monitor powers down - return 1; - - case IDM_TOGGLESTART: - g_bFrameMoving = !g_bFrameMoving; - break; - - case IDM_SINGLESTEP: - g_bSingleStep = TRUE; - break; - - case IDM_CHANGEDEVICE: - // Display the driver-selection dialog box. - if( g_bActive && g_bReady ) - { - AppPause(TRUE); - if( g_bWindowed ) - GetWindowRect( g_hWnd, &g_rcWindow ); - - HWND hWnd = g_hWnd; - if( IDOK == D3DEnum_UserDlgSelectDriver( hWnd, g_bWindowed ) ) - { - D3DEnum_DriverInfo* pDriverInfo; - D3DEnum_DeviceInfo* pDeviceInfo; - D3DEnum_GetSelectedDriver( &pDriverInfo, &pDeviceInfo ); - g_bWindowed = pDeviceInfo->bWindowed; - - Change3DEnvironment( g_hWnd ); - } - AppPause(FALSE); - } - return 0; - - case IDM_TOGGLEFULLSCREEN: - // Toggle the fullscreen/window mode - if( g_bActive && g_bReady ) - { - g_bReady = FALSE; - if( g_bWindowed ) - GetWindowRect( g_hWnd, &g_rcWindow ); - g_bWindowed = !g_bWindowed; - Change3DEnvironment( g_hWnd ); - g_bReady = TRUE; - } - return 0; - - case IDM_HELP: - AppPause(TRUE); - DialogBox( (HINSTANCE)GetWindowLong( g_hWnd, GWL_HINSTANCE ), - MAKEINTRESOURCE(IDD_ABOUT), g_hWnd, (DLGPROC)AboutProc ); - AppPause(FALSE); - return 0; - - case IDM_EXIT: - // Recieved key/menu command to exit app - SendMessage( g_hWnd, WM_CLOSE, 0, 0 ); - return 0; - } - break; - } - - return DefWindowProc( g_hWnd, uMsg, wParam, lParam ); -} - - - - -//----------------------------------------------------------------------------- -// Name: AboutProc() -// Desc: Minimal message proc function for the about box -//----------------------------------------------------------------------------- -BOOL CALLBACK AboutProc( HWND g_hWnd, UINT uMsg, WPARAM wParam, LPARAM ) -{ - if( WM_COMMAND == uMsg ) - if( IDOK == LOWORD(wParam) || IDCANCEL == LOWORD(wParam) ) - EndDialog (g_hWnd, TRUE); - - return ( WM_INITDIALOG == uMsg ) ? TRUE : FALSE; -} - - - - -//----------------------------------------------------------------------------- -// Note: From this point on, the code is DirectX specific support for the app. -//----------------------------------------------------------------------------- - - - - -//----------------------------------------------------------------------------- -// Name: AppInitialize() -// Desc: Initializes the sample framework, then calls the app-specific function -// to initialize device specific objects. This code is structured to -// handled any errors that may occur duing initialization -//----------------------------------------------------------------------------- -HRESULT AppInitialize( HWND g_hWnd ) -{ - D3DEnum_DriverInfo* pDriverInfo; - D3DEnum_DeviceInfo* pDeviceInfo; - DWORD dwFrameworkFlags = 0L; - HRESULT hr; - - D3DEnum_GetSelectedDriver( &pDriverInfo, &pDeviceInfo ); - - dwFrameworkFlags |= (!g_bWindowed ? D3DFW_FULLSCREEN : 0L ); - dwFrameworkFlags |= ( g_bAppUseZBuffer ? D3DFW_ZBUFFER : 0L ); - dwFrameworkFlags |= ( g_bAppUseBackBuffer ? D3DFW_BACKBUFFER : 0L ); - - // Initialize the D3D framework - if( SUCCEEDED( hr = g_pFramework->Initialize( g_hWnd, &pDriverInfo->guid, - &pDeviceInfo->guid, &pDeviceInfo->pCurrentMode->ddsd, - dwFrameworkFlags ) ) ) - { - // Let the app run its startup code which creates the 3d scene. - if( SUCCEEDED( hr = App_InitDeviceObjects( g_pFramework->GetD3DDevice(), - g_pFramework->GetViewport() ) ) ) - return S_OK; - else - { - App_DeleteDeviceObjects( g_pFramework->GetD3DDevice(), - g_pFramework->GetViewport() ); - g_pFramework->DestroyObjects(); - } - } - - // If we get here, the first initialization passed failed. If that was with a - // hardware device, try again using a software rasterizer instead. - if( pDeviceInfo->bIsHardware ) - { - // Try again with a software rasterizer - DisplayFrameworkError( hr, MSGWARN_SWITCHTOSOFTWARE ); - D3DEnum_SelectDefaultDriver( D3DENUM_SOFTWAREONLY ); - return AppInitialize( g_hWnd ); - } - - return hr; -} - - - - -//----------------------------------------------------------------------------- -// Name: Initialize3DEnvironment() -// Desc: Called when the app window is initially created, this triggers -// creation of the remaining portion (the 3D stuff) of the app. -//----------------------------------------------------------------------------- -HRESULT Initialize3DEnvironment( HWND g_hWnd ) -{ - HRESULT hr; - - // Initialize the app - if( FAILED( hr = App_OneTimeSceneInit( g_hWnd ) ) ) - return E_FAIL; - - // Create a new CD3DFramework class. This class does all of our D3D - // initialization and manages the common D3D objects. - if( NULL == ( g_pFramework = new CD3DFramework() ) ) - return E_OUTOFMEMORY; - - // Finally, initialize the framework and scene. - return AppInitialize( g_hWnd ); -} - - - - -//----------------------------------------------------------------------------- -// Name: Change3DEnvironment() -// Desc: Handles driver, device, and/or mode changes for the app. -//----------------------------------------------------------------------------- -HRESULT Change3DEnvironment( HWND g_hWnd ) -{ - HRESULT hr; - - // Release all objects that need to be re-created for the new device - App_DeleteDeviceObjects( g_pFramework->GetD3DDevice(), - g_pFramework->GetViewport() ); - - // Release the current framework objects (they will be recreated later on) - if( FAILED( hr = g_pFramework->DestroyObjects() ) ) - { - DisplayFrameworkError( hr, MSGERR_APPMUSTEXIT ); - DestroyWindow( g_hWnd ); - return hr; - } - - // In case we're coming from a fullscreen mode, restore the window size - if( g_bWindowed ) - { - SetWindowPos( g_hWnd, HWND_NOTOPMOST, g_rcWindow.left, g_rcWindow.top, - ( g_rcWindow.right - g_rcWindow.left ), - ( g_rcWindow.bottom - g_rcWindow.top ), SWP_SHOWWINDOW ); - } - - // Inform the framework class of the driver change. It will internally - // re-create valid surfaces, a d3ddevice, and a viewport. - if( FAILED( hr = AppInitialize( g_hWnd ) ) ) - { - DisplayFrameworkError( hr, MSGERR_APPMUSTEXIT ); - DestroyWindow( g_hWnd ); - return hr; - } - - // Trigger the rendering of a frame and return - g_bSingleStep = TRUE; - return S_OK; -} - -FLOAT g_fTime; - -extern "C" HRESULT Win32_start_frame () -{ - // Check the cooperative level before rendering - if( FAILED( g_pFramework->GetDirectDraw()->TestCooperativeLevel() ) ) - return S_OK; - - // Get the current time - g_fTime = GetTickCount() * 0.001f; - - return App_StartFrame( g_pFramework->GetD3DDevice(), - g_pFramework->GetViewport(), - (D3DRECT*)g_pFramework->GetViewportRect() ); -} - -extern "C" HRESULT Win32_end_frame () -{ - // Show the frame rate, etc. - if( g_bShowStats ) - AppShowStats(); - - return App_EndFrame (); -} - -extern "C" HRESULT Win32_flip_screens () -{ - // Show the frame on the primary surface. - if( DDERR_SURFACELOST == g_pFramework->ShowFrame() ) - { - g_pFramework->RestoreSurfaces(); - App_RestoreSurfaces(); - } - return S_OK; -} - - - -//----------------------------------------------------------------------------- -// Name: Cleanup3DEnvironment() -// Desc: Cleanup scene objects -//----------------------------------------------------------------------------- -VOID Cleanup3DEnvironment() -{ - if( g_pFramework ) - { - App_FinalCleanup( g_pFramework->GetD3DDevice(), - g_pFramework->GetViewport() ); - - SAFE_DELETE( g_pFramework ); - } - g_bActive = FALSE; - g_bReady = FALSE; -} - - - - -//----------------------------------------------------------------------------- -// Name: AppPause() -// Desc: Called in to toggle the pause state of the app. This function -// brings the GDI surface to the front of the display, so drawing -// output like message boxes and menus may be displayed. -//----------------------------------------------------------------------------- -VOID AppPause( BOOL bPause ) -{ - static DWORD dwAppPausedCount = 0L; - - if( bPause && 0 == dwAppPausedCount ) - if( g_pFramework ) - g_pFramework->FlipToGDISurface( TRUE ); - - dwAppPausedCount += ( bPause ? +1 : -1 ); - - g_bReady = (0==dwAppPausedCount); -} - - - - -//----------------------------------------------------------------------------- -// Name: AppShowStats() -// Desc: Shows frame rate and dimensions of the rendering device. Note: a -// "real" app wouldn't query the surface dimensions each frame. -//----------------------------------------------------------------------------- -VOID AppShowStats() -{ - static FLOAT fFPS = 0.0f; - static FLOAT fLastTime = 0.0f; - static DWORD dwFrames = 0L; - - // Keep track of the time lapse and frame count - FLOAT fTime = GetTickCount() * 0.001f; // Get current time in seconds - ++dwFrames; - - // Update the frame rate once per second - if( fTime - fLastTime > 1.0f ) - { - fFPS = dwFrames / (fTime - fLastTime); - fLastTime = fTime; - dwFrames = 0L; - } - - // Get dimensions of the render surface - DDSURFACEDESC2 ddsd; - ddsd.dwSize = sizeof(DDSURFACEDESC2); - g_pFramework->GetRenderSurface()->GetSurfaceDesc(&ddsd); - - // Setup the text buffer to write out - CHAR buffer[80]; - sprintf( buffer, "%7.02f fps (%dx%dx%d)", fFPS, ddsd.dwWidth, - ddsd.dwHeight, ddsd.ddpfPixelFormat.dwRGBBitCount ); - AppOutputText( g_pFramework->GetD3DDevice(), 0, 0, buffer ); -} - - - - -//----------------------------------------------------------------------------- -// Name: AppOutputText() -// Desc: Draws text on the window. -//----------------------------------------------------------------------------- -VOID AppOutputText( LPDIRECT3DDEVICE3 pd3dDevice, DWORD x, DWORD y, CHAR* str ) -{ - LPDIRECTDRAWSURFACE4 pddsRenderSurface; - if( FAILED( pd3dDevice->GetRenderTarget( &pddsRenderSurface ) ) ) - return; - - // Get a DC for the surface. Then, write out the buffer - HDC hDC; - if( SUCCEEDED( pddsRenderSurface->GetDC(&hDC) ) ) - { - SetTextColor( hDC, RGB(255,255,0) ); - SetBkMode( hDC, TRANSPARENT ); - ExtTextOut( hDC, x, y, 0, NULL, str, strlen(str), NULL ); - - pddsRenderSurface->ReleaseDC(hDC); - } - pddsRenderSurface->Release(); -} - - - - -//----------------------------------------------------------------------------- -// Name: DisplayFrameworkError() -// Desc: Displays error messages in a message box -//----------------------------------------------------------------------------- -VOID DisplayFrameworkError( HRESULT hr, APPMSGTYPE errType ) -{ - CHAR strMsg[512]; - - switch( hr ) - { - case D3DENUMERR_NOCOMPATIBLEDEVICES: - strcpy( strMsg, TEXT("Could not find any compatible Direct3D\n" - "devices.") ); - break; - case D3DENUMERR_SUGGESTREFRAST: - strcpy( strMsg, TEXT("Could not find any compatible devices.\n\n" - "Try enabling the reference rasterizer using\n" - "EnableRefRast.reg.") ); - break; - case D3DENUMERR_ENUMERATIONFAILED: - strcpy( strMsg, TEXT("Enumeration failed. Your system may be in an\n" - "unstable state and need to be rebooted") ); - break; - case D3DFWERR_INITIALIZATIONFAILED: - strcpy( strMsg, TEXT("Generic initialization error.\n\nEnable " - "debug output for detailed information.") ); - break; - case D3DFWERR_NODIRECTDRAW: - strcpy( strMsg, TEXT("No DirectDraw") ); - break; - case D3DFWERR_NODIRECT3D: - strcpy( strMsg, TEXT("No Direct3D") ); - break; - case D3DFWERR_INVALIDMODE: - strcpy( strMsg, TEXT("This sample requires a 16-bit (or higher) " - "display mode\nto run in a window.\n\nPlease switch " - "your desktop settings accordingly.") ); - break; - case D3DFWERR_COULDNTSETCOOPLEVEL: - strcpy( strMsg, TEXT("Could not set Cooperative Level") ); - break; - case D3DFWERR_NO3DDEVICE: - strcpy( strMsg, TEXT("No 3D Device") ); - break; - case D3DFWERR_NOZBUFFER: - strcpy( strMsg, TEXT("No ZBuffer") ); - break; - case D3DFWERR_NOVIEWPORT: - strcpy( strMsg, TEXT("No Viewport") ); - break; - case D3DFWERR_NOPRIMARY: - strcpy( strMsg, TEXT("No primary") ); - break; - case D3DFWERR_NOCLIPPER: - strcpy( strMsg, TEXT("No Clipper") ); - break; - case D3DFWERR_BADDISPLAYMODE: - strcpy( strMsg, TEXT("Bad display mode") ); - break; - case D3DFWERR_NOBACKBUFFER: - strcpy( strMsg, TEXT("No backbuffer") ); - break; - case D3DFWERR_NONZEROREFCOUNT: - strcpy( strMsg, TEXT("Nonzerorefcount") ); - break; - case D3DFWERR_NORENDERTARGET: - strcpy( strMsg, TEXT("No render target") ); - break; - case E_OUTOFMEMORY: - strcpy( strMsg, TEXT("Not enough memory!") ); - break; - case DDERR_OUTOFVIDEOMEMORY: - strcpy( strMsg, TEXT("There was insufficient video memory " - "to use the\nhardware device.") ); - break; - default: - strcpy( strMsg, TEXT("Generic application error.\n\nEnable " - "debug output for detailed information.") ); - } - - if( MSGERR_APPMUSTEXIT == errType ) - { - strcat( strMsg, TEXT("\n\nThis sample will now exit.") ); - MessageBox( NULL, strMsg, g_strAppTitle, MB_ICONERROR|MB_OK ); - } - else - { - if( MSGWARN_SWITCHTOSOFTWARE == errType ) - strcat( strMsg, TEXT("\n\nSwitching to software rasterizer.") ); - MessageBox( NULL, strMsg, g_strAppTitle, MB_ICONWARNING|MB_OK ); - } -} diff --git a/arch/ogl/internal.h b/include/internal.h similarity index 100% rename from arch/ogl/internal.h rename to include/internal.h diff --git a/main/kconfig.c b/main/kconfig.c index 529e8558a..7076f1845 100644 --- a/main/kconfig.c +++ b/main/kconfig.c @@ -1560,12 +1560,10 @@ void controls_read_all() if (CONTROL_USING_MOUSE) { //--------- Read Mouse ----------- mouse_get_delta( &dx, &dy, &dz ); - - mouse_axis[0] = (dx*60); //(dx*FrameTime)/35; - mouse_axis[1] = (dy*85); //(dy*FrameTime)/25; - mouse_axis[2] = (dz*512); + mouse_axis[0] = (dx*FrameTime)/35; + mouse_axis[1] = (dy*FrameTime)/25; + mouse_axis[2] = (dz*FrameTime)/25; mouse_buttons = mouse_get_btns(); - //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime )); use_mouse=1; } else { mouse_axis[0] = 0;