游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3001|回复: 4

使用CFileDialog后D3D创建纹理失败!?

[复制链接]

12

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
发表于 2009-1-13 08:32:00 | 显示全部楼层 |阅读模式
今天遇见个奇怪的问题,我建了个MFC的MDI程序,在里面用CFileDialog打开一个图片并用D3D根据文件名创建个纹理,奇怪的是只要调用DoModal()或者在对话框中点“确定”,D3DXCreateTextureFromFile就会失败,返回个
D3DERR_INVALIDCALL,纹理对象也是0x00000000,但是偏偏点“取消”后就会创建成功~~~,我先以为是D3D设备丢失了,便Reset了一下,也没效果,即使是在DoModal()后面再创建D3D设备,也没用~,部分的代码如下:

void TopLeftView::OpenPicFile()
{
        CString strFilter = _T(&quotng图片|*.png|Bitmap图片|*.bmp|Gif图片|*.gif|Jpeg图片|*.jpg||");

        CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, strFilter);
        if ( dlg.DoModal() == IDOK )
        {
           }

        HRESULT hr = D3DXCreateTextureFromFile(m_pDevice, _T("Data/Tiles.png"), &m_pTexture);
        if ( FAILED(hr) )
           {
            ::AfxMessageBox("D3DXCreateTextureFromFile Failed");
           }

           ...
}
不知各位大侠有没有遇到过类似现象或有什么办法?小弟高了一天了,快疯了~~~~
            [em7]

9

主题

39

帖子

43

积分

注册会员

Rank: 2

积分
43
发表于 2009-1-13 11:21:00 | 显示全部楼层

Re:使用CFileDialog后D3D创建纹理失败!?

这个问题曾经教育了我,要永远使用绝对路径,因为有很多东西可以改变当前目录,比如CFileDialog

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-1-13 16:23:00 | 显示全部楼层

Re:使用CFileDialog后D3D创建纹理失败!?

LS油菜

21

主题

112

帖子

118

积分

注册会员

Rank: 2

积分
118
发表于 2009-1-13 16:56:00 | 显示全部楼层

Re:使用CFileDialog后D3D创建纹理失败!?

哦。。。
CFileDialog 在初始化对象的时候,改变了程序的当前路径
所以后面的_T("Data/Tiles.png"),并不是,LZ期待的那个路径,所以创建纹理失败,原因是,找不到文件。。。

w_anthony 兄弟正解。又学了点东西。。

12

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
 楼主| 发表于 2009-1-13 19:33:00 | 显示全部楼层

Re: 使用CFileDialog后D3D创建纹理失败!?

还真是这个问题~~,又学到一个东西,真是谢谢大家了 ![em3]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 12:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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