gpt4 book ai didi

c - 当 bufferdata 来自堆时,opengl 不会绘制

转载 作者:行者123 更新时间:2023-11-30 20:27:32 25 4
gpt4 key购买 nike

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

最佳答案

这不是您期望的效果:

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 与数组符号不同。

关于c - 当 bufferdata 来自堆时,opengl 不会绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18944645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com