diff --git a/panda/src/display/graphicsStateGuardian.cxx b/panda/src/display/graphicsStateGuardian.cxx index f4130b46b5..768e30ea20 100644 --- a/panda/src/display/graphicsStateGuardian.cxx +++ b/panda/src/display/graphicsStateGuardian.cxx @@ -63,12 +63,13 @@ release_all_textures() { // each call to release_texture() will remove that texture from the // list, and we don't want to traverse a list while we're modifying // it! + Textures temp = _prepared_textures; for (Textures::const_iterator ti = temp.begin(); ti != temp.end(); ++ti) { release_texture(*ti); - } + } // Now that we've released all of the textures, the // _prepared_textures list should have completely emptied itself. @@ -413,6 +414,14 @@ unmark_prepared_texture(TextureContext *tc) { return (_prepared_textures.erase(tc) != 0); } +void GraphicsStateGuardian::traverse_prepared_textures(bool (*pertex_callbackfn)(TextureContext *,void *),void *callback_arg) { + for (Textures::const_iterator ti = _prepared_textures.begin(); ti != _prepared_textures.end(); + ++ti) { + bool bResult=(*pertex_callbackfn)(*ti,callback_arg); + if(!bResult) + return; + } +} //////////////////////////////////////////////////////////////////// // Function: GraphicsStateGuardian::get_factory diff --git a/panda/src/display/graphicsStateGuardian.h b/panda/src/display/graphicsStateGuardian.h index 7e008d5450..a12c049e89 100644 --- a/panda/src/display/graphicsStateGuardian.h +++ b/panda/src/display/graphicsStateGuardian.h @@ -155,9 +155,12 @@ protected: CoordinateSystem _coordinate_system; -protected: +private: typedef set Textures; - Textures _prepared_textures; + Textures _prepared_textures; // NOTE: on win32 another DLL (e.g. libpandadx.dll) cannot access set directly due to exported template issue + +public: + void traverse_prepared_textures(bool (*pertex_callbackfn)(TextureContext *,void *),void *callback_arg); // factory stuff public: diff --git a/panda/src/dxgsg/Sources.pp b/panda/src/dxgsg/Sources.pp index 5c9f7a0f66..2f3124bc63 100644 --- a/panda/src/dxgsg/Sources.pp +++ b/panda/src/dxgsg/Sources.pp @@ -8,7 +8,7 @@ #define TARGET dxgsg #define LOCAL_LIBS \ cull gsgmisc gsgbase gobj sgattrib sgraphutil graph display light \ - putil linmath sgraph mathutil pnmimage + putil linmath sgraph mathutil pnmimage event #define SOURCES \ config_dxgsg.cxx config_dxgsg.h dxGraphicsStateGuardian.I \ diff --git a/panda/src/dxgsg/dxGraphicsStateGuardian.cxx b/panda/src/dxgsg/dxGraphicsStateGuardian.cxx index 72f9803816..f0141965e3 100644 --- a/panda/src/dxgsg/dxGraphicsStateGuardian.cxx +++ b/panda/src/dxgsg/dxGraphicsStateGuardian.cxx @@ -64,6 +64,7 @@ #include #include #include +#include #include @@ -914,6 +915,23 @@ typedef enum { FlatVerts,IndexedVerts,MixedFmtVerts } GeomVertFormat; +#ifdef _DEBUG +typedef enum {DrawPrim,DrawPrimStrided} DP_Type; + +void INLINE TestDrawPrimFailure(DP_Type dptype,HRESULT hr,LPDIRECTDRAW7 pDD) { + if(FAILED(hr)) { + // loss of exclusive mode is not a real DrawPrim problem + HRESULT testcooplvl_hr = pDD->TestCooperativeLevel(); + if((testcooplvl_hr != DDERR_NOEXCLUSIVEMODE)||(testcooplvl_hr != DDERR_EXCLUSIVEMODEALREADYSET)) { + dxgsg_cat.fatal() << ((dptype==DrawPrimStrided) ? "DrawPrimStrided" : "DrawPrim") << "failed: result = " << ConvD3DErrorToString(hr) << endl; + } + exit(1); + } +} +#else +#define TestDrawPrimFailure(a,b,c) +#endif + //////////////////////////////////////////////////////////////////// // Function: DXGraphicsStateGuardian::draw_point // Access: Public, Virtual @@ -992,7 +1010,18 @@ draw_point(const GeomPoint *geom) { // iterate through the point draw_prim_inner_loop2(nPrims, geom, perPrim); - _d3dDevice->DrawPrimitive(D3DPT_POINTLIST, p_flags, _pFvfBufBasePtr, nPrims, NULL); + HRESULT hr = _d3dDevice->DrawPrimitive(D3DPT_POINTLIST, p_flags, _pFvfBufBasePtr, nPrims, NULL); + + #ifdef _DEBUG + if(FAILED(hr)) { + // loss of exclusive mode is not a real DrawPrim problem + HRESULT testcooplvl_hr = _pDD->TestCooperativeLevel(); + if((testcooplvl_hr != DDERR_NOEXCLUSIVEMODE)||(testcooplvl_hr != DDERR_EXCLUSIVEMODEALREADYSET)) { + dxgsg_cat.fatal() << "DrawPrim failed: result = " << ConvD3DErrorToString(hr) << endl; + } + exit(1); + } + #endif } else { size_t vertex_size = draw_prim_setup(geom); @@ -1030,7 +1059,8 @@ draw_point(const GeomPoint *geom) { dps_data.textureCoords[0].dwStride = sizeof(TexCoordf); } - _d3dDevice->DrawPrimitiveStrided(D3DPT_POINTLIST, p_flags, &dps_data, nPrims, NULL); + HRESULT hr = _d3dDevice->DrawPrimitiveStrided(D3DPT_POINTLIST, p_flags, &dps_data, nPrims, NULL); + TestDrawPrimFailure(DrawPrimStrided,hr,_pDD); } _pCurFvfBufPtr = NULL; @@ -1132,12 +1162,15 @@ draw_line(const GeomLine* geom) { draw_prim_inner_loop(2, geom); } - if (_tmp_fvf == NULL) - _d3dDevice->DrawPrimitive(D3DPT_LINELIST, p_flags, _pFvfBufBasePtr, nPrims*2, NULL); + HRESULT hr; + + if (_tmp_fvf == NULL) + hr = _d3dDevice->DrawPrimitive(D3DPT_LINELIST, p_flags, _pFvfBufBasePtr, nPrims*2, NULL); else { - _d3dDevice->DrawPrimitive(D3DPT_LINELIST, p_flags, _tmp_fvf, nPrims*2, NULL); + hr = _d3dDevice->DrawPrimitive(D3DPT_LINELIST, p_flags, _tmp_fvf, nPrims*2, NULL); delete [] _tmp_fvf; } + TestDrawPrimFailure(DrawPrim,hr,_pDD); _pCurFvfBufPtr = NULL; @@ -1259,7 +1292,8 @@ draw_linestrip(const GeomLinestrip* geom) { draw_prim_inner_loop2(nVerts, geom, perComp); - _d3dDevice->DrawPrimitive(D3DPT_LINESTRIP, p_flags, _pFvfBufBasePtr, nVerts, NULL); + HRESULT hr = _d3dDevice->DrawPrimitive(D3DPT_LINESTRIP, p_flags, _pFvfBufBasePtr, nVerts, NULL); + TestDrawPrimFailure(DrawPrim,hr,_pDD); _pCurFvfBufPtr = NULL; } @@ -1990,6 +2024,7 @@ draw_tri(const GeomTri *geom) { } hr = _d3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, p_flags, _pFvfBufBasePtr, nPrims*3, NULL); + TestDrawPrimFailure(DrawPrim,hr,_pDD); _pCurFvfBufPtr = NULL; } else { @@ -2143,11 +2178,7 @@ draw_tri(const GeomTri *geom) { set_shademode(NeededShadeMode); hr = _d3dDevice->DrawPrimitiveStrided(primtype, fvf_flags, &dps_data, nPrims*dwVertsPerPrim, NULL); - - if (FAILED(hr)) { - dxgsg_cat.fatal() << "DrawPrimStrided failed: result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + TestDrawPrimFailure(DrawPrimStrided,hr,_pDD); _pCurFvfBufPtr = NULL; } @@ -2166,7 +2197,8 @@ draw_tri(const GeomTri *geom) { _d3dDevice->SetTextureStageState(0,D3DTSS_BORDERCOLOR,D3DRGBA(0,0,0,0)); p_flags = D3DFVF_XYZ | (D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE2(0)) ; - _d3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, p_flags, vert_buf, nPrims*3, NULL); + HRESULT hr = _d3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, p_flags, vert_buf, nPrims*3, NULL); + TestDrawPrimFailure(DrawPrim,hr,_pDD); #endif } @@ -2386,7 +2418,8 @@ draw_multitri(const Geom *geom, D3DPRIMITIVETYPE trilisttype) { // Store remaining vertices draw_prim_inner_loop2(nVerts-3, geom, perComp); - _d3dDevice->DrawPrimitive(trilisttype, p_flags, _pFvfBufBasePtr, nVerts, NULL); + HRESULT hr = _d3dDevice->DrawPrimitive(trilisttype, p_flags, _pFvfBufBasePtr, nVerts, NULL); + TestDrawPrimFailure(DrawPrim,hr,_pDD); _pCurFvfBufPtr = NULL; } @@ -2587,13 +2620,8 @@ draw_multitri(const Geom *geom, D3DPRIMITIVETYPE trilisttype) { const int cCurNumStripVerts = pLengthArr[j]; hr = _d3dDevice->DrawPrimitiveStrided(trilisttype, fvf_flags, &dps_data, cCurNumStripVerts, NULL); + TestDrawPrimFailure(DrawPrimStrided,hr,_pDD); -#ifdef _DEBUG - if (FAILED(hr)) { - dxgsg_cat.fatal() << "DrawPrimStrided failed: result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } -#endif dps_data.position.lpvData = (VOID*)(((char*) dps_data.position.lpvData) + cCurNumStripVerts*dps_data.position.dwStride); dps_data.diffuse.lpvData = (VOID*)(((char*) dps_data.diffuse.lpvData) + cCurNumStripVerts*dps_data.diffuse.dwStride); dps_data.normal.lpvData = (VOID*)(((char*) dps_data.normal.lpvData) + cCurNumStripVerts*dps_data.normal.dwStride); @@ -2937,11 +2965,6 @@ issue_alpha_transform(const AlphaTransformAttribute *attrib) { } } - - - - - //////////////////////////////////////////////////////////////////// // Function: DXGraphicsStateGuardian::prepare_texture // Access: Public, Virtual @@ -2965,7 +2988,7 @@ prepare_texture(Texture *tex) { specify_texture(tex); apply_texture_immediate(tex); #else - if (gtc->CreateTexture(_hdc, _d3dDevice,_cNumTexPixFmts,_pTexPixFmts) == NULL) { + if (gtc->CreateTexture(_d3dDevice,_cNumTexPixFmts,_pTexPixFmts) == NULL) { delete gtc; return NULL; } @@ -2994,15 +3017,14 @@ apply_texture(TextureContext *tc) { } // activate(); inactive - -#ifdef WBD_GL_MODE - bind_texture(tc); -#else +// bind_texture(tc); // specify_texture(tc->_texture); // Note: if this code changes, make sure to change initialization SetTSS code in init_dx as well // so DX TSS renderstate matches dxgsg state + DXTextureContext *dtc = DCAST(DXTextureContext, tc); + Texture *tex = tc->_texture; Texture::WrapMode wrapU,wrapV; wrapU=tex->get_wrapu(); @@ -3071,6 +3093,13 @@ apply_texture(TextureContext *tc) { dxgsg_cat.error() << "Unknown tex filter type for tex: " << tex->get_name() << " filter: "<<(DWORD)ft<<"\n"; } + #ifdef _DEBUG + if((!(dtc->_bHasMipMaps))&&(mipfilter!=D3DTFP_NONE)) { + dxgsg_cat.error() << "Trying to set mipmap filtering for texture with no generated mipmaps!! texname:" << tex->get_name() << " filter: "<<(DWORD)ft<<"\n"; + mipfilter=D3DTFP_NONE; + } + #endif + if (aniso_degree>1) { minfilter=D3DTFN_ANISOTROPIC; } @@ -3079,8 +3108,6 @@ apply_texture(TextureContext *tc) { _d3dDevice->SetTextureStageState(0, D3DTSS_MIPFILTER, mipfilter); } - DXTextureContext *dtc = DCAST(DXTextureContext, tc); - // bugbug: does this handle the case of untextured geometry? // we dont see this bug cause we never mix textured/untextured @@ -3092,12 +3119,8 @@ apply_texture(TextureContext *tc) { #endif _pCurTexContext = dtc; // enable_texturing needs this - -#endif } - - //////////////////////////////////////////////////////////////////// // Function: DXGraphicsStateGuardian::release_texture // Access: Public, Virtual @@ -3894,8 +3917,9 @@ issue_transform(const TransformAttribute *attrib) { {0.0, 0.0, 3.0, 0.0, -1.0, 0.0, D3DRGBA(0.0, 0.0, 1.0, 1.0)}, // blu }; - _d3dDevice->DrawPrimitive(D3DPT_LINELIST, D3DFVF_DIFFUSE | D3DFVF_XYZ | D3DFVF_NORMAL, + HRESULT hr = _d3dDevice->DrawPrimitive(D3DPT_LINELIST, D3DFVF_DIFFUSE | D3DFVF_XYZ | D3DFVF_NORMAL, vert_buf, 6, NULL); + TestDrawPrimFailure(DrawPrim,hr,_pDD); enable_lighting(lighting_was_enabled); enable_texturing(texturing_was_enabled); @@ -5252,11 +5276,41 @@ dx_setup_after_resize(RECT viewrect, HWND mwindow) { hr = _d3dDevice->SetViewport( &vp ); if (hr != DD_OK) { dxgsg_cat.fatal() - << "DXGraphicsStateGuardian::config() - SetViewport failed : result = " << ConvD3DErrorToString(hr) << endl; + << "DXGraphicsStateGuardian:: SetViewport failed : result = " << ConvD3DErrorToString(hr) << endl; exit(1); } } +bool refill_tex_callback(TextureContext *tc,void *void_dxgsg_ptr) { + DXTextureContext *dtc = DCAST(DXTextureContext, tc); +// DXGraphicsStateGuardian *dxgsg = (DXGraphicsStateGuardian *)void_dxgsg_ptr; + + // Re-fill the contents of textures and vertex buffers + // which just got restored now. + HRESULT hr=dtc->FillDDSurfTexturePixels(); + return hr==S_OK; +} + +HRESULT DXGraphicsStateGuardian::RestoreAllVideoSurfaces(void) { + // BUGBUG: this should also restore vertex buffer contents when they are implemented + // You will need to destroy and recreate + // optimized vertex buffers however, restoring is not enough. + + HRESULT hr; + + // note: could go through and just restore surfs that return IsLost() true + // apparently that isnt as reliable w/some drivers tho + if (FAILED(hr = _pDD->RestoreAllSurfaces() )) { + dxgsg_cat.fatal() + << "DXGraphicsStateGuardian:: RestoreAllSurfs failed : result = " << ConvD3DErrorToString(hr) << endl; + return hr; + } + + // cant access template in libpanda.dll directly due to vc++ limitations, use traverser to get around it + traverse_prepared_textures(refill_tex_callback,this); + return S_OK; +} + //////////////////////////////////////////////////////////////////// // Function: show_frame @@ -5264,123 +5318,137 @@ dx_setup_after_resize(RECT viewrect, HWND mwindow) { // Description: Repaint primary buffer from back buffer (windowed mode only) //////////////////////////////////////////////////////////////////// void DXGraphicsStateGuardian::show_frame(void) { - PStatTimer timer(_win->_swap_pcollector); // this times just the flip, so it must go here in dxgsg, instead of wdxdisplay, which would time the whole frame - if (_pri!=NULL) { - if (dx_full_screen) { + if(_pri==NULL) + return; - HRESULT hr = _pri->Flip( NULL, DDFLIP_WAIT ); // bugbug: dont we want triple buffering instead of wasting time waiting for vsync? - if (hr == DDERR_SURFACELOST || hr == DDERR_SURFACEBUSY) { -#if 0 - if (hr == DDERR_SURFACELOST || hr == DDERR_SURFACEBUSY) { - HRESULT hr; + if(dx_full_screen) { + HRESULT hr = _pri->Flip( NULL, DDFLIP_WAIT ); // bugbug: dont we want triple buffering instead of wasting time waiting for vsync? - // TestCooperativeLevel returns DD_OK: If the current mode is same as the one which the App set. - // The following two errors are returned to NORMALMODE (windowed)apps only. - // - // DDERR_WRONGMODE: If the App is a windowed app and the current mode is - // not the same as the one in which the app was created. - // DDERR_EXCLUSIVEMODEALREADYSET: If another app took exclusivemode access - // - // The following error is returned only for exclusivemode apps. - // DDERR_NOEXCLUSIVEMODE: Some other app took exclusive mode. - // - hr = _pDD->TestCooperativeLevel(); - if (SUCCEEDED( hr )) { + if(hr == DDERR_SURFACELOST || hr == DDERR_SURFACEBUSY) { + //full screen app has been switched away + HRESULT hr; + + // TestCooperativeLevel returns DD_OK: If the current mode is same as the one which the App set. + // The following error is returned only for exclusivemode apps. + // DDERR_NOEXCLUSIVEMODE: Some other app took exclusive mode. + hr = _pDD->TestCooperativeLevel(); + + while(hr == DDERR_NOEXCLUSIVEMODE) { // This means that mode changes had taken place, surfaces // were lost but still we are in the original mode, so we // simply restore all surfaces and keep going. + _dx_ready = FALSE; + #ifdef _DEBUG + dxgsg_cat.spam() << "DXGraphicsStateGuardian:: no exclusive mode, waiting...\n"; + #endif + + Sleep( 500 ); // Dont consume CPU. + throw_event("PandaPaused"); // throw panda event to invoke network-only processing + _win->process_events(); + hr = _pDD->TestCooperativeLevel(); + } - if (FAILED( m_pDD->RestoreAllSurfaces() )) - return hr; - - // Re-fill the contents of textures and vertex buffers - // which just got restored now. - // You will need to destroy and recreate - // optimized vertex buffers however, restoring is not enough. - RefillAppSurfaces(); - } else if (hr == DDERR_NOEXCLUSIVEMODE) { - // This means that some app took exclusive mode access - // we need to sit in a loop till we get back to the right mode. - do { - // Dont consume CPU. - Sleep( 500 ); - } while (DDERR_NOEXCLUSIVEMODE== - (hr = m_pDD->TestCooperativeLevel())); - if (SUCCEEDED( hr )) { - // This means that the exclusive mode app relinquished its - // control and we are back to the safe mode, so simply restore - if (FAILED( m_pDD->RestoreAllSurfaces() )) - return hr; - // Re-fill the contents of textures and vertex buffers - // which just got restored now. - // You will need to destroy and recreate - // optimized vertex buffers however, restoring is not enough. - RefillAppSurfaces(); - } else { - // Busted!! - return hr; - } - } else { - // Busted!! - return hr; - } - } - -#endif - - - // Check/restore the primary surface - if (( _pri!=NULL ) && _pri->IsLost()) - _pri->Restore(); - // Check/restore the back buffer - if (( _back!=NULL ) && _back->IsLost()) - _back->Restore(); - // Check/restore the z-buffer - if (( _zbuf!=NULL ) && _zbuf->IsLost()) - _zbuf->Restore(); + if(FAILED(hr)) { + dxgsg_cat.error() << "DXGraphicsStateGuardian::unexpected return code from TestCoopLevel: " << ConvD3DErrorToString(hr) << endl; return; } - if (hr != DD_OK) { - dxgsg_cat.error() << "DXGraphicsStateGuardian::show_frame() - Flip failed : " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + #ifdef _DEBUG + dxgsg_cat.debug() << "DXGraphicsStateGuardian:: regained exclusive mode, refilling surfs...\n"; + #endif + + RestoreAllVideoSurfaces(); - } else { - DX_DECLARE_CLEAN(DDBLTFX, bltfx); + #ifdef _DEBUG + dxgsg_cat.debug() << "DXGraphicsStateGuardian:: refill done...\n"; + #endif + + _dx_ready = TRUE; + + return; // need to re-render scene before we can display it + } - bltfx.dwDDFX |= DDBLTFX_NOTEARING; - HRESULT hr = _pri->Blt( &_view_rect, _back, NULL, DDBLT_DDFX | DDBLT_WAIT, &bltfx ); - if (hr!=DD_OK) { - if (hr == DDERR_SURFACELOST) { - // Check/restore the primary surface - if (( _pri!=NULL ) && _pri->IsLost()) - _pri->Restore(); - // Check/restore the back buffer - if (( _back!=NULL ) && _back->IsLost()) - _back->Restore(); - // Check/restore the z-buffer - if (( _zbuf!=NULL ) && _zbuf->IsLost()) - _zbuf->Restore(); - return; - } else { - dxgsg_cat.error() << "DXGraphicsStateGuardian::show_frame() - Blt failed : " << ConvD3DErrorToString(hr) << endl; - exit(1); + if(hr != DD_OK) { + dxgsg_cat.error() << "DXGraphicsStateGuardian::show_frame() - Flip failed w/unexpected error code: " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + + } else { + DX_DECLARE_CLEAN(DDBLTFX, bltfx); + + bltfx.dwDDFX |= DDBLTFX_NOTEARING; + HRESULT hr = _pri->Blt( &_view_rect, _back, NULL, DDBLT_DDFX | DDBLT_WAIT, &bltfx ); + + if(FAILED(hr)) { + if(hr == DDERR_SURFACELOST || hr == DDERR_SURFACEBUSY) { + + HRESULT hr; + + // TestCooperativeLevel returns DD_OK: If the current mode is same as the one which the App set. + // The following two errors are returned to NORMALMODE (windowed)apps only. + // + // DDERR_WRONGMODE: If the App is a windowed app and the current mode is + // not the same as the one in which the app was created. + // DDERR_EXCLUSIVEMODEALREADYSET: If another app took exclusivemode access + hr = _pDD->TestCooperativeLevel(); + while(hr == DDERR_EXCLUSIVEMODEALREADYSET) { + // This means that mode changes had taken place, surfaces + // were lost but still we are in the original mode, so we + // simply restore all surfaces and keep going. + + _dx_ready = FALSE; + + #ifdef _DEBUG + dxgsg_cat.spam() << "DXGraphicsStateGuardian:: another app has exclusive mode, waiting...\n"; + #endif + + Sleep( 500 ); // Dont consume CPU. + throw_event("PandaPaused"); // throw panda event to invoke network-only processing + + hr = _pDD->TestCooperativeLevel(); } - } - // right now, we force sync to v-blank (time from now up to vblank is wasted) - // this keeps calling processes from trying to render more frames than the refresh - // rate since (as implemented right now) they expect this call to block - hr = _pDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, NULL); - if (hr != DD_OK) { - dxgsg_cat.error() << "DXGraphicsStateGuardian::WaitForVerticalBlank() failed : " << ConvD3DErrorToString(hr) << endl; + + if(hr==DDERR_WRONGMODE) { + // This means that the desktop mode has changed + // need to destroy all of dx stuff and recreate everything back again, which is a big hit + dxgsg_cat.error() << "DXGraphicsStateGuardian:: detected display mode change in TestCoopLevel, must recreate all DDraw surfaces, D3D devices, this is not handled yet. " << ConvD3DErrorToString(hr) << endl; + exit(1); + return; + } + + if(FAILED(hr)) { + dxgsg_cat.error() << "DXGraphicsStateGuardian::unexpected return code from TestCoopLevel: " << ConvD3DErrorToString(hr) << endl; + return; + } + + #ifdef _DEBUG + dxgsg_cat.debug() << "DXGraphicsStateGuardian:: other app relinquished exclusive mode, refilling surfs...\n"; + #endif + RestoreAllVideoSurfaces(); + #ifdef _DEBUG + dxgsg_cat.debug() << "DXGraphicsStateGuardian:: refill done...\n"; + #endif + + _dx_ready = TRUE; + return; // need to re-render scene before we can display it + } else { + dxgsg_cat.error() << "DXGraphicsStateGuardian::show_frame() - Blt failed : " << ConvD3DErrorToString(hr) << endl; exit(1); } } + + // right now, we force sync to v-blank (time from now up to vblank is wasted) + // this keeps calling processes from trying to render more frames than the refresh + // rate since (as implemented right now) they expect this call to block + hr = _pDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, NULL); + if(hr != DD_OK) { + dxgsg_cat.error() << "DXGraphicsStateGuardian::WaitForVerticalBlank() failed : " << ConvD3DErrorToString(hr) << endl; + exit(1); + } } } diff --git a/panda/src/dxgsg/dxGraphicsStateGuardian.h b/panda/src/dxgsg/dxGraphicsStateGuardian.h index 8aa0b3ac07..5c540cdd39 100644 --- a/panda/src/dxgsg/dxGraphicsStateGuardian.h +++ b/panda/src/dxgsg/dxGraphicsStateGuardian.h @@ -220,6 +220,7 @@ protected: D3DVECTOR *pCenter, float fRadius, DWORD wNumRings, DWORD wNumSections, float sx, float sy, float sz, DWORD *pNumVertices,DWORD *pNumIndices,DWORD fvfFlags,DWORD dwVertSize); + HRESULT DXGraphicsStateGuardian::RestoreAllVideoSurfaces(void); INLINE void set_pack_alignment(int alignment); INLINE void set_unpack_alignment(int alignment); @@ -379,7 +380,8 @@ public: LPDIRECTDRAWSURFACE7 GetZBuffer() { return _zbuf; } INLINE void Set_HDC(HDC hdc) { _hdc = hdc; } void adjust_view_rect(int x, int y); - INLINE void SetDXStatus(bool stat) { _dx_ready = stat; } + INLINE void SetDXReady(bool stat) { _dx_ready = stat; } + INLINE bool GetDXReady(void) { return _dx_ready;} void DXGraphicsStateGuardian::SetTextureBlendMode(TextureApplyProperty::Mode TexBlendMode,bool bJustEnable); void dx_cleanup(); diff --git a/panda/src/dxgsg/dxTextureContext.cxx b/panda/src/dxgsg/dxTextureContext.cxx index 5381992327..30fcd3575a 100644 --- a/panda/src/dxgsg/dxTextureContext.cxx +++ b/panda/src/dxgsg/dxTextureContext.cxx @@ -919,7 +919,7 @@ HRESULT ConvertDDSurftoPixBuf(PixelBuffer *pixbuf,LPDIRECTDRAWSURFACE7 pDDSurf) // texture, and then copies the bitmap into the texture. //----------------------------------------------------------------------------- LPDIRECTDRAWSURFACE7 DXTextureContext:: -CreateTexture( HDC PrimaryDC, LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT pTexPixFmts) { +CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT pTexPixFmts) { HRESULT hr; int i; PixelBuffer *pbuf = _texture->_pbuffer; @@ -1418,22 +1418,20 @@ CreateTexture( HDC PrimaryDC, LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, ft=Texture::FT_nearest; _tex->set_magfilter(ft); - BOOL bDoMipMaps; - // figure out if we are mipmapping this texture ft =_tex->get_minfilter(); - bDoMipMaps=FALSE; + _bHasMipMaps=FALSE; if(!dx_ignore_mipmaps) { // set if no HW mipmap capable #ifdef _DEBUG - bDoMipMaps=dx_mipmap_everything; + _bHasMipMaps=dx_mipmap_everything; #endif switch(ft) { case Texture::FT_nearest_mipmap_nearest: case Texture::FT_linear_mipmap_nearest: case Texture::FT_nearest_mipmap_linear: // pick nearest in each, interpolate linearly b/w them case Texture::FT_linear_mipmap_linear: - bDoMipMaps=TRUE; + _bHasMipMaps=TRUE; } } else if((ft==Texture::FT_nearest_mipmap_nearest) || // cvt to no-mipmap filter types (ft==Texture::FT_nearest_mipmap_linear)) { @@ -1486,7 +1484,7 @@ CreateTexture( HDC PrimaryDC, LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, dxgsg_cat.spam() << "CreateTexture: setting aniso degree for "<< _tex->get_name() << " to: " << aniso_degree << endl; #endif - if(bDoMipMaps) { + if(_bHasMipMaps) { // We dont specify mipmapcount, so CreateSurface will auto-create surfs // for all mipmaps down to 1x1 (if driver supports deep-mipmaps, otherwise Nx1) ddsd.ddsCaps.dwCaps |= (DDSCAPS_MIPMAP | DDSCAPS_COMPLEX); @@ -1512,20 +1510,51 @@ CreateTexture( HDC PrimaryDC, LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, dxgsg_cat.debug() << "CreateTexture: "<< _tex->get_name() <<" converted " << ConvNameStrs[ConvNeeded] << " \n"; #endif - hr = ConvertPixBuftoDDSurf(ConvNeeded,pbuf->_image.p(),_surface); + _PixBufConversionType=ConvNeeded; + + hr = FillDDSurfTexturePixels(); if(FAILED(hr)) { goto error_exit; } + // Done with DDraw + pDD->Release(); + + // Return the newly created texture + return _surface; + + error_exit: + + if(pDD!=NULL) + pDD->Release(); + if(_surface!=NULL) { + _surface->Release(); + _surface = NULL; + } + + return NULL; +} + +HRESULT DXTextureContext:: +FillDDSurfTexturePixels(void) { + PixelBuffer *pbuf = _texture->_pbuffer; + DWORD cNumColorChannels = pbuf->get_num_components(); + + HRESULT hr = ConvertPixBuftoDDSurf((ConversionType)_PixBufConversionType,pbuf->_image.p(),_surface); + if(FAILED(hr)) + return hr; + + DX_DECLARE_CLEAN(DDSURFACEDESC2, ddsd); + _surface->GetSurfaceDesc(&ddsd); - if(bDoMipMaps) { + if(_bHasMipMaps) { DWORD i,oldcurxsize,oldcurysize,curxsize,curysize,cMipMapCount=ddsd.dwMipMapCount; assert(ddsd.dwMipMapCount<20); curxsize=ddsd.dwWidth; curysize=ddsd.dwHeight; - assert(pixbuf_type==PixelBuffer::T_unsigned_byte); // cant handle anything else now + assert(pbuf->get_image_type()==PixelBuffer::T_unsigned_byte); // cant handle anything else now // all mipmap sublevels require 1/3 of total original space. alloc 1/2 for safety BYTE *pMipMapPixBufSpace = new BYTE[((curxsize*curysize*cNumColorChannels)/2)+1024]; @@ -1596,38 +1625,38 @@ CreateTexture( HDC PrimaryDC, LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_MIPMAP; ddsCaps.dwCaps2 = DDSCAPS2_MIPMAPSUBLEVEL; - hr = pCurDDSurf->GetAttachedSurface(&ddsCaps, &pMipLevel_DDSurf); if(FAILED(hr)) { dxgsg_cat.error() << "CreateTexture failed creating mipmaps: GetAttachedSurf hr = " << ConvD3DErrorToString(hr) << "\n"; + delete pMipMapPixBufSpace; pCurDDSurf->Release(); - goto error_exit; + return hr; } - hr = ConvertPixBuftoDDSurf(ConvNeeded,pLastMipLevelStart,pMipLevel_DDSurf); + hr = ConvertPixBuftoDDSurf((ConversionType)_PixBufConversionType,pLastMipLevelStart,pMipLevel_DDSurf); if(FAILED(hr)) { + delete pMipMapPixBufSpace; pCurDDSurf->Release(); - goto error_exit; + return hr; } pCurDDSurf->Release(); pCurDDSurf=pMipLevel_DDSurf; } -// finish1=clock(); -// double elapsed_time = (double)(finish1 - start1) / CLOCKS_PER_SEC; -// cerr << "mipmap gen takes " << elapsed_time << " secs for this texture\n"; - - pCurDDSurf->Release(); + // finish1=clock(); + // double elapsed_time = (double)(finish1 - start1) / CLOCKS_PER_SEC; + // cerr << "mipmap gen takes " << elapsed_time << " secs for this texture\n"; delete pMipMapPixBufSpace; + pCurDDSurf->Release(); #ifdef _DEBUG if(dx_debug_view_mipmaps) { #if 0 if(!(ddcaps.dwCaps & DDCAPS_BLTSTRETCH)) { dxgsg_cat.error() << "CreateTexture failed debug-viewing mipmaps, BLT stretching not supported! ( we need to do SW stretch) \n"; - goto error_exit; + return hr; } #endif @@ -1646,7 +1675,6 @@ CreateTexture( HDC PrimaryDC, LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, pTexturePrev->AddRef(); - for(i = 0,curx=scrnrect.left,cury=scrnrect.top; i < ddsd.dwMipMapCount; i++) { DX_DECLARE_CLEAN(DDSURFACEDESC2, ddsd_cur); @@ -1659,12 +1687,10 @@ CreateTexture( HDC PrimaryDC, LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, } BOOL res; - // res = BitBlt(PrimaryDC,0,0,ddsd.dwWidth,ddsd.dwHeight, TexDC,0,0,SRCCOPY); - // loader inverts y, so use StretchBlt to re-invert it - // res = StretchBlt(PrimaryDC,0,ddsd_cur.dwHeight+cury,ddsd_cur.dwWidth,-ddsd_cur.dwHeight, TexDC,0,0,ddsd_cur.dwWidth,ddsd_cur.dwHeight,SRCCOPY); + // res = BitBlt(_dxgsg->_hdc,0,0,ddsd.dwWidth,ddsd.dwHeight, TexDC,0,0,SRCCOPY); + // loader inverts y, so use StretchBlt to re-invert it + // res = StretchBlt(_dxgsg->hdc,0,ddsd_cur.dwHeight+cury,ddsd_cur.dwWidth,-ddsd_cur.dwHeight, TexDC,0,0,ddsd_cur.dwWidth,ddsd_cur.dwHeight,SRCCOPY); #if 0 - - // dxgsg_cat.error() << "WINVER = " << (void*)WINVER << "\n"; if(cNumAlphaBits>0) { BLENDFUNCTION bf; bf.BlendOp = AC_SRC_OVER; bf.BlendFlags=0; @@ -1685,7 +1711,7 @@ CreateTexture( HDC PrimaryDC, LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, } } -// SetBkMode(hScreenDC, TRANSPARENT); + // SetBkMode(hScreenDC, TRANSPARENT); sprintf(msg,"%d",i); TextOut(hScreenDC,curx+(ddsd_cur.dwWidth)/2,5+cury+ddsd_cur.dwHeight,msg,strlen(msg)); @@ -1715,7 +1741,7 @@ CreateTexture( HDC PrimaryDC, LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, if(FAILED(hr)) { dxgsg_cat.error() << " failed displaying mipmaps: GetAttachedSurf hr = " << ConvD3DErrorToString(hr) << "\n"; } - // done with the previous texture + // done with the previous texture pTexturePrev->Release(); pTexturePrev = pTextureCurrent; } @@ -1737,26 +1763,11 @@ CreateTexture( HDC PrimaryDC, LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, } #endif } - - // Done with DDraw - pDD->Release(); - - // Return the newly created texture - return _surface; - - error_exit: - - if(pDD!=NULL) - pDD->Release(); - if(_surface!=NULL) { - _surface->Release(); - _surface = NULL; - } - - return NULL; + return S_OK; } + //----------------------------------------------------------------------------- // Name: DeleteTexture() // Desc: Release the surface used to store the texture @@ -1780,6 +1791,7 @@ TextureContext(tex) { dxgsg_cat.spam() << "Making DX texture for " << tex->get_name() << "\n"; #endif _surface = NULL; + _bHasMipMaps = FALSE; _tex = tex; } @@ -1793,4 +1805,3 @@ DXTextureContext:: _tex = NULL; } - diff --git a/panda/src/dxgsg/dxTextureContext.h b/panda/src/dxgsg/dxTextureContext.h index 31868dc01e..828ebb39ed 100644 --- a/panda/src/dxgsg/dxTextureContext.h +++ b/panda/src/dxgsg/dxTextureContext.h @@ -32,10 +32,14 @@ public: LPDIRECTDRAWSURFACE7 _surface; Texture *_tex; // ptr to parent, primarily for access to namestr - LPDIRECTDRAWSURFACE7 CreateTexture( HDC PrimaryDC, LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT pTexPixFmts); + LPDIRECTDRAWSURFACE7 CreateTexture(LPDIRECT3DDEVICE7 pd3dDevice, int cNumTexPixFmts, LPDDPIXELFORMAT pTexPixFmts); void DeleteTexture(); + bool _bHasMipMaps; + DWORD _PixBufConversionType; // enum ConversionType + HRESULT FillDDSurfTexturePixels(void); + protected: unsigned int get_bits_per_pixel(PixelBuffer::Format format, int *alphbits); @@ -55,6 +59,8 @@ public: private: static TypeHandle _type_handle; + + friend class DXGraphicsStateGuardian; }; diff --git a/panda/src/express/typeHandle.I b/panda/src/express/typeHandle.I index 66ee3fcd3f..f60e636193 100644 --- a/panda/src/express/typeHandle.I +++ b/panda/src/express/typeHandle.I @@ -5,6 +5,10 @@ #include "config_express.h" +#if defined(_DEBUG) && defined(_WIN32) +#include +#endif + // In general, we use the express_cat->info() syntax in this file // (instead of express_cat.info()), because much of this work is done at // static init time, and we must use the arrow syntax to force @@ -402,7 +406,11 @@ INLINE WantType * _dcast(WantType *, TypedObject *ptr) { #ifndef NDEBUG TypeHandle want_handle = _dcast_get_typehandle((WantType *)0); + #if defined(_DEBUG) && defined(_WIN32) + if ((ptr == (TypedObject *)NULL) || IsBadWritePtr(ptr,sizeof(TypedObject))) { + #else if (ptr == (TypedObject *)NULL) { + #endif express_cat->warning() << "Attempt to cast NULL pointer to " << want_handle << "\n"; return (WantType *)NULL; diff --git a/panda/src/wdxdisplay/wdxGraphicsPipe.cxx b/panda/src/wdxdisplay/wdxGraphicsPipe.cxx index 3f46f86447..22609b52d9 100644 --- a/panda/src/wdxdisplay/wdxGraphicsPipe.cxx +++ b/panda/src/wdxdisplay/wdxGraphicsPipe.cxx @@ -19,54 +19,11 @@ TypeHandle wdxGraphicsPipe::_type_handle; //wdxGraphicsPipe *global_pipe; -#define MOUSE_ENTERED 0 -#define MOUSE_EXITED 1 - wdxGraphicsPipe::wdxGraphicsPipe(const PipeSpecifier& spec) - : InteractiveGraphicsPipe(spec) -{ - /* - WNDCLASS wc; - HINSTANCE hinstance = GetModuleHandle(NULL); - - // Clear before filling in window structure! - memset(&wc, 0, sizeof(WNDCLASS)); - wc.style = CS_HREDRAW | CS_VREDRAW; //CS_OWNDC; - wc.lpfnWndProc = (WNDPROC)static_window_proc; - wc.hInstance = NULL; //hinstance; - wc.hIcon = LoadIcon(hinstance, IDI_WINLOGO); - wc.hCursor = LoadCursor(hinstance, IDC_CROSS); - wc.hbrBackground = NULL; - wc.lpszMenuName = NULL; - wc.lpszClassName = "wdxDisplay"; - -#if 0 - if (dx_full_screen) - { - WNDCLASS wndClass = { CS_HREDRAW | CS_VREDRAW, (WNDPROC)static_window_proc, 0, 0, NULL, - NULL, NULL, (HBRUSH)GetStockObject(WHITE_BRUSH), NULL, - TEXT("Fullscreen Window") }; - - if (!RegisterClass( &wndClass )) { - wdxdisplay_cat.fatal() - << "wdxGraphicsPipe::construct(): could not register full screen window " - << "class" << endl; - exit(0); - } - } - else -#endif - if (!RegisterClass(&wc)) { - wdxdisplay_cat.fatal() - << "wdxGraphicsPipe::construct(): could not register window " - << "class" << endl; - exit(0); - } - -*/ - _width = GetSystemMetrics(SM_CXSCREEN); - _height = GetSystemMetrics(SM_CYSCREEN); - _shift = false; +: InteractiveGraphicsPipe(spec) { + _width = GetSystemMetrics(SM_CXSCREEN); + _height = GetSystemMetrics(SM_CYSCREEN); + _shift = false; // global_pipe = this; } @@ -78,49 +35,48 @@ wdxGraphicsPipe::wdxGraphicsPipe(const PipeSpecifier& spec) //////////////////////////////////////////////////////////////////// TypeHandle wdxGraphicsPipe:: get_window_type() const { - return wdxGraphicsWindow::get_class_type(); + return wdxGraphicsWindow::get_class_type(); } GraphicsPipe *wdxGraphicsPipe:: make_wdxGraphicsPipe(const FactoryParams ¶ms) { - GraphicsPipe::PipeSpec *pipe_param; - if (!get_param_into(pipe_param, params)) { - return new wdxGraphicsPipe(PipeSpecifier()); - } else { - return new wdxGraphicsPipe(pipe_param->get_specifier()); - } + GraphicsPipe::PipeSpec *pipe_param; + if(!get_param_into(pipe_param, params)) { + return new wdxGraphicsPipe(PipeSpecifier()); + } else { + return new wdxGraphicsPipe(pipe_param->get_specifier()); + } } - TypeHandle wdxGraphicsPipe::get_class_type(void) { - return _type_handle; + return _type_handle; } void wdxGraphicsPipe::init_type(void) { - InteractiveGraphicsPipe::init_type(); - register_type(_type_handle, "wdxGraphicsPipe", - InteractiveGraphicsPipe::get_class_type()); + InteractiveGraphicsPipe::init_type(); + register_type(_type_handle, "wdxGraphicsPipe", + InteractiveGraphicsPipe::get_class_type()); } TypeHandle wdxGraphicsPipe::get_type(void) const { - return get_class_type(); + return get_class_type(); } wdxGraphicsPipe::wdxGraphicsPipe(void) { - wdxdisplay_cat.error() - << "wdxGraphicsPipes should not be created with the default constructor" - << endl; + wdxdisplay_cat.error() + << "wdxGraphicsPipes should not be created with the default constructor" + << endl; } wdxGraphicsPipe::wdxGraphicsPipe(const wdxGraphicsPipe&) { - wdxdisplay_cat.error() - << "wdxGraphicsPipes should not be copied" << endl; + wdxdisplay_cat.error() + << "wdxGraphicsPipes should not be copied" << endl; } wdxGraphicsPipe& wdxGraphicsPipe::operator=(const wdxGraphicsPipe&) { - wdxdisplay_cat.error() - << "wdxGraphicsPipes should not be assigned" << endl; - return *this; + wdxdisplay_cat.error() + << "wdxGraphicsPipes should not be assigned" << endl; + return *this; } //////////////////////////////////////////////////////////////////// @@ -131,1747 +87,1506 @@ wdxGraphicsPipe& wdxGraphicsPipe::operator=(const wdxGraphicsPipe&) { //////////////////////////////////////////////////////////////////// wdxGraphicsWindow *wdxGraphicsPipe:: find_window(HWND win) { - int num_windows = get_num_windows(); - for (int w = 0; w < num_windows; w++) { - wdxGraphicsWindow *window = DCAST(wdxGraphicsWindow, get_window(w)); - if (window->_mwindow == win) - return window; - } - return NULL; + int num_windows = get_num_windows(); + for(int w = 0; w < num_windows; w++) { + wdxGraphicsWindow *window = DCAST(wdxGraphicsWindow, get_window(w)); + if(window->_mwindow == win) + return window; + } + return NULL; } -/* -//////////////////////////////////////////////////////////////////// -// Function: static_window_proc -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -LONG WINAPI wdxGraphicsPipe:: -static_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { - return global_pipe->window_proc(hwnd, msg, wparam, lparam); -} - -//////////////////////////////////////////////////////////////////// -// Function: window_proc -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -LONG wdxGraphicsPipe:: -window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { - PAINTSTRUCT ps; - wdxGraphicsWindow *window; - int button = -1; - int x, y, width, height; - - switch (msg) { - case WM_CREATE: - return 0; - - case WM_CLOSE: - DestroyWindow(hwnd); - return 0; - - case WM_DESTROY: - // window = find_window(hwnd); - // if (window) - // window->dx_cleanup(); - PostQuitMessage(0); - return 0; - - - case WM_PAINT: - window = find_window(hwnd); - if (window) { -// BeginPaint(hwnd, &ps); - window->show_frame(); -// EndPaint(hwnd, &ps); - } - else DefWindowProc(hwnd, msg, wparam, lparam); - return 0; - - case WM_SYSCHAR: - case WM_CHAR: - return 0; - case WM_SYSKEYDOWN: - case WM_KEYDOWN: - window = find_window(hwnd); - if (window) { - POINT point; -// window->make_current(); - GetCursorPos(&point); - ScreenToClient(hwnd, &point); - window->handle_keypress(lookup_key(wparam), point.x, point.y); - } - return 0; - case WM_SYSKEYUP: - case WM_KEYUP: - window = find_window(hwnd); - if (window) { - POINT point; -// window->make_current(); - GetCursorPos(&point); - ScreenToClient(hwnd, &point); - window->handle_keyrelease(lookup_key(wparam), point.x, point.y); - } - return 0; - - case WM_LBUTTONDOWN: - button = 0; - case WM_MBUTTONDOWN: - if (button < 0) - button = 1; - case WM_RBUTTONDOWN: - if (button < 0) - button = 2; - SetCapture(hwnd); - // Win32 doesn't return the same numbers as X does when the mouse - // goes beyond the upper or left side of the window - x = LOWORD(lparam); - y = HIWORD(lparam); - if (x & 1 << 15) x -= (1 << 16); - if (y & 1 << 15) y -= (1 << 16); - window = find_window(hwnd); - if (window) { -// window->make_current(); - window->handle_keypress(MouseButton::button(button), x, y); - } - return 0; - - case WM_LBUTTONUP: - button = 0; - case WM_MBUTTONUP: - if (button < 0) - button = 1; - case WM_RBUTTONUP: - if (button < 0) - button = 2; - ReleaseCapture(); - window = find_window(hwnd); - if (window) { - x = LOWORD(lparam); - y = HIWORD(lparam); - if (x & 1 << 15) x -= (1 << 16); - if (y & 1 << 15) y -= (1 << 16); -// window->make_current(); - window->handle_keyrelease(MouseButton::button(button), x, y); - } - return 0; - - case WM_MOUSEMOVE: - window = find_window(hwnd); - if (window) { - x = LOWORD(lparam); - y = HIWORD(lparam); - if (x & 1 << 15) x -= (1 << 16); - if (y & 1 << 15) y -= (1 << 16); - if (window->mouse_motion_enabled() - && wparam & (MK_LBUTTON | MK_MBUTTON | MK_RBUTTON)) - { -// window->make_current(); - window->handle_mouse_motion(x, y); - } - else if (window->mouse_passive_motion_enabled() && - ((wparam & (MK_LBUTTON | MK_MBUTTON | MK_RBUTTON)) == 0)) - { -// window->make_current(); - window->handle_mouse_motion(x, y); - } - } - return 0; - - case WM_MOVE: - window = find_window(hwnd); - if (window) { - window->handle_window_move(LOWORD(lparam), HIWORD(lparam) ); - } - return 0; - - case WM_SIZE: - window = find_window(hwnd); - if (window) { - width = LOWORD(lparam); - height = HIWORD(lparam); - window->handle_reshape(width, height); - } - return 0; - - case WM_SETCURSOR: - // We need to set the cursor every time the mouse moves on Win32! - if (LOWORD(lparam) != HTCLIENT) - return DefWindowProc(hwnd, msg, wparam, lparam); - window = find_window(hwnd); - if (window) { - SetCursor(LoadCursor(NULL, IDC_CROSS)); - } - return 1; - case WM_SETFOCUS: - window = find_window(hwnd); - if (window) - { - if (window->mouse_entry_enabled()) { -// window->make_current(); - window->handle_mouse_entry(MOUSE_ENTERED); - } - } - return 0; - case WM_KILLFOCUS: - window = find_window(hwnd); - if (window) - { - if (window->mouse_entry_enabled()) { -// window->make_current(); - window->handle_mouse_entry(MOUSE_EXITED); - } - } - return 0; - default: - return DefWindowProc(hwnd, msg, wparam, lparam); - } -} - - -//////////////////////////////////////////////////////////////////// -// Function: lookup_key -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -ButtonHandle -wdxGraphicsPipe::lookup_key(WPARAM wparam) const { - switch (wparam) { - case VK_BACK: return KeyboardButton::backspace(); - case VK_TAB: return KeyboardButton::tab(); - case VK_ESCAPE: return KeyboardButton::escape(); - case VK_SPACE: return KeyboardButton::space(); - case VK_UP: return KeyboardButton::up(); - case VK_DOWN: return KeyboardButton::down(); - case VK_LEFT: return KeyboardButton::left(); - case VK_RIGHT: return KeyboardButton::right(); - case VK_PRIOR: return KeyboardButton::page_up(); - case VK_NEXT: return KeyboardButton::page_down(); - case VK_HOME: return KeyboardButton::home(); - case VK_END: return KeyboardButton::end(); - case VK_F1: return KeyboardButton::f1(); - case VK_F2: return KeyboardButton::f2(); - case VK_F3: return KeyboardButton::f3(); - case VK_F4: return KeyboardButton::f4(); - case VK_F5: return KeyboardButton::f5(); - case VK_F6: return KeyboardButton::f6(); - case VK_F7: return KeyboardButton::f7(); - case VK_F8: return KeyboardButton::f8(); - case VK_F9: return KeyboardButton::f9(); - case VK_F10: return KeyboardButton::f10(); - case VK_F11: return KeyboardButton::f11(); - case VK_F12: return KeyboardButton::f12(); - case VK_INSERT: return KeyboardButton::insert(); - case VK_DELETE: return KeyboardButton::del(); - default: - int key = MapVirtualKey(wparam, 2); - if (isascii(key) && key != 0) { - if (GetKeyState(VK_SHIFT) >= 0) - key = tolower(key); - return KeyboardButton::ascii_key((uchar)key); - } - break; - } - return ButtonHandle::none(); -} -*/ - - extern char * ConvD3DErrorToString(const HRESULT &error) { - switch(error) - { - case E_FAIL: - return "Unspecified error E_FAIL"; + 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) + 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_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 ) + 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 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 "; + 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); - - default: - static char buff[1000]; - sprintf(buff, "Unrecognized error value: %08X\0", error); - - return buff; - } + return buff; + } } diff --git a/panda/src/wdxdisplay/wdxGraphicsPipe.h b/panda/src/wdxdisplay/wdxGraphicsPipe.h index cf3562f5f7..b295be36c1 100644 --- a/panda/src/wdxdisplay/wdxGraphicsPipe.h +++ b/panda/src/wdxdisplay/wdxGraphicsPipe.h @@ -61,11 +61,6 @@ protected: wdxGraphicsPipe(const wdxGraphicsPipe&); wdxGraphicsPipe& operator=(const wdxGraphicsPipe&); - /* - static LONG WINAPI static_window_proc(HWND hwnd, UINT msg, WPARAM wparam, - LPARAM lparam); - LONG window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); - */ }; #endif diff --git a/panda/src/wdxdisplay/wdxGraphicsWindow.cxx b/panda/src/wdxdisplay/wdxGraphicsWindow.cxx index ee241cd095..32c1232c3d 100644 --- a/panda/src/wdxdisplay/wdxGraphicsWindow.cxx +++ b/panda/src/wdxdisplay/wdxGraphicsWindow.cxx @@ -28,40 +28,41 @@ //////////////////////////////////////////////////////////////////// TypeHandle wdxGraphicsWindow::_type_handle; -// kluge +// BUGBUG: kluge to make up for lack of panda exit fn. prevents multiple DX windows +// need to replace this with global hwnd->wdx classptr STL map obj wdxGraphicsWindow* global_dxwin = NULL; #define MOUSE_ENTERED 0 #define MOUSE_EXITED 1 static DWORD BitDepth_2_DDBDMask(DWORD iBitDepth) { - switch(iBitDepth) { - case 16: return DDBD_16; - case 32: return DDBD_32; - case 24: return DDBD_24; - case 8: return DDBD_8; - case 1: return DDBD_1; - case 2: return DDBD_2; - case 4: return DDBD_4; - } - return 0x0; + switch(iBitDepth) { + case 16: return DDBD_16; + case 32: return DDBD_32; + case 24: return DDBD_24; + case 8: return DDBD_8; + case 1: return DDBD_1; + case 2: return DDBD_2; + case 4: return DDBD_4; + } + return 0x0; } #ifdef _DEBUG static void DebugPrintPixFmt(DDPIXELFORMAT* pddpf) { - static int iddpfnum=0; - ostream *dbgout = &dxgsg_cat.debug(); - - *dbgout << "ZBuf DDPF[" << iddpfnum << "]: RGBBitCount:" << pddpf->dwRGBBitCount - << " Flags:" << (void *)pddpf->dwFlags ; + static int iddpfnum=0; + ostream *dbgout = &dxgsg_cat.debug(); - if(pddpf->dwFlags & DDPF_STENCILBUFFER) { - *dbgout << " StencilBits:" << (void *) pddpf->dwStencilBitDepth; - } + *dbgout << "ZBuf DDPF[" << iddpfnum << "]: RGBBitCount:" << pddpf->dwRGBBitCount + << " Flags:" << (void *)pddpf->dwFlags ; - *dbgout << endl; + if(pddpf->dwFlags & DDPF_STENCILBUFFER) { + *dbgout << " StencilBits:" << (void *) pddpf->dwStencilBitDepth; + } - iddpfnum++; + *dbgout << endl; + + iddpfnum++; } #endif @@ -69,13 +70,12 @@ static void DebugPrintPixFmt(DDPIXELFORMAT* pddpf) { static int cNumZBufFmts=0; -HRESULT CALLBACK EnumZBufFmtsCallback( LPDDPIXELFORMAT pddpf, VOID* param ) -{ - DDPIXELFORMAT *ZBufFmtsArr = (DDPIXELFORMAT *) param; - assert(cNumZBufFmts < MAX_DX_ZBUF_FMTS); - memcpy( &(ZBufFmtsArr[cNumZBufFmts]), pddpf, sizeof(DDPIXELFORMAT) ); - cNumZBufFmts++; - return DDENUMRET_OK; +HRESULT CALLBACK EnumZBufFmtsCallback( LPDDPIXELFORMAT pddpf, VOID* param ) { + DDPIXELFORMAT *ZBufFmtsArr = (DDPIXELFORMAT *) param; + assert(cNumZBufFmts < MAX_DX_ZBUF_FMTS); + memcpy( &(ZBufFmtsArr[cNumZBufFmts]), pddpf, sizeof(DDPIXELFORMAT) ); + cNumZBufFmts++; + return DDENUMRET_OK; } //////////////////////////////////////////////////////////////////// @@ -85,106 +85,104 @@ HRESULT CALLBACK EnumZBufFmtsCallback( LPDDPIXELFORMAT pddpf, VOID* param ) //////////////////////////////////////////////////////////////////// ButtonHandle wdxGraphicsWindow:: lookup_key(WPARAM wparam) const { - switch (wparam) { - case VK_BACK: return KeyboardButton::backspace(); - case VK_TAB: return KeyboardButton::tab(); - case VK_ESCAPE: return KeyboardButton::escape(); - case VK_SPACE: return KeyboardButton::space(); - case VK_UP: return KeyboardButton::up(); - case VK_DOWN: return KeyboardButton::down(); - case VK_LEFT: return KeyboardButton::left(); - case VK_RIGHT: return KeyboardButton::right(); - case VK_PRIOR: return KeyboardButton::page_up(); - case VK_NEXT: return KeyboardButton::page_down(); - case VK_HOME: return KeyboardButton::home(); - case VK_END: return KeyboardButton::end(); - case VK_F1: return KeyboardButton::f1(); - case VK_F2: return KeyboardButton::f2(); - case VK_F3: return KeyboardButton::f3(); - case VK_F4: return KeyboardButton::f4(); - case VK_F5: return KeyboardButton::f5(); - case VK_F6: return KeyboardButton::f6(); - case VK_F7: return KeyboardButton::f7(); - case VK_F8: return KeyboardButton::f8(); - case VK_F9: return KeyboardButton::f9(); - case VK_F10: return KeyboardButton::f10(); - case VK_F11: return KeyboardButton::f11(); - case VK_F12: return KeyboardButton::f12(); - case VK_INSERT: return KeyboardButton::insert(); - case VK_DELETE: return KeyboardButton::del(); - - case VK_SHIFT: - case VK_LSHIFT: - case VK_RSHIFT: - return KeyboardButton::shift(); + switch(wparam) { + case VK_BACK: return KeyboardButton::backspace(); + case VK_TAB: return KeyboardButton::tab(); + case VK_ESCAPE: return KeyboardButton::escape(); + case VK_SPACE: return KeyboardButton::space(); + case VK_UP: return KeyboardButton::up(); + case VK_DOWN: return KeyboardButton::down(); + case VK_LEFT: return KeyboardButton::left(); + case VK_RIGHT: return KeyboardButton::right(); + case VK_PRIOR: return KeyboardButton::page_up(); + case VK_NEXT: return KeyboardButton::page_down(); + case VK_HOME: return KeyboardButton::home(); + case VK_END: return KeyboardButton::end(); + case VK_F1: return KeyboardButton::f1(); + case VK_F2: return KeyboardButton::f2(); + case VK_F3: return KeyboardButton::f3(); + case VK_F4: return KeyboardButton::f4(); + case VK_F5: return KeyboardButton::f5(); + case VK_F6: return KeyboardButton::f6(); + case VK_F7: return KeyboardButton::f7(); + case VK_F8: return KeyboardButton::f8(); + case VK_F9: return KeyboardButton::f9(); + case VK_F10: return KeyboardButton::f10(); + case VK_F11: return KeyboardButton::f11(); + case VK_F12: return KeyboardButton::f12(); + case VK_INSERT: return KeyboardButton::insert(); + case VK_DELETE: return KeyboardButton::del(); - case VK_CONTROL: - case VK_LCONTROL: - case VK_RCONTROL: - return KeyboardButton::control(); + case VK_SHIFT: + case VK_LSHIFT: + case VK_RSHIFT: + return KeyboardButton::shift(); - case VK_MENU: - case VK_LMENU: - case VK_RMENU: - return KeyboardButton::alt(); + case VK_CONTROL: + case VK_LCONTROL: + case VK_RCONTROL: + return KeyboardButton::control(); - default: - int key = MapVirtualKey(wparam, 2); - if (isascii(key) && key != 0) { - if (GetKeyState(VK_SHIFT) >= 0) - key = tolower(key); - else { - switch (key) { - case '1': key = '!'; break; - case '2': key = '@'; break; - case '3': key = '#'; break; - case '4': key = '$'; break; - case '5': key = '%'; break; - case '6': key = '^'; break; - case '7': key = '&'; break; - case '8': key = '*'; break; - case '9': key = '('; break; - case '0': key = ')'; break; - case '-': key = '_'; break; - case '=': key = '+'; break; - case ',': key = '<'; break; - case '.': key = '>'; break; - case '/': key = '?'; break; - case ';': key = ':'; break; - case '\'': key = '"'; break; - case '[': key = '{'; break; - case ']': key = '}'; break; - case '\\': key = '|'; break; - case '`': key = '~'; break; + case VK_MENU: + case VK_LMENU: + case VK_RMENU: + return KeyboardButton::alt(); + + default: + int key = MapVirtualKey(wparam, 2); + if(isascii(key) && key != 0) { + if(GetKeyState(VK_SHIFT) >= 0) + key = tolower(key); + else { + switch(key) { + case '1': key = '!'; break; + case '2': key = '@'; break; + case '3': key = '#'; break; + case '4': key = '$'; break; + case '5': key = '%'; break; + case '6': key = '^'; break; + case '7': key = '&'; break; + case '8': key = '*'; break; + case '9': key = '('; break; + case '0': key = ')'; break; + case '-': key = '_'; break; + case '=': key = '+'; break; + case ',': key = '<'; break; + case '.': key = '>'; break; + case '/': key = '?'; break; + case ';': key = ':'; break; + case '\'': key = '"'; break; + case '[': key = '{'; break; + case ']': key = '}'; break; + case '\\': key = '|'; break; + case '`': key = '~'; break; + } + } + return KeyboardButton::ascii_key((uchar)key); + } + break; } - } - return KeyboardButton::ascii_key((uchar)key); - } - break; - } - return ButtonHandle::none(); -} - -DXGraphicsStateGuardian *wdxGraphicsWindow::get_dxgsg(void) { - return (_gsg==NULL) ? NULL : DCAST(DXGraphicsStateGuardian, _gsg); + return ButtonHandle::none(); } void AtExitFn() { #ifdef _DEBUG - wdxdisplay_cat.debug() << "AtExitFn called\n"; - OutputDebugString("AtExitFn called\n"); + wdxdisplay_cat.debug() << "AtExitFn called\n"; + OutputDebugString("AtExitFn called\n"); #endif - if(global_dxwin==NULL) - return; - if(global_dxwin->_hParentWindow!=NULL) { - SetForegroundWindow(global_dxwin->_hParentWindow); - } - DXGraphicsStateGuardian* dxgsg = global_dxwin->get_dxgsg(); - if(dxgsg!=NULL) - dxgsg->dx_cleanup(); + if(global_dxwin==NULL) + return; + if(global_dxwin->_hParentWindow!=NULL) { + SetForegroundWindow(global_dxwin->_hParentWindow); + } + if(global_dxwin->_dxgsg!=NULL) { + (global_dxwin->_dxgsg)->dx_cleanup(); + global_dxwin->_dxgsg=NULL; + } -// global_dxwin->_dx_ready = false; -// delete dxgsg; does panda do this itself? + // global_dxwin->dxgsg->GetDXReady() = false; + // delete dxgsg; does panda do this itself? + // BUGBUG need to remove this stuff and have it call a panda exit fn instead? } //////////////////////////////////////////////////////////////////// @@ -193,14 +191,16 @@ void AtExitFn() { // Description: //////////////////////////////////////////////////////////////////// LONG WINAPI wdxGraphicsWindow::static_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { - return global_dxwin->window_proc(hwnd, msg, wparam, lparam); + // BUGBUG: cant do this if we want multiple windows (but then how does window_proc access wdxwin class members? + // need global mapping of hwnd->wdxwin class ptrs (use STL map object?) + return global_dxwin->window_proc(hwnd, msg, wparam, lparam); } #ifdef _DEBUG extern void dbgPrintVidMem(LPDIRECTDRAW7 pDD, LPDDSCAPS2 lpddsCaps,const char *pMsg) { - DWORD dwTotal,dwFree; - char tmpstr[100],tmpstr2[100]; - HRESULT hr; + DWORD dwTotal,dwFree; + char tmpstr[100],tmpstr2[100]; + HRESULT hr; /* * These Caps bits arent allowed to be specified when calling GetAvailVidMem. @@ -217,17 +217,17 @@ extern void dbgPrintVidMem(LPDIRECTDRAW7 pDD, LPDDSCAPS2 lpddsCaps,const char *p DDSCAPS_VISIBLE | \ DDSCAPS_WRITEONLY) - DDSCAPS2 ddsCaps = *lpddsCaps; - ddsCaps.dwCaps &= ~(AVAILVIDMEM_BADCAPS); // turn off the bad caps + DDSCAPS2 ddsCaps = *lpddsCaps; + ddsCaps.dwCaps &= ~(AVAILVIDMEM_BADCAPS); // turn off the bad caps // ddsCaps.dwCaps |= DDSCAPS_VIDEOMEMORY; done internally by DX anyway - if( FAILED( hr = pDD->GetAvailableVidMem(&ddsCaps,&dwTotal,&dwFree))) { - wdxdisplay_cat.debug() << "wdxGraphicsWindow::GetAvailableVidMem failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } - sprintf(tmpstr,"%.4g",dwTotal/1000000.0); - sprintf(tmpstr2,"%.4g",dwFree/1000000.0); - wdxdisplay_cat.debug() << "AvailableVidMem before creating "<< pMsg << ",(megs) total: " << tmpstr << " free:" << tmpstr2 <GetAvailableVidMem(&ddsCaps,&dwTotal,&dwFree))) { + wdxdisplay_cat.debug() << "wdxGraphicsWindow::GetAvailableVidMem failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + sprintf(tmpstr,"%.4g",dwTotal/1000000.0); + sprintf(tmpstr2,"%.4g",dwFree/1000000.0); + wdxdisplay_cat.debug() << "AvailableVidMem before creating "<< pMsg << ",(megs) total: " << tmpstr << " free:" << tmpstr2 <GetDXReady()) + show_frame(); + EndPaint(hwnd, &ps); + return 0; - case WM_LBUTTONDOWN: - button = 0; - case WM_MBUTTONDOWN: - if (button < 0) - button = 1; - case WM_RBUTTONDOWN: - if (button < 0) - button = 2; - SetCapture(hwnd); - // Win32 doesn't return the same numbers as X does when the mouse - // goes beyond the upper or left side of the window - x = LOWORD(lparam); - y = HIWORD(lparam); - if (x & 1 << 15) x -= (1 << 16); - if (y & 1 << 15) y -= (1 << 16); - if (_dx_ready) handle_keypress(MouseButton::button(button), x, y); - return 0; + case WM_SYSCHAR: + case WM_CHAR: + return 0; + case WM_SYSKEYDOWN: + case WM_KEYDOWN: + GetCursorPos(&point); + ScreenToClient(hwnd, &point); + handle_keypress(lookup_key(wparam), point.x, point.y); + return 0; + case WM_SYSKEYUP: + case WM_KEYUP: + GetCursorPos(&point); + ScreenToClient(hwnd, &point); + handle_keyrelease(lookup_key(wparam), point.x, point.y); + return 0; - case WM_LBUTTONUP: - button = 0; - case WM_MBUTTONUP: - if (button < 0) - button = 1; - case WM_RBUTTONUP: - if (button < 0) - button = 2; - ReleaseCapture(); - x = LOWORD(lparam); - y = HIWORD(lparam); - if (x & 1 << 15) x -= (1 << 16); - if (y & 1 << 15) y -= (1 << 16); - handle_keyrelease(MouseButton::button(button), x, y); - return 0; + case WM_LBUTTONDOWN: + button = 0; + case WM_MBUTTONDOWN: + if(button < 0) + button = 1; + case WM_RBUTTONDOWN: + if(button < 0) + button = 2; + SetCapture(hwnd); + // Win32 doesn't return the same numbers as X does when the mouse + // goes beyond the upper or left side of the window + x = LOWORD(lparam); + y = HIWORD(lparam); + if(x & 1 << 15) x -= (1 << 16); + if(y & 1 << 15) y -= (1 << 16); + if(_dxgsg->GetDXReady()) + handle_keypress(MouseButton::button(button), x, y); + return 0; - case WM_MOUSEMOVE: - if (_dx_ready) - { - x = LOWORD(lparam); - y = HIWORD(lparam); - if (x & 1 << 15) x -= (1 << 16); - if (y & 1 << 15) y -= (1 << 16); - if (mouse_motion_enabled() - && wparam & (MK_LBUTTON | MK_MBUTTON | MK_RBUTTON)) - { - handle_mouse_motion(x, y); + case WM_LBUTTONUP: + button = 0; + case WM_MBUTTONUP: + if(button < 0) + button = 1; + case WM_RBUTTONUP: + if(button < 0) + button = 2; + ReleaseCapture(); + x = LOWORD(lparam); + y = HIWORD(lparam); + if(x & 1 << 15) x -= (1 << 16); + if(y & 1 << 15) y -= (1 << 16); + if(_dxgsg->GetDXReady()) + handle_keyrelease(MouseButton::button(button), x, y); + return 0; + + case WM_MOUSEMOVE: + if(_dxgsg->GetDXReady()) { + x = LOWORD(lparam); + y = HIWORD(lparam); + if(x & 1 << 15) x -= (1 << 16); + if(y & 1 << 15) y -= (1 << 16); + if(mouse_motion_enabled() + && wparam & (MK_LBUTTON | MK_MBUTTON | MK_RBUTTON)) { + handle_mouse_motion(x, y); + } else if(mouse_passive_motion_enabled() && + ((wparam & (MK_LBUTTON | MK_MBUTTON | MK_RBUTTON)) == 0)) { + handle_mouse_motion(x, y); + } } - else if (mouse_passive_motion_enabled() && - ((wparam & (MK_LBUTTON | MK_MBUTTON | MK_RBUTTON)) == 0)) - { - handle_mouse_motion(x, y); + return 0; + + case WM_MOVE: + if(_dxgsg->GetDXReady()) + handle_window_move(LOWORD(lparam), HIWORD(lparam) ); + return 0; + + case WM_EXITSIZEMOVE: +#ifdef _DEBUG + wdxdisplay_cat.spam() << "WM_EXITSIZEMOVE received" << endl; +#endif + + if(_WindowAdjustingType==Resizing) { + _dxgsg->SetDXReady(false); // disable rendering whilst we mess with surfs + + // Want to change rendertarget size without destroying d3d device. To save vid memory + // (and make resizing work on memory-starved 4MB cards), we need to construct + // a temporary mini-sized render target for the d3d device (it cannot point to a + // NULL rendertarget) before creating the fully resized buffers. The old + // rendertargets will be freed when these temp targets are set, and that will give + // us the memory to create the resized target + + LPDIRECTDRAWSURFACE7 pddsDummy = NULL,pddsDummyZ = NULL; + HRESULT hr; + + DX_DECLARE_CLEAN( DDSURFACEDESC2, ddsd ); + + if(_dxgsg->GetBackBuffer()==NULL) // bugbug why is this ever true?? + return DefWindowProc(hwnd, msg, wparam, lparam); + + _dxgsg->GetBackBuffer()->GetSurfaceDesc(&ddsd); + LPDIRECTDRAW7 pDD = _dxgsg->GetDDInterface(); + + ddsd.dwFlags &= ~DDSD_PITCH; + ddsd.dwWidth = 1; ddsd.dwHeight = 1; + ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_COMPLEX | DDSCAPS_FLIP | DDSCAPS_FRONTBUFFER | DDSCAPS_BACKBUFFER); + + PRINTVIDMEM(pDD,&ddsd.ddsCaps,"dummy backbuf"); + + if(FAILED( hr = pDD->CreateSurface( &ddsd, &pddsDummy, NULL ) )) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::Resize CreateSurface for temp backbuf failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + + DX_DECLARE_CLEAN( DDSURFACEDESC2, ddsdZ ); + _dxgsg->GetZBuffer()->GetSurfaceDesc(&ddsdZ); + ddsdZ.dwFlags &= ~DDSD_PITCH; + ddsdZ.dwWidth = 1; ddsdZ.dwHeight = 1; + + PRINTVIDMEM(pDD,&ddsdZ.ddsCaps,"dummy zbuf"); + + if(FAILED( hr = pDD->CreateSurface( &ddsdZ, &pddsDummyZ, NULL ) )) { + wdxdisplay_cat.fatal() << "wdxGraphicsWindow::Resize CreateSurface for temp zbuf failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + + if(FAILED( hr = pddsDummy->AddAttachedSurface( pddsDummyZ ) )) { + wdxdisplay_cat.fatal() << "wdxGraphicsWindow::Resize AddAttachedSurf for temp zbuf failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + + if(FAILED( hr = _dxgsg->GetD3DDevice()->SetRenderTarget( pddsDummy, 0x0 ))) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::Resize failed to set render target to temporary surface, result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + RELEASE(pddsDummyZ); + RELEASE(pddsDummy); + + RECT view_rect; + GetClientRect( _mwindow, &view_rect ); + ClientToScreen( _mwindow, (POINT*)&view_rect.left ); + ClientToScreen( _mwindow, (POINT*)&view_rect.right ); + + _dxgsg->dx_setup_after_resize(view_rect,_mwindow); // create the new resized rendertargets + + // change _props xsize,ysize + resized((view_rect.right - view_rect.left),(view_rect.bottom - view_rect.top)); + _props._xorg = view_rect.left; // _props origin should reflect view rectangle + _props._yorg = view_rect.top; + + _dxgsg->SetDXReady(true); } - } - return 0; + _WindowAdjustingType = NotAdjusting; + return 0; - case WM_MOVE: - if (_dx_ready) handle_window_move(LOWORD(lparam), HIWORD(lparam) ); - return 0; + case WM_ENTERSIZEMOVE: { + _dxgsg->SetDXReady(true); // dont disable here because I want to see pic as I resize + _WindowAdjustingType = MovingOrResizing; + } + return DefWindowProc(hwnd, msg, wparam, lparam); - case WM_EXITSIZEMOVE: + case WM_DISPLAYCHANGE: { #ifdef _DEBUG - wdxdisplay_cat.spam() << "WM_EXITSIZEMOVE received" << endl; + width = LOWORD(lparam); height = HIWORD(lparam); + DWORD newbitdepth=wparam; + wdxdisplay_cat.spam() <<"WM_DISPLAYCHANGE received with width:" << width << " height: " << height << " bpp: " << wparam<< endl; #endif + // Note: TestCoopLevel in dxgsg will return WRONGMODE if there is a problem after a displaymode change + // so we dont need to abort here - if(bWindowAdjustingType==Resizing) { - DXGraphicsStateGuardian* dxgsg = DCAST(DXGraphicsStateGuardian, _gsg); - _dx_ready = false; - dxgsg->SetDXStatus(false); // disable rendering whilst we much with surfs + } + return DefWindowProc(hwnd, msg, wparam, lparam); - // Want to change rendertarget size without destroying d3d device. To save vid memory - // (and make resizing work on memory-starved 4MB cards), we need to construct - // a temporary mini-sized render target for the d3d device (it cannot point to a - // NULL rendertarget) before creating the fully resized buffers. The old - // rendertargets will be freed when these temp targets are set, and that will give - // us the memory to create the resized target + case WM_SIZE: { - LPDIRECTDRAWSURFACE7 pddsDummy = NULL,pddsDummyZ = NULL; - HRESULT hr; - - DX_DECLARE_CLEAN( DDSURFACEDESC2, ddsd ); - - if(dxgsg->GetBackBuffer()==NULL) // bugbug why is this ever true?? - return DefWindowProc(hwnd, msg, wparam, lparam); - - dxgsg->GetBackBuffer()->GetSurfaceDesc(&ddsd); - LPDIRECTDRAW7 pDD = dxgsg->GetDDInterface(); - - ddsd.dwFlags &= ~DDSD_PITCH; - ddsd.dwWidth = 1; ddsd.dwHeight = 1; - ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_COMPLEX | DDSCAPS_FLIP | DDSCAPS_FRONTBUFFER | DDSCAPS_BACKBUFFER); - - PRINTVIDMEM(pDD,&ddsd.ddsCaps,"dummy backbuf"); - - if( FAILED( hr = pDD->CreateSurface( &ddsd, &pddsDummy, NULL ) ) ) - { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::Resize CreateSurface for temp backbuf failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } - - DX_DECLARE_CLEAN( DDSURFACEDESC2, ddsdZ ); - dxgsg->GetZBuffer()->GetSurfaceDesc(&ddsdZ); - ddsdZ.dwFlags &= ~DDSD_PITCH; - ddsdZ.dwWidth = 1; ddsdZ.dwHeight = 1; - - PRINTVIDMEM(pDD,&ddsdZ.ddsCaps,"dummy zbuf"); - - if( FAILED( hr = pDD->CreateSurface( &ddsdZ, &pddsDummyZ, NULL ) ) ) { - wdxdisplay_cat.fatal() << "wdxGraphicsWindow::Resize CreateSurface for temp zbuf failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } - - if( FAILED( hr = pddsDummy->AddAttachedSurface( pddsDummyZ ) ) ) { - wdxdisplay_cat.fatal() << "wdxGraphicsWindow::Resize AddAttachedSurf for temp zbuf failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } - - if( FAILED( hr = dxgsg->GetD3DDevice()->SetRenderTarget( pddsDummy, 0x0 )) ) - { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::Resize failed to set render target to temporary surface, result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } - RELEASE(pddsDummyZ); - RELEASE(pddsDummy); - - RECT view_rect; - GetClientRect( _mwindow, &view_rect ); - ClientToScreen( _mwindow, (POINT*)&view_rect.left ); - ClientToScreen( _mwindow, (POINT*)&view_rect.right ); - - dxgsg->dx_setup_after_resize(view_rect,_mwindow); // create the new resized rendertargets - - _dx_ready = true; - dxgsg->SetDXStatus(true); - } - bWindowAdjustingType = NotAdjusting; - return 0; - - case WM_ENTERSIZEMOVE: { - DXGraphicsStateGuardian* dxgsg = DCAST(DXGraphicsStateGuardian, _gsg); - _dx_ready = true; - dxgsg->SetDXStatus(true); // dont disable here because I want to see pic as I resize - bWindowAdjustingType = MovingOrResizing; - } - return DefWindowProc(hwnd, msg, wparam, lparam); - - case WM_DISPLAYCHANGE: - - #ifdef _DEBUG - width = LOWORD(lparam); height = HIWORD(lparam); - wdxdisplay_cat.spam() <<"WM_DISPLAYCHANGE received with width:" << width << " height: " << height << " bpp: " << wparam<< endl; - #endif - - if(!dx_full_screen) { - wdxdisplay_cat.fatal() << "WM_DISPLAYCHANGE received: fatal error, desktop bitdepth change not handled\n"; - exit(1); - } - - case WM_SIZE: { - if((_mwindow==NULL) || (wparam == SIZE_RESTORED)) // added SIZE_RESTORED to handle 3dfx case - return DefWindowProc(hwnd, msg, wparam, lparam); - - width = LOWORD(lparam); height = HIWORD(lparam); #ifdef _DEBUG - if(msg==WM_SIZE) { - wdxdisplay_cat.spam() << "WM_SIZE received with width:" << width << " height: " << height << " flags: " << - ((wparam == SIZE_MAXHIDE)? "SIZE_MAXHIDE " : "") << ((wparam == SIZE_MAXSHOW)? "SIZE_MAXSHOW " : "") << - ((wparam == SIZE_MINIMIZED)? "SIZE_MINIMIZED " : "") << ((wparam == SIZE_RESTORED)? "SIZE_RESTORED " : "") << - ((wparam == SIZE_MAXIMIZED)? "SIZE_MAXIMIZED " : "") << endl; - } + { + width = LOWORD(lparam); height = HIWORD(lparam); + wdxdisplay_cat.spam() << "WM_SIZE received with width:" << width << " height: " << height << " flags: " << + ((wparam == SIZE_MAXHIDE)? "SIZE_MAXHIDE " : "") << ((wparam == SIZE_MAXSHOW)? "SIZE_MAXSHOW " : "") << + ((wparam == SIZE_MINIMIZED)? "SIZE_MINIMIZED " : "") << ((wparam == SIZE_RESTORED)? "SIZE_RESTORED " : "") << + ((wparam == SIZE_MAXIMIZED)? "SIZE_MAXIMIZED " : "") << endl; + } #endif - if (_props._xsize != width || _props._ysize != height) { - DXGraphicsStateGuardian* dxgsg = DCAST(DXGraphicsStateGuardian, _gsg); - bWindowAdjustingType = Resizing; - assert(_mwindow!=NULL); - - RECT view_rect; - GetClientRect( _mwindow, &view_rect ); - ClientToScreen( _mwindow, (POINT*)&view_rect.left ); - ClientToScreen( _mwindow, (POINT*)&view_rect.right ); - assert(width == (view_rect.right - view_rect.left)); - assert(height == (view_rect.bottom - view_rect.top)); - - resized(width, height); // change _props xsize,ysize - _props._xorg = view_rect.left; // _props should reflect view rectangle - _props._yorg = view_rect.top; - } - - return DefWindowProc(hwnd, msg, wparam, lparam); - } + // old comment -- added SIZE_RESTORED to handle 3dfx case + if((_mwindow==NULL) || ((wparam != SIZE_RESTORED) && (wparam != SIZE_MAXIMIZED))) + return DefWindowProc(hwnd, msg, wparam, lparam); - case WM_SETFOCUS: - if (_dx_ready && _mouse_entry_enabled) - handle_mouse_entry(MOUSE_ENTERED,hMouseCrossIcon); - return 0; + width = LOWORD(lparam); height = HIWORD(lparam); + + if(_props._xsize != width || _props._ysize != height) { + _WindowAdjustingType = Resizing; + + // for maximized,unmaximize, need to call resize code artificially + // since no WM_EXITSIZEMOVE is generated + if(wparam==SIZE_MAXIMIZED) { + _bSizeIsMaximized=TRUE; + window_proc(hwnd, WM_EXITSIZEMOVE, 0x0,0x0); + } else if((wparam==SIZE_RESTORED)&& _bSizeIsMaximized) { + _bSizeIsMaximized=FALSE; + window_proc(hwnd, WM_EXITSIZEMOVE, 0x0,0x0); + } + } + + return DefWindowProc(hwnd, msg, wparam, lparam); + } + + case WM_SETFOCUS: + if(_dxgsg->GetDXReady() && _mouse_entry_enabled) + handle_mouse_entry(MOUSE_ENTERED,_hMouseCrossIcon); + return 0; #if 0 - case WM_WINDOWPOSCHANGING: { - LPWINDOWPOS pWindPos = (LPWINDOWPOS) lparam; - wdxdisplay_cat.spam() << "WM_WINDOWPOSCHANGING received, flags 0x" << pWindPos->flags << endl; - return DefWindowProc(hwnd, msg, wparam, lparam); - } + case WM_WINDOWPOSCHANGING: { + LPWINDOWPOS pWindPos = (LPWINDOWPOS) lparam; + wdxdisplay_cat.spam() << "WM_WINDOWPOSCHANGING received, flags 0x" << pWindPos->flags << endl; + return DefWindowProc(hwnd, msg, wparam, lparam); + } - case WM_GETMINMAXINFO: - wdxdisplay_cat.spam() << "WM_GETMINMAXINFO received\n" << endl; - return DefWindowProc(hwnd, msg, wparam, lparam); + case WM_GETMINMAXINFO: + wdxdisplay_cat.spam() << "WM_GETMINMAXINFO received\n" << endl; + return DefWindowProc(hwnd, msg, wparam, lparam); #endif - case WM_ERASEBKGND: - if(bWindowAdjustingType) - return DefWindowProc(hwnd, msg, wparam, lparam); - else return 0; // dont let GDI waste time redrawing the deflt background + case WM_ERASEBKGND: + if(_WindowAdjustingType) + return DefWindowProc(hwnd, msg, wparam, lparam); + else return 0; // dont let GDI waste time redrawing the deflt background - case WM_KILLFOCUS: - if (_dx_ready && _mouse_entry_enabled) - handle_mouse_entry(MOUSE_EXITED,hMouseCrossIcon); - return 0; + case WM_KILLFOCUS: + if(_dxgsg->GetDXReady() && _mouse_entry_enabled) + handle_mouse_entry(MOUSE_EXITED,_hMouseCrossIcon); + return 0; - default: - return DefWindowProc(hwnd, msg, wparam, lparam); - } -// IDirectDraw7::TestCooperativeLevel - + default: + return DefWindowProc(hwnd, msg, wparam, lparam); + } } @@ -523,7 +510,7 @@ window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { //////////////////////////////////////////////////////////////////// wdxGraphicsWindow:: wdxGraphicsWindow(GraphicsPipe* pipe) : GraphicsWindow(pipe) { - config(); + config(); } //////////////////////////////////////////////////////////////////// @@ -533,8 +520,8 @@ wdxGraphicsWindow(GraphicsPipe* pipe) : GraphicsWindow(pipe) { //////////////////////////////////////////////////////////////////// wdxGraphicsWindow:: wdxGraphicsWindow(GraphicsPipe* pipe, const - GraphicsWindow::Properties& props) : GraphicsWindow(pipe, props) { - config(); + GraphicsWindow::Properties& props) : GraphicsWindow(pipe, props) { + config(); } //////////////////////////////////////////////////////////////////// @@ -543,692 +530,173 @@ wdxGraphicsWindow(GraphicsPipe* pipe, const // Description: //////////////////////////////////////////////////////////////////// wdxGraphicsWindow::~wdxGraphicsWindow(void) { - AtExitFn(); -#ifdef WBD_GL_MODE - free(_visual); -#endif //WBD_GL_MODE + AtExitFn(); } - - -#ifdef WBD_GL_MODE -//////////////////////////////////////////////////////////////////// -// Function: get_config -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void wdxGraphicsWindow:: -get_config(PIXELFORMATDESCRIPTOR *visual, int attrib, int *value) { - if (visual == NULL) - return; - - switch (attrib) { - case GLX_USE_GL: - if (visual->dwFlags & (PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW)) { - if (visual->iPixelType == PFD_TYPE_COLORINDEX && - visual->cColorBits >= 24) { - *value = 0; - } else { - *value = 1; - } - } else { - *value = 0; - } - break; - case GLX_BUFFER_SIZE: - if (visual->iPixelType == PFD_TYPE_RGBA) - *value = visual->cColorBits; - else - *value = 8; - break; - case GLX_LEVEL: - *value = visual->bReserved; - break; - case GLX_RGBA: - *value = visual->iPixelType == PFD_TYPE_RGBA; - break; - case GLX_DOUBLEBUFFER: - *value = visual->dwFlags & PFD_DOUBLEBUFFER; - break; - case GLX_STEREO: - *value = visual->dwFlags & PFD_STEREO; - break; - case GLX_AUX_BUFFERS: - *value = visual->cAuxBuffers; - break; - case GLX_RED_SIZE: - *value = visual->cRedBits; - break; - case GLX_GREEN_SIZE: - *value = visual->cGreenBits; - break; - case GLX_BLUE_SIZE: - *value = visual->cBlueBits; - break; - case GLX_ALPHA_SIZE: - *value = visual->cAlphaBits; - break; - case GLX_DEPTH_SIZE: - *value = visual->cDepthBits; - break; - case GLX_STENCIL_SIZE: - *value = visual->cStencilBits; - break; - case GLX_ACCUM_RED_SIZE: - *value = visual->cAccumRedBits; - break; - case GLX_ACCUM_GREEN_SIZE: - *value = visual->cAccumGreenBits; - break; - case GLX_ACCUM_BLUE_SIZE: - *value = visual->cAccumBlueBits; - break; - case GLX_ACCUM_ALPHA_SIZE: - *value = visual->cAccumAlphaBits; - break; - } -} - - -//////////////////////////////////////////////////////////////////// -// Function: try_for_visual -// Description: This is a static function that attempts to get the -// requested visual, if it is available. It's just a -// wrapper around glXChooseVisual(). It returns the -// visual information if possible, or NULL if it is not. -//////////////////////////////////////////////////////////////////// -PIXELFORMATDESCRIPTOR* wdxGraphicsWindow:: -try_for_visual(/*wdxGraphicsPipe *pipe,*/ int mask, - int want_depth_bits, int want_color_bits) { - static const int max_attrib_list = 32; - int attrib_list[max_attrib_list]; - int n=0; - - wdxdisplay_cat.debug() - << "Trying for visual with: RGB(" << want_color_bits << ")"; - - int want_color_component_bits; - if (mask & W_ALPHA) { - want_color_component_bits = max(want_color_bits / 4, 1); - } else { - want_color_component_bits = max(want_color_bits / 3, 1); - } - - attrib_list[n++] = GLX_RGBA; - attrib_list[n++] = GLX_RED_SIZE; - attrib_list[n++] = want_color_component_bits; - attrib_list[n++] = GLX_GREEN_SIZE; - attrib_list[n++] = want_color_component_bits; - attrib_list[n++] = GLX_BLUE_SIZE; - attrib_list[n++] = want_color_component_bits; - - if (mask & W_ALPHA) { - wdxdisplay_cat.debug(false) << " ALPHA"; - attrib_list[n++] = GLX_ALPHA_SIZE; - attrib_list[n++] = want_color_component_bits; - } - if (mask & W_DOUBLE) { - wdxdisplay_cat.debug(false) << " DOUBLEBUFFER"; - attrib_list[n++] = GLX_DOUBLEBUFFER; - } - if (mask & W_STEREO) { - wdxdisplay_cat.debug(false) << " STEREO"; - attrib_list[n++] = GLX_STEREO; - } - if (mask & W_DEPTH) { - wdxdisplay_cat.debug(false) << " DEPTH(" << want_depth_bits << ")"; - attrib_list[n++] = GLX_DEPTH_SIZE; - attrib_list[n++] = want_depth_bits; - } - if (mask & W_STENCIL) { - wdxdisplay_cat.debug(false) << " STENCIL"; - attrib_list[n++] = GLX_STENCIL_SIZE; - attrib_list[n++] = 1; - } - if (mask & W_ACCUM) { - wdxdisplay_cat.debug(false) << " ACCUM"; - attrib_list[n++] = GLX_ACCUM_RED_SIZE; - attrib_list[n++] = want_color_component_bits; - attrib_list[n++] = GLX_ACCUM_GREEN_SIZE; - attrib_list[n++] = want_color_component_bits; - attrib_list[n++] = GLX_ACCUM_BLUE_SIZE; - attrib_list[n++] = want_color_component_bits; - if (mask & W_ALPHA) { - attrib_list[n++] = GLX_ACCUM_ALPHA_SIZE; - attrib_list[n++] = want_color_component_bits; - } - } - - // Terminate the list - nassertr(n < max_attrib_list, NULL); - attrib_list[n] = 0L; - - PIXELFORMATDESCRIPTOR pfd; - PIXELFORMATDESCRIPTOR *match = NULL; - bool stereo = false; - - memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR)); - pfd.nSize = (sizeof(PIXELFORMATDESCRIPTOR)); - pfd.nVersion = 1; - - // Defaults - pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW; - pfd.iPixelType = PFD_TYPE_COLORINDEX; - pfd.cColorBits = 32; - pfd.cDepthBits = 0; - - int *p = attrib_list; - while (*p) { - switch (*p) { - case GLX_USE_GL: - pfd.dwFlags |= PFD_SUPPORT_OPENGL; - break; - case GLX_LEVEL: - pfd.bReserved = *(++p); - break; - case GLX_RGBA: - pfd.iPixelType = PFD_TYPE_RGBA; - break; - case GLX_DOUBLEBUFFER: - pfd.dwFlags |= PFD_DOUBLEBUFFER; - break; - case GLX_STEREO: - stereo = true; - pfd.dwFlags |= PFD_STEREO; - break; - case GLX_AUX_BUFFERS: - pfd.cAuxBuffers = *(++p); - break; - case GLX_RED_SIZE: - pfd.cRedBits = 8; // Try to get the maximum - ++p; - break; - case GLX_GREEN_SIZE: - pfd.cGreenBits = 8; // Try to get the maximum - ++p; - break; - case GLX_BLUE_SIZE: - pfd.cBlueBits = 8; // Try to get the maximum - ++p; - break; - case GLX_ALPHA_SIZE: - pfd.cAlphaBits = 8; // Try to get the maximum - ++p; - break; - case GLX_DEPTH_SIZE: - pfd.cDepthBits = 32; // Try to get the maximum - ++p; - break; - case GLX_STENCIL_SIZE: - pfd.cStencilBits = *(++p); - break; - case GLX_ACCUM_RED_SIZE: - case GLX_ACCUM_GREEN_SIZE: - case GLX_ACCUM_BLUE_SIZE: - case GLX_ACCUM_ALPHA_SIZE: - // Only cAccumBits is used for requesting accum buffer - pfd.cAccumBits = 1; - ++p; - break; - } - ++p; - } - - int pf = ChoosePixelFormat(_hdc, &pfd); - if (pf > 0) { - match = (PIXELFORMATDESCRIPTOR *)malloc(sizeof(PIXELFORMATDESCRIPTOR)); - DescribePixelFormat(_hdc, pf, sizeof(PIXELFORMATDESCRIPTOR), match); - - // ChoosePixelFormat is dumb about stereo - if (stereo) { - if (!(match->dwFlags & PFD_STEREO)) { - wdxdisplay_cat.info() - << "wdxGraphicsWindow::try_for_visual() - request for " - << "stereo failed" << endl; - } - } - } - - return match; -} - - -//////////////////////////////////////////////////////////////////// -// Function: choose visual -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void wdxGraphicsWindow::choose_visual(void) { - // don't need pipe... wdxGraphicsPipe* pipe = DCAST(wdxGraphicsPipe, _pipe); - - int mask = _props._mask; - int want_depth_bits = _props._want_depth_bits; - int want_color_bits = _props._want_color_bits; - - if (mask & W_MULTISAMPLE) { - wdxdisplay_cat.info() - << "wdxGraphicsWindow::choose_visual() - multisample not supported" - << endl; - mask &= ~W_MULTISAMPLE; - } - - _visual = try_for_visual(/*pipe,*/ mask, want_depth_bits, want_color_bits); - - // This is the severity level at which we'll report the details of - // the visual we actually do find. Normally, it's debug-level - // information: we don't care about that much detail. - NotifySeverity show_visual_severity = NS_debug; - - if (_visual == NULL) { - wdxdisplay_cat.info() - << "wdxGraphicsWindow::choose_visual() - visual with requested\n" - << " capabilities not found; trying for lesser visual.\n"; - - // If we're unable to get the visual we asked for, however, we - // probably *do* care to know the details about what we actually - // got, even if we don't have debug mode set. So we'll report the - // visual at a higher level. - show_visual_severity = NS_info; - - bool special_size_request = - (want_depth_bits != 1 || want_color_bits != 1); - - // We try to be smart about choosing a close match for the visual. - // First, we'll eliminate some of the more esoteric options one at - // a time, then two at a time, and finally we'll try just the bare - // minimum. - - if (special_size_request) { - // Actually, first we'll eliminate all of the minimum sizes, to - // try to open a window with all of the requested options, but - // maybe not as many bits in some options as we'd like. - _visual = try_for_visual(/*pipe,*/ mask); - } - - if (_visual == NULL) { - // Ok, not good enough. Now try to eliminate options, but keep - // as many bits as we asked for. - - // This array keeps the bitmasks of options that we pull out of - // the requested mask, in order. - - static const int strip_properties[] = { - // One esoteric option removed. - W_MULTISAMPLE, - W_STENCIL, - W_ACCUM, - W_ALPHA, - W_STEREO, - - // Two esoteric options removed. - W_STENCIL | W_MULTISAMPLE, - W_ACCUM | W_MULTISAMPLE, - W_ALPHA | W_MULTISAMPLE, - W_STEREO | W_MULTISAMPLE, - W_STENCIL | W_ACCUM, - W_ALPHA | W_STEREO, - W_STENCIL | W_ACCUM | W_MULTISAMPLE, - W_ALPHA | W_STEREO | W_MULTISAMPLE, - - // All esoteric options removed. - W_STENCIL | W_ACCUM | W_ALPHA | W_STEREO | W_MULTISAMPLE, - - // All esoteric options, plus some we'd really really prefer, - // removed. - W_STENCIL | W_ACCUM | W_ALPHA | W_STEREO | W_MULTISAMPLE | W_DOUBLE, - - // A zero marks the end of the array. - 0 - }; - - set tried_masks; - tried_masks.insert(mask); - - int i; - for (i = 0; _visual == NULL && strip_properties[i] != 0; i++) { - int new_mask = mask & ~strip_properties[i]; - if (tried_masks.insert(new_mask).second) { - _visual = try_for_visual(/*pipe,*/ new_mask, want_depth_bits, - want_color_bits); - } - } - - if (special_size_request) { - tried_masks.clear(); - tried_masks.insert(mask); - - if (_visual == NULL) { - // Try once more, this time eliminating all of the size - // requests. - for (i = 0; _visual == NULL && strip_properties[i] != 0; i++) { - int new_mask = mask & ~strip_properties[i]; - if (tried_masks.insert(new_mask).second) { - _visual = try_for_visual(/*pipe,*/ new_mask); - } - } - } - } - - if (_visual == NULL) { - // Here's our last-ditch desparation attempt: give us any GLX - // visual at all! - _visual = try_for_visual(/*pipe,*/ 0); - } - - if (_visual == NULL) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::choose_visual() - could not get any " - "visual." << endl; - exit(1); - } - } - } - - if (wdxdisplay_cat.is_on(show_visual_severity)) { - int render_mode, double_buffer, stereo, red_size, green_size, blue_size, - alpha_size, ared_size, agreen_size, ablue_size, aalpha_size, - depth_size, stencil_size; - - get_config(_visual, GLX_RGBA, &render_mode); - get_config(_visual, GLX_DOUBLEBUFFER, &double_buffer); - get_config(_visual, GLX_STEREO, &stereo); - get_config(_visual, GLX_RED_SIZE, &red_size); - get_config(_visual, GLX_GREEN_SIZE, &green_size); - get_config(_visual, GLX_BLUE_SIZE, &blue_size); - get_config(_visual, GLX_ALPHA_SIZE, &alpha_size); - get_config(_visual, GLX_ACCUM_RED_SIZE, &ared_size); - get_config(_visual, GLX_ACCUM_GREEN_SIZE, &agreen_size); - get_config(_visual, GLX_ACCUM_BLUE_SIZE, &ablue_size); - get_config(_visual, GLX_ACCUM_ALPHA_SIZE, &aalpha_size); - get_config(_visual, GLX_DEPTH_SIZE, &depth_size); - get_config(_visual, GLX_STENCIL_SIZE, &stencil_size); - - wdxdisplay_cat.out(show_visual_severity) - << "GLX Visual Info (# bits of each):" << endl - << " RGBA: " << red_size << " " << green_size << " " << blue_size - << " " << alpha_size << endl - << " Accum RGBA: " << ared_size << " " << agreen_size << " " - << ablue_size << " " << aalpha_size << endl - << " Depth: " << depth_size << endl - << " Stencil: " << stencil_size << endl - << " DoubleBuffer? " << double_buffer << endl - << " Stereo? " << stereo << endl; - } -} - - -/* -#else // DX Version of try_for_visual called from the Callback function to EnumDisplayModes -bool wdxGraphicsWindow:: -try_for_visual(GraphicsWindow::Properties *props) -{ - static const int max_attrib_list = 32; - int attrib_list[max_attrib_list]; - int n=0; - - wdxdisplay_cat.debug() - << "Trying for visual with: RGB(" << want_color_bits << ")"; - - int want_color_component_bits; - if (mask & W_ALPHA) { - want_color_component_bits = max(props->want_color_bits / 4, 1); - } else { - want_color_component_bits = max(props->want_color_bits / 3, 1); - } - - attrib_list[n++] = GLX_RGBA; - attrib_list[n++] = GLX_RED_SIZE; - attrib_list[n++] = want_color_component_bits; - attrib_list[n++] = GLX_GREEN_SIZE; - attrib_list[n++] = want_color_component_bits; - attrib_list[n++] = GLX_BLUE_SIZE; - attrib_list[n++] = want_color_component_bits; - - if (mask & W_ALPHA) { - wdxdisplay_cat.debug(false) << " ALPHA"; - attrib_list[n++] = GLX_ALPHA_SIZE; - attrib_list[n++] = want_color_component_bits; - } - if (mask & W_DOUBLE) { - wdxdisplay_cat.debug(false) << " DOUBLEBUFFER"; - attrib_list[n++] = GLX_DOUBLEBUFFER; - } - if (mask & W_STEREO) { - wdxdisplay_cat.debug(false) << " STEREO"; - attrib_list[n++] = GLX_STEREO; - } - if (mask & W_DEPTH) { - wdxdisplay_cat.debug(false) << " DEPTH(" << want_depth_bits << ")"; - attrib_list[n++] = GLX_DEPTH_SIZE; - attrib_list[n++] = want_depth_bits; - } - if (mask & W_STENCIL) { - wdxdisplay_cat.debug(false) << " STENCIL"; - attrib_list[n++] = GLX_STENCIL_SIZE; - attrib_list[n++] = 1; - } - if (mask & W_ACCUM) { - wdxdisplay_cat.debug(false) << " ACCUM"; - attrib_list[n++] = GLX_ACCUM_RED_SIZE; - attrib_list[n++] = want_color_component_bits; - attrib_list[n++] = GLX_ACCUM_GREEN_SIZE; - attrib_list[n++] = want_color_component_bits; - attrib_list[n++] = GLX_ACCUM_BLUE_SIZE; - attrib_list[n++] = want_color_component_bits; - if (mask & W_ALPHA) { - attrib_list[n++] = GLX_ACCUM_ALPHA_SIZE; - attrib_list[n++] = want_color_component_bits; - } - } - - // Terminate the list - nassertr(n < max_attrib_list, NULL); - attrib_list[n] = 0L; - - bool stereo = false; - - int *p = attrib_list; - while (*p) { - switch (*p) { - case GLX_LEVEL: - break; - case GLX_RGBA: - break; - case GLX_DOUBLEBUFFER: - break; - case GLX_STEREO: - stereo = true; - break; - case GLX_AUX_BUFFERS: - break; - case GLX_RED_SIZE: - ++p; - break; - case GLX_GREEN_SIZE: - ++p; - break; - case GLX_BLUE_SIZE: - ++p; - break; - case GLX_ALPHA_SIZE: - ++p; - break; - case GLX_DEPTH_SIZE: - ++p; - break; - case GLX_STENCIL_SIZE: - ++p; - break; - case GLX_ACCUM_RED_SIZE: - case GLX_ACCUM_GREEN_SIZE: - case GLX_ACCUM_BLUE_SIZE: - case GLX_ACCUM_ALPHA_SIZE: - ++p; - break; - } - ++p; - } - - return TRUE; -} -*/ -#endif //WBD_GL_MODE - - - //////////////////////////////////////////////////////////////////// // Function: config // Access: -// Description: Set up Direct X +// Description: Set up win32 window //////////////////////////////////////////////////////////////////// void wdxGraphicsWindow::config(void) { - GraphicsWindow::config(); + GraphicsWindow::config(); - global_dxwin = this; // kludge to get window proc working + global_dxwin = this; // kludge to get window proc working - _dx_ready = false; - _mwindow = NULL; - _gsg = NULL; - _hParentWindow = NULL; + _mwindow = NULL; + _gsg = _dxgsg = NULL; + _hParentWindow = NULL; - // Create a GSG to manage the graphics - make_gsg(); - HINSTANCE hinstance = GetModuleHandle(NULL); + _WindowAdjustingType = NotAdjusting; + _hMouseCrossIcon = NULL; + _bSizeIsMaximized=FALSE; - WNDCLASS wc; + // Create a GSG to manage the graphics + make_gsg(); + if(_gsg==NULL) { + wdxdisplay_cat.error() << "DXGSG creation failed!\n"; + exit(1); + } + _dxgsg = DCAST(DXGraphicsStateGuardian, _gsg); - // Clear before filling in window structure! - ZeroMemory(&wc, sizeof(WNDCLASS)); - wc.style = CS_HREDRAW | CS_VREDRAW; //CS_OWNDC; - wc.lpfnWndProc = (WNDPROC) static_window_proc; - wc.hInstance = hinstance; + HINSTANCE hinstance = GetModuleHandle(NULL); + WNDCLASS wc; - string windows_icon_filename = get_icon_filename().to_os_specific(); + // Clear before filling in window structure! + ZeroMemory(&wc, sizeof(WNDCLASS)); + wc.style = CS_HREDRAW | CS_VREDRAW; //CS_OWNDC; + wc.lpfnWndProc = (WNDPROC) static_window_proc; + wc.hInstance = hinstance; - if(!windows_icon_filename.empty()) { - // Note: LoadImage seems to cause win2k internal heap corruption (outputdbgstr warnings) - // if icon is more than 8bpp - wc.hIcon = (HICON) LoadImage(NULL, windows_icon_filename.c_str(), IMAGE_ICON, 0, 0, LR_LOADFROMFILE); - } else { - wc.hIcon = NULL; // use default app icon - } + string windows_icon_filename = get_icon_filename().to_os_specific(); - wc.hCursor = LoadCursor(NULL, IDC_CROSS); - wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); - wc.lpszMenuName = NULL; - wc.lpszClassName = "wdxDisplay"; + if(!windows_icon_filename.empty()) { + // Note: LoadImage seems to cause win2k internal heap corruption (outputdbgstr warnings) + // if icon is more than 8bpp + wc.hIcon = (HICON) LoadImage(NULL, windows_icon_filename.c_str(), IMAGE_ICON, 0, 0, LR_LOADFROMFILE); + } else { + wc.hIcon = NULL; // use default app icon + } - if (!RegisterClass(&wc)) { - wdxdisplay_cat.fatal() << "wdxGraphicsWindow:: could not register window class" << endl; - exit(1); - } + wc.hCursor = LoadCursor(NULL, IDC_CROSS); + wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); + wc.lpszMenuName = NULL; + wc.lpszClassName = "wdxDisplay"; - wdxGraphicsPipe* pipe = DCAST(wdxGraphicsPipe, _pipe); + if(!RegisterClass(&wc)) { + wdxdisplay_cat.fatal() << "wdxGraphicsWindow:: could not register window class" << endl; + exit(1); + } - int style; - RECT win_rect; - SetRect(&win_rect, _props._xorg, _props._yorg, _props._xorg + _props._xsize, - _props._yorg + _props._ysize); + wdxGraphicsPipe* pipe = DCAST(wdxGraphicsPipe, _pipe); + + int style; + RECT win_rect; + SetRect(&win_rect, _props._xorg, _props._yorg, _props._xorg + _props._xsize, + _props._yorg + _props._ysize); // rect now contains the coords for the entire window, not the client - if (dx_full_screen) { - _mwindow = CreateWindow("wdxDisplay", _props._title.c_str(), - WS_POPUP, 0, 0, _props._xsize,_props._ysize, - NULL, NULL, hinstance, 0); - } else { - if (_props._border) - style = WS_OVERLAPPEDWINDOW; - else - style = WS_POPUP | WS_MAXIMIZE; + if(dx_full_screen) { + _mwindow = CreateWindow("wdxDisplay", _props._title.c_str(), + WS_POPUP, 0, 0, _props._xsize,_props._ysize, + NULL, NULL, hinstance, 0); + } else { + if(_props._border) + style = WS_OVERLAPPEDWINDOW; + else + style = WS_POPUP | WS_MAXIMIZE; - AdjustWindowRect(&win_rect, style, FALSE); //compute window size based on desired client area size + AdjustWindowRect(&win_rect, style, FALSE); //compute window size based on desired client area size // make sure origin is on screen - if (win_rect.left < 0) { win_rect.right -= win_rect.left; win_rect.left = 0; } - if (win_rect.top < 0) { win_rect.bottom -= win_rect.top; win_rect.top = 0; } + if(win_rect.left < 0) { + win_rect.right -= win_rect.left; win_rect.left = 0; + } + if(win_rect.top < 0) { + win_rect.bottom -= win_rect.top; win_rect.top = 0; + } - _mwindow = CreateWindow("wdxDisplay", _props._title.c_str(), - style, win_rect.left, win_rect.top, win_rect.right-win_rect.left, - win_rect.bottom-win_rect.top, - NULL, NULL, hinstance, 0); - } + _mwindow = CreateWindow("wdxDisplay", _props._title.c_str(), + style, win_rect.left, win_rect.top, win_rect.right-win_rect.left, + win_rect.bottom-win_rect.top, + NULL, NULL, hinstance, 0); + } - if (!_mwindow) { - wdxdisplay_cat.fatal() << "wdxGraphicsWindow::config() - failed to create Mwindow" << endl; - exit(1); - } + if(!_mwindow) { + wdxdisplay_cat.fatal() << "wdxGraphicsWindow::config() - failed to create Mwindow" << endl; + exit(1); + } - _hParentWindow=GetForegroundWindow(); + _hParentWindow=GetForegroundWindow(); // move window to top of zorder - SetWindowPos(_mwindow, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSENDCHANGING | SWP_NOSIZE); + SetWindowPos(_mwindow, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSENDCHANGING | SWP_NOSIZE); - _hdc = GetDC(_mwindow); + _hdc = GetDC(_mwindow); - dx_setup(); - - _mouse_input_enabled = false; - _mouse_motion_enabled = false; - _mouse_passive_motion_enabled = false; - _mouse_entry_enabled = false; - _entry_state = -1; + dx_setup(); + + _mouse_input_enabled = false; + _mouse_motion_enabled = false; + _mouse_passive_motion_enabled = false; + _mouse_entry_enabled = false; + _entry_state = -1; // Enable detection of mouse input - enable_mouse_input(true); - enable_mouse_motion(true); - enable_mouse_passive_motion(true); + enable_mouse_input(true); + enable_mouse_motion(true); + enable_mouse_passive_motion(true); // Now indicate that we have our keyboard/mouse device ready. - GraphicsWindowInputDevice device = - GraphicsWindowInputDevice::pointer_and_keyboard("keyboard/mouse"); - _input_devices.push_back(device); + GraphicsWindowInputDevice device = + GraphicsWindowInputDevice::pointer_and_keyboard("keyboard/mouse"); + _input_devices.push_back(device); - ShowWindow(_mwindow, SW_SHOWNORMAL); - ShowWindow(_mwindow, SW_SHOWNORMAL); // call twice to override STARTUPINFO value, which may be set to hidden initially by emacs + ShowWindow(_mwindow, SW_SHOWNORMAL); + ShowWindow(_mwindow, SW_SHOWNORMAL); // call twice to override STARTUPINFO value, which may be set to hidden initially by emacs // UpdateWindow( _mwindow ); } HRESULT CALLBACK EnumDevicesCallback(LPSTR pDeviceDescription, LPSTR pDeviceName, - LPD3DDEVICEDESC7 pD3DDeviceDesc,LPVOID pContext) { - D3DDEVICEDESC7 *pd3ddevs = (D3DDEVICEDESC7 *)pContext; + LPD3DDEVICEDESC7 pD3DDeviceDesc,LPVOID pContext) { + D3DDEVICEDESC7 *pd3ddevs = (D3DDEVICEDESC7 *)pContext; #ifdef _DEBUG - wdxdisplay_cat.spam() << "wdxGraphicsWindow: Enumerating Device " << pDeviceName << " : " << pDeviceDescription << endl; + wdxdisplay_cat.spam() << "wdxGraphicsWindow: Enumerating Device " << pDeviceName << " : " << pDeviceDescription << endl; #endif - // only saves hal and tnl devs + // only saves hal and tnl devs - if(IsEqualGUID(pD3DDeviceDesc->deviceGUID,IID_IDirect3DHALDevice)) { - CopyMemory(pd3ddevs,pD3DDeviceDesc,sizeof(D3DDEVICEDESC7)); - } else if(IsEqualGUID(pD3DDeviceDesc->deviceGUID,IID_IDirect3DTnLHalDevice)) { - CopyMemory(&pd3ddevs[1],pD3DDeviceDesc,sizeof(D3DDEVICEDESC7)); - } - return DDENUMRET_OK; + if(IsEqualGUID(pD3DDeviceDesc->deviceGUID,IID_IDirect3DHALDevice)) { + CopyMemory(pd3ddevs,pD3DDeviceDesc,sizeof(D3DDEVICEDESC7)); + } else if(IsEqualGUID(pD3DDeviceDesc->deviceGUID,IID_IDirect3DTnLHalDevice)) { + CopyMemory(&pd3ddevs[1],pD3DDeviceDesc,sizeof(D3DDEVICEDESC7)); + } + return DDENUMRET_OK; } HRESULT WINAPI EnumDisplayModesCallBack(LPDDSURFACEDESC2 lpDDSurfaceDesc,LPVOID lpContext) { - DWORD *pDDBDMask = (DWORD*)lpContext; + DWORD *pDDBDMask = (DWORD*)lpContext; - *pDDBDMask |= BitDepth_2_DDBDMask(lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount); - return DDENUMRET_OK; + *pDDBDMask |= BitDepth_2_DDBDMask(lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount); + return DDENUMRET_OK; } BOOL WINAPI DriverEnumCallback( GUID* pGUID, TCHAR* strDesc,TCHAR* strName, - VOID *argptr, HMONITOR hm) { - if(hm!=NULL) // skip over non-primary display devices - return DDENUMRET_OK; + VOID *argptr, HMONITOR hm) { + if(hm!=NULL) // skip over non-primary display devices + return DDENUMRET_OK; - // primary display driver will have NULL guid - // ignore that and save any non-null value, whic - // indicates a secondary driver, which is usually voodoo1/2 - if(pGUID!=NULL) { - memcpy(argptr,pGUID,sizeof(GUID)); - } + // primary display driver will have NULL guid + // ignore that and save any non-null value, whic + // indicates a secondary driver, which is usually voodoo1/2 + if(pGUID!=NULL) { + memcpy(argptr,pGUID,sizeof(GUID)); + } - return DDENUMRET_OK; + return DDENUMRET_OK; } - //////////////////////////////////////////////////////////////////// // Function: dx_setup // Description: Set up the DirectX environment. The size of the @@ -1237,193 +705,192 @@ BOOL WINAPI DriverEnumCallback( GUID* pGUID, TCHAR* strDesc,TCHAR* strName, // structure will be set accordingly. //////////////////////////////////////////////////////////////////// void wdxGraphicsWindow:: -dx_setup() -{ - LPDIRECTDRAWSURFACE7 pBackDDSurf; - LPDIRECTDRAWSURFACE7 pZDDSurf; - LPDIRECT3D7 pD3DI; - LPDIRECT3DDEVICE7 pD3DDevice; - LPDIRECTDRAWSURFACE7 pPrimaryDDSurf; - LPDIRECTDRAW7 pDD; - RECT view_rect; - int i; - HRESULT hr; - DX_DECLARE_CLEAN( DDSURFACEDESC2, SurfaceDesc ); +dx_setup() { + LPDIRECTDRAWSURFACE7 pBackDDSurf; + LPDIRECTDRAWSURFACE7 pZDDSurf; + LPDIRECT3D7 pD3DI; + LPDIRECT3DDEVICE7 pD3DDevice; + LPDIRECTDRAWSURFACE7 pPrimaryDDSurf; + LPDIRECTDRAW7 pDD; + RECT view_rect; + int i; + HRESULT hr; + DX_DECLARE_CLEAN( DDSURFACEDESC2, SurfaceDesc ); - // Check for DirectX 7 by looking for DirectDrawCreateEx - - HINSTANCE DDHinst = LoadLibrary( "DDRAW.DLL" ); - if( DDHinst == 0 ) { - wdxdisplay_cat.fatal() << "wdxGraphicsWindow::config() - DDRAW.DLL doesn't exist!" << endl; - exit(1); - } - - if(NULL == GetProcAddress( DDHinst, "DirectDrawCreateEx" )) { - wdxdisplay_cat.fatal() << "wdxGraphicsWindow::config() - Panda currently requires DirectX 7.0!" << endl; - exit(1); - } + // Check for DirectX 7 by looking for DirectDrawCreateEx - GUID DriverGUID; - ZeroMemory(&DriverGUID,sizeof(GUID)); + HINSTANCE DDHinst = LoadLibrary( "DDRAW.DLL" ); + if(DDHinst == 0) { + wdxdisplay_cat.fatal() << "wdxGraphicsWindow::config() - DDRAW.DLL doesn't exist!" << endl; + exit(1); + } - // search for early voodoo-type non-primary display drivers - // if they exist, use them for 3D (could examine 3D devices on all - // drivers and pick the best one, but I'll assume the computer setuper knows what he's doing) - if( hr = DirectDrawEnumerateEx( DriverEnumCallback, &DriverGUID, DDENUM_NONDISPLAYDEVICES )) { - wdxdisplay_cat.fatal() << "wdxGraphicsWindow::config() - DirectDrawEnumerateEx failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + if(NULL == GetProcAddress( DDHinst, "DirectDrawCreateEx" )) { + wdxdisplay_cat.fatal() << "wdxGraphicsWindow::config() - Panda currently requires at least DirectX 7.0!" << endl; + exit(1); + } - GUID *pOurDriverGUID=NULL; - if(DriverGUID.Data1 != 0x0) { // assumes no driver guid ever starts with 0, so 0 means Enum found no voodoo-type device - pOurDriverGUID=&DriverGUID; - } + GUID DriverGUID; + ZeroMemory(&DriverGUID,sizeof(GUID)); - // Create the Direct Draw Object - hr = DirectDrawCreateEx(pOurDriverGUID, (void **)&pDD, IID_IDirectDraw7, NULL); - if (hr != DD_OK) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::config() - DirectDrawCreateEx failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } - - FreeLibrary(DDHinst); //undo LoadLib above, decrement ddrawl.dll refcnt (after DDrawCreate, since dont want to unload/reload) - + // search for early voodoo-type non-primary display drivers + // if they exist, use them for 3D (could examine 3D devices on all + // drivers and pick the best one, but I'll assume the computer setuper knows what he's doing) + if(hr = DirectDrawEnumerateEx( DriverEnumCallback, &DriverGUID, DDENUM_NONDISPLAYDEVICES )) { + wdxdisplay_cat.fatal() << "wdxGraphicsWindow::config() - DirectDrawEnumerateEx failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } - DDDEVICEIDENTIFIER2 dddi; - pDD->GetDeviceIdentifier(&dddi,0x0); + GUID *pOurDriverGUID=NULL; + if(DriverGUID.Data1 != 0x0) { // assumes no driver guid ever starts with 0, so 0 means Enum found no voodoo-type device + pOurDriverGUID=&DriverGUID; + } + + // Create the Direct Draw Object + hr = DirectDrawCreateEx(pOurDriverGUID, (void **)&pDD, IID_IDirectDraw7, NULL); + if(hr != DD_OK) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::config() - DirectDrawCreateEx failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + + FreeLibrary(DDHinst); //undo LoadLib above, decrement ddrawl.dll refcnt (after DDrawCreate, since dont want to unload/reload) + + + DDDEVICEIDENTIFIER2 dddi; + pDD->GetDeviceIdentifier(&dddi,0x0); #ifdef _DEBUG - wdxdisplay_cat.debug() - << " GfxCard: " << dddi.szDescription << "; VendorID: " <QueryInterface( IID_IDirect3D7, (VOID**)&pD3DI ); - if (hr != DD_OK) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::config() - QI for D3D failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + // imperfect method to ID NVid, could also scan desc str, but that isnt fullproof either + BOOL bIsNvidia = (dddi.dwVendorId==4318) || (dddi.dwVendorId==4818); - // just look for HAL and TnL devices right now. I dont think - // we have any interest in the sw rasts at this point - - D3DDEVICEDESC7 d3ddevs[2]; // put HAL in 0, TnL in 1 - ZeroMemory(d3ddevs,2*sizeof(D3DDEVICEDESC7)); - - hr = pD3DI->EnumDevices(EnumDevicesCallback,d3ddevs); - if (hr != DD_OK) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::config() - EnumDevices failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } - - if(!(d3ddevs[0].dwDevCaps & D3DDEVCAPS_HWRASTERIZATION )) { - wdxdisplay_cat.fatal() << "wdxGraphicsWindow:: No 3D HW present, exiting..." << endl; - exit(1); - } - - DX_DECLARE_CLEAN(DDCAPS,DDCaps); - pDD->GetCaps(&DDCaps,NULL); + // Query DirectDraw for access to Direct3D - DWORD dwRenderWidth,dwRenderHeight; + hr = pDD->QueryInterface( IID_IDirect3D7, (VOID**)&pD3DI ); + if(hr != DD_OK) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::config() - QI for D3D failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } - if (dx_full_screen) { + // just look for HAL and TnL devices right now. I dont think + // we have any interest in the sw rasts at this point + + D3DDEVICEDESC7 d3ddevs[2]; // put HAL in 0, TnL in 1 + ZeroMemory(d3ddevs,2*sizeof(D3DDEVICEDESC7)); + + hr = pD3DI->EnumDevices(EnumDevicesCallback,d3ddevs); + if(hr != DD_OK) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::config() - EnumDevices failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + + if(!(d3ddevs[0].dwDevCaps & D3DDEVCAPS_HWRASTERIZATION )) { + wdxdisplay_cat.fatal() << "wdxGraphicsWindow:: No 3D HW present, exiting..." << endl; + exit(1); + } + + DX_DECLARE_CLEAN(DDCAPS,DDCaps); + pDD->GetCaps(&DDCaps,NULL); + + DWORD dwRenderWidth,dwRenderHeight; + + if(dx_full_screen) { dwRenderWidth = _props._xsize; dwRenderHeight = _props._ysize; _props._xorg = _props._yorg = 0; SetRect(&view_rect, _props._xorg, _props._yorg, _props._xsize, _props._ysize); - // CREATE FULL SCREEN BUFFERS - // Store the rectangle which contains the renderer + // CREATE FULL SCREEN BUFFERS + // Store the rectangle which contains the renderer - DWORD dwSupportedBitDepthMask=0x0; // uses DDBD_... - DX_DECLARE_CLEAN(DDSURFACEDESC2,ddsd_search); - ddsd_search.dwFlags = DDSD_HEIGHT | DDSD_WIDTH; - ddsd_search.dwWidth=dwRenderWidth; ddsd_search.dwHeight=dwRenderHeight; + DWORD dwSupportedBitDepthMask=0x0; // uses DDBD_... + DX_DECLARE_CLEAN(DDSURFACEDESC2,ddsd_search); + ddsd_search.dwFlags = DDSD_HEIGHT | DDSD_WIDTH; + ddsd_search.dwWidth=dwRenderWidth; ddsd_search.dwHeight=dwRenderHeight; - if(FAILED(hr= pDD->EnumDisplayModes(0x0,&ddsd_search,&dwSupportedBitDepthMask,EnumDisplayModesCallBack))) { + if(FAILED(hr= pDD->EnumDisplayModes(0x0,&ddsd_search,&dwSupportedBitDepthMask,EnumDisplayModesCallBack))) { wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::EnumDisplayModes failed, result = " << ConvD3DErrorToString(hr) << endl; + << "wdxGraphicsWindow::EnumDisplayModes failed, result = " << ConvD3DErrorToString(hr) << endl; exit(1); - } + } - DWORD dwFullScreenBitDepth; + DWORD dwFullScreenBitDepth; - // Now we try to figure out if we can use requested screen resolution and best - // rendertarget bpp and still have at least 2 meg of texture vidmem + // Now we try to figure out if we can use requested screen resolution and best + // rendertarget bpp and still have at least 2 meg of texture vidmem - // Get Current VidMem avail. Note this is only an estimate, when we switch to fullscreen - // mode from desktop, more vidmem will be available (typically 1.2 meg). I dont want - // to switch to fullscreen more than once due to the annoying monitor flicker, so try - // to figure out optimal mode using this estimate - DDSCAPS2 ddsCaps; - DWORD dwTotal,dwFree; - ZeroMemory(&ddsCaps,sizeof(DDSCAPS2)); - ddsCaps.dwCaps = DDSCAPS_VIDEOMEMORY; //set internally by DX anyway, dont think this any different than 0x0 + // Get Current VidMem avail. Note this is only an estimate, when we switch to fullscreen + // mode from desktop, more vidmem will be available (typically 1.2 meg). I dont want + // to switch to fullscreen more than once due to the annoying monitor flicker, so try + // to figure out optimal mode using this estimate + DDSCAPS2 ddsCaps; + DWORD dwTotal,dwFree; + ZeroMemory(&ddsCaps,sizeof(DDSCAPS2)); + ddsCaps.dwCaps = DDSCAPS_VIDEOMEMORY; //set internally by DX anyway, dont think this any different than 0x0 - if( FAILED( hr = pDD->GetAvailableVidMem(&ddsCaps,&dwTotal,&dwFree))) { - wdxdisplay_cat.debug() << "wdxGraphicsWindow::GetAvailableVidMem failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + if(FAILED( hr = pDD->GetAvailableVidMem(&ddsCaps,&dwTotal,&dwFree))) { + wdxdisplay_cat.debug() << "wdxGraphicsWindow::GetAvailableVidMem failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } #ifdef _DEBUG - wdxdisplay_cat.debug() << "before FullScreen switch: GetAvailableVidMem returns Total: " << dwTotal/1000000.0 << " Free: " << dwFree/1000000.0 << endl; + wdxdisplay_cat.debug() << "before FullScreen switch: GetAvailableVidMem returns Total: " << dwTotal/1000000.0 << " Free: " << dwFree/1000000.0 << endl; #endif - // note: this chooses 32bpp, which may not be preferred over 16 for memory & speed reasons - if((dwSupportedBitDepthMask & DDBD_32) && (d3ddevs[0].dwDeviceRenderBitDepth & DDBD_32)) { - dwFullScreenBitDepth=32; // go for 32bpp if its avail - } else if((dwSupportedBitDepthMask & DDBD_24) && (d3ddevs[0].dwDeviceRenderBitDepth & DDBD_24)) { - dwFullScreenBitDepth=24; // go for 24bpp if its avail - } else if((dwSupportedBitDepthMask & DDBD_16) && (d3ddevs[0].dwDeviceRenderBitDepth & DDBD_16)) { - dwFullScreenBitDepth=16; // do 16bpp - } else { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::config() - No Supported FullScreen resolutions at " << dwRenderWidth << "x" << dwRenderHeight << endl; - exit(1); - } + // note: this chooses 32bpp, which may not be preferred over 16 for memory & speed reasons + if((dwSupportedBitDepthMask & DDBD_32) && (d3ddevs[0].dwDeviceRenderBitDepth & DDBD_32)) { + dwFullScreenBitDepth=32; // go for 32bpp if its avail + } else if((dwSupportedBitDepthMask & DDBD_24) && (d3ddevs[0].dwDeviceRenderBitDepth & DDBD_24)) { + dwFullScreenBitDepth=24; // go for 24bpp if its avail + } else if((dwSupportedBitDepthMask & DDBD_16) && (d3ddevs[0].dwDeviceRenderBitDepth & DDBD_16)) { + dwFullScreenBitDepth=16; // do 16bpp + } else { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::config() - No Supported FullScreen resolutions at " << dwRenderWidth << "x" << dwRenderHeight << endl; + exit(1); + } - // hack: figuring out exactly what res to use is tricky, instead I will - // just use 640x480 if we have < 3 meg avail + // hack: figuring out exactly what res to use is tricky, instead I will + // just use 640x480 if we have < 3 meg avail + +#define LOWVIDMEMTHRESHOLD 3500000 + if(dwFree< LOWVIDMEMTHRESHOLD) { + // we're going to need 800x600 or 640x480 at 16 bit to save enough tex vidmem + dwFullScreenBitDepth=16; // do 16bpp + dwRenderWidth=640; + dwRenderHeight=480; + wdxdisplay_cat.debug() << "wdxGraphicsWindow:: "<>3); - int memleft = dwFree-rendertargetmem*2; //*2 to handle backbuf/zbuf + // we think we need to reserve at least 2 megs of vidmem for textures. + // to do this, reduce buffer bitdepth if possible +#define RESERVEDTEXVIDMEM 2000000 - if(memleft < RESERVEDTEXVIDMEM) { - dwFullScreenBitDepth=16; - wdxdisplay_cat.debug() << "wdxGraphicsWindow:: using 16bpp rendertargets to save tex vidmem\n"; - assert((dwSupportedBitDepthMask & DDBD_16) && (d3ddevs[0].dwDeviceRenderBitDepth & DDBD_16)); // probably a safe assumption - rendertargetmem=dwRenderWidth*dwRenderHeight*(dwFullScreenBitDepth>>3); - memleft = dwFree-rendertargetmem*2; + int rendertargetmem=dwRenderWidth*dwRenderHeight*(dwFullScreenBitDepth>>3); + int memleft = dwFree-rendertargetmem*2; //*2 to handle backbuf/zbuf - // BUGBUG: if we still cant reserve 2 megs of vidmem, need to auto-reduce the scrn res - if(memleft < RESERVEDTEXVIDMEM) - wdxdisplay_cat.debug() << "wdxGraphicsWindow:: XXXXXX WARNING: cant reserve 2MB of tex vidmem. only " << memleft << " bytes available. Need to rewrite wdxdisplay to try lower resolutions XXXXXXXXXXXXXXXXXXXX\n"; - } + if(memleft < RESERVEDTEXVIDMEM) { + dwFullScreenBitDepth=16; + wdxdisplay_cat.debug() << "wdxGraphicsWindow:: using 16bpp rendertargets to save tex vidmem\n"; + assert((dwSupportedBitDepthMask & DDBD_16) && (d3ddevs[0].dwDeviceRenderBitDepth & DDBD_16)); // probably a safe assumption + rendertargetmem=dwRenderWidth*dwRenderHeight*(dwFullScreenBitDepth>>3); + memleft = dwFree-rendertargetmem*2; + + // BUGBUG: if we still cant reserve 2 megs of vidmem, need to auto-reduce the scrn res + if(memleft < RESERVEDTEXVIDMEM) + wdxdisplay_cat.debug() << "wdxGraphicsWindow:: XXXXXX WARNING: cant reserve 2MB of tex vidmem. only " << memleft << " bytes available. Need to rewrite wdxdisplay to try lower resolutions XXXXXXXXXXXXXXXXXXXX\n"; + } #endif @@ -1433,94 +900,92 @@ dx_setup() // if(dx_preserve_fpu_state) // SCL_FPUFlag = DDSCL_FPUPRESERVE; // tell d3d to preserve the fpu state across calls. this hurts perf, but is good for dbgging - if(FAILED(hr = pDD->SetCooperativeLevel(_mwindow, SCL_FPUFlag | DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT ))) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::config() - SetCooperativeLevel failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + if(FAILED(hr = pDD->SetCooperativeLevel(_mwindow, SCL_FPUFlag | DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT ))) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::config() - SetCooperativeLevel failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } - if( FAILED( hr = pDD->SetDisplayMode( dwRenderWidth, dwRenderHeight, - dwFullScreenBitDepth, 0L, 0L ))) { - wdxdisplay_cat.fatal() << "wdxGraphicsWindow::CreateFullscreenBuffers() - Can't set display mode : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + if(FAILED( hr = pDD->SetDisplayMode( dwRenderWidth, dwRenderHeight, + dwFullScreenBitDepth, 0L, 0L ))) { + wdxdisplay_cat.fatal() << "wdxGraphicsWindow::CreateFullscreenBuffers() - Can't set display mode : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } #ifdef _DEBUG wdxdisplay_cat.debug() << "wdxGraphicsWindow::setting displaymode to " << dwRenderWidth << "x" << dwRenderHeight << " at "<< dwFullScreenBitDepth << "bpp" <GetAvailableVidMem(&ddsCaps,&dwTotal,&dwFree))) { - wdxdisplay_cat.debug() << "wdxGraphicsWindow::GetAvailableVidMem failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } - wdxdisplay_cat.debug() << "after FullScreen switch: GetAvailableVidMem returns Total: " << dwTotal/1000000.0 << " Free: " << dwFree/1000000.0 << endl; + if(FAILED( hr = pDD->GetAvailableVidMem(&ddsCaps,&dwTotal,&dwFree))) { + wdxdisplay_cat.debug() << "wdxGraphicsWindow::GetAvailableVidMem failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + wdxdisplay_cat.debug() << "after FullScreen switch: GetAvailableVidMem returns Total: " << dwTotal/1000000.0 << " Free: " << dwFree/1000000.0 << endl; #endif - // Setup to create the primary surface w/backbuffer - DX_DECLARE_CLEAN(DDSURFACEDESC2,ddsd) - ddsd.dwFlags = DDSD_CAPS|DDSD_BACKBUFFERCOUNT; - ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_3DDEVICE | - DDSCAPS_FLIP | DDSCAPS_COMPLEX; - ddsd.dwBackBufferCount = 1; + // Setup to create the primary surface w/backbuffer + DX_DECLARE_CLEAN(DDSURFACEDESC2,ddsd) + ddsd.dwFlags = DDSD_CAPS|DDSD_BACKBUFFERCOUNT; + ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_3DDEVICE | + DDSCAPS_FLIP | DDSCAPS_COMPLEX; + ddsd.dwBackBufferCount = 1; - PRINTVIDMEM(pDD,&ddsd.ddsCaps,"initial primary & backbuf"); + PRINTVIDMEM(pDD,&ddsd.ddsCaps,"initial primary & backbuf"); - // Create the primary surface - if( FAILED( hr = pDD->CreateSurface( &ddsd, &pPrimaryDDSurf, NULL ) ) ) - { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::CreateFullscreenBuffers() - CreateSurface failed for primary surface: result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + // Create the primary surface + if(FAILED( hr = pDD->CreateSurface( &ddsd, &pPrimaryDDSurf, NULL ) )) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::CreateFullscreenBuffers() - CreateSurface failed for primary surface: result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } - // Clear the primary surface to black + // Clear the primary surface to black - DX_DECLARE_CLEAN(DDBLTFX, bltfx) - bltfx.dwDDFX |= DDBLTFX_NOTEARING; - hr = pPrimaryDDSurf->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&bltfx); + DX_DECLARE_CLEAN(DDBLTFX, bltfx) + bltfx.dwDDFX |= DDBLTFX_NOTEARING; + hr = pPrimaryDDSurf->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&bltfx); - if( FAILED( hr )) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow:: Blt to Black of Primary Surf failed! : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + if(FAILED( hr )) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow:: Blt to Black of Primary Surf failed! : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } - // Get the backbuffer, which was created along with the primary. - DDSCAPS2 ddscaps = { DDSCAPS_BACKBUFFER, 0, 0, 0 }; - if( FAILED( hr = pPrimaryDDSurf->GetAttachedSurface( &ddscaps, &pBackDDSurf ) ) ) - { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::CreateFullscreenBuffers() - Can't get the backbuffer: result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + // Get the backbuffer, which was created along with the primary. + DDSCAPS2 ddscaps = { DDSCAPS_BACKBUFFER, 0, 0, 0}; + if(FAILED( hr = pPrimaryDDSurf->GetAttachedSurface( &ddscaps, &pBackDDSurf ) )) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::CreateFullscreenBuffers() - Can't get the backbuffer: result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } - if( FAILED( hr = pBackDDSurf->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&bltfx))) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow:: Blt to Black of Back Surf failed! : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } - } // end create full screen buffers + if(FAILED( hr = pBackDDSurf->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&bltfx))) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow:: Blt to Black of Back Surf failed! : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + } // end create full screen buffers - else { // CREATE WINDOWED BUFFERS + else { // CREATE WINDOWED BUFFERS - if(!(DDCaps.dwCaps2 & DDCAPS2_CANRENDERWINDOWED)) { - wdxdisplay_cat.fatal() << "wdxGraphicsWindow:: 3D HW cannot render windowed, exiting..." << endl; - exit(1); - } + if(!(DDCaps.dwCaps2 & DDCAPS2_CANRENDERWINDOWED)) { + wdxdisplay_cat.fatal() << "wdxGraphicsWindow:: 3D HW cannot render windowed, exiting..." << endl; + exit(1); + } - if(FAILED(hr = pDD->GetDisplayMode( &SurfaceDesc ))) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::GetDisplayMode failed result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } - if( SurfaceDesc.ddpfPixelFormat.dwRGBBitCount <= 8 ) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::config() - Can't run windowed in an 8-bit or less display mode" << endl; - exit(1); - } + if(FAILED(hr = pDD->GetDisplayMode( &SurfaceDesc ))) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::GetDisplayMode failed result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + if(SurfaceDesc.ddpfPixelFormat.dwRGBBitCount <= 8) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::config() - Can't run windowed in an 8-bit or less display mode" << endl; + exit(1); + } - if(!(BitDepth_2_DDBDMask(SurfaceDesc.ddpfPixelFormat.dwRGBBitCount) & d3ddevs[0].dwDeviceRenderBitDepth)) { - wdxdisplay_cat.fatal() << "wdxGraphicsWindow:: - 3D Device doesnt support rendering at " << SurfaceDesc.ddpfPixelFormat.dwRGBBitCount << "bpp (current desktop bitdepth)" << endl; - exit(1); - } + if(!(BitDepth_2_DDBDMask(SurfaceDesc.ddpfPixelFormat.dwRGBBitCount) & d3ddevs[0].dwDeviceRenderBitDepth)) { + wdxdisplay_cat.fatal() << "wdxGraphicsWindow:: - 3D Device doesnt support rendering at " << SurfaceDesc.ddpfPixelFormat.dwRGBBitCount << "bpp (current desktop bitdepth)" << endl; + exit(1); + } // extern bool dx_preserve_fpu_state; DWORD SCL_FPUFlag = DDSCL_FPUSETUP; @@ -1528,12 +993,12 @@ dx_setup() // if(dx_preserve_fpu_state) // SCL_FPUFlag = DDSCL_FPUPRESERVE; // tell d3d to preserve the fpu state across calls. this hurts perf, but is good for dbgging - if(FAILED(hr = pDD->SetCooperativeLevel(_mwindow, SCL_FPUFlag | DDSCL_NORMAL))) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::config() - SetCooperativeLevel failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } - // Get the dimensions of the viewport and screen bounds + if(FAILED(hr = pDD->SetCooperativeLevel(_mwindow, SCL_FPUFlag | DDSCL_NORMAL))) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::config() - SetCooperativeLevel failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + // Get the dimensions of the viewport and screen bounds GetClientRect( _mwindow, &view_rect ); POINT ul,lr; @@ -1550,32 +1015,32 @@ dx_setup() _props._yorg = view_rect.top; _props._xsize = dwRenderWidth; _props._ysize = dwRenderHeight; - - // Initialize the description of the primary surface - ZeroMemory( &SurfaceDesc, sizeof(DDSURFACEDESC2) ); - SurfaceDesc.dwSize = sizeof(DDSURFACEDESC2); - SurfaceDesc.dwFlags = DDSD_CAPS ; - SurfaceDesc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; - PRINTVIDMEM(pDD,&SurfaceDesc.ddsCaps,"initial primary surface"); + // Initialize the description of the primary surface + ZeroMemory( &SurfaceDesc, sizeof(DDSURFACEDESC2) ); + SurfaceDesc.dwSize = sizeof(DDSURFACEDESC2); + SurfaceDesc.dwFlags = DDSD_CAPS ; + SurfaceDesc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; + + PRINTVIDMEM(pDD,&SurfaceDesc.ddsCaps,"initial primary surface"); // Create the primary surface. This includes all of the visible - // window, so no need to specify height/width - if(FAILED(hr = pDD->CreateSurface( &SurfaceDesc, &pPrimaryDDSurf, NULL ))) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow:: CreateSurface failed for primary surface: result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + // window, so no need to specify height/width + if(FAILED(hr = pDD->CreateSurface( &SurfaceDesc, &pPrimaryDDSurf, NULL ))) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow:: CreateSurface failed for primary surface: result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } // Create a clipper object which handles all our clipping for cases when // our window is partially obscured by other windows. LPDIRECTDRAWCLIPPER Clipper; if(FAILED(hr = pDD->CreateClipper( 0, &Clipper, NULL ))) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow:: CreateClipper failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } - + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow:: CreateClipper failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + // Associate the clipper with our window. Note that, afterwards, the // clipper is internally referenced by the primary surface, so it is safe // to release our local reference to it. @@ -1583,169 +1048,168 @@ dx_setup() pPrimaryDDSurf->SetClipper( Clipper ); Clipper->Release(); - // Clear the primary surface to black - DX_DECLARE_CLEAN(DDBLTFX, bltfx) + // Clear the primary surface to black + DX_DECLARE_CLEAN(DDBLTFX, bltfx) + + if(FAILED( hr = pPrimaryDDSurf->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&bltfx))) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow:: Blt to Black of Primary Surf failed! : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } - if( FAILED( hr = pPrimaryDDSurf->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&bltfx))) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow:: Blt to Black of Primary Surf failed! : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } - // Setup a surface description to create a backbuffer. SurfaceDesc.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS; SurfaceDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY; SurfaceDesc.dwWidth = dwRenderWidth; SurfaceDesc.dwHeight = dwRenderHeight; - PRINTVIDMEM(pDD,&SurfaceDesc.ddsCaps,"initial backbuf"); - + PRINTVIDMEM(pDD,&SurfaceDesc.ddsCaps,"initial backbuf"); + // Create the backbuffer. (might want to handle failure due to running out of video memory. if(FAILED(hr = pDD->CreateSurface( &SurfaceDesc, &pBackDDSurf, NULL ))) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow:: CreateSurface failed for backbuffer : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow:: CreateSurface failed for backbuffer : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } - if( FAILED( hr = pBackDDSurf->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&bltfx))) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow:: Blt to Black of Back Surf failed! : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + if(FAILED( hr = pBackDDSurf->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&bltfx))) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow:: Blt to Black of Back Surf failed! : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } - } // end create windowed buffers + } // end create windowed buffers // ======================================================== - resized(dwRenderWidth,dwRenderHeight); // update panda channel/display rgn info - - // Check if the device supports z-bufferless hidden surface removal. If so, - // we don't really need a z-buffer - if(!(d3ddevs[0].dpcTriCaps.dwRasterCaps & D3DPRASTERCAPS_ZBUFFERLESSHSR )) { - - // Get z-buffer dimensions from the render target - DX_DECLARE_CLEAN(DDSURFACEDESC2,ddsd); - pBackDDSurf->GetSurfaceDesc( &ddsd ); - - // Setup the surface desc for the z-buffer. - ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS | DDSD_PIXELFORMAT; - ddsd.ddsCaps.dwCaps = DDSCAPS_ZBUFFER | DDSCAPS_VIDEOMEMORY; - - DDPIXELFORMAT ZBufPixFmts[MAX_DX_ZBUF_FMTS]; - - // Get an appropiate pixel format from enumeration of the formats. On the - // first pass, we look for a zbuffer dpeth which is equal to the frame - // buffer depth (as some cards unfornately require this). - if( FAILED(pD3DI->EnumZBufferFormats( IID_IDirect3DHALDevice, EnumZBufFmtsCallback, - (VOID*)&ZBufPixFmts ))) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::config() - EnumZBufferFormats failed " << endl; - exit(1); - } - - #ifdef _DEBUG - { static BOOL bPrinted=FALSE; - if(!bPrinted) { - for(i=0;idwRGBBitCount) { - case 16: - if(!(pCurPixFmt->dwFlags & DDPF_STENCILBUFFER)) - pz16=pCurPixFmt; - break; - case 24: - assert(!(pCurPixFmt->dwFlags & DDPF_STENCILBUFFER)); // shouldnt be stencil at 24bpp - pz24=pCurPixFmt; - break; - case 32: - if(!(pCurPixFmt->dwFlags & DDPF_STENCILBUFFER)) - pz32=pCurPixFmt; - break; - } - } - - if(bIsNvidia) { - DX_DECLARE_CLEAN(DDSURFACEDESC2,ddsd_pri) - pPrimaryDDSurf->GetSurfaceDesc(&ddsd_pri); + resized(dwRenderWidth,dwRenderHeight); // update panda channel/display rgn info - // must pick zbuf depth to match primary surface depth for nvidia - if(ddsd_pri.ddpfPixelFormat.dwRGBBitCount==16) { - assert(pz16!=NULL); - ddsd.ddpfPixelFormat = *pz16; - } else { - assert(pz24!=NULL); - ddsd.ddpfPixelFormat = *pz24; //take the no-stencil version of the 32-bit Zbuf - } - } else { - // pick the largest non-stencil zbuffer format avail (wont support stenciling - // until we definitely need it). Note: this is choosing to waste memory - // and possibly perf for more accuracy at long distance (std 16bpp would be smaller/ - // maybe faster) - + // Check if the device supports z-bufferless hidden surface removal. If so, + // we don't really need a z-buffer + if(!(d3ddevs[0].dpcTriCaps.dwRasterCaps & D3DPRASTERCAPS_ZBUFFERLESSHSR )) { - if(pz32!=NULL) { - ddsd.ddpfPixelFormat = *pz32; - } else if(pz24!=NULL) { - ddsd.ddpfPixelFormat = *pz24; - } else if(pz16!=NULL){ - ddsd.ddpfPixelFormat = *pz16; - } else { - wdxdisplay_cat.fatal() << "wdxGraphicsWindow::config() - could find a valid zbuffer format!\n"; - exit(1); - } - } - - PRINTVIDMEM(pDD,&ddsd.ddsCaps,"initial zbuf"); - - // Create and attach a z-buffer - if( FAILED( hr = pDD->CreateSurface( &ddsd, &pZDDSurf, NULL ) ) ) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::config() - CreateSurface failed for Z buffer: result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } - - if( FAILED( hr = pBackDDSurf->AddAttachedSurface( pZDDSurf ) ) ) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::config() - AddAttachedSurface failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + // Get z-buffer dimensions from the render target + DX_DECLARE_CLEAN(DDSURFACEDESC2,ddsd); + pBackDDSurf->GetSurfaceDesc( &ddsd ); + + // Setup the surface desc for the z-buffer. + ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS | DDSD_PIXELFORMAT; + ddsd.ddsCaps.dwCaps = DDSCAPS_ZBUFFER | DDSCAPS_VIDEOMEMORY; + + DDPIXELFORMAT ZBufPixFmts[MAX_DX_ZBUF_FMTS]; + + // Get an appropiate pixel format from enumeration of the formats. On the + // first pass, we look for a zbuffer dpeth which is equal to the frame + // buffer depth (as some cards unfornately require this). + if(FAILED(pD3DI->EnumZBufferFormats( IID_IDirect3DHALDevice, EnumZBufFmtsCallback, + (VOID*)&ZBufPixFmts ))) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::config() - EnumZBufferFormats failed " << endl; + exit(1); + } #ifdef _DEBUG - wdxdisplay_cat.debug() << "Creating " << ddsd.ddpfPixelFormat.dwRGBBitCount << "bpp zbuffer\n"; + { static BOOL bPrinted=FALSE; + if(!bPrinted) { + for(i=0;idwRGBBitCount) { + case 16: + if(!(pCurPixFmt->dwFlags & DDPF_STENCILBUFFER)) + pz16=pCurPixFmt; + break; + case 24: + assert(!(pCurPixFmt->dwFlags & DDPF_STENCILBUFFER)); // shouldnt be stencil at 24bpp + pz24=pCurPixFmt; + break; + case 32: + if(!(pCurPixFmt->dwFlags & DDPF_STENCILBUFFER)) + pz32=pCurPixFmt; + break; + } + } + + if(bIsNvidia) { + DX_DECLARE_CLEAN(DDSURFACEDESC2,ddsd_pri) + pPrimaryDDSurf->GetSurfaceDesc(&ddsd_pri); + + // must pick zbuf depth to match primary surface depth for nvidia + if(ddsd_pri.ddpfPixelFormat.dwRGBBitCount==16) { + assert(pz16!=NULL); + ddsd.ddpfPixelFormat = *pz16; + } else { + assert(pz24!=NULL); + ddsd.ddpfPixelFormat = *pz24; //take the no-stencil version of the 32-bit Zbuf + } + } else { + // pick the largest non-stencil zbuffer format avail (wont support stenciling + // until we definitely need it). Note: this is choosing to waste memory + // and possibly perf for more accuracy at long distance (std 16bpp would be smaller/ + // maybe faster) + + + if(pz32!=NULL) { + ddsd.ddpfPixelFormat = *pz32; + } else if(pz24!=NULL) { + ddsd.ddpfPixelFormat = *pz24; + } else if(pz16!=NULL) { + ddsd.ddpfPixelFormat = *pz16; + } else { + wdxdisplay_cat.fatal() << "wdxGraphicsWindow::config() - could find a valid zbuffer format!\n"; + exit(1); + } + } + + PRINTVIDMEM(pDD,&ddsd.ddsCaps,"initial zbuf"); + + // Create and attach a z-buffer + if(FAILED( hr = pDD->CreateSurface( &ddsd, &pZDDSurf, NULL ) )) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::config() - CreateSurface failed for Z buffer: result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + + if(FAILED( hr = pBackDDSurf->AddAttachedSurface( pZDDSurf ) )) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::config() - AddAttachedSurface failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } + +#ifdef _DEBUG + wdxdisplay_cat.debug() << "Creating " << ddsd.ddpfPixelFormat.dwRGBBitCount << "bpp zbuffer\n"; +#endif + } + + // Create the device. The device is created off of our back buffer, which // becomes the render target for the newly created device. - hr = pD3DI->CreateDevice( IID_IDirect3DHALDevice, pBackDDSurf, &pD3DDevice ); - if (hr != DD_OK) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::config() - CreateDevice failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + hr = pD3DI->CreateDevice( IID_IDirect3DHALDevice, pBackDDSurf, &pD3DDevice ); + if(hr != DD_OK) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::config() - CreateDevice failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } - // Create the viewport - D3DVIEWPORT7 vp = { 0, 0, _props._xsize, _props._ysize, 0.0f, 1.0f }; - hr = pD3DDevice->SetViewport( &vp ); - if (hr != DD_OK) { - wdxdisplay_cat.fatal() - << "wdxGraphicsWindow::config() - SetViewport failed : result = " << ConvD3DErrorToString(hr) << endl; - exit(1); - } + // Create the viewport + D3DVIEWPORT7 vp = { 0, 0, _props._xsize, _props._ysize, 0.0f, 1.0f}; + hr = pD3DDevice->SetViewport( &vp ); + if(hr != DD_OK) { + wdxdisplay_cat.fatal() + << "wdxGraphicsWindow::config() - SetViewport failed : result = " << ConvD3DErrorToString(hr) << endl; + exit(1); + } - DXGraphicsStateGuardian* dxgsg = DCAST(DXGraphicsStateGuardian, _gsg); - dxgsg->Set_HDC(_hdc); - dxgsg->init_dx(pDD, pPrimaryDDSurf, pBackDDSurf, pZDDSurf, pD3DI, pD3DDevice, view_rect); - - _dx_ready = true; - dxgsg->SetDXStatus(true); + _dxgsg->Set_HDC(_hdc); + _dxgsg->init_dx(pDD, pPrimaryDDSurf, pBackDDSurf, pZDDSurf, pD3DI, pD3DDevice, view_rect); + _dxgsg->SetDXReady(true); } //////////////////////////////////////////////////////////////////// @@ -1754,59 +1218,59 @@ dx_setup() // Description: //////////////////////////////////////////////////////////////////// void wdxGraphicsWindow::setup_colormap(void) { - wdxGraphicsPipe* pipe = DCAST(wdxGraphicsPipe, _pipe); + wdxGraphicsPipe* pipe = DCAST(wdxGraphicsPipe, _pipe); - PIXELFORMATDESCRIPTOR pfd; - LOGPALETTE *logical; - int n; + PIXELFORMATDESCRIPTOR pfd; + LOGPALETTE *logical; + int n; /* grab the pixel format */ - memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR)); - DescribePixelFormat(_hdc, GetPixelFormat(_hdc), - sizeof(PIXELFORMATDESCRIPTOR), &pfd); + memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR)); + DescribePixelFormat(_hdc, GetPixelFormat(_hdc), + sizeof(PIXELFORMATDESCRIPTOR), &pfd); - if (!(pfd.dwFlags & PFD_NEED_PALETTE || - pfd.iPixelType == PFD_TYPE_COLORINDEX)) - return; + if(!(pfd.dwFlags & PFD_NEED_PALETTE || + pfd.iPixelType == PFD_TYPE_COLORINDEX)) + return; - n = 1 << pfd.cColorBits; + n = 1 << pfd.cColorBits; /* allocate a bunch of memory for the logical palette (assume 256 - colors in a Win32 palette */ - logical = (LOGPALETTE*)malloc(sizeof(LOGPALETTE) + - sizeof(PALETTEENTRY) * n); - memset(logical, 0, sizeof(LOGPALETTE) + sizeof(PALETTEENTRY) * n); + colors in a Win32 palette */ + logical = (LOGPALETTE*)malloc(sizeof(LOGPALETTE) + + sizeof(PALETTEENTRY) * n); + memset(logical, 0, sizeof(LOGPALETTE) + sizeof(PALETTEENTRY) * n); /* set the entries in the logical palette */ - logical->palVersion = 0x300; - logical->palNumEntries = n; + logical->palVersion = 0x300; + logical->palNumEntries = n; /* start with a copy of the current system palette */ - GetSystemPaletteEntries(_hdc, 0, 256, &logical->palPalEntry[0]); + GetSystemPaletteEntries(_hdc, 0, 256, &logical->palPalEntry[0]); - if (pfd.iPixelType == PFD_TYPE_RGBA) { - int redMask = (1 << pfd.cRedBits) - 1; - int greenMask = (1 << pfd.cGreenBits) - 1; - int blueMask = (1 << pfd.cBlueBits) - 1; - int i; + if(pfd.iPixelType == PFD_TYPE_RGBA) { + int redMask = (1 << pfd.cRedBits) - 1; + int greenMask = (1 << pfd.cGreenBits) - 1; + int blueMask = (1 << pfd.cBlueBits) - 1; + int i; - /* fill in an RGBA color palette */ - for (i = 0; i < n; ++i) { - logical->palPalEntry[i].peRed = - (((i >> pfd.cRedShift) & redMask) * 255) / redMask; - logical->palPalEntry[i].peGreen = - (((i >> pfd.cGreenShift) & greenMask) * 255) / greenMask; - logical->palPalEntry[i].peBlue = - (((i >> pfd.cBlueShift) & blueMask) * 255) / blueMask; - logical->palPalEntry[i].peFlags = 0; - } - } + /* fill in an RGBA color palette */ + for(i = 0; i < n; ++i) { + logical->palPalEntry[i].peRed = + (((i >> pfd.cRedShift) & redMask) * 255) / redMask; + logical->palPalEntry[i].peGreen = + (((i >> pfd.cGreenShift) & greenMask) * 255) / greenMask; + logical->palPalEntry[i].peBlue = + (((i >> pfd.cBlueShift) & blueMask) * 255) / blueMask; + logical->palPalEntry[i].peFlags = 0; + } + } - _colormap = CreatePalette(logical); - free(logical); + _colormap = CreatePalette(logical); + free(logical); - SelectPalette(_hdc, _colormap, FALSE); - RealizePalette(_hdc); + SelectPalette(_hdc, _colormap, FALSE); + RealizePalette(_hdc); } @@ -1815,13 +1279,12 @@ void wdxGraphicsWindow::setup_colormap(void) { // Access: //////////////////////////////////////////////////////////////////// void wdxGraphicsWindow::begin_frame(void) { - GraphicsWindow::begin_frame(); + GraphicsWindow::begin_frame(); } -void wdxGraphicsWindow::show_frame(void) -{ - DXGraphicsStateGuardian* dxgsg = DCAST(DXGraphicsStateGuardian, _gsg); - dxgsg->show_frame(); +void wdxGraphicsWindow::show_frame(void) { +// DXGraphicsStateGuardian* dxgsg = DCAST(DXGraphicsStateGuardian, _gsg); + _dxgsg->show_frame(); } @@ -1832,9 +1295,9 @@ void wdxGraphicsWindow::show_frame(void) // Description: timer info, incs frame # //////////////////////////////////////////////////////////////////// void wdxGraphicsWindow::end_frame(void) { - PStatTimer timer(_swap_pcollector); // added to mimic wglGraphicsWindow.cxx + PStatTimer timer(_swap_pcollector); // added to mimic wglGraphicsWindow.cxx // SwapBuffers(_hdc); - GraphicsWindow::end_frame(); + GraphicsWindow::end_frame(); } @@ -1845,8 +1308,8 @@ void wdxGraphicsWindow::end_frame(void) { // Description: we receive the new x and y position of the client //////////////////////////////////////////////////////////////////// void wdxGraphicsWindow::handle_window_move(int x, int y) { - DXGraphicsStateGuardian* dxgsg = DCAST(DXGraphicsStateGuardian, _gsg); - dxgsg->adjust_view_rect(x,y); +// DXGraphicsStateGuardian* dxgsg = DCAST(DXGraphicsStateGuardian, _gsg); + _dxgsg->adjust_view_rect(x,y); _props._xorg = x; _props._yorg = y; } @@ -1857,7 +1320,7 @@ void wdxGraphicsWindow::handle_window_move(int x, int y) { // Description: //////////////////////////////////////////////////////////////////// void wdxGraphicsWindow::handle_mouse_motion(int x, int y) { - _input_devices[0].set_pointer_in_window(x, y); + _input_devices[0].set_pointer_in_window(x, y); } //////////////////////////////////////////////////////////////////// @@ -1866,11 +1329,11 @@ void wdxGraphicsWindow::handle_mouse_motion(int x, int y) { // Description: //////////////////////////////////////////////////////////////////// void wdxGraphicsWindow::handle_mouse_entry(int state,HCURSOR hCrossIcon) { - if (state == MOUSE_EXITED) { - _input_devices[0].set_pointer_out_of_window(); - }else { - SetCursor(hCrossIcon); - } + if(state == MOUSE_EXITED) { + _input_devices[0].set_pointer_out_of_window(); + } else { + SetCursor(hCrossIcon); + } } //////////////////////////////////////////////////////////////////// @@ -1880,10 +1343,10 @@ void wdxGraphicsWindow::handle_mouse_entry(int state,HCURSOR hCrossIcon) { //////////////////////////////////////////////////////////////////// void wdxGraphicsWindow:: handle_keypress(ButtonHandle key, int x, int y) { - _input_devices[0].set_pointer_in_window(x, y); - if (key != ButtonHandle::none()) { - _input_devices[0].button_down(key); - } + _input_devices[0].set_pointer_in_window(x, y); + if(key != ButtonHandle::none()) { + _input_devices[0].button_down(key); + } } //////////////////////////////////////////////////////////////////// @@ -1893,9 +1356,9 @@ handle_keypress(ButtonHandle key, int x, int y) { //////////////////////////////////////////////////////////////////// void wdxGraphicsWindow:: handle_keyrelease(ButtonHandle key, int, int) { - if (key != ButtonHandle::none()) { - _input_devices[0].button_up(key); - } + if(key != ButtonHandle::none()) { + _input_devices[0].button_up(key); + } } #if 0 @@ -1907,46 +1370,27 @@ handle_keyrelease(ButtonHandle key, int, int) { void wdxGraphicsWindow::handle_changes(void) { // As an optimization, check to see if change is anything other than a // redisplay - if (_change_mask & WDXWIN_CONFIGURE) { - RECT changes; - POINT point; - GetClientRect(_mwindow, &changes); - point.x = 0; - point.y = 0; - ClientToScreen(_mwindow, &point); - changes.left = point.x; - changes.top = point.y; - // Don't do this in full-screen mode - AdjustWindowRect(&changes, WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | - WS_CLIPCHILDREN, FALSE); - SetWindowPos(_mwindow, HWND_TOP, changes.left, changes.top, - changes.right - changes.left, changes.bottom - changes.top, - SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | - SWP_NOSENDCHANGING | SWP_NOSIZE | SWP_NOZORDER); - } - _change_mask = 0; + if(_change_mask & WDXWIN_CONFIGURE) { + RECT changes; + POINT point; + GetClientRect(_mwindow, &changes); + point.x = 0; + point.y = 0; + ClientToScreen(_mwindow, &point); + changes.left = point.x; + changes.top = point.y; + // Don't do this in full-screen mode + AdjustWindowRect(&changes, WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | + WS_CLIPCHILDREN, FALSE); + SetWindowPos(_mwindow, HWND_TOP, changes.left, changes.top, + changes.right - changes.left, changes.bottom - changes.top, + SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | + SWP_NOSENDCHANGING | SWP_NOSIZE | SWP_NOZORDER); + } + _change_mask = 0; } #endif -//////////////////////////////////////////////////////////////////// -// Function: process_events -// Access:// Description: -//////////////////////////////////////////////////////////////////// -void wdxGraphicsWindow::process_events(void) { -#if 0 - MSG msg; - - if (!GetMessage(&msg, NULL, 0, 0)) - exit(0); - do { - // Translate virtual key messages - TranslateMessage(&msg); - // Call window_proc - DispatchMessage(&msg); - } while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { -#endif -} - /* //////////////////////////////////////////////////////////////////// // Function: idle_wait @@ -1956,7 +1400,7 @@ void wdxGraphicsWindow::process_events(void) { void wdxGraphicsWindow::idle_wait(void) { MSG msg; if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) - process_events(); + process_events(); call_idle_callback(); } @@ -1974,7 +1418,46 @@ void wdxGraphicsWindow::idle_wait(void) { //////////////////////////////////////////////////////////////////// bool wdxGraphicsWindow:: supports_update() const { - return true; + return true; +} + +#if 0 +//////////////////////////////////////////////////////////////////// +// Function: process_events +// Access: +// Description: +//////////////////////////////////////////////////////////////////// +void wdxGraphicsWindow::process_events(void) { + MSG event, msg; + + do { + if (!GetMessage(&event, NULL, 0, 0)) + exit(0); + // Translate virtual key messages + TranslateMessage(&event); + // Call window_proc + DispatchMessage(&event); + } + + while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)); +} +#endif + +void INLINE wdxGraphicsWindow::process_events(void) { + MSG msg; + + while(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { + if(!GetMessage(&msg, NULL, 0, 0)) { + // WM_QUIT received + AtExitFn(); + exit(0); + } + + // Translate virtual key messages + TranslateMessage(&msg); + // Call window_proc + DispatchMessage(&msg); + } } //////////////////////////////////////////////////////////////////// @@ -1983,42 +1466,30 @@ supports_update() const { // Description: //////////////////////////////////////////////////////////////////// void wdxGraphicsWindow::update(void) { - _show_code_pcollector.stop(); - PStatClient::main_tick(); + _show_code_pcollector.stop(); + PStatClient::main_tick(); // Always ask for a redisplay for now - MSG msg; #if 0 - if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) - process_events(); - else call_draw_callback(true); + if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) + process_events(); + else call_draw_callback(true); #else - while(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { - if (!GetMessage(&msg, NULL, 0, 0)) { - // WM_QUIT received - AtExitFn(); - exit(0); - } + process_events(); - // Translate virtual key messages - TranslateMessage(&msg); - // Call window_proc - DispatchMessage(&msg); - } - - call_draw_callback(true); + call_draw_callback(true); #endif - - call_idle_callback(); + + call_idle_callback(); /* if (_idle_callback) - idle_wait(); + idle_wait(); else if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) - process_events(); + process_events(); */ - _show_code_pcollector.start(); + _show_code_pcollector.start(); } //////////////////////////////////////////////////////////////////// @@ -2027,7 +1498,7 @@ void wdxGraphicsWindow::update(void) { // Description: //////////////////////////////////////////////////////////////////// void wdxGraphicsWindow::enable_mouse_input(bool val) { - _mouse_input_enabled = val; + _mouse_input_enabled = val; } //////////////////////////////////////////////////////////////////// @@ -2036,7 +1507,7 @@ void wdxGraphicsWindow::enable_mouse_input(bool val) { // Description: //////////////////////////////////////////////////////////////////// void wdxGraphicsWindow::enable_mouse_motion(bool val) { - _mouse_motion_enabled = val; + _mouse_motion_enabled = val; } //////////////////////////////////////////////////////////////////// @@ -2045,7 +1516,7 @@ void wdxGraphicsWindow::enable_mouse_motion(bool val) { // Description: //////////////////////////////////////////////////////////////////// void wdxGraphicsWindow::enable_mouse_passive_motion(bool val) { - _mouse_passive_motion_enabled = val; + _mouse_passive_motion_enabled = val; } @@ -2057,40 +1528,40 @@ void wdxGraphicsWindow::enable_mouse_passive_motion(bool val) { //////////////////////////////////////////////////////////////////// TypeHandle wdxGraphicsWindow:: get_gsg_type() const { - return DXGraphicsStateGuardian::get_class_type(); + return DXGraphicsStateGuardian::get_class_type(); } GraphicsWindow *wdxGraphicsWindow:: make_wdxGraphicsWindow(const FactoryParams ¶ms) { - GraphicsWindow::WindowPipe *pipe_param; - if (!get_param_into(pipe_param, params)) { - wdxdisplay_cat.error() - << "No pipe specified for window creation!" << endl; - return NULL; - } + GraphicsWindow::WindowPipe *pipe_param; + if(!get_param_into(pipe_param, params)) { + wdxdisplay_cat.error() + << "No pipe specified for window creation!" << endl; + return NULL; + } - GraphicsPipe *pipe = pipe_param->get_pipe(); - - GraphicsWindow::WindowProps *props_param; - if (!get_param_into(props_param, params)) { - return new wdxGraphicsWindow(pipe); - } else { - return new wdxGraphicsWindow(pipe, props_param->get_properties()); - } + GraphicsPipe *pipe = pipe_param->get_pipe(); + + GraphicsWindow::WindowProps *props_param; + if(!get_param_into(props_param, params)) { + return new wdxGraphicsWindow(pipe); + } else { + return new wdxGraphicsWindow(pipe, props_param->get_properties()); + } } TypeHandle wdxGraphicsWindow::get_class_type(void) { - return _type_handle; + return _type_handle; } void wdxGraphicsWindow::init_type(void) { - GraphicsWindow::init_type(); - register_type(_type_handle, "wdxGraphicsWindow", - GraphicsWindow::get_class_type()); + GraphicsWindow::init_type(); + register_type(_type_handle, "wdxGraphicsWindow", + GraphicsWindow::get_class_type()); } TypeHandle wdxGraphicsWindow::get_type(void) const { - return get_class_type(); + return get_class_type(); } diff --git a/panda/src/wdxdisplay/wdxGraphicsWindow.h b/panda/src/wdxdisplay/wdxGraphicsWindow.h index 4a786269fc..6a8693d818 100644 --- a/panda/src/wdxdisplay/wdxGraphicsWindow.h +++ b/panda/src/wdxdisplay/wdxGraphicsWindow.h @@ -51,6 +51,7 @@ public: static LONG WINAPI static_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); INLINE bool mouse_entry_enabled(void) { return _mouse_entry_enabled; } INLINE bool mouse_motion_enabled(void) { return _mouse_motion_enabled; } @@ -65,18 +66,10 @@ public: void dx_setup(); virtual void begin_frame( void ); void show_frame(); - DXGraphicsStateGuardian *get_dxgsg(void); + DXGraphicsStateGuardian *_dxgsg; protected: -#if WBD_GL_MODE - PIXELFORMATDESCRIPTOR* try_for_visual(/*wdxGraphicsPipe *pipe,*/ - int mask, int want_depth_bits = 1, int want_color_bits = 1); - void choose_visual(void); - static void get_config(PIXELFORMATDESCRIPTOR* visual, int attrib, int *value); -#else ButtonHandle lookup_key(WPARAM wparam) const; - -#endif virtual void config( void ); void setup_colormap(void); @@ -85,10 +78,6 @@ protected: void enable_mouse_passive_motion(bool val); void enable_mouse_entry(bool val); - void process_events(void); - //void idle_wait(void); - - public: HWND _mwindow; HWND _hParentWindow; @@ -96,24 +85,22 @@ public: private: HDC _hdc; HPALETTE _colormap; - - + typedef enum { NotAdjusting,MovingOrResizing,Resizing } WindowAdjustType; + WindowAdjustType _WindowAdjustingType; + HCURSOR _hMouseCrossIcon; + bool _bSizeIsMaximized; bool _mouse_input_enabled; bool _mouse_motion_enabled; bool _mouse_passive_motion_enabled; bool _mouse_entry_enabled; int _entry_state; bool _ignore_key_repeat; - bool _dx_ready; public: static TypeHandle get_class_type(void); static void init_type(void); virtual TypeHandle get_type(void) const; virtual TypeHandle force_init_type() {init_type(); return get_class_type();} -// virtual void make_current(void); -// virtual void unmake_current(void); - private: static TypeHandle _type_handle;