会员: 密码:  免费注册 | 忘记密码 | 会员登录 网页功能: 加入收藏 设为首页 网站搜索  
游戏开发 > 程序设计 > 3D图形
访问索引缓冲器
发表日期:2007-01-24 17:29:48作者: 出处:  

Microsoft DirectX 8.1(C++)
访问索引缓冲器

索引缓冲器对象能够被应用程序直接访问其分配的内存。通过调用"IDirect3DIndexBuffer8::Lock"方法你可以得到一个指向索引缓冲内存的指针,然后访问这块内存区:填充新的索引数据或者读取任何其中的数据。”Lock”方法接受四个参数。第一个参数”OffsetToLock”是索引数据的偏移。第二个参数是索引数据的尺寸,其单位是字节。第三个参数”ppbData”被”Lock”方法使用,如果函数调用成功,其指向的地址被填充为索引数据的指针地址。

最后个参数”Flags”告诉系统如何缩定(Lock)住内存。你能使用它来表明你的应用程序将如何访问索引数据。”Flags”详细的数值依赖应用程序访问的方式,这样将允许驱动器(DirectX)执行最好的访问方式。如果你的应用程序只读取数据,使用D3DLOCK_READONLY标志;包含这个标志能够使得Microsoft®Direct3D®优化其内在的手续以提高效率并只给予内存只读权限。
在你填充或读取望索引数据后,调用”IDirect3DindexBuffer8::Unlock”方法。下面是示范代码:

// 这个示范代码假定IB的类型可变
// LPDIRECT3DINDEXBUFFER8 和 g_Indices 已经被适当的初始化

// 为力填充索引数据,你必须锁定缓冲区以获得访问权限。
// 这个机制是必须的,因为索引数据可能在显存里(显存不可直接访问?-lzp)

VOID* pIndices;

if( FAILED( IB->Lock( 0, // 填充缓冲的其始位置
    sizeof(g_Indices), // 填充的数据尺寸
    (BYTE**)&pIndices, // 返回数据地址
    0 ) ) ) // 使用默认标志
return E_FAIL;

memcpy( pIndices, g_Indices, sizeof(g_Indices) );
IB->Unlock();


注意:
如果你通过D3DUSAGE_WRITEONLY标志创建的索引缓冲器,不要使用D3DLOCK_READONLY标志锁定。如果你的程序只从索引缓冲器读取数据,使用D3DLOCK_READONLY标志可以使得Direct3D优化内部的手续以提高效率并只给予只读访问权限。

参阅”Using Dynamic Vertex and Index Buffers”得到在调用”Lock”方法中如何使用D3DLOCK_DISCARD或D3DLOCK_NOOVERWRITE标志。
在C++中,由于直接访问分配的索引缓冲区,你要确定你的程序适当的访问分配的内存,否则,你冒着渲染无效内存的风险。在你的程序从一个索引缓冲区移动数据是请使用索引格式的跨度

得到缓冲器描述
通过调用”IDirect3DindexBuffer8::GetDesc”得到缓冲器描述。这个方法填充顶点缓冲器的信息到结构体”D3DINDEXBUFFER_DESC”中.

原文:DirextX 8.1 C++ helpDirectX GraphicsProgrammers GuideAdvanced TopicsObject GeometryIndex BuffersAccess the Contents of an Index Buffer
返回顶部】 【打印本页】 【关闭窗口

关于我们 / 给我留言 / 版权举报 / 意见建议 / 网站编程QQ群   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net 加载时间 0.00298