Browse Source

non-working progress save

cxgeorge 24 years ago
parent
commit
212ed03c2b

+ 10 - 11
panda/src/dxgsg8/Sources.pp

@@ -6,26 +6,25 @@
 
 
 #if $[BUILD_DX8]
 #if $[BUILD_DX8]
 #begin lib_target
 #begin lib_target
-
-  #define TARGET dxgsg8
+  #define TARGET dxgsg
   #define LOCAL_LIBS \
   #define LOCAL_LIBS \
     cull gsgmisc gsgbase gobj sgattrib sgraphutil graph display light \
     cull gsgmisc gsgbase gobj sgattrib sgraphutil graph display light \
     putil linmath sgraph mathutil pnmimage event
     putil linmath sgraph mathutil pnmimage event
     
     
-  #define COMBINED_SOURCES $[TARGET]_composite1.cxx
+  #define COMBINED_SOURCES $[TARGET]_composite1.cxx     
 
 
-  #define SOURCES \
-    config_dxgsg8.h dxGraphicsStateGuardian8.I \
-    dxGraphicsStateGuardian8.cxx dxGraphicsStateGuardian8.h \
-    dxSavedFrameBuffer8.I dxSavedFrameBuffer8.h \
+  // need to install these due to external projects that link directly with libpandadx (bartop)  
+  #define INSTALL_HEADERS \
+    config_dxgsg8.h dxGraphicsStateGuardian8.I dxGraphicsStateGuardian8.h \
     dxTextureContext8.h dxGeomNodeContext8.h dxGeomNodeContext8.I
     dxTextureContext8.h dxGeomNodeContext8.h dxGeomNodeContext8.I
+
+  // build dxGraphicsStateGuardian separately since its so big
+  
+  #define SOURCES \
+    dxGraphicsStateGuardian8.cxx dxSavedFrameBuffer8.I dxSavedFrameBuffer8.h $[INSTALL_HEADERS]
     
     
   #define INCLUDED_SOURCES \
   #define INCLUDED_SOURCES \
     config_dxgsg8.cxx dxSavedFrameBuffer8.cxx dxTextureContext8.cxx dxGeomNodeContext8.cxx
     config_dxgsg8.cxx dxSavedFrameBuffer8.cxx dxTextureContext8.cxx dxGeomNodeContext8.cxx
-    
-  #define INSTALL_HEADERS \
-    dxGraphicsStateGuardian8.I dxGraphicsStateGuardian8.h \
-    dxSavedFrameBuffer8.I dxSavedFrameBuffer8.h dxTextureContext8.h
 
 
 #end lib_target
 #end lib_target
 #endif
 #endif

+ 9 - 7
panda/src/dxgsg8/config_dxgsg8.cxx

@@ -16,10 +16,10 @@
 //
 //
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 
 
-#include "config_dxgsg8.h"
-#include "dxGraphicsStateGuardian8.h"
-#include "dxSavedFrameBuffer8.h"
-#include "dxTextureContext8.h"
+#include "config_dxgsg.h"
+#include "dxGraphicsStateGuardian.h"
+#include "dxSavedFrameBuffer.h"
+#include "dxTextureContext.h"
 
 
 #include <dconfig.h>
 #include <dconfig.h>
 
 
@@ -74,11 +74,12 @@ bool dx_ignore_mipmaps = config_dxgsg.GetBool("dx-ignore-mipmaps", false);
 
 
 // if this is set, more accurate but more expensive fog computations are performed
 // if this is set, more accurate but more expensive fog computations are performed
 bool dx_use_rangebased_fog = config_dxgsg.GetBool("dx-use-rangebased-fog", false);
 bool dx_use_rangebased_fog = config_dxgsg.GetBool("dx-use-rangebased-fog", false);
+bool dx_force_16bpptextures = config_dxgsg.GetBool("dx-force-16bpptextures", false);
+bool dx_no_dithering = config_dxgsg.GetBool("dx-no-dithering", false);
 
 
 #ifdef _DEBUG
 #ifdef _DEBUG
 float dx_global_miplevel_bias = config_dxgsg.GetFloat("dx-global-miplevel-bias", 0.0);
 float dx_global_miplevel_bias = config_dxgsg.GetFloat("dx-global-miplevel-bias", 0.0);
 bool dx_debug_view_mipmaps = config_dxgsg.GetBool("dx-debug-view-mipmaps", false);
 bool dx_debug_view_mipmaps = config_dxgsg.GetBool("dx-debug-view-mipmaps", false);
-bool dx_force_16bpptextures = config_dxgsg.GetBool("dx-force-16bpptextures", false);
 bool dx_force_anisotropic_filtering = config_dxgsg.GetBool("dx-force-anisotropic-filtering", false);
 bool dx_force_anisotropic_filtering = config_dxgsg.GetBool("dx-force-anisotropic-filtering", false);
 //int dx_print_texstats = config_dxgsg.GetBool("dx-print-texstats", 0);
 //int dx_print_texstats = config_dxgsg.GetBool("dx-print-texstats", 0);
 #endif
 #endif
@@ -104,7 +105,7 @@ parse_decal_type(const string &type) {
 }
 }
 
 
 ConfigureFn(config_dxgsg) {
 ConfigureFn(config_dxgsg) {
-  init_libdxgsg8();
+  init_libdxgsg();
 }
 }
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
@@ -115,7 +116,8 @@ ConfigureFn(config_dxgsg) {
 //               called by the static initializers and need not be
 //               called by the static initializers and need not be
 //               called explicitly, but special cases exist.
 //               called explicitly, but special cases exist.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
-void init_libdxgsg8() {
+void
+init_libdxgsg() {
   static bool initialized = false;
   static bool initialized = false;
   if (initialized) {
   if (initialized) {
     return;
     return;

+ 4 - 3
panda/src/dxgsg8/config_dxgsg8.h

@@ -35,10 +35,12 @@ extern bool dx_auto_normalize_lighting;
 extern bool dx_use_rangebased_fog;
 extern bool dx_use_rangebased_fog;
 extern const bool link_tristrips;
 extern const bool link_tristrips;
 
 
-// debug flags
+// debug flags we might want to use in full optimized build
 extern bool dx_ignore_mipmaps;
 extern bool dx_ignore_mipmaps;
 extern bool dx_mipmap_everything;
 extern bool dx_mipmap_everything;
 extern bool dx_show_transforms;
 extern bool dx_show_transforms;
+extern bool dx_force_16bpptextures;
+extern bool dx_no_dithering;
 
 
 #ifndef NDEBUG
 #ifndef NDEBUG
 extern int dx_force_backface_culling;
 extern int dx_force_backface_culling;
@@ -47,7 +49,6 @@ extern int dx_force_backface_culling;
 #ifdef _DEBUG
 #ifdef _DEBUG
 extern float dx_global_miplevel_bias;
 extern float dx_global_miplevel_bias;
 extern bool dx_debug_view_mipmaps;
 extern bool dx_debug_view_mipmaps;
-extern bool dx_force_16bpptextures;
 extern bool dx_force_anisotropic_filtering;
 extern bool dx_force_anisotropic_filtering;
 #endif
 #endif
 
 
@@ -59,6 +60,6 @@ enum DXDecalType {
 };
 };
 extern DXDecalType dx_decal_type;
 extern DXDecalType dx_decal_type;
 
 
-extern EXPCL_PANDADX void init_libdxgsg8();
+extern EXPCL_PANDADX void init_libdxgsg();
 
 
 #endif
 #endif

+ 9 - 1
panda/src/dxgsg8/dxGeomNodeContext8.h

@@ -33,7 +33,15 @@
 #include "pvector.h"
 #include "pvector.h"
 
 
 #define D3D_OVERLOADS   //  get D3DVECTOR '+' operator, etc from d3dtypes.h
 #define D3D_OVERLOADS   //  get D3DVECTOR '+' operator, etc from d3dtypes.h
-#include <d3d.h>
+#include <d3d8.h>
+
+#if DIRECT3D_VERSION != 0x0800
+#error DX8.1 headers not available, you need to install newer MS Platform SDK!
+#endif
+
+#if D3D_SDK_VERSION != 220
+#error you have DX 8.0 headers, not DX 8.1, you need to install newer MS Platform SDK!
+#endif
 
 
 typedef struct {
 typedef struct {
      DWORD nVerts;
      DWORD nVerts;

+ 20 - 20
panda/src/dxgsg8/dxGraphicsStateGuardian8.I

@@ -16,7 +16,7 @@
 //
 //
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 
 
-#include "config_dxgsg8.h"
+#include "config_dxgsg.h"
 #include <graphicsWindow.h>
 #include <graphicsWindow.h>
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
@@ -30,12 +30,12 @@ enable_line_smooth(bool val) {
     _line_smooth_enabled = val;
     _line_smooth_enabled = val;
   #ifdef NDEBUG
   #ifdef NDEBUG
     {
     {
-        if(val && (_D3DDevDesc.dpcTriCaps.dwRasterCaps & D3DPRASTERCAPS_ANTIALIASEDGES))
+        if(val && (scrn.D3DDevDesc.dpcTriCaps.dwRasterCaps & D3DPRASTERCAPS_ANTIALIASEDGES))
            dxgsg_cat.error() << "no HW support for line smoothing!!\n";
            dxgsg_cat.error() << "no HW support for line smoothing!!\n";
     }
     }
   #endif
   #endif
 
 
-    _d3dDevice->SetRenderState(D3DRENDERSTATE_EDGEANTIALIAS, (DWORD)val);
+    scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_EDGEANTIALIAS, (DWORD)val);
   }
   }
 }
 }
 
 
@@ -47,7 +47,7 @@ enable_line_smooth(bool val) {
 INLINE void DXGraphicsStateGuardian::
 INLINE void DXGraphicsStateGuardian::
 enable_lighting(bool val) {
 enable_lighting(bool val) {
   if (_lighting_enabled != val) {
   if (_lighting_enabled != val) {
-    _d3dDevice->SetRenderState(D3DRENDERSTATE_LIGHTING, (DWORD)val);
+    scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_LIGHTING, (DWORD)val);
     if(_lighting_enabled = val)
     if(_lighting_enabled = val)
       _lighting_enabled_this_frame = true;
       _lighting_enabled_this_frame = true;
   }
   }
@@ -64,14 +64,14 @@ enable_dither(bool val) {
 
 
   #ifdef _DEBUG
   #ifdef _DEBUG
     {
     {
-        if(val && !(_D3DDevDesc.dpcTriCaps.dwRasterCaps & D3DPRASTERCAPS_DITHER))
+        if(val && !(scrn.D3DDevDesc.dpcTriCaps.dwRasterCaps & D3DPRASTERCAPS_DITHER))
            dxgsg_cat.error() << "no HW support for color dithering!!\n";
            dxgsg_cat.error() << "no HW support for color dithering!!\n";
         return;
         return;
     }
     }
   #endif
   #endif
 
 
     _dither_enabled = val;
     _dither_enabled = val;
-    _d3dDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, (DWORD)val);
+    scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, (DWORD)val);
   }
   }
 }
 }
 
 
@@ -84,7 +84,7 @@ INLINE void DXGraphicsStateGuardian::
 enable_stencil_test(bool val) {
 enable_stencil_test(bool val) {
   if (_stencil_test_enabled != val) {
   if (_stencil_test_enabled != val) {
     _stencil_test_enabled = val;
     _stencil_test_enabled = val;
-    _d3dDevice->SetRenderState(D3DRENDERSTATE_STENCILENABLE, (DWORD)val);
+    scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_STENCILENABLE, (DWORD)val);
   }
   }
 }
 }
 
 
@@ -112,12 +112,12 @@ enable_clip_plane(int clip_plane, bool val)
     {
     {
     _clip_plane_enabled[clip_plane] = val;
     _clip_plane_enabled[clip_plane] = val;
     DWORD  ClipPlaneBits;
     DWORD  ClipPlaneBits;
-    _d3dDevice->GetRenderState(D3DRENDERSTATE_CLIPPLANEENABLE , &ClipPlaneBits);
+    scrn.pD3DDevice->GetRenderState(D3DRENDERSTATE_CLIPPLANEENABLE , &ClipPlaneBits);
     if (val)
     if (val)
         ClipPlaneBits |= 1 << clip_plane;
         ClipPlaneBits |= 1 << clip_plane;
     else
     else
         ClipPlaneBits &= ~(1 << clip_plane);
         ClipPlaneBits &= ~(1 << clip_plane);
-    _d3dDevice->SetRenderState(D3DRENDERSTATE_CLIPPLANEENABLE , ClipPlaneBits);
+    scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_CLIPPLANEENABLE , ClipPlaneBits);
     }
     }
 }
 }
 
 
@@ -130,7 +130,7 @@ INLINE void DXGraphicsStateGuardian::
 enable_blend(bool val) {
 enable_blend(bool val) {
   if (_blend_enabled != val) {
   if (_blend_enabled != val) {
     _blend_enabled = val;
     _blend_enabled = val;
-    _d3dDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, (DWORD)val);
+    scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, (DWORD)val);
   }
   }
 }
 }
 
 
@@ -143,7 +143,7 @@ INLINE void DXGraphicsStateGuardian::
 set_shademode(D3DSHADEMODE val) {
 set_shademode(D3DSHADEMODE val) {
   if (_CurShadeMode != val) {
   if (_CurShadeMode != val) {
     _CurShadeMode = val;
     _CurShadeMode = val;
-    _d3dDevice->SetRenderState(D3DRENDERSTATE_SHADEMODE, (DWORD)val);
+    scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_SHADEMODE, (DWORD)val);
   }
   }
 }
 }
 
 
@@ -151,7 +151,7 @@ INLINE void DXGraphicsStateGuardian::
 enable_primitive_clipping(bool val) {
 enable_primitive_clipping(bool val) {
   if (_clipping_enabled != val) {
   if (_clipping_enabled != val) {
     _clipping_enabled = val;
     _clipping_enabled = val;
-    _d3dDevice->SetRenderState(D3DRENDERSTATE_CLIPPING, (DWORD)val);
+    scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_CLIPPING, (DWORD)val);
   }
   }
 }
 }
 
 
@@ -164,7 +164,7 @@ INLINE void DXGraphicsStateGuardian::
 enable_fog(bool val) {
 enable_fog(bool val) {
   if ((_fog_enabled != val) && (_doFogType!=None)) {
   if ((_fog_enabled != val) && (_doFogType!=None)) {
     _fog_enabled = val;
     _fog_enabled = val;
-    _d3dDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, (DWORD)val);
+    scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, (DWORD)val);
   }
   }
 }
 }
 
 
@@ -178,7 +178,7 @@ enable_alpha_test(bool val )
 {
 {
   if (_alpha_test_enabled != val) {
   if (_alpha_test_enabled != val) {
     _alpha_test_enabled = val;
     _alpha_test_enabled = val;
-    _d3dDevice->SetRenderState(D3DRENDERSTATE_ALPHATESTENABLE, (DWORD)val);
+    scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_ALPHATESTENABLE, (DWORD)val);
   }
   }
 }
 }
 
 
@@ -195,7 +195,7 @@ call_dxLightModelAmbient( const Colorf& color)
 #ifdef GSG_VERBOSE
 #ifdef GSG_VERBOSE
     dxgsg_cat.debug() << "dxLightModel(LIGHT_MODEL_AMBIENT, " << color << ")" << endl;
     dxgsg_cat.debug() << "dxLightModel(LIGHT_MODEL_AMBIENT, " << color << ")" << endl;
 #endif
 #endif
-    _d3dDevice->SetRenderState( D3DRENDERSTATE_AMBIENT,
+    scrn.pD3DDevice->SetRenderState( D3DRENDERSTATE_AMBIENT,
                 D3DRGBA(color[0], color[1], color[2], color[3]));
                 D3DRGBA(color[0], color[1], color[2], color[3]));
   }
   }
 }
 }
@@ -242,8 +242,8 @@ call_dxAlphaFunc(D3DCMPFUNC func, DWORD ref)
     }
     }
     dxgsg_cat.debug() << ref << ")" << endl;
     dxgsg_cat.debug() << ref << ")" << endl;
 #endif
 #endif
-    _d3dDevice->SetRenderState(D3DRENDERSTATE_ALPHAFUNC, func);
-    _d3dDevice->SetRenderState(D3DRENDERSTATE_ALPHAREF, ref);
+    scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_ALPHAFUNC, func);
+    scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_ALPHAREF, ref);
   }
   }
 }
 }
 
 
@@ -254,7 +254,7 @@ call_dxBlendFunc(D3DBLEND sfunc, D3DBLEND dfunc )
   if (_blend_source_func != sfunc)
   if (_blend_source_func != sfunc)
     {
     {
     _blend_source_func = sfunc;
     _blend_source_func = sfunc;
-    _d3dDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, sfunc);
+    scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, sfunc);
 #ifdef GSG_VERBOSE
 #ifdef GSG_VERBOSE
     dxgsg_cat.debug() << "dxSrcBlendFunc(";
     dxgsg_cat.debug() << "dxSrcBlendFunc(";
     switch (sfunc)
     switch (sfunc)
@@ -296,7 +296,7 @@ call_dxBlendFunc(D3DBLEND sfunc, D3DBLEND dfunc )
   if ( _blend_dest_func != dfunc)
   if ( _blend_dest_func != dfunc)
     {
     {
     _blend_dest_func = dfunc;
     _blend_dest_func = dfunc;
-    _d3dDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, dfunc);
+    scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, dfunc);
 #ifdef GSG_VERBOSE
 #ifdef GSG_VERBOSE
     dxgsg_cat.debug() << "dxDstBlendFunc(";
     dxgsg_cat.debug() << "dxDstBlendFunc(";
     switch (dfunc)
     switch (dfunc)
@@ -338,7 +338,7 @@ INLINE void DXGraphicsStateGuardian::
 enable_zwritemask(bool val) {
 enable_zwritemask(bool val) {
     if (_depth_write_enabled != val) {
     if (_depth_write_enabled != val) {
         _depth_write_enabled = val;
         _depth_write_enabled = val;
-        _d3dDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, val);
+        scrn.pD3DDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, val);
     }
     }
 }
 }
 
 

File diff suppressed because it is too large
+ 325 - 180
panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx


+ 72 - 29
panda/src/dxgsg8/dxGraphicsStateGuardian8.h

@@ -16,8 +16,8 @@
 //
 //
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 
 
-#ifndef DXGRAPHICSSTATEGUARDIAN8_H
-#define DXGRAPHICSSTATEGUARDIAN8_H
+#ifndef DXGRAPHICSSTATEGUARDIAN_H
+#define DXGRAPHICSSTATEGUARDIAN_H
 
 
 //#define GSG_VERBOSE
 //#define GSG_VERBOSE
 
 
@@ -38,11 +38,41 @@
 #include <pointerToArray.h>
 #include <pointerToArray.h>
 #include <planeNode.h>
 #include <planeNode.h>
 
 
-#include "dxGeomNodeContext8.h"
-#include "dxTextureContext8.h"
+#include "dxGeomNodeContext.h"
+#include "dxTextureContext.h"
+#include <vector>
 
 
 extern char * ConvD3DErrorToString(const HRESULT &error);   // defined in wdxGraphicsPipe.cxx
 extern char * ConvD3DErrorToString(const HRESULT &error);   // defined in wdxGraphicsPipe.cxx
 
 
+// for dwSupportedScreenDepthsMask
+#define X1R5G5B5_FLAG 0x1
+#define R5G6B5_FLAG   0x2
+#define X8R8G8B8_FLAG 0x4
+#define R8G8B8_FLAG   0x8
+
+typedef struct {
+      LPDIRECT3DDEVICE8 pD3DDevice;
+      LPDIRECT3D8       pD3D8;
+      LPDIRECTDRAWSURFACE7 pddsPrimary,pddsBack,pddsZBuf;
+      HWND              hWnd;
+      HMONITOR          hMon;
+      RECT              view_rect,clip_rect;
+      DWORD             MaxAvailVidMem;
+      bool              bIsLowVidMemCard;
+      bool              bIsTNLDevice;
+      ushort            depth_buffer_bitdepth;  //GetSurfaceDesc is not reliable so must store this explicitly
+      ushort            CardIDNum;  // its posn in DisplayArray, for dbgprint purposes
+      DDDEVICEIDENTIFIER2 DXDeviceID;
+//      D3DDEVICEDESC8    D3DDevDesc;
+      DWORD             dwSupportedScreenDepthsMask;
+      D3DCAPS8          d3dcaps;
+      D3DDISPLAYMODE    DisplayMode;
+#ifdef USE_TEXFMTVEC
+      DDPixelFormatVec  TexPixFmts;
+#endif
+} DXScreenData;
+// typedef vector<DXScreenData> ScreenDataVector;
+
 class PlaneNode;
 class PlaneNode;
 class Light;
 class Light;
 
 
@@ -61,7 +91,7 @@ INLINE ostream &operator << (ostream &out, GLenum v) {
 
 
 #define DX_DECLARE_CLEAN(type, var) \
 #define DX_DECLARE_CLEAN(type, var) \
     type var;                       \
     type var;                       \
-    ZeroMemory(&var, sizeof(type));  \
+    ZeroMemory(&var, sizeof(type)); \
     var.dwSize = sizeof(type);
     var.dwSize = sizeof(type);
 
 
 // #define DEBUG_RELEASES
 // #define DEBUG_RELEASES
@@ -115,6 +145,10 @@ extern void dbgPrintVidMem(LPDIRECTDRAW7 pDD, LPDDSCAPS2 lpddsCaps,const char *p
 #define PRINTVIDMEM(pDD,pCaps,pMsg)
 #define PRINTVIDMEM(pDD,pCaps,pMsg)
 #endif
 #endif
 
 
+#ifndef D3DERRORSTRING
+#define D3DERRORSTRING(HRESULT) " at (" << __FILE__ << ":" << __LINE__"), hr=" <<  DXGetErrorString8(HRESULT) << ": " << DXGetErrorDescription8(HRESULT) << endl
+#endif
+
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //   Class : DXGraphicsStateGuardian
 //   Class : DXGraphicsStateGuardian
 // Description : A GraphicsStateGuardian specialized for rendering
 // Description : A GraphicsStateGuardian specialized for rendering
@@ -123,6 +157,8 @@ extern void dbgPrintVidMem(LPDIRECTDRAW7 pDD, LPDDSCAPS2 lpddsCaps,const char *p
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 class EXPCL_PANDADX DXGraphicsStateGuardian : public GraphicsStateGuardian {
 class EXPCL_PANDADX DXGraphicsStateGuardian : public GraphicsStateGuardian {
   friend class wdxGraphicsWindow;
   friend class wdxGraphicsWindow;
+  friend class wdxGraphicsPipe;
+  friend class wdxGraphicsWindowGroup;
   friend class DXTextureContext;
   friend class DXTextureContext;
 
 
 public:
 public:
@@ -137,9 +173,9 @@ public:
   virtual void prepare_display_region();
   virtual void prepare_display_region();
 
 
   virtual void render_frame();
   virtual void render_frame();
-  virtual void render_scene(Node *root, ProjectionNode *projnode);
+  virtual void render_scene(Node *root, LensNode *projnode);
   virtual void render_subgraph(RenderTraverser *traverser,
   virtual void render_subgraph(RenderTraverser *traverser,
-                   Node *subgraph, ProjectionNode *projnode,
+                   Node *subgraph, LensNode *projnode,
                    const AllTransitionsWrapper &net_trans);
                    const AllTransitionsWrapper &net_trans);
   virtual void render_subgraph(RenderTraverser *traverser,
   virtual void render_subgraph(RenderTraverser *traverser,
                    Node *subgraph,
                    Node *subgraph,
@@ -227,9 +263,15 @@ public:
 
 
 public:
 public:
   // recreate_tex_callback needs these to be public
   // recreate_tex_callback needs these to be public
-  LPDIRECT3DDEVICE7 _d3dDevice;
+  LPDIRECT3DDEVICE7 _pCurD3DDevice;  //this needs to be set every device iteration
+  LPDIRECTDRAW7 _pDD;
+  DXScreenData scrn;
+
+#ifndef USE_TEXFMTVEC
   LPDDPIXELFORMAT   _pTexPixFmts;
   LPDDPIXELFORMAT   _pTexPixFmts;
   int               _cNumTexPixFmts;
   int               _cNumTexPixFmts;
+#endif
+//  D3DDEVICEDESC7    _D3DDevDesc;
 
 
 protected:
 protected:
   void free_pointers();            // free local internal buffers
   void free_pointers();            // free local internal buffers
@@ -241,8 +283,6 @@ protected:
   void set_draw_buffer(const RenderBuffer &rb);
   void set_draw_buffer(const RenderBuffer &rb);
   void set_read_buffer(const RenderBuffer &rb);
   void set_read_buffer(const RenderBuffer &rb);
 
 
-  void bind_texture(TextureContext *tc);
-
   // for storage of the flexible vertex format
   // for storage of the flexible vertex format
   char *_pCurFvfBufPtr,*_pFvfBufBasePtr;
   char *_pCurFvfBufPtr,*_pFvfBufBasePtr;
   INLINE void add_to_FVFBuf(void *data,  size_t bytes) ;
   INLINE void add_to_FVFBuf(void *data,  size_t bytes) ;
@@ -250,15 +290,23 @@ protected:
 
 
   bool                  _dx_ready;
   bool                  _dx_ready;
   HRESULT               _last_testcooplevel_result;
   HRESULT               _last_testcooplevel_result;
+
+/*
+  moved to per display data
   bool                  _bIsTNLDevice;
   bool                  _bIsTNLDevice;
   LPDIRECTDRAWSURFACE7  _back;
   LPDIRECTDRAWSURFACE7  _back;
   LPDIRECTDRAWSURFACE7  _zbuf;
   LPDIRECTDRAWSURFACE7  _zbuf;
-  LPDIRECT3D7           _d3d;
   LPDIRECTDRAWSURFACE7  _pri;
   LPDIRECTDRAWSURFACE7  _pri;
+
+  LPDIRECT3D7           _d3d;
   LPDIRECTDRAW7         _pDD;
   LPDIRECTDRAW7         _pDD;
+  RECT              _view_rect;
+  RECT              clip_rect;  
+*/
+  LPDIRECT3D7           _pCurD3D7;
+  LPDIRECTDRAW7         _pCurDD;
+  bool                  _bShowFPSMeter;
 
 
-  RECT                _view_rect;
-  RECT                clip_rect;
   HDC               _front_hdc;
   HDC               _front_hdc;
   DXTextureContext  *_pCurTexContext;
   DXTextureContext  *_pCurTexContext;
 
 
@@ -267,8 +315,6 @@ protected:
 
 
   RenderBuffer::Type _cur_read_pixel_buffer;  // source for copy_pixel_buffer operation
   RenderBuffer::Type _cur_read_pixel_buffer;  // source for copy_pixel_buffer operation
 
 
-  D3DDEVICEDESC7    _D3DDevDesc;
-
   void GenerateSphere(void *pVertexSpace,DWORD dwVertSpaceByteSize,
   void GenerateSphere(void *pVertexSpace,DWORD dwVertSpaceByteSize,
                     void *pIndexSpace,DWORD dwIndexSpaceByteSize,
                     void *pIndexSpace,DWORD dwIndexSpaceByteSize,
                     D3DVECTOR *pCenter, float fRadius,
                     D3DVECTOR *pCenter, float fRadius,
@@ -329,7 +375,6 @@ protected:
   Colorf _issued_color;           // WBD ADDED
   Colorf _issued_color;           // WBD ADDED
   D3DCOLOR _issued_color_D3DCOLOR;           // WBD ADDED
   D3DCOLOR _issued_color_D3DCOLOR;           // WBD ADDED
   D3DCOLOR _d3dcolor_clear_value;
   D3DCOLOR _d3dcolor_clear_value;
-
   D3DSHADEMODE _CurShadeMode;
   D3DSHADEMODE _CurShadeMode;
 
 
   bool _bDrawPrimDoSetupVertexBuffer;       // if true, draw methods just copy vertex data into pCurrentGeomContext
   bool _bDrawPrimDoSetupVertexBuffer;       // if true, draw methods just copy vertex data into pCurrentGeomContext
@@ -370,10 +415,7 @@ protected:
   bool _fog_enabled;
   bool _fog_enabled;
 /*  
 /*  
   TODO: cache fog state
   TODO: cache fog state
-  float _fog_start;
-  float _fog_end;
-  float _fog_density;
-  float _fog_color;
+  float _fog_start,_fog_end,_fog_density,float _fog_color;
 */    
 */    
   float      _alpha_func_ref;
   float      _alpha_func_ref;
   D3DCMPFUNC _alpha_func;
   D3DCMPFUNC _alpha_func;
@@ -398,7 +440,6 @@ protected:
   int _decal_level;
   int _decal_level;
 
 
   RenderModeProperty::Mode _current_fill_mode;  //poinr/wireframe/solid
   RenderModeProperty::Mode _current_fill_mode;  //poinr/wireframe/solid
-
   GraphicsChannel *_panda_gfx_channel;  // cache the 1 channel dx supports
   GraphicsChannel *_panda_gfx_channel;  // cache the 1 channel dx supports
 
 
   // Cur Texture State
   // Cur Texture State
@@ -452,12 +493,13 @@ public:
   static void init_type(void);
   static void init_type(void);
   virtual TypeHandle get_type(void) const;
   virtual TypeHandle get_type(void) const;
   virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
   virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
-
-  LPDIRECT3DDEVICE7 GetD3DDevice()  {  return _d3dDevice; }
-  LPDIRECTDRAW7 GetDDInterface()  {  return _pDD; }
-  LPDIRECTDRAWSURFACE7 GetBackBuffer()  {  return _back; }
+/*
+  LPDIRECT3DDEVICE7 GetD3DDevice()  {  return scrn.pD3DDevice; }
+  LPDIRECTDRAW7 GetDDInterface()  {  return scrn.pDD; }
+  LPDIRECTDRAWSURFACE7 GetBackBuffer()  {  return scrn.pddsBackBuffer; }
   LPDIRECTDRAWSURFACE7 GetZBuffer()  {  return _zbuf; }
   LPDIRECTDRAWSURFACE7 GetZBuffer()  {  return _zbuf; }
-  INLINE void  Set_HDC(HDC hdc)  {  _front_hdc = hdc;  }
+*/  
+//  INLINE void Set_HDC(HDC hdc)  {  _front_hdc = hdc;  }
   void adjust_view_rect(int x, int y);
   void adjust_view_rect(int x, int y);
   INLINE void SetDXReady(bool stat)  {  _dx_ready = stat; }
   INLINE void SetDXReady(bool stat)  {  _dx_ready = stat; }
   INLINE bool GetDXReady(void)  { return _dx_ready;}
   INLINE bool GetDXReady(void)  { return _dx_ready;}
@@ -472,13 +514,14 @@ public:
   void  show_frame();
   void  show_frame();
   void  show_full_screen_frame();
   void  show_full_screen_frame();
   void  show_windowed_frame();
   void  show_windowed_frame();
-  void  dx_init(  LPDIRECTDRAW7     context,
+/*  void  dx_init(  LPDIRECTDRAW7     context,
           LPDIRECTDRAWSURFACE7  pri,
           LPDIRECTDRAWSURFACE7  pri,
           LPDIRECTDRAWSURFACE7  back,
           LPDIRECTDRAWSURFACE7  back,
           LPDIRECTDRAWSURFACE7  zbuf,
           LPDIRECTDRAWSURFACE7  zbuf,
           LPDIRECT3D7          d3d,
           LPDIRECT3D7          d3d,
           LPDIRECT3DDEVICE7    d3dDevice,
           LPDIRECT3DDEVICE7    d3dDevice,
-          RECT  viewrect);
+          RECT  viewrect); */
+  void dx_init(void);
   
   
   friend HRESULT CALLBACK EnumTexFmtsCallback( LPDDPIXELFORMAT pddpf, VOID* param );
   friend HRESULT CALLBACK EnumTexFmtsCallback( LPDDPIXELFORMAT pddpf, VOID* param );
 
 
@@ -488,7 +531,7 @@ private:
 
 
 #define ISPOW2(X) (((X) & ((X)-1))==0)
 #define ISPOW2(X) (((X) & ((X)-1))==0)
 
 
-#include "dxGraphicsStateGuardian8.I"
+#include "dxGraphicsStateGuardian.I"
 
 
 #endif
 #endif
 
 

+ 72 - 65
panda/src/dxgsg8/dxTextureContext8.cxx

@@ -18,9 +18,9 @@
 
 
 #include <assert.h>
 #include <assert.h>
 #include <time.h>
 #include <time.h>
-#include "dxTextureContext8.h"
-#include "config_dxgsg8.h"
-#include "dxGraphicsStateGuardian8.h"
+#include "dxTextureContext.h"
+#include "config_dxgsg.h"
+#include "dxGraphicsStateGuardian.h"
 #include "pnmImage.h"
 #include "pnmImage.h"
 
 
 //#define FORCE_16bpp_1555
 //#define FORCE_16bpp_1555
@@ -971,24 +971,38 @@ HRESULT ConvertDDSurftoPixBuf(PixelBuffer *pixbuf,LPDIRECTDRAWSURFACE7 pDDSurf)
 //       gets the attributes of the texture from the bitmap, creates the
 //       gets the attributes of the texture from the bitmap, creates the
 //       texture, and then copies the bitmap into the texture.
 //       texture, and then copies the bitmap into the texture.
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
-LPDIRECTDRAWSURFACE7 DXTextureContext::
-CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT pTexPixFmts) {
+LPDIRECTDRAWSURFACE7 DXTextureContext::CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, 
+#ifdef USE_TEXFMTVEC
+                                        DDPixelFormatVec &TexFmts,LPD3DDEVICEDESC7 pD3DDevDesc)
+#else
+                                        int cNumTexPixFmts, DDPIXELFORMAT *pTexFmts,LPD3DDEVICEDESC7 pD3DDevDesc)
+#endif
+   {
     HRESULT hr;
     HRESULT hr;
-    int i;
-    PixelBuffer *pbuf = _texture->_pbuffer;
-    int cNumAlphaBits;     //  number of alpha bits in texture pixfmt
-
+    int i,cNumAlphaBits;     //  number of alpha bits in texture pixfmt
     DDPIXELFORMAT *pDesiredPixFmt;
     DDPIXELFORMAT *pDesiredPixFmt;
     LPDIRECTDRAWSURFACE7 pddsRender;
     LPDIRECTDRAWSURFACE7 pddsRender;
     LPDIRECTDRAW7        pDD = NULL;
     LPDIRECTDRAW7        pDD = NULL;
+    ConversionType ConvNeeded;
 
 
-    DDPIXELFORMAT TexFmtsArr[MAX_DX_TEXPIXFMTS];
+    assert(_texture!=NULL);
 
 
-    ConversionType ConvNeeded;
+    PixelBuffer *pbuf = _texture->_pbuffer;
+
+#ifdef USE_TEXFMTVEC
+    int cNumTexPixFmts=TexturePixelFormats.size();
+#endif
+    DDPIXELFORMAT *pTexPixFmts = new DDPIXELFORMAT[cNumTexPixFmts];
 
 
     // make local copy of array so I can muck with it during searches for this texture fmt
     // make local copy of array so I can muck with it during searches for this texture fmt
-    memcpy(TexFmtsArr,pTexPixFmts,cNumTexPixFmts*sizeof(DDPIXELFORMAT));
-    pTexPixFmts=TexFmtsArr;
+    // (such as marking pixfmts that no search will be interested in)
+    // probably should do this faster way
+
+#ifdef USE_TEXFMTVEC
+    memcpy(pTexPixFmts,&TexturePixelFormats[0],cNumTexPixFmts*sizeof(DDPIXELFORMAT));
+#else
+    memcpy(pTexPixFmts,pTexFmts,cNumTexPixFmts*sizeof(DDPIXELFORMAT));
+#endif
 
 
     // bpp indicates requested fmt, not pixbuf fmt
     // bpp indicates requested fmt, not pixbuf fmt
     DWORD bpp = get_bits_per_pixel(pbuf->get_format(), &cNumAlphaBits);
     DWORD bpp = get_bits_per_pixel(pbuf->get_format(), &cNumAlphaBits);
@@ -1006,12 +1020,10 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
     DWORD dwOrigWidth  = (DWORD)pbuf->get_xsize();
     DWORD dwOrigWidth  = (DWORD)pbuf->get_xsize();
     DWORD dwOrigHeight = (DWORD)pbuf->get_ysize();
     DWORD dwOrigHeight = (DWORD)pbuf->get_ysize();
 
 
-    // Get the device caps so we can check if the device has any constraints
-    // when using textures
-    D3DDEVICEDESC7 devDesc;
-    if(FAILED( pd3dDevice->GetCaps( &devDesc ) )) {
-        goto error_exit;
-    }
+    // Use the device caps so we can check if the device has any constraints
+    // when using textures. 
+
+    assert((pD3DDevDesc->dwMaxTextureWidth>0) && (pD3DDevDesc->dwMaxTextureHeight>0));
 
 
     // Setup the new surface desc for the texture. Note how we are using the
     // Setup the new surface desc for the texture. Note how we are using the
     // texture manage attribute, so Direct3D does alot of dirty work for us
     // texture manage attribute, so Direct3D does alot of dirty work for us
@@ -1056,31 +1068,31 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
 
 
     if(!ISPOW2(ddsd.dwWidth) || !ISPOW2(ddsd.dwHeight)) {
     if(!ISPOW2(ddsd.dwWidth) || !ISPOW2(ddsd.dwHeight)) {
         dxgsg_cat.error() << "ERROR: texture dimensions are not a power of 2 for " << _tex->get_name() << "!!!!! \n";
         dxgsg_cat.error() << "ERROR: texture dimensions are not a power of 2 for " << _tex->get_name() << "!!!!! \n";
-#ifdef _DEBUG
-        exit(1);  // want to catch badtexsize errors
-#else
-        goto error_exit;
-#endif
+        #ifdef _DEBUG
+          exit(1);  // want to catch badtexsize errors
+        #else
+          goto error_exit;
+        #endif
     }
     }
 
 
     bool bShrinkOriginal;
     bool bShrinkOriginal;
-
     bShrinkOriginal=false;
     bShrinkOriginal=false;
-    if((dwOrigWidth>devDesc.dwMaxTextureWidth)||(dwOrigHeight>devDesc.dwMaxTextureHeight)) {
-#ifdef _DEBUG
-        dxgsg_cat.error() << "WARNING: " <<_tex->get_name() << ": Image size exceeds max texture dimensions of (" << devDesc.dwMaxTextureWidth << "," << devDesc.dwMaxTextureHeight << ") !!\n"
-        << "Scaling "<< _tex->get_name() << " ("<< dwOrigWidth<<"," <<dwOrigHeight << ") => ("<<  devDesc.dwMaxTextureWidth << "," << devDesc.dwMaxTextureHeight << ") !\n";
-#endif
 
 
-        if(dwOrigWidth>devDesc.dwMaxTextureWidth)
-            ddsd.dwWidth=devDesc.dwMaxTextureWidth;
-        if(dwOrigHeight>devDesc.dwMaxTextureHeight)
-            ddsd.dwHeight=devDesc.dwMaxTextureHeight;
+    if((dwOrigWidth>pD3DDevDesc->dwMaxTextureWidth)||(dwOrigHeight>pD3DDevDesc->dwMaxTextureHeight)) {
+        #ifdef _DEBUG
+           dxgsg_cat.error() << "WARNING: " <<_tex->get_name() << ": Image size exceeds max texture dimensions of (" << pD3DDevDesc->dwMaxTextureWidth << "," << pD3DDevDesc->dwMaxTextureHeight << ") !!\n"
+           << "Scaling "<< _tex->get_name() << " ("<< dwOrigWidth<<"," <<dwOrigHeight << ") => ("<<  pD3DDevDesc->dwMaxTextureWidth << "," << pD3DDevDesc->dwMaxTextureHeight << ") !\n";
+        #endif
+
+        if(dwOrigWidth>pD3DDevDesc->dwMaxTextureWidth)
+            ddsd.dwWidth=pD3DDevDesc->dwMaxTextureWidth;
+        if(dwOrigHeight>pD3DDevDesc->dwMaxTextureHeight)
+            ddsd.dwHeight=pD3DDevDesc->dwMaxTextureHeight;
         bShrinkOriginal=true;
         bShrinkOriginal=true;
     }
     }
 
 
     // checks for SQUARE reqmt (nvidia riva128 needs this)
     // checks for SQUARE reqmt (nvidia riva128 needs this)
-    if((ddsd.dwWidth != ddsd.dwHeight) && (devDesc.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_SQUAREONLY )) {
+    if((ddsd.dwWidth != ddsd.dwHeight) && (pD3DDevDesc->dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_SQUAREONLY )) {
 
 
         // assume pow2 textures.   sum exponents, divide by 2 rounding down to get sq size
         // assume pow2 textures.   sum exponents, divide by 2 rounding down to get sq size
         int i,width_exp,height_exp;
         int i,width_exp,height_exp;
@@ -1130,7 +1142,8 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
 
 
     szErrorMsg = "CreateTexture failed: couldn't find compatible Tex DDPIXELFORMAT!\n";
     szErrorMsg = "CreateTexture failed: couldn't find compatible Tex DDPIXELFORMAT!\n";
 
 
-    dxgsg_cat.spam() << "CreateTexture handling bitdepth: " << bpp << " alphabits: " << cNumAlphaBits << "\n";
+    if(dxgsg_cat.is_spam())
+        dxgsg_cat.spam() << "CreateTexture handling bitdepth: " << bpp << " alphabits: " << cNumAlphaBits << "\n";
 
 
     // Mark formats I dont want to deal with
     // Mark formats I dont want to deal with
     for(i=0,pCurPixFmt=pTexPixFmts;i<cNumTexPixFmts;i++,pCurPixFmt++) {
     for(i=0,pCurPixFmt=pTexPixFmts;i<cNumTexPixFmts;i++,pCurPixFmt++) {
@@ -1220,9 +1233,7 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
 
 
             assert(cNumAlphaBits==0);  // dont know how to handle non-zero alpha for 24bit total
             assert(cNumAlphaBits==0);  // dont know how to handle non-zero alpha for 24bit total
 
 
-#ifdef _DEBUG
             if(!dx_force_16bpptextures)
             if(!dx_force_16bpptextures)
-#endif
                 for(i=0,pCurPixFmt=pTexPixFmts;i<cNumTexPixFmts;i++,pCurPixFmt++) {
                 for(i=0,pCurPixFmt=pTexPixFmts;i<cNumTexPixFmts;i++,pCurPixFmt++) {
                     if((pCurPixFmt->dwFlags & DDPF_RGB)&&(pCurPixFmt->dwRGBBitCount==24)) {
                     if((pCurPixFmt->dwFlags & DDPF_RGB)&&(pCurPixFmt->dwRGBBitCount==24)) {
                         ConvNeeded=((cNumColorChannels==3) ? Conv24to24 : Conv32to24);
                         ConvNeeded=((cNumColorChannels==3) ? Conv24to24 : Conv32to24);
@@ -1230,13 +1241,10 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
                     }
                     }
                 }
                 }
 
 
-#ifdef _DEBUG
-            if(!dx_force_16bpptextures)
-#endif
-
-          // no 24-bit fmt.  look for 32 bit fmt  (note: this is memory-hogging choice
-          // instead I could look for memory-conserving 16-bit fmt).
-          // check mask to ensure ARGB, not RGBA (which I am not handling here)
+            if(!dx_force_16bpptextures) {
+                // no 24-bit fmt.  look for 32 bit fmt  (note: this is memory-hogging choice
+                // instead I could look for memory-conserving 16-bit fmt).
+                // check mask to ensure ARGB, not RGBA (which I am not handling here)
                 for(i=0,pCurPixFmt=pTexPixFmts;i<cNumTexPixFmts;i++,pCurPixFmt++) {
                 for(i=0,pCurPixFmt=pTexPixFmts;i<cNumTexPixFmts;i++,pCurPixFmt++) {
                     if((pCurPixFmt->dwRGBBitCount==32) && (pCurPixFmt->dwFlags & DDPF_RGB)
                     if((pCurPixFmt->dwRGBBitCount==32) && (pCurPixFmt->dwFlags & DDPF_RGB)
                        && ((pCurPixFmt->dwRBitMask|pCurPixFmt->dwGBitMask|pCurPixFmt->dwBBitMask)==0xFFFFFF)
                        && ((pCurPixFmt->dwRBitMask|pCurPixFmt->dwGBitMask|pCurPixFmt->dwBBitMask)==0xFFFFFF)
@@ -1246,6 +1254,7 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
                         goto found_matching_format;
                         goto found_matching_format;
                     }
                     }
                 }
                 }
+            }
 
 
           // no 24-bit or 32 fmt.  look for 16 bit fmt
           // no 24-bit or 32 fmt.  look for 16 bit fmt
             for(i=0,pCurPixFmt=&pTexPixFmts[cNumTexPixFmts-1];i<cNumTexPixFmts;i++,pCurPixFmt--) {
             for(i=0,pCurPixFmt=&pTexPixFmts[cNumTexPixFmts-1];i<cNumTexPixFmts;i++,pCurPixFmt--) {
@@ -1271,11 +1280,7 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
 
 
             if(ddsd.ddpfPixelFormat.dwFlags & DDPF_LUMINANCE) {
             if(ddsd.ddpfPixelFormat.dwFlags & DDPF_LUMINANCE) {
            // look for native lum fmt
            // look for native lum fmt
-#ifdef _DEBUG
-                if(!dx_force_16bpptextures)
-#endif
-                {
-
+                if(!dx_force_16bpptextures) {
                     for(i=0,pCurPixFmt=&pTexPixFmts[cNumTexPixFmts-1];i<cNumTexPixFmts;i++,pCurPixFmt--) {
                     for(i=0,pCurPixFmt=&pTexPixFmts[cNumTexPixFmts-1];i<cNumTexPixFmts;i++,pCurPixFmt--) {
                         if((pCurPixFmt->dwRGBBitCount==16) && (pCurPixFmt->dwFlags & DDPF_ALPHAPIXELS) &&
                         if((pCurPixFmt->dwRGBBitCount==16) && (pCurPixFmt->dwFlags & DDPF_ALPHAPIXELS) &&
                            (pCurPixFmt->dwFlags & DDPF_LUMINANCE)) {
                            (pCurPixFmt->dwFlags & DDPF_LUMINANCE)) {
@@ -1375,9 +1380,7 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
               // look for native lum fmt
               // look for native lum fmt
 
 
                 assert(cNumAlphaBits==0);  // dont handle those other 8bit lum fmts like 4-4, since 16 8-8 is usually supported too
                 assert(cNumAlphaBits==0);  // dont handle those other 8bit lum fmts like 4-4, since 16 8-8 is usually supported too
-#ifdef _DEBUG
                 if(!dx_force_16bpptextures)
                 if(!dx_force_16bpptextures)
-#endif
                 {
                 {
                     for(i=0,pCurPixFmt=&pTexPixFmts[cNumTexPixFmts-1];i<cNumTexPixFmts;i++,pCurPixFmt--) {
                     for(i=0,pCurPixFmt=&pTexPixFmts[cNumTexPixFmts-1];i<cNumTexPixFmts;i++,pCurPixFmt--) {
                         if((pCurPixFmt->dwRGBBitCount==8) && (pCurPixFmt->dwFlags & DDPF_LUMINANCE) &&
                         if((pCurPixFmt->dwRGBBitCount==8) && (pCurPixFmt->dwFlags & DDPF_LUMINANCE) &&
@@ -1404,15 +1407,16 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
                     }
                     }
                 }
                 }
 
 
-             // find compatible 16bpp fmt, just look for any 565, then 0555
+                // find compatible 16bpp fmt, just look for any 565, then 0555
                 DWORD dwMasks[2] = {0xF800, 0x7C00};
                 DWORD dwMasks[2] = {0xF800, 0x7C00};
+                ConversionType ConvType[2] = {ConvLum8to16_0565,ConvLum8to16_0555};
 
 
                 for(DWORD modenum=0;modenum<2;modenum++)
                 for(DWORD modenum=0;modenum<2;modenum++)
                     for(i=0,pCurPixFmt=&pTexPixFmts[0];i<cNumTexPixFmts;i++,pCurPixFmt++) {
                     for(i=0,pCurPixFmt=&pTexPixFmts[0];i<cNumTexPixFmts;i++,pCurPixFmt++) {
                         if((pCurPixFmt->dwRGBBitCount==16) && (pCurPixFmt->dwFlags & DDPF_RGB)
                         if((pCurPixFmt->dwRGBBitCount==16) && (pCurPixFmt->dwFlags & DDPF_RGB)
                            && (!(pCurPixFmt->dwFlags & DDPF_ALPHAPIXELS))
                            && (!(pCurPixFmt->dwFlags & DDPF_ALPHAPIXELS))
                            && (pCurPixFmt->dwRBitMask==dwMasks[modenum])) {
                            && (pCurPixFmt->dwRBitMask==dwMasks[modenum])) {
-                            ConvNeeded=ConvLum8to16_0565;
+                            ConvNeeded=ConvType[modenum];
                             goto found_matching_format;
                             goto found_matching_format;
                         }
                         }
                     }
                     }
@@ -1481,7 +1485,7 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
         else ft=Texture::FT_linear;
         else ft=Texture::FT_linear;
     }
     }
 
 
-    if((ft==Texture::FT_linear) && !(devDesc.dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_LINEAR))
+    if((ft==Texture::FT_linear) && !(pD3DDevDesc->dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_LINEAR))
         ft=Texture::FT_nearest;
         ft=Texture::FT_nearest;
     _tex->set_magfilter(ft);
     _tex->set_magfilter(ft);
 
 
@@ -1514,26 +1518,26 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
         ft=Texture::FT_linear;
         ft=Texture::FT_linear;
     }
     }
 
 
-    assert((devDesc.dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_NEAREST)!=0);
+    assert((pD3DDevDesc->dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_NEAREST)!=0);
 
 
     switch(ft) {
     switch(ft) {
         case Texture::FT_nearest_mipmap_linear:
         case Texture::FT_nearest_mipmap_linear:
-            if(!(devDesc.dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_LINEARMIPNEAREST))
+            if(!(pD3DDevDesc->dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_LINEARMIPNEAREST))
                 ft=Texture::FT_nearest_mipmap_nearest;
                 ft=Texture::FT_nearest_mipmap_nearest;
             break;
             break;
         case Texture::FT_linear_mipmap_nearest:
         case Texture::FT_linear_mipmap_nearest:
-            if(!(devDesc.dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_MIPLINEAR))
+            if(!(pD3DDevDesc->dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_MIPLINEAR))
                 ft=Texture::FT_nearest_mipmap_nearest;
                 ft=Texture::FT_nearest_mipmap_nearest;
             break;
             break;
         case Texture::FT_linear_mipmap_linear:
         case Texture::FT_linear_mipmap_linear:
-            if(!(devDesc.dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_LINEARMIPLINEAR)) {
-                if(devDesc.dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_MIPLINEAR)
+            if(!(pD3DDevDesc->dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_LINEARMIPLINEAR)) {
+                if(pD3DDevDesc->dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_MIPLINEAR)
                     ft=Texture::FT_linear_mipmap_nearest;
                     ft=Texture::FT_linear_mipmap_nearest;
                 else ft=Texture::FT_nearest_mipmap_nearest;  // if you cant do linear in a level, you probably cant do linear b/w levels, so just do nearest-all
                 else ft=Texture::FT_nearest_mipmap_nearest;  // if you cant do linear in a level, you probably cant do linear b/w levels, so just do nearest-all
             }
             }
             break;
             break;
         case Texture::FT_linear:
         case Texture::FT_linear:
-            if(!(devDesc.dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_LINEAR))
+            if(!(pD3DDevDesc->dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_LINEAR))
                 ft=Texture::FT_nearest;
                 ft=Texture::FT_nearest;
             break;
             break;
     }
     }
@@ -1543,14 +1547,14 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
     uint aniso_degree;
     uint aniso_degree;
 
 
     aniso_degree=1;
     aniso_degree=1;
-    if(devDesc.dpcTriCaps.dwRasterCaps & D3DPRASTERCAPS_ANISOTROPY) {
+    if(pD3DDevDesc->dpcTriCaps.dwRasterCaps & D3DPRASTERCAPS_ANISOTROPY) {
         aniso_degree=_tex->get_anisotropic_degree();
         aniso_degree=_tex->get_anisotropic_degree();
-        if((aniso_degree>devDesc.dwMaxAnisotropy)
+        if((aniso_degree>pD3DDevDesc->dwMaxAnisotropy)
 #ifdef _DEBUG
 #ifdef _DEBUG
            || dx_force_anisotropic_filtering
            || dx_force_anisotropic_filtering
 #endif
 #endif
           )
           )
-            aniso_degree=devDesc.dwMaxAnisotropy;
+            aniso_degree=pD3DDevDesc->dwMaxAnisotropy;
     }
     }
     _tex->set_anisotropic_degree(aniso_degree);
     _tex->set_anisotropic_degree(aniso_degree);
 #ifdef _DEBUG
 #ifdef _DEBUG
@@ -1564,7 +1568,7 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
         dxgsg_cat.debug() << "CreateTexture: generating mipmaps for "<< _tex->get_name() << endl;
         dxgsg_cat.debug() << "CreateTexture: generating mipmaps for "<< _tex->get_name() << endl;
     }
     }
 
 
-    if(devDesc.dwDevCaps & D3DDEVCAPS_SEPARATETEXTUREMEMORIES) {
+    if(pD3DDevDesc->dwDevCaps & D3DDEVCAPS_SEPARATETEXTUREMEMORIES) {
         // must assign a texture to a specific stage
         // must assign a texture to a specific stage
         // for now I'm just going to use stage 0 for all
         // for now I'm just going to use stage 0 for all
         ddsd.dwTextureStage=0;
         ddsd.dwTextureStage=0;
@@ -1594,6 +1598,8 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
     // Done with DDraw
     // Done with DDraw
     pDD->Release();
     pDD->Release();
 
 
+    delete [] pTexPixFmts;
+
     // Return the newly created texture
     // Return the newly created texture
     return _surface;
     return _surface;
 
 
@@ -1606,6 +1612,7 @@ CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT
         _surface = NULL;
         _surface = NULL;
     }
     }
 
 
+    delete [] pTexPixFmts;
     return NULL;
     return NULL;
 }
 }
 
 

+ 21 - 4
panda/src/dxgsg8/dxTextureContext8.h

@@ -16,8 +16,8 @@
 //
 //
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 
 
-#ifndef DXTEXTURECONTEXT8_H
-#define DXTEXTURECONTEXT8_H
+#ifndef DXTEXTURECONTEXT_H
+#define DXTEXTURECONTEXT_H
 
 
 #include <pandabase.h>
 #include <pandabase.h>
 
 
@@ -32,13 +32,23 @@
 #include <ddraw.h>
 #include <ddraw.h>
 
 
 #define D3D_OVERLOADS   //  get D3DVECTOR '+' operator, etc from d3dtypes.h
 #define D3D_OVERLOADS   //  get D3DVECTOR '+' operator, etc from d3dtypes.h
-#include <d3d.h>
+#include <d3d8.h>
 #undef WIN32_LEAN_AND_MEAN
 #undef WIN32_LEAN_AND_MEAN
 
 
+#ifndef D3DERRORSTRING
+#define D3DERRORSTRING(HRESULT) " at (" << __FILE__ << ":" << __LINE__"), hr=" <<  DXGetErrorString8(HRESULT) << ": " << DXGetErrorDescription8(HRESULT) << endl
+#endif
+
 #include <texture.h>
 #include <texture.h>
 #include <textureContext.h>
 #include <textureContext.h>
 
 
+//#define USE_TEXFMTVEC  // doesnt work now, crashes in destructor
+
+#ifdef USE_TEXFMTVEC
+typedef pvector<DDPIXELFORMAT> DDPixelFormatVec;
+#else
 #define MAX_DX_TEXPIXFMTS 20    // should be enough for any card
 #define MAX_DX_TEXPIXFMTS 20    // should be enough for any card
+#endif
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //   Class : DXTextureContext
 //   Class : DXTextureContext
@@ -55,7 +65,13 @@ public:
   LPDIRECTDRAWSURFACE7  _surface;
   LPDIRECTDRAWSURFACE7  _surface;
   Texture *_tex;            // ptr to parent, primarily for access to namestr
   Texture *_tex;            // ptr to parent, primarily for access to namestr
 
 
-  LPDIRECTDRAWSURFACE7 CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT pTexPixFmts);
+//  static is_unused_texpixelformat(DDPIXELFORMAT *)
+
+#ifdef USE_TEXFMTVEC
+  LPDIRECTDRAWSURFACE7 CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, DDPixelFormatVec &TexFmts,LPD3DDEVICEDESC7 pD3DDevDesc);
+#else
+  LPDIRECTDRAWSURFACE7 CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, DDPIXELFORMAT *pTexFmts,LPD3DDEVICEDESC7 pD3DDevDesc);
+#endif
 
 
   bool _bHasMipMaps;
   bool _bHasMipMaps;
   DWORD _PixBufConversionType;  // enum ConversionType
   DWORD _PixBufConversionType;  // enum ConversionType
@@ -85,5 +101,6 @@ private:
   static TypeHandle _type_handle;
   static TypeHandle _type_handle;
 };
 };
 
 
+
 #endif
 #endif
 
 

+ 14 - 5
panda/src/wdxdisplay8/Sources.pp

@@ -6,15 +6,24 @@
 
 
 #if $[BUILD_DX8]
 #if $[BUILD_DX8]
 #begin lib_target
 #begin lib_target
-  #define TARGET wdxdisplay8
-  #define LOCAL_LIBS dxgsg8
+  #define TARGET wdxdisplay
+  #define LOCAL_LIBS \
+    dxgsg
     
     
   #define COMBINED_SOURCES $[TARGET]_composite1.cxx 
   #define COMBINED_SOURCES $[TARGET]_composite1.cxx 
+  
+  // need to install these due to external projects that link directly with libpandadx (bartop)    
+  #define INSTALL_HEADERS \
+    config_wdxdisplay8.h wdxGraphicsPipe8.h wdxGraphicsWindow8.h
     
     
-  #define SOURCES \
-    config_wdxdisplay8.h wdxGraphicsPipe8.h wdxGraphicsWindow8.cxx wdxGraphicsWindow8.h
+  #define INCLUDED_SOURCES \
+    config_wdxdisplay8.cxx wdxGraphicsPipe8.cxx 
     
     
-  #define INCLUDED_SOURCES config_wdxdisplay8.cxx wdxGraphicsPipe8.cxx 
+  // note SOURCES shoult NOT include INCLUDED_SOURCES, that would cause a double build
+  // SOURCES should be headers and separately-built cxx files
+  // build wdxGraphicsWindow.cxx separately since its big
+  
+  #define SOURCES wdxGraphicsWindow8.cxx $[INSTALL_HEADERS]
     
     
 #end lib_target
 #end lib_target
 #endif
 #endif

+ 2 - 0
panda/src/wdxdisplay8/config_wdxdisplay8.cxx

@@ -31,6 +31,8 @@ ConfigureFn(config_wdxdisplay) {
 
 
 bool dx_force_16bpp_zbuffer = config_wdxdisplay.GetBool("dx-force-16bpp-zbuffer", false);
 bool dx_force_16bpp_zbuffer = config_wdxdisplay.GetBool("dx-force-16bpp-zbuffer", false);
 bool bResponsive_minimized_fullscreen_window = config_wdxdisplay.GetBool("responsive-minimized-fullscreen-window",false);
 bool bResponsive_minimized_fullscreen_window = config_wdxdisplay.GetBool("responsive-minimized-fullscreen-window",false);
+bool dx_preserve_fpu_state = config_wdxdisplay.GetBool("dx-preserve-fpu-state", false);
+int dx_preferred_deviceID = config_wdxdisplay.GetInt("dx-preferred-deviceID", -1);
 
 
 extern void AtExitFn(void);
 extern void AtExitFn(void);
 
 

+ 2 - 0
panda/src/wdxdisplay8/config_wdxdisplay8.h

@@ -27,6 +27,8 @@ NotifyCategoryDecl(wdxdisplay, EXPCL_PANDADX, EXPTP_PANDADX);
 
 
 extern bool bResponsive_minimized_fullscreen_window;
 extern bool bResponsive_minimized_fullscreen_window;
 extern bool dx_force_16bpp_zbuffer;
 extern bool dx_force_16bpp_zbuffer;
+extern bool dx_preserve_fpu_state;
+extern int dx_preferred_deviceID;
 extern Filename get_icon_filename();
 extern Filename get_icon_filename();
 extern Filename get_mono_cursor_filename();
 extern Filename get_mono_cursor_filename();
 extern Filename get_color_cursor_filename();
 extern Filename get_color_cursor_filename();

+ 1 - 1494
panda/src/wdxdisplay8/wdxGraphicsPipe8.cxx

@@ -20,7 +20,7 @@
 #include "config_wdxdisplay8.h"
 #include "config_wdxdisplay8.h"
 #include <mouseButton.h>
 #include <mouseButton.h>
 #include <keyboardButton.h>
 #include <keyboardButton.h>
-#include <dxfile.h>
+#include <dxerr8.h>
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 // Static variables
 // Static variables
@@ -107,1497 +107,4 @@ find_window(HWND win) {
     return NULL;
     return NULL;
 }
 }
 
 
-extern char * ConvD3DErrorToString(const HRESULT &error) {
-    switch(error) {
-        case E_FAIL:
-            return "Unspecified error E_FAIL";
-
-        case DD_OK:
-            return "No error.\0";
-        case D3DERR_BADMAJORVERSION      : // (700)
-            return "D3DERR_BADMAJORVERSION";//: // (700)
-        case D3DERR_BADMINORVERSION      : // (701)
-            return "D3DERR_BADMINORVERSION";//: // (701)
-        case D3DERR_INVALID_DEVICE   : // (705)
-            return "D3DERR_INVALID_DEVICE";//: // (705)
-        case D3DERR_INITFAILED       : // (706)
-            return "D3DERR_INITFAILED";//: // (706)
-        case D3DERR_DEVICEAGGREGATED : // (707)
-            return "D3DERR_DEVICEAGGREGATED";//: // (707)
-        case D3DERR_EXECUTE_CREATE_FAILED    : // (710)
-            return "D3DERR_EXECUTE_CREATE_FAILED";//: // (710)
-        case D3DERR_EXECUTE_DESTROY_FAILED   : // (711)
-            return "D3DERR_EXECUTE_DESTROY_FAILED";//: // (711)
-        case D3DERR_EXECUTE_LOCK_FAILED  : // (712)
-            return "D3DERR_EXECUTE_LOCK_FAILED";//: // (712)
-        case D3DERR_EXECUTE_UNLOCK_FAILED    : // (713)
-            return "D3DERR_EXECUTE_UNLOCK_FAILED";//: // (713)
-        case D3DERR_EXECUTE_LOCKED       : // (714)
-            return "D3DERR_EXECUTE_LOCKED";//: // (714)
-        case D3DERR_EXECUTE_NOT_LOCKED   : // (715)
-            return "D3DERR_EXECUTE_NOT_LOCKED";//: // (715)
-        case D3DERR_EXECUTE_FAILED       : // (716)
-            return "D3DERR_EXECUTE_FAILED";//: // (716)
-        case D3DERR_EXECUTE_CLIPPED_FAILED   : // (717)
-            return "D3DERR_EXECUTE_CLIPPED_FAILED";//: // (717)
-        case D3DERR_TEXTURE_NO_SUPPORT   : // (720)
-            return "D3DERR_TEXTURE_NO_SUPPORT";//: // (720)
-        case D3DERR_TEXTURE_CREATE_FAILED    : // (721)
-            return "D3DERR_TEXTURE_CREATE_FAILED";//: // (721)
-        case D3DERR_TEXTURE_DESTROY_FAILED   : // (722)
-            return "D3DERR_TEXTURE_DESTROY_FAILED";//: // (722)
-        case D3DERR_TEXTURE_LOCK_FAILED  : // (723)
-            return "D3DERR_TEXTURE_LOCK_FAILED";//: // (723)
-        case D3DERR_TEXTURE_UNLOCK_FAILED    : // (724)
-            return "D3DERR_TEXTURE_UNLOCK_FAILED";//: // (724)
-        case D3DERR_TEXTURE_LOAD_FAILED  : // (725)
-            return "D3DERR_TEXTURE_LOAD_FAILED";//: // (725)
-        case D3DERR_TEXTURE_SWAP_FAILED  : // (726)
-            return "D3DERR_TEXTURE_SWAP_FAILED";//: // (726)
-        case D3DERR_TEXTURE_LOCKED       : // (727)
-            return "D3DERR_TEXTURE_LOCKED";//: // (727)
-        case D3DERR_TEXTURE_NOT_LOCKED   : // (728)
-            return "D3DERR_TEXTURE_NOT_LOCKED";//: // (728)
-        case D3DERR_TEXTURE_GETSURF_FAILED   : // (729)
-            return "D3DERR_TEXTURE_GETSURF_FAILED";//: // (729)
-        case D3DERR_MATRIX_CREATE_FAILED : // (730)
-            return "D3DERR_MATRIX_CREATE_FAILED";//: // (730)
-        case D3DERR_MATRIX_DESTROY_FAILED    : // (731)
-            return "D3DERR_MATRIX_DESTROY_FAILED";//: // (731)
-        case D3DERR_MATRIX_SETDATA_FAILED    : // (732)
-            return "D3DERR_MATRIX_SETDATA_FAILED";//: // (732)
-        case D3DERR_MATRIX_GETDATA_FAILED    : // (733)
-            return "D3DERR_MATRIX_GETDATA_FAILED";//: // (733)
-        case D3DERR_SETVIEWPORTDATA_FAILED   : // (734)
-            return "D3DERR_SETVIEWPORTDATA_FAILED";//: // (734)
-        case D3DERR_INVALIDCURRENTVIEWPORT   : // (735)
-            return "D3DERR_INVALIDCURRENTVIEWPORT";//: // (735)
-        case D3DERR_INVALIDPRIMITIVETYPE     : // (736)
-            return "D3DERR_INVALIDPRIMITIVETYPE";//: // (736)
-        case D3DERR_INVALIDVERTEXTYPE        : // (737)
-            return "D3DERR_INVALIDVERTEXTYPE";//: // (737)
-        case D3DERR_TEXTURE_BADSIZE          : // (738)
-            return "D3DERR_TEXTURE_BADSIZE";//: // (738)
-        case D3DERR_INVALIDRAMPTEXTURE       : // (739)
-            return "D3DERR_INVALIDRAMPTEXTURE";//: // (739)
-        case D3DERR_MATERIAL_CREATE_FAILED   : // (740)
-            return "D3DERR_MATERIAL_CREATE_FAILED";//: // (740)
-        case D3DERR_MATERIAL_DESTROY_FAILED  : // (741)
-            return "D3DERR_MATERIAL_DESTROY_FAILED";//: // (741)
-        case D3DERR_MATERIAL_SETDATA_FAILED  : // (742)
-            return "D3DERR_MATERIAL_SETDATA_FAILED";//: // (742)
-        case D3DERR_MATERIAL_GETDATA_FAILED  : // (743)
-            return "D3DERR_MATERIAL_GETDATA_FAILED";//: // (743)
-        case D3DERR_INVALIDPALETTE           : // (744)
-            return "D3DERR_INVALIDPALETTE";//: // (744)
-        case D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY : // (745)
-            return "D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY";//: // (745)
-        case D3DERR_ZBUFF_NEEDS_VIDEOMEMORY  : // (746)
-            return "D3DERR_ZBUFF_NEEDS_VIDEOMEMORY";//: // (746)
-        case D3DERR_SURFACENOTINVIDMEM       : // (747)
-            return "D3DERR_SURFACENOTINVIDMEM";//: // (747)
-        case D3DERR_LIGHT_SET_FAILED     : // (750)
-            return "D3DERR_LIGHT_SET_FAILED";//: // (750)
-        case D3DERR_LIGHTHASVIEWPORT     : // (751)
-            return "D3DERR_LIGHTHASVIEWPORT";//: // (751)
-        case D3DERR_LIGHTNOTINTHISVIEWPORT           : // (752)
-            return "D3DERR_LIGHTNOTINTHISVIEWPORT";//: // (752)
-        case D3DERR_SCENE_IN_SCENE       : // (760)
-            return "D3DERR_SCENE_IN_SCENE";//: // (760)
-        case D3DERR_SCENE_NOT_IN_SCENE   : // (761)
-            return "D3DERR_SCENE_NOT_IN_SCENE";//: // (761)
-        case D3DERR_SCENE_BEGIN_FAILED   : // (762)
-            return "D3DERR_SCENE_BEGIN_FAILED";//: // (762)
-        case D3DERR_SCENE_END_FAILED     : // (763)
-            return "D3DERR_SCENE_END_FAILED";//: // (763)
-        case D3DERR_INBEGIN                  : // (770)
-            return "D3DERR_INBEGIN";//: // (770)
-        case D3DERR_NOTINBEGIN               : // (771)
-            return "D3DERR_NOTINBEGIN";//: // (771)
-        case D3DERR_NOVIEWPORTS              : // (772)
-            return "D3DERR_NOVIEWPORTS";//: // (772)
-        case D3DERR_VIEWPORTDATANOTSET       : // (773)
-            return "D3DERR_VIEWPORTDATANOTSET";//: // (773)
-        case D3DERR_VIEWPORTHASNODEVICE      : // (774)
-            return "D3DERR_VIEWPORTHASNODEVICE";//: // (774)
-        case D3DERR_NOCURRENTVIEWPORT        : // (775)
-            return "D3DERR_NOCURRENTVIEWPORT";//: // (775)
-        case D3DERR_INVALIDVERTEXFORMAT              : // (2048)
-            return "D3DERR_INVALIDVERTEXFORMAT";//: // (2048)
-        case D3DERR_COLORKEYATTACHED                 : // (2050)
-            return "D3DERR_COLORKEYATTACHED";//: // (2050)
-        case D3DERR_VERTEXBUFFEROPTIMIZED            : // (2060)
-            return "D3DERR_VERTEXBUFFEROPTIMIZED";//: // (2060)
-        case D3DERR_VBUF_CREATE_FAILED               : // (2061)
-            return "D3DERR_VBUF_CREATE_FAILED";//: // (2061)
-        case D3DERR_VERTEXBUFFERLOCKED               : // (2062)
-            return "D3DERR_VERTEXBUFFERLOCKED";//: // (2062)
-        case D3DERR_ZBUFFER_NOTPRESENT               : // (2070)
-            return "D3DERR_ZBUFFER_NOTPRESENT";//: // (2070)
-        case D3DERR_STENCILBUFFER_NOTPRESENT         : // (2071)
-            return "D3DERR_STENCILBUFFER_NOTPRESENT";//: // (2071)
-        case D3DERR_WRONGTEXTUREFORMAT               : // (2072)
-            return "D3DERR_WRONGTEXTUREFORMAT";//: // (2072)
-        case D3DERR_UNSUPPORTEDCOLOROPERATION        : // (2073)
-            return "D3DERR_UNSUPPORTEDCOLOROPERATION";//: // (2073)
-        case D3DERR_UNSUPPORTEDCOLORARG              : // (2074)
-            return "D3DERR_UNSUPPORTEDCOLORARG";//: // (2074)
-        case D3DERR_UNSUPPORTEDALPHAOPERATION        : // (2075)
-            return "D3DERR_UNSUPPORTEDALPHAOPERATION";//: // (2075)
-        case D3DERR_UNSUPPORTEDALPHAARG              : // (2076)
-            return "D3DERR_UNSUPPORTEDALPHAARG";//: // (2076)
-        case D3DERR_TOOMANYOPERATIONS                : // (2077)
-            return "D3DERR_TOOMANYOPERATIONS";//: // (2077)
-        case D3DERR_CONFLICTINGTEXTUREFILTER         : // (2078)
-            return "D3DERR_CONFLICTINGTEXTUREFILTER";//: // (2078)
-        case D3DERR_UNSUPPORTEDFACTORVALUE           : // (2079)
-            return "D3DERR_UNSUPPORTEDFACTORVALUE";//: // (2079)
-        case D3DERR_CONFLICTINGRENDERSTATE           : // (2081)
-            return "D3DERR_CONFLICTINGRENDERSTATE";//: // (2081)
-        case D3DERR_UNSUPPORTEDTEXTUREFILTER         : // (2082)
-            return "D3DERR_UNSUPPORTEDTEXTUREFILTER";//: // (2082)
-        case D3DERR_TOOMANYPRIMITIVES                : // (2083)
-            return "D3DERR_TOOMANYPRIMITIVES";//: // (2083)
-        case D3DERR_INVALIDMATRIX                    : // (2084)
-            return "D3DERR_INVALIDMATRIX";//: // (2084)
-        case D3DERR_TOOMANYVERTICES                  : // (2085)
-            return "D3DERR_TOOMANYVERTICES";//: // (2085)
-        case D3DERR_CONFLICTINGTEXTUREPALETTE        : // (2086)
-            return "D3DERR_CONFLICTINGTEXTUREPALETTE";//: // (2086)
-//#if DX7
-        case D3DERR_VERTEXBUFFERUNLOCKFAILED         : // (2063)
-            return "D3DERR_VERTEXBUFFERUNLOCKFAILED";//: // (2063)
-        case D3DERR_INVALIDSTATEBLOCK        : // (2100)
-            return "D3DERR_INVALIDSTATEBLOCK";//: // (2100)
-        case D3DERR_INBEGINSTATEBLOCK        : // (2101)
-            return "D3DERR_INBEGINSTATEBLOCK";//: // (2101)
-        case D3DERR_NOTINBEGINSTATEBLOCK     : // (2102)
-            return "D3DERR_NOTINBEGINSTATEBLOCK";//: // (2102)
-  //case D3DERR_INOVERLAYSTATEBLOCK      : // (2103)
-  //  return "D3DERR_INOVERLAYSTATEBLOCK";//: // (2103)
-        case DDERR_NOSTEREOHARDWARE       : // ( 181 )
-            return "DDERR_NOSTEREOHARDWARE      ";//: // ( 181 )
-        case DDERR_NOSURFACELEFT              : // ( 182 )
-            return "DDERR_NOSURFACELEFT             ";//: // ( 182 )
-        case DDERR_DDSCAPSCOMPLEXREQUIRED            : // ( 542 )
-            return "DDERR_DDSCAPSCOMPLEXREQUIRED";//: // ( 542 )
-        case DDERR_NOTONMIPMAPSUBLEVEL               : // ( 603 )
-            return "DDERR_NOTONMIPMAPSUBLEVEL";//: // ( 603 )
-        case DDERR_TESTFINISHED                      : // ( 692 )
-            return "DDERR_TESTFINISHED";//: // ( 692 )
-        case DDERR_NEWMODE                           : // ( 693 )
-            return "DDERR_NEWMODE";//: // ( 693 )
-//#endif
-    //case D3DERR_COMMAND_UNPARSED              : // (3000)
-    /// return "case";//D3DERR_COMMAND_UNPARSED              : // (3000)
-
-        case DDERR_ALREADYINITIALIZED     : // ( 5 )
-            return "DDERR_ALREADYINITIALIZED        ";//: // ( 5 )
-        case DDERR_CANNOTATTACHSURFACE        : // ( 10 )
-            return "DDERR_CANNOTATTACHSURFACE       ";//: // ( 10 )
-        case DDERR_CANNOTDETACHSURFACE        : // ( 20 )
-            return "DDERR_CANNOTDETACHSURFACE       ";//: // ( 20 )
-        case DDERR_CURRENTLYNOTAVAIL          : // ( 40 )
-            return "DDERR_CURRENTLYNOTAVAIL         ";//: // ( 40 )
-        case DDERR_EXCEPTION              : // ( 55 )
-            return "DDERR_EXCEPTION             ";//: // ( 55 )
-        case DDERR_HEIGHTALIGN            : // ( 90 )
-            return "DDERR_HEIGHTALIGN           ";//: // ( 90 )
-        case DDERR_INCOMPATIBLEPRIMARY        : // ( 95 )
-            return "DDERR_INCOMPATIBLEPRIMARY       ";//: // ( 95 )
-        case DDERR_INVALIDCAPS            : // ( 100 )
-            return "DDERR_INVALIDCAPS           ";//: // ( 100 )
-        case DDERR_INVALIDCLIPLIST            : // ( 110 )
-            return "DDERR_INVALIDCLIPLIST           ";//: // ( 110 )
-        case DDERR_INVALIDMODE            : // ( 120 )
-            return "DDERR_INVALIDMODE           ";//: // ( 120 )
-        case DDERR_INVALIDOBJECT          : // ( 130 )
-            return "DDERR_INVALIDOBJECT         ";//: // ( 130 )
-        case DDERR_INVALIDPIXELFORMAT     : // ( 145 )
-            return "DDERR_INVALIDPIXELFORMAT        ";//: // ( 145 )
-        case DDERR_INVALIDRECT            : // ( 150 )
-            return "DDERR_INVALIDRECT           ";//: // ( 150 )
-        case DDERR_LOCKEDSURFACES         : // ( 160 )
-            return "DDERR_LOCKEDSURFACES            ";//: // ( 160 )
-        case DDERR_NO3D               : // ( 170 )
-            return "DDERR_NO3D              ";//: // ( 170 )
-        case DDERR_NOALPHAHW              : // ( 180 )
-            return "DDERR_NOALPHAHW             ";//: // ( 180 )
-        case DDERR_NOCLIPLIST         : // ( 205 )
-            return "DDERR_NOCLIPLIST            ";//: // ( 205 )
-        case DDERR_NOCOLORCONVHW          : // ( 210 )
-            return "DDERR_NOCOLORCONVHW         ";//: // ( 210 )
-        case DDERR_NOCOOPERATIVELEVELSET      : // ( 212 )
-            return "DDERR_NOCOOPERATIVELEVELSET     ";//: // ( 212 )
-        case DDERR_NOCOLORKEY         : // ( 215 )
-            return "DDERR_NOCOLORKEY            ";//: // ( 215 )
-        case DDERR_NOCOLORKEYHW           : // ( 220 )
-            return "DDERR_NOCOLORKEYHW          ";//: // ( 220 )
-        case DDERR_NODIRECTDRAWSUPPORT        : // ( 222 )
-            return "DDERR_NODIRECTDRAWSUPPORT       ";//: // ( 222 )
-        case DDERR_NOEXCLUSIVEMODE            : // ( 225 )
-            return "DDERR_NOEXCLUSIVEMODE           ";//: // ( 225 )
-        case DDERR_NOFLIPHW               : // ( 230 )
-            return "DDERR_NOFLIPHW              ";//: // ( 230 )
-        case DDERR_NOGDI              : // ( 240 )
-            return "DDERR_NOGDI             ";//: // ( 240 )
-        case DDERR_NOMIRRORHW         : // ( 250 )
-            return "DDERR_NOMIRRORHW            ";//: // ( 250 )
-        case DDERR_NOTFOUND               : // ( 255 )
-            return "DDERR_NOTFOUND              ";//: // ( 255 )
-        case DDERR_NOOVERLAYHW            : // ( 260 )
-            return "DDERR_NOOVERLAYHW           ";//: // ( 260 )
-        case DDERR_OVERLAPPINGRECTS           : // ( 270 )
-            return "DDERR_OVERLAPPINGRECTS          ";//: // ( 270 )
-        case DDERR_NORASTEROPHW           : // ( 280 )
-            return "DDERR_NORASTEROPHW          ";//: // ( 280 )
-        case DDERR_NOROTATIONHW           : // ( 290 )
-            return "DDERR_NOROTATIONHW          ";//: // ( 290 )
-        case DDERR_NOSTRETCHHW            : // ( 310 )
-            return "DDERR_NOSTRETCHHW           ";//: // ( 310 )
-        case DDERR_NOT4BITCOLOR           : // ( 316 )
-            return "DDERR_NOT4BITCOLOR          ";//: // ( 316 )
-        case DDERR_NOT4BITCOLORINDEX          : // ( 317 )
-            return "DDERR_NOT4BITCOLORINDEX         ";//: // ( 317 )
-        case DDERR_NOT8BITCOLOR           : // ( 320 )
-            return "DDERR_NOT8BITCOLOR          ";//: // ( 320 )
-        case DDERR_NOTEXTUREHW            : // ( 330 )
-            return "DDERR_NOTEXTUREHW           ";//: // ( 330 )
-        case DDERR_NOVSYNCHW              : // ( 335 )
-            return "DDERR_NOVSYNCHW             ";//: // ( 335 )
-        case DDERR_NOZBUFFERHW            : // ( 340 )
-            return "DDERR_NOZBUFFERHW           ";//: // ( 340 )
-        case DDERR_NOZOVERLAYHW           : // ( 350 )
-            return "DDERR_NOZOVERLAYHW          ";//: // ( 350 )
-        case DDERR_OUTOFCAPS              : // ( 360 )
-            return "DDERR_OUTOFCAPS             ";//: // ( 360 )
-        case DDERR_OUTOFVIDEOMEMORY           : // ( 380 )
-            return "DDERR_OUTOFVIDEOMEMORY          ";//: // ( 380 )
-        case DDERR_OVERLAYCANTCLIP            : // ( 382 )
-            return "DDERR_OVERLAYCANTCLIP           ";//: // ( 382 )
-        case DDERR_OVERLAYCOLORKEYONLYONEACTIVE   : // ( 384 )
-            return "DDERR_OVERLAYCOLORKEYONLYONEACTIVE  ";//: // ( 384 )
-        case DDERR_PALETTEBUSY            : // ( 387 )
-            return "DDERR_PALETTEBUSY           ";//: // ( 387 )
-        case DDERR_COLORKEYNOTSET         : // ( 400 )
-            return "DDERR_COLORKEYNOTSET            ";//: // ( 400 )
-        case DDERR_SURFACEALREADYATTACHED     : // ( 410 )
-            return "DDERR_SURFACEALREADYATTACHED        ";//: // ( 410 )
-        case DDERR_SURFACEALREADYDEPENDENT        : // ( 420 )
-            return "DDERR_SURFACEALREADYDEPENDENT       ";//: // ( 420 )
-        case DDERR_SURFACEBUSY            : // ( 430 )
-            return "DDERR_SURFACEBUSY           ";//: // ( 430 )
-        case DDERR_CANTLOCKSURFACE                   : // ( 435 )
-            return "DDERR_CANTLOCKSURFACE";//: // ( 435 )
-        case DDERR_SURFACEISOBSCURED          : // ( 440 )
-            return "DDERR_SURFACEISOBSCURED         ";//: // ( 440 )
-        case DDERR_SURFACELOST            : // ( 450 )
-            return "DDERR_SURFACELOST           ";//: // ( 450 )
-        case DDERR_SURFACENOTATTACHED     : // ( 460 )
-            return "DDERR_SURFACENOTATTACHED        ";//: // ( 460 )
-        case DDERR_TOOBIGHEIGHT           : // ( 470 )
-            return "DDERR_TOOBIGHEIGHT          ";//: // ( 470 )
-        case DDERR_TOOBIGSIZE         : // ( 480 )
-            return "DDERR_TOOBIGSIZE            ";//: // ( 480 )
-        case DDERR_TOOBIGWIDTH            : // ( 490 )
-            return "DDERR_TOOBIGWIDTH           ";//: // ( 490 )
-        case DDERR_UNSUPPORTEDFORMAT          : // ( 510 )
-            return "DDERR_UNSUPPORTEDFORMAT         ";//: // ( 510 )
-        case DDERR_UNSUPPORTEDMASK            : // ( 520 )
-            return "DDERR_UNSUPPORTEDMASK           ";//: // ( 520 )
-        case DDERR_INVALIDSTREAM                     : // ( 521 )
-            return "DDERR_INVALIDSTREAM";//: // ( 521 )
-        case DDERR_VERTICALBLANKINPROGRESS        : // ( 537 )
-            return "DDERR_VERTICALBLANKINPROGRESS       ";//: // ( 537 )
-        case DDERR_WASSTILLDRAWING            : // ( 540 )
-            return "DDERR_WASSTILLDRAWING           ";//: // ( 540 )
-        case DDERR_XALIGN             : // ( 560 )
-            return "DDERR_XALIGN                ";//: // ( 560 )
-        case DDERR_INVALIDDIRECTDRAWGUID      : // ( 561 )
-            return "DDERR_INVALIDDIRECTDRAWGUID     ";//: // ( 561 )
-        case DDERR_DIRECTDRAWALREADYCREATED       : // ( 562 )
-            return "DDERR_DIRECTDRAWALREADYCREATED      ";//: // ( 562 )
-        case DDERR_NODIRECTDRAWHW         : // ( 563 )
-            return "DDERR_NODIRECTDRAWHW            ";//: // ( 563 )
-        case DDERR_PRIMARYSURFACEALREADYEXISTS    : // ( 564 )
-            return "DDERR_PRIMARYSURFACEALREADYEXISTS   ";//: // ( 564 )
-        case DDERR_NOEMULATION            : // ( 565 )
-            return "DDERR_NOEMULATION           ";//: // ( 565 )
-        case DDERR_REGIONTOOSMALL         : // ( 566 )
-            return "DDERR_REGIONTOOSMALL            ";//: // ( 566 )
-        case DDERR_CLIPPERISUSINGHWND     : // ( 567 )
-            return "DDERR_CLIPPERISUSINGHWND        ";//: // ( 567 )
-        case DDERR_NOCLIPPERATTACHED          : // ( 568 )
-            return "DDERR_NOCLIPPERATTACHED         ";//: // ( 568 )
-        case DDERR_NOHWND             : // ( 569 )
-            return "DDERR_NOHWND                ";//: // ( 569 )
-        case DDERR_HWNDSUBCLASSED         : // ( 570 )
-            return "DDERR_HWNDSUBCLASSED            ";//: // ( 570 )
-        case DDERR_HWNDALREADYSET         : // ( 571 )
-            return "DDERR_HWNDALREADYSET            ";//: // ( 571 )
-        case DDERR_NOPALETTEATTACHED          : // ( 572 )
-            return "DDERR_NOPALETTEATTACHED         ";//: // ( 572 )
-        case DDERR_NOPALETTEHW            : // ( 573 )
-            return "DDERR_NOPALETTEHW           ";//: // ( 573 )
-        case DDERR_BLTFASTCANTCLIP            : // ( 574 )
-            return "DDERR_BLTFASTCANTCLIP           ";//: // ( 574 )
-        case DDERR_NOBLTHW                : // ( 575 )
-            return "DDERR_NOBLTHW               ";//: // ( 575 )
-        case DDERR_NODDROPSHW         : // ( 576 )
-            return "DDERR_NODDROPSHW            ";//: // ( 576 )
-        case DDERR_OVERLAYNOTVISIBLE          : // ( 577 )
-            return "DDERR_OVERLAYNOTVISIBLE         ";//: // ( 577 )
-        case DDERR_NOOVERLAYDEST          : // ( 578 )
-            return "DDERR_NOOVERLAYDEST         ";//: // ( 578 )
-        case DDERR_INVALIDPOSITION            : // ( 579 )
-            return "DDERR_INVALIDPOSITION           ";//: // ( 579 )
-        case DDERR_NOTAOVERLAYSURFACE     : // ( 580 )
-            return "DDERR_NOTAOVERLAYSURFACE        ";//: // ( 580 )
-        case DDERR_EXCLUSIVEMODEALREADYSET        : // ( 581 )
-            return "DDERR_EXCLUSIVEMODEALREADYSET       ";//: // ( 581 )
-        case DDERR_NOTFLIPPABLE           : // ( 582 )
-            return "DDERR_NOTFLIPPABLE          ";//: // ( 582 )
-        case DDERR_CANTDUPLICATE          : // ( 583 )
-            return "DDERR_CANTDUPLICATE         ";//: // ( 583 )
-        case DDERR_NOTLOCKED              : // ( 584 )
-            return "DDERR_NOTLOCKED             ";//: // ( 584 )
-        case DDERR_CANTCREATEDC           : // ( 585 )
-            return "DDERR_CANTCREATEDC          ";//: // ( 585 )
-        case DDERR_NODC               : // ( 586 )
-            return "DDERR_NODC              ";//: // ( 586 )
-        case DDERR_WRONGMODE              : // ( 587 )
-            return "DDERR_WRONGMODE             ";//: // ( 587 )
-        case DDERR_IMPLICITLYCREATED          : // ( 588 )
-            return "DDERR_IMPLICITLYCREATED         ";//: // ( 588 )
-        case DDERR_NOTPALETTIZED          : // ( 589 )
-            return "DDERR_NOTPALETTIZED         ";//: // ( 589 )
-        case DDERR_UNSUPPORTEDMODE            : // ( 590 )
-            return "DDERR_UNSUPPORTEDMODE           ";//: // ( 590 )
-        case DDERR_NOMIPMAPHW         : // ( 591 )
-            return "DDERR_NOMIPMAPHW            ";//: // ( 591 )
-        case DDERR_INVALIDSURFACETYPE                : // ( 592 )
-            return "DDERR_INVALIDSURFACETYPE";//: // ( 592 )
-        case DDERR_NOOPTIMIZEHW                      : // ( 600 )
-            return "DDERR_NOOPTIMIZEHW";//: // ( 600 )
-        case DDERR_NOTLOADED                         : // ( 601 )
-            return "DDERR_NOTLOADED";//: // ( 601 )
-        case DDERR_NOFOCUSWINDOW                     : // ( 602 )
-            return "DDERR_NOFOCUSWINDOW";//: // ( 602 )
-        case DDERR_DCALREADYCREATED           : // ( 620 )
-            return "DDERR_DCALREADYCREATED          ";//: // ( 620 )
-        case DDERR_NONONLOCALVIDMEM                  : // ( 630 )
-            return "DDERR_NONONLOCALVIDMEM";//: // ( 630 )
-        case DDERR_CANTPAGELOCK           : // ( 640 )
-            return "DDERR_CANTPAGELOCK          ";//: // ( 640 )
-        case DDERR_CANTPAGEUNLOCK         : // ( 660 )
-            return "DDERR_CANTPAGEUNLOCK            ";//: // ( 660 )
-        case DDERR_NOTPAGELOCKED          : // ( 680 )
-            return "DDERR_NOTPAGELOCKED         ";//: // ( 680 )
-        case DDERR_MOREDATA                   : // ( 690 )
-            return "DDERR_MOREDATA                  ";//: // ( 690 )
-        case DDERR_EXPIRED                           : // ( 691 )
-            return "DDERR_EXPIRED";//: // ( 691 )
-        case DDERR_VIDEONOTACTIVE             : // ( 695 )
-            return "DDERR_VIDEONOTACTIVE            ";//: // ( 695 )
-        case DDERR_DEVICEDOESNTOWNSURFACE         : // ( 699 )
-            return "DDERR_DEVICEDOESNTOWNSURFACE        ";//: // ( 699 )
-        case DXFILEERR_BADOBJECT                 : // (850)
-            return "DXFILEERR_BADOBJECT";//: // (850)
-        case DXFILEERR_BADVALUE                  : // (851)
-            return "DXFILEERR_BADVALUE";//: // (851)
-        case DXFILEERR_BADTYPE                   : // (852)
-            return "DXFILEERR_BADTYPE";//: // (852)
-        case DXFILEERR_BADSTREAMHANDLE           : // (853)
-            return "DXFILEERR_BADSTREAMHANDLE";//: // (853)
-        case DXFILEERR_BADALLOC                  : // (854)
-            return "DXFILEERR_BADALLOC";//: // (854)
-        case DXFILEERR_NOTFOUND                  : // (855)
-            return "DXFILEERR_NOTFOUND";//: // (855)
-        case DXFILEERR_NOTDONEYET                : // (856)
-            return "DXFILEERR_NOTDONEYET";//: // (856)
-        case DXFILEERR_FILENOTFOUND              : // (857)
-            return "DXFILEERR_FILENOTFOUND";//: // (857)
-        case DXFILEERR_RESOURCENOTFOUND          : // (858)
-            return "DXFILEERR_RESOURCENOTFOUND";//: // (858)
-        case DXFILEERR_URLNOTFOUND               : // (859)
-            return "DXFILEERR_URLNOTFOUND";//: // (859)
-        case DXFILEERR_BADRESOURCE               : // (860)
-            return "DXFILEERR_BADRESOURCE";//: // (860)
-        case DXFILEERR_BADFILETYPE               : // (861)
-            return "DXFILEERR_BADFILETYPE";//: // (861)
-        case DXFILEERR_BADFILEVERSION            : // (862)
-            return "DXFILEERR_BADFILEVERSION";//: // (862)
-        case DXFILEERR_BADFILEFLOATSIZE          : // (863)
-            return "DXFILEERR_BADFILEFLOATSIZE";//: // (863)
-        case DXFILEERR_BADFILECOMPRESSIONTYPE    : // (864)
-            return "DXFILEERR_BADFILECOMPRESSIONTYPE";//: // (864)
-        case DXFILEERR_BADFILE                   : // (865)
-            return "DXFILEERR_BADFILE";//: // (865)
-        case DXFILEERR_PARSEERROR                : // (866)
-            return "DXFILEERR_PARSEERROR";//: // (866)
-        case DXFILEERR_NOTEMPLATE                : // (867)
-            return "DXFILEERR_NOTEMPLATE";//: // (867)
-        case DXFILEERR_BADARRAYSIZE              : // (868)
-            return "DXFILEERR_BADARRAYSIZE";//: // (868)
-        case DXFILEERR_BADDATAREFERENCE          : // (869)
-            return "DXFILEERR_BADDATAREFERENCE";//: // (869)
-        case DXFILEERR_INTERNALERROR             : // (870)
-            return "DXFILEERR_INTERNALERROR";//: // (870)
-        case DXFILEERR_NOMOREOBJECTS             : // (871)
-            return "DXFILEERR_NOMOREOBJECTS";//: // (871)
-        case DXFILEERR_BADINTRINSICS             : // (872)
-            return "DXFILEERR_BADINTRINSICS";//: // (872)
-        case DXFILEERR_NOMORESTREAMHANDLES       : // (873)
-            return "DXFILEERR_NOMORESTREAMHANDLES";//: // (873)
-        case DXFILEERR_NOMOREDATA                : // (874)
-            return "DXFILEERR_NOMOREDATA";//: // (874)
-        case DXFILEERR_BADCACHEFILE              : // (875)
-            return "DXFILEERR_BADCACHEFILE";//: // (875)
-        case DXFILEERR_NOINTERNET                : // (876)
-            return "DXFILEERR_NOINTERNET";//: // (876)
-
-        case E_UNEXPECTED                     :
-            return "E_UNEXPECTED                     ";
-        case E_NOTIMPL                        :
-            return "E_NOTIMPL                        ";
-        case E_OUTOFMEMORY                    :
-            return "E_OUTOFMEMORY                    ";
-        case E_INVALIDARG                     :
-            return "E_INVALIDARG or DDERR_INVALIDPARAMS";
-        case E_NOINTERFACE                    :
-            return "E_NOINTERFACE                    ";
-        case E_POINTER                        :
-            return "E_POINTER                        ";
-        case E_HANDLE                         :
-            return "E_HANDLE                         ";
-        case E_ABORT                          :
-            return "E_ABORT                          ";
-//    case E_FAIL                           :
-//    return "E_FAIL                           ";
-        case E_ACCESSDENIED                   :
-            return "E_ACCESSDENIED                   ";
-        case E_PENDING                        :
-            return "E_PENDING                        ";
-        case CO_E_INIT_TLS                    :
-            return "CO_E_INIT_TLS                    ";
-        case CO_E_INIT_SHARED_ALLOCATOR       :
-            return "CO_E_INIT_SHARED_ALLOCATOR       ";
-        case CO_E_INIT_MEMORY_ALLOCATOR       :
-            return "CO_E_INIT_MEMORY_ALLOCATOR       ";
-        case CO_E_INIT_CLASS_CACHE            :
-            return "CO_E_INIT_CLASS_CACHE            ";
-        case CO_E_INIT_RPC_CHANNEL            :
-            return "CO_E_INIT_RPC_CHANNEL            ";
-        case CO_E_INIT_TLS_SET_CHANNEL_CONTROL :
-            return "CO_E_INIT_TLS_SET_CHANNEL_CONTROL ";
-        case CO_E_INIT_TLS_CHANNEL_CONTROL    :
-            return "CO_E_INIT_TLS_CHANNEL_CONTROL    ";
-        case CO_E_INIT_UNACCEPTED_USER_ALLOCATOR :
-            return "CO_E_INIT_UNACCEPTED_USER_ALLOCATOR ";
-        case CO_E_INIT_SCM_MUTEX_EXISTS       :
-            return "CO_E_INIT_SCM_MUTEX_EXISTS       ";
-        case CO_E_INIT_SCM_FILE_MAPPING_EXISTS :
-            return "CO_E_INIT_SCM_FILE_MAPPING_EXISTS ";
-        case CO_E_INIT_SCM_MAP_VIEW_OF_FILE   :
-            return "CO_E_INIT_SCM_MAP_VIEW_OF_FILE   ";
-        case CO_E_INIT_SCM_EXEC_FAILURE       :
-            return "CO_E_INIT_SCM_EXEC_FAILURE       ";
-        case CO_E_INIT_ONLY_SINGLE_THREADED   :
-            return "CO_E_INIT_ONLY_SINGLE_THREADED   ";
-        case CO_E_CANT_REMOTE                 :
-            return "CO_E_CANT_REMOTE                 ";
-        case CO_E_BAD_SERVER_NAME             :
-            return "CO_E_BAD_SERVER_NAME             ";
-        case CO_E_WRONG_SERVER_IDENTITY       :
-            return "CO_E_WRONG_SERVER_IDENTITY       ";
-        case CO_E_OLE1DDE_DISABLED            :
-            return "CO_E_OLE1DDE_DISABLED            ";
-        case CO_E_RUNAS_SYNTAX                :
-            return "CO_E_RUNAS_SYNTAX                ";
-        case CO_E_CREATEPROCESS_FAILURE       :
-            return "CO_E_CREATEPROCESS_FAILURE       ";
-        case CO_E_RUNAS_CREATEPROCESS_FAILURE :
-            return "CO_E_RUNAS_CREATEPROCESS_FAILURE ";
-        case CO_E_RUNAS_LOGON_FAILURE         :
-            return "CO_E_RUNAS_LOGON_FAILURE         ";
-        case CO_E_LAUNCH_PERMSSION_DENIED     :
-            return "CO_E_LAUNCH_PERMSSION_DENIED     ";
-        case CO_E_START_SERVICE_FAILURE       :
-            return "CO_E_START_SERVICE_FAILURE       ";
-        case CO_E_REMOTE_COMMUNICATION_FAILURE :
-            return "CO_E_REMOTE_COMMUNICATION_FAILURE ";
-        case CO_E_SERVER_START_TIMEOUT        :
-            return "CO_E_SERVER_START_TIMEOUT        ";
-        case CO_E_CLSREG_INCONSISTENT         :
-            return "CO_E_CLSREG_INCONSISTENT         ";
-        case CO_E_IIDREG_INCONSISTENT         :
-            return "CO_E_IIDREG_INCONSISTENT         ";
-        case CO_E_NOT_SUPPORTED               :
-            return "CO_E_NOT_SUPPORTED               ";
-        case CO_E_RELOAD_DLL                  :
-            return "CO_E_RELOAD_DLL                  ";
-        case CO_E_MSI_ERROR                   :
-            return "CO_E_MSI_ERROR                   ";
-        case OLE_E_OLEVERB                    :
-            return "OLE_E_OLEVERB                    ";
-        case OLE_E_ADVF                       :
-            return "OLE_E_ADVF                       ";
-        case OLE_E_ENUM_NOMORE                :
-            return "OLE_E_ENUM_NOMORE                ";
-        case OLE_E_ADVISENOTSUPPORTED         :
-            return "OLE_E_ADVISENOTSUPPORTED         ";
-        case OLE_E_NOCONNECTION               :
-            return "OLE_E_NOCONNECTION               ";
-        case OLE_E_NOTRUNNING                 :
-            return "OLE_E_NOTRUNNING                 ";
-        case OLE_E_NOCACHE                    :
-            return "OLE_E_NOCACHE                    ";
-        case OLE_E_BLANK                      :
-            return "OLE_E_BLANK                      ";
-        case OLE_E_CLASSDIFF                  :
-            return "OLE_E_CLASSDIFF                  ";
-        case OLE_E_CANT_GETMONIKER            :
-            return "OLE_E_CANT_GETMONIKER            ";
-        case OLE_E_CANT_BINDTOSOURCE          :
-            return "OLE_E_CANT_BINDTOSOURCE          ";
-        case OLE_E_STATIC                     :
-            return "OLE_E_STATIC                     ";
-        case OLE_E_PROMPTSAVECANCELLED        :
-            return "OLE_E_PROMPTSAVECANCELLED        ";
-        case OLE_E_INVALIDRECT                :
-            return "OLE_E_INVALIDRECT                ";
-        case OLE_E_WRONGCOMPOBJ               :
-            return "OLE_E_WRONGCOMPOBJ               ";
-        case OLE_E_INVALIDHWND                :
-            return "OLE_E_INVALIDHWND                ";
-        case OLE_E_NOT_INPLACEACTIVE          :
-            return "OLE_E_NOT_INPLACEACTIVE          ";
-        case OLE_E_CANTCONVERT                :
-            return "OLE_E_CANTCONVERT                ";
-        case OLE_E_NOSTORAGE                  :
-            return "OLE_E_NOSTORAGE                  ";
-        case DV_E_FORMATETC                   :
-            return "DV_E_FORMATETC                   ";
-        case DV_E_DVTARGETDEVICE              :
-            return "DV_E_DVTARGETDEVICE              ";
-        case DV_E_STGMEDIUM                   :
-            return "DV_E_STGMEDIUM                   ";
-        case DV_E_STATDATA                    :
-            return "DV_E_STATDATA                    ";
-        case DV_E_LINDEX                      :
-            return "DV_E_LINDEX                      ";
-        case DV_E_TYMED                       :
-            return "DV_E_TYMED                       ";
-        case DV_E_CLIPFORMAT                  :
-            return "DV_E_CLIPFORMAT                  ";
-        case DV_E_DVASPECT                    :
-            return "DV_E_DVASPECT                    ";
-        case DV_E_DVTARGETDEVICE_SIZE         :
-            return "DV_E_DVTARGETDEVICE_SIZE         ";
-        case DV_E_NOIVIEWOBJECT               :
-            return "DV_E_NOIVIEWOBJECT               ";
-        case DRAGDROP_E_NOTREGISTERED         :
-            return "DRAGDROP_E_NOTREGISTERED         ";
-        case DRAGDROP_E_ALREADYREGISTERED     :
-            return "DRAGDROP_E_ALREADYREGISTERED     ";
-        case DRAGDROP_E_INVALIDHWND           :
-            return "DRAGDROP_E_INVALIDHWND           ";
-        case CLASS_E_NOAGGREGATION            :
-            return "CLASS_E_NOAGGREGATION            ";
-        case CLASS_E_CLASSNOTAVAILABLE        :
-            return "CLASS_E_CLASSNOTAVAILABLE        ";
-        case CLASS_E_NOTLICENSED              :
-            return "CLASS_E_NOTLICENSED              ";
-        case VIEW_E_DRAW                      :
-            return "VIEW_E_DRAW                      ";
-        case REGDB_E_READREGDB                :
-            return "REGDB_E_READREGDB                ";
-        case REGDB_E_WRITEREGDB               :
-            return "REGDB_E_WRITEREGDB               ";
-        case REGDB_E_KEYMISSING               :
-            return "REGDB_E_KEYMISSING               ";
-        case REGDB_E_INVALIDVALUE             :
-            return "REGDB_E_INVALIDVALUE             ";
-        case REGDB_E_CLASSNOTREG              :
-            return "REGDB_E_CLASSNOTREG              ";
-        case REGDB_E_IIDNOTREG                :
-            return "REGDB_E_IIDNOTREG                ";
-        case CAT_E_CATIDNOEXIST               :
-            return "CAT_E_CATIDNOEXIST               ";
-        case CAT_E_NODESCRIPTION              :
-            return "CAT_E_NODESCRIPTION              ";
-        case CS_E_PACKAGE_NOTFOUND            :
-            return "CS_E_PACKAGE_NOTFOUND            ";
-        case CS_E_NOT_DELETABLE               :
-            return "CS_E_NOT_DELETABLE               ";
-        case CS_E_CLASS_NOTFOUND              :
-            return "CS_E_CLASS_NOTFOUND              ";
-        case CS_E_INVALID_VERSION             :
-            return "CS_E_INVALID_VERSION             ";
-        case CS_E_NO_CLASSSTORE               :
-            return "CS_E_NO_CLASSSTORE               ";
-        case CACHE_E_NOCACHE_UPDATED          :
-            return "CACHE_E_NOCACHE_UPDATED          ";
-        case OLEOBJ_E_NOVERBS                 :
-            return "OLEOBJ_E_NOVERBS                 ";
-        case OLEOBJ_E_INVALIDVERB             :
-            return "OLEOBJ_E_INVALIDVERB             ";
-        case INPLACE_E_NOTUNDOABLE            :
-            return "INPLACE_E_NOTUNDOABLE            ";
-        case INPLACE_E_NOTOOLSPACE            :
-            return "INPLACE_E_NOTOOLSPACE            ";
-        case CONVERT10_E_OLESTREAM_GET        :
-            return "CONVERT10_E_OLESTREAM_GET        ";
-        case CONVERT10_E_OLESTREAM_PUT        :
-            return "CONVERT10_E_OLESTREAM_PUT        ";
-        case CONVERT10_E_OLESTREAM_FMT        :
-            return "CONVERT10_E_OLESTREAM_FMT        ";
-        case CONVERT10_E_OLESTREAM_BITMAP_TO_DIB :
-            return "CONVERT10_E_OLESTREAM_BITMAP_TO_DIB ";
-        case CONVERT10_E_STG_FMT              :
-            return "CONVERT10_E_STG_FMT              ";
-        case CONVERT10_E_STG_NO_STD_STREAM    :
-            return "CONVERT10_E_STG_NO_STD_STREAM    ";
-        case CONVERT10_E_STG_DIB_TO_BITMAP    :
-            return "CONVERT10_E_STG_DIB_TO_BITMAP    ";
-        case CLIPBRD_E_CANT_OPEN              :
-            return "CLIPBRD_E_CANT_OPEN              ";
-        case CLIPBRD_E_CANT_EMPTY             :
-            return "CLIPBRD_E_CANT_EMPTY             ";
-        case CLIPBRD_E_CANT_SET               :
-            return "CLIPBRD_E_CANT_SET               ";
-        case CLIPBRD_E_BAD_DATA               :
-            return "CLIPBRD_E_BAD_DATA               ";
-        case CLIPBRD_E_CANT_CLOSE             :
-            return "CLIPBRD_E_CANT_CLOSE             ";
-        case MK_E_CONNECTMANUALLY             :
-            return "MK_E_CONNECTMANUALLY             ";
-        case MK_E_EXCEEDEDDEADLINE            :
-            return "MK_E_EXCEEDEDDEADLINE            ";
-        case MK_E_NEEDGENERIC                 :
-            return "MK_E_NEEDGENERIC                 ";
-        case MK_E_UNAVAILABLE                 :
-            return "MK_E_UNAVAILABLE                 ";
-        case MK_E_SYNTAX                      :
-            return "MK_E_SYNTAX                      ";
-        case MK_E_NOOBJECT                    :
-            return "MK_E_NOOBJECT                    ";
-        case MK_E_INVALIDEXTENSION            :
-            return "MK_E_INVALIDEXTENSION            ";
-        case MK_E_INTERMEDIATEINTERFACENOTSUPPORTED :
-            return "MK_E_INTERMEDIATEINTERFACENOTSUPPORTED ";
-        case MK_E_NOTBINDABLE                 :
-            return "MK_E_NOTBINDABLE                 ";
-        case MK_E_NOTBOUND                    :
-            return "MK_E_NOTBOUND                    ";
-        case MK_E_CANTOPENFILE                :
-            return "MK_E_CANTOPENFILE                ";
-        case MK_E_MUSTBOTHERUSER              :
-            return "MK_E_MUSTBOTHERUSER              ";
-        case MK_E_NOINVERSE                   :
-            return "MK_E_NOINVERSE                   ";
-        case MK_E_NOSTORAGE                   :
-            return "MK_E_NOSTORAGE                   ";
-        case MK_E_NOPREFIX                    :
-            return "MK_E_NOPREFIX                    ";
-        case MK_E_ENUMERATION_FAILED          :
-            return "MK_E_ENUMERATION_FAILED          ";
-        case CO_E_NOTINITIALIZED              :
-            return "CO_E_NOTINITIALIZED              ";
-        case CO_E_ALREADYINITIALIZED          :
-            return "CO_E_ALREADYINITIALIZED          ";
-        case CO_E_CANTDETERMINECLASS          :
-            return "CO_E_CANTDETERMINECLASS          ";
-        case CO_E_CLASSSTRING                 :
-            return "CO_E_CLASSSTRING                 ";
-        case CO_E_IIDSTRING                   :
-            return "CO_E_IIDSTRING                   ";
-        case CO_E_APPNOTFOUND                 :
-            return "CO_E_APPNOTFOUND                 ";
-        case CO_E_APPSINGLEUSE                :
-            return "CO_E_APPSINGLEUSE                ";
-        case CO_E_ERRORINAPP                  :
-            return "CO_E_ERRORINAPP                  ";
-        case CO_E_DLLNOTFOUND                 :
-            return "CO_E_DLLNOTFOUND                 ";
-        case CO_E_ERRORINDLL                  :
-            return "CO_E_ERRORINDLL                  ";
-        case CO_E_WRONGOSFORAPP               :
-            return "CO_E_WRONGOSFORAPP               ";
-        case CO_E_OBJNOTREG                   :
-            return "CO_E_OBJNOTREG                   ";
-        case CO_E_OBJISREG                    :
-            return "CO_E_OBJISREG                    ";
-        case CO_E_OBJNOTCONNECTED             :
-            return "CO_E_OBJNOTCONNECTED             ";
-        case CO_E_APPDIDNTREG                 :
-            return "CO_E_APPDIDNTREG                 ";
-        case CO_E_RELEASED                    :
-            return "CO_E_RELEASED                    ";
-        case CO_E_FAILEDTOIMPERSONATE         :
-            return "CO_E_FAILEDTOIMPERSONATE         ";
-        case CO_E_FAILEDTOGETSECCTX           :
-            return "CO_E_FAILEDTOGETSECCTX           ";
-        case CO_E_FAILEDTOOPENTHREADTOKEN     :
-            return "CO_E_FAILEDTOOPENTHREADTOKEN     ";
-        case CO_E_FAILEDTOGETTOKENINFO        :
-            return "CO_E_FAILEDTOGETTOKENINFO        ";
-        case CO_E_TRUSTEEDOESNTMATCHCLIENT    :
-            return "CO_E_TRUSTEEDOESNTMATCHCLIENT    ";
-        case CO_E_FAILEDTOQUERYCLIENTBLANKET  :
-            return "CO_E_FAILEDTOQUERYCLIENTBLANKET  ";
-        case CO_E_FAILEDTOSETDACL             :
-            return "CO_E_FAILEDTOSETDACL             ";
-        case CO_E_ACCESSCHECKFAILED           :
-            return "CO_E_ACCESSCHECKFAILED           ";
-        case CO_E_NETACCESSAPIFAILED          :
-            return "CO_E_NETACCESSAPIFAILED          ";
-        case CO_E_WRONGTRUSTEENAMESYNTAX      :
-            return "CO_E_WRONGTRUSTEENAMESYNTAX      ";
-        case CO_E_INVALIDSID                  :
-            return "CO_E_INVALIDSID                  ";
-        case CO_E_CONVERSIONFAILED            :
-            return "CO_E_CONVERSIONFAILED            ";
-        case CO_E_NOMATCHINGSIDFOUND          :
-            return "CO_E_NOMATCHINGSIDFOUND          ";
-        case CO_E_LOOKUPACCSIDFAILED          :
-            return "CO_E_LOOKUPACCSIDFAILED          ";
-        case CO_E_NOMATCHINGNAMEFOUND         :
-            return "CO_E_NOMATCHINGNAMEFOUND         ";
-        case CO_E_LOOKUPACCNAMEFAILED         :
-            return "CO_E_LOOKUPACCNAMEFAILED         ";
-        case CO_E_SETSERLHNDLFAILED           :
-            return "CO_E_SETSERLHNDLFAILED           ";
-        case CO_E_FAILEDTOGETWINDIR           :
-            return "CO_E_FAILEDTOGETWINDIR           ";
-        case CO_E_PATHTOOLONG                 :
-            return "CO_E_PATHTOOLONG                 ";
-        case CO_E_FAILEDTOGENUUID             :
-            return "CO_E_FAILEDTOGENUUID             ";
-        case CO_E_FAILEDTOCREATEFILE          :
-            return "CO_E_FAILEDTOCREATEFILE          ";
-        case CO_E_FAILEDTOCLOSEHANDLE         :
-            return "CO_E_FAILEDTOCLOSEHANDLE         ";
-        case CO_E_EXCEEDSYSACLLIMIT           :
-            return "CO_E_EXCEEDSYSACLLIMIT           ";
-        case CO_E_ACESINWRONGORDER            :
-            return "CO_E_ACESINWRONGORDER            ";
-        case CO_E_INCOMPATIBLESTREAMVERSION   :
-            return "CO_E_INCOMPATIBLESTREAMVERSION   ";
-        case CO_E_FAILEDTOOPENPROCESSTOKEN    :
-            return "CO_E_FAILEDTOOPENPROCESSTOKEN    ";
-        case CO_E_DECODEFAILED                :
-            return "CO_E_DECODEFAILED                ";
-        case CO_E_ACNOTINITIALIZED            :
-            return "CO_E_ACNOTINITIALIZED            ";
-        case OLE_S_USEREG                     :
-            return "OLE_S_USEREG                     ";
-        case OLE_S_STATIC                     :
-            return "OLE_S_STATIC                     ";
-        case OLE_S_MAC_CLIPFORMAT             :
-            return "OLE_S_MAC_CLIPFORMAT             ";
-        case DRAGDROP_S_DROP                  :
-            return "DRAGDROP_S_DROP                  ";
-        case DRAGDROP_S_CANCEL                :
-            return "DRAGDROP_S_CANCEL                ";
-        case DRAGDROP_S_USEDEFAULTCURSORS     :
-            return "DRAGDROP_S_USEDEFAULTCURSORS     ";
-        case DATA_S_SAMEFORMATETC             :
-            return "DATA_S_SAMEFORMATETC             ";
-        case VIEW_S_ALREADY_FROZEN            :
-            return "VIEW_S_ALREADY_FROZEN            ";
-        case CACHE_S_FORMATETC_NOTSUPPORTED   :
-            return "CACHE_S_FORMATETC_NOTSUPPORTED   ";
-        case CACHE_S_SAMECACHE                :
-            return "CACHE_S_SAMECACHE                ";
-        case CACHE_S_SOMECACHES_NOTUPDATED    :
-            return "CACHE_S_SOMECACHES_NOTUPDATED    ";
-        case OLEOBJ_S_INVALIDVERB             :
-            return "OLEOBJ_S_INVALIDVERB             ";
-        case OLEOBJ_S_CANNOT_DOVERB_NOW       :
-            return "OLEOBJ_S_CANNOT_DOVERB_NOW       ";
-        case OLEOBJ_S_INVALIDHWND             :
-            return "OLEOBJ_S_INVALIDHWND             ";
-        case INPLACE_S_TRUNCATED              :
-            return "INPLACE_S_TRUNCATED              ";
-        case CONVERT10_S_NO_PRESENTATION      :
-            return "CONVERT10_S_NO_PRESENTATION      ";
-        case MK_S_REDUCED_TO_SELF             :
-            return "MK_S_REDUCED_TO_SELF             ";
-        case MK_S_ME                          :
-            return "MK_S_ME                          ";
-        case MK_S_HIM                         :
-            return "MK_S_HIM                         ";
-        case MK_S_US                          :
-            return "MK_S_US                          ";
-        case MK_S_MONIKERALREADYREGISTERED    :
-            return "MK_S_MONIKERALREADYREGISTERED    ";
-        case CO_E_CLASS_CREATE_FAILED         :
-            return "CO_E_CLASS_CREATE_FAILED         ";
-        case CO_E_SCM_ERROR                   :
-            return "CO_E_SCM_ERROR                   ";
-        case CO_E_SCM_RPC_FAILURE             :
-            return "CO_E_SCM_RPC_FAILURE             ";
-        case CO_E_BAD_PATH                    :
-            return "CO_E_BAD_PATH                    ";
-        case CO_E_SERVER_EXEC_FAILURE         :
-            return "CO_E_SERVER_EXEC_FAILURE         ";
-        case CO_E_OBJSRV_RPC_FAILURE          :
-            return "CO_E_OBJSRV_RPC_FAILURE          ";
-        case MK_E_NO_NORMALIZED               :
-            return "MK_E_NO_NORMALIZED               ";
-        case CO_E_SERVER_STOPPING             :
-            return "CO_E_SERVER_STOPPING             ";
-        case MEM_E_INVALID_ROOT               :
-            return "MEM_E_INVALID_ROOT               ";
-        case MEM_E_INVALID_LINK               :
-            return "MEM_E_INVALID_LINK               ";
-        case MEM_E_INVALID_SIZE               :
-            return "MEM_E_INVALID_SIZE               ";
-        case CO_S_NOTALLINTERFACES            :
-            return "CO_S_NOTALLINTERFACES            ";
-        case DISP_E_UNKNOWNINTERFACE          :
-            return "DISP_E_UNKNOWNINTERFACE          ";
-        case DISP_E_MEMBERNOTFOUND            :
-            return "DISP_E_MEMBERNOTFOUND            ";
-        case DISP_E_PARAMNOTFOUND             :
-            return "DISP_E_PARAMNOTFOUND             ";
-        case DISP_E_TYPEMISMATCH              :
-            return "DISP_E_TYPEMISMATCH              ";
-        case DISP_E_UNKNOWNNAME               :
-            return "DISP_E_UNKNOWNNAME               ";
-        case DISP_E_NONAMEDARGS               :
-            return "DISP_E_NONAMEDARGS               ";
-        case DISP_E_BADVARTYPE                :
-            return "DISP_E_BADVARTYPE                ";
-        case DISP_E_EXCEPTION                 :
-            return "DISP_E_EXCEPTION                 ";
-        case DISP_E_OVERFLOW                  :
-            return "DISP_E_OVERFLOW                  ";
-        case DISP_E_BADINDEX                  :
-            return "DISP_E_BADINDEX                  ";
-        case DISP_E_UNKNOWNLCID               :
-            return "DISP_E_UNKNOWNLCID               ";
-        case DISP_E_ARRAYISLOCKED             :
-            return "DISP_E_ARRAYISLOCKED             ";
-        case DISP_E_BADPARAMCOUNT             :
-            return "DISP_E_BADPARAMCOUNT             ";
-        case DISP_E_PARAMNOTOPTIONAL          :
-            return "DISP_E_PARAMNOTOPTIONAL          ";
-        case DISP_E_BADCALLEE                 :
-            return "DISP_E_BADCALLEE                 ";
-        case DISP_E_NOTACOLLECTION            :
-            return "DISP_E_NOTACOLLECTION            ";
-        case DISP_E_DIVBYZERO                 :
-            return "DISP_E_DIVBYZERO                 ";
-        case TYPE_E_BUFFERTOOSMALL            :
-            return "TYPE_E_BUFFERTOOSMALL            ";
-        case TYPE_E_FIELDNOTFOUND             :
-            return "TYPE_E_FIELDNOTFOUND             ";
-        case TYPE_E_INVDATAREAD               :
-            return "TYPE_E_INVDATAREAD               ";
-        case TYPE_E_UNSUPFORMAT               :
-            return "TYPE_E_UNSUPFORMAT               ";
-        case TYPE_E_REGISTRYACCESS            :
-            return "TYPE_E_REGISTRYACCESS            ";
-        case TYPE_E_LIBNOTREGISTERED          :
-            return "TYPE_E_LIBNOTREGISTERED          ";
-        case TYPE_E_UNDEFINEDTYPE             :
-            return "TYPE_E_UNDEFINEDTYPE             ";
-        case TYPE_E_QUALIFIEDNAMEDISALLOWED   :
-            return "TYPE_E_QUALIFIEDNAMEDISALLOWED   ";
-        case TYPE_E_INVALIDSTATE              :
-            return "TYPE_E_INVALIDSTATE              ";
-        case TYPE_E_WRONGTYPEKIND             :
-            return "TYPE_E_WRONGTYPEKIND             ";
-        case TYPE_E_ELEMENTNOTFOUND           :
-            return "TYPE_E_ELEMENTNOTFOUND           ";
-        case TYPE_E_AMBIGUOUSNAME             :
-            return "TYPE_E_AMBIGUOUSNAME             ";
-        case TYPE_E_NAMECONFLICT              :
-            return "TYPE_E_NAMECONFLICT              ";
-        case TYPE_E_UNKNOWNLCID               :
-            return "TYPE_E_UNKNOWNLCID               ";
-        case TYPE_E_DLLFUNCTIONNOTFOUND       :
-            return "TYPE_E_DLLFUNCTIONNOTFOUND       ";
-        case TYPE_E_BADMODULEKIND             :
-            return "TYPE_E_BADMODULEKIND             ";
-        case TYPE_E_SIZETOOBIG                :
-            return "TYPE_E_SIZETOOBIG                ";
-        case TYPE_E_DUPLICATEID               :
-            return "TYPE_E_DUPLICATEID               ";
-        case TYPE_E_INVALIDID                 :
-            return "TYPE_E_INVALIDID                 ";
-        case TYPE_E_TYPEMISMATCH              :
-            return "TYPE_E_TYPEMISMATCH              ";
-        case TYPE_E_OUTOFBOUNDS               :
-            return "TYPE_E_OUTOFBOUNDS               ";
-        case TYPE_E_IOERROR                   :
-            return "TYPE_E_IOERROR                   ";
-        case TYPE_E_CANTCREATETMPFILE         :
-            return "TYPE_E_CANTCREATETMPFILE         ";
-        case TYPE_E_CANTLOADLIBRARY           :
-            return "TYPE_E_CANTLOADLIBRARY           ";
-        case TYPE_E_INCONSISTENTPROPFUNCS     :
-            return "TYPE_E_INCONSISTENTPROPFUNCS     ";
-        case TYPE_E_CIRCULARTYPE              :
-            return "TYPE_E_CIRCULARTYPE              ";
-        case STG_E_INVALIDFUNCTION            :
-            return "STG_E_INVALIDFUNCTION            ";
-        case STG_E_FILENOTFOUND               :
-            return "STG_E_FILENOTFOUND               ";
-        case STG_E_PATHNOTFOUND               :
-            return "STG_E_PATHNOTFOUND               ";
-        case STG_E_TOOMANYOPENFILES           :
-            return "STG_E_TOOMANYOPENFILES           ";
-        case STG_E_ACCESSDENIED               :
-            return "STG_E_ACCESSDENIED               ";
-        case STG_E_INVALIDHANDLE              :
-            return "STG_E_INVALIDHANDLE              ";
-        case STG_E_INSUFFICIENTMEMORY         :
-            return "STG_E_INSUFFICIENTMEMORY         ";
-        case STG_E_INVALIDPOINTER             :
-            return "STG_E_INVALIDPOINTER             ";
-        case STG_E_NOMOREFILES                :
-            return "STG_E_NOMOREFILES                ";
-        case STG_E_DISKISWRITEPROTECTED       :
-            return "STG_E_DISKISWRITEPROTECTED       ";
-        case STG_E_SEEKERROR                  :
-            return "STG_E_SEEKERROR                  ";
-        case STG_E_WRITEFAULT                 :
-            return "STG_E_WRITEFAULT                 ";
-        case STG_E_READFAULT                  :
-            return "STG_E_READFAULT                  ";
-        case STG_E_SHAREVIOLATION             :
-            return "STG_E_SHAREVIOLATION             ";
-        case STG_E_LOCKVIOLATION              :
-            return "STG_E_LOCKVIOLATION              ";
-        case STG_E_FILEALREADYEXISTS          :
-            return "STG_E_FILEALREADYEXISTS          ";
-        case STG_E_INVALIDPARAMETER           :
-            return "STG_E_INVALIDPARAMETER           ";
-        case STG_E_MEDIUMFULL                 :
-            return "STG_E_MEDIUMFULL                 ";
-        case STG_E_PROPSETMISMATCHED          :
-            return "STG_E_PROPSETMISMATCHED          ";
-        case STG_E_ABNORMALAPIEXIT            :
-            return "STG_E_ABNORMALAPIEXIT            ";
-        case STG_E_INVALIDHEADER              :
-            return "STG_E_INVALIDHEADER              ";
-        case STG_E_INVALIDNAME                :
-            return "STG_E_INVALIDNAME                ";
-        case STG_E_UNKNOWN                    :
-            return "STG_E_UNKNOWN                    ";
-        case STG_E_UNIMPLEMENTEDFUNCTION      :
-            return "STG_E_UNIMPLEMENTEDFUNCTION      ";
-        case STG_E_INVALIDFLAG                :
-            return "STG_E_INVALIDFLAG                ";
-        case STG_E_INUSE                      :
-            return "STG_E_INUSE                      ";
-        case STG_E_NOTCURRENT                 :
-            return "STG_E_NOTCURRENT                 ";
-        case STG_E_REVERTED                   :
-            return "STG_E_REVERTED                   ";
-        case STG_E_CANTSAVE                   :
-            return "STG_E_CANTSAVE                   ";
-        case STG_E_OLDFORMAT                  :
-            return "STG_E_OLDFORMAT                  ";
-        case STG_E_OLDDLL                     :
-            return "STG_E_OLDDLL                     ";
-        case STG_E_SHAREREQUIRED              :
-            return "STG_E_SHAREREQUIRED              ";
-        case STG_E_NOTFILEBASEDSTORAGE        :
-            return "STG_E_NOTFILEBASEDSTORAGE        ";
-        case STG_E_EXTANTMARSHALLINGS         :
-            return "STG_E_EXTANTMARSHALLINGS         ";
-        case STG_E_DOCFILECORRUPT             :
-            return "STG_E_DOCFILECORRUPT             ";
-        case STG_E_BADBASEADDRESS             :
-            return "STG_E_BADBASEADDRESS             ";
-        case STG_E_INCOMPLETE                 :
-            return "STG_E_INCOMPLETE                 ";
-        case STG_E_TERMINATED                 :
-            return "STG_E_TERMINATED                 ";
-        case STG_S_CONVERTED                  :
-            return "STG_S_CONVERTED                  ";
-        case STG_S_BLOCK                      :
-            return "STG_S_BLOCK                      ";
-        case STG_S_RETRYNOW                   :
-            return "STG_S_RETRYNOW                   ";
-        case STG_S_MONITORING                 :
-            return "STG_S_MONITORING                 ";
-        case STG_S_MULTIPLEOPENS              :
-            return "STG_S_MULTIPLEOPENS              ";
-        case STG_S_CONSOLIDATIONFAILED        :
-            return "STG_S_CONSOLIDATIONFAILED        ";
-        case STG_S_CANNOTCONSOLIDATE          :
-            return "STG_S_CANNOTCONSOLIDATE          ";
-        case RPC_E_CALL_REJECTED              :
-            return "RPC_E_CALL_REJECTED              ";
-        case RPC_E_CALL_CANCELED              :
-            return "RPC_E_CALL_CANCELED              ";
-        case RPC_E_CANTPOST_INSENDCALL        :
-            return "RPC_E_CANTPOST_INSENDCALL        ";
-        case RPC_E_CANTCALLOUT_INASYNCCALL    :
-            return "RPC_E_CANTCALLOUT_INASYNCCALL    ";
-        case RPC_E_CANTCALLOUT_INEXTERNALCALL :
-            return "RPC_E_CANTCALLOUT_INEXTERNALCALL ";
-        case RPC_E_CONNECTION_TERMINATED      :
-            return "RPC_E_CONNECTION_TERMINATED      ";
-        case RPC_E_SERVER_DIED                :
-            return "RPC_E_SERVER_DIED                ";
-        case RPC_E_CLIENT_DIED                :
-            return "RPC_E_CLIENT_DIED                ";
-        case RPC_E_INVALID_DATAPACKET         :
-            return "RPC_E_INVALID_DATAPACKET         ";
-        case RPC_E_CANTTRANSMIT_CALL          :
-            return "RPC_E_CANTTRANSMIT_CALL          ";
-        case RPC_E_CLIENT_CANTMARSHAL_DATA    :
-            return "RPC_E_CLIENT_CANTMARSHAL_DATA    ";
-        case RPC_E_CLIENT_CANTUNMARSHAL_DATA  :
-            return "RPC_E_CLIENT_CANTUNMARSHAL_DATA  ";
-        case RPC_E_SERVER_CANTMARSHAL_DATA    :
-            return "RPC_E_SERVER_CANTMARSHAL_DATA    ";
-        case RPC_E_SERVER_CANTUNMARSHAL_DATA  :
-            return "RPC_E_SERVER_CANTUNMARSHAL_DATA  ";
-        case RPC_E_INVALID_DATA               :
-            return "RPC_E_INVALID_DATA               ";
-        case RPC_E_INVALID_PARAMETER          :
-            return "RPC_E_INVALID_PARAMETER          ";
-        case RPC_E_CANTCALLOUT_AGAIN          :
-            return "RPC_E_CANTCALLOUT_AGAIN          ";
-        case RPC_E_SERVER_DIED_DNE            :
-            return "RPC_E_SERVER_DIED_DNE            ";
-        case RPC_E_SYS_CALL_FAILED            :
-            return "RPC_E_SYS_CALL_FAILED            ";
-        case RPC_E_OUT_OF_RESOURCES           :
-            return "RPC_E_OUT_OF_RESOURCES           ";
-        case RPC_E_ATTEMPTED_MULTITHREAD      :
-            return "RPC_E_ATTEMPTED_MULTITHREAD      ";
-        case RPC_E_NOT_REGISTERED             :
-            return "RPC_E_NOT_REGISTERED             ";
-        case RPC_E_FAULT                      :
-            return "RPC_E_FAULT                      ";
-        case RPC_E_SERVERFAULT                :
-            return "RPC_E_SERVERFAULT                ";
-        case RPC_E_CHANGED_MODE               :
-            return "RPC_E_CHANGED_MODE               ";
-        case RPC_E_INVALIDMETHOD              :
-            return "RPC_E_INVALIDMETHOD              ";
-        case RPC_E_DISCONNECTED               :
-            return "RPC_E_DISCONNECTED               ";
-        case RPC_E_RETRY                      :
-            return "RPC_E_RETRY                      ";
-        case RPC_E_SERVERCALL_RETRYLATER      :
-            return "RPC_E_SERVERCALL_RETRYLATER      ";
-        case RPC_E_SERVERCALL_REJECTED        :
-            return "RPC_E_SERVERCALL_REJECTED        ";
-        case RPC_E_INVALID_CALLDATA           :
-            return "RPC_E_INVALID_CALLDATA           ";
-        case RPC_E_CANTCALLOUT_ININPUTSYNCCALL :
-            return "RPC_E_CANTCALLOUT_ININPUTSYNCCALL ";
-        case RPC_E_WRONG_THREAD               :
-            return "RPC_E_WRONG_THREAD               ";
-        case RPC_E_THREAD_NOT_INIT            :
-            return "RPC_E_THREAD_NOT_INIT            ";
-        case RPC_E_VERSION_MISMATCH           :
-            return "RPC_E_VERSION_MISMATCH           ";
-        case RPC_E_INVALID_HEADER             :
-            return "RPC_E_INVALID_HEADER             ";
-        case RPC_E_INVALID_EXTENSION          :
-            return "RPC_E_INVALID_EXTENSION          ";
-        case RPC_E_INVALID_IPID               :
-            return "RPC_E_INVALID_IPID               ";
-        case RPC_E_INVALID_OBJECT             :
-            return "RPC_E_INVALID_OBJECT             ";
-        case RPC_S_CALLPENDING                :
-            return "RPC_S_CALLPENDING                ";
-        case RPC_S_WAITONTIMER                :
-            return "RPC_S_WAITONTIMER                ";
-        case RPC_E_CALL_COMPLETE              :
-            return "RPC_E_CALL_COMPLETE              ";
-        case RPC_E_UNSECURE_CALL              :
-            return "RPC_E_UNSECURE_CALL              ";
-        case RPC_E_TOO_LATE                   :
-            return "RPC_E_TOO_LATE                   ";
-        case RPC_E_NO_GOOD_SECURITY_PACKAGES  :
-            return "RPC_E_NO_GOOD_SECURITY_PACKAGES  ";
-        case RPC_E_ACCESS_DENIED              :
-            return "RPC_E_ACCESS_DENIED              ";
-        case RPC_E_REMOTE_DISABLED            :
-            return "RPC_E_REMOTE_DISABLED            ";
-        case RPC_E_INVALID_OBJREF             :
-            return "RPC_E_INVALID_OBJREF             ";
-        case RPC_E_NO_CONTEXT                 :
-            return "RPC_E_NO_CONTEXT                 ";
-        case RPC_E_TIMEOUT                    :
-            return "RPC_E_TIMEOUT                    ";
-        case RPC_E_NO_SYNC                    :
-            return "RPC_E_NO_SYNC                    ";
-        case RPC_E_UNEXPECTED                 :
-            return "RPC_E_UNEXPECTED                 ";
-        case NTE_BAD_UID                      :
-            return "NTE_BAD_UID                      ";
-        case NTE_BAD_HASH                     :
-            return "NTE_BAD_HASH                     ";
-    //case NTE_BAD_HASH                     :
-    //return "NTE_BAD_HASH                     ";
-        case NTE_BAD_KEY                      :
-            return "NTE_BAD_KEY                      ";
-        case NTE_BAD_LEN                      :
-            return "NTE_BAD_LEN                      ";
-        case NTE_BAD_DATA                     :
-            return "NTE_BAD_DATA                     ";
-        case NTE_BAD_SIGNATURE                :
-            return "NTE_BAD_SIGNATURE                ";
-        case NTE_BAD_VER                      :
-            return "NTE_BAD_VER                      ";
-        case NTE_BAD_ALGID                    :
-            return "NTE_BAD_ALGID                    ";
-        case NTE_BAD_FLAGS                    :
-            return "NTE_BAD_FLAGS                    ";
-        case NTE_BAD_TYPE                     :
-            return "NTE_BAD_TYPE                     ";
-        case NTE_BAD_KEY_STATE                :
-            return "NTE_BAD_KEY_STATE                ";
-        case NTE_BAD_HASH_STATE               :
-            return "NTE_BAD_HASH_STATE               ";
-        case NTE_NO_KEY                       :
-            return "NTE_NO_KEY                       ";
-        case NTE_NO_MEMORY                    :
-            return "NTE_NO_MEMORY                    ";
-        case NTE_EXISTS                       :
-            return "NTE_EXISTS                       ";
-        case NTE_PERM                         :
-            return "NTE_PERM                         ";
-        case NTE_NOT_FOUND                    :
-            return "NTE_NOT_FOUND                    ";
-        case NTE_DOUBLE_ENCRYPT               :
-            return "NTE_DOUBLE_ENCRYPT               ";
-        case NTE_BAD_PROVIDER                 :
-            return "NTE_BAD_PROVIDER                 ";
-        case NTE_BAD_PROV_TYPE                :
-            return "NTE_BAD_PROV_TYPE                ";
-        case NTE_BAD_PUBLIC_KEY               :
-            return "NTE_BAD_PUBLIC_KEY               ";
-        case NTE_BAD_KEYSET                   :
-            return "NTE_BAD_KEYSET                   ";
-        case NTE_PROV_TYPE_NOT_DEF            :
-            return "NTE_PROV_TYPE_NOT_DEF            ";
-        case NTE_PROV_TYPE_ENTRY_BAD          :
-            return "NTE_PROV_TYPE_ENTRY_BAD          ";
-        case NTE_KEYSET_NOT_DEF               :
-            return "NTE_KEYSET_NOT_DEF               ";
-        case NTE_KEYSET_ENTRY_BAD             :
-            return "NTE_KEYSET_ENTRY_BAD             ";
-        case NTE_PROV_TYPE_NO_MATCH           :
-            return "NTE_PROV_TYPE_NO_MATCH           ";
-        case NTE_SIGNATURE_FILE_BAD           :
-            return "NTE_SIGNATURE_FILE_BAD           ";
-        case NTE_PROVIDER_DLL_FAIL            :
-            return "NTE_PROVIDER_DLL_FAIL            ";
-        case NTE_PROV_DLL_NOT_FOUND           :
-            return "NTE_PROV_DLL_NOT_FOUND           ";
-        case NTE_BAD_KEYSET_PARAM             :
-            return "NTE_BAD_KEYSET_PARAM             ";
-        case NTE_FAIL                         :
-            return "NTE_FAIL                         ";
-        case NTE_SYS_ERR                      :
-            return "NTE_SYS_ERR                      ";
-        case CRYPT_E_MSG_ERROR                :
-            return "CRYPT_E_MSG_ERROR                ";
-        case CRYPT_E_UNKNOWN_ALGO             :
-            return "CRYPT_E_UNKNOWN_ALGO             ";
-        case CRYPT_E_OID_FORMAT               :
-            return "CRYPT_E_OID_FORMAT               ";
-        case CRYPT_E_INVALID_MSG_TYPE         :
-            return "CRYPT_E_INVALID_MSG_TYPE         ";
-        case CRYPT_E_UNEXPECTED_ENCODING      :
-            return "CRYPT_E_UNEXPECTED_ENCODING      ";
-        case CRYPT_E_AUTH_ATTR_MISSING        :
-            return "CRYPT_E_AUTH_ATTR_MISSING        ";
-        case CRYPT_E_HASH_VALUE               :
-            return "CRYPT_E_HASH_VALUE               ";
-        case CRYPT_E_INVALID_INDEX            :
-            return "CRYPT_E_INVALID_INDEX            ";
-        case CRYPT_E_ALREADY_DECRYPTED        :
-            return "CRYPT_E_ALREADY_DECRYPTED        ";
-        case CRYPT_E_NOT_DECRYPTED            :
-            return "CRYPT_E_NOT_DECRYPTED            ";
-        case CRYPT_E_RECIPIENT_NOT_FOUND      :
-            return "CRYPT_E_RECIPIENT_NOT_FOUND      ";
-        case CRYPT_E_CONTROL_TYPE             :
-            return "CRYPT_E_CONTROL_TYPE             ";
-        case CRYPT_E_ISSUER_SERIALNUMBER      :
-            return "CRYPT_E_ISSUER_SERIALNUMBER      ";
-        case CRYPT_E_SIGNER_NOT_FOUND         :
-            return "CRYPT_E_SIGNER_NOT_FOUND         ";
-        case CRYPT_E_ATTRIBUTES_MISSING       :
-            return "CRYPT_E_ATTRIBUTES_MISSING       ";
-        case CRYPT_E_STREAM_MSG_NOT_READY     :
-            return "CRYPT_E_STREAM_MSG_NOT_READY     ";
-        case CRYPT_E_STREAM_INSUFFICIENT_DATA :
-            return "CRYPT_E_STREAM_INSUFFICIENT_DATA ";
-        case CRYPT_E_BAD_LEN                  :
-            return "CRYPT_E_BAD_LEN                  ";
-        case CRYPT_E_BAD_ENCODE               :
-            return "CRYPT_E_BAD_ENCODE               ";
-        case CRYPT_E_FILE_ERROR               :
-            return "CRYPT_E_FILE_ERROR               ";
-        case CRYPT_E_NOT_FOUND                :
-            return "CRYPT_E_NOT_FOUND                ";
-        case CRYPT_E_EXISTS                   :
-            return "CRYPT_E_EXISTS                   ";
-        case CRYPT_E_NO_PROVIDER              :
-            return "CRYPT_E_NO_PROVIDER              ";
-        case CRYPT_E_SELF_SIGNED              :
-            return "CRYPT_E_SELF_SIGNED              ";
-        case CRYPT_E_DELETED_PREV             :
-            return "CRYPT_E_DELETED_PREV             ";
-        case CRYPT_E_NO_MATCH                 :
-            return "CRYPT_E_NO_MATCH                 ";
-        case CRYPT_E_UNEXPECTED_MSG_TYPE      :
-            return "CRYPT_E_UNEXPECTED_MSG_TYPE      ";
-        case CRYPT_E_NO_KEY_PROPERTY          :
-            return "CRYPT_E_NO_KEY_PROPERTY          ";
-        case CRYPT_E_NO_DECRYPT_CERT          :
-            return "CRYPT_E_NO_DECRYPT_CERT          ";
-        case CRYPT_E_BAD_MSG                  :
-            return "CRYPT_E_BAD_MSG                  ";
-        case CRYPT_E_NO_SIGNER                :
-            return "CRYPT_E_NO_SIGNER                ";
-        case CRYPT_E_PENDING_CLOSE            :
-            return "CRYPT_E_PENDING_CLOSE            ";
-        case CRYPT_E_REVOKED                  :
-            return "CRYPT_E_REVOKED                  ";
-        case CRYPT_E_NO_REVOCATION_DLL        :
-            return "CRYPT_E_NO_REVOCATION_DLL        ";
-        case CRYPT_E_NO_REVOCATION_CHECK      :
-            return "CRYPT_E_NO_REVOCATION_CHECK      ";
-        case CRYPT_E_REVOCATION_OFFLINE       :
-            return "CRYPT_E_REVOCATION_OFFLINE       ";
-        case CRYPT_E_NOT_IN_REVOCATION_DATABASE :
-            return "CRYPT_E_NOT_IN_REVOCATION_DATABASE ";
-        case CRYPT_E_INVALID_NUMERIC_STRING   :
-            return "CRYPT_E_INVALID_NUMERIC_STRING   ";
-        case CRYPT_E_INVALID_PRINTABLE_STRING :
-            return "CRYPT_E_INVALID_PRINTABLE_STRING ";
-        case CRYPT_E_INVALID_IA5_STRING       :
-            return "CRYPT_E_INVALID_IA5_STRING       ";
-        case CRYPT_E_INVALID_X500_STRING      :
-            return "CRYPT_E_INVALID_X500_STRING      ";
-        case CRYPT_E_NOT_CHAR_STRING          :
-            return "CRYPT_E_NOT_CHAR_STRING          ";
-        case CRYPT_E_FILERESIZED              :
-            return "CRYPT_E_FILERESIZED              ";
-        case CRYPT_E_SECURITY_SETTINGS        :
-            return "CRYPT_E_SECURITY_SETTINGS        ";
-        case CRYPT_E_NO_VERIFY_USAGE_DLL      :
-            return "CRYPT_E_NO_VERIFY_USAGE_DLL      ";
-        case CRYPT_E_NO_VERIFY_USAGE_CHECK    :
-            return "CRYPT_E_NO_VERIFY_USAGE_CHECK    ";
-        case CRYPT_E_VERIFY_USAGE_OFFLINE     :
-            return "CRYPT_E_VERIFY_USAGE_OFFLINE     ";
-        case CRYPT_E_NOT_IN_CTL               :
-            return "CRYPT_E_NOT_IN_CTL               ";
-        case CRYPT_E_NO_TRUSTED_SIGNER        :
-            return "CRYPT_E_NO_TRUSTED_SIGNER        ";
-        case CRYPT_E_OSS_ERROR                :
-            return "CRYPT_E_OSS_ERROR                ";
-        case CERTSRV_E_BAD_REQUESTSUBJECT     :
-            return "CERTSRV_E_BAD_REQUESTSUBJECT     ";
-        case CERTSRV_E_NO_REQUEST             :
-            return "CERTSRV_E_NO_REQUEST             ";
-        case CERTSRV_E_BAD_REQUESTSTATUS      :
-            return "CERTSRV_E_BAD_REQUESTSTATUS      ";
-        case CERTSRV_E_PROPERTY_EMPTY         :
-            return "CERTSRV_E_PROPERTY_EMPTY         ";
-    //case CERTDB_E_JET_ERROR               :
-    //return "CERTDB_E_JET_ERROR               ";
-        case TRUST_E_SYSTEM_ERROR             :
-            return "TRUST_E_SYSTEM_ERROR             ";
-        case TRUST_E_NO_SIGNER_CERT           :
-            return "TRUST_E_NO_SIGNER_CERT           ";
-        case TRUST_E_COUNTER_SIGNER           :
-            return "TRUST_E_COUNTER_SIGNER           ";
-        case TRUST_E_CERT_SIGNATURE           :
-            return "TRUST_E_CERT_SIGNATURE           ";
-        case TRUST_E_TIME_STAMP               :
-            return "TRUST_E_TIME_STAMP               ";
-        case TRUST_E_BAD_DIGEST               :
-            return "TRUST_E_BAD_DIGEST               ";
-        case TRUST_E_BASIC_CONSTRAINTS        :
-            return "TRUST_E_BASIC_CONSTRAINTS        ";
-        case TRUST_E_FINANCIAL_CRITERIA       :
-            return "TRUST_E_FINANCIAL_CRITERIA       ";
-        case TRUST_E_PROVIDER_UNKNOWN         :
-            return "TRUST_E_PROVIDER_UNKNOWN         ";
-        case TRUST_E_ACTION_UNKNOWN           :
-            return "TRUST_E_ACTION_UNKNOWN           ";
-        case TRUST_E_SUBJECT_FORM_UNKNOWN     :
-            return "TRUST_E_SUBJECT_FORM_UNKNOWN     ";
-        case TRUST_E_SUBJECT_NOT_TRUSTED      :
-            return "TRUST_E_SUBJECT_NOT_TRUSTED      ";
-        case DIGSIG_E_ENCODE                  :
-            return "DIGSIG_E_ENCODE                  ";
-        case DIGSIG_E_DECODE                  :
-            return "DIGSIG_E_DECODE                  ";
-        case DIGSIG_E_EXTENSIBILITY           :
-            return "DIGSIG_E_EXTENSIBILITY           ";
-        case DIGSIG_E_CRYPTO                  :
-            return "DIGSIG_E_CRYPTO                  ";
-        case PERSIST_E_SIZEDEFINITE           :
-            return "PERSIST_E_SIZEDEFINITE           ";
-        case PERSIST_E_SIZEINDEFINITE         :
-            return "PERSIST_E_SIZEINDEFINITE         ";
-        case PERSIST_E_NOTSELFSIZING          :
-            return "PERSIST_E_NOTSELFSIZING          ";
-        case TRUST_E_NOSIGNATURE              :
-            return "TRUST_E_NOSIGNATURE              ";
-        case CERT_E_EXPIRED                   :
-            return "CERT_E_EXPIRED                   ";
-        case CERT_E_VALIDITYPERIODNESTING     :
-            return "CERT_E_VALIDITYPERIODNESTING     ";
-        case CERT_E_ROLE                      :
-            return "CERT_E_ROLE                      ";
-        case CERT_E_PATHLENCONST              :
-            return "CERT_E_PATHLENCONST              ";
-        case CERT_E_CRITICAL                  :
-            return "CERT_E_CRITICAL                  ";
-        case CERT_E_PURPOSE                   :
-            return "CERT_E_PURPOSE                   ";
-        case CERT_E_ISSUERCHAINING            :
-            return "CERT_E_ISSUERCHAINING            ";
-        case CERT_E_MALFORMED                 :
-            return "CERT_E_MALFORMED                 ";
-        case CERT_E_UNTRUSTEDROOT             :
-            return "CERT_E_UNTRUSTEDROOT             ";
-        case CERT_E_CHAINING                  :
-            return "CERT_E_CHAINING                  ";
-        case TRUST_E_FAIL                     :
-            return "TRUST_E_FAIL                     ";
-        case CERT_E_REVOKED                   :
-            return "CERT_E_REVOKED                   ";
-        case CERT_E_UNTRUSTEDTESTROOT         :
-            return "CERT_E_UNTRUSTEDTESTROOT         ";
-        case CERT_E_REVOCATION_FAILURE        :
-            return "CERT_E_REVOCATION_FAILURE        ";
-        case CERT_E_CN_NO_MATCH               :
-            return "CERT_E_CN_NO_MATCH               ";
-        case CERT_E_WRONG_USAGE               :
-            return "CERT_E_WRONG_USAGE               ";
-        case SPAPI_E_EXPECTED_SECTION_NAME    :
-            return "SPAPI_E_EXPECTED_SECTION_NAME    ";
-        case SPAPI_E_BAD_SECTION_NAME_LINE    :
-            return "SPAPI_E_BAD_SECTION_NAME_LINE    ";
-        case SPAPI_E_SECTION_NAME_TOO_LONG    :
-            return "SPAPI_E_SECTION_NAME_TOO_LONG    ";
-        case SPAPI_E_GENERAL_SYNTAX           :
-            return "SPAPI_E_GENERAL_SYNTAX           ";
-        case SPAPI_E_WRONG_INF_STYLE          :
-            return "SPAPI_E_WRONG_INF_STYLE          ";
-        case SPAPI_E_SECTION_NOT_FOUND        :
-            return "SPAPI_E_SECTION_NOT_FOUND        ";
-        case SPAPI_E_LINE_NOT_FOUND           :
-            return "SPAPI_E_LINE_NOT_FOUND           ";
-        case SPAPI_E_NO_ASSOCIATED_CLASS      :
-            return "SPAPI_E_NO_ASSOCIATED_CLASS      ";
-        case SPAPI_E_CLASS_MISMATCH           :
-            return "SPAPI_E_CLASS_MISMATCH           ";
-        case SPAPI_E_DUPLICATE_FOUND          :
-            return "SPAPI_E_DUPLICATE_FOUND          ";
-        case SPAPI_E_NO_DRIVER_SELECTED       :
-            return "SPAPI_E_NO_DRIVER_SELECTED       ";
-        case SPAPI_E_KEY_DOES_NOT_EXIST       :
-            return "SPAPI_E_KEY_DOES_NOT_EXIST       ";
-        case SPAPI_E_INVALID_DEVINST_NAME     :
-            return "SPAPI_E_INVALID_DEVINST_NAME     ";
-        case SPAPI_E_INVALID_CLASS            :
-            return "SPAPI_E_INVALID_CLASS            ";
-        case SPAPI_E_DEVINST_ALREADY_EXISTS   :
-            return "SPAPI_E_DEVINST_ALREADY_EXISTS   ";
-        case SPAPI_E_DEVINFO_NOT_REGISTERED   :
-            return "SPAPI_E_DEVINFO_NOT_REGISTERED   ";
-        case SPAPI_E_INVALID_REG_PROPERTY     :
-            return "SPAPI_E_INVALID_REG_PROPERTY     ";
-        case SPAPI_E_NO_INF                   :
-            return "SPAPI_E_NO_INF                   ";
-        case SPAPI_E_NO_SUCH_DEVINST          :
-            return "SPAPI_E_NO_SUCH_DEVINST          ";
-        case SPAPI_E_CANT_LOAD_CLASS_ICON     :
-            return "SPAPI_E_CANT_LOAD_CLASS_ICON     ";
-        case SPAPI_E_INVALID_CLASS_INSTALLER  :
-            return "SPAPI_E_INVALID_CLASS_INSTALLER  ";
-        case SPAPI_E_DI_DO_DEFAULT            :
-            return "SPAPI_E_DI_DO_DEFAULT            ";
-        case SPAPI_E_DI_NOFILECOPY            :
-            return "SPAPI_E_DI_NOFILECOPY            ";
-        case SPAPI_E_INVALID_HWPROFILE        :
-            return "SPAPI_E_INVALID_HWPROFILE        ";
-        case SPAPI_E_NO_DEVICE_SELECTED       :
-            return "SPAPI_E_NO_DEVICE_SELECTED       ";
-        case SPAPI_E_DEVINFO_LIST_LOCKED      :
-            return "SPAPI_E_DEVINFO_LIST_LOCKED      ";
-        case SPAPI_E_DEVINFO_DATA_LOCKED      :
-            return "SPAPI_E_DEVINFO_DATA_LOCKED      ";
-        case SPAPI_E_DI_BAD_PATH              :
-            return "SPAPI_E_DI_BAD_PATH              ";
-        case SPAPI_E_NO_CLASSINSTALL_PARAMS   :
-            return "SPAPI_E_NO_CLASSINSTALL_PARAMS   ";
-        case SPAPI_E_FILEQUEUE_LOCKED         :
-            return "SPAPI_E_FILEQUEUE_LOCKED         ";
-        case SPAPI_E_BAD_SERVICE_INSTALLSECT  :
-            return "SPAPI_E_BAD_SERVICE_INSTALLSECT  ";
-        case SPAPI_E_NO_CLASS_DRIVER_LIST     :
-            return "SPAPI_E_NO_CLASS_DRIVER_LIST     ";
-        case SPAPI_E_NO_ASSOCIATED_SERVICE    :
-            return "SPAPI_E_NO_ASSOCIATED_SERVICE    ";
-        case SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE :
-            return "SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE ";
-        case SPAPI_E_DEVICE_INTERFACE_ACTIVE  :
-            return "SPAPI_E_DEVICE_INTERFACE_ACTIVE  ";
-        case SPAPI_E_DEVICE_INTERFACE_REMOVED :
-            return "SPAPI_E_DEVICE_INTERFACE_REMOVED ";
-        case SPAPI_E_BAD_INTERFACE_INSTALLSECT :
-            return "SPAPI_E_BAD_INTERFACE_INSTALLSECT ";
-        case SPAPI_E_NO_SUCH_INTERFACE_CLASS  :
-            return "SPAPI_E_NO_SUCH_INTERFACE_CLASS  ";
-        case SPAPI_E_INVALID_REFERENCE_STRING :
-            return "SPAPI_E_INVALID_REFERENCE_STRING ";
-        case SPAPI_E_INVALID_MACHINENAME      :
-            return "SPAPI_E_INVALID_MACHINENAME      ";
-        case SPAPI_E_REMOTE_COMM_FAILURE      :
-            return "SPAPI_E_REMOTE_COMM_FAILURE      ";
-        case SPAPI_E_MACHINE_UNAVAILABLE      :
-            return "SPAPI_E_MACHINE_UNAVAILABLE      ";
-        case SPAPI_E_NO_CONFIGMGR_SERVICES    :
-            return "SPAPI_E_NO_CONFIGMGR_SERVICES    ";
-        case SPAPI_E_INVALID_PROPPAGE_PROVIDER :
-            return "SPAPI_E_INVALID_PROPPAGE_PROVIDER ";
-        case SPAPI_E_NO_SUCH_DEVICE_INTERFACE :
-            return "SPAPI_E_NO_SUCH_DEVICE_INTERFACE ";
-        case SPAPI_E_DI_POSTPROCESSING_REQUIRED :
-            return "SPAPI_E_DI_POSTPROCESSING_REQUIRED ";
-        case SPAPI_E_INVALID_COINSTALLER      :
-            return "SPAPI_E_INVALID_COINSTALLER      ";
-        case SPAPI_E_NO_COMPAT_DRIVERS        :
-            return "SPAPI_E_NO_COMPAT_DRIVERS        ";
-        case SPAPI_E_NO_DEVICE_ICON           :
-            return "SPAPI_E_NO_DEVICE_ICON           ";
-        case SPAPI_E_INVALID_INF_LOGCONFIG    :
-            return "SPAPI_E_INVALID_INF_LOGCONFIG    ";
-        case SPAPI_E_DI_DONT_INSTALL          :
-            return "SPAPI_E_DI_DONT_INSTALL          ";
-        case SPAPI_E_INVALID_FILTER_DRIVER    :
-            return "SPAPI_E_INVALID_FILTER_DRIVER    ";
-        case SPAPI_E_ERROR_NOT_INSTALLED      :
-            return "SPAPI_E_ERROR_NOT_INSTALLED      ";
-
-        default:
-            static char buff[1000];
-            sprintf(buff, "Unrecognized error value: %08X\0", error);
-
-            return buff;
-    }
-}
 
 

+ 0 - 1
panda/src/wdxdisplay8/wdxGraphicsPipe8.h

@@ -37,7 +37,6 @@
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 // Defines
 // Defines
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
-class Xclass;
 
 
 extern char * ConvD3DErrorToString(const HRESULT &error);
 extern char * ConvD3DErrorToString(const HRESULT &error);
 
 

File diff suppressed because it is too large
+ 631 - 383
panda/src/wdxdisplay8/wdxGraphicsWindow8.cxx


+ 76 - 29
panda/src/wdxdisplay8/wdxGraphicsWindow8.h

@@ -15,9 +15,9 @@
 // [email protected] .
 // [email protected] .
 //
 //
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
-#ifndef WDXGRAPHICSWINDOW8_H
-#define WDXGRAPHICSWINDOW8_H
-//#define WBD_GL_MODE 1    // if setting this, do it in dxGraphicsStateGuardian.h too
+#ifndef WDXGRAPHICSWINDOW_H
+#define WDXGRAPHICSWINDOW_H
+//#define WBD_GL_MODE 1    // if setting this, do it in wdxGraphicsStateGuardian.h too
 //
 //
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 // Includes
 // Includes
@@ -28,15 +28,30 @@
 #define WINDOWS_LEAN_AND_MEAN
 #define WINDOWS_LEAN_AND_MEAN
 #include <windows.h>
 #include <windows.h>
 #undef WINDOWS_LEAN_AND_MEAN
 #undef WINDOWS_LEAN_AND_MEAN
-#include <d3d.h>
+#include <d3d8.h>
+#include <dxerr8.h>
+
+#include "dxGraphicsStateGuardian8.h"
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 // Defines
 // Defines
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 class wdxGraphicsPipe;
 class wdxGraphicsPipe;
+class wdxGraphicsWindowGroup;
+
+const int WDXWIN_CONFIGURE = 4;
+const int WDXWIN_EVENT = 8;
 
 
-const int WDXWIN_CONFIGURE =    4;
-const int WDXWIN_EVENT =    8;
+typedef HRESULT (WINAPI * LPDIRECTDRAWCREATEEX)(GUID FAR * lpGuid, LPVOID  *lplpDD, REFIID  iid,IUnknown FAR *pUnkOuter);
+
+typedef struct {
+   UINT    cardID;
+   char    szDriver[MAX_DDDEVICEID_STRING];
+   char    szDescription[MAX_DDDEVICEID_STRING];
+   GUID    guidDeviceIdentifier;
+   HMONITOR hMon;
+} DXDeviceInfo;
+typedef vector<DXDeviceInfo> DXDeviceInfoVec;
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //       Class : wdxGraphicsWindow
 //       Class : wdxGraphicsWindow
@@ -45,31 +60,29 @@ const int WDXWIN_EVENT =    8;
 class EXPCL_PANDADX wdxGraphicsWindow : public GraphicsWindow {
 class EXPCL_PANDADX wdxGraphicsWindow : public GraphicsWindow {
  friend class DXGraphicsStateGuardian;
  friend class DXGraphicsStateGuardian;
  friend class DXTextureContext;
  friend class DXTextureContext;
+ friend class wdxGraphicsWindowGroup;
 
 
 public:
 public:
   wdxGraphicsWindow(GraphicsPipe* pipe);
   wdxGraphicsWindow(GraphicsPipe* pipe);
-  wdxGraphicsWindow(GraphicsPipe* pipe,
-             const GraphicsWindow::Properties& props);
-  virtual ~wdxGraphicsWindow(void);
+  wdxGraphicsWindow(GraphicsPipe* pipe,const GraphicsWindow::Properties& props);
 
 
+  // this constructor will not initialize the wdx stuff, only the panda graphicswindow stuff
+  wdxGraphicsWindow(GraphicsPipe* pipe,const GraphicsWindow::Properties& props,wdxGraphicsWindowGroup *pParentGroup);
+
+  virtual ~wdxGraphicsWindow(void);
   virtual bool supports_update() const;
   virtual bool supports_update() const;
   virtual void update(void);
   virtual void update(void);
   virtual void end_frame( void );
   virtual void end_frame( void );
 
 
   virtual TypeHandle get_gsg_type() const;
   virtual TypeHandle get_gsg_type() const;
   static GraphicsWindow* make_wdxGraphicsWindow(const FactoryParams &params);
   static GraphicsWindow* make_wdxGraphicsWindow(const FactoryParams &params);
-  void CreateScreenBuffersAndDevice(DWORD dwRenderWidth, DWORD dwRenderHeight,
-                                    LPDIRECTDRAW7 pDD,LPDIRECT3D7 pD3DI,
-                                    D3DDEVICEDESC7 *pD3DDevDesc);
 
 
   LONG window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
   LONG window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
   void process_events(void);
   void process_events(void);
 
 
   INLINE bool mouse_entry_enabled(void) { return _mouse_entry_enabled; }
   INLINE bool mouse_entry_enabled(void) { return _mouse_entry_enabled; }
   INLINE bool mouse_motion_enabled(void) { return _mouse_motion_enabled; }
   INLINE bool mouse_motion_enabled(void) { return _mouse_motion_enabled; }
-  INLINE bool mouse_passive_motion_enabled(void) {
-    return _mouse_passive_motion_enabled;
-  }
+  INLINE bool mouse_passive_motion_enabled(void) { return _mouse_passive_motion_enabled; }
   void handle_window_move( int x, int y );
   void handle_window_move( int x, int y );
   void handle_mouse_motion( int x, int y );
   void handle_mouse_motion( int x, int y );
   void handle_mouse_entry( int state, HCURSOR hMouseCursor );
   void handle_mouse_entry( int state, HCURSOR hMouseCursor );
@@ -78,8 +91,6 @@ public:
   void dx_setup();
   void dx_setup();
   virtual void begin_frame( void );
   virtual void begin_frame( void );
   void show_frame();
   void show_frame();
-  DXGraphicsStateGuardian *_dxgsg;
-  
   virtual void resize(unsigned int xsize,unsigned int ysize);
   virtual void resize(unsigned int xsize,unsigned int ysize);
   virtual unsigned int verify_window_sizes(unsigned int numsizes,unsigned int *dimen);
   virtual unsigned int verify_window_sizes(unsigned int numsizes,unsigned int *dimen);
   virtual int get_depth_bitwidth(void);
   virtual int get_depth_bitwidth(void);
@@ -87,30 +98,30 @@ public:
 protected:
 protected:
   void CreateScreenBuffersAndDevice(LPDIRECTDRAW7 pDD,LPDIRECT3D7 pD3DI);
   void CreateScreenBuffersAndDevice(LPDIRECTDRAW7 pDD,LPDIRECT3D7 pD3DI);
   ButtonHandle lookup_key(WPARAM wparam) const;
   ButtonHandle lookup_key(WPARAM wparam) const;
-  virtual void config( void );
+//  virtual void config(void);
+  void config_single_window(void);
+  void config_window(wdxGraphicsWindowGroup *pParentGroup);
+  void finish_window_setup(void);
+  bool search_for_device(LPDIRECT3D8 pD3D8,DXDeviceInfo *pDevinfo);
   void setup_colormap(void);
   void setup_colormap(void);
 
 
   void enable_mouse_input(bool val);
   void enable_mouse_input(bool val);
   void enable_mouse_motion(bool val);
   void enable_mouse_motion(bool val);
   void enable_mouse_passive_motion(bool val);
   void enable_mouse_passive_motion(bool val);
   void enable_mouse_entry(bool val);
   void enable_mouse_entry(bool val);
-  void check_for_color_cursor_support(void);
-  DDDEVICEIDENTIFIER2 _DXDeviceID;
 
 
 public:
 public:
-  HWND              _mwindow;
-  HWND              _hOldForegroundWindow;  
-  UINT_PTR          _PandaPausedTimer;
-
+  UINT_PTR _PandaPausedTimer;
+  DXGraphicsStateGuardian *_dxgsg;
+  void CreateScreenBuffersAndDevice(DXScreenData &Display);
+  
 private:
 private:
+  wdxGraphicsWindowGroup *_pParentWindowGroup;
   HDC               _hdc;
   HDC               _hdc;
   HPALETTE          _colormap;
   HPALETTE          _colormap;
   typedef enum { NotAdjusting,MovingOrResizing,Resizing } WindowAdjustType;
   typedef enum { NotAdjusting,MovingOrResizing,Resizing } WindowAdjustType;
-  WindowAdjustType _WindowAdjustingType;
-  bool              _bIsLowVidMemCard;
-  bool    _bLoadedCustomCursor;
-  HCURSOR _hMouseCursor;
-  bool    _bSizeIsMaximized;
+  WindowAdjustType  _WindowAdjustingType;
+  bool              _bSizeIsMaximized;
   bool              _mouse_input_enabled;
   bool              _mouse_input_enabled;
   bool              _mouse_motion_enabled;
   bool              _mouse_motion_enabled;
   bool              _mouse_passive_motion_enabled;
   bool              _mouse_passive_motion_enabled;
@@ -137,6 +148,42 @@ private:
   static TypeHandle _type_handle;
   static TypeHandle _type_handle;
 };
 };
 
 
+// this class really belongs in panda, not here
+class EXPCL_PANDADX wdxGraphicsWindowGroup {
+// group of windows are all created at the same time
+    friend class wdxGraphicsWindow;
+
+PUBLISHED: 
+    wdxGraphicsWindowGroup(GraphicsPipe *,const GraphicsWindow::Properties&);
+    wdxGraphicsWindowGroup(GraphicsPipe *,const GraphicsWindow::Properties&,const GraphicsWindow::Properties&);
+    wdxGraphicsWindowGroup(GraphicsPipe *,const GraphicsWindow::Properties&,const GraphicsWindow::Properties&,
+                           const GraphicsWindow::Properties&);
+public:
+    wdxGraphicsWindowGroup(wdxGraphicsWindow *OneWindow);
+    // dont publish variable length one, since FFI wont support it
+    wdxGraphicsWindowGroup(GraphicsPipe *pipe,int num_windows,GraphicsWindow::Properties *WinPropArray);
+    ~wdxGraphicsWindowGroup();
+    void SetCoopLevelsAndDisplayModes(void);
+public:
+    void CreateWindows(void);
+    void make_windows(GraphicsPipe *,int num_windows,GraphicsWindow::Properties *pWinPropArray);
+    void initWindowGroup(void);
+
+    pvector<wdxGraphicsWindow *> _windows;
+    DXDeviceInfoVec *_pDeviceInfoVec;  // only used during init to store valid devices
+    HWND      _hParentWindow;
+    HWND      _hOldForegroundWindow;  
+    HCURSOR   _hMouseCursor;
+    bool      _bLoadedCustomCursor;
+    bool      _bClosingAllWindows;
+    bool      _bIsDX81;
+    UINT       _numMonitors,_numAdapters;
+    LPDIRECT3D8 _pD3D8;
+    HINSTANCE _hDDrawDLL,_hD3D8_DLL;
+    LPDIRECTDRAWCREATEEX  _pDDCreateEx;
+    DXDeviceInfoVec _DeviceInfoVec;
+};
+
 extern void set_global_parameters(void);
 extern void set_global_parameters(void);
 extern void restore_global_parameters(void);
 extern void restore_global_parameters(void);
 
 

Some files were not shown because too many files changed in this diff