VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(g_Vertices), (BYTE**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );
g_pVB->Unlock();
一个将定点数据靠被到定点缓冲区的过程,为什么一定要进行一个Lock和Unluck呢?我们调用memcpy的意图是将定点数据copy到显存中去,SDK的解释是:This mechanism of locking and unlocking is required because the vertex buffer may be in device memory.也就是说定点缓冲去有可能是在物理内存而不是显卡显存中的.这样问题就来了.物理内存中存在着一个多线程的问题,就好像Double lock checking模式一样,显示的数据随时有可能被修改,而这有是绝对不允许的.
本文探讨了DirectX SDK中关于锁定和解锁顶点缓冲区的原因。通过解释这一机制的重要性,尤其是针对多线程环境下可能产生的数据同步问题,揭示了为何在复制顶点数据到显存前需要先锁定顶点缓冲区。
857

被折叠的 条评论
为什么被折叠?



