1
我想讓我的代碼平行,但對於有經驗的人員有一些問題。DirectX渲染和OMP
1]這樣做是個好主意嗎?
#pragma omp parallel num_threads(2)
{
const int threadID=omp_get_thread_num();
if(threadID==0) while(WM_QUIT != msg.message){ // < Engine stuff
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}else{
engine.omp_renderPrepare();
}
}
if(threadID==1) while(WM_QUIT != msg.message){ // < Render stuff
engine.omp_renderApply();
}
}
// Functions from the engine class:
inline void omp_renderPrepare(){
if(gDevice.omp_isReady()){
#pragma omp critical(renderPrepare)
if(!omp_rendering){
omp_sceneReady=0;
renderPrepare();
omp_sceneReady=1;
}
}else{
Sleep(42); // If the device is not ready, dont spam.
}
}
inline void omp_renderApply(){
if(gDevice.omp_isReady()){
#pragma omp critical(omp_renderApply)
if(omp_sceneReady){
omp_rendering=1;
renderApply();
omp_rendering=0;
}
}else{
Sleep(42); // If the device is not ready, dont spam.
}
}
我已經應用,但它是&我的代碼慢如蝸牛,當我調整窗口大小的CPU沉重的,因爲它必須:
- 設置一個布爾「omp_deviceReady」來假,所以渲染將停止。
- 等待平行部分停止。
- 調整圖形緩衝區大小。
- 將「omp_deviceReady」設置爲true,以便再次發生渲染。
- 只要用戶調整窗口大小就重複。
2]由於我的OMP的代碼是CPU [約50%一致的沉重任務經理],什麼是處理並行渲染的好辦法?
從我的編碼經驗看,準備緩衝區和單獨顯示緩衝區不是一個好主意。我應該使用多個交換鏈來查找。 – RandomClown
您使用的是什麼版本的DirectX?根據API版本,多線程渲染技術可能會有很大差異。 – catflier
Ohh,我正在使用DX 10/11 – RandomClown