我正在尝试在opengl中绘制一些三角形。这是我尝试的第一种方法,这个方法有效。
...
StaticVertexData vertices[6] = {
{{ 255, 0, 0, 255}, { -0.90, -0.90, 0.0f}},
{{ 0, 255, 0, 255}, { 0.85, -0.90, 0.0f}},
{{ 0, 0, 255, 255}, { -0.90, 0.85, 0.0f}}
}
...
glGenBuffers(numBuffers, buffers);
glBindBuffer(GL_ARRAY_BUFFER, buffers[ArrayBuffer]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
&vertices[0], GL_DYNAMIC_DRAW);
...
这很好用,我在屏幕上得到一个三角形。
但是,如果我使用 malloc 在堆上分配顶点数组,则窗口为空白。
...
StaticVertexData* vertices = (StaticVertexData*) malloc(verticesCount*sizeof(StaticVertexData));
vertices = (StaticVertexData[6]) {
{{ 255, 0, 0, 255}, { -0.90, -0.90, 0.0f}},
{{ 0, 255, 0, 255}, { 0.85, -0.90, 0.0f}},
{{ 0, 0, 255, 255}, { -0.90, 0.85, 0.0f}}
};
...
// same as in the previous example
为什么是这样?是否无法将数据从堆发送到gpu?它必须首先在堆栈上分配吗?