gpt4 book ai didi

c++ - 将结构数组传递给 OpenGL

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:13 24 4
gpt4 key购买 nike

我经常使用一个结构来封装一段图形数据,比如颜色/像素。如果它们使用预期的数据类型,我能否将这些数组传递给 OpenGL,或者这是否违反了严格的别名规则?例如:

typedef struct Color {
uint8_t v[4];
} Color;

Color colors[200];

for (int i = 0; i < 200; i++) {
/* populate color data */
}

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, colors);

与抽象程度较低的版本相比:

uint8_t colors[200 * 4];

for (int i = 0; i < 200 * 4; i++) {
/* populate color data */
}

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, colors);

最佳答案

只要没有填充,你就可以让它工作。仔细检查 4 == sizeof (Color)

在某些情况下,您可能还需要将 glPixelStoreiGL_UNPACK_ALIGNMENT 一起使用,让 OpenGL 知道连续行中的数组元素是紧密排列的,末尾没有额外填充连续。

C++ 编译器看不到 OpenGL 和其他库函数中的实际读取操作,因此严格的别名不适用于它们。该规则确实适用于您的代码,但由于您传递的是 const void*,因此编译器必须假定它可以为任何内容设置别名,并且不会在库调用中执行重新排序。

关于c++ - 将结构数组传递给 OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23983404/

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