我正在尝试将指向Vertex Data数组(基类成员)的指针传递给用于初始化Direct3D顶点缓冲区的方法(ID3D11Buffer)。
我想使用变量" v4",指向数组的指针,但我想我没有正确地解引用指针。有人能指出我正确的方向吗?
我已经尝试了很多方法来完成这项任务,但我只能得到一个基本的数组工作,(有时我最终会转换为" const void *"错误)。
我如何使用指针?
我遇到的问题是...... vertexSubResourceData.pSysMem = v1;
(p.s。使用V.S. C ++ 2012年11月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);
}
答案 0 :(得分:1)
当你写V* v4 = new V[]{...};
时,它是非法的C ++。 CTP编译器正在接受格式错误的代码。试试V* v4 = new V[3]{...};
检查C ++标准,来自5.3.4p1:
[expression] attribute-specifier-seqopt
因此,[]
中的表达式似乎是必需。我相信new V[]
是编译器的扩展(仍在检查中)。
正如ildjarn指出的那样,你希望vertexSubResourceData.pSysMem = v4;
为&4
,你会给你指针的地址,而不是数组。
<强>更新强>
我认为这是编译器中的一个错误。尝试使用旧的C ++ 03语法:V* v4 = new V[3]; v4[0] = ...;
如果可行,那肯定是一个错误。