我在一个名为ModelClass的类中有一个函数,它执行以下操作:
bool ModelClass::SetVertices(ID3D11Device* device, VertexType* vertices)
{
// Error catching variable
HRESULT result;
// Setup the vertex buffer description
D3D11_BUFFER_DESC vertexBufferDesc;
ZeroMemory(&vertexBufferDesc, sizeof(vertexBufferDesc));
vertexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
vertexBufferDesc.ByteWidth = sizeof(vertices)*24;
vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
vertexBufferDesc.CPUAccessFlags = 0;
vertexBufferDesc.MiscFlags = 0;
//vertexBufferDesc.StructureByteStride = 0;
// Give the subresource structure a pointer to the vertex data.
D3D11_SUBRESOURCE_DATA vertexData;
ZeroMemory(&vertexData, sizeof(vertexData));
vertexData.pSysMem = vertices;
vertexData.SysMemPitch = 0;
vertexData.SysMemSlicePitch = 0;
// Create the Vertex Buffer
result = device->CreateBuffer(&vertexBufferDesc, &vertexData, &m_vertexBuffer);
if (FAILED(result))
{
return false;
}
return true;
}
运行这个,给我一条错误消息,说“Engine.exe中的0x00E445A2处的未处理异常:0xC0000005:访问冲突读取位置0x00000000。”,visual studio指向result = ...
行。我不能,因为我的生活,弄清楚它为什么这样做。我甚至不知道还有什么要发布,所以我只列举我认为相关的内容:
ModelClass::ModelClass(ID3D11Device* device, VertexType* vertices, unsigned long* indices)
{
m_vertexBuffer = 0;
m_indexBuffer = 0;
SetVertices(device, vertices);
SetIndices(device, indices);
}
ModelClass* cube1 = new ModelClass(d3d11Device, v, indices);
定义类。m_vertexBuffer
变量在类头文件中声明为ID3D11Buffer *m_vertexBuffer
,并在类构造函数中初始化为零。请你,如果你想看到剩下的文件,只需发表评论,如果有必要,我会把整个事情粘贴到一起,这已经把我推到了墙上
答案 0 :(得分:0)
很棒的网站,RasterTek。
无论如何,问题是你在全局范围内初始化这个东西 - 在初始化d3d11Device
之前。当程序以任意顺序启动时,在全局范围内声明的所有内容都会立即生成。另一方面,程序启动时d3d11Device
未初始化。
将其从全局范围中删除或重新添加教程中的Initialize
函数。问题解决了。