스트림 출력을 사용하여 버퍼로 출력하는 지오메트리 셰이더의 출력을 읽으려고합니다.CPU의 지오메트리 셰이더에서 출력 읽기
지오메트리 쉐이더에 의해 사용되는 출력 버퍼는 다음과 같이 설명된다 :
D3D10_BUFFER_DESC vbdesc =
{
numPoints * sizeof(MESH_VERTEX),
D3D10_USAGE_DEFAULT,
D3D10_BIND_VERTEX_BUFFER | D3D10_BIND_STREAM_OUTPUT,
0,
0
};
V_RETURN(pd3dDevice->CreateBuffer(&vbdesc, NULL, &g_pDrawFrom));
지오메트리 쉐이더 한 점에 기초하여 삼각형의 개수를 생성한다 (최대로 점당 12 개 삼각형) 이해하고 있다면 SDK 올바르게 CPU에서 기하학 쉐이더 출력을 읽으려면 준비 리소스를 만들어야합니다.
D3D10_BUFFER_DESC sbdesc =
{
(numPoints * (12*3)) * sizeof(VERTEX_STREAMOUT),
D3D10_USAGE_STAGING,
NULL,
D3D10_CPU_ACCESS_READ,
0
};
V_RETURN(pd3dDevice->CreateBuffer(&sbdesc, NULL, &g_pStaging));
지오메트리 쉐이더는 모든 삼각형을 만들어 수행하고 그릴 수 있습니다 응용 프로그램의 첫 번째 무승부 호출 후 :
이 같은 다른 버퍼 자원 (준비 플래그 설정이 시간)을 선언했다. 그러나이 첫 번째 그리기 호출 후에는 형상 쉐이더에서 정점 출력을 읽을 수 있기를 바랍니다.
I (오른쪽 첫 번째 무승부 호출 후) 이런 식으로 그것을 할 노력하고있어 버퍼 준비 리소스를 사용 :이 컴파일 및 실행시 오류를 제공하지 않습니다
pd3dDevice->CopyResource(g_pStaging, g_pDrawFrom]);
pd3dDevice->Flush();
void *ptr = 0;
HRESULT hr = g_pStaging->Map(D3D10_MAP_READ, NULL, &ptr);
if(FAILED(hr))
return hr;
VERTEX_STREAMOUT *mv = (VERTEX_STREAMOUT*)ptr;
g_pStaging->Unmap();
. 그러나, 나는 어떤 출력을 얻는 것처럼 보이지 않는다.
struct VSSceneStreamOut
{
float4 Pos : POS;
float3 Norm : NORM;
float2 Tex : TEX;
};
과 VERTEX_STREAMOUT는 다음과 같이 선언 : 다음
지오메트리 쉐이더 출력은
struct VERTEX_STREAMOUT
{
D3DXVECTOR4 Pos;
D3DXVECTOR3 Norm;
D3DXVECTOR2 Tex;
};
내가 여기서 뭔가를 놓치고 있습니까? 이런 준비 리소스 버퍼를 생성함으로써 해결