游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1837|回复: 3

如何寻回丢失了的纹理?

[复制链接]

64

主题

856

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
发表于 2004-5-26 10:45:00 | 显示全部楼层 |阅读模式
  我是用的 LPD3DXSPRITE(用于绘制纹理)、 LPDIRECT3D8、 LPDIRECT3DDEVICE8 做的2D程序,当我用Alt+Tab等方式切换D3D程序后,画面将无法再正常显示。
  于是,我用
  1.pd3dDevice->Reset(&d3dpp);//先恢复设备。
  2.pd3dDevice->SetRenderState(........);// 重新设置渲染设备的属性
  3.D3DXCreateTextureFromFile(.......);//重建纹理
  但是,当我再次显示画面时:pD3DXSprite->Draw(....纹理...);却依然无法显示出画面,请问大家这是怎么回事?应该如何寻回失去的纹理呢?
[em17]

64

主题

856

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
 楼主| 发表于 2004-5-26 11:39:00 | 显示全部楼层

高手帮帮忙哦

  

27

主题

169

帖子

169

积分

注册会员

Rank: 2

积分
169
发表于 2004-5-26 16:15:00 | 显示全部楼层

Re:如何寻回丢失了的纹理?

给一段《real-time render in directx》的恢复代码给你看,希望对你有用
HRESULT CHostApplication::RestoreDevice()
{
        HRESULT Result = m_pD3DDevice->TestCooperativeLevel();

        //If the device is lost, enter a loop waiting for
        //it to be restored.
        while(Result == D3DERR_DEVICELOST)
        {
                //Keep testing the level until it says we
                //can reset.
                while(Result != D3DERR_DEVICENOTRESET)
                {
                        //Give up control to other applications
                        Sleep(1000);

                        //Pump messages in order to respond to messages
                        //that may lead to restoration.
                        MSG Message;
                        PeekMessage(&Message, 0, 0, 0, PM_REMOVE);
                        TranslateMessage(&Message);
                        DispatchMessage(&Message);

                        //Check to see if things are ready to be reset
                        Result = m_pD3DDevice->TestCooperativeLevel();
                }

                //Reset the device using the saved parameters
                if (FAILED(m_pD3DDevice->Reset(&m_PresentParameters)))
                        Result = D3DERR_DEVICELOST;
        }       

        return S_OK;
}

64

主题

856

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
 楼主| 发表于 2004-5-27 09:52:00 | 显示全部楼层

Re:如何寻回丢失了的纹理?

我的LPDIRECT3DDEVICE8设备恢复代码也基本和上面相似:
if (pd3dDevice->TestCooperativeLevel()==D3DERR_DEVICENOTRESET)
{
  ...
  pd3dDevice->Reset(&d3dpp);//跟踪调试发现执行成功

SAFE_RELEASE(pSpr);
D3DXCreateSprite(pd3dDevice,&pSpr);//重建LPD3DXSPRITE

SAFE_RELEASE(pTexture);
  D3DXCreateTexture(...);//重建纹理
}
可是这样恢复出来的依然无法显示,而且还导致死机,不知道是为什么。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-1 09:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表