Linuxに移植中のエミュレーターを作成しました。現在、ビデオを作成するために、OpenGL(現在Windowsで実行している)に移植しているDirect3D11を使用しています。フレームごとにメモリにアップロードする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 GTX550Tiを搭載したWindows7x64を実行しています。