효과를 복제하면 효과의 거의 동일한 두 번째 복사본이 만들어집니다. 정확하지 않은 이유에 대한 설명은 다음 단일 한정자를 참조하세요. 효과 런타임이 스레드 안전성이 없기 때문에, 여러 스레드에서 효과 프레임워크를 사용하려는 경우에는 효과의 두 번째 복사본이 유용합니다.
디바이스 컨텍스트도 스레드로부터 안전하지 않으므로 서로 다른 스레드가 ID3DX11EffectPass::Apply 메서드에 서로 다른 디바이스 컨텍스트를 전달해야 합니다.
효과는 다음 구문을 사용하여 복제할 수 있습니다.
ID3DX11Effect* pClonedEffect = NULL;
UINT Flags = D3DX11_EFFECT_CLONE_FORCE_NONSINGLE;
HRESULT hr = pEffect->CloneEffect( Flags, &pClonedEffect );
위의 예제에서 복제된 복사본은 원래 효과의 상태에 관계없이 원래 효과와 동일한 상태를 캡슐화합니다. 특히:
- pEffect가 최적화되면 pCloned Effect가 최적화됩니다.
- pEffect에 일부 사용자 관리 변수가 있는 경우 pCloned Effect에는 동일한 사용자 관리 변수가 있습니다(아래의 단일 설명 참조).
- pEffect의 보류 중인 변수 업데이트(호출 적용이 디바이스 상태를 업데이트할 때까지)는 pClonedEffect에서 보류 중입니다.
다음 Direct3D 11 디바이스 개체는 효과 프레임워크에서 변경할 수 없거나 업데이트되지 않으므로 복제된 효과는 원래 효과와 동일한 개체를 가리킵니다.
- 상태 블록 개체(ID3D11BlendState, ID3D11RasterizerState, ID3D11DepthStencilState, ID3D11SamplerState)
- 셰이더
- 클래스 인스턴스
- 텍스처(텍스처 버퍼 포함 안 됨)
- 순서가 지정되지 않은 액세스 뷰
다음 Direct3D 11 디바이스 개체는 변경이 불가능하고 효과 런타임에 의해 수정됩니다(복제된 효과에서 사용자 관리 또는 단일 개체가 아닌 경우). 이러한 개체의 새 복사본은 단일이 아닌 경우 만들어집니다.
- 상수 버퍼
- 텍스처 버퍼
단일 상수 버퍼 및 텍스처 버퍼
이 설명은 상수 버퍼와 텍스처 모두에 적용되지만 상수 버퍼는 읽기 용이한 것으로 간주됩니다.
상수 버퍼가 하나의 스레드에서만 업데이트되지만 복제된 효과에 의해 설정된 디바이스 상태가 이 데이터를 사용하는 경우가 있을 수 있습니다. 예를 들어, 주 효과는 세계와 뷰 행렬을 업데이트할 수 있습니다. 이는 복제된 효과의 셰이더에서 참조되며, 이 경우 복제된 효과는 세계와 뷰 행렬을 변경하지 않습니다. 이러한 경우 복제된 효과는 다시 만드는 대신 현재 상수 버퍼를 참조해야 합니다.
이 원하는 결과를 달성하는 방법에는 두 가지가 있습니다.
- 복제된 효과에 ID3DX11EffectConstantBuffer::SetConstantBuffer를 사용하여 사용자 관리형으로 만듭니다.
- HLSL 코드에서 상수 버퍼를 "단일"으로 표시하여 복제 후 효과 런타임이 사용자 관리로 처리되도록 합니다.
위의 두 메서드 간에는 두 가지 차이점이 있습니다. 먼저 메서드 1에서 SetConstantBuffer가 호출되기 전에 새 ID3D11Buffer가 생성되고 사용자가 생성됩니다. 또한 복제된 효과에서 UndoSetConstantBuffer를 호출한 후 메서드 1의 변수는 새로 만든 버퍼(적용 시 업데이트되는 효과)를 가리키고 메서드 2의 변수는 원래 버퍼를 계속 가리킵니다(Apply에서는 업데이트되지 않음).
HLSL에서 다음 예제를 참조하세요.
cbuffer ObjectData
{
float4 Position;
};
single cbuffer ViewData
{
float4x4 ViewMatrix;
};
복제하는 동안 복제된 효과는 ObjectData에 대한 새 ID3D11Buffer를 만들고 Apply에서 해당 내용을 채우지만 ViewData에 대한 원래 ID3D11Buffer를 참조합니다. 복제 프로세스에서 D3DX11_EFFECT_CLONE_FORCE_NONSINGLE 플래그를 설정하여 단일 한정자를 무시할 수 있습니다.
관련 항목