-2

我正在尝试在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?它必须首先在堆栈上分配吗?

4

1 回答 1

1

这不是您期望的:

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}}
};

老实说,我想知道为什么您的编译器没有出错。除非您使用某些编译器特定的语言扩展,否则您不能在单个语句中为(现有)数组分配一堆新值。您使用的符号仅对数组初始化有效。

除此之外,sizeof指针符号的 与数组符号不同。

于 2013-09-22T16:12:03.237 回答