为什么我们需要带vbuffer-> Lock()的void *? (Direct3D9)

问题描述 投票:0回答:1

因此,我目前正在directxtutorial.com上学习Direct3D9,并通过void* pVoid函数遇到了vbuffer->Lock()。我知道什么是void *,我只是不明白为什么在这种情况下我们需要它。该网站说pVoid将被创建的顶点在内存中的位置填充,但这不只是vbuffer的位置?如果是这样,为什么我们不能在锁定后仅使用memcpy将顶点直接复制到vbuffer中,为什么我们需要将它们复制到pVoid中?预先感谢您的帮助。

buffer void-pointers directx-9 vertex-buffer direct3d9
1个回答
0
投票

缓冲区为void类型的基本原因是因为它没有固有类型。如果它是D3DFMT_A8R8G8B8,则可以将其强制转换为uint32_t*,因为每个像素都是32位。如果是D3DFMT_A32B32G32R32F,则可以将其强制转换为float*。如果只想按字节工作,则可以将其强制转换为uint8_t*

此时,您不应该学习Direct3D9。它已有20多年的历史了,在很大程度上被认为是传统。 Direct3D 11是一个更好的起点。参见this blog postDirectX Tool Kit。也就是说,出于所有相同的原因,Map仍以void*的形式返回指向锁定内存Direct3D资源的指针。

© www.soinside.com 2019 - 2024. All rights reserved.