Direct3D 頂点バッファー (ID3D11Buffer) の初期化に使用されるメソッドに、頂点データ (基本クラス メンバー) の配列へのポインターを渡そうとしています。
配列へのポインターである変数「v4」を使用したいのですが、ポインターを正しく逆参照していないと思います。誰かが私を正しい方向に向けることができますか?
この割り当てを行うために多くの方法を試しましたが、基本的な配列しか機能しません (「const void *」エラーにキャストすることもあります)。
ポインターを使用するにはどうすればよいですか?
私が問題を抱えている行は... vertexSubResourceData.pSysMem = v1;です。
(ps Using the VS C++ Nov 2012 CTP コンパイラ.. まだリリースされていません..)
*回答済み: Visual Studio 2012 C++ Nov. CTP コンパイラのバグであることを確認しました。クラス外であっても、C++ 11 初期化構文を使用して宣言された Vector 構造体の配列は、正しく解釈されません (もちろん、間違った配列初期化構文を使用していない限り)。また、注意: これは、ポインタに関連付けられた初期化リストにのみ関係します。*
ありがとう!
// 簡略化されたコード
void Triangle::InitializeVertexBuffer()
{
struct V
{
float X, Y, Z; // vertex position
};
// Compiles But doesn't work as desired.
// changed from V* v4 = new V[] // Compiled without range.
// Pointer to this data would ideally come from base static pointer, or file.
V* v4 = new V[3]
{
{ 0.50f, 0.5f, 0.0f },
{ 0.50f, -0.5f, 0.0f },
{ -0.50f, -0.5f, 0.0f },
};
// Compiles and Works to prove compiler issue with initialization lists.
V* vectorList = new V[3];
vectorList[0].X = 0.5f;
vectorList[0].Y = 0.5f;
vectorList[0].Z = 0.00f;
vectorList[1].X = 0.5f;
vectorList[1].Y = -0.5f;
vectorList[1].Z = 0.00f;
vectorList[2].X = -0.5f;
vectorList[2].Y = -0.5f;
vectorList[2].Z = 0.00f;
unsigned int size = sizeof(V) * 3; //sizeof(* Model::Vertices);
// The Description of the Vertex Buffer
D3D11_BUFFER_DESC vertexBufferDescription = {0};
vertexBufferDescription.ByteWidth = size;
vertexBufferDescription.BindFlags = D3D11_BIND_VERTEX_BUFFER;
// Model Data to be transferred to GPU Buffer.
D3D11_SUBRESOURCE_DATA vertexSubResourceData = {0};
vertexSubResourceData.SysMemPitch = 0;
vertexSubResourceData.SysMemSlicePitch = 0;
// Can't figure out how to dereference v4
vertexSubResourceData.pSysMem = vectorList; // works, but using "v4" doesn't.
// vertexSubResourceData.pSysMem = Model::Vertices;
// This is what I /really/ want .. Pointer to vertice array data from base class
NS::DeviceManager::Device->CreateBuffer(
&vertexBufferDescription,
&vertexSubResourceData,
&NS::ModelRenderer::VertexBuffer);
}