gpt4 book ai didi

c++ - 谁能告诉我这段 C++ 的作用是什么?

转载 作者:太空狗 更新时间:2023-10-29 23:48:15 25 4
gpt4 key购买 nike

CUSTOMVERTEX* pVertexArray;

if( FAILED( m_pVB->Lock( 0, 0, (void**)&pVertexArray, 0 ) ) ) {
return E_FAIL;
}


pVertexArray[0].position = D3DXVECTOR3(-1.0, -1.0, 1.0);
pVertexArray[1].position = D3DXVECTOR3(-1.0, 1.0, 1.0);
pVertexArray[2].position = D3DXVECTOR3( 1.0, -1.0, 1.0);
...

我有一段时间没有接触过 C++ - 因此这个话题,但是这段代码让我自己很困惑。在调用 m_pVB->Lock 之后,数组被初始化。

这很棒,但我遇到的问题是这是如何发生的。下面的代码使用九个元素,但我正在使用的代码的另一个功能(几乎是复制/粘贴)只访问说四个元素。

CUSTOMVERTEX 是一个结构,但我的印象是这无关紧要,需要将结构/对象数组初始化为固定大小。

谁能解决这个问题?

编辑:

根据答复,它怎么知道我需要数组中的九个元素,还是四个等等...?

所以只要缓冲区足够大,元素都是合法的。如果是这样,如果我没记错的话,这段代码正在设置缓冲区大小。

if( FAILED( m_pd3dDevice->CreateVertexBuffer( vertexCount * sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &m_pVB, NULL ) ) ) {
return E_FAIL;
}

最佳答案

m_pVB 指向一个图形对象,在本例中大概是一个顶点缓冲区。这个对象保存的数据通常不会在 CPU 可访问的内存中——它可能保存在图形硬件的板载 RAM 中,或者根本没有分配;它可能在任何特定时间被 GPU 使用;所以如果你想从它读取或写入它,你需要告诉你的图形子系统这一点,这就是 Lock() 函数所做的 - 与 GPU 同步,确保主内存中有足够大的缓冲区来容纳数据并且它包含了你此时从CPU的角度所期望的数据,并返回给你指向那个主存的指针。需要有一个相应的 Unlock() 调用来告诉 GPU 您已完成读取/改变对象。

要回答有关如何确定缓冲区大小的问题,请查看构造顶点缓冲区的位置 - 您应该会看到顶点格式的描述和传递给创建它的函数的元素计数。

关于c++ - 谁能告诉我这段 C++ 的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1862821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com