質問

私は、バッファに出力するストリーム出力を使用しているジオメトリシェーダからの出力を読み込むしようとしています。

ジオメトリシェーダによって使用される出力バッファは次のように記載されている

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 ) );
アプリケーションの最初の描画呼び出した後、ジオメトリシェーダは、すべての三角形を作るに行われ、描画することができます。しかし、この最初のドローコールの後、私はジオメトリシェーダで頂点出力を読み取ることができるようにしたいと思います。

私は(右の最初のドローコールの後に)このようにそれをやろうとしているバッファステージングリソースを使用します:

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; 
}; 

アム私はここで何かが足りない?

役に立ちましたか?

解決

問題は、このようなステージング・リソース・バッファを作成することによって解決

D3D10_BUFFER_DESC sbdesc;
ZeroMemory( &sbdesc, sizeof(sbdesc) );
g_pDrawFrom->GetDesc( &sbdesc );
sbdesc.CPUAccessFlags = D3D10_CPU_ACCESS_READ;
sbdesc.Usage = D3D10_USAGE_STAGING;
sbdesc.BindFlags = 0;
sbdesc.MiscFlags = 0;

V_RETURN( pd3dDevice->CreateBuffer( &sbdesc, NULL, &g_pStaging ) );

問題ByteWidthしていました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top