2015-01-31 7 views
-1

질문이 동적대 (만들면 기본적를 usagetype 사용)동적 Constantbuffer 또는 동적 버텍스 버퍼 C++에서와 DX11

동적 ConstantBuffer상수 버퍼 업데이트 frequentlky를 사용하여 사용을 meemory하는 realted있다 버텍스 버퍼

나는 항상 Constnat 버퍼 사용을 기본으로 정의하고 실시간으로 변경 사항을 업데이트했습니다.

예 1

D3D11_BUFFER_DESC desc; 
desc.Usage = D3D11_USAGE_DEFAULT; 
// irrelevant code omitted 

void Render() 
{ 
WORLD = XMMatrixTranslation(x,y,z); // x,y,z are chaned dynamiclly 
ConstantBuffer cb; 
cb.world = WORLD; 

devcon->UpdateSubResource(constantBuffer,0,0,&cb,0,0); 

// Set the VSSetBuffer and PSSetBuffer 
} 

그러나 최근에 나는 그들을 업데이트 할 devcon->지도()와 devcon-> 매핑 해제()를 사용 rastertek에서 튜토리얼을 가로 질러 와서 동적으로 사용을 정의했다 예 2

void CreateBuffer(){ 
D3D11_BUFFER_DESC desc; 
desc.Usage = D3D11_USAGE_DYNAMIC; // irrelkavant code ommited 
} 
void Render() 
{ 
WORLD = XMMatrixTranslation(x,y,z); // x,y,z are chaned dynamiclly 
D3D11_MAPPED_SUBRESOURCE mappedRes; 
ConstantBuffer *cbPtr; 

devcon->Map(constantBuffer,0,D3D11_MAP_WRITE_DISCARD,0,&mappedRes); 
cbPtr = (ConstantBuffer*)mappedRes.pData; 
cbPtr->World = WORLD; 
devcon->UnMap(constantBuffer,0); 
} 

그래서 질문입니다.

동적 Constant 버퍼 (eg2)를 사용하여 runtim (eg1)의 기본 ConstatnBuffer 업데이트보다 성능이 향상 되었습니까?

이 ..이 의심 내가 분명히 도와주세요 여기에 대부분의 성능 조언 같은 대답은

감사

+0

왜 내가 요청한 모든 게시물에 대해 부정 투표가 있습니까? 내가 묻는 길. 나는 무례하다. 나는 너희들만큼 똑똑하지 않다. 나는 이것들을 많이 이해하지 못하기 때문에 질문한다. 나는 더 똑똑한 사람들로부터 도움을 구할 수 있다고 생각했다. 그리고 나는 여기에왔다. 질문을하지만.이 계속되면 다시는이 웹 사이트에 다시 오지 않을 것입니다 ...... :(:(:(y는 틀린 의견을 남겨주세요, 내가 그것을 고칠 수 있도록 .. – user3797103

답변

1

"그것은 달려있다." 둘 다 유효하며 내용과 렌더링 패턴에 따라 다릅니다.

여기에 고전적인 성능 참조는 입니다. 현실감있는 Windows : 게임에서 Direct3D 10 그래픽을 최대한 활용하기에서 Gamefest 2007.

많은 상수를 다루는 경우 데이터가 흩어져 있고 업데이트주기의 일부로 수집되는 경우 동적 상수 버퍼의 맵이 더 좋습니다. 모든 상수가 이미 시스템 메모리에 올바르게 배치되어 있다면 UpdateSubResource이 더 나을 것입니다. 동일한 CB를 프레임을 여러 번 재사용하고 Map/Locking하는 경우 UpdateSuResource과 관련하여 덜 문제가되는 Map/Lock으로 '이름 바꾸기'제한에 부딪 힐 수 있습니다. 따라서 여기에 대한 답변은 "따라야합니다"입니다.

그리고 물론이 모든 것들은 동적 업데이트와 동등한 처리를위한 완전히 다른 메커니즘을 가진 DirectX 12를 사용하는 창을 벗어납니다.