游戏开发论坛

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

D3DXCreateTextureFromResource使用注意报!

[复制链接]

2

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2006-7-27 15:44:00 | 显示全部楼层 |阅读模式
这是我在被这个函数狠狠的郁闷之后,找到解决办法时候写的帖子……原帖在自己家里:
http://blog.sina.com.cn/u/4070692f010004iw


D3DXCreateTextureFromResource使用注意!
HRESULT WINAPI D3DXCreateTextureFromResource(
    LPDIRECT3DDEVICE9 pDevice,
    HMODULE hSrcModule,
    LPCTSTR pSrcResource,
    LPDIRECT3DTEXTURE9 *ppTexture
);

1. 如果图是BMP格式, 可以直接导入,会出现在资源管理器的"Bitmap"类型下面;
2. 如果是其它格式, 先导入, 类型可能可以随便写什么,不过最好写RCDATA吧。
   然后打开.rc文件, 把类型修改成"RCDATA DISCARDABLE"。
   例如:
       IDR_JPG1    RCDATA DISCARDABLE    "texture.JPG"
   再进入资源管理器, 图片的ID应该出现在"Data"类型下面了。
3. 程序调用:
D3DXCreateTextureFromResource( m_pd3dDevice, NULL, MAKEINTRESOURCE(IDR_JPG1), &m_pTexture );
就搞定了。

说明:
    这个函数是D3D从rc资源中读取图片创建纹理的函数(我用的SDK版本是支持DX9b的Summer 2003,估计DX9版本内应该没什么变化)。但是秉承了DX文档的一贯优良传统,在我们为不断的出错抓狂的时候,配套文档中依然没有能有任何实质性帮助的内容。所以特别放到这里,希望能有机会帮到别人——因为狗狗上搜不到什么关于这个函数实际使用情况的中文文章。

  参数1,D3D设备了,不用解释;
  参数2,资源存储的模块,置NULL表示从调用的进程模块读取,一般情况下用NULL就可以,除非你的资源放在另外的DLL里面;
  参数3,用多MFC绘图的人都知道,这里绝对不是什么"IDB_BITMAP1"之类的实际路径名字,或者资源名称,而是用MAKEINTRESOURCE宏处理过的资源数据流(大概是这个意思吧?)
  参数4,输出的纹理指针,不用解释了。

  另外就是文档里面那个该死的说BMP类型要作为RC_BITMAP导入;其它类型要做为RT_RCDATA导入。根本没有多余说明,幸好在GameDev上面搜到了一个帖子里面有人提到使用其它类型资源,要把类型修改成RCDATA DISCARDABLE。经过测试,bmp/png/jpg/tga都是没问题的。

  额外补充,用VC资源管理器添加别的内容导致程序重新生成.rc的时候,它不认得的RCDATA DISCARDABLE类型是会被抹掉的!!!得再次手工添加……所以,还是尽量最后再一次性手工添加进去非bmp类型的图片资源吧……

错误情况:
1.如果直接把第三个参数LPCTSTR写成"IDB_BITMAP1",就会出现D3DXERR_INVALIDDATA错误;
2.如果使用了BITMAP外其它类型的资源,而没有在.rc里面把类型修改成RCDATA DISCARDABLE,也会出现D3DXERR_INVALIDDATA错误。


  创建好后,其它使用都和普通的纹理没区别,例程就免了吧^_^a

12

主题

76

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2006-7-28 10:27:00 | 显示全部楼层 |阅读模式
哈,楼主的贴子彻底解决了我两个月前的问题,问题原贴:
http://www.gameres.com/bbs/showthread.asp?threadid=56536
经过试验,一定要RCDATA,我改成Data也load不到, 现在我可以不用D3DXLoadSurfaceFromFileInMemory作替代了。

12

主题

76

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2006-7-28 10:30:00 | 显示全部楼层

Re:D3DXCreateTextureFromResource使用注意报!

哈,楼主的贴子彻底解决了我两个月前的问题,问题原贴:
http://www.gameres.com/bbs/showthread.asp?threadid=56536
经过试验,一定要RCDATA,我改成Data也load不到, 现在我可以不用D3DXLoadSurfaceFromFileInMemory作替代了。

2

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
 楼主| 发表于 2006-7-28 14:43:00 | 显示全部楼层

Re:D3DXCreateTextureFromResource使用注意报!

回来看一下 @_@  有帮到人就好了……有空去我的叶子看看啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 01:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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