我需要在 Windows 项目中的视频卡内存中分配位图。因为该项目使用了除 GDI 之外的其他二维库,所以 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();
到目前为止效果很好。但是有什么副作用吗?
最佳答案
副作用:
- 每次要写入或读取 VertexBuffer 时都必须解锁
- 比正常内存慢
除了这个副作用之外,确保检查这个过程是否成功,因为内存不足的视频卡不会提供最“用户明显”的错误。
至于为什么它会很慢:通过将它放入您的视频卡内存中,您每次想要写入/读取时都必须请求访问顶点,这比在常规内存中实际立即访问它要慢。
关于windows - 如何在 Windows 中直接分配显卡内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16805796/