私にはちょっとした難問があり、それが私を困惑させています。次のような頂点タイプがすべて異なるシェーダーがいくつかあるとします。
// light shader
struct vertexInputType
{
float4 position : POSITION;
float2 tex : TEXCOORD0;
float3 normal : NORMAL;
};
// color shader
struct vertexInputType
{
float4 position : POSITION;
float4 color : COLOR;
};
// bump mapping shader
struct vertexInputType
{
float4 position : POSITION;
float2 tex : TEXCOORD0;
float3 normal : NORMAL;
float3 binormal : BINORMAL;
float3 tangent : TANGENT;
};
ここで、このすべてのデータが利用可能なモデルがあるとします。データがすべてのデータに対して正しくレイアウトされていないため、すべてを同じバッファーに入れ、選択した 3 つすべてでレンダリングすることは正確にはできません。これを可能にするオプションは 2 つしかありませんが、どちらも同じように苦痛です。
1) RAM にすべてのデータを保持する大きなバッファーを用意し、すべての描画呼び出しで、シェーダー オブジェクトから頂点の種類を取得し、正しい情報で新しい頂点バッファーを作成します。ご覧のとおり、これは恐ろしく遅くなります。
また...
2) モデルの初期化時に複数の ID3D11Buffers を作成できます。1 つのバッファーには位置と色があり、1 つには位置、texcoord、および法線があり、1 つには位置、texcoord、法線、従法線、および接線があり、必要な数のバッファーもあります。モデルが情報を持っているその他の頂点タイプの場合。比較すると、これは利用可能な vram を消去し、これもノーゴにします。
これを行う他の方法は見当たりません。他の d3d 関係者はこれをどのように行っていますか?