我写了一个模拟器,正在移植到 Linux。目前我正在使用 Direct3D 11 制作视频,我正在将其移植到 OpenGL(我现在正在 Windows 上运行)。我渲染到 1024x1024 纹理,每帧上传到内存(原始硬件并不真正适合现代硬件加速,所以我只是在软件中完成)。但是,我发现在 OpenGL 中上传纹理要慢得多。
在 Direct3D 中,每帧上传纹理都会将帧速率从 416 下降到 395(下降 5%)。在 OpenGL 中,它从 427 下降到 297(下降了 30%!)。
这是我的绘图函数中的相关代码。
Direct3D:
D3D11_MAPPED_SUBRESOURCE resource;
deviceContext_->Map(texture, 0, D3D11_MAP_WRITE_DISCARD, 0, &resource);
uint32_t *buf = reinterpret_cast<uint32_t *>(resource.pData);
memcpy(buf, ...);
deviceContext_->Unmap(texture, 0);
OpenGL:
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1024, 1024, 0, GL_RGBA,
GL_UNSIGNED_BYTE, textureBuffer);
任何人都可以提出可能导致这种放缓的原因吗?
如果有任何可能性,我正在运行带有 NVIDIA GeForce GTX 550 Ti 的 Windows 7 x64。