我需要在Windows的项目中在视频卡内存中分配位图。因为项目使用除GDI以外的其他2d库,所以CreateCompatibleBitmap没用。
然后我找出一个使用DX的方法,这是我的代码:
if(FAILED(g_D3DDevice->CreateVertexBuffer(10240 * 1024, 0,
D3DFVF_VERTEX, D3DPOOL_DEFAULT, &g_VertexBuffer,
NULL))) return false;
// Fill the vertex buffer.
void *ptr;
if(FAILED(g_VertexBuffer->Lock(0, 1024 * 10240,
(void**)&ptr, 0))) return false;
//do something...
//printf("ptf = %x\n", ptr);
//memcpy(ptr, objData, sizeof(objData));
g_VertexBuffer->Unlock();
到目前为止效果很好。但是有任何副作用吗?
答案 0 :(得分:2)
Sideeffect:
除了这个副作用之外,请务必检查此过程是否成功,因为视频卡内存不足以提供最“用户明显”的错误。
至于它为什么会很慢:通过将它放入你的显卡内存,每次你想要写/读时你都必须请求访问顶点,这比在常规内存中实际访问它要慢。
答案 1 :(得分:2)
我无法想象任何合理的理由想要这样做,但总的来说无论如何都不可能。 Windows PC具有广泛的硬件,许多甚至没有单独的视频内存的概念。对于那些没有保证性能特性的人来说,这就是为什么Direct3D有很多方法可以向驾驶员指出你的预期用途,以便驾驶员可以决定最佳定位资源的位置(除其他外,如何最好地将它们放在内存)而不是提供方法来指定“在视频内存中”以及在不同硬件类型中不一致定义的其他概念。
如果你说你的老板要求你这样做,这似乎是一个不良项目管理的案例研究 - 指明要做什么的实施细节,而不是指定项目目标,让工程师负责实施,以弄清楚如何最好的实现它们。据推测,这里的真正目标是提高某些任务或操作的性能。几乎可以肯定,你所做的并不是实现这一目标的最佳方法。