2011-02-10 4 views
1

저는 Microsoft Direct3D11 튜토리얼을 따르고 있지만 C#과 SlimDX를 사용하고 있습니다. 상수 버퍼를 설정하려고하지만 생성 또는 설정 방법을 모르겠습니다.SlimDX를 사용하여 상수 버퍼 설정

저는 상수 버퍼를 사용하여 3 개의 행렬 (월드, 뷰 및 프로젝션)을 설정하려고했지만 모든 단계, 생성, 데이터 입력 및 셰이더로 전달하는 데 어려움을 겪고 있습니다.

(나는 기본적으로 복사 한) MSDN의 HLSL은 다음 MSDN에

cbuffer ConstantBuffer : register(b0) 
{ 
    matrix World; 
    matrix View; 
    matrix Projection; 
} 

는 C++ 코드는 다음과 같습니다

ID3D11Buffer* g_pConstantBuffer = NULL; 
XMMATRIX g_World; 
XMMATRIX g_View; 
XMMATRIX g_Projection; 

//set up the constant buffer 
D3D11_BUFFER_DESC bd; 
ZeroMemory(&bd, sizeof(bd)); 
bd.Usage = D3D11_USAGE_DEFAULT; 
bd.ByteWidth = sizeof(ConstantBuffer); 
bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER; 
bd.CPUAccessFlags = 0; 
if(FAILED(g_pd3dDevice->CreateBuffer(&bd, NULL, &g_pConstantBuffer))) 
    return hr; 


// 
// Update variables 
// 
ConstantBuffer cb; 
cb.mWorld = XMMatrixTranspose(g_World); 
cb.mView = XMMatrixTranspose(g_View); 
cb.mProjection = XMMatrixTranspose(g_Projection); 
g_pImmediateContext->UpdateSubresource(g_pConstantBuffer, 0, NULL, &cb, 0, 0); 

사람이 SlimDX이 번역하는 방법을 알고 있나요? SlimDX 튜토리얼이나 리소스가 유용 할 수도 있습니다.

감사합니다. 이와 유사한

답변

1

뭔가 작업을해야합니다 :

의미가 있지만, 나는 다음과 같은 오류가 발생할 수
var buffer = new Buffer(device, new BufferDescription { 
    Usage = ResourceUsage.Default, 
    SizeInBytes = sizeof(ConstantBuffer), 
    BindFlags = BindFlags.ConstantBuffer 
}); 

var cb = new ConstantBuffer(); 
cb.World = Matrix.Transpose(world); 
cb.View = Matrix.Transpose(view); 
cb.Projection = Matrix.Transpose(projection); 

var data = new DataStream(sizeof(ConstantBuffer), true, true); 
data.Write(cb); 
data.Position = 0; 

context.UpdateSubresource(new DataBox(0, 0, data), buffer, 0); 
+0

: SlimDX.D3DCompiler.ConstantBuffer 제로 인수를 생성자가없는이 (생성자가 ConstantBuffer (INTPTR 포인터)이며 또한 cb.World, cb.View 및 cb.Projection은 존재하지 않습니다. Visual Studio는이 파일을 오류로 플래그 지정합니다 ("SlimDX.D3DCompiler.ConstantBuffer에는 World 정의가 없습니다."). SlimDX의 최신 안정 빌드를 사용하고 있습니다. 1 주일 전 다운로드) –

+0

이 스 니펫의 ConstantBuffer는 설정하려는 상수가 포함 된 사용자 유형을 나타냅니다. 원하는대로 호출 할 수 있습니다. – MikeP

+0

아아아, 감사합니다. –

관련 문제