缓冲器:访问索引缓冲器



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

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

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

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

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

VOID* pIndices;

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

memcpy( pIndices, g_Indices, (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
Tags:  弹簧缓冲器 三态缓冲器 缓冲器的作用 缓冲器

延伸阅读

最新评论

发表评论