锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久综合香蕉国产蜜臀AV,青青青青久久精品国产,亚洲天堂久久精品http://www.shnenglu.com/xingkongyun/category/7602.html鏄熺┖闄ㄧ殑紼嬪簭灝忕珯zh-cnSat, 19 Jul 2008 10:38:36 GMTSat, 19 Jul 2008 10:38:36 GMT60directx涓涪澶辯殑璁懼(lost device)http://www.shnenglu.com/xingkongyun/articles/56484.html鏉ㄥ漿褰?/dc:creator>鏉ㄥ漿褰?/author>Fri, 18 Jul 2008 02:27:00 GMThttp://www.shnenglu.com/xingkongyun/articles/56484.htmlhttp://www.shnenglu.com/xingkongyun/comments/56484.htmlhttp://www.shnenglu.com/xingkongyun/articles/56484.html#Feedback0http://www.shnenglu.com/xingkongyun/comments/commentRss/56484.htmlhttp://www.shnenglu.com/xingkongyun/services/trackbacks/56484.htmldirectx涓涪澶辯殑璁懼(lost device)
2008-05-10 23:02

涓㈠け鐨勮澶?br>
涓涓狹icrosoft? Direct3D?鍙互澶勪簬鎿嶄綔鐘舵佹垨涓㈠け鐘舵併傛搷浣滅姸鎬佹槸璁懼鐨勬甯哥姸鎬侊紝璁懼鎸夐鏈熻繍琛屽茍present鎵鏈夋覆鏌撶粨鏋溿傚綋浜嬩歡鍙戠敓鏃訛紝濡傚叏灞忓簲鐢ㄧ▼搴忓け鍘婚敭鐩樿緭鍏ョ劍鐐癸紝璁懼灝辮漿鍙樺埌涓㈠け鐘舵侊紝榪欎細瀵艱嚧娓叉煋鏃犳硶榪涜銆備涪澶辯姸鎬佽〃鐜頒負鎵鏈夋覆鏌撴搷浣滅殑鎮勭劧澶辮觸錛岃繖鎰忓懗鐫鍗充嬌娓叉煋鎿嶄綔澶辮觸鎵鏈夌殑娓叉煋鏂規硶浠嶅彲浠ヨ繑鍥炴垚鍔熺爜銆傚湪榪欑鎯呭喌涓嬶紝IDirect3DDevice9:
resent榪斿洖閿欒鐮丏3DERR_DEVICELOST銆?br>
Direct3D鏈夋剰娌℃湁瀵瑰彲鑳藉鑷磋澶囦涪澶辯殑鎵鏈夋儏鍐佃繘琛岃緇嗚鏄庛備竴浜涘吀鍨嬬殑渚嬪瓙鍖呮嫭紿楀彛澶卞幓鐒︾偣錛屼緥濡傜敤鎴鋒寜涓嬩簡ALT+TAB鎴栧脊鍑轟簡涓涓郴緇熷璇濇銆傝澶囦篃浼氬洜涓虹數婧愮鐞嗕簨浠惰屼涪澶憋紝鎴栬呭彟涓涓簲鐢ㄧ▼搴忚繘琛屽叏灞忔搷浣溿傚彟澶栵紝浠諱綍瀵笽Direct3DDevice9::Reset璋冪敤鐨勫け璐ヤ細鎶婅澶囩疆涓轟涪澶辯姸鎬併?br>
娉ㄦ剰    鍙互淇濊瘉鎵鏈夌戶鎵胯嚜IUnknown鐨勬柟娉曞湪璁懼涓㈠け鍚庝粛鑳芥甯稿伐浣溿傝澶囦涪澶卞悗錛屾瘡涓嚱鏁頒竴鑸湁涓夌鍙兘錛?br>
璋冪敤澶辮觸錛岃繑鍥炲間負D3DERR_DEVICELOST – 榪欐剰鍛崇潃搴旂敤紼嬪簭蹇呴』鍙戠幇璁懼宸茬粡涓㈠け錛屼粠鑰岀煡閬撲竴浜涗簨鎯呮病鏈夋寜鐓ч鏈熻繘琛屻?
鎮勭劧澶辮觸錛岃繑鍥炲間負S_OK鎴栧叾瀹冨?– 鑻ュ嚱鏁拌皟鐢ㄦ倓鐒跺け璐ワ紝鍒欏簲鐢ㄧ▼搴忎竴鑸棤娉曞尯鍒嗗嚭“璋冪敤鎴愬姛”鎴?#8220;鎮勭劧澶辮觸”銆?
鍑芥暟榪斿洖涓涓繑鍥炲箋?
瀵逛涪澶辯殑璁懼浣滃嚭鍝嶅簲

璁懼鍦ㄨ閲嶇疆鍚庯紝搴旇閲嶆柊鍒涘緩璧勬簮錛堝寘鎷樉瀛樿祫婧愶級銆傚鏋滆澶囦涪澶變簡錛岄偅涔堝簲鐢ㄧ▼搴忓簲璇ユ煡璇㈣澶囩姸鎬侊紝鐪嬫槸鍚﹀彲浠ュ皢涔嬫仮澶嶅洖鎿嶄綔鐘舵併傚鏋滀笉琛岋紝閭d箞灝辯瓑鍒拌澶囧彲浠ヨ鎭㈠涓烘銆?br>
濡傛灉璁懼鍙互琚仮澶嶏紝閭d箞搴旂敤紼嬪簭搴旇閿姣佹墍鏈夋樉瀛樿祫婧愬拰浜ゆ崲閾撅紝騫跺噯澶囨仮澶嶃傜劧鍚庯紝搴旂敤紼嬪簭璋冪敤IDirect3DDevice9::Reset鏂規硶銆俁eset鏂規硶鏄綋璁懼涓㈠け鏃跺敮涓鏈夋晥鐨勬柟娉曪紝騫朵笖鏄簲鐢ㄧ▼搴忓彲鐢ㄦ潵鎶婅澶囦粠涓㈠け鐘舵佹仮澶嶅埌鎿嶄綔鐘舵佺殑鍞竴鏂規硶銆傞櫎闈炲簲鐢ㄧ▼搴忛噴鏀炬墍鏈夊湪D3DPOOL_DEFAULT涓垎閰嶇殑璧勬簮錛屽寘鎷敤IDirect3DDevice9::CreateRenderTarget鍜孖Direct3DDevice9::CreateDepthSstencilSurface鏂規硶鍒涘緩鐨勮祫婧愶紝鍚﹀垯Reset灝嗕細澶辮觸銆?br>
Direct3D涓ぇ閮ㄥ垎琚綣佽皟鐢ㄧ殑鏂規硶涓嶈繑鍥炰換浣曞叧浜庤澶囨槸鍚﹀凡涓㈠け鐨勪俊鎭傚簲鐢ㄧ▼搴忓彲浠ョ戶緇皟鐢ㄦ覆鏌撴柟娉曪紝濡侷Direct3DDevice9:
rawPrimitive錛岃屼笉浼氭敹鍒拌澶囦涪澶辯殑閫氱煡銆傚湪Direct3D鍐呴儴錛岃繖浜涙搷浣滆鎶涘純錛岀洿鍒拌澶囪閲嶇疆涓烘搷浣滅姸鎬佷負姝€?br>
閫氳繃鏌ヨIDirect3DDevice9::TestCooperativeLevel鏂規硶鐨勮繑鍥炲鹼紝搴旂敤紼嬪簭鍙互鍐沖畾鍦ㄩ亣鍒拌澶囦涪澶辨椂濡備綍澶勭悊銆?br>
綆$悊璧勬簮


璧勬簮綆$悊鏄皢璧勬簮浠庣郴緇熷唴瀛樻彁鍗囧埌璁懼鍙闂瓨鍌ㄥ櫒鍙婁粠璁懼鍙闂瓨鍌ㄥ櫒涓姏寮冪殑榪囩▼銆侻icrosoft? Direct3D?榪愯搴撴湁鑷繁鐨勫熀浜庢渶榪戞渶灝戜嬌鐢紙least-recently-used錛変紭鍏堢駭鎶鏈殑綆$悊綆楁硶銆傚綋Direct3D媯嫻嬪埌鍦ㄤ竴甯т腑鈥斺斿湪IDirect3DDevice9::BeginScene鍜孖Direct3DDevice9::EndScene璋冪敤涔嬮棿鈥斺旇澶囧彲璁塊棶鍐呭瓨鏃犳硶鍚屾椂瀛樺偍鎵鏈夎祫婧愭椂錛屽畠灝卞垏鎹㈠埌鏈榪戞渶澶氫嬌鐢紙most-recently-used錛変紭鍏堢駭鎶鏈?br>
鍦ㄥ垱寤烘椂浣跨敤D3DPOOL_MANAGED鏍囧織鎸囧畾涓涓敱緋葷粺綆$悊鐨勮祫婧愩傜敱緋葷粺綆$悊鐨勮祫婧愬湪璁懼鐨勪涪澶辯姸鎬佸拰鎿嶄綔鐘舵侀棿鐨勮漿鎹腑鎸佺畫瀛樺湪銆傞氳繃璋冪敤IDirect3DDevice9::Reset璁懼鍙互琚噸緗紝騫朵笖榪欑被璧勬簮鍙互緇х畫姝e父榪愪綔鑰屾棤闇閲嶆柊杞藉叆鍥劇墖銆備絾鏄紝濡傛灉璁懼蹇呴』琚攢姣佸拰閲嶅緩錛岄偅涔堟墍鏈夌敤D3DPOOL_MANAGED鍒涘緩鐨勮祫婧愪篃蹇呴』琚噸寤恒?br>
鍦ㄥ垱寤烘椂浣跨敤D3DPOOL_DEFAULT鏍囧織鎸囧畾鎶婅祫婧愭斁鍦ㄩ粯璁ょ殑姹犱腑銆傚湪榛樿鐨勬睜涓殑璧勬簮鍦ㄨ澶囦粠涓㈠け鐘舵佸埌鎿嶄綔鐘舵佺殑杞崲榪囩▼涓笉鎸佺畫瀛樺湪錛岃繖浜涜祫婧愬繀欏誨湪璋冪敤Reset涔嬪墠閲婃斁錛岀劧鍚庨噸寤恒?br>
鏇村鏈夊叧璁懼鐨勪涪澶辯姸鎬佺殑淇℃伅錛岃鍙傞槄涓㈠け鐨勮澶囥?br>
娉ㄦ剰涓嶆槸鎵鏈夌殑綾誨瀷鍜岀敤閫旈兘鏀寔璧勬簮綆$悊銆備緥濡傦紝鐢―3DUSAGE_RENDERTARGET鏍囧織鍒涘緩鐨勫璞′笉鏀寔璧勬簮綆$悊銆傚彟澶栵紝涓嶅緩璁闇瑕侀綣佹敼鍙樺叾鍐呭鐨勫璞′嬌鐢ㄨ祫婧愮鐞嗐備緥濡傦紝鍦ㄦ煇浜涚‖浠朵笂瀵逛竴涓瘡甯ч兘闇鏀瑰彉鐨勯《鐐圭紦瀛樿繘琛岃嚜鍔ㄧ鐞嗕細涓ラ噸闄嶄綆鎬ц兘銆備絾鏄紝瀵圭汗鐞嗚祫婧愭潵璇磋繖涓嶆槸涓涓棶棰樸?br>

渚嬪瓙錛堟憳鑷猚odesampler錛夛細

浠ヤ笅鍐呭涓虹▼搴忎唬鐮?

//-----------------------------------------------------------------------------
// Name: invalidateDeviceObjects()
// Desc: If the lost device can be restored, the application prepares the
//        device by destroying all video-memory resources and any
//        swap chains. This is typically accomplished by using the SAFE_RELEASE
//        macro.
//-----------------------------------------------------------------------------
HRESULT invalidateDeviceObjects( void )
{
     //
     // To see how mismanagement of an object''s reference counter can cause us
     // problems when calling Reset on the device, uncomment the line below.
     // The line below will call AddRef() on the vertex buffer object, which w
     // ill add one to the vertex buffer''s reference count. This will cause it
     // to hang around after we call Release() on it, which is not what we
     // wanted to happen here.
     //
     //g_pVertexBuffer->AddRef();

     //
     // NOTE: You could use the SAFE_RELEASE macro to invalidate your device
     //        objects like so:
     //
      SAFE_RELEASE( g_pTexture )
      SAFE_RELEASE( g_pVertexBuffer )
      SAFE_RELEASE( g_pTeapotMesh )
    
     return S_OK;
}

//-----------------------------------------------------------------------------
// Name: restoreDeviceObjects()
// Desc: You are encouraged to develop applications with a single code path to
//        respond to device loss. This code path is likely to be similar, if not
//        identical, to the code path taken to initialize the device at startup.
//-----------------------------------------------------------------------------
HRESULT restoreDeviceObjects( void )
{
     //
     // Set some important state settings...
     //

     D3DXMATRIX matProj;
     D3DXMatrixPerspectiveFovLH( &matProj, D3DXToRadian( 45.0f ),
                                 640.0f / 480.0f,
                                 //(float)(g_d3dpp.BackBufferWidth / g_d3dpp.BackBufferHeight),
                                 0.1f, 100.0f );
     g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );

     g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
     g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
     g_pd3dDevice->SetRenderState( D3DRS_SPECULARENABLE, TRUE );

     g_pd3dDevice->SetLight( 0, &g_pLight0 );
     g_pd3dDevice->LightEnable( 0, TRUE );

     g_pd3dDevice->SetRenderState( D3DRS_AMBIENT, D3DCOLOR_COLORVALUE( 0.2f, 0.2f, 0.2f, 1.0f ) );

     //
     // Create a texture object...
     //

     D3DXCreateTextureFromFile( g_pd3dDevice, "test.bmp", &g_pTexture );

     g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
     g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );

     //
     // Create a vertex buffer...
     //
     // NOTE: When a device is lost, vertex buffers created using  
     // D3DPOOL_DEFAULT must be released properly before calling
     // IDirect3DDevice9::Reset.
     //

     g_pd3dDevice->CreateVertexBuffer( 4*sizeof(QuadVertex),
                                       D3DUSAGE_WRITEONLY,
                                       QuadVertex::FVF_Flags,
                                       //D3DPOOL_MANAGED, // Does not have to be properly Released before calling IDirect3DDevice9::Reset
                                       D3DPOOL_DEFAULT,    // Must be Released properly before calling IDirect3DDevice9::Reset
                                       &g_pVertexBuffer, NULL );
     void *pVertices = NULL;

     g_pVertexBuffer->Lock( 0, sizeof(g_quadVertices), (void**)&pVertices, 0 );
     memcpy( pVertices, g_quadVertices, sizeof(g_quadVertices) );
     g_pVertexBuffer->Unlock();

     //
     // Create a mesh object...
     //
     // NOTE: When a device is lost, meshes created using D3DXMESH_DYNAMIC
     // must be released properly before calling IDirect3DDevice9::Reset.
     //

     D3DXLoadMeshFromX( "teapot.x",
                        //D3DXMESH_SYSTEMMEM, // Does not have to be properly Released before calling IDirect3DDevice9::Reset
                        //D3DXMESH_MANAGED,    // Does not have to be properly Released before calling IDirect3DDevice9::Reset
                        //D3DXMESH_WRITEONLY, // Does not have to be properly Released before calling IDirect3DDevice9::Reset
                        D3DXMESH_DYNAMIC,      // Must be Released properly before calling IDirect3DDevice9::Reset
                        g_pd3dDevice,
                        NULL, NULL, NULL, NULL, &g_pTeapotMesh );
     return S_OK;
}

//-----------------------------------------------------------------------------
// Name: render()
// Desc:
//-----------------------------------------------------------------------------
void render( void )
{
     //
     // Before we render, we need to make sure we haven''t lost our device.
     // If we have, we''ll need to restore it before we can continue.
     //

     HRESULT hr;

     if( g_bDeviceLost == true )
     {
         // Yield some CPU time to other processes
         Sleep( 100 ); // 100 milliseconds

         //
         // Test the cooperative level to see if it''s okay to render.
         // The application can determine what to do on encountering a lost
         // device by querying the return value of the TestCooperativeLevel
         // method.
         //

         if( FAILED( hr = g_pd3dDevice->TestCooperativeLevel() ) )
         {
             // The device has been lost but cannot be reset at this time.
             // Therefore, rendering is not possible and we''ll have to return
             // and try again at a later time.
             if( hr == D3DERR_DEVICELOST )
                 return;

             // The device has been lost but it can be reset at this time.
             if( hr == D3DERR_DEVICENOTRESET )
             {
                 //
                 // If the device can be restored, the application prepares the
                 // device by destroying all video-memory resources and any
                 // swap chains.
                 //

                 invalidateDeviceObjects();

                 //
                 // Then, the application calls the Reset method.
                 //
                 // Reset is the only method that has an effect when a device
                 // is lost, and is the only method by which an application can
                 // change the device from a lost to an operational state.
                 // Reset will fail unless the application releases all
                 // resources that are allocated in D3DPOOL_DEFAULT, including
                 // those created by the IDirect3DDevice9::CreateRenderTarget
                 // and IDirect3DDevice9::CreateDepthStencilSurface methods.
                 //

                 hr = g_pd3dDevice->Reset( &g_d3dpp );

                 if( FAILED(hr ) )
                     return;

                 //
                 // Finally, a lost device must re-create resources (including  
                 // video memory resources) after it has been reset.
                 //

                 restoreDeviceObjects();
             }

             return;
         }

         g_bDeviceLost = false;
     }

     //
     // Render a teapot and textured quad...
     //

     g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
                          D3DCOLOR_COLORVALUE(0.35f,0.53f,0.7f,1.0f), 1.0f, 0 );

     g_pd3dDevice->BeginScene();
     {
         D3DXMATRIX matView;
         D3DXMATRIX matWorld;
         D3DXMATRIX matRotation;
         D3DXMATRIX matTranslation;

         D3DXMatrixIdentity( &matView );
         g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

         // Place and render first teapot...
         D3DXMatrixRotationYawPitchRoll( &matRotation, D3DXToRadian(g_fSpinX), D3DXToRadian(g_fSpinY), 0.0f );
         D3DXMatrixTranslation( &matTranslation, 1.5f, 0.0f, 6.0f );
         matWorld = matRotation * matTranslation;
         g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

         g_pd3dDevice->SetMaterial( &g_teapotMtrl );
         g_pTeapotMesh->DrawSubset(0);

         // Place and render textured quad...
         D3DXMatrixTranslation( &matTranslation, -1.5f, 0.0f, 6.0f );
         matWorld = matRotation * matTranslation;
         g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

         g_pd3dDevice->SetMaterial( &g_quadMtrl );
         g_pd3dDevice->SetTexture( 0, g_pTexture );
         g_pd3dDevice->SetStreamSource( 0, g_pVertexBuffer, 0, sizeof(QuadVertex) );
         g_pd3dDevice->SetFVF( QuadVertex::FVF_Flags );
         g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
     }
     g_pd3dDevice->EndScene();

     //
     // If Present fails with D3DERR_DEVICELOST the application needs to be
     // notified so it cleanup resources and reset the device.
     //

     hr = g_pd3dDevice->Present( NULL, NULL, NULL, NULL );

if( g_bHandleLostDevice == true )
{
if( hr == D3DERR_DEVICELOST )
g_bDeviceLost = true;
}
}

 

銆庡綋璁懼涓㈠け涔嬪悗銆?br>
銆銆涓嶈閫氳繃浠諱綍鏂瑰紡鍙戠敓浜嗚澶囦涪澶憋紝鎵鏈夌殑鎿嶄綔鍑犱箮閮戒細澶辨晥錛屽彧鏈塕elease()鍙互鐢ㄢ斺斿叾瀹濪3D浼氫繚璇佹湁閮ㄥ垎鎿嶄綔鍙互鎴愬姛錛屼絾鏄篃浠呬粎鏄?#8220;鍙互”鎴愬姛鑰屼笉鏄?#8220;涓瀹?#8221;鎴愬姛錛屾墍浠ヤ綘榪樹笉濡傝瀹氫涪澶辯殑鏃跺欏叏閮戒細澶辮觸姣旇緝濂解斺斾互鍙奍Direct3DDevice9::TestCooperativeLevel銆傚洜姝ゅ湪璁懼涓㈠け涔嬪悗錛屼綘搴旇鍋滄鏁翠釜娓告垙寰幆錛岃岄氳繃鍙嶅璋冪敤IDirect3DDevice9::TestCooperativeLevel鍒ゆ柇璁懼鏄惁鍙敤銆?br>
銆嶪Direct3DDevice9::TestCooperativeLevel銆?br>
銆銆榪欎釜鏂規硶媯嫻嬪綋鍓嶇殑璁懼鐘舵併傝繑鍥炲兼湁鍥涚錛欴3D_OK涓鍒囨甯革紝D3DERR_DEVICELOST璁懼涓㈠け錛孌3DERR_DEVICENOTRESET璁懼鍙互Reset銆傚彟澶栬繕鏈塂3D9鏂板鐨凞3DERR_DRIVERINTERNALERROR錛岄亣鍒拌繖涓綘灝卞畬铔嬩簡錛屽熀鏈笉鍙兘鎭㈠浜嗭紝緇堟紼嬪簭鍚с?br>銆銆鎸夌収欏哄簭鏉ヨ錛屽鏋滄父鎴忓湪姝e父榪愯錛孌3D_OK浼氳繑鍥烇紱濡傛灉鍙戠敓浜嗚澶囦涪澶卞茍涓斿湪榪欎釜鏃跺欎笉鑳芥仮澶嶏紝姣斿鍏ㄥ睆騫曟ā寮忕殑鏃跺欑敤鎴峰垏鎹㈠埌浜哤indows妗岄潰錛屽氨浼氳繑鍥濪3DERR_DEVICELOST錛涘鏋滅敤鎴峰張鍒囨崲鍥炰簡娓告垙錛岃澶囧彲浠ユ仮澶嶄簡錛堣繕娌℃仮澶嶅憿錛佸彧鏄?#8220;鍙互”鎭㈠鑰屽凡錛夛紝灝變細榪斿洖D3DERR_DEVICENOTRESET銆?br>銆銆鍙﹀錛孖Direct3DDevice9::Present涔熶細榪斿洖綾諱技鐨勫鹼紝涓嶈繃浣犳渶濂藉埆鎸囨湜榪欎釜錛岃佽佸疄瀹炵殑鐢═estCooperativeLevel銆傚洜涓篜resent鍦ㄨ澶囧彲浠ユ仮澶嶇殑鏃跺欒繕鏄繑鍥濪3DERR_DEVICELOST錛堝涓鍙ワ細D3D10鐨勬椂鍊橳estCooperativeLevel灝變細瀹屽叏鏁村悎鍒癙resent閲岄潰浜嗭紝鍙枩鍙春鍙枩鍙春錛?br>
銆庡鐞嗚澶囦涪澶便?br>
銆銆鐪嬩笅闈㈢殑浼唬鐮侊細

switch (IDirect3DDevice9::TestCooperativeLevel()){
銆銆case D3D_OK:
銆銆銆銆GameLoop();
銆銆銆銆break;
銆銆case D3DERR_DEVICELOST:
銆銆銆銆break;
銆銆case D3DERR_DEVICENOTRESET
銆銆銆銆OnLostDevice();
銆銆銆銆IDirect3DDevice9::Reset();
銆銆銆銆OnResetDevice();
銆銆銆銆break;
銆銆default:
銆銆銆銆QuitGame();
銆銆銆銆break;
}

銆銆GameLoop()灝辨槸浣犵殑娓告垙榪愯鐨勮繃紼嬩簡銆傛妸榪欎釜switch鍐欏湪鎴戜滑娓告垙妗嗘灦鐨凣ameMain()閮ㄥ垎錛屽叿浣撶殑浣嶇疆鍙互鐪嬩換浣曚竴璇濋檮甯︾殑婧愪唬鐮併?br>銆銆濂藉儚鎴戜竴鐩存病鏈夎IDirect3DDevice9::Reset鐨勫弬鏁板晩錛熷洜涓哄彧鏈変竴涓弬鏁幫紝灝辨槸鎸囧悜D3DPRESENT_PARAMS鐨勬寚閽堛傛妸浣犵涓嬈″垱寤鴻澶囨椂浣跨敤鐨凞3DPRESENT_PARAMS緇撴瀯淇濆瓨璧鋒潵錛屼緵Reset鏉ョ敤銆?br>銆銆OnLostDevice()灝辨槸Release鎺夋墍鏈塂3DPOOL_DEFAULT鐨勮祫婧愶紝OnResetDevice()灝辨槸Create*()鎭㈠鍟︼紒浣犲彲鑳芥敞鎰忓埌ID3DXFont銆両D3DXSprite絳夌瓑閮芥湁鍚屽悕鐨勬柟娉曪紝灝辨槸鍦ㄨ繖涓椂鍊欒皟鐢ㄧ殑銆傚鏋滀綘娌℃湁榪欎箞鍋氾紝涔熷氨鏄榪樹繚鐣欑潃浠諱綍D3DPOOL_DEFAULT鐨勮祫婧愮殑璇濓紝IDirect3DDevice9::Reset灝變竴瀹氫細澶辮觸銆?br>銆銆鍙﹀鍦∣nResetDevice閲岄潰浣犺繕瑕侀噸鏂拌繘琛孲etRenderState銆丼etSamplerState絳夌瓑錛孯eset涔嬪悗榪欎簺涓滆タ涔熶涪澶變簡銆傚疄闄呬笂Reset鍜岄噸鏂板垱寤轟竴嬈¤澶囩被浼鹼紝鎵涓嶅悓鐨勬槸閲嶆柊鍒涘緩璁懼鐨勮瘽浣犻渶瑕佽繛D3DPOOL_MANAGED鐨勮祫婧愪篃Release鎺夈傝繖涓瘽棰樺氨涓嶈璁轟簡銆?br>銆銆浠庝唬鐮佸彲浠ョ湅鍑烘潵錛孌3DERR_DEVICELOST鏃剁▼搴忎粈涔堥兘娌″仛錛屽彧鏄湪鍌葷瓑銆傛垜璁や負榪欐槸涓涓ソ涔犳儻錛屽洜涓哄疄鍦ㄤ笉鑳戒繚璇佸湪D3DERR_DEVICELOST鏃墮櫎浜哛elease榪樿兘騫蹭粈涔堬紝涓庡叾榪欐牱榪樹笉濡傜瓑璁懼鑳界敤浜嗗啀璇淬?br>
銆銆瀹炲湪鎳掑緱綆¤祫婧愮殑璇濓紝鍏ㄩ儴D3DPOOL_MANAGED濂戒簡銆傝嚦浜庢覆鏌撳璞★紵鑷繁鎯沖姙娉曘?br>
銆庝漢宸ュ埗閫?#8220;璁懼涓㈠け”銆?br>
銆銆“騫插槢榪樿鍒墮犺澶囦涪澶卞晩錛?#8221;濡傛灉鏇存敼娓告垙鍒嗚鯨鐜囥佽壊娣便佸垏鎹㈠叏灞忓箷鍙婄獥鍙g姸鎬侊紝榪涜榪欐牱鐨勬搷浣滀篃瑕侀氳繃Reset錛屽悓鏍風殑錛孯eset涔嬪墠涔熻閲婃斁鎺夋墍鏈塂3DPOOL_DEFAULT璧勬簮錛堝叾瀹炰弗鏍兼潵璇達紝榪樻湁鏇村鐨勮祫婧愪篃瑕侀噴鏀撅紝涓嶈繃鍦?D涓嬪熀鏈笉浼氬垱寤鴻繖綾昏祫婧愶紝浣犲氨涓嶇敤綆′簡錛夊茍涓旇皟鐢↖D3DXSprite::OnLostDevice涔嬬被鐨勬柟娉曘傝繖灝辨槸浜哄伐鍒墮?#8220;璁懼涓㈠け”浜嗐傚疄闄呬笂鍦ㄨ繖涓繃紼嬭澶囧茍娌℃湁鐪熸鐨勪涪澶憋紝鍙槸浼氭湁涓孌墊椂闂村浜庝笉鍙敤鐨勭姸鎬侊紝姝ゆ椂Reset灝氭湭榪斿洖錛屾暣涓狣3D璁懼灝卞ソ鍍忔浜嗕竴鏍楓備婦涓緥瀛愶紝浣犲垏鎹㈡闈㈠垎杈ㄧ巼錛屼細鏈夐偅涔堜竴孌墊椂闂存樉紺哄櫒涓婁粈涔堥兘涓嶆樉紺猴紝鐒跺悗寰堝揩灝辨甯鎬簡銆傚拰榪欎釜鐜拌薄鏄悓涓涓師鍥犮俁eset鎴愬姛鍚庤寰楁仮澶嶈祫婧愩?br>銆銆浣犲彲鑳芥敞鎰忓埌榪欓噷鐨凴eset鍜屼笂闈㈢殑Reset涓嶆槸涓鍥炰簨銆傜殑紜槸榪欐牱錛岃繖閲屾槸涓轟簡閲嶈鐘舵佽屼笉鏄仮澶嶈澶囥傚洜姝ゆ洿鏀瑰垎杈ㄧ巼銆佽壊娣辯殑Reset闇瑕佸啓鍒皊witch澶栭潰錛屼篃灝辨槸鍒拰瀹冩悈鍜岀殑鎰忔?_-bb銆傝屼笖浣犲彧闇瑕丱nLostDevice -> Reset -> OnResetDevice銆傝浣忥細姝g‘鐨勮皟鐢≧eset涓嶄細閫犳垚璁懼涓㈠け錛岃繖涓蹇靛埆寮勬販浜嗐?nbsp; 

杞嚜錛?/font>http://blog.csdn.net/zdl1016/archive/2007/07/04/1678507.aspx



]]>
久久久久亚洲精品无码网址| 久久91精品国产91久久小草| 久久久久国产精品麻豆AR影院| 亚洲国产天堂久久综合网站| 久久99国产精品成人欧美| 日韩亚洲国产综合久久久| 亚洲国产另类久久久精品黑人| 97久久精品午夜一区二区| 97久久精品人人澡人人爽| 久久大香萑太香蕉av| www.久久热| 色综合久久久久综合99| 久久99国产综合精品| 青青青青久久精品国产h久久精品五福影院1421| 久久精品女人天堂AV麻| 久久人人妻人人爽人人爽| 久久久免费观成人影院 | 天天久久狠狠色综合| 日韩精品无码久久一区二区三| 久久大香香蕉国产| 亚洲中文久久精品无码ww16| 精品久久久久国产免费| 91精品国产高清久久久久久io| 欧美伊人久久大香线蕉综合| 91久久精品视频| 久久久久综合网久久| 99久久99这里只有免费的精品| 欧美日韩精品久久久久| 久久精品国产黑森林| 久久99精品久久久久久9蜜桃| 99久久精品午夜一区二区| 亚洲日韩中文无码久久| 精品熟女少妇AV免费久久| 久久亚洲国产最新网站| 色99久久久久高潮综合影院 | 色综合久久久久无码专区| 久久久久久国产a免费观看黄色大片| 久久不见久久见免费影院www日本| 国产精品激情综合久久| 精品久久国产一区二区三区香蕉 | 精品国产青草久久久久福利|