C++ -

2014-03-05 1 views
0

은 가정하자 나는 다음 클래스가이 데이터를 재 해석하는 가장 빠른 방법 : C++ -

class DX11ConstantBuffer 
{ 
    public: 
     ID3D11Buffer *pData; 
}; 

내가하는 기능이 클래스의 배열을받을를 :

DX11ConstantBuffer **pp 

내 래퍼 (DX11ConstantBuffer)가 포함되어 있습니다를 ID3D11Buffer에 대한 포인터. 다음 함수 :

pDevcon->VSSetConstantBuffers 

ID3D11Buffer의 배열에 대한 포인터를 필요

ID3D11Buffer *const *ppConstantBuffers 

기능으로 만들 수있는 가장 빠른 방법 일 것입니다 무슨, 내 자신의 래퍼의 배열에 대한 포인터를 수신 그것으로부터 ID3D11Buffer의 배열? 이를 명확하게하기 위해 :

void ...(DX11ConstantBuffer **pp, ....) 
{ 
    ID3D11Buffer** _pp = GetAllID3D11BufferElementsFrom(pp); 
    pDevcon->VSSetConstantBuffers(..., _pp, ...); 
} 

이 기능은 각 프레임마다 여러 번 호출해야합니다.

+0

"이 클래스의 배열을 함수'DX11ConstantBuffer ** pp'에서 얻습니다. 배열은 일반적으로'DX11ConstantBuffer * p' 나'DX11ConstantBuffer a []'입니다. 호출 된 funciton이 그것을 수정할 수있는 포인터) 또는 배열 배열이 있습니다. –

답변

1

가장 빠른 방법은 VSSetConstantBuffers을 호출하기 전에 ID3D11Buff*의 인접 배열을 유지 관리하는 것입니다.이 경우 std::vector<ID3D11Buff*>이 필요합니다. DX11ConstantBuffer::pData이 설정되거나 DX11ConstantBuffer의 소멸자가 실행될 때마다 vector을 업데이트 할 수 있으며, 주위에서 더 나은 보장을 원할 경우 pData을 비공개로 설정하고 변경 사항을 안정적으로 가로 챌 수있는 접근 함수를 가질 수 있습니다.

적극적으로하지 않으면 현재 객체로 DX11ConstantBuffer을 반복하고 ID3D11Buf*을 복사하여 배열/벡터를 하나씩 복사합니다.

+0

이것은 내가 한 일이며, 사용자가 배열을 전송할 준비가되어 있어도 괜찮습니다. 고맙습니다. –

1

랩퍼가 포함하는 유형에서 래퍼를 상속시킬 수 있습니다.

+0

생각해 보았지만 ID3D11Buffer 클래스가 알려져 있습니다.이 클래스를 사용하는 사용자는 실제로 ID3D11Buffer의 정의가 없어야합니다. ID3D11Buffer는 클래스 프로토 타입 일뿐입니다. (또는 구조체가 기억이 안 나옵니다.) –