DirectX3D中LockRect接口使用注意事项
来源:互联网 发布:如何用php开发网站 编辑:程序博客网 时间:2024/05/21 01:32
项目中遇到一个问题:使用D3DXCreateTexture( pDevice, nWidth, nHeight, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM,&pCreateMemTexture);在内存中创建了一个Texture,然后调用pCreateMemTexture->LockRect()锁定其内存,并更新其内容。在程序退出时调用pCreateMemTexture->Release()时程序Crash掉,并且有时死的地方还不一定是Release,而是使用这个Texture的某一个DirectX3D函数中,找了好长时间,发现是由于在LockRect()后更新其内存时越界造成的,修改后一切Ok!
关于LockRect()函数,个人认为如下两点需要注意:
1.D3DLOCKED_RECT *pLockedRect参数中的Pitch,这个值指定的是待锁定纹理的宽度,而不是你锁定后的内存块的宽度,比如有一张1920*1080大小的纹理,使用RECT(0,0,800,600)的参数调用LockRect接口,Pitch的值是1920,而不是800,并且这个Pitch的单位是Byte,所以如果如果你的纹理格式为ARGB的话,这个值应该乘以4,这个一定要注意,否则容易造成后续处理出错。
2.LockRect()函数返回的pLockedRect->pBits在结尾处没有fd fd fd fd的内存结束标志,这个和普通new出来的不一样,所以想通过查看这个标志确定是否越界是无法做到的,这里我就有个问题不太明白了,如果没有这个标志的话release的时候DirectX怎么知道越界与否?这个接口的内部是如何运作的?如果哪位高手知道的话烦请留言。
- DirectX3D中LockRect接口使用注意事项
- DirectX3D画线接口ID3DXLine
- DirectX3D画线接口ID3DXLine
- .NET 中接口使用时的注意事项
- 在DirectX3D中使用Havok物理引擎的教程
- DirectX 3D_实践之DirectX3D中网格的使用
- 在DirectX3D中使用Havok物理引擎的教程
- DirectX3D中绘制立方体
- 使用接口的注意事项
- 接口使用的注意事项
- 关于D3D中LockRect的pitch大小问题
- Delphi7中接口使用的注意事项与原因
- EJB3中SessionBean使用Local及Remote接口的注意事项
- JDK中List接口subList方法 使用注意事项
- Map接口的使用注意事项
- Map接口的使用注意事项
- DirectX 3D_实践之DirectX3D中模板缓存的使用
- DirectX 3D_实践之DirectX3D中渐进网格的使用
- SWFUpload 上传文件控件
- Criteria和Detachedcriteria的区别及应用
- mysql commend
- 排序问题(二)
- 安卓开发------安卓开发中蓝牙应用开发浅析
- DirectX3D中LockRect接口使用注意事项
- SD卡驱动分析(一)
- 自动刷新网页,自动刷新当前页面,JS调用
- vim 一些简单常用的操作命令
- g++参数介绍
- 安装ArcEngine 10 碰到的问题
- 向 PPT 表格中添加行或列
- 记牢OO概念的图片
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句